May 8, 2023

Google Summer of Code 2023

Welcome to the new Google Summer of Code scholars for 2023! INCF is sponsoring four students for which I (Bradly Alicea) am acting as mentor: two students for the DevoWorm group (via the OpenWorm Foundation community) and two students for the Orthogonal Research and Education Laboratory. These four students are pursuing three projects.


D-GNNs and DevoLearn (sponsored by the DevoWorm group)

Congratulations to Himanshu Chougule and Sushmanth Reddy Mereddy for being accepted to work on the Developmental Graph Neural Networks (D-GNNs) project. Sushmanth has been contributing to the DevoLearn platform for quite some time and will spend this summer working on improving the image segmentation to GNN embedding pipeline. Himanshu was a part of last Summer's GSoC cohort in the Orthogonal Research and Education Laboratory, working on the Open-source Sustainability project. His work resulted in developing Agent-based Model-Reinforcement Learning hybrid models. This year, he will be working on building Topological Data Analytic capabilities into the D-GNN pipeline. 

Mayukh Deb and Jiahang Li are co-mentors for this project.

Virtual Reality for Research and Open-source Sustainability (sponsored by the Orthogonal Research and Education Lab)

Congratulations to Vrushali Nandurkar and R.V. Rajagopalan for being accepted to work on the projects Virtual Reality for Research and Open-source Sustainability, respectively. Vrushali is enthusiastic about working on creating open-source virtual world assets for scientific research and educational initiatives. R.V. will be working on a continuation of the Open-source Sustainability project, helping to augment the existing models and web interface.

Jesse Parent is a co-mentor for both projects, while Brian McCorkle is a co-mentor for the Open-source Sustainability project. 

March 3, 2023

Ancient Embryogenesis and Evolutionary Origins

"Darwin as an Embryo". In this case, Neoteny really does recapitulates Phylogeny! COURTESY: Stable Diffusion.

For this year's delayed Darwin Day post, I will present some of the latest work on ancient embryos which we have been discussing in the DevoWorm group meetings. While this is by no means a complete review, we will discuss the earliest fossil evidence for eggs, embryos, and nervous systems (in animals, not plants), in addition to the conditions that lead to their emergence. In short, how did we get to embryos from a universal common ancestor with bacteria and archebacteria, and why do only different types of Eukaryotes (plants, radial symmetrical Metazoans, and bilateral Metazoans) have embryos?

Tree of Life (genome tree) from Hug et.al [1] with three domains. Click to enlarge.

The ecological states of early Earth. COURTESY: J. Hirshfeld/Wikimedia. Click to enlarge.

We begin in the Cambrian, where the firs bilaterian appeared around 600 million years ago, approximately 70-80 million years before the Cambrian explosion [2]. In between the emergence of bilaterians, several key innovations occurred that suggests the origins of embryos and egg-laying. The first are the presence of fossilized burrows [2] for egg-laying behaviors. By the end of the Cambrian explosion, early pancrustecean arthropod species were possibly subject to life-history tradeoffs related to clutch size [3]. Another key innovation is direct evidence in the form of well-preserved multicellular structures from the period leading up to the Cambrian explosion that show a transition in cell geometry from a 2-cell stage to a cleavage stage [4]. As representative of a variety of ancestral algae species from the Doushantuo formation, these remains have not been connected to any particular adult form. However, they do demonstrate oogenesis and cleavage [2]. Finally, the functional genomics of developmental pattern formation emerged during this time [5]. This includes a ProtoHox cluster in ancestral cnidarians [6], Hox gene duplication [7], and an increase in body size and shape diversity alongside the advent of bilaterian bauplans [8]. Multiple Hox gene families may have served the role of promoting directed locomotion that in turn promoted active exploration of the environment [7].

Images of a potential early embryo, including the 2-cell and cleavage stages [from 4]. Click to enlarge.

The Ediacaran (630-540 million years ago) has yielded a large number of potential embryonic forms. In the Ediacaran biota, we find a number of Metazoan remains with no clear phylogenetic position. However, Evans et.al [9] propose that early embryos evolved independently (with several origins) in the bilaterian clade. However, during this time, a number of general trends emerge that enabled modern bilaterian adult forms. As previously discussed, Multicellular structures with distinct cell types, axial polarity, and anatomical segmentation [10, 11] emerged during this time. Left-right symmetry was a related feature of these embryos [11]. So-called polarized elements [12] such as microtubules, flagella, and apical-to-basal orientation were all found soon after the last Eukaryotic common ancestor (LECA). The evolution and diversification of polarity proteins is consistent with this timeline [12]. Other organismal structures such as a gut, sub-specialization of the phenotype, and a nervous system with heads and appendages are also features of note. We will talk about the emergence of nervous systems later on.

