diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..3fdefc00 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +aihelpsukraine.cc \ No newline at end of file diff --git a/_config.yml b/_config.yml index bebd8395..9f13b481 100644 --- a/_config.yml +++ b/_config.yml @@ -13,19 +13,19 @@ # you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. # You can create any custom variable you would like, and they will be accessible # in the templates via {{ site.myvariable }}. -title: USS 2021 -tagline: UNIQUE Student Symposium 2021 -email: unique.student.symposium@gmail.com -twitter_username: ai_unique -github_username: uss2021 +title: AI Helps Ukraine +tagline: AI Helps Ukraine Charity Conference +email: ai.helps.ukraine@mila.quebec +twitter_username: alhelpsukraine +github_username: aihelpsukraine twitter: - - username: ai_unique -description: USS (UNIQUE Student Symposium) is a student-oriented, student-organized conference at the crossroads of neuroscience and AI research. The goal is to provide graduate students in those fields with an event tailor made to their needs and presenting the state of the art of what is done in neuro-AI research. -author: UNIQUE Student Symposium 2021 + - username: alhelpsukraine +description: A student-run charity conference on AI for good to raise funds for medical equipment to help Ukraine +author: AI Helps Ukraine baseurl: "" url: "" -logo: assets/img/unique-logo-white-favicon.png -favicon: assets/img/unique-logo-white-favicon.png +logo: assets/img/logo/logo_150dpi.png +favicon: assets/img/logo/icon_square_transparent.png # Reading Files include: @@ -48,7 +48,7 @@ defaults: type: "pages" values: layout: page - hero_image: ./assets/img/network-372248-grad.png + hero_image: ./assets/img/bg-sunflowers-005bbbc4-crop.png # defaults: # - scope: @@ -67,9 +67,8 @@ markdown: kramdown plugins: - jekyll-feed - jekyll-sitemap - - jekyll-seo-tag + - jekyll-seo-tag # Theme: Bulma Clean Theme # theme: bulma-clean-theme remote_theme: chrisrhymes/bulma-clean-theme - diff --git a/_data/datesdict.yml b/_data/datesdict.yml new file mode 100644 index 00000000..c7a093f2 --- /dev/null +++ b/_data/datesdict.yml @@ -0,0 +1,18 @@ +- code: 20221026 + readable: October 26th (Wednesday) +- code: 20221103 + readable: November 3rd (Thursday) +- code: 20221107 + readable: November 7th (Monday) +- code: 20221111 + readable: November 11th (Friday) +- code: 20221114 + readable: November 14th (Monday) +- code: 20221117 + readable: November 17th (Thursday) +- code: 20221121 + readable: November 21th (Monday) +- code: 20221124 + readable: November 24th (Thursday) +- code: 20221205 + readable: December 5th (Monday) diff --git a/_data/donors.yml b/_data/donors.yml new file mode 100644 index 00000000..8d114e5f --- /dev/null +++ b/_data/donors.yml @@ -0,0 +1,9 @@ +- fullname: Ivado Labs + isConfirmed: False + logo: ivado_labs.jpg + alttext: Logo of Ivado Labs + location: Montreal + areas: AI, Business + motto: Discover how AI can transform your business + website: https://ivadolabs.com/en/ + twitter: "none" diff --git a/_data/navigation.yml b/_data/navigation.yml index dd222553..b8b98d29 100644 --- a/_data/navigation.yml +++ b/_data/navigation.yml @@ -1,10 +1,14 @@ +- name: About + link: /about.html - name: Speakers link: /speakers.html - name: Schedule link: /schedule.html +- name: Who we support + link: /who_we_support - name: Team link: /team.html -- name: About - link: /about.html +- name: Donations + link: /donate.html - name: Code of Conduct link: /coc.html diff --git a/_data/partners.yml b/_data/partners.yml new file mode 100644 index 00000000..5c8f355a --- /dev/null +++ b/_data/partners.yml @@ -0,0 +1,6 @@ + - photo: institute.png + link: https://unci.org.ua/en/ + - photo: Mila_LOGO.png + link: https://mila.quebec/en/ + - photo: UAMC_logo_clean.png + link: https://uams.ca/ \ No newline at end of file diff --git a/_data/schedule.yml b/_data/schedule.yml index dc1587a3..1a6adcd6 100644 --- a/_data/schedule.yml +++ b/_data/schedule.yml @@ -1,171 +1,33 @@ - name: Opening remarks - date: 20210607 - time_start: "13:00" - time_end: "13:15" - platforms: - - Crowdcast+https://www.crowdcast.io/e/2u50rd1n/1 - - YouTube+https://youtu.be/g_5-h7QPSkg -- name: Keynote talk - date: 20210607 - time_start: "13:15" - time_end: "14:15" - platforms: - - Crowdcast+https://www.crowdcast.io/e/2u50rd1n/2 - - YouTube+https://youtu.be/DBPuwN_Hdic -- name: Lightning talks - date: 20210607 - time_start: "14:20" - time_end: "14:50" - platforms: - - Crowdcast+https://www.crowdcast.io/e/2u50rd1n/3 - - YouTube+https://youtu.be/NZuI3IzxNu8 -- name: Lightning talks Q&A + Social - date: 20210607 - time_start: "14:50" - time_end: "15:10" - platforms: - - Gather.town+https://gather.town/i/e7LPsVjS -- name: Active break - date: 20210607 - time_start: "15:05" - time_end: "15:10" - session: activebreak - platforms: - - Gather.town+https://gather.town/i/e7LPsVjS - - Crowdcast+https://www.crowdcast.io/e/2u50rd1n/4 -- name: Go to Crowdcast - date: 20210607 - time_start: "15:10" - time_end: "15:15" - session: break -- name: Keynote talk - date: 20210607 - time_start: "15:15" - time_end: "16:15" - platforms: - - Crowdcast+https://www.crowdcast.io/e/2u50rd1n/5 - - YouTube+https://youtu.be/jLsAnQN69mQ -- name: Social break - date: 20210607 - time_start: "16:15" - time_end: "16:25" - platforms: - - Gather.town+https://gather.town/i/e7LPsVjS - session: socialbreak -- name: Active break - date: 20210607 - time_start: "16:20" - time_end: "16:25" - session: activebreak - platforms: - - Gather.town+https://gather.town/i/e7LPsVjS - - Crowdcast+https://www.crowdcast.io/e/2u50rd1n/6 -- name: Go to Crowdcast - date: 20210607 - time_start: "16:25" - time_end: "16:30" - session: break + time_start: "09:00" + time_end: "09:15" +- name: Keynote talk I + time_start: "09:15" + time_end: "10:15" +- name: Coffee Break + time_start: "10:15" + time_end: "10:30" +- name: Contributed talks by AI for Good startups + time_start: "10:30" + time_end: "11:30" - name: Panel discussion - date: 20210607 - time_start: "16:30" - time_end: "17:15" - session: panel - platforms: - - Crowdcast+https://www.crowdcast.io/e/2u50rd1n - - YouTube+https://youtu.be/FIsNN2Fc1vc -- name: Closing remarks - date: 20210607 - time_start: "17:15" - time_end: "17:30" - platforms: - - Crowdcast+https://www.crowdcast.io/e/2u50rd1n - - YouTube+https://youtu.be/pkMXuO_tChY - -- name: Opening remarks - date: 20210608 - time_start: "13:00" - time_end: "13:15" - platforms: - - Gather.town+https://gather.town/i/e7LPsVjS -- name: Round table - date: 20210608 - time_start: "13:15" + time_start: "11:30" + time_end: "12:30" +- name: Lunch Break + time_start: "12:30" time_end: "14:00" - session: roundtable - platforms: - - Zoom A+https://us02web.zoom.us/j/82032866297 -- name: Focused discussion - date: 20210608 - time_start: "13:15" - time_end: "14:00" - session: discussion - platforms: - - Zoom B+https://us02web.zoom.us/j/88008045355 -- name: Social break - date: 20210608 +- name: Keynote talk II time_start: "14:00" - time_end: "14:15" - platforms: - - Gather.town+https://gather.town/i/e7LPsVjS - session: socialbreak -- name: Workshop - date: 20210608 - time_start: "14:15" - time_end: "15:00" - session: workshop - platforms: - - Zoom A+https://us02web.zoom.us/j/82032866297 -- name: Focused discussion - date: 20210608 - time_start: "14:15" time_end: "15:00" - session: discussion - platforms: - - Zoom B+https://us02web.zoom.us/j/88008045355 -- name: Social break - date: 20210608 +- name: Coffee Break time_start: "15:00" - time_end: "15:05" - platforms: - - Gather.town+https://gather.town/i/e7LPsVjS - session: socialbreak -- name: Active break - date: 20210608 - time_start: "15:05" - time_end: "15:10" - session: activebreak - platforms: - - Gather.town+https://gather.town/i/e7LPsVjS -- name: Go to the next session - date: 20210608 - time_start: "15:10" - time_end: "15:15" - session: break - platforms: - - Gather.town+https://gather.town/i/e7LPsVjS -- name: Workshop - date: 20210608 - time_start: "15:15" - time_end: "16:00" - session: workshop - platforms: - - Zoom A+https://us02web.zoom.us/j/82032866297 -- name: Focused discussion - date: 20210608 - time_start: "15:15" - time_end: "16:00" - session: discussion - platforms: - - Zoom B+https://us02web.zoom.us/j/88008045355 + time_end: "15:30" +- name: Keynote talk III + time_start: "15:30" + time_end: "16:30" - name: Closing remarks - date: 20210608 - time_start: "16:00" - time_end: "16:15" - platforms: - - Gather.town+https://gather.town/i/e7LPsVjS -- name: Social + Talent Show - date: 20210608 - time_start: "16:15" - time_end: "16:45" - platforms: - - Gather.town+https://gather.town/i/e7LPsVjS + time_start: "16:30" + time_end: "17:00" +- name: Networking + time_start: "17:00" + time_end: "19:00" diff --git a/_data/settings.yml b/_data/settings.yml new file mode 100644 index 00000000..1f0eada7 --- /dev/null +++ b/_data/settings.yml @@ -0,0 +1,8 @@ +talk: + isLive: False + speaker: Hannah Kerner + +donations: + spreadsheetURL: https://docs.google.com/spreadsheets/d/e/2PACX-1vTXKpZ8iB5Nz6mHl5iYUAA68DU1D-gCnwuDREnVULI9JrOnh1CF8U1RF6zDbVfrkw/pub?gid=1443797343&single=true&output=csv + target: 1000000 + targetText: "1,000,000" diff --git a/_data/speakers.yml b/_data/speakers.yml index 577aaa9c..b8c76ffb 100644 --- a/_data/speakers.yml +++ b/_data/speakers.yml @@ -1,210 +1,347 @@ -- fullname: Megan Peters - pronouns: "she/her" - affiliations: - - Cognitive Sciences, UC Irvine - - CIFAR Global Scholar - - Azrieli Program in Brain, Mind, & Consciousness - nametitle: Ph.D. - bio: I am an Assistant professor at the UC Irvine Department of Cognitive Sciences. I'm also a Cooperating Researcher in the Department of Decoded Neurofeedback at Advanced Telecommunications Research Institute International in Kyoto, Japan. Prior to joining UCI I was on the faculty at UC Riverside in the Department of Bioengineering. I received my Ph.D. in computational cognitive neuroscience (psychology) from UCLA and then was a postdoc there as well. My research aims to reveal how the brain represents and uses uncertainty, and performs adaptive computations based on noisy, incomplete information. I specifically focus on how these abilities support metacognitive evaluations of the quality of (mostly perceptual) decisions, and how these processes might relate to phenomenology and conscious awareness. I use neuroimaging, computational modeling, machine learning and neural stimulation techniques to study these topics. - position: Assistant Professor - photo: megan_peters.jpg - alttext: Megan Peters - title: Linking metacognition and consciousness with computational models - abstract: Few people tackle the neural or computational basis of qualitative experience (Frith, 2019). Why? One major reason is that science and philosophy have both struggled to propose how we might even begin to start studying it. Here I propose that metacognitive computations, and the subjective feelings that go along with them, give us a solid starting point. Specifically, perceptual metacognition possesses unique properties that provide a powerful and unique opportunity for studying the neural and computational correlates of subjective experience. I will describe these properties, and discuss how computational models of metacognition can be used to an empirically-tractable early step in identifying the generative process that constructs qualitative experience, drawing on empirical data. By applying decades of developments in computational cognitive science and formal computational model comparisons to the specific properties of perceptual metacognition, we may reveal new and exciting insights about how the brain constructs subjective conscious experiences and the nature of those experiences themselves. - sessions: - - "202106071515" - - "202106071630panel" +- fullname: Timnit Gebru + affiliations: + - DAIR, Distributed AI Research Institute + nametitle: Dr. + position: Founder and Executive Director of DAIR + bio: "Timnit Gebru is the founder and executive director of the Distributed Artificial Intelligence Research Institute (DAIR). Prior to that she was fired by Google in December 2020 for raising issues of discrimination in the workplace, where she was serving as co-lead of the Ethical AI research team. She received her PhD from Stanford University, and did a postdoc at Microsoft Research, New York City in the FATE (Fairness Accountability Transparency and Ethics in AI) group, where she studied algorithmic bias and the ethical implications underlying projects aiming to gain insights from data. Timnit also co-founded Black in AI, a nonprofit that works to increase the presence, inclusion, visibility and health of Black people in the field of AI, and is on the board of AddisCoder, a nonprofit dedicated to teaching algorithms and computer programming to Ethiopian highschool students, free of charge." + photo: timnit_gebru.jpg + alttext: Dr. Timnit Gebru + title: "Community rooted, independent AI research" + abstract: "The Distributed Artificial Intelligence Research Institute (DAIR) was launched in December 2021 by Timnit Gebru as a space for independent, community-rooted AI research, free from Big Tech’s pervasive influence. Gebru believes that the harms embedded in AI technology are preventable and that when its production and deployment include diverse perspectives and deliberate processes, it can be put to work for people, rather than against them. With DAIR, Gebru aims to create an environment that is independent from the structures and systems that incentivize profit over ethics and individual well-being. In this talk, Gebru will discuss why she founded DAIR and what she hopes this interdisciplinary, community-based, global network of AI researchers can accomplish. She will discuss the incentive structures that make it difficult to perform ethical AI research, and give examples of how DAIR is hoping to forge a different path." + session: virtual + date: 20221026 + time: "16:30" tags: - - name: Relevant paper - link: https://psyarxiv.com/bqfr6/ - name: Website - link: https://faculty.sites.uci.edu/cnclab/ + link: https://www.dair-institute.org/about - name: Twitter - link: https://twitter.com/meganakpeters -- fullname: Pim Haselager - affiliations: - - Donders Institute for Brain, Cognition and Behaviour - - Department of Artificial Intelligence, Radboud University, Nijmegen - nametitle: Dr. - position: Associate Professor - bio: "I obtained master degrees in philosophy and psychology, and received my PhD in 1995 at the Free University of Amsterdam, the Netherlands. Currently I am associate professor (Theoretical Cognitive Science) at the Donders Institute for Brain, Cognition and Behaviour, at the Radboud University Nijmegen. My research focuses on the implications of Cognitive neuroscience and Artificial Intelligence for society and human self-understanding. I investigate the ethical and societal implications of research in, and the ensuing technologies of, CNS and AI, such as Robotics, Brain-Computer Interfacing, and Deep Brain Stimulation. I am particularly interested in the integration of empirical work (i.e. experimentation, computational modeling, and robotics) with philosophical issues regarding knowledge, identity, agency, responsibility and intelligent behavior. I have published in journals such as Nature: Biotechnology, Science and Engineering Ethics, American Journal of Bioethics, Neuroethics, Journal of Cognitive Neuroscience and Journal of Social Robotics." - photo: pim_haselager.jpg - alttext: W.F.G. Haselager (Pim) - title: "Unifying AI & Neuroscience: A great idea! But to what purpose?" - abstract: "The combination of Artificial Intelligence (AI) and Neuroscience (NS) has great promise. It can lead to various practical applications in a wide variety of fields, ranging from micro-targeted marketing to clinical therapy and law. At the same time, the combined power of AI and NS leads to serious questions about what it is that we would like to achieve and why. It also leads to questions about how we can exert meaningful human control over the ensuing technologies. This is especially urgent given the many challenges humanity is facing this century, from inequity to ecology. It seems fair to say that our current ways to address these challenges have not been, to put it mildly, particularly successful. AI and NS enable us to see our human strengths and weaknesses with greater clarity, and build more effective technology accordingly. But the potentially exploitative power of this combination of sciences does present us with the challenge to apply it wisely. I will suggest that we are in need of a more profound reflection on what our sciences show us about ourselves, what our technology enables us to do with that, and what, apparently, we aim to do with those insights and applications." - sessions: - - "202106071315" - - "202106071630panel" + link: https://twitter.com/timnitGebru + streams: + - name: Crowdcast + link: https://www.crowdcast.io/c/ai-helps-ukraine/hDuFo + - name: YouTube + link: https://www.youtube.com/watch?v=QT1htqtkknA + skip: False + +- fullname: Yoshua Bengio + affiliations: + - Mila, Quebec AI Institute + - DIRO, Université de Montréal + nametitle: Prof. + position: Scientific Director of Mila, Turing Award 2018 + bio: "Recognized worldwide as one of the leading experts in artificial intelligence, Yoshua Bengio is most known for his pioneering work in deep learning, earning him the 2018 A.M. Turing Award, “the Nobel Prize of Computing,” with Geoffrey Hinton and Yann LeCun. + + He is a Full Professor at Université de Montréal, and the Founder and Scientific Director of Mila – Quebec AI Institute. He co-directs the CIFAR Learning in Machines & Brains program as Senior Fellow and acts as Scientific Director of IVADO. + + In 2019, he was awarded the prestigious Killam Prize and in 2022, became the computer scientist with the highest h-index in the world. He is a Fellow of both the Royal Society of London and Canada, Knight of the Legion of Honor of France and Officer of the Order of Canada. + + Concerned about the social impact of AI and the objective that AI benefits all, he actively contributed to the Montreal Declaration for the Responsible Development of Artificial Intelligence." + photo: yoshua_bengio.jpg + alttext: Prof. Yoshua Bengio + title: "AI to explore molecular space and fight pandemics and climate change" + abstract: "Machine learning research is expanding its reach, beyond the traditional realm of the tech industry and into the activities of other scientists, opening the door to truly transformative advances in these disciplines. In this lecture I will focus on two aspects, modeling and experimental design, that are intertwined in the theory-experiment-analysis active learning loop that constitutes a core element of the scientific methodology. Computers will be necessary to go beyond the currently purely manual research loop and take advantage of high-throughput experimental setups and large-scale experimental datasets. I will discuss methods related to active learning, reinforcement learning, generative modeling, Bayesian ML, amortized variational learning and causal discovery. I will discuss the notion of epistemic uncertainty and how to estimate it. I will motivate generative policies that can sample a diverse set of candidate solutions to a problem, be it for proposing new experiments or causal hypotheses. Finally, I will describe current research to help us with these questions based on a new deep learning probabilistic framework called GFlowNets and how we plan to apply these in areas of great societal need like the unmet challenge of antimicrobial resistance or the discovery of new materials to help fight climate change." + session: virtual + date: 20221103 + time: "16:00" + tags: + - name: Website + link: https://yoshuabengio.org/ + streams: + - name: Crowdcast + link: https://www.crowdcast.io/c/ai-helps-ukraine/stAnz + - name: YouTube + link: https://www.youtube.com/watch?v=uOzCKnTDvqY + skip: False + +- fullname: Yoshua Bengio + affiliations: + - Mila, Quebec AI Institute + - DIRO, Université de Montréal + nametitle: Prof. + position: Scientific Director of Mila, Turing Award 2018 + bio: "Recognized worldwide as one of the leading experts in artificial intelligence, Yoshua Bengio is most known for his pioneering work in deep learning, earning him the 2018 A.M. Turing Award, “the Nobel Prize of Computing,” with Geoffrey Hinton and Yann LeCun. + + He is a Full Professor at Université de Montréal, and the Founder and Scientific Director of Mila – Quebec AI Institute. He co-directs the CIFAR Learning in Machines & Brains program as Senior Fellow and acts as Scientific Director of IVADO. + + In 2019, he was awarded the prestigious Killam Prize and in 2022, became the computer scientist with the highest h-index in the world. He is a Fellow of both the Royal Society of London and Canada, Knight of the Legion of Honor of France and Officer of the Order of Canada. + + Concerned about the social impact of AI and the objective that AI benefits all, he actively contributed to the Montreal Declaration for the Responsible Development of Artificial Intelligence." + photo: yoshua_bengio.jpg + alttext: Prof. Yoshua Bengio + session: inperson + time: "11:30" tags: - - name: Relevant paper - link: https://www.tandfonline.com/doi/full/10.1080/21507740.2020.1740353 - name: Website - link: http://www.socsci.ru.nl/haselag/index.html + link: https://yoshuabengio.org/ + skip: True + +- fullname: Hannah Kerner + affiliations: + - School of Computing and Augmented Intelligence, University of Maryland + - NASA, Harvest + nametitle: Prof. + position: Assistant Professor at the School of Computing and Augmented Intelligence at University of Maryland + bio: "Hannah Kerner is Assistant Professor in the School of Computing and Augmented Intelligence at the University of Maryland. Her research focuses on developing and advancing machine learning systems needed to address the world’s most pressing challenges, including food security, climate change and space exploration. + + As the machine learning lead and U.S. domestic co-lead for the NASA Harvest program, she is deploying research methods in real operations for stakeholders in industry, government and humanitarian organizations. + + In 2021, she was recognized on the Forbes 30 Under 30 list in science. + + Hannah Kerner also communicates challenges for developing ML applications for real-world problems and is passionate about advancing opportunities for people who have traditionally been underrepresented in computer science." + photo: hannah_kerner.jpg + alttext: Prof. Hannah Kerner + session: virtual + date: 20221111 + time: "16:00" + tags: + - name: Website + link: https://hannah-rae.github.io/ - name: Twitter - link: https://twitter.com/Pim_Haselager -- fullname: Stefanie Blain-Moraes - affiliations: - - McGill University, School of Physical & Occupational Therapy - bio: "Dr. Blain-Moraes runs the Biosignal Interaction and Personhood Technology (BIAPT) lab at McGill. Her lab applies physiological signal processing techniques and assistive technology design principles to address the needs of non-communicative individuals and their care providers." - position: Assistant Professor - photo: stefanie_blain-moraes.jpg - alttext: Stefanie Blain-Moraes - title: Panel Discussion - sessions: - - "202106071630panel" + link: https://twitter.com/hannah_kerner + streams: + - name: Crowdcast + link: https://www.crowdcast.io/c/ai-helps-ukraine + skip: False + +- fullname: Inbal Becker-Reshef + affiliations: + - NASA Harvest + - Department of Geographical Sciences, University of Maryland + nametitle: Prof. + position: Director of NASA Harvest, Professor at University of Maryland + bio: "Dr. Becker-Reshef is the Director of NASA Harvest (NASA’s Applied Science Program on Food Security and Agriculture), and Research Professor at the University of Maryland. Her work is focused on the application of Earth Observations for agricultural monitoring from the field to global scales, supporting decisions in food security, sustainability, and agricultural markets. + + She worked closely with national and international partners to initiate the GEOGLAM (GEO Global Agricultural Monitoring) Program, adopted by the G20 in 2011 under the action plan on food price volatility and agriculture. Within this program she is a Program Scientists at the GEOGLAM Secretariat, leading the Crop Monitor initiative. She is a member of the G20 AMIS Steering Committee, UN 50X2030 Technical Advisory Group, US National Committee for IIASA, GEOGLAM-Committee on Earth Observation Satellites (CEOS) Technical Team, NASA Water Resources Applied Science Team, and led the NASA SERVIR Food Security and Agriculture Theme of the Applied Sciences Team (2016-2019). + + Her background is in soil sciences and remote sensing and she received her Ph.D in 2012 in Geographical Sciences from the University of Maryland. + + She was recognized by the US State Department, for her work on Food Security and Technologies winning US Asia-Pacific Economic Cooperation (APEC) Science Prize for Innovation, Research, and Education (ASPIRE) awarded by John Holdren, Former Assistant to the President for Science and Technology." + + photo: inbal_becker-reshef.jpg + alttext: Prof. Inbal Becker-Reshef + session: virtual + date: 20221111 + time: "16:00" tags: - name: Website - link: https://www.mcgill.ca/spot/stefanie-blain-moraes -- fullname: Irina Rish - affiliations: - - Université de Montréal - - Mila, Québec AI Institute - - Canada AI Chair - bio: "Irina Rish is an Associate Professor in the Computer Science and Operations Research Department at the Université de Montréal (UdeM) and a core faculty member of MILA - Quebec AI Institute. She holds Canada Excellence Research Chair (CERC) in Autonomous AI and a Canadian Institute for Advanced Research (CIFAR) Canada AI Chair. She received her MSc and PhD in AI from University of California, Irvine and MSc in Applied Mathematics from Moscow Gubkin Institute. Dr. Rish's research focus is on machine learning, neural data analysis and neuroscience-inspired AI." - position: Associate Professor - photo: irina_rish.jpg - alttext: Irina Rish - title: Panel Discussion - sessions: - - "202106071630panel" + link: https://nasaharvest.org/partner/inbal-becker-reshef + - name: Twitter + link: https://twitter.com/beckerinbal + streams: + - name: Crowdcast + link: https://www.crowdcast.io/c/ai-helps-ukraine + skip: False + +- fullname: Max Welling + affiliations: + - AMLAB, University of Amsterdam + - European Lab for Learning and Intelligent Systems (ELLIS) + nametitle: Prof. + position: Director of AMLab, Co-Founder of Scyfer BV, Lead Scientist of the Microsoft Research Lab Amsterdam + bio: "Max Welling advanced the field of machine learning in multiple ways: Together with others he introduced variational autoencoders, graph neural networks and equivariant neural networks. + + He directs the Amsterdam Machine Learning Lab (AMLab) and co-directs the Qualcomm-UvA deep learning lab (QUVA) and the Bosch-UvA Deep Learning lab (DELTA). He also co-founded Scyfer BV and the lead scientist of the Microsoft Research Lab in Amsterdam. He is a fellow at CIFAR and ELLIS and a member of the advisory board of Neurips. + + Notably, Max Welling received the ECCV Koenderink Prize in 2010 and the ICML Test of Time award in 2021. He published well over 250 articles. + + His research aims to develop new machine learning methods in the areas of deep learning, Bayesian modeling and causal inference and apply those methods to large scale data domains in science and industry. + " + photo: max_welling.jpg + alttext: Prof. Max Welling + title: "Generating and steering molecules with ML and RL" + abstract: "After speech, text, image and video, a whole new application area is opening up for deep learning technology: accelerating molecular simulation. In this talk I will highlight two such methods in Transition Path Sampling and Ligand-Protein docking." + session: virtual + date: 20221114 + time: "16:00" tags: - name: Website - link: https://sites.google.com/site/irinarish/ + link: https://staff.fnwi.uva.nl/m.welling/ - name: Twitter - link: https://twitter.com/irinarish -- fullname: Guillaume Lajoie - affiliations: - - Dept. de Mathématiques et Statistiques, Université de Montréal - - Mila, Québec AI Institute - - Canada CIFAR AI Chair - position: Assistant Professor - photo: guillaume_lajoie.jpg - alttext: Guillaume Lajoie - title: Machine learning and Neuroscience - abstract: "A panel discussion with Dr. Pouya Bashinvan, Dr. Irina Rish and Dr. Danilo Bzdok about (1) deep network models of neural circuits (2) ML for large data analysis and (3) ANN to explore neuroscience ideas unattainable by experiments." - sessions: - - "202106081315discussion" + link: https://twitter.com/wellingmax + streams: + - name: Crowdcast + link: https://www.crowdcast.io/c/ai-helps-ukraine + skip: False + +- fullname: Regina Barzilay + affiliations: + - School of Engineering, Computer Science and Artificial Intelligence Lab, Massachusetts Institute of Technology + - Jameel Clinic, Massachusetts Institute of Technology + nametitle: Prof. + position: Professor for AI and Health, Faculty Lead for AI at the MIT Jameel Clinic + bio: "Regina Barzilay is famous for her break-throughs in deep learning for health. She was part of the team who discovered Halicin with deep learning, a new antibiotic compound that kills over 35 powerful bacteria, including AMR tuberculosis, and two of WHO's top-three most deadly bacteria. + + She is professor of electrical engineering and computer science at MIT and the faculty lead for AI at the MIT Jameel clinic, a research center advancing the field of AI health sciences. + + In 2017, Barzilay won the MacArthur Fellowship, known as the “Genius Grant”. Moreover, she became the first recipient of the $1 million AAAI Squirrel AI Award for Artificial Intelligence for the Benefit of Humanity (2020). + + After fighting breast cancer personally in 2014, Barzilay started applying machine learning to oncology, helping with early diagnosis, treatment and disease prevention. + " + photo: regina_barzilay.jpg + alttext: Prof. Regina Barzilay + session: virtual + date: 20221121 + time: "16:00" tags: - name: Website - link: https://www.guillaumelajoie.com/ + link: https://www.regina.csail.mit.edu/ - name: Twitter - link: https://twitter.com/g_lajoie_ -- fullname: Paul Cisek - nametitle: Ph.D. - affiliations: - - Department of Neuroscience, Université de Montréal - position: Professor - photo: paul_cisek.jpg - alttext: Paul Cisek - title: Decision Making - sessions: - - "202106081515discussion" - tags: + link: https://twitter.com/BarzilayRegina + streams: + - name: Crowdcast + link: https://www.crowdcast.io/c/ai-helps-ukraine + skip: False + +- fullname: David Rolnick + affiliations: + - Mila, Quebec AI Institute + - School of Computer Science, McGill University + nametitle: Prof. + position: Assistant Professor and Canada CIFAR AI Chair at McGill University + bio: "David Rolnick is well known for his research on machine learning and climate change. This field was established by contributions such as his paper “Tackling Climate Change with Machine Learning”. + + Rolnick is an assistant professor at the School of Computer Science at the McGill University and holds a Canada CIFAR AI Chair. He is also co-founder and chair of Climate Change AI and a scientific co-director of Sustainability in the Digital Age. + + In 2021, he was named as one of the “35 Innovators Under 35” by the MIT Technology Review. He was a lead organizer of the first workshops on climate change at ICML, NeurIPS and ICLR, as well as th lead organizer of the first AI climate change event at COP25 (United Nations Climate Change Conference). + + David Rolnick develops new ML methods as tools for climate change adaptation and mitigation. Another part of his work is informing policy decision makers about the potential and limits of fighting climate change with AI. + " + photo: david_rolnick.jpg + alttext: Prof. David Rolnick + title: Machine learning in climate action + abstract: Machine learning (ML) can be a useful tool in helping society reduce greenhouse gas emissions and adapt to a changing climate. In this talk, we will explore opportunities and challenges in ML for climate action, from optimizing electrical grids to monitoring crop yield, with an emphasis on how to incorporate domain-specific knowledge into machine learning algorithms. We will also consider ways that ML is used in ways that contribute to climate change, and how to better align the use of ML overall with climate goals. + session: virtual + date: 20221124 + time: "15:00" + tags: + - name: Website + link: https://davidrolnick.com/ + - name: Twitter + link: https://twitter.com/david_rolnick + streams: + - name: Crowdcast + link: https://www.crowdcast.io/c/ai-helps-ukraine + skip: False + +- fullname: Michael Bronstein + affiliations: + - Department of Computer Science, University of Oxford + - Graph Learning Research, Twitter + nametitle: Prof. + position: DeepMind Professor of Artificial Intelligence + bio: "Michael Bronstein is known for coining the term “geometric deep learning” and his research on graph neural networks and 3d shape analysis. + + He is the DeepMind Professor of AI at the University of Oxford and Head of Graph Learning Research at Twitter. He was previously a professor at Imperial College London and held visiting appointments at Stanford, MIT, and Harvard. + + Bronstein is the recipient of the Royal Society Wolfson Research Merit Award, Royal Academy of Engineering Silver Medal, five ERC grants, two Google Faculty Research Awards, and two Amazon AWS ML Research Awards. + + In addition to his academic career, Michael is a serial entrepreneur and founder of multiple startup companies, including Novafora, Invision, and Fabula AI. + " + photo: michael_bronstein.jpg + alttext: Prof. Michael Bronstein + session: tbd + date: 20221121 + time: "15:00" + tags: + - name: Website + link: https://www.cs.ox.ac.uk/people/michael.bronstein/ + - name: Twitter + link: https://twitter.com/mmbronstein + streams: + - name: Crowdcast + link: https://www.crowdcast.io/c/ai-helps-ukraine + skip: False + +- fullname: Alexei Efros + affiliations: + - EECS Department, University of California, Berkeley + - Berkeley Artificial Intelligence Research Lab (BAIR) + nametitle: Prof. + position: Professor at UC Berkeley + bio: "Alexei Efros is widely recognized for his ground-breaking research in computer vision and computer graphics. He is also very invested in self-supervised learning. + + Since 2013, Efros has been a professor at the EECS department at UC Berkeley. Before, he spend nine years at the Robotics Institute at CMU. + + His work was awarded with the ACM Prize in Computing in 2016. Among other awards, he received the Guggenheim fellowship (2008) and the Diane McEntyre Award for Excellence in Teaching Computer Science (2019). + + The goal of his research is to use vast amounts of unlabelled visual data to understand and model the visual world around us. He advocates for slow science. Efros openly supports the Ukraine since the beginning of the war. + " + photo: alexei_efros.jpg + alttext: Prof. Alexei Efros + session: tbd + date: 20221121 + time: "15:00" + tags: - name: Website - link: http://www.cisek.org/pavel/ -- fullname: Thomas R. Shultz - nametitle: Ph.D. - position: Professor - affiliations: - - Department of Psychology, McGill University - photo: thomas_shultz.jpg - alttext: Thomas Shultz - title: Memory and Learning - sessions: - - "202106081415discussion" + link: https://people.eecs.berkeley.edu/~efros/ + streams: + - name: Crowdcast + link: https://www.crowdcast.io/c/ai-helps-ukraine + skip: False + +- fullname: Sara Beery + affiliations: + - MIT EECS's Faculty of AI and Decision Making + - Auto Arborist, Google + nametitle: Dr. + position: Incoming Professor at MIT EECS's Faculty of AI and Decision Making and CSAIL + bio: "Sara Beery will join MIT as an assistant professor in the Faculty of Artificial Intelligence and Decision-Making in EECS in September 2023 and is currently a visiting researcher at Google working on urban tree mapping across North America. + + She received her PhD in computing and mathematical sciences at Caltech in 2022, where she was advised by Pietro Perona. + + Her research focuses on building computer vision methods that enable global-scale environmental and biodiversity monitoring across data modalities, tackling real-world challenges including strong spatiotemporal correlations, imperfect data quality, fine-grained categories, and long-tailed distributions. + + She partners with nongovernmental organizations and government agencies to deploy her methods in the wild worldwide and works toward increasing the diversity and accessibility of academic research in artificial intelligence through interdisciplinary capacity building and education." + photo: sara_beery.jpg + alttext: Dr. Sara Beery + title: "Mapping Urban Trees Across North America with the Auto Arborist Dataset" + abstract: "Generalization to novel domains is a fundamental challenge for computer vision. Near-perfect accuracy on benchmarks is common, but these models do not work as expected when deployed outside of the training distribution. To build computer vision systems that solve real-world problems at global scale, we need benchmarks that fully capture real-world complexity, including geographic domain shift, long-tailed distributions, and data noise. We propose urban forest monitoring as an ideal testbed for studying and improving upon these computer vision challenges, while working towards filling a crucial environmental and societal need. Urban forests provide significant benefits to urban societies. However, planning and maintaining these forests is expensive. One particularly costly aspect of urban forest management is monitoring the existing trees in a city: e.g., tracking tree locations, species, and health. We introduce a new large-scale dataset that joins public tree censuses from 23 cities with a large collection of street level and aerial imagery, containing over 2.5M trees and 300 genera. This benchmark enables the exploration of automated urban forest monitoring across modalities and with respect to geographic distribution shifts, vital for such a system to be deployed at-scale." + session: virtual + date: 20221205 + time: "16:00" tags: - name: Website - link: https://www.tomshultz.net/ -- fullname: Robin Renault - position: Doctoral student - affiliations: - - Université de Montréal - photo: robin_renault.jpg - alttext: Robin Renault - bio: "Currently doctoral student in clinical psychology, I am particularly interested in ways of fostering awareness, presence, and well-being through the practice of mindfulness. I have been practicing meditation for almost ten years now, in addition to yoga and different breathing techniques, all of which helped me going through anxiety and depression some years ago. As my doctoral thesis, I am now studying the effects of mindfulness practice by therapists on the efficacy of therapy. My hope is to encourage people develop more awareness to their inner world, as well as to find more peace and balance in their life." - title: Round table on mental health - sessions: - - "202106081315roundtable" -- fullname: Marie-Ève Vautrin-Nadeau - position: PhD candidate - affiliations: - - Université de Montréal - photo: marie-eve_vautrin_nadeau.jpg - alttext: Marie-Ève Vautrin-Nadeau - bio: "Marie-Ève Vautrin-Nadeau is a PhD candidate in Communication Studies working under the supervision of Line Grenier and Stephanie Fox. She is interested in health communication – mainly in social care settings, and in relation to illness trajectories –, and in empowerment-oriented mental health practices. Working mainly with qualitative methods, she has become a mental health peer worker after struggling with illness in her adolescence and her twenties. Marie-Ève strongly believes in the power of service users’ experiential knowledge, as she embraces a mental health as a journey perspective." - title: Round table on mental health - sessions: - - "202106081315roundtable" -- fullname: Aislinn Sandre - position: PhD student - affiliations: - - McGill University - photo: aislinn_sandre.jpg - alttext: Aislinn Sandre - bio: "Aislinn Sandre is a PhD candidate in Clinical Psychology at McGill University. Her research focuses on understanding how stress affects the brain to increase risk for depression and anxiety. Specifically, she examines whether exposure to stress early in life, such as harsh parenting, abuse, neglect, or peer victimization, alters brain responses to rewards and threats, and whether these brain alterations make it more likely that people will develop depression and/or anxiety later on in life. In her work, Aislinn primarily uses electroencephalography (EEG) to measure brain activity during sensitive periods of neurodevelopment, such as infancy, adolescence, and young adulthood. Aislinn has worked as an intern in hospitals and schools in Montreal to provide assessment and psychotherapy for stress- and trauma-related disorders. She has developed and presented several workshops designed to help people reduce stress and improve mental health. Currently, she is training healthcare workers to provide supportive interventions to their colleagues in order to improve coping in response to COVID-19-related stress." - title: Round table on mental health - sessions: - - "202106081315roundtable" -- fullname: Samuel Guay - position: PhD student - affiliations: - - Université de Montréal - photo: samuel_guay.jpg - alttext: Samuel Guay - title: First steps into Open Science - bio: "Samuel Guay is a PhD candidate in Cognitive Neuroscience - Psychology at the University of Montreal and a member of the Sport & Trauma Applied Research Lab at CIUSSS NÎM Research Center under the supervision of Louis De Beaumont. His research focuses on using multimodal neuroimaging techniques to study the short- and long-term effects of repetitive hits to the head in both active and retired athletes. He is actively involved in grassroots initiatives that promote open science, best research practices, and collaboration such as Open Science UMontreal that he co-founded in 2019, the Brainhack, and the FORRT communities." - abstract: "This workshop aims to introduce the broad concept that is open science from a global perspective. We will touch on three core aspects that open science is based on, namely processes (e.g., collaboration, reproducibility), Products (e.g., Open Data, Open Materials), and Values (e.g., freedom, equity). We will then showcase some tools and state-of-the-art examples of openness from the Neuro-AI field. If time permits, we will end the workshop by collaboratively (yes, all of us!) creating a Neuro-AI open science student guide." - sessions: - - "202106081415workshop" - tags: - - name: Open Science UMontréal - link: https://osumontreal.ca/ - - name: Slides - link: https://osf.io/b52mg/ -- fullname: Andréanne Proulx - position: Master student - affiliations: - - Université de Montréal - photo: andreanne_proulx.jpg - alttext: Andréanne Proulx - title: First steps into Open Science - bio: "I am a master's student in Psychology at the University of Montreal researching the effects of genetic mutations on functional brain phenotypes. I am a contributor to the Neuro-AI student community as a member of UNIQUE Student Affairs Committee (SAC), and advocate for open science through the student initiative Open Science UMontreal (OSUM)." - abstract: "This workshop aims to introduce the broad concept that is open science from a global perspective. We will touch on three core aspects that open science is based on, namely processes (e.g., collaboration, reproducibility), Products (e.g., Open Data, Open Materials), and Values (e.g., freedom, equity). We will then showcase some tools and state-of-the-art examples of openness from the Neuro-AI field. If time permits, we will end the workshop by collaboratively (yes, all of us!) creating a Neuro-AI open science student guide." - sessions: - - "202106081415workshop" - tags: - - name: Open Science UMontréal - link: https://osumontreal.ca/ - - name: Slides - link: https://osf.io/b52mg/ -- fullname: Madeleine Elise Nadler - alttext: Madeleine Elise Nadler - pronouns: "she/her" - position: Recent BA Graduate - affiliations: - - Concordia, Interdisciplinary Studies in Sexuality, Women's Studies, and Religions and Cultures - photo: madeleine_elise_nadler.jpg - title: "Developing, Disseminating, and Diversifying Knowledge: An Introduction to Equity, Diversity, and Inclusion (EDI) in Academia" - abstract: "This workshop is designed for new students as well as those with no background in Equity, Diversity, and Inclusion (EDI). The workshop aims to help develop awareness of EDI concepts and issues in Academia. Participants will be introduced to basics of EDI in both theory and reality with relation to data-driven research as well as current events." - sessions: - - "202106081515workshop" - tags: - - name: Slides - link: assets/pdf/madeleine_elise_nadler.pdf -- fullname: Caelan Taylor - alttext: Caelan Taylor - sessions: - - "202106071505activebreak" - - "202106071620activebreak" - - "202106081505activebreak" + link: https://beerys.github.io/ + - name: Twitter + link: https://twitter.com/sarameghanbeery + skip: False + +- fullname: Anna Goldenberg affiliations: - - Department of Health, Kinesiology and Clinical Exercise Physiology at Concordia University - photo: caelan_taylor.jpg - bio: "Caelan is a student at Concordia with the hopes of becoming an Athletic Therapist one day. He loves to share his passion of health and wellness with others through physical activity and manual therapy where he does his best to get people to feel and perform at their best." - position: Student at Concordia, Personal trainer, and massage therapist + - Vector Institute for Artificial Intelligence + - Department of Computer Science, University of Toronto + - SickKids Research Institute + nametitle: Prof. + position: Professor at University of Toronto, Chair in Biomedical Informatics and Artificial Intelligence at the Hospital for Sick Children + bio: "Anna Goldenberg is famous for her research on how machine learning can be used to map the heterogeneity seen in various human diseases. Her lab develops methodologies to identify patterns in collected data and improve patient outcomes. The “Similarity Network Fusion” she co-developed was the first patient data integration method that improved survival outcome predictions in different cancers. + + Goldenberg is professor in the departments of Computer Science and the Laboratory Medicine and Pathobiology at the University of Toronto. She is a Varma Family Chair in Biomedical Informatics and Artificial Intelligence at SickKids Research Institute as well as a CIFAR AI chair at the Vector Institute. + + Dr. Goldenberg trained in machine learning at Carnegie Mellon University, with a postdoctoral focus in computational biology and medicine. The current focus of her lab is on developing and deploying machine learning models to healthcare. + + Among other awards, Anna Goldenberg received the Early Researcher Award from the Ministry of Research and Innovation. + + Dr. Goldenberg’s lab is strongly committed to creating responsible AI to benefit patients across a variety of conditions. + " + photo: anna_goldenberg.jpg + alttext: Prof. Anna Goldenberg + title: "Time series ML for deployment in healthcare" + abstract: "There is growing support and excitement around AI integration into clinical practice. And yet, enabling AI in healthcare broadly is replete with many obstacles including fundamentally unresolved machine learning issues. In this talk I will cover several of our contributions to time series modeling including explainability, representation learning and generative modeling that we have worked on to date. I will also discuss some of the broader computer science contributions we had to make in order to get us closer to deployment. Finally, if time permits, I will touch on an important question of feedback loop, i.e. what happens when an ML solution is deployed and is starting to affect the labels that we are using to retrain and improve our models." + session: inperson + date: 20221208 + time: "09:15" tags: - - name: Facebook - link: https://www.facebook.com/TaylorTrainer20 - - name: Instagram - link: https://www.instagram.com/TaylorTrainer20/ + - name: Website + link: http://goldenberglab.ca/ + streams: + - name: Crowdcast + link: https://www.crowdcast.io/c/ai-helps-ukraine + skip: False + + + +# for what is the person known +# which positions does he have +# which prizes did he earn +# his contributions to AI for Good diff --git a/_data/team.yml b/_data/team.yml index 55025f09..355d1655 100644 --- a/_data/team.yml +++ b/_data/team.yml @@ -1,129 +1,71 @@ - affiliation: "Mila, Universit\xE9 de Montr\xE9al" bio: I am a postdoc at Mila. I am interested in the fundamental aspects of learning, - both in brains and machines. I currently work also on applications of machine + both in brains and machines and in applications of machine learning to fight climate change. - committee: Communication Committee + committee: General Committee email: alex.hernandez-garcia@mila.quebec fullname: Alex Hernandez-Garcia photo: alex_hernandez-garcia.jpg - pronouns: "he/him/\xE9l" + pronouns: "he/il/\xE9l" alttext: Alex has white skin, green eyes, a thick dark beard and dark long hair though with noticeable receding hairline. twitter: https://twitter.com/alexhdezgcia - website: alexhernandezgarcia.github.io -- affiliation: "Universit\xE9 de Montr\xE9al, CRIUGM, Projet Courtois NeuroMod" - bio: "I am a master student in psychology at Universit\xE9 de Montr\xE9al. Having\ - \ backgrounds in both music composition and cognitive neurosciences, my research\ - \ interests include auditory perception, music perception and creation, and noise\ - \ pollution's effects on perception and health (physical and mental). I'm currently\ - \ part of the auditory perception and protection branch of the Projet Courtois\ - \ NeuroMod (CRIUGM)." - committee: Logistics Committee - email: eddy.fortier@umontreal.ca - fullname: Eddy Fortier - photo: eddy_fortier.jpg - alttext: none - pronouns: he/him - twitter: none - website: none -- affiliation: "Universit\xE9 de Montr\xE9al" - bio: "I am a Ph.D. student at Universit\xE9 de Montr\xE9al. I am studying how the\ - \ brain makes action decisions. I am interested in how the brain changes our behaviour\ - \ based on who is around, and why." - committee: Logistics Committee - email: a.nakahashi@umontreal.ca - fullname: Ayuno Nakahashi - photo: ayuno_nakahashi.jpg - alttext: Ayuno is an Asian woman with long dark hair and glasses. - pronouns: she/her - twitter: https://twitter.com/ayuno_n - website: none -- affiliation: "Universit\xE9 de Montr\xE9al, CRIUGM" - bio: "I am a master's student at Universit\xE9 de Montr\xE9al. I am interested in\ - \ the neural correlates of pain, and more broadly, in neuroimaging data analysis\ - \ techniques. " - committee: Educational Committee - email: marie-eve.picard.2@umontreal.ca - fullname: Marie-Eve Picard - photo: marie-eve_picard.jpg - alttext: Marie-Eve is a Caucasian female with brown hair, freckles and glasses. - pronouns: she/her - twitter: none - website: none -- affiliation: Mila, McGill - bio: 'PhD student at Mila/McGill; interested in probabilistic generative models - and their application in real world problems. ' - committee: Coordinator - email: nazsepah@cim.mcgill.ca - fullname: Nazanin Sepahvand - photo: nazanin_sepahvand.jpg - alttext: none - pronouns: she/her/elle - twitter: https://twitter.com/NazSepahvand - website: none -- affiliation: "LIONlab, CHU Sainte-Justine Research Center, Universit\xE9 de Montr\xE9\ - al" - bio: 'I am a Master''s student at the University of Montreal, currently doing my - research at the CHU Sainte-Justine''s research center (LIONlab). At the moment, - I am studying the development of the brain via neuroimagery in neurotypical infants - as well as in clinical populations such as premature babies and babies born asphyxiated. - My research focuses primarily on neuroscience but I am very interested in AI as - well and most of all, the intersection between the two. ' - committee: Chair - email: laurence.petitpas@umontreal.ca - fullname: Laurence Petitpas - photo: laurence_petitpas.jpg - alttext: Laurence is a white woman with long blond hair, blue eyes and glasses. - pronouns: she/her - twitter: none - website: none -- affiliation: 'Concordia University ' - bio: I'm a PhD student in Emily Coffey's lab. I'm working on understanding how brain - state affects sensory representation, exploring the function of sleep spindles, - and trying to characterize the role of spindle-slow-oscillation coupling in memory - consolidation across the lifespan. - committee: Program Committee - email: hjourde.clasp@gmail.com - fullname: Hugo Jourde - photo: hugo_jourde.jpg - pronouns: he/him - alttext: Hugo is a Caucasian male with longish brown hair assembled in something supposed to look like a man bun. - pronouns: he/him - twitter: https://twitter.com/HugoJourde + website: https://alexhernandezgarcia.github.io +- affiliation: "Mila, Universit\xE9 de Montr\xE9al" + bio: I am a third-year Ph.D. student at Mila. My main research interest lies in developing systems that can accumulate and transfer knowledge throughout their lifetime. + committee: General Committee + email: ostapeno@mila.quebec + fullname: Oleksiy Ostapenko + photo: oleksiy_ostapenko.png + alttext: Oleksiy Ostapenko + pronouns: "he/\xE9l/er/він" + twitter: https://twitter.com/ostap__alex + website: https://www.linkedin.com/in/oleksiy-ostapenko/ +- affiliation: "Mila, Universit\xE9 de Montr\xE9al" + bio: I am a third-year Ph.D. student at Mila working on environmental applications of AI. My current research focuses on biodiversity monitoring using remote sensing and citizen science data. + committee: General Committee + email: tengmeli@mila.quebec + fullname: Mélisande Teng + photo: melisande_teng.jpg + pronouns: "she/elle" + twitter: https://twitter.com/melisandeteng + website: https://melisandeteng.github.io +- affiliation: "" + bio: Graduated in Law and Journalism. I am interested in international politics, cooperation and social field. Currently working in the philanthropic field in Montréal. + committee: General Committee + email: martapp.94@gmail.com + fullname: Marta Pereira de la Infanta + photo: marta_pereira-de-la-infanta.jpg + pronouns: "she/ella/вона" + alttext: Marta is... website: none -- affiliation: McGill University, Mila - bio: I am a Ph.D. student at McGill and Mila. I am fascinated by the fundamental - principle of both biological and artificial intelligence. I build computational - models of the brain, mainly with neural networks nowadays. - committee: Communication Committee - email: xiaoxuan.lei@mail.mcgill.ca - fullname: Xiaoxuan Lei - photo: xiaoxuan_lei.jpg - alttext: Xiaoxuan is an Asian woman with long dark hair and glasses - pronouns: she/her twitter: none - website: none -- affiliation: McGill University - bio: "I am a Master\u2019s student in the Integrated Program in Neuroscience at\ - \ McGill University. My research is on the application of machine learning for\ - \ the prediction of recovery of consciousness after traumatic brain injury. I\ - \ am fascinated about the philosophy and neuroscience of (human) consciousness." - committee: Educational Committee - email: Charlotte.Maschke@mail.mcgill.ca - fullname: Charlotte Maschke - photo: charlotte_maschke.jpg - pronouns: she/her - alttext: none - twitter: https://twitter.com/CharlotteMaschk - website: none -- affiliation: "Universit\xE9 de Montr\xE9al" - bio: I am a master's student at the SIMEXP and Jacquemont labs, working on the impact - of rare genetic mutations on functional connectivity and how it can help us understand - psychiatric conditions. - committee: Program Committee - email: annabelle.harvey@umontreal.ca - fullname: Annabelle Harvey - photo: annabelle_harvey.jpg - alttext: none - pronouns: she/her/elle +- affiliation: "Mila, McGill University" + bio: I am second-year MSc student at Mila using machine learning for climate science. I especially like working with cryospheric data and climate models. + committee: General Committee + email: julia.kaltenborn@mila.quebec + fullname: Julia Kaltenborn + photo: julia_kaltenborn.jpg + pronouns: "she/sie/ella" + alttext: Julia has white skin, blue eyes, long fair hair that looks slightly tousled in that pic. + website: https://liellnima.github.io + twitter: https://twitter.com/JuliaKaltenborn +- affiliation: "Mila, Universit\xE9 de Montr\xE9al" + bio: I am a second-year PhD student at Mila working on AI generative models for scientific discovery. My research interests are evolving and currently they include drug discovery, material design, geometric deep learning, bayesian methods, causality. + committee: General Committee + email: alexandra.volokhova@mila.quebec + fullname: Alexandra Volokhova + photo: alexandra_volokhova.jpg + pronouns: "she/она" + alttext: Alexandra has auburn hair in this image, blue eyes and she smiles into the camera. + website: https://alexandravolokhova.github.io + twitter: https://twitter.com/alex_volokhova +- affiliation: "Mila, DreamFold" + bio: "Maksym Korablyov is a PhD student with Yoshua Bengio at Mila and co-founder of DreamFold. His research interests are in the applications of generative flow networks to protein design for social good." + committee: General Committee + email: korablym@mila.quebec + fullname: Maksym Korablyov + photo: maksym_korablyov.jpeg + pronouns: "he/він" + alttext: Maksym has a plaid shirt, short hair and looks both focused and relaxed into the camera. + website: https://www.linkedin.com/in/korablyov twitter: none - website: none diff --git a/_includes/donation-bar-section.html b/_includes/donation-bar-section.html new file mode 100644 index 00000000..62078818 --- /dev/null +++ b/_includes/donation-bar-section.html @@ -0,0 +1,2 @@ +