Scenario for the origins of development in bilaterians from [9]. Click to enlarge.

Bicellum brasieri is a 109 year old fossil holozoan that might provide the very earliest examples of modern embryos and embryogenesis [13]. Microfossils of Bicellum demonstrate morphogenesis in the form of cell-cell adhesion for different cell types, as well as differential layers of cells (driven by adhesion) which may be the precursors of tissue differentiation. This can be compared to the Doushantuo embryos from Precambrian China [14], and Caveasphera from 609 million years ago [15], which are perhaps the direct ancestors of Metazoan embryonic forms. These are the first examples of development proceeding within an enclosed space, enabled by cell adhesion similar to what is observed during gastrulation in modern embryos. Caveasphera in particular shows evidence of anatomical polarization (particularly polar aggregation), cell division events, and ingression [15]. This is informative but is not diagnostic of the Urmetazoan condition [16].


Graphical abstract and (top) palynological evidence of Bicellum brasieri (bottom) as shown in [13]. Epidermal layer (A and C), ellipsoid (D) and oblate (E) specimens Click to enlarge.

Since these pre-Cambrian explosion phenotypes are very simple, we can look to fossil evidence for much more complex embryo phenotypes in the late Cretaceous. Xing et.al [17] report on an in-ovo therapod dinosaur embryo, where the body is folded into an elongated egg. The authors are able to demonstrate how the fully formed head and legs are folded into different prehatching postures.


Graphical abstract showing developmental stages of Caveasphera [15]. Click to enlarge.

While the early phylogeny of nervous system origins is the very definition of a tangled tree [18], the first nervous systems coincide with the emergence of discrete body types in the Cambrian [19]. Brains emerged in part from the developmental toolkit responsible for patterning and segmentation [20]. This toolkit consists of genes and regulatory mechanisms that were co-opted for the development of excitable cells [21], synapses [22], and neuronal networks [2]. While the strongest evidence for early embryos only show evidence for bilaterian organization, radial symmetry is actually the basal condition for Metazoans [23]. Therefore, early embryos should yield at least two types of nervous system configurations that are observed in modern phenotypes: a centralized nervous system that converges in the head (the brains of bilaterians), and a distributed nervous system (the nerve nets of cnidarians). Centralized nervous systems originated from the mesoderm layer of triploblastic embryos, while distributed nervous systems are derived from the endoderm of diploblastic embryos. While there is a distinct literature on fossil radial embryos from China [24], there does not seem to be fossil evidence of germ layers formation and subsequent differentiation in any early embryos to date.

Image of Baby Yingliang (therapod dinosaur late-stage embryo) [17]. Click to enlarge.

But what happened before the earliest embryos (1000-650 million years ago)? What ecological conditions might have driven this innovation? One trigger may have been the great oxygenation event, which occurred in two stages: the first at 2.4 billion years ago, and the second at 950 million years ago. It was the second event that increased oxygen content to a level more resembling the present, and in turn drove diversification of distinct fungi, plants, and animals. It is of note that LECA (the last Eukaryotic common ancestor) lies well-beforehand [25]. The earliest embryos (or at least multicellular packings) might have resulted from selection pressure for retaining a low-oxygenation environment. But while these findings may lead to significant speculation, it seems that embryos are unique to Eukaryotic evolution, having no Bacterial or Archaebacterial counterpart despite evolving under the same conditions. It is most likely the interaction of genomic factors, developmental contingencies, and environmental conditions that ultimately lead to the emergence of embryos [26].


Phylogeny with evolution transitions from LUCA to embryos in plants and animals. Included are the two oxygenation events of Earth's history. Transitions derived from Refs [14, 27-31]. Click to enlarge.

References

[1] Hug, L.A. et.al (2016). A new view of the tree of life. Nature Microbiology, 1, 16048. 

[2] Valentine, J.W., Jablonski, D., and Erwin, D.H. (1999). Fossils, molecules and embryos: new perspectives on the Cambrian explosion. Development, 126, 851-859.

[3] Ou, Q., Vannier, J., Yang, X., Chen, A., Mai, H., Shu, D., Han, J., Fu, D., Wang, R., and Mayer, G. (2020). Evolutionary trade-off in reproduction of Cambrian arthropods. Science Advances, 6(18), doi:10.1126/sciadv.aaz3376.

[4] Xiao, S., Zhang, Y. and Knoll, A. H. (1998). Three-dimensional preservation of algae and animal embryos in a Neoproterozoic phosphorite. Nature, 391, 553-558.

[5] Erwin, D.H. (2020). Origin of animal bodyplans: a view from the regulatory genome. Development, 147, dev182899. 

complements. Nature, 442, 684–687. 

[7] Holland, P.W.H. (2015). Did homeobox gene duplications contribute to the Cambrian explosion? Zoological Letters, 1, 1. 

[8] Zhuravlev, A.Y. and Wood, R. (2020). Dynamic and synchronous changes in metazoan body size during the Cambrian Explosion. Scientific Reports, 10, 6784. 

[9] Evans, S.D., Droser, M.L., Erwin, D.H. (2021). Developmental processes in Ediacara macrofossils. Royal Society B, 288, 20203055.

[11] Finnerty, J.R., Pang, K., Burton, P., Paulson, D., and Martindale, M.Q. (2004). Origins of bilateral

[12] Brunet, T. and Booth, D.S. (2023). Cell polarity in the protist-to-animal transition. Current Topics in Developmental Biology, doi:10.1016/bs.ctdb.2023.03.001.

[13] Strother, P.K., Brasier, M.D., Wacey, D., Timpe, L., Saunders, M., and Wellman, C.H. (2021). A possible billion-year-old holozoan with differentiated multicellularity. Current Biology, 31, 1–8.

[14] First Embryos: Chen, J-Y., Bottjer, D.J., Li, G., Hadfield, M.G., Gao, F., Cameron, A.R., Zhang, C-Y., Xian, D-C., Tafforeau, P., Liao, X., and Yin, Z-J. (2009). Complex embryos displaying bilaterian characters from Precambrian Doushantuo phosphate deposits, Weng’an, Guizhou, ChinaPNAS, 106(45), 19056-19060.

[15] Yin, Z., Vargas, K., Cunningham, K., Bengtson, S., Zhu, M., Marone, F., and Donoghue, P. (2019). The Early Ediacaran Caveasphaera Foreshadows the Evolutionary Origin of Animal-like Embryology. Current Biology, 29, 4307–4314.

[16] Sebe-Pedros, A., Degnan, B.M., and Ruiz-Trillo, I. (2017). The origin of Metazoa: a unicellular perspective. Nature Reviews Genetics, 18, 498–512.

[17] Xing, L., Niu, K., Ma, W., Zelenitsky, D.K., Yang, T-R., and Brusatte, S.L. (2021). An exquisitely preserved in-ovo theropod dinosaur embryo sheds light on avian-like prehatching postures. iScience, 103516.

[18] Miller, G. (2009). On the Origin of The Nervous System. Science, 325(5936), 24-26.

[19] Erwin, D.H. (2020). Origin of animal bodyplans: a view from the regulatory genome. Development, 147, dev182899. 

[20] Hartenstein, V. and Stollewerk, A. (2015). The evolution of early neurogenesis. Developmental Cell, 32, 390–407.

[21] Moroz, L.L. and Kohn, A.B. (2016). Independent origins of neurons and synapses: insights from ctenophores. Royal Society B, 371, 20150041.

[22] Moroz, L.L. (2021). Multiple Origins of Neurons From Secretory Cells. Frontiers in Cell and Developmental Biology, 9, 669087. 

[23] Ghysen, A. (2003). The origin and evolution of the nervous system. International Journal of Developmental Biology, 47(7-8), 555-562.

[24] Xian, X-F., Zhang, H-Q., Liu, Y-H., and Zhang, Y-N. (2019). Diverse radial symmetry among the Cambrian Fortunian fossil embryos from northern Sichuan and southern Shaanxi provinces, South China. Palaeoworld, 28(3), 225-233.  AND  Chang, S., Clausen, S., Zhang, L., Feng, Q., Steiner, M., Bottjer, D.J., Zhang, Y., Shi, M. (2018). New probable cnidarian fossils from the lower Cambrian of the Three Gorges area, South China, and their ecological implications. Palaeogeography, Palaeoclimatology, Palaeoecology, 505, 150-166.