+ diff --git a/_includes/donation-button.html b/_includes/donation-button.html new file mode 100644 index 00000000..bf3ad52e --- /dev/null +++ b/_includes/donation-button.html @@ -0,0 +1,7 @@ +
+ +
+ Debit / Credit / PayPal Donation +
+
+
diff --git a/_includes/donor-card.html b/_includes/donor-card.html new file mode 100644 index 00000000..278e282b --- /dev/null +++ b/_includes/donor-card.html @@ -0,0 +1,36 @@ +{% if donor.isConfirmed %} +
+
+
+
+
+
+
+
+ {% if donor.logo != "none" %} + {{ donor.alttext }} + {% endif %} +
+
+
+

{{ donor.fullname }}

+

{{ donor.location }}

+

{{ donor.areas }}

+ {% if donor.motto != "none" %} +

{{ donor.motto }}

+ {% endif %} +
+
+
+ {% if donor.website != "none" %} + Website + {% endif %} {% if donor.twitter != "none" %} + Twitter + {% endif %} +
+
+
+
+
+
+{% endif %} diff --git a/_includes/join-button.html b/_includes/join-button.html new file mode 100644 index 00000000..35c362ed --- /dev/null +++ b/_includes/join-button.html @@ -0,0 +1,14 @@ +
+
+
+ + + +
+
+
diff --git a/_includes/partner-logo.html b/_includes/partner-logo.html new file mode 100644 index 00000000..dcd3c566 --- /dev/null +++ b/_includes/partner-logo.html @@ -0,0 +1,8 @@ +
+{% assign partners = site.data.partners | sample: site.data.team.size %} +{% for partner in partners %} + + + + {% endfor %} +
\ No newline at end of file diff --git a/_includes/registration-button.html b/_includes/registration-button.html new file mode 100644 index 00000000..078201e4 --- /dev/null +++ b/_includes/registration-button.html @@ -0,0 +1,11 @@ +
+
+
+ + + +
+
+
diff --git a/_includes/speaker-card.html b/_includes/speaker-card.html index 5137602b..769a07e3 100644 --- a/_includes/speaker-card.html +++ b/_includes/speaker-card.html @@ -2,57 +2,52 @@
-
+
- {% if person.photo != "none" %} - {{ person.alttext }} + {% if speaker.photo != "none" %} + {{ speaker.alttext }} {% endif %}
-