[25] McGrath, C. (2022). Highlight: Unraveling the Origins of LUCA and LECA on the Tree of Life. Genome Biology and Evolution, 14(6), evac072.

[26] Erwin, D.H. (2021). Developmental capacity and the early evolution of animals. Journal of the Geological Society, 178(5), jgs2020-245.

[27] Archaea: Gribaldo, S. and Brochier-Armanet, C. (2006). The Origin and Evolution of Archaea: a state of the art. Royal Society B, 361, 1007-1022.

[28] Great Oxygenation Event: Knoll, A.H.and Nowak, M.A. (2017). The Timetable of Evolution. Science Advances, 3, e1603076.  AND   Erwin, D.H. (2015). Early metazoan life: divergence, environment and ecology. Royal Society B, 370, 20150036.

[29] Fungi-Animal Common Ancestor: Phelps, C., Gburcik, V., Suslova, E., Dudek, P., Forafonov, F., Bot, N., MacLean, M., Fagan, R.J., and Picard, D. (2006). Fungi and animals may share a common ancestor to nuclear receptors. PNAS, 103(18), 7077–7081.

[30] LUCA: Dodd, MS, Papineau, D, Grenne, T et al. (5 more authors) (2017). Evidence for early life in Earth’s oldest hydrothermal vent precipitatesNature, 543 (7643). pp. 60-64.  AND  Hassenkam, T., Andersson, M., Dalby, K., MacKensie, D.M.A., and Rosing, M.T. (2017). Elements of Eoarchean life trapped in mineral inclusionsNature, 548, 78–81.

[31] Tree of Life: Feng, D-F., Cho, G., and Doolittle, R.F. (1997). Determining divergence times with a protein clock: Update and reevaluationPNAS, 94, 13028-13033.

December 27, 2022

The 500k Apex

I am pleased to report that as of the beginning of December 2022, Synthetic Daisies blog has reached 500,000 reads. The blog started over the 2008 Holiday season (14 years ago) and took about a year to garner significant readership. Over the years, Synthetic Daisies has participated in the Carnival of Evolution, several SciComm (Science Communication) initiatives, and charted the research progress of a number of initiatives (including the DevoWorm group).

Number of posts by year. Click to enlarge.

Although the number of time investment has declined in recent years, the posts have continued to accumulate reads. Synthetic Daisies has a Github repository and overlay site where some of the more popular posts are profiled. The Github repo also features associated code and other items from these posts. 

Number of readers over the course of 14 years. Click to enlarge.

More to report in another 200,000 to 300,000 reads!

December 23, 2022

Learning on Graphs (LoG) conference recap

 


The Learning on Graphs (LoG) conference took place from December 9-12 and featured a broad diversity of research on Graph Neural Networks (GNNs). GNNs [1] encompass a relatively new area of machine learning research which have a number of interesting connections to applied math and network science. The daily sessions (keynote talks and oral presentations), in addition to the seven workshop sessions, are available from the conference YouTube channel.

GNNs are a way to take data that yield graphical relationships in the real world and analyze then using the power of neural networks. While GNNs are specialized for problems that can be represented as a graph (discrete, interconnected systems), any problem with a set of complex geometric relationships is appropriate for GNNs. While the output of GNNs are typically embeddings (graph topologies embedded in the feature space), some problems require different approaches such as functions or more formal representations.