{{ person.fullname }}

-

{{ person.pronouns }}

-

{{ person.position }}

-

{{ person.affiliations | join: " · " }}

+

{{ speaker.fullname }}

+

{{ speaker.pronouns }}

+

{{ speaker.position }}

+

{{ speaker.affiliations | join: " · " }}

- {% if person.bio %} + {% if speaker.bio %}
Bio - {{ person.bio }} + {{ speaker.bio }}

{% endif %} - {% if person.title %} - {% endif %} - {% if person.abstract %} -
- {{ person.title }} - {{ person.abstract }} -
- {% else %} -

{{ person.title }}

- {% endif %} - {% for session in person.sessions %} - {% if session contains "panel" %}{% continue %} + {% if speaker.title %} + {% if speaker.abstract %} +
+ {{ speaker.title }} + {{ speaker.abstract }} +
{% else %} - {% capture talk %} - {% assign date = session | slice: 0, 8 %} - {% if date == "20210607" %} - Monday, June 7th, {{ session | slice: 8, 2 }}:{{ session | slice: 10, 2 }} (EDT) - {% elsif date == "20210608" %} - Tuesday, June 8th, {{ session | slice: 8, 2 }}:{{ session | slice: 10, 2 }} (EDT) - {% endif %} - {% endcapture %} -

{{ talk }}

+

{{ speaker.title }}

{% endif %} - {% endfor %} + {% endif %} + {% capture talk %} + {% if speaker.session == "inperson" %} + Mila: Thursday, December 8th, {{ speaker.time }} (EST) + {% elsif speaker.session == "virtual" %} + {% assign date = site.data.datesdict | where: "code", speaker.date | first %} + Online series: {{ date.readable }}, {{ speaker.time }} (UTC) + {% endif %} + {% endcapture %} +

{{ talk }}


- {% for tag in person.tags %} + {% for tag in speaker.tags %} {{ tag.name }} {% endfor %}
diff --git a/_includes/speaker-gallery.html b/_includes/speaker-gallery.html new file mode 100644 index 00000000..3fa00e71 --- /dev/null +++ b/_includes/speaker-gallery.html @@ -0,0 +1,204 @@ +
+
+
+
+
+ Dr. Timnit Gebru +
+
+ + 26th Oct + +
+
+ +
+
+ +
+
+
+
+ Prof. Yoshua Bengio +
+
+ + 3rd Nov + +
+
+ +
+
+ +
+
+
+
+ Prof. Hannah Kerner +
+
+ + 11th Nov + +
+
+ +
+
+ +
+
+
+
+ Prof. Max Welling +
+
+ + 14th Nov + +
+
+ +
+
+ +
+
+
+
+ Prof. Regina Barzilay +
+
+ + 21st Nov + +
+
+ +
+
+ +
+
+
+
+ Prof. David Rolnick +
+
+ + 24th Nov + +
+
+ +
+
+ +
+
+
+
+ Dr. Sara Beery +
+
+ + 5th Dec + +
+
+ +
+
+ +
+
+
+
+ Prof. Michael Bronstein +
+
+ + TBA + +
+
+ +
+
+ +
+
+
+
+ Prof. Anna Goldenberg +
+
+ + 8th Dec (in person) + +
+
+ +
+
+ +
+
+
+
+ Prof. Alexei Efros +
+
+ + TBA + +
+
+ +
+
+ + + +
diff --git a/_includes/table-schedule-inperson.html b/_includes/table-schedule-inperson.html new file mode 100644 index 00000000..184fdf1d --- /dev/null +++ b/_includes/table-schedule-inperson.html @@ -0,0 +1,36 @@ + + + + + + + + + + + {% assign speakers = site.data.speakers | where: "session", "inperson" %} + {% assign schedule = site.data.schedule | sort: 'time_start' %} + {% for event in schedule %} + {% assign speaker = speakers | where: "time", event.time_start | first %} + {% capture speakername %} + {{ speaker.fullname }} + {% endcapture %} + {% capture eventtitle %} + {% if event.name == "Keynote talk" %} + {% if speaker.abstract %} +
+ {{ speaker.title }} {{ slides }} + {{ speaker.abstract }} +
+ {% endif %} + {% endif %} + {% endcapture %} + + + + + + + {% endfor %} + +
Time (EDT)SessionSpeakerTitle
{{ event.time_start }} - {{ event.time_end }}{{ event.name }}{{ speakername }}{{ eventtitle }}
diff --git a/_includes/table-schedule-virtual.html b/_includes/table-schedule-virtual.html new file mode 100644 index 00000000..046a10e8 --- /dev/null +++ b/_includes/table-schedule-virtual.html @@ -0,0 +1,52 @@ + + + + + + + + + + + + {% assign allspeakers = site.data.speakers | where: "session", "virtual" %} + {% assign dates = allspeakers | where: "session", "virtual" | map: "date" | uniq | sort %} + {% for date in dates %} + {% assign speakers = allspeakers | where: "date", date %} + {% capture speakernames %} + {% for speaker in speakers | sample: speakers.size %} + {{ speaker.fullname }} + {% if forloop.last == false %}, {% endif %} + {% endfor %} + {% endcapture %} + + {% assign datereadable = site.data.datesdict | where: "code", date | first %} + + + + {% capture eventtitle %} + {% if speakers.first.title %} + {% if speakers.first.abstract %} +
+ {{ speakers.first.title }} + {{ speakers.first.abstract }} +
+ {% else %} + {{ speakers.first.title }} + {% endif %} + {% endif %} + {% endcapture %} + + {% capture streams %} + {% if speakers.first.streams %} + {% for stream in speakers.first.streams %} + {{ stream.name }} + {% if forloop.last == false %} | {% endif %} + {% endfor %} + {% endif %} + {% endcapture %} + + + {% endfor %} + +
DateTime (UTC)Speaker(s)TitleStream
{{ datereadable.readable }}{{ speakers.first.time }}{{ speakernames }}{{ eventtitle }}{{ streams }}
diff --git a/_includes/team-card.html b/_includes/team-card.html index 33e77d83..2137ff96 100644 --- a/_includes/team-card.html +++ b/_includes/team-card.html @@ -15,8 +15,7 @@