It is the analysis of these graphical relationships which make it a useful analytical approach. In all their forms, GNNs yield useful representations of graph data partly because they take into consideration the intrinsic symmetries of graphs, such as invariance and equivariance of graph topology with respect to a relabeling of the nodes [2]. Based on what was featured at LoG, GNNs had many potential applications in the biological arena, including precision medicine, drug discovery, and characterizing molecular systems (such as Stefan Gunnemann's (Technical University of Munich) talk in the Friday session).


GNNs can be evaluated using the isomorphism (or k-WL) test, which evaluates whether two graphs are isomorphic. Given that a graph can be drawn from the source data, the source data graph should be isomorphic with the output graph. The Weisfeiler-Lehman heuristic for graph isomorphism can be summarized in the 1-D case as the color refinement algorithm. A related issue in GNN research is algorithmic expressiveness. Expressivity is the breadth of ideas that can be represented and communicated using a particular type of representation. One current challenge of GNNs as they are applied to various problem domains is their ability to be functionally robust. One solution to this is by using GNNs as a generative model. Generating alternate graph representations allows us to use graphons [3], functions that capture different GNN topologies of the same type. The collection of graphs associated with a graphon can then be evaluated. Soledad Villar's (Johns Hopkins) presentation during the Sunday session featured an in-depth discussions of expressiveness and graphons as they relate to GNN performance.



GNNs can be combined with various analytical techniques traditionally used in complex network analysis. One of these involves the analysis of graphical models using tools from network science. These include the use of random graphs and stochastic block models to uncover the presence of topological structure and community formation, respectively. GNNs have ties to category theory as well. The cats.for.ai workshop (October 2022) featured applications of category theory to GNNs. In the Saturday session, Taco Cohen (Qualcomm AI) discussed how the techniques of category theory, monads in particular, can be applied to GNNs. GNNs can also form directed acyclic graphs (DAGs), which are amenable to causal models. 



GNNs are constructed using a series of inferential techniques. One technique discussed at LoG is message passing neural networks (MPNNs). Discrete forward passes from node to node (along edges) allow for approximation of the true, original network topology to be reconstructed. MPNN is a standard technique that lends itself to a wide variety of problem domains. The MPNN approach [4] can be extended to directed multigraphs and other types of graphs that capture complex systems, but can suffer shortcomings such as over-smoothing, over-squashing and under-reaching. While message passing has been the standard in the GNN field, continuous methods using approaches inspired by differential geometry and algebraic topology might serve as powerful alternatives [5]. Aside from approximations of real-world networks and graph-like structures, we can also think of GNN outputs in terms of time (capturing delays) and space (capturing translations). GNNs are also well-suited to mapping problems from algorithmic domains, in particular dynamic programming [6].


GNNs are particularly useful for task-specific architectures. The DevoWorm group’s D-GNN work (DevoGraph) is an example of this, being specialized for embryogenetic image processing or capturing biological growth and differentiation processes. But GNNs can also engage in transfer learning, which is the transfer of learned information from one context to another. Successful graph transfer learning is characterized by the reproduction of a graph of a similar but different size, or problems that require changes in network size over time.


From "Do we need deep graph neural networks?" by Michael Bronstein, Towards Data Science, July 20, 2020.


Workshops

Several of the workshops were particularly interesting with respect to some of the points mentioned above. There were also a number of outstanding oral presentations and posters not discussed here, but are worth checking out in the daily session recordings or on OpenReview.


Neural Algorithmic Reasoning (video). GNNs serve as excellent processors (neural networks in latent space) that can be aligned with more traditional algorithms [7]. This recasts many optimization problems as neural representation learning, particularly in cases where optimization algorithms do not represent the system being analyzed in a realistic manner.



Expressive GNNs (video). This tutorial covers a range of techniques that can be used to increase the expressivity of GNNs. Borrowing from areas such as topological data analysis and group theory, there is great potential for a variety of highly effective strategies for improving GNN architectures for a host of problems.


Graph Rewiring (video, web). Graph rewiring is presented as a way to overcome the limitations of the MPNN approach. Rewiring is based on the reconstruction of graph edges from iterative adaptive sampling of the input data. There are a number of different techniques that allow us to evaluate edge relevance using techniques such as diffusion and spectral approaches.


GNNs on TensorFlow (video). This tutorial introduces nascent modelers to implementing their own GNN models in the open-source TF-GNN framework. The tutorial uses heterogeneous input data to show how to implement the GNN and deal with missing label and edge information.


References

[1] Sanchez-Lengeling, B., Reif, E., Pearce, A., and Wiltschko, A.B. (2021). A Gentle Introduction to Graph Neural Networks. Distill, doi:10.23915/distill.00033.


[2] Chen, Z., Villar, S., Chen, L., and Bruna, J. (2019). On the equivalence between graph isomorphism testing and function approximation with GNNs. Proceedings of Neural Information Processing Systems, 32.

[3] Ruiz, L., Chamon, L.F.O., and Ribeiro, A. (2020). Graphon Neural Networks and the Transferability of Graph Neural Networks. arXiv, 2006.03548.

[4] Heydari, S. and Livi, L. (2022). Message Passing Neural Networks for Hypergraphs. arXiv, 2203. 16995.

[5] Bronstein, M. (2022). Beyond Message Passing: a Physics-Inspired Paradigm for Graph Neural Networks. The Gradient, May 7.

[6] Dudzik, A. and Velickovic, P. (2022). Graph Neural Networks are Dynamic ProgrammersarXiv, 2203.15544.

[7] Velickovic, P. and Blundell, C. (2021). Neural Algorithmic Reasoning. arXiv, 2105.02761.

October 24, 2022

OAWeek 2022: Managing Virtual and Hybrid Meetings


Welcome to International Open Access Week, 2022 edition! Last year, we discussed the vision of a distributed research organization. This year, we will explore this theme a bit further. One aspect of distributed organizations is the need to work both synchronously and asynchronously. This brings the real-world experience closer to the collaborator without the travel, carbon emissions, or expense of being at a centralized institute. As our collaborators live in many time zones and have different lifestyles, it is important to capture their full attention in different ways. 

One way this is done is through the live attendance and replay of group meetings. The Orthogonal Research and Education Lab (OREL) offers a number of regular topical meetings, in addition to a general meeting on Saturdays, that engages collaborators from all over the world using a number of different pedagogical and technological techniques. 


An example of a virtual distributed meeting with collaborators dropping in from different parts of the globe.

An open meeting has a number of moving parts that need to be thoughtfully considered to ensure success. The first of these is choosing a meeting platform. OREL has found success with Jitsi, as it is lightweight and free to use (open source). While Jitsi can be used as a service, installing it on your own server opens up its many customizable features. Jitsi even works with Virtual Reality, with interactions between the 2-D meeting world and immersive 3-D being available in the Wolvic browser and Meta Quest casting option.





Sample scenes from screensharing within Meta Quest and the casting option.

Secondly, programming the meeting is a non-trivial detail that can make the most of your time. For our Saturday Morning NeuroSim meetings, we have settled on the following format: updates, light features, discussion, open collaboration, and finally, papers of the week. Agenda-setting should be flexible with respect to your attendee's availability. Not everyone can make an entire meeting, so allowing them to "drop into" participation is encouraged. 

Notetaking and live feeds are also good for augmenting our meetings. The OREL Lab Manager (Jesse Parent) We use notetaking tools such as Obsidian and Notion with allied feeds (Slack and Discord) for coordinating the various fragments of ideas and themes that emerge during meeting time. Feed technology is also good for sharing papers, and the vision of a stream feed is key to realizing the multimedia aspect of real-time meeting immersion, even when attendees are asynchronous.     



Different types of notetaking and stream feeding within a meeting (from the Cognition Futures Reading Group).

As a tool for participatory engagement, this can be done in a number of different ways. Lead by Daniel Ari Friedman and Bleu Knight, the Active Inference Institute has taken the route of invited livestreams and summary podcasts. These materials introduce collaborators to difficult academic concepts while making them more accessible. While YouTube has options for live streaming, it is not always the best option. I use OBS Studio (free and open source) to compose a desktop recording and edit before making it public. 

Recorded meetings are also good for coding demos, particularly when they do not go as planned. One can either prepare a recording in advance to include in the meeting recording or strip the demo down to a minimal approach using a CoLab notebook. This reduces the friction of failed screenshares and execution errors, while also easing the burden of performing in front of a group.



Coding demos from a recent Saturday Morning NeuroSim meeting.

But completely virtual experiences are not the only option for bringing people together from around the world. OREL has been experimenting with hybrid meetings. This type of meeting brings the ethos of virtual meetings to more traditional in-person meetings. This enables more inclusive participation from distant geographical points. Last Spring, we experimented with our own virtual meeting experience at the New York Celebration of Women in Computing (NYCWiC), hosted live at Fort William Henry, NY. The hybrid session "Frontiers in Data Privacy and Tech Ethics" featured a buffet of topics on AI and technology ethics. Soem of the participants were live, while others were virtual (recorded or located in different parts of the globe). For this type of meeting, experimenting with ways to optimize live/virtual synchronization and media capture quality are essential. We plan to experiment with this more in the near future. 



Virtual (top) and in-person (bottom) components of the session.

Printfriendly