{{ person.fullname }}

{{ person.pronouns }}

-

{{ person.committee }}

-

{{ person.affiliation }}

+

{{ person.affiliation }}

diff --git a/_layouts/main.html b/_layouts/main.html index 9a6d3244..ba45ea19 100644 --- a/_layouts/main.html +++ b/_layouts/main.html @@ -1,24 +1,31 @@ - - + + {{ page.title }} - - - + + + - + {% seo %} -
+
{% include navigation.html icon-size="lg" %}
-
- {{ content }} -
+
{{ content }}
{% include footer.html icon-size="lg" %}
diff --git a/_layouts/page-floatbutton.html b/_layouts/page-floatbutton.html new file mode 100644 index 00000000..4f974976 --- /dev/null +++ b/_layouts/page-floatbutton.html @@ -0,0 +1,44 @@ +--- +layout: page +--- + + + + + + + + + + +
+ Donate +
+
+ + +{{ content }} diff --git a/_pages/404.md b/_pages/404.md index 40785130..7764e9be 100644 --- a/_pages/404.md +++ b/_pages/404.md @@ -1,5 +1,5 @@ --- -layout: page +layout: page-floatbutton title: 404 permalink: /404 --- diff --git a/_pages/about.md b/_pages/about.md index 6c508bd8..6a4cc18a 100644 --- a/_pages/about.md +++ b/_pages/about.md @@ -1,25 +1,16 @@ --- -layout: page +layout: page-floatbutton title: About -subtitle: UNIQUE and USS +subtitle: AI Helps Ukraine - Charity Conference permalink: /about --- -### Territorial acknowledgement - -We, the organisers, acknowledge that the lands and waters where most of us live and where our universities are located---[Université de Montréal](https://www.umontreal.ca/en/indigenouspeoples/), [McGill University](https://www.mcgill.ca/circ/land-acknowledgement) and [Concordia University](https://www.concordia.ca/indigenous/resources/territorial-acknowledgement.html)---are the traditional and unceded territories of Indigenous peoples. The Kanien’kehá:ka (Mohawk) Nation call Tiohtiá:ke the site commonly known as Montréal. Since long before the arrival of European settlers, this territory has been and continues to be a gathering place for many Indigenous peoples. We respect the continued connections with the past, present and future in our ongoing relationships with Indigenous and other peoples within our communities. - -### UNIQUE - -[UNIQUE (Unifying Neuroscience and Artificial Intelligence in Québec)](https://sites.google.com/view/unique-neuro-ai) is a research centre working at the intersection of neuroscience and artificial intelligence research. It consists of more than 80 researchers affiliated with several universities and research centres from different regions of the province, and even from outside of it. The main goal of UNIQUE is to promote and facilitate exchanges between research teams working at the intersection of artificial intelligence (AI) and neuroscience. + +AI Helps Ukraine is a charity conference for raising funds to support Ukrainians facing the severe humanitarian crisis. We collect donations to purchase and deliver supplies for people living in destroyed areas and oncological patients in Ukraine. Our mission is run in collaboration with the Ukraine Medical Support (UAMS), a Canadian-based nonprofit organisation providing medical and humanitarian aid for Ukraine. -### USS +As AI researchers, we believe that collective efforts of our broad international community can make a real difference for those who are in need and save lives. Therefore, we are bringing together brilliant artificial intelligence experts, an empathetic audience and responsible companies to attract attention and collect money for vulnerable people in Ukraine. -USS (UNIQUE Student Symposium) is a student-oriented, student-organized conference at the crossroads of neuroscience and AI research. The goal is to provide graduate students in those fields with an event tailor made to their needs and presenting the state of the art of what is done in neuro-AI research. - -### USS 2021 - -Unfortunately, in the actual global circumstances, it is not possible to organize events for people to attend in person. However, this year's event will still take place, though in a virtual format. Both the keynote speakers and the workshop are going to be accessible through online platforms. Information and links will be provided following your registration. +--- -### Past Event +### Territorial acknowledgement -The recordings of the past event, USS 2020, are available on [YouTube](https://www.youtube.com/channel/UCOoOsSZfudHl5vcUnCE3jrA/live). +We, the organisers, acknowledge that the lands and waters where most of us live and where our universities are located---[Université de Montréal](https://www.umontreal.ca/en/indigenouspeoples/), [McGill University](https://www.mcgill.ca/circ/land-acknowledgement) and [Concordia University](https://www.concordia.ca/indigenous/resources/territorial-acknowledgement.html)---are the traditional and unceded territories of Indigenous peoples. The Kanien’kehá:ka (Mohawk) Nation call Tiohtiá:ke the site commonly known as Montréal. Since long before the arrival of European settlers, this territory has been and continues to be a gathering place for many Indigenous peoples. We respect the continued connections with the past, present and future in our ongoing relationships with Indigenous and other peoples within our communities. diff --git a/_pages/coc.md b/_pages/coc.md index 6a8d9b9e..16bda430 100644 --- a/_pages/coc.md +++ b/_pages/coc.md @@ -1,15 +1,15 @@ --- title: Code of Conduct -subtitle: -layout: page +subtitle: +layout: page-floatbutton permalink: /coc --- -# USS 2021 Code of conduct -In order to have safe and pleasant exchanges during this event, it is required from every participant to read and follow this USS 2021 Code of conduct. Since USS 2021 applies a strict zero tolerance policy, participants who fail to follow the Code of conduct will be banned or expelled from the event, the same way they would be removed during an in-person event. +# AI Helps Ukraine Code of conduct +In order to have safe and pleasant exchanges during this event, it is required from every participant to read and follow this AI Helps Ukraine Code of conduct. Since AI Helps Ukraine applies a strict zero tolerance policy, participants who fail to follow the Code of conduct will be banned or expelled from the event, the same way they would be removed during an in-person event. The main important concept ruling this code of conduct is respect. Respect can take many forms: - respect of the origins (physical appearance, nationality, ethnicity, etc.) @@ -24,4 +24,4 @@ The main important concept ruling this code of conduct is respect. Respect can t Difference is what makes each individual unique, and what allows each of us to bring our special contribution to our research community. It shouldn’t be used to discriminate, it should be encouraged and supported. It is also important to acknowledge that not everyone has the same level of understanding of every field of interest covered by this conference and that we all bring a different academic background to the community. This variety is important and allows us to push forward the boundaries of science research. We all have our specialties and we can all learn from each other. ## Reporting -Should you encounter a situation that makes you or anyone else feel unsafe or unwelcome, please report it as soon as possible to `{{ site.email }}` or to any member of the [organization committee](/team.html). The USS 2021 committee will contact you for a follow-up, and proceed to appropriate actions to reestablish safe and pleasant exchanges. +Should you encounter a situation that makes you or anyone else feel unsafe or unwelcome, please report it as soon as possible to `{{ site.email }}` or to any member of the [organization committee](/team.html). The AI Helps Ukraine committee will contact you for a follow-up, and proceed to appropriate actions to reestablish safe and pleasant exchanges. diff --git a/_pages/coc_fr.md b/_pages/coc_fr.md index d2bec989..95e9b367 100644 --- a/_pages/coc_fr.md +++ b/_pages/coc_fr.md @@ -1,15 +1,15 @@ --- title: Code de conduite -subtitle: -layout: page +subtitle: +layout: page-floatbutton permalink: /coc_fr --- -# USS 2021 Code de conduite -Afin d’avoir des échanges sains et agréables tout au long the cet événement, il est essential que chaque participant.e lise et suive le présent Code de conduite du symposium USS 2021. Puisque le symposium USS 2021 applique une politique stricte de tolérance zéro, les participant.e.s qui ne respecteront pas le présent Code de conduite seront banni.e.s ou expulsé.e.s de l’événement, de la même façon qu’ils ou elles seraient expulsé.e.s d’un événement en présentiel. +# AI Helps Ukraine Code de conduite +Afin d’avoir des échanges sains et agréables tout au long the cet événement, il est essential que chaque participant.e lise et suive le présent Code de conduite du symposium AI Helps Ukraine. Puisque le symposium AI Helps Ukraine applique une politique stricte de tolérance zéro, les participant.e.s qui ne respecteront pas le présent Code de conduite seront banni.e.s ou expulsé.e.s de l’événement, de la même façon qu’ils ou elles seraient expulsé.e.s d’un événement en présentiel. Le principal concept soutenant le présent Code de conduite est le respect. Le respect peut prendre une multitude de formes: - Respect des origines (apparence physique, nationalité, ethnie, etc.) @@ -24,4 +24,4 @@ Le principal concept soutenant le présent Code de conduite est le respect. Le r Les différences sont la source de l’unicité de chaque individu. C’est aussi ce qui permet à chacun d’entre nous d’apporter une contribution spéciale à notre communauté de recherche. Elles ne devraient jamais être utilisées dans le but de discriminer, elles devraient plutôt être encouragées et soutenues. Il est aussi important de reconnaître que tous les membres de cette communauté n’ont pas le même niveau de compréhension de chaque champ de recherche abordé lors de cet événement et que nous apportons tous et toutes un bagage académique et expérientiel différent à cette communauté. Cette variété est importante et nous permet de toujours repousser les frontières de la recherche scientifique. Nous avons tous nos spécialités et nous pouvons tous apprendre les un.e.s des autres. # Signalement -Si vous vivez ou êtes témoin d’une situation au sein de laquelle vous ou une autre personne n’êtes pas à l’aise ou les bienvenu.e.s, veuillez le signaler le plus rapidement possible à l’adresse courriel `{{ site.email }}` ou à n’importe quel membre du [comité d’organisation](/team.html) de l’événement. Le comité d’organisation du symposium USS 2021 vous recontacteront afin d’assurer un suivi et d’agir afin de rétablir un environnement permettant des échanges sains et agréables. +Si vous vivez ou êtes témoin d’une situation au sein de laquelle vous ou une autre personne n’êtes pas à l’aise ou les bienvenu.e.s, veuillez le signaler le plus rapidement possible à l’adresse courriel `{{ site.email }}` ou à n’importe quel membre du [comité d’organisation](/team.html) de l’événement. Le comité d’organisation du symposium AI Helps Ukraine vous recontacteront afin d’assurer un suivi et d’agir afin de rétablir un environnement permettant des échanges sains et agréables. diff --git a/_pages/donate.md b/_pages/donate.md new file mode 100644 index 00000000..05cf626e --- /dev/null +++ b/_pages/donate.md @@ -0,0 +1,31 @@ +--- +layout: page-floatbutton +title: Donations +subtitle: We are looking forward to your donation! +permalink: /donate +--- + +We need your donation to support Ukrainian hospitals. Together we can provide cancer treatments and medical aid urgently needed to save lives in Ukraine. + +# Donate now! + +On our PayPal donation page you can donate from any country, with **debit card**, **credit card** or your **PayPal** account: + +{% include donation-button.html %} + +# Donations + +We would like to raise {{ site.data.settings.donations.targetText}} CAD. Currently, we are working on a list of specific equipment and drugs requested by our Ukrainian partners (National Cancer Institute & local hospitals). We will publish the list here, as soon as it is finished. If you are part of pharma company that would like to donate drugs or equipment, please contact us (`{{ site.email }}`). + +### Collected donations + +{% include donation-bar-section.html %} + +### Thank you! + +A big thank you goes to everyone who supports us! Large donations from companies, small donations from students, equipment / drug donations from pharma - we are glad about every piece of help! Thank you for being here with us and standing up for Ukraine! + +{% assign donors = site.data.donors %} +{% for donor in donors %} +{% include donor-card.html %} +{% endfor %} diff --git a/_pages/schedule.md b/_pages/schedule.md index 230e99e7..dae11bf7 100644 --- a/_pages/schedule.md +++ b/_pages/schedule.md @@ -1,22 +1,21 @@ --- title: Schedule -subtitle: 7-8 June, 2021 -layout: page +subtitle: November & December 2022 +layout: page-floatbutton show_sidebar: false # hero_height: is-small permalink: /schedule --- -The times are Eastern Daylight Time (Quebec local time, UTC-4). Click on the times to check your local time. +Stay tuned for the upcoming details of the program! We are working on a outstanding and diverse program on AI for Good research! -## Monday, 7 June +## Virtual series -The main sessions of Day 1 will take place on [Crowdcast](https://www.crowdcast.io/e/2u50rd1n) and the social breaks on [Gather](https://gather.town/i/e7LPsVjS). Our Gather town will remain open throughout the whole symposium and you are welcome to join and interact with other attendees any time! If you have registered, you should have received the links and **password** of the event via email. The sessions on Crowdcast will be streamed through our [YouTube channel](https://www.youtube.com/channel/UCOoOsSZfudHl5vcUnCE3jrA) too. See the links of the individual session on the schedule. +The times are given in **Universal Coordinated Time (UTC)**. Click on the times to check your local time. -{% include table-schedule.html date="20210607" people="Speaker(s)" %} +{% include table-schedule-virtual.html %} -## Tuesday, 8 June +## December 8th, Thursday (in person at Mila, Montreal) -Day 2 consists of parallel sessions, that will take place on **two separate Zoom rooms**, [Zoom A](https://us02web.zoom.us/j/82032866297) and [Zoom B](https://us02web.zoom.us/j/88008045355). If you have registered, you should have received the links and **password** of the event via email. As on Day 1, social breaks will take place on [Gather](https://gather.town/i/e7LPsVjS). Our Gather town will remain open throughout the whole symposium and you are welcome to join and interact with other attendees any time! - -{% include table-schedule.html date="20210608" people="Mentor(s)" %} +The times are given in the local **Montreal time (Eastern Standard Time, UTC-5)**. +{% include table-schedule-inperson.html %} diff --git a/_pages/speakers.md b/_pages/speakers.md index 414d5e0a..2eff7b25 100644 --- a/_pages/speakers.md +++ b/_pages/speakers.md @@ -1,63 +1,15 @@ --- title: Speakers -layout: page +layout: page-floatbutton permalink: /speakers --- -# Monday June 7th -{% assign people = site.data.speakers %} -{% for person in people %} - {% if person.fullname == "TBA" %}{% continue %}{% endif %} - {% for session in person.sessions %} - {% assign sessionright = false %} - {% if session contains "20210607" %}{% assign sessionright = true %}{% endif %} - {% if session contains "activebreak" %}{% assign sessionright = false %}{% endif %} - {% endfor %} - {% if sessionright %} - {% assign side = forloop.index0 | modulo: 2 %} - {% if side == 0 %} - {% include speaker-card.html %} - {% else %} - {% include speaker-card.html %} - {% endif %} - {% endif %} +{% assign speakers = site.data.speakers %} +{% for speaker in speakers %} + {% if speaker.skip %}{% continue %}{% endif %} + {% assign side = forloop.index0 | modulo: 2 %} + {% if side == 0 %} + {% include speaker-card.html %} + {% else %} + {% include speaker-card.html %} + {% endif %} {% endfor %} - -# Tuesday June 8th -{% assign people = site.data.speakers | sample: site.data.speakers.size %} -{% for person in people %} - {% if person.fullname == "TBA" %}{% continue %}{% endif %} - {% for session in person.sessions %} - {% assign sessionright = false %} - {% if session contains "20210608" %}{% assign sessionright = true %}{% endif %} - {% if session contains "activebreak" %}{% assign sessionright = false %}{% endif %} - {% endfor %} - {% if sessionright %} - {% assign side = forloop.index0 | modulo: 2 %} - {% if side == 0 %} - {% include speaker-card.html %} - {% else %} - {% include speaker-card.html %} - {% endif %} - {% endif %} -{% endfor %} - -# Active breaks leader -{% assign people = site.data.speakers | sample: site.data.speakers.size %} -{% for person in people %} - {% if person.fullname == "TBA" %}{% continue %}{% endif %} - {% for session in person.sessions %} - {% assign sessionright = false %} - {% if session contains "activebreak" %} - {% assign sessionright = true %} - {% endif %} - {% endfor %} - {% if sessionright %} - {% assign side = forloop.index0 | modulo: 2 %} - {% if side == 0 %} - {% include speaker-card.html %} - {% else %} - {% include speaker-card.html %} - {% endif %} - {% endif %} -{% endfor %} - diff --git a/_pages/team.md b/_pages/team.md index 8f0e2fbd..bdae8cd2 100644 --- a/_pages/team.md +++ b/_pages/team.md @@ -1,9 +1,9 @@ --- -layout: page +layout: page-floatbutton title: Team permalink: /team --- -USS is organized every year by volunteer students from [UNIQUE](https://sites.google.com/view/unique-neuro-ai/home). This is the organizing team of USS 2021, in random order. +AI Helps Ukraine is organized by volunteer students and friends from [Mila](https://mila.quebec). We are deeply concerned by the impacts of the war in Ukraine on research institutes and medical treatments. Many students and researchers in Ukraine are affected by war and cannot continue their work - their loss is our loss as a global community. These are the organisers (in random order): {% assign people = site.data.team | sample: site.data.team.size %} {% for person in people %} @@ -14,4 +14,3 @@ USS is organized every year by volunteer students from [UNIQUE](https://sites.go {% include team-card.html %} {% endif %} {% endfor %} - diff --git a/_pages/who_we_support.md b/_pages/who_we_support.md new file mode 100644 index 00000000..700b0504 --- /dev/null +++ b/_pages/who_we_support.md @@ -0,0 +1,59 @@ +--- +layout: page-floatbutton +title: Who we support +subtitle: There is no story that is not touching +permalink: /who_we_support +--- + +# UAMS - Ukraine Medical Support + +## Interview with Slava Lukan + + +## Summary +The year that **Ukraine Medical Support (UAMS)** was created is the year when the current conflict finds its roots: 2014. Firstly as an informal organization through which Slava and his wife, with a medical background, provided help to people affected by the conflict from Toronto, Canada. When the conflict got worse in 2022, UAMS took the shape of what it is today: a non-profit organization that sends weekly help to Ukraine and that provides medical and psychological help to refugees, single mothers, kids, and the elderly. + +Since the conflict got to a major scale, **organizing their work got more complex.** UAMS had to start new channels of help from scratch: they had to find warehouses, transportation companies, volunteers, contact people in need… After a period of adaptation, they have currently two warehouses: one in Mississauga (Canada) and one in Lutsk (Ukraine). Their main headquarters are located in Toronto. Donations are shipped from Mississauga to Lutsk and are distributed all over Ukraine afterward. Given the dire need for supplies, everything gets quickly distributed the same day or during the following days. + +**The most needed items are: drugs, hygiene items, and food.** Supplies for these needs are few and far between in Ukraine. For food supplies, UAMS is developing a project where mainly refugees in Ukraine build boxes containing 24 food items (such as oil, sugar, or tomato sauce). These boxes are later distributed to people that need them and people that built them get a salary in exchange. Therefore, Ukrainians can receive products that are scarce in the country and UAMS supports the economy by giving people the chance of earning a salary. UAMS is also asking for clothes donations: winter and kids clothes (0-7 years old) especially. + +**UAMS receives requests for help every day**. Since UAMS has been functioning for more than 7 years, they have built a network of 20-30 non-profit organizations that work with them in Ukraine. Once supplies are in the warehouse in Lutsk, UAMS workers check the list of needs sent by these organizations and organize the shipments to each region according to their demands. + +**There is no story that isn’t touching**. UAMS tries to supply all the needs to make the life of refugees and internally displaced people better. Such was the case of a disabled kid that had to leave Kiev with his grandmother to a school not customized to his needs. UAMS tries to send mobility devices or other needed items according to the needs of people. If you want to hear and read more about stories of people affected by the war, UAMS share personal stories on their [Facebook site](https://www.facebook.com/uamedicalsupport). + +**We encourage you to continue donating.** The current escalation of the war broke out in February, but **we should not forget** the humanitarian catastrophe taking place in Ukraine due to the Russian invasion since then. The war is not over and the needs are still huge. People still need your help. + +UAMS is one of the main partners of AI Helps Ukraine. It is our partner in Canada and we will be sharing logistical tools to make sure that help sent gets to the right people in Ukraine. + +## Ressources +* Website UAMS: [www.uams.ca](https://uams.ca) + + +# NCI - National Cancer Institute Ukraine + +## Interview with Andriy Beznosenko + + +## Summary +**National Cancer Institute (NCI) is Ukraine’s leading cancer hospital.** It was founded one century ago, in 1920 and it acts as the connecting link between the oncological centers of each region. It has 600 beds for patients, 25.000 patients per year that receive stationary treatment, and more than 100.000 in ambulatory care. + +**Its activity goes beyond traditional hospital functions:** it treats and prevents cancer as well as boosts cancer scientific research and education. In current times, it had to broaden its functions and learn to act as a military hospital as well. NCI receives military personnel suffering from serious injuries after they got first medical treatment at the frontline. + +As another consequence of the onset of the war, NCI has started to develop another extra function: the compilation of lessons learned on how to give cancer treatment during wartime. This opens the door to the possibility of sharing useful information with the international medical community and other countries going through similar situations. + +**The worsening of the war in February had a great impact** on the lives of all Ukrainians and the NCI. The effects are seen in **the short** and long **term**. On the same day that Russia decided to invade Ukraine, there were 40 children at NCI, most of them recently operated. 3 of them have had a marrow operation. NCI workers carried them to the basement, which served as a shelling shelter, and continued to offer them treatment. During the first 3-4 days, NCI was, fortunately, able to fully evacuate all children to Europe and the United States. + +“*When it happens, when there is a siren and when you realize that the frontline is 10 km away from us, having several patients at the hospital, you try to fill time with work, thus avoiding to think of what is happening*” explains **Andriy Beznosenko**, the institute’s lead doctor and a colorectal cancer specialist. + +During the 2 months that NCI workers had to live in the institute, they **witnessed many touching stories**, such as patients receiving treatments and transplantations that were in the process and that needed to be continued. Some staff members had to donate blood which was needed for the operations. A resident doctor in her third year of studies had to make a marrow transplantation to a kid on the second day of the war. She donated blood, transferred it to the kid, and injected herself with calcium carbonate, so as to exhale and continue working. + +Since the beginning, NCI has been **greatly supported** by Ukrainian, European, and North American volunteers. They received more than one truck full of drugs and waste materials. NCI also had conversations with the so-called “Big Pharma” companies, such as Pfizer, Roche, Merck, Takeda… These donated medicines were in warehouses in Ukraine, which NCI received on the spot. + +NCI has **currently more patients** than at the beginning of the war because the oncological centers of Kherson, Melitopol, Krematorsk, Luhansk, and Mariupol are under the Russian annexation of Ukrainian territories. Others such as Kharkiv, Chernihiv, and Mykolaiv’s centers, have been greatly damaged. Thus, people from the regions close to the front, such as Dnipro, Poltava, or Mykolaiv, tend to flee those zones towards safer ones and NCI has now much more patients than before the war or during the COVID pandemic. As a result, NCI tries to reduce waiting lists by making longer shifts. + +**State’s general budgets have been greatly reduced for 2023**, except for the military. The reduction in medical expenses will be around 20%. Despite oncology was never covered by 100%, its reduction by 1/5 for 2023 will have a huge impact on NCI. This seems to be one of the main challenges for oncology treatment regarding **long-term effects** of the war. Since the onset of the war, some products are even already bought by doctors and other hospital staff due to a lack of money, such as toilet paper or other housekeeping supplies. NCI needs medicines and other health materials, even the most basic supplies, such as gloves, chairs, stools, surgical costumes… + +**NCI will be one of our main partners in Ukraine.** We will send the institute supplies according to their needs. Unfortunately, cancer drugs are usually very expensive. The more money we raise, the more drugs we will be able to send to Ukraine and, thus, help NCI to overcome this drastic budget reduction. + +## Ressources +* Website NCI: [www.unci.org.ua](https://unci.org.ua/) diff --git a/assets/css/app.scss b/assets/css/app.scss index 1a549819..510b8b51 100644 --- a/assets/css/app.scss +++ b/assets/css/app.scss @@ -1,5 +1,7 @@ --- --- -$primary: #372248; +$primary: #005bbb; +$blue: $primary; +$yellow: #ffda03; // Import Main CSS file from theme @import "main"; diff --git a/assets/ics/AIHelpsUkraine_Timnit_Gebru_talk.ics b/assets/ics/AIHelpsUkraine_Timnit_Gebru_talk.ics new file mode 100644 index 00000000..4a3caca3 --- /dev/null +++ b/assets/ics/AIHelpsUkraine_Timnit_Gebru_talk.ics @@ -0,0 +1,66 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +VERSION:2.0 +X-WR-CALNAME:AI Helps Ukraine: Dr. Timnit Gebru's talk +METHOD:PUBLISH +PRODID:-//Apple Inc.//macOS 12.2//EN +BEGIN:VTIMEZONE +TZID:America/Toronto +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +DTSTART:20070311T020000 +TZNAME:GMT-4 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +DTSTART:20071104T020000 +TZNAME:GMT-5 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +TRANSP:OPAQUE +DTEND;TZID=America/Toronto:20221026T133000 +UID:D487099C-32AD-415D-91D8-3338788B3219 +DTSTAMP:20221025T015850Z +DESCRIPTION:Topic: Community rooted\, independent AI research\n\nThe Dis + tributed Artificial Intelligence Research Institute (DAIR) was launched + in December 2021 by Timnit Gebru as a space for independent\, community- + rooted AI research\, free from Big Tech’s pervasive influence. Gebru bel + ieves that the harms embedded in AI technology are preventable and that + when its production and deployment include diverse perspectives and deli + berate processes\, it can be put to work for people\, rather than agains + t them. With DAIR\, Gebru aims to create an environment that is independ + ent from the structures and systems that incentivize profit over ethics + and individual well-being. In this talk\, Gebru will discuss why she fou + nded DAIR and what she hopes this interdisciplinary\, community-based\, + global network of AI researchers can accomplish. She will discuss the in + centive structures that make it difficult to perform ethical AI research + \, and give examples of how DAIR is hoping to forge a different path.\n\ + nBio\nTimnit Gebru is the founder and executive director of the Distribu + ted Artificial Intelligence Research Institute (DAIR). Prior to that she + was fired by Google in December 2020 for raising issues of discriminati + on in the workplace\, where she was serving as co-lead of the Ethical AI + research team. She received her PhD from Stanford University\, and did + a postdoc at Microsoft Research\, New York City in the FATE (Fairness Ac + countability Transparency and Ethics in AI) group\, where she studied al + gorithmic bias and the ethical implications underlying projects aiming t + o gain insights from data. Timnit also co-founded Black in AI\, a nonpro + fit that works to increase the presence\, inclusion\, visibility and hea + lth of Black people in the field of AI\, and is on the board of AddisCod + er\, a nonprofit dedicated to teaching algorithms and computer programmi + ng to Ethiopian highschool students\, free of charge.\n\n----( Video Cal + l )----\nhttps://www.crowdcast.io/c/ai-helps-ukraine\n---===--- +STATUS:CONFIRMED +SEQUENCE:7 +X-APPLE-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC +SUMMARY:AI Helps Ukraine: Dr. Timnit Gebru's talk +LAST-MODIFIED:20221025T015850Z +CREATED:20221025T011234Z +DTSTART;TZID=America/Toronto:20221026T123000 +LOCATION:https://www.crowdcast.io/c/ai-helps-ukraine +END:VEVENT +END:VCALENDAR diff --git a/assets/ics/AIHelpsUkraine_Yoshua.ics b/assets/ics/AIHelpsUkraine_Yoshua.ics new file mode 100644 index 00000000..bc6765e0 --- /dev/null +++ b/assets/ics/AIHelpsUkraine_Yoshua.ics @@ -0,0 +1,60 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +VERSION:2.0 +X-WR-CALNAME:AI Helps Ukraine: Prof. Yoshua Bengio's talk +METHOD:PUBLISH +PRODID:-//Apple Inc.//macOS 12.2//EN +BEGIN:VTIMEZONE +TZID:America/Toronto +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +DTSTART:20070311T020000 +TZNAME:GMT-4 +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +DTSTART:20071104T020000 +TZNAME:GMT-5 +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +TRANSP:OPAQUE +DTEND;TZID=America/Toronto:20221103T130000 +UID:0F744CBF-53AF-442D-8458-D76B108F29E3 +DTSTAMP:20221101T211623Z +DESCRIPTION:Topic: AI to explore molecular space and fight pandemics and + climate change\n\nAbstract: \nMachine learning research is expanding it + s reach\, beyond the traditional realm of the tech industry and into the + activities of other scientists\, opening the door to truly transformati + ve advances in these disciplines. In this lecture I will focus on two as + pects\, modeling and experimental design\, that are intertwined in the t + heory-experiment-analysis active learning loop that constitutes a core e + lement of the scientific methodology. Computers will be necessary to go + beyond the currently purely manual research loop and take advantage of h + igh-throughput experimental setups and large-scale experimental datasets + . I will discuss methods related to active learning\, reinforcement lear + ning\, generative modeling\, Bayesian ML\, amortized variational learnin + g and causal discovery. I will discuss the notion of epistemic uncertain + ty and how to estimate it. I will motivate generative policies that can + sample a diverse set of candidate solutions to a problem\, be it for pro + posing new experiments or causal hypotheses. Finally\, I will describe c + urrent research to help us with these questions based on a new deep lear + ning probabilistic framework called GFlowNets and how we plan to apply t + hese in areas of great societal need like the unmet challenge of antimic + robial resistance or the discovery of new materials to help fight climat + e change.\n\n----( Video Call )----\nhttps://www.crowdcast.io/c/ai-helps + -ukraine/stAnz\n---===--- +STATUS:CONFIRMED +SEQUENCE:1 +X-APPLE-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC +SUMMARY:AI Helps Ukraine: Prof. Yoshua Bengio's talk +LAST-MODIFIED:20221101T211623Z +CREATED:20221101T211428Z +DTSTART;TZID=America/Toronto:20221103T120000 +LOCATION:https://www.crowdcast.io/c/ai-helps-ukraine/stAnz +END:VEVENT +END:VCALENDAR diff --git a/assets/img/network-372248-grad.png b/assets/img/archive/network-372248-grad.png similarity index 100% rename from assets/img/network-372248-grad.png rename to assets/img/archive/network-372248-grad.png diff --git a/assets/img/network-372248.png b/assets/img/archive/network-372248.png similarity index 100% rename from assets/img/network-372248.png rename to assets/img/archive/network-372248.png diff --git a/assets/img/unique-logo-white-favicon.png b/assets/img/archive/unique-logo-white-favicon.png similarity index 100% rename from assets/img/unique-logo-white-favicon.png rename to assets/img/archive/unique-logo-white-favicon.png diff --git a/assets/img/unique-logo.png b/assets/img/archive/unique-logo.png similarity index 100% rename from assets/img/unique-logo.png rename to assets/img/archive/unique-logo.png diff --git a/assets/img/banners/banner-1-v1.png b/assets/img/banners/banner-1-v1.png deleted file mode 100644 index 81cf70b6..00000000 Binary files a/assets/img/banners/banner-1-v1.png and /dev/null differ diff --git a/assets/img/banners/banner-2-v1.png b/assets/img/banners/banner-2-v1.png deleted file mode 100644 index 4497d25f..00000000 Binary files a/assets/img/banners/banner-2-v1.png and /dev/null differ diff --git a/assets/img/bg-sunflowers-005bbbc4-crop.png b/assets/img/bg-sunflowers-005bbbc4-crop.png new file mode 100644 index 00000000..848f1436 Binary files /dev/null and b/assets/img/bg-sunflowers-005bbbc4-crop.png differ diff --git a/assets/img/donors/ivado_labs.jpg b/assets/img/donors/ivado_labs.jpg new file mode 100644 index 00000000..df113b8c Binary files /dev/null and b/assets/img/donors/ivado_labs.jpg differ diff --git a/assets/img/logo/icon.png b/assets/img/logo/icon.png new file mode 100644 index 00000000..a8d8768c Binary files /dev/null and b/assets/img/logo/icon.png differ diff --git a/assets/img/logo/icon_square_transparent.png b/assets/img/logo/icon_square_transparent.png new file mode 100644 index 00000000..b1719688 Binary files /dev/null and b/assets/img/logo/icon_square_transparent.png differ diff --git a/assets/img/logo/logo-mini.png b/assets/img/logo/logo-mini.png new file mode 100644 index 00000000..27279454 Binary files /dev/null and b/assets/img/logo/logo-mini.png differ diff --git a/assets/img/logo/logo_150dpi.png b/assets/img/logo/logo_150dpi.png new file mode 100644 index 00000000..e1079b6b Binary files /dev/null and b/assets/img/logo/logo_150dpi.png differ diff --git a/assets/img/logo/logo_90dpi.png b/assets/img/logo/logo_90dpi.png new file mode 100644 index 00000000..68b07afc Binary files /dev/null and b/assets/img/logo/logo_90dpi.png differ diff --git a/assets/img/logo/our_icon.png b/assets/img/logo/our_icon.png new file mode 100644 index 00000000..c3450669 Binary files /dev/null and b/assets/img/logo/our_icon.png differ diff --git a/assets/img/partners/Mila_LOGO.png b/assets/img/partners/Mila_LOGO.png new file mode 100644 index 00000000..38c3b02b Binary files /dev/null and b/assets/img/partners/Mila_LOGO.png differ diff --git a/assets/img/partners/UAMC_logo_clean.png b/assets/img/partners/UAMC_logo_clean.png new file mode 100644 index 00000000..822f5be4 Binary files /dev/null and b/assets/img/partners/UAMC_logo_clean.png differ diff --git a/assets/img/partners/UAMS.png b/assets/img/partners/UAMS.png new file mode 100644 index 00000000..ffe02066 Binary files /dev/null and b/assets/img/partners/UAMS.png differ diff --git a/assets/img/partners/institut.png b/assets/img/partners/institut.png new file mode 100644 index 00000000..4484a9c7 Binary files /dev/null and b/assets/img/partners/institut.png differ diff --git a/assets/img/partners/institute.png b/assets/img/partners/institute.png new file mode 100644 index 00000000..17a2c083 Binary files /dev/null and b/assets/img/partners/institute.png differ diff --git a/assets/img/speakers/aislinn_sandre.jpg b/assets/img/speakers/aislinn_sandre.jpg deleted file mode 100644 index d0f4ccfb..00000000 Binary files a/assets/img/speakers/aislinn_sandre.jpg and /dev/null differ diff --git a/assets/img/speakers/alexei_efros.jpg b/assets/img/speakers/alexei_efros.jpg new file mode 100644 index 00000000..62c699fe Binary files /dev/null and b/assets/img/speakers/alexei_efros.jpg differ diff --git a/assets/img/speakers/andreanne_proulx.jpg b/assets/img/speakers/andreanne_proulx.jpg deleted file mode 100644 index c3efa2f6..00000000 Binary files a/assets/img/speakers/andreanne_proulx.jpg and /dev/null differ diff --git a/assets/img/speakers/anna_goldenberg.jpg b/assets/img/speakers/anna_goldenberg.jpg new file mode 100644 index 00000000..b23bb61b Binary files /dev/null and b/assets/img/speakers/anna_goldenberg.jpg differ diff --git a/assets/img/speakers/caelan_taylor.jpg b/assets/img/speakers/caelan_taylor.jpg deleted file mode 100644 index 31f9d120..00000000 Binary files a/assets/img/speakers/caelan_taylor.jpg and /dev/null differ diff --git a/assets/img/speakers/david_rolnick.jpg b/assets/img/speakers/david_rolnick.jpg new file mode 100644 index 00000000..e9cecb86 Binary files /dev/null and b/assets/img/speakers/david_rolnick.jpg differ diff --git a/assets/img/speakers/guillaume_lajoie.jpg b/assets/img/speakers/guillaume_lajoie.jpg deleted file mode 100644 index fd07066b..00000000 Binary files a/assets/img/speakers/guillaume_lajoie.jpg and /dev/null differ diff --git a/assets/img/speakers/hannah_kerner.jpg b/assets/img/speakers/hannah_kerner.jpg new file mode 100644 index 00000000..44de9e06 Binary files /dev/null and b/assets/img/speakers/hannah_kerner.jpg differ diff --git a/assets/img/speakers/inbal_becker-reshef.jpg b/assets/img/speakers/inbal_becker-reshef.jpg new file mode 100644 index 00000000..218eb26a Binary files /dev/null and b/assets/img/speakers/inbal_becker-reshef.jpg differ diff --git a/assets/img/speakers/irina_rish.jpg b/assets/img/speakers/irina_rish.jpg deleted file mode 100644 index 51b9b088..00000000 Binary files a/assets/img/speakers/irina_rish.jpg and /dev/null differ diff --git a/assets/img/speakers/madeleine_elise_nadler.jpg b/assets/img/speakers/madeleine_elise_nadler.jpg deleted file mode 100644 index 73a6116a..00000000 Binary files a/assets/img/speakers/madeleine_elise_nadler.jpg and /dev/null differ diff --git a/assets/img/speakers/marie-eve_vautrin_nadeau.jpg b/assets/img/speakers/marie-eve_vautrin_nadeau.jpg deleted file mode 100644 index 949327a0..00000000 Binary files a/assets/img/speakers/marie-eve_vautrin_nadeau.jpg and /dev/null differ diff --git a/assets/img/speakers/max_welling.jpg b/assets/img/speakers/max_welling.jpg new file mode 100644 index 00000000..a0e5a297 Binary files /dev/null and b/assets/img/speakers/max_welling.jpg differ diff --git a/assets/img/speakers/megan_peters.jpg b/assets/img/speakers/megan_peters.jpg deleted file mode 100644 index 0fcddc5a..00000000 Binary files a/assets/img/speakers/megan_peters.jpg and /dev/null differ diff --git a/assets/img/speakers/michael_bronstein.jpg b/assets/img/speakers/michael_bronstein.jpg new file mode 100644 index 00000000..37a85e90 Binary files /dev/null and b/assets/img/speakers/michael_bronstein.jpg differ diff --git a/assets/img/speakers/paul_cisek.jpg b/assets/img/speakers/paul_cisek.jpg deleted file mode 100644 index da7bc633..00000000 Binary files a/assets/img/speakers/paul_cisek.jpg and /dev/null differ diff --git a/assets/img/speakers/pim_haselager.jpg b/assets/img/speakers/pim_haselager.jpg deleted file mode 100644 index 48104d97..00000000 Binary files a/assets/img/speakers/pim_haselager.jpg and /dev/null differ diff --git a/assets/img/speakers/regina_barzilay.jpg b/assets/img/speakers/regina_barzilay.jpg new file mode 100644 index 00000000..99d6ad1e Binary files /dev/null and b/assets/img/speakers/regina_barzilay.jpg differ diff --git a/assets/img/speakers/robin_renault.jpg b/assets/img/speakers/robin_renault.jpg deleted file mode 100644 index 1754d807..00000000 Binary files a/assets/img/speakers/robin_renault.jpg and /dev/null differ diff --git a/assets/img/speakers/samuel_guay.jpg b/assets/img/speakers/samuel_guay.jpg deleted file mode 100644 index bfe38723..00000000 Binary files a/assets/img/speakers/samuel_guay.jpg and /dev/null differ diff --git a/assets/img/speakers/sara_beery.jpg b/assets/img/speakers/sara_beery.jpg new file mode 100644 index 00000000..1d3a2d01 Binary files /dev/null and b/assets/img/speakers/sara_beery.jpg differ diff --git a/assets/img/speakers/stefanie_blain-moraes.jpg b/assets/img/speakers/stefanie_blain-moraes.jpg deleted file mode 100644 index 9ca80506..00000000 Binary files a/assets/img/speakers/stefanie_blain-moraes.jpg and /dev/null differ diff --git a/assets/img/speakers/thomas_shultz.jpg b/assets/img/speakers/thomas_shultz.jpg deleted file mode 100644 index 8f03cb74..00000000 Binary files a/assets/img/speakers/thomas_shultz.jpg and /dev/null differ diff --git a/assets/img/speakers/thomas_shultz.png b/assets/img/speakers/thomas_shultz.png deleted file mode 100644 index 3f6386e3..00000000 Binary files a/assets/img/speakers/thomas_shultz.png and /dev/null differ diff --git a/assets/img/speakers/timnit_gebru.jpg b/assets/img/speakers/timnit_gebru.jpg new file mode 100644 index 00000000..731777aa Binary files /dev/null and b/assets/img/speakers/timnit_gebru.jpg differ diff --git a/assets/img/speakers/yoshua_bengio.jpg b/assets/img/speakers/yoshua_bengio.jpg new file mode 100644 index 00000000..07fce42c Binary files /dev/null and b/assets/img/speakers/yoshua_bengio.jpg differ diff --git a/assets/img/team/alexandra_volokhova.jpg b/assets/img/team/alexandra_volokhova.jpg new file mode 100644 index 00000000..34d62eb9 Binary files /dev/null and b/assets/img/team/alexandra_volokhova.jpg differ diff --git a/assets/img/team/annabelle_harvey.jpg b/assets/img/team/annabelle_harvey.jpg deleted file mode 100644 index b5e0de54..00000000 Binary files a/assets/img/team/annabelle_harvey.jpg and /dev/null differ diff --git a/assets/img/team/ayuno_nakahashi.jpg b/assets/img/team/ayuno_nakahashi.jpg deleted file mode 100644 index e913cd92..00000000 Binary files a/assets/img/team/ayuno_nakahashi.jpg and /dev/null differ diff --git a/assets/img/team/charlotte_maschke.jpg b/assets/img/team/charlotte_maschke.jpg deleted file mode 100644 index c43efbe2..00000000 Binary files a/assets/img/team/charlotte_maschke.jpg and /dev/null differ diff --git a/assets/img/team/eddy_fortier.jpg b/assets/img/team/eddy_fortier.jpg deleted file mode 100644 index 14e3c0a4..00000000 Binary files a/assets/img/team/eddy_fortier.jpg and /dev/null differ diff --git a/assets/img/team/hugo_jourde.jpg b/assets/img/team/hugo_jourde.jpg deleted file mode 100644 index 7774e44a..00000000 Binary files a/assets/img/team/hugo_jourde.jpg and /dev/null differ diff --git a/assets/img/team/julia_kaltenborn.jpg b/assets/img/team/julia_kaltenborn.jpg new file mode 100644 index 00000000..7677e8b3 Binary files /dev/null and b/assets/img/team/julia_kaltenborn.jpg differ diff --git a/assets/img/team/laurence_petitpas.jpg b/assets/img/team/laurence_petitpas.jpg deleted file mode 100644 index e03ed18f..00000000 Binary files a/assets/img/team/laurence_petitpas.jpg and /dev/null differ diff --git a/assets/img/team/maksym_korablyov.jpeg b/assets/img/team/maksym_korablyov.jpeg new file mode 100644 index 00000000..60056e7c Binary files /dev/null and b/assets/img/team/maksym_korablyov.jpeg differ diff --git a/assets/img/team/marie-eve_picard.jpg b/assets/img/team/marie-eve_picard.jpg deleted file mode 100644 index 15c0d927..00000000 Binary files a/assets/img/team/marie-eve_picard.jpg and /dev/null differ diff --git a/assets/img/team/marta_pereira-de-la-infanta.jpg b/assets/img/team/marta_pereira-de-la-infanta.jpg new file mode 100644 index 00000000..43ec529d Binary files /dev/null and b/assets/img/team/marta_pereira-de-la-infanta.jpg differ diff --git a/assets/img/team/melisande_teng.jpg b/assets/img/team/melisande_teng.jpg new file mode 100644 index 00000000..bcee9468 Binary files /dev/null and b/assets/img/team/melisande_teng.jpg differ diff --git a/assets/img/team/nazanin_sepahvand.jpg b/assets/img/team/nazanin_sepahvand.jpg deleted file mode 100644 index c8bcde04..00000000 Binary files a/assets/img/team/nazanin_sepahvand.jpg and /dev/null differ diff --git a/assets/img/team/oleksiy_ostapenko.png b/assets/img/team/oleksiy_ostapenko.png new file mode 100644 index 00000000..6952b208 Binary files /dev/null and b/assets/img/team/oleksiy_ostapenko.png differ diff --git a/assets/img/team/xiaoxuan_lei.jpg b/assets/img/team/xiaoxuan_lei.jpg deleted file mode 100644 index 568d5a6a..00000000 Binary files a/assets/img/team/xiaoxuan_lei.jpg and /dev/null differ diff --git a/assets/js/papaparse.js b/assets/js/papaparse.js new file mode 100755 index 00000000..f666659b --- /dev/null +++ b/assets/js/papaparse.js @@ -0,0 +1,1907 @@ +/* @license +Papa Parse +v5.0.2 +https://github.com/mholt/PapaParse +License: MIT +*/ + +(function (root, factory) { + /* globals define */ + if (typeof define === "function" && define.amd) { + // AMD. Register as an anonymous module. + define([], factory); + } else if (typeof module === "object" && typeof exports !== "undefined") { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(); + } else { + // Browser globals (root is window) + root.Papa = factory(); + } + // in strict mode we cannot access arguments.callee, so we need a named reference to + // stringify the factory method for the blob worker + // eslint-disable-next-line func-name +})(this, function moduleFactory() { + "use strict"; + + var global = (function () { + // alternative method, similar to `Function('return this')()` + // but without using `eval` (which is disabled when + // using Content Security Policy). + + if (typeof self !== "undefined") { + return self; + } + if (typeof window !== "undefined") { + return window; + } + if (typeof global !== "undefined") { + return global; + } + + // When running tests none of the above have been defined + return {}; + })(); + + function getWorkerBlob() { + var URL = global.URL || global.webkitURL || null; + var code = moduleFactory.toString(); + return ( + Papa.BLOB_URL || + (Papa.BLOB_URL = URL.createObjectURL( + new Blob(["(", code, ")();"], { type: "text/javascript" }) + )) + ); + } + + var IS_WORKER = !global.document && !!global.postMessage, + IS_PAPA_WORKER = + IS_WORKER && /blob:/i.test((global.location || {}).protocol); + var workers = {}, + workerIdCounter = 0; + + var Papa = {}; + + Papa.parse = CsvToJson; + Papa.unparse = JsonToCsv; + + Papa.RECORD_SEP = String.fromCharCode(30); + Papa.UNIT_SEP = String.fromCharCode(31); + Papa.BYTE_ORDER_MARK = "\ufeff"; + Papa.BAD_DELIMITERS = ["\r", "\n", '"', Papa.BYTE_ORDER_MARK]; + Papa.WORKERS_SUPPORTED = !IS_WORKER && !!global.Worker; + Papa.NODE_STREAM_INPUT = 1; + + // Configurable chunk sizes for local and remote files, respectively + Papa.LocalChunkSize = 1024 * 1024 * 10; // 10 MB + Papa.RemoteChunkSize = 1024 * 1024 * 5; // 5 MB + Papa.DefaultDelimiter = ","; // Used if not specified and detection fails + + // Exposed for testing and development only + Papa.Parser = Parser; + Papa.ParserHandle = ParserHandle; + Papa.NetworkStreamer = NetworkStreamer; + Papa.FileStreamer = FileStreamer; + Papa.StringStreamer = StringStreamer; + Papa.ReadableStreamStreamer = ReadableStreamStreamer; + if (typeof PAPA_BROWSER_CONTEXT === "undefined") { + Papa.DuplexStreamStreamer = DuplexStreamStreamer; + } + + if (global.jQuery) { + var $ = global.jQuery; + $.fn.parse = function (options) { + var config = options.config || {}; + var queue = []; + + this.each(function (idx) { + var supported = + $(this).prop("tagName").toUpperCase() === "INPUT" && + $(this).attr("type").toLowerCase() === "file" && + global.FileReader; + + if (!supported || !this.files || this.files.length === 0) + return true; // continue to next input element + + for (var i = 0; i < this.files.length; i++) { + queue.push({ + file: this.files[i], + inputElem: this, + instanceConfig: $.extend({}, config), + }); + } + }); + + parseNextFile(); // begin parsing + return this; // maintains chainability + + function parseNextFile() { + if (queue.length === 0) { + if (isFunction(options.complete)) options.complete(); + return; + } + + var f = queue[0]; + + if (isFunction(options.before)) { + var returned = options.before(f.file, f.inputElem); + + if (typeof returned === "object") { + if (returned.action === "abort") { + error( + "AbortError", + f.file, + f.inputElem, + returned.reason + ); + return; // Aborts all queued files immediately + } else if (returned.action === "skip") { + fileComplete(); // parse the next file in the queue, if any + return; + } else if (typeof returned.config === "object") + f.instanceConfig = $.extend( + f.instanceConfig, + returned.config + ); + } else if (returned === "skip") { + fileComplete(); // parse the next file in the queue, if any + return; + } + } + + // Wrap up the user's complete callback, if any, so that ours also gets executed + var userCompleteFunc = f.instanceConfig.complete; + f.instanceConfig.complete = function (results) { + if (isFunction(userCompleteFunc)) + userCompleteFunc(results, f.file, f.inputElem); + fileComplete(); + }; + + Papa.parse(f.file, f.instanceConfig); + } + + function error(name, file, elem, reason) { + if (isFunction(options.error)) + options.error({ name: name }, file, elem, reason); + } + + function fileComplete() { + queue.splice(0, 1); + parseNextFile(); + } + }; + } + + if (IS_PAPA_WORKER) { + global.onmessage = workerThreadReceivedMessage; + } + + function CsvToJson(_input, _config) { + _config = _config || {}; + var dynamicTyping = _config.dynamicTyping || false; + if (isFunction(dynamicTyping)) { + _config.dynamicTypingFunction = dynamicTyping; + // Will be filled on first row call + dynamicTyping = {}; + } + _config.dynamicTyping = dynamicTyping; + + _config.transform = isFunction(_config.transform) + ? _config.transform + : false; + + if (_config.worker && Papa.WORKERS_SUPPORTED) { + var w = newWorker(); + + w.userStep = _config.step; + w.userChunk = _config.chunk; + w.userComplete = _config.complete; + w.userError = _config.error; + + _config.step = isFunction(_config.step); + _config.chunk = isFunction(_config.chunk); + _config.complete = isFunction(_config.complete); + _config.error = isFunction(_config.error); + delete _config.worker; // prevent infinite loop + + w.postMessage({ + input: _input, + config: _config, + workerId: w.id, + }); + + return; + } + + var streamer = null; + if ( + _input === Papa.NODE_STREAM_INPUT && + typeof PAPA_BROWSER_CONTEXT === "undefined" + ) { + // create a node Duplex stream for use + // with .pipe + streamer = new DuplexStreamStreamer(_config); + return streamer.getStream(); + } else if (typeof _input === "string") { + if (_config.download) streamer = new NetworkStreamer(_config); + else streamer = new StringStreamer(_config); + } else if ( + _input.readable === true && + isFunction(_input.read) && + isFunction(_input.on) + ) { + streamer = new ReadableStreamStreamer(_config); + } else if ( + (global.File && _input instanceof File) || + _input instanceof Object + ) + // ...Safari. (see issue #106) + streamer = new FileStreamer(_config); + + return streamer.stream(_input); + } + + function JsonToCsv(_input, _config) { + // Default configuration + + /** whether to surround every datum with quotes */ + var _quotes = false; + + /** whether to write headers */ + var _writeHeader = true; + + /** delimiting character(s) */ + var _delimiter = ","; + + /** newline character(s) */ + var _newline = "\r\n"; + + /** quote character */ + var _quoteChar = '"'; + + /** escaped quote character, either "" or " */ + var _escapedQuote = _quoteChar + _quoteChar; + + /** whether to skip empty lines */ + var _skipEmptyLines = false; + + /** the columns (keys) we expect when we unparse objects */ + var _columns = null; + + unpackConfig(); + + var quoteCharRegex = new RegExp(escapeRegExp(_quoteChar), "g"); + + if (typeof _input === "string") _input = JSON.parse(_input); + + if (Array.isArray(_input)) { + if (!_input.length || Array.isArray(_input[0])) + return serialize(null, _input, _skipEmptyLines); + else if (typeof _input[0] === "object") + return serialize( + _columns || objectKeys(_input[0]), + _input, + _skipEmptyLines + ); + } else if (typeof _input === "object") { + if (typeof _input.data === "string") + _input.data = JSON.parse(_input.data); + + if (Array.isArray(_input.data)) { + if (!_input.fields) + _input.fields = _input.meta && _input.meta.fields; + + if (!_input.fields) + _input.fields = Array.isArray(_input.data[0]) + ? _input.fields + : objectKeys(_input.data[0]); + + if ( + !Array.isArray(_input.data[0]) && + typeof _input.data[0] !== "object" + ) + _input.data = [_input.data]; // handles input like [1,2,3] or ['asdf'] + } + + return serialize( + _input.fields || [], + _input.data || [], + _skipEmptyLines + ); + } + + // Default (any valid paths should return before this) + throw new Error("Unable to serialize unrecognized input"); + + function unpackConfig() { + if (typeof _config !== "object") return; + + if ( + typeof _config.delimiter === "string" && + !Papa.BAD_DELIMITERS.filter(function (value) { + return _config.delimiter.indexOf(value) !== -1; + }).length + ) { + _delimiter = _config.delimiter; + } + + if ( + typeof _config.quotes === "boolean" || + Array.isArray(_config.quotes) + ) + _quotes = _config.quotes; + + if ( + typeof _config.skipEmptyLines === "boolean" || + typeof _config.skipEmptyLines === "string" + ) + _skipEmptyLines = _config.skipEmptyLines; + + if (typeof _config.newline === "string") _newline = _config.newline; + + if (typeof _config.quoteChar === "string") + _quoteChar = _config.quoteChar; + + if (typeof _config.header === "boolean") + _writeHeader = _config.header; + + if (Array.isArray(_config.columns)) { + if (_config.columns.length === 0) + throw new Error("Option columns is empty"); + + _columns = _config.columns; + } + + if (_config.escapeChar !== undefined) { + _escapedQuote = _config.escapeChar + _quoteChar; + } + } + + /** Turns an object's keys into an array */ + function objectKeys(obj) { + if (typeof obj !== "object") return []; + var keys = []; + for (var key in obj) keys.push(key); + return keys; + } + + /** The double for loop that iterates the data and writes out a CSV string including header row */ + function serialize(fields, data, skipEmptyLines) { + var csv = ""; + + if (typeof fields === "string") fields = JSON.parse(fields); + if (typeof data === "string") data = JSON.parse(data); + + var hasHeader = Array.isArray(fields) && fields.length > 0; + var dataKeyedByField = !Array.isArray(data[0]); + + // If there a header row, write it first + if (hasHeader && _writeHeader) { + for (var i = 0; i < fields.length; i++) { + if (i > 0) csv += _delimiter; + csv += safe(fields[i], i); + } + if (data.length > 0) csv += _newline; + } + + // Then write out the data + for (var row = 0; row < data.length; row++) { + var maxCol = hasHeader ? fields.length : data[row].length; + + var emptyLine = false; + var nullLine = hasHeader + ? Object.keys(data[row]).length === 0 + : data[row].length === 0; + if (skipEmptyLines && !hasHeader) { + emptyLine = + skipEmptyLines === "greedy" + ? data[row].join("").trim() === "" + : data[row].length === 1 && + data[row][0].length === 0; + } + if (skipEmptyLines === "greedy" && hasHeader) { + var line = []; + for (var c = 0; c < maxCol; c++) { + var cx = dataKeyedByField ? fields[c] : c; + line.push(data[row][cx]); + } + emptyLine = line.join("").trim() === ""; + } + if (!emptyLine) { + for (var col = 0; col < maxCol; col++) { + if (col > 0 && !nullLine) csv += _delimiter; + var colIdx = + hasHeader && dataKeyedByField ? fields[col] : col; + csv += safe(data[row][colIdx], col); + } + if ( + row < data.length - 1 && + (!skipEmptyLines || (maxCol > 0 && !nullLine)) + ) { + csv += _newline; + } + } + } + return csv; + } + + /** Encloses a value around quotes if needed (makes a value safe for CSV insertion) */ + function safe(str, col) { + if (typeof str === "undefined" || str === null) return ""; + + if (str.constructor === Date) + return JSON.stringify(str).slice(1, 25); + + str = str.toString().replace(quoteCharRegex, _escapedQuote); + + var needsQuotes = + (typeof _quotes === "boolean" && _quotes) || + (Array.isArray(_quotes) && _quotes[col]) || + hasAny(str, Papa.BAD_DELIMITERS) || + str.indexOf(_delimiter) > -1 || + str.charAt(0) === " " || + str.charAt(str.length - 1) === " "; + + return needsQuotes ? _quoteChar + str + _quoteChar : str; + } + + function hasAny(str, substrings) { + for (var i = 0; i < substrings.length; i++) + if (str.indexOf(substrings[i]) > -1) return true; + return false; + } + } + + /** ChunkStreamer is the base prototype for various streamer implementations. */ + function ChunkStreamer(config) { + this._handle = null; + this._finished = false; + this._completed = false; + this._halted = false; + this._input = null; + this._baseIndex = 0; + this._partialLine = ""; + this._rowCount = 0; + this._start = 0; + this._nextChunk = null; + this.isFirstChunk = true; + this._completeResults = { + data: [], + errors: [], + meta: {}, + }; + replaceConfig.call(this, config); + + this.parseChunk = function (chunk, isFakeChunk) { + // First chunk pre-processing + if ( + this.isFirstChunk && + isFunction(this._config.beforeFirstChunk) + ) { + var modifiedChunk = this._config.beforeFirstChunk(chunk); + if (modifiedChunk !== undefined) chunk = modifiedChunk; + } + this.isFirstChunk = false; + this._halted = false; + + // Rejoin the line we likely just split in two by chunking the file + var aggregate = this._partialLine + chunk; + this._partialLine = ""; + + var results = this._handle.parse( + aggregate, + this._baseIndex, + !this._finished + ); + + if (this._handle.paused() || this._handle.aborted()) { + this._halted = true; + return; + } + + var lastIndex = results.meta.cursor; + + if (!this._finished) { + this._partialLine = aggregate.substring( + lastIndex - this._baseIndex + ); + this._baseIndex = lastIndex; + } + + if (results && results.data) this._rowCount += results.data.length; + + var finishedIncludingPreview = + this._finished || + (this._config.preview && + this._rowCount >= this._config.preview); + + if (IS_PAPA_WORKER) { + global.postMessage({ + results: results, + workerId: Papa.WORKER_ID, + finished: finishedIncludingPreview, + }); + } else if (isFunction(this._config.chunk) && !isFakeChunk) { + this._config.chunk(results, this._handle); + if (this._handle.paused() || this._handle.aborted()) { + this._halted = true; + return; + } + results = undefined; + this._completeResults = undefined; + } + + if (!this._config.step && !this._config.chunk) { + this._completeResults.data = this._completeResults.data.concat( + results.data + ); + this._completeResults.errors = + this._completeResults.errors.concat(results.errors); + this._completeResults.meta = results.meta; + } + + if ( + !this._completed && + finishedIncludingPreview && + isFunction(this._config.complete) && + (!results || !results.meta.aborted) + ) { + this._config.complete(this._completeResults, this._input); + this._completed = true; + } + + if (!finishedIncludingPreview && (!results || !results.meta.paused)) + this._nextChunk(); + + return results; + }; + + this._sendError = function (error) { + if (isFunction(this._config.error)) this._config.error(error); + else if (IS_PAPA_WORKER && this._config.error) { + global.postMessage({ + workerId: Papa.WORKER_ID, + error: error, + finished: false, + }); + } + }; + + function replaceConfig(config) { + // Deep-copy the config so we can edit it + var configCopy = copy(config); + configCopy.chunkSize = parseInt(configCopy.chunkSize); // parseInt VERY important so we don't concatenate strings! + if (!config.step && !config.chunk) configCopy.chunkSize = null; // disable Range header if not streaming; bad values break IIS - see issue #196 + this._handle = new ParserHandle(configCopy); + this._handle.streamer = this; + this._config = configCopy; // persist the copy to the caller + } + } + + function NetworkStreamer(config) { + config = config || {}; + if (!config.chunkSize) config.chunkSize = Papa.RemoteChunkSize; + ChunkStreamer.call(this, config); + + var xhr; + + if (IS_WORKER) { + this._nextChunk = function () { + this._readChunk(); + this._chunkLoaded(); + }; + } else { + this._nextChunk = function () { + this._readChunk(); + }; + } + + this.stream = function (url) { + this._input = url; + this._nextChunk(); // Starts streaming + }; + + this._readChunk = function () { + if (this._finished) { + this._chunkLoaded(); + return; + } + + xhr = new XMLHttpRequest(); + + if (this._config.withCredentials) { + xhr.withCredentials = this._config.withCredentials; + } + + if (!IS_WORKER) { + xhr.onload = bindFunction(this._chunkLoaded, this); + xhr.onerror = bindFunction(this._chunkError, this); + } + + xhr.open("GET", this._input, !IS_WORKER); + // Headers can only be set when once the request state is OPENED + if (this._config.downloadRequestHeaders) { + var headers = this._config.downloadRequestHeaders; + + for (var headerName in headers) { + xhr.setRequestHeader(headerName, headers[headerName]); + } + } + + if (this._config.chunkSize) { + var end = this._start + this._config.chunkSize - 1; // minus one because byte range is inclusive + xhr.setRequestHeader( + "Range", + "bytes=" + this._start + "-" + end + ); + } + + try { + xhr.send(); + } catch (err) { + this._chunkError(err.message); + } + + if (IS_WORKER && xhr.status === 0) this._chunkError(); + else this._start += this._config.chunkSize; + }; + + this._chunkLoaded = function () { + if (xhr.readyState !== 4) return; + + if (xhr.status < 200 || xhr.status >= 400) { + this._chunkError(); + return; + } + + this._finished = + !this._config.chunkSize || this._start > getFileSize(xhr); + this.parseChunk(xhr.responseText); + }; + + this._chunkError = function (errorMessage) { + var errorText = xhr.statusText || errorMessage; + this._sendError(new Error(errorText)); + }; + + function getFileSize(xhr) { + var contentRange = xhr.getResponseHeader("Content-Range"); + if (contentRange === null) { + // no content range, then finish! + return -1; + } + return parseInt( + contentRange.substr(contentRange.lastIndexOf("/") + 1) + ); + } + } + NetworkStreamer.prototype = Object.create(ChunkStreamer.prototype); + NetworkStreamer.prototype.constructor = NetworkStreamer; + + function FileStreamer(config) { + config = config || {}; + if (!config.chunkSize) config.chunkSize = Papa.LocalChunkSize; + ChunkStreamer.call(this, config); + + var reader, slice; + + // FileReader is better than FileReaderSync (even in worker) - see http://stackoverflow.com/q/24708649/1048862 + // But Firefox is a pill, too - see issue #76: https://github.com/mholt/PapaParse/issues/76 + var usingAsyncReader = typeof FileReader !== "undefined"; // Safari doesn't consider it a function - see issue #105 + + this.stream = function (file) { + this._input = file; + slice = file.slice || file.webkitSlice || file.mozSlice; + + if (usingAsyncReader) { + reader = new FileReader(); // Preferred method of reading files, even in workers + reader.onload = bindFunction(this._chunkLoaded, this); + reader.onerror = bindFunction(this._chunkError, this); + } else reader = new FileReaderSync(); // Hack for running in a web worker in Firefox + + this._nextChunk(); // Starts streaming + }; + + this._nextChunk = function () { + if ( + !this._finished && + (!this._config.preview || this._rowCount < this._config.preview) + ) + this._readChunk(); + }; + + this._readChunk = function () { + var input = this._input; + if (this._config.chunkSize) { + var end = Math.min( + this._start + this._config.chunkSize, + this._input.size + ); + input = slice.call(input, this._start, end); + } + var txt = reader.readAsText(input, this._config.encoding); + if (!usingAsyncReader) + this._chunkLoaded({ target: { result: txt } }); // mimic the async signature + }; + + this._chunkLoaded = function (event) { + // Very important to increment start each time before handling results + this._start += this._config.chunkSize; + this._finished = + !this._config.chunkSize || this._start >= this._input.size; + this.parseChunk(event.target.result); + }; + + this._chunkError = function () { + this._sendError(reader.error); + }; + } + FileStreamer.prototype = Object.create(ChunkStreamer.prototype); + FileStreamer.prototype.constructor = FileStreamer; + + function StringStreamer(config) { + config = config || {}; + ChunkStreamer.call(this, config); + + var remaining; + this.stream = function (s) { + remaining = s; + return this._nextChunk(); + }; + this._nextChunk = function () { + if (this._finished) return; + var size = this._config.chunkSize; + var chunk = size ? remaining.substr(0, size) : remaining; + remaining = size ? remaining.substr(size) : ""; + this._finished = !remaining; + return this.parseChunk(chunk); + }; + } + StringStreamer.prototype = Object.create(StringStreamer.prototype); + StringStreamer.prototype.constructor = StringStreamer; + + function ReadableStreamStreamer(config) { + config = config || {}; + + ChunkStreamer.call(this, config); + + var queue = []; + var parseOnData = true; + var streamHasEnded = false; + + this.pause = function () { + ChunkStreamer.prototype.pause.apply(this, arguments); + this._input.pause(); + }; + + this.resume = function () { + ChunkStreamer.prototype.resume.apply(this, arguments); + this._input.resume(); + }; + + this.stream = function (stream) { + this._input = stream; + + this._input.on("data", this._streamData); + this._input.on("end", this._streamEnd); + this._input.on("error", this._streamError); + }; + + this._checkIsFinished = function () { + if (streamHasEnded && queue.length === 1) { + this._finished = true; + } + }; + + this._nextChunk = function () { + this._checkIsFinished(); + if (queue.length) { + this.parseChunk(queue.shift()); + } else { + parseOnData = true; + } + }; + + this._streamData = bindFunction(function (chunk) { + try { + queue.push( + typeof chunk === "string" + ? chunk + : chunk.toString(this._config.encoding) + ); + + if (parseOnData) { + parseOnData = false; + this._checkIsFinished(); + this.parseChunk(queue.shift()); + } + } catch (error) { + this._streamError(error); + } + }, this); + + this._streamError = bindFunction(function (error) { + this._streamCleanUp(); + this._sendError(error); + }, this); + + this._streamEnd = bindFunction(function () { + this._streamCleanUp(); + streamHasEnded = true; + this._streamData(""); + }, this); + + this._streamCleanUp = bindFunction(function () { + this._input.removeListener("data", this._streamData); + this._input.removeListener("end", this._streamEnd); + this._input.removeListener("error", this._streamError); + }, this); + } + ReadableStreamStreamer.prototype = Object.create(ChunkStreamer.prototype); + ReadableStreamStreamer.prototype.constructor = ReadableStreamStreamer; + + function DuplexStreamStreamer(_config) { + var Duplex = require("stream").Duplex; + var config = copy(_config); + var parseOnWrite = true; + var writeStreamHasFinished = false; + var parseCallbackQueue = []; + var stream = null; + + this._onCsvData = function (results) { + var data = results.data; + if (!stream.push(data) && !this._handle.paused()) { + // the writeable consumer buffer has filled up + // so we need to pause until more items + // can be processed + this._handle.pause(); + } + }; + + this._onCsvComplete = function () { + // node will finish the read stream when + // null is pushed + stream.push(null); + }; + + config.step = bindFunction(this._onCsvData, this); + config.complete = bindFunction(this._onCsvComplete, this); + ChunkStreamer.call(this, config); + + this._nextChunk = function () { + if (writeStreamHasFinished && parseCallbackQueue.length === 1) { + this._finished = true; + } + if (parseCallbackQueue.length) { + parseCallbackQueue.shift()(); + } else { + parseOnWrite = true; + } + }; + + this._addToParseQueue = function (chunk, callback) { + // add to queue so that we can indicate + // completion via callback + // node will automatically pause the incoming stream + // when too many items have been added without their + // callback being invoked + parseCallbackQueue.push( + bindFunction(function () { + this.parseChunk( + typeof chunk === "string" + ? chunk + : chunk.toString(config.encoding) + ); + if (isFunction(callback)) { + return callback(); + } + }, this) + ); + if (parseOnWrite) { + parseOnWrite = false; + this._nextChunk(); + } + }; + + this._onRead = function () { + if (this._handle.paused()) { + // the writeable consumer can handle more data + // so resume the chunk parsing + this._handle.resume(); + } + }; + + this._onWrite = function (chunk, encoding, callback) { + this._addToParseQueue(chunk, callback); + }; + + this._onWriteComplete = function () { + writeStreamHasFinished = true; + // have to write empty string + // so parser knows its done + this._addToParseQueue(""); + }; + + this.getStream = function () { + return stream; + }; + stream = new Duplex({ + readableObjectMode: true, + decodeStrings: false, + read: bindFunction(this._onRead, this), + write: bindFunction(this._onWrite, this), + }); + stream.once("finish", bindFunction(this._onWriteComplete, this)); + } + if (typeof PAPA_BROWSER_CONTEXT === "undefined") { + DuplexStreamStreamer.prototype = Object.create(ChunkStreamer.prototype); + DuplexStreamStreamer.prototype.constructor = DuplexStreamStreamer; + } + + // Use one ParserHandle per entire CSV file or string + function ParserHandle(_config) { + // One goal is to minimize the use of regular expressions... + var MAX_FLOAT = Math.pow(2, 53); + var MIN_FLOAT = -MAX_FLOAT; + var FLOAT = /^\s*-?(\d*\.?\d+|\d+\.?\d*)(e[-+]?\d+)?\s*$/i; + var ISO_DATE = + /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/; + var self = this; + var _stepCounter = 0; // Number of times step was called (number of rows parsed) + var _rowCounter = 0; // Number of rows that have been parsed so far + var _input; // The input being parsed + var _parser; // The core parser being used + var _paused = false; // Whether we are paused or not + var _aborted = false; // Whether the parser has aborted or not + var _delimiterError; // Temporary state between delimiter detection and processing results + var _fields = []; // Fields are from the header row of the input, if there is one + var _results = { + // The last results returned from the parser + data: [], + errors: [], + meta: {}, + }; + + if (isFunction(_config.step)) { + var userStep = _config.step; + _config.step = function (results) { + _results = results; + + if (needsHeaderRow()) processResults(); + // only call user's step function after header row + else { + processResults(); + + // It's possbile that this line was empty and there's no row here after all + if (_results.data.length === 0) return; + + _stepCounter += results.data.length; + if (_config.preview && _stepCounter > _config.preview) + _parser.abort(); + else userStep(_results, self); + } + }; + } + + /** + * Parses input. Most users won't need, and shouldn't mess with, the baseIndex + * and ignoreLastRow parameters. They are used by streamers (wrapper functions) + * when an input comes in multiple chunks, like from a file. + */ + this.parse = function (input, baseIndex, ignoreLastRow) { + var quoteChar = _config.quoteChar || '"'; + if (!_config.newline) + _config.newline = guessLineEndings(input, quoteChar); + + _delimiterError = false; + if (!_config.delimiter) { + var delimGuess = guessDelimiter( + input, + _config.newline, + _config.skipEmptyLines, + _config.comments, + _config.delimitersToGuess + ); + if (delimGuess.successful) + _config.delimiter = delimGuess.bestDelimiter; + else { + _delimiterError = true; // add error after parsing (otherwise it would be overwritten) + _config.delimiter = Papa.DefaultDelimiter; + } + _results.meta.delimiter = _config.delimiter; + } else if (isFunction(_config.delimiter)) { + _config.delimiter = _config.delimiter(input); + _results.meta.delimiter = _config.delimiter; + } + + var parserConfig = copy(_config); + if (_config.preview && _config.header) parserConfig.preview++; // to compensate for header row + + _input = input; + _parser = new Parser(parserConfig); + _results = _parser.parse(_input, baseIndex, ignoreLastRow); + processResults(); + return _paused + ? { meta: { paused: true } } + : _results || { meta: { paused: false } }; + }; + + this.paused = function () { + return _paused; + }; + + this.pause = function () { + _paused = true; + _parser.abort(); + _input = _input.substr(_parser.getCharIndex()); + }; + + this.resume = function () { + if (self.streamer._halted) { + _paused = false; + self.streamer.parseChunk(_input, true); + } else { + // Bugfix: #636 In case the processing hasn't halted yet + // wait for it to halt in order to resume + setTimeout(this.resume, 3); + } + }; + + this.aborted = function () { + return _aborted; + }; + + this.abort = function () { + _aborted = true; + _parser.abort(); + _results.meta.aborted = true; + if (isFunction(_config.complete)) _config.complete(_results); + _input = ""; + }; + + function testEmptyLine(s) { + return _config.skipEmptyLines === "greedy" + ? s.join("").trim() === "" + : s.length === 1 && s[0].length === 0; + } + + function testFloat(s) { + if (FLOAT.test(s)) { + var floatValue = parseFloat(s); + if (floatValue > MIN_FLOAT && floatValue < MAX_FLOAT) { + return true; + } + } + return false; + } + + function processResults() { + if (_results && _delimiterError) { + addError( + "Delimiter", + "UndetectableDelimiter", + "Unable to auto-detect delimiting character; defaulted to '" + + Papa.DefaultDelimiter + + "'" + ); + _delimiterError = false; + } + + if (_config.skipEmptyLines) { + for (var i = 0; i < _results.data.length; i++) + if (testEmptyLine(_results.data[i])) + _results.data.splice(i--, 1); + } + + if (needsHeaderRow()) fillHeaderFields(); + + return applyHeaderAndDynamicTypingAndTransformation(); + } + + function needsHeaderRow() { + return _config.header && _fields.length === 0; + } + + function fillHeaderFields() { + if (!_results) return; + + function addHeder(header) { + if (isFunction(_config.transformHeader)) + header = _config.transformHeader(header); + + _fields.push(header); + } + + if (Array.isArray(_results.data[0])) { + for ( + var i = 0; + needsHeaderRow() && i < _results.data.length; + i++ + ) + _results.data[i].forEach(addHeder); + + _results.data.splice(0, 1); + } + // if _results.data[0] is not an array, we are in a step where _results.data is the row. + else _results.data.forEach(addHeder); + } + + function shouldApplyDynamicTyping(field) { + // Cache function values to avoid calling it for each row + if ( + _config.dynamicTypingFunction && + _config.dynamicTyping[field] === undefined + ) { + _config.dynamicTyping[field] = + _config.dynamicTypingFunction(field); + } + return ( + (_config.dynamicTyping[field] || _config.dynamicTyping) === true + ); + } + + function parseDynamic(field, value) { + if (shouldApplyDynamicTyping(field)) { + if (value === "true" || value === "TRUE") return true; + else if (value === "false" || value === "FALSE") return false; + else if (testFloat(value)) return parseFloat(value); + else if (ISO_DATE.test(value)) return new Date(value); + else return value === "" ? null : value; + } + return value; + } + + function applyHeaderAndDynamicTypingAndTransformation() { + if ( + !_results || + (!_config.header && + !_config.dynamicTyping && + !_config.transform) + ) + return _results; + + function processRow(rowSource, i) { + var row = _config.header ? {} : []; + + var j; + for (j = 0; j < rowSource.length; j++) { + var field = j; + var value = rowSource[j]; + + if (_config.header) + field = + j >= _fields.length ? "__parsed_extra" : _fields[j]; + + if (_config.transform) + value = _config.transform(value, field); + + value = parseDynamic(field, value); + + if (field === "__parsed_extra") { + row[field] = row[field] || []; + row[field].push(value); + } else row[field] = value; + } + + if (_config.header) { + if (j > _fields.length) + addError( + "FieldMismatch", + "TooManyFields", + "Too many fields: expected " + + _fields.length + + " fields but parsed " + + j, + _rowCounter + i + ); + else if (j < _fields.length) + addError( + "FieldMismatch", + "TooFewFields", + "Too few fields: expected " + + _fields.length + + " fields but parsed " + + j, + _rowCounter + i + ); + } + + return row; + } + + var incrementBy = 1; + if (!_results.data[0] || Array.isArray(_results.data[0])) { + _results.data = _results.data.map(processRow); + incrementBy = _results.data.length; + } else _results.data = processRow(_results.data, 0); + + if (_config.header && _results.meta) _results.meta.fields = _fields; + + _rowCounter += incrementBy; + return _results; + } + + function guessDelimiter( + input, + newline, + skipEmptyLines, + comments, + delimitersToGuess + ) { + var bestDelim, bestDelta, fieldCountPrevRow, maxFieldCount; + + delimitersToGuess = delimitersToGuess || [ + ",", + "\t", + "|", + ";", + Papa.RECORD_SEP, + Papa.UNIT_SEP, + ]; + + for (var i = 0; i < delimitersToGuess.length; i++) { + var delim = delimitersToGuess[i]; + var delta = 0, + avgFieldCount = 0, + emptyLinesCount = 0; + fieldCountPrevRow = undefined; + + var preview = new Parser({ + comments: comments, + delimiter: delim, + newline: newline, + preview: 10, + }).parse(input); + + for (var j = 0; j < preview.data.length; j++) { + if (skipEmptyLines && testEmptyLine(preview.data[j])) { + emptyLinesCount++; + continue; + } + var fieldCount = preview.data[j].length; + avgFieldCount += fieldCount; + + if (typeof fieldCountPrevRow === "undefined") { + fieldCountPrevRow = fieldCount; + continue; + } else if (fieldCount > 0) { + delta += Math.abs(fieldCount - fieldCountPrevRow); + fieldCountPrevRow = fieldCount; + } + } + + if (preview.data.length > 0) + avgFieldCount /= preview.data.length - emptyLinesCount; + + if ( + (typeof bestDelta === "undefined" || delta <= bestDelta) && + (typeof maxFieldCount === "undefined" || + avgFieldCount > maxFieldCount) && + avgFieldCount > 1.99 + ) { + bestDelta = delta; + bestDelim = delim; + maxFieldCount = avgFieldCount; + } + } + + _config.delimiter = bestDelim; + + return { + successful: !!bestDelim, + bestDelimiter: bestDelim, + }; + } + + function guessLineEndings(input, quoteChar) { + input = input.substr(0, 1024 * 1024); // max length 1 MB + // Replace all the text inside quotes + var re = new RegExp( + escapeRegExp(quoteChar) + "([^]*?)" + escapeRegExp(quoteChar), + "gm" + ); + input = input.replace(re, ""); + + var r = input.split("\r"); + + var n = input.split("\n"); + + var nAppearsFirst = n.length > 1 && n[0].length < r[0].length; + + if (r.length === 1 || nAppearsFirst) return "\n"; + + var numWithN = 0; + for (var i = 0; i < r.length; i++) { + if (r[i][0] === "\n") numWithN++; + } + + return numWithN >= r.length / 2 ? "\r\n" : "\r"; + } + + function addError(type, code, msg, row) { + _results.errors.push({ + type: type, + code: code, + message: msg, + row: row, + }); + } + } + + /** https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions */ + function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + } + + /** The core parser implements speedy and correct CSV parsing */ + function Parser(config) { + // Unpack the config object + config = config || {}; + var delim = config.delimiter; + var newline = config.newline; + var comments = config.comments; + var step = config.step; + var preview = config.preview; + var fastMode = config.fastMode; + var quoteChar; + /** Allows for no quoteChar by setting quoteChar to undefined in config */ + if (config.quoteChar === undefined) { + quoteChar = '"'; + } else { + quoteChar = config.quoteChar; + } + var escapeChar = quoteChar; + if (config.escapeChar !== undefined) { + escapeChar = config.escapeChar; + } + + // Delimiter must be valid + if ( + typeof delim !== "string" || + Papa.BAD_DELIMITERS.indexOf(delim) > -1 + ) + delim = ","; + + // Comment character must be valid + if (comments === delim) + throw new Error("Comment character same as delimiter"); + else if (comments === true) comments = "#"; + else if ( + typeof comments !== "string" || + Papa.BAD_DELIMITERS.indexOf(comments) > -1 + ) + comments = false; + + // Newline must be valid: \r, \n, or \r\n + if (newline !== "\n" && newline !== "\r" && newline !== "\r\n") + newline = "\n"; + + // We're gonna need these at the Parser scope + var cursor = 0; + var aborted = false; + + this.parse = function (input, baseIndex, ignoreLastRow) { + // For some reason, in Chrome, this speeds things up (!?) + if (typeof input !== "string") + throw new Error("Input must be a string"); + + // We don't need to compute some of these every time parse() is called, + // but having them in a more local scope seems to perform better + var inputLen = input.length, + delimLen = delim.length, + newlineLen = newline.length, + commentsLen = comments.length; + var stepIsFunction = isFunction(step); + + // Establish starting state + cursor = 0; + var data = [], + errors = [], + row = [], + lastCursor = 0; + + if (!input) return returnable(); + + if ( + fastMode || + (fastMode !== false && input.indexOf(quoteChar) === -1) + ) { + var rows = input.split(newline); + for (var i = 0; i < rows.length; i++) { + row = rows[i]; + cursor += row.length; + if (i !== rows.length - 1) cursor += newline.length; + else if (ignoreLastRow) return returnable(); + if (comments && row.substr(0, commentsLen) === comments) + continue; + if (stepIsFunction) { + data = []; + pushRow(row.split(delim)); + doStep(); + if (aborted) return returnable(); + } else pushRow(row.split(delim)); + if (preview && i >= preview) { + data = data.slice(0, preview); + return returnable(true); + } + } + return returnable(); + } + + var nextDelim = input.indexOf(delim, cursor); + var nextNewline = input.indexOf(newline, cursor); + var quoteCharRegex = new RegExp( + escapeRegExp(escapeChar) + escapeRegExp(quoteChar), + "g" + ); + var quoteSearch = input.indexOf(quoteChar, cursor); + + // Parser loop + for (;;) { + // Field has opening quote + if (input[cursor] === quoteChar) { + // Start our search for the closing quote where the cursor is + quoteSearch = cursor; + + // Skip the opening quote + cursor++; + + for (;;) { + // Find closing quote + quoteSearch = input.indexOf(quoteChar, quoteSearch + 1); + + //No other quotes are found - no other delimiters + if (quoteSearch === -1) { + if (!ignoreLastRow) { + // No closing quote... what a pity + errors.push({ + type: "Quotes", + code: "MissingQuotes", + message: "Quoted field unterminated", + row: data.length, // row has yet to be inserted + index: cursor, + }); + } + return finish(); + } + + // Closing quote at EOF + if (quoteSearch === inputLen - 1) { + var value = input + .substring(cursor, quoteSearch) + .replace(quoteCharRegex, quoteChar); + return finish(value); + } + + // If this quote is escaped, it's part of the data; skip it + // If the quote character is the escape character, then check if the next character is the escape character + if ( + quoteChar === escapeChar && + input[quoteSearch + 1] === escapeChar + ) { + quoteSearch++; + continue; + } + + // If the quote character is not the escape character, then check if the previous character was the escape character + if ( + quoteChar !== escapeChar && + quoteSearch !== 0 && + input[quoteSearch - 1] === escapeChar + ) { + continue; + } + + // Check up to nextDelim or nextNewline, whichever is closest + var checkUpTo = + nextNewline === -1 + ? nextDelim + : Math.min(nextDelim, nextNewline); + var spacesBetweenQuoteAndDelimiter = + extraSpaces(checkUpTo); + + // Closing quote followed by delimiter or 'unnecessary spaces + delimiter' + if ( + input[ + quoteSearch + 1 + spacesBetweenQuoteAndDelimiter + ] === delim + ) { + row.push( + input + .substring(cursor, quoteSearch) + .replace(quoteCharRegex, quoteChar) + ); + cursor = + quoteSearch + + 1 + + spacesBetweenQuoteAndDelimiter + + delimLen; + + // If char after following delimiter is not quoteChar, we find next quote char position + if ( + input[ + quoteSearch + + 1 + + spacesBetweenQuoteAndDelimiter + + delimLen + ] !== quoteChar + ) { + quoteSearch = input.indexOf(quoteChar, cursor); + } + nextDelim = input.indexOf(delim, cursor); + nextNewline = input.indexOf(newline, cursor); + break; + } + + var spacesBetweenQuoteAndNewLine = + extraSpaces(nextNewline); + + // Closing quote followed by newline or 'unnecessary spaces + newLine' + if ( + input.substr( + quoteSearch + 1 + spacesBetweenQuoteAndNewLine, + newlineLen + ) === newline + ) { + row.push( + input + .substring(cursor, quoteSearch) + .replace(quoteCharRegex, quoteChar) + ); + saveRow( + quoteSearch + + 1 + + spacesBetweenQuoteAndNewLine + + newlineLen + ); + nextDelim = input.indexOf(delim, cursor); // because we may have skipped the nextDelim in the quoted field + quoteSearch = input.indexOf(quoteChar, cursor); // we search for first quote in next line + + if (stepIsFunction) { + doStep(); + if (aborted) return returnable(); + } + + if (preview && data.length >= preview) + return returnable(true); + + break; + } + + // Checks for valid closing quotes are complete (escaped quotes or quote followed by EOF/delimiter/newline) -- assume these quotes are part of an invalid text string + errors.push({ + type: "Quotes", + code: "InvalidQuotes", + message: + "Trailing quote on quoted field is malformed", + row: data.length, // row has yet to be inserted + index: cursor, + }); + + quoteSearch++; + continue; + } + + continue; + } + + // Comment found at start of new line + if ( + comments && + row.length === 0 && + input.substr(cursor, commentsLen) === comments + ) { + if (nextNewline === -1) + // Comment ends at EOF + return returnable(); + cursor = nextNewline + newlineLen; + nextNewline = input.indexOf(newline, cursor); + nextDelim = input.indexOf(delim, cursor); + continue; + } + + // Next delimiter comes before next newline, so we've reached end of field + if ( + nextDelim !== -1 && + (nextDelim < nextNewline || nextNewline === -1) + ) { + // we check, if we have quotes, because delimiter char may be part of field enclosed in quotes + if (quoteSearch !== -1) { + // we have quotes, so we try to find the next delimiter not enclosed in quotes and also next starting quote char + var nextDelimObj = getNextUnqotedDelimiter( + nextDelim, + quoteSearch, + nextNewline + ); + + // if we have next delimiter char which is not enclosed in quotes + if ( + nextDelimObj && + typeof nextDelimObj.nextDelim !== "undefined" + ) { + nextDelim = nextDelimObj.nextDelim; + quoteSearch = nextDelimObj.quoteSearch; + row.push(input.substring(cursor, nextDelim)); + cursor = nextDelim + delimLen; + // we look for next delimiter char + nextDelim = input.indexOf(delim, cursor); + continue; + } + } else { + row.push(input.substring(cursor, nextDelim)); + cursor = nextDelim + delimLen; + nextDelim = input.indexOf(delim, cursor); + continue; + } + } + + // End of row + if (nextNewline !== -1) { + row.push(input.substring(cursor, nextNewline)); + saveRow(nextNewline + newlineLen); + + if (stepIsFunction) { + doStep(); + if (aborted) return returnable(); + } + + if (preview && data.length >= preview) + return returnable(true); + + continue; + } + + break; + } + + return finish(); + + function pushRow(row) { + data.push(row); + lastCursor = cursor; + } + + /** + * checks if there are extra spaces after closing quote and given index without any text + * if Yes, returns the number of spaces + */ + function extraSpaces(index) { + var spaceLength = 0; + if (index !== -1) { + var textBetweenClosingQuoteAndIndex = input.substring( + quoteSearch + 1, + index + ); + if ( + textBetweenClosingQuoteAndIndex && + textBetweenClosingQuoteAndIndex.trim() === "" + ) { + spaceLength = textBetweenClosingQuoteAndIndex.length; + } + } + return spaceLength; + } + + /** + * Appends the remaining input from cursor to the end into + * row, saves the row, calls step, and returns the results. + */ + function finish(value) { + if (ignoreLastRow) return returnable(); + if (typeof value === "undefined") value = input.substr(cursor); + row.push(value); + cursor = inputLen; // important in case parsing is paused + pushRow(row); + if (stepIsFunction) doStep(); + return returnable(); + } + + /** + * Appends the current row to the results. It sets the cursor + * to newCursor and finds the nextNewline. The caller should + * take care to execute user's step function and check for + * preview and end parsing if necessary. + */ + function saveRow(newCursor) { + cursor = newCursor; + pushRow(row); + row = []; + nextNewline = input.indexOf(newline, cursor); + } + + /** Returns an object with the results, errors, and meta. */ + function returnable(stopped, step) { + var isStep = step || false; + return { + data: isStep ? data[0] : data, + errors: errors, + meta: { + delimiter: delim, + linebreak: newline, + aborted: aborted, + truncated: !!stopped, + cursor: lastCursor + (baseIndex || 0), + }, + }; + } + + /** Executes the user's step function and resets data & errors. */ + function doStep() { + step(returnable(undefined, true)); + data = []; + errors = []; + } + + /** Gets the delimiter character, which is not inside the quoted field */ + function getNextUnqotedDelimiter(nextDelim, quoteSearch, newLine) { + var result = { + nextDelim: undefined, + quoteSearch: undefined, + }; + // get the next closing quote character + var nextQuoteSearch = input.indexOf(quoteChar, quoteSearch + 1); + + // if next delimiter is part of a field enclosed in quotes + if ( + nextDelim > quoteSearch && + nextDelim < nextQuoteSearch && + (nextQuoteSearch < newLine || newLine === -1) + ) { + // get the next delimiter character after this one + var nextNextDelim = input.indexOf(delim, nextQuoteSearch); + + // if there is no next delimiter, return default result + if (nextNextDelim === -1) { + return result; + } + // find the next opening quote char position + if (nextNextDelim > nextQuoteSearch) { + nextQuoteSearch = input.indexOf( + quoteChar, + nextQuoteSearch + 1 + ); + } + // try to get the next delimiter position + result = getNextUnqotedDelimiter( + nextNextDelim, + nextQuoteSearch, + newLine + ); + } else { + result = { + nextDelim: nextDelim, + quoteSearch: quoteSearch, + }; + } + + return result; + } + }; + + /** Sets the abort flag */ + this.abort = function () { + aborted = true; + }; + + /** Gets the cursor position */ + this.getCharIndex = function () { + return cursor; + }; + } + + function newWorker() { + if (!Papa.WORKERS_SUPPORTED) return false; + + var workerUrl = getWorkerBlob(); + var w = new global.Worker(workerUrl); + w.onmessage = mainThreadReceivedMessage; + w.id = workerIdCounter++; + workers[w.id] = w; + return w; + } + + /** Callback when main thread receives a message */ + function mainThreadReceivedMessage(e) { + var msg = e.data; + var worker = workers[msg.workerId]; + var aborted = false; + + if (msg.error) worker.userError(msg.error, msg.file); + else if (msg.results && msg.results.data) { + var abort = function () { + aborted = true; + completeWorker(msg.workerId, { + data: [], + errors: [], + meta: { aborted: true }, + }); + }; + + var handle = { + abort: abort, + pause: notImplemented, + resume: notImplemented, + }; + + if (isFunction(worker.userStep)) { + for (var i = 0; i < msg.results.data.length; i++) { + worker.userStep( + { + data: msg.results.data[i], + errors: msg.results.errors, + meta: msg.results.meta, + }, + handle + ); + if (aborted) break; + } + delete msg.results; // free memory ASAP + } else if (isFunction(worker.userChunk)) { + worker.userChunk(msg.results, handle, msg.file); + delete msg.results; + } + } + + if (msg.finished && !aborted) completeWorker(msg.workerId, msg.results); + } + + function completeWorker(workerId, results) { + var worker = workers[workerId]; + if (isFunction(worker.userComplete)) worker.userComplete(results); + worker.terminate(); + delete workers[workerId]; + } + + function notImplemented() { + throw new Error("Not implemented."); + } + + /** Callback when worker thread receives a message */ + function workerThreadReceivedMessage(e) { + var msg = e.data; + + if (typeof Papa.WORKER_ID === "undefined" && msg) + Papa.WORKER_ID = msg.workerId; + + if (typeof msg.input === "string") { + global.postMessage({ + workerId: Papa.WORKER_ID, + results: Papa.parse(msg.input, msg.config), + finished: true, + }); + } else if ( + (global.File && msg.input instanceof File) || + msg.input instanceof Object + ) { + // thank you, Safari (see issue #106) + var results = Papa.parse(msg.input, msg.config); + if (results) + global.postMessage({ + workerId: Papa.WORKER_ID, + results: results, + finished: true, + }); + } + } + + /** Makes a deep copy of an array or object (mostly) */ + function copy(obj) { + if (typeof obj !== "object" || obj === null) return obj; + var cpy = Array.isArray(obj) ? [] : {}; + for (var key in obj) cpy[key] = copy(obj[key]); + return cpy; + } + + function bindFunction(f, self) { + return function () { + f.apply(self, arguments); + }; + } + + function isFunction(func) { + return typeof func === "function"; + } + + return Papa; +}); diff --git a/google727b0afe07cd9c2f.html b/google727b0afe07cd9c2f.html new file mode 100644 index 00000000..37829282 --- /dev/null +++ b/google727b0afe07cd9c2f.html @@ -0,0 +1 @@ +google-site-verification: google727b0afe07cd9c2f.html diff --git a/index.md b/index.md index b660938c..cfffd16f 100644 --- a/index.md +++ b/index.md @@ -1,64 +1,86 @@ --- -layout: page -title: USS 2021 - Virtual -subtitle: Unifying Neuroscience and Artificial Intelligence in Quebec (UNIQUE) - Student Symposium -toc: true +layout: page-floatbutton +title: AI Helps Ukraine - Charity Conference +subtitle: A charity conference on AI to raise funds for medical and humanitarian aid for Ukraine +toc: false --- -
- If you registered as a participant for USS 2021, but you have not received an email with practical information, please check your spam email folder and send us an email otherwise: {{ site.email }}. -
-# UNIQUE Student Symposium (USS) -USS is a student-oriented, student-organized conference at the crossroads of neuroscience and AI research. This year USS will be held **online**, on June 7th and 8th, 2021. +{% include registration-button.html %} ---- +{% if site.data.settings.talk.isLive %}{% include join-button.html %}{% endif %} + +# What -## The program at a glance + +AI Helps Ukraine is a charity conference for raising funds to support Ukrainians facing the severe humanitarian crisis. We bring together [the leading experts of AI](./speakers) to present recent advances in the field and attract attention of the AI community to those who are in urgent need. -### Day 1: Monday, 7 June 2021 +The conference consists of two parts: a series of online talks taking place online **in November 2022** and an in-person full-day conference happening on **December 8th 2022** at [Mila Quebec AI Institute](https://mila.quebec/) in Montreal. -- Keynote lectures: [Megan Peters](speakers#megan_peters) and [Pim Haselager](speakers#pim_haselager) -- Panel discussion: [Megan Peters](speakers#megan_peters), [Pim Haselager](speakers#pim_haselager), [Stefanie Blain-Moraes](speakers#stefanie_blain-moraes) and [Irina Rish](speakers#irina_rish) -- Student Lightning talks +Participation is free and everyone is welcome to donate according to their possibilities. **All** contributions will be used to support Ukraine with medical and humanitarian aid. -### Day 2: Tuesday, 8 June 2021 +--- -- Educational workshops: mental health, open science, EDI -- Neuro-AI breakout sessions: machine learning & neuroscience with [Guillaume Lajoie](speakers#guillaume_lajoie), memory & learning with [Thomas Shultz](speakers#thomas_shultz), decision making with [Paul Cisek](speakers#paul_cisek) +# Our Speakers + +{% include speaker-gallery.html %} --- -## Important dates +# Why + +Russian invasion of Ukraine has caused a grave humanitarian crisis destroying civilian infrastructure and forcing millions of people to leave their homes seeking safety and protection. According to [UNHCR](https://www.unhcr.org/ukraine-emergency.html), more than 7.2 million of Ukrainians had to flee from the war abroad and more than 6.9 million were displaced within the country since 24 February 2022. Many of them are still located close to the conflict zones and remain in need of food, hygiene, warm clothes and shelters. Together with infrastructure, medicine supply chains were broken and these days Ukrainian hospitals are lacking not only specialized medicines and machines but even essential basics, such as toilet paper and medical gloves. -* Registration due: ~~Friday May 28th (deadline extended!) Tuesday June 1st, 2021 (23h59, Anywhere on Earth)~~ -* Lightning Talks Registration due: ~~Thursday May 20th, 2021 (23h59, Anywhere on Earth)~~ +Some of our team members learned about this disastrous situation first hand, from their friends and families in Ukraine. As AI researches and world citizens, it became unthinkable for us to continue doing our work without making every effort to help people in Ukraine. Therefore, we are organising a fundraising charity conference asking the broad international AI community to give a hand to those in dire need. We do believe that our collective efforts can make a real difference and save lives. --- -## Registration +# Who we support + +Interview with the National Cancer Institute of Ukraine & the Ukraine Medical Support in Canada: + + + + +Read more about [who we support here](./who_we_support). + +--- -~~We warmly invite you to join us for this year’s edition of the UNIQUE Student Symposium.~~ Registrations are now closed. +# Donations -{% include registration-message.html title="Registration" message="You can now register to USS 2021 using the link below!" button="Registration form" link="https://forms.gle/dkzE2zBwTk6Ga5Ft9" %} +{% include donation-bar-section.html %} --- -## Call for Lightning Talk Submissions +# How -On the first day of the symposium, [Monday June 7](schedule), we will have a _lightning talks sessions_, featuring 3-minute video presentations by the participants. If you are interested in participating in our lightning talks session, please fill out the form below. +### How do we use donations? -{% include registration-message.html title="Lightning talk applications" message="You’ll be asked to provide a short abstract (1500 characters) of your presentation. You will receive a notice on May 24th if you are selected and will then be asked to submit a 3-minute video to present at the event." button="Application form" link="https://forms.gle/WLjjGrY18ZFRjDGh9" %} +We are collecting donations to purchase and deliver medicines and supplies for people living in destroyed areas and oncological patients in Ukraine. Together with our partners, we buy and ship the most essential things directly to Ukraine. + +### How do we know what is needed in Ukraine right now? + +We and our partners are in close contact with hospitals and charities in Ukraine, which provide first-hand information about the current vital necessities of people in the area. One of our major aid recipients is the National Cancer Institute of Ukraine, the largest hospital and research institute treating oncological patients in Ukraine. + +### How do we deliver supplies to Ukraine? + +Our main partner is [Ukraine Medical Support](https://uams.ca/about-us/), a Canadian-based non-profit organisation, which helps us with the logistics and shipment process. They have access to a warehouse in Canada and in Ukraine, and they are in contact with organisations inside Ukraine to pick up the material and do the shipments. + +### How can you get involved? + +We are looking for the following donations: money, medicines and equipment. We encourage tech and pharma companies, as well as individuals, to donate whatever they can (money or supplies) to support vulnerable people in Ukraine. --- -## Accessibility and Code of Conduct -We strive to create an accessible and inclusive event. Please be informed that: +# Who + +We are a group of early-career AI researchers and friends taking personally the situation in Ukraine. We know first hand the challenges which Ukrainians have been facing due to the war and we want to support them as much as we can. You are very welcome to read [more about us](./team) and [get in touch!](#contact) + +## Our partners -- All participants are required to follow the [Code of Conduct](coc). -- Recording of Day 1 will be available for asynchronous attendance. -- On Chrome, you can enable Live Caption feature following [this video](https://www.youtube.com/embed/KDP8a5s8yaU). -- If you have any accessibility needs that you would like us to know, please contact us at `{{ site.email }}`. +{% include partner-logo.html %} + +--- -## Contact +# Contact -If you have questions, feedback or just want to say hi, please send us an email to `{{ site.email }}`. You may follow UNIQUE on [Twitter](https://twitter.com/ai_unique) for announcements. +If you have questions, feedback or just want to say hi, please send us an email to `{{ site.email }}`. We encourage you to follow us on [Twitter](https://twitter.com/aihelpsukraine) for announcements. diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..812eaab0 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,43 @@ + + + + https://aihelpsukraine.cc/ + 2022-10-09 + 1.00 + + + https://aihelpsukraine.cc/about.html + 2022-10-09 + 0.80 + + + https://aihelpsukraine.cc/speakers.html + 2022-10-09 + 0.80 + + + https://aihelpsukraine.cc/schedule.html + 2022-10-09 + 0.80 + + + https://aihelpsukraine.cc/team.html + 2022-10-09 + 0.80 + + + https://aihelpsukraine.cc/donate.html + 2022-10-09 + 1.00 + + + https://aihelpsukraine.cc/coc.html + 2022-10-09 + 0.80 + + + https://aihelpsukraine.cc/coc_fr.html + 2022-10-09 + 0.64 + +