• So Badly

    I want it so badly, I can’t breathe. The last time I had this feeling was right after interviewing at Stanford. My heart ached for the realization that the opportunity to learn informatics was everything I had ever wanted, and the chances were so slim of getting it. Before I had any prowess in programming and didn’t know what a normal distribution was, I had the insight that immersion in the right environment would push and challenge me exactly in the way I was hungry for. It is only when we surround ourselves by individuals who are more skilled, and in an environment with opportunity to try new things and take risks, that we grow in skill and in ourselves. When I compare the kind of “things” that I tried to build back in my first quarter to what I build now, I have confidence that I was right about this particular instinct. Now, in my last year or so of graduate school, I am again faced with uncertainty about the future. I am almost thirty - I feel so old, and in this context a part of me is tired of constantly needing to prove that I am good enough. I am defined by what I like to call the goldfish property. I am so devoted to the things that I love, mainly learning about new infrastructures and creating beautiful applications, and my stubborness is so great that I will tend to grow toward the size of my tank. I have the confidence that, despite at any moment not having prowess in some domain, if presented with challenge, and especially in an environment where I can observe the bigger fish, I will grow. What scares me is the fact that in order to gain entry to the larger ocean, we are judged as little fish. I am also terrified by a general realization about the importance of the choice of an environment. Each step slightly away from being around the kind of people that are amazing at the things I want to be amazing at is a small dimming of the light insight my heart, and too many steps away means a finality of regret and a present life of doing some sets of tasks that, maybe one might be good at, but they do not satisfy the heart.

    This is why this crucial next step is so terrifying. I have confidence in the things that I want to be amazing at. I’m also a weird little fish, I don’t care about pursuring weekend fun, going on trips, learning about different cultures, or even starting a family. I just want to immerse my brain in a computer and build things. The challenges that I want are building infrastructure, meaning databases, cluster and cloud environments, virtual machines… essentially applications. I go nuts over using version control (Github), APIs, Continuous Integration, and working on software projects. I like to think about data structures, and standards, and although my training in machine learning supplements that, and I enjoy learning new algorithms that I can use in my toolbox, I don’t have drive to find ways to better optimize those algorithms. I want to be the best version of myself that I can possibly be - to return home at the end of each day and feel that I’ve milked out every last ounce of energy and effort is the ultimate satisfaction. I want to be able to build anything that I can dream of. To have and perform some contained skillset is not good enough. I don’t think I’ll ever feel good enough, and although this can sometimes sound disheartening, is the ultimate driver towards taking risks to try new things that, when figured out, lead to empowerment and joy. The terrifying thing about remaining in a small research environment is that I won’t be pushed, or minimally have opportunity, to become a badass at these things. I might use them, but in context of neuroscientists or biologists, to already feel like one of the bigger fish in using these technologies fills me with immense sadness. I’m perhaps proficient in neuroscience, but I’m not great because I’m more interested in trying to build tools that neuroscientists can use. Any individual can notice this in him or herself. We tend to devote time and energy to the things that we obsessively love, and while the other things might be necessary to learn or know, it’s easy to distinguish these two buckets because one grows exponentially, effortlessly, and the other one changes only when necessary. Growing in this bucket is an essential need, critical for happiness and fulfillment, and to slow down this growth and find oneself in a job performing the same skill set with no opportunity for growth leads to screaming inside ones head, and feeling trapped.

    So, in light of this uncertainty, and upcoming change, I feel squirmy. I want to be an academic software engineer, but if I am rooted in academia I am worried about being a big fish, and I would not grow. I am an engineer at heart, and this does not line up with the things that an individual in academia is hungry to learn, which are more rooted in biological problems than the building of things. However, if I were to throw myself into some kind of industry, I feel like I am breaking a bond and established relationship and trust with the people and problems that I am passionate about solving. I love academia because it gives me freedom to work on different and interesting problems every day, freedom and control over my time and work space, and freedom to work independently. But on the other hand, it is much more challenging to find people that are great at the kinds of modern technologies that I want to be great at. It is much less likely to be exposed to the modern, bleeding edge technology that I am so hungry to learn, because academia is always slightly behind, and the best I can do is read the internet, and watch conference videos for hours each evening, looking for tidbits of cool things that I can find an excuse to try in some research project. Academia is also painfully slow. There is a pretty low bar for being a graduate student. We just have to do one thesis project, and it seems to me that most graduate students drag their feet to watch cells grow in petri dishes, complain about being graduate students, and take their sweet time supplemented with weekend trips to vineyards and concerts in San Francisco. I’ve said this before, but if a graduate student only does a single thesis project, unless it is a cure for cancer, I think they have not worked very hard. I also think it’s unfortunate that someone who might have been more immersed not get chosen in favor of someone else that was a better interviewer. But I digress. The most interesting things in graduate school are the projects that one does for fun, or the projects that one helps his or her lab with, as little extra bits. But these things still feel slow at times, and the publication process is the ultimate manifestation of this turtleness. When I think about this infrastructure, and that the ultimate products that I am to produce are papers, this feels discouraging. Is that the best way to have an impact, for example, in reproducible science? It seems that the sheer existence of Github has done more for reproducibility across all domains than any published, academic efforts. In that light, perhaps the place to solve problems in academia is not in academia, but at a place like Github. I’m not sure.

    This dual need for a different environment and want to solve problems in a particular domain makes it seem like I don’t have any options. The world is generally broken into distinct, “acceptable” and well paved paths for individuals. When one graduates, he or she applies for jobs. The job is either in academia or industry. It is well scoped and defined. Many others have probably done it before, and the steps of progression after entry are also logical. In academia you either move through postdoc-ship into professor-dome, or you become one of those things called a “Research Associate” which doesn’t seem to have an acceptable path, but is just to say “I want to stay in academia but there is no real proper position for what I want to do, so this is my only option.” What is one to do, other than to create a list of exactly the things to be desired in a position, and then figure out how to make it? The current standard options feel lacking, and choosing either established path would not be quite right. If I were to follow my hunger to learn things more rooted in a “building things” direction, this would be devastating in breaking trust and loyalty with people that I care a lot about. It also makes me nervous to enter a culture that I am not familiar with, namely the highly competitive world of interviewing for some kind of engineering position. The thought of being a little fish sits on my awareness and an overwhelming voice says “Vanessa, you aren’t good enough.” And then a tiny voice comes in and questions that thought, and says, “Nobody is good enough, and it doesn’t matter, because that is the ocean where you will thrive. You would build amazing things.” But none of that matters if you are not granted entry into the ocean, and this granting is no easy thing. It is an overwhelming, contradictory feeling. I want to sit in a role that doesn’t exist - this academic software developer, there is no avenue to have the opportunities and environment of someone that works at a place like Google but still work on problems like reproducible science. I don’t know how to deal with it at this point, and it is sitting on my heart heavily. I perhaps need to follow my own instinct and try to craft a position that does not exist, one that I know is right. I must think about these things.

    ·

  • The Academic Software Developer

    To say that I have very strong feelings about standards and technology used in academic research would be a gross understatement. Our current research practices and standards for publication, sharing of data and methods, and reproducible science are embarrassingly bad, and it’s our responsibility to do better. As a gradate student, it seemed that the “right place” to express these sentiments would be my thesis, and so I poured my heart out into some of the introduction and later chapters. It occurred to me that writing a thesis, like many standard practices in academia, is dated to be slow and ineffective - a document that serves only to stand as a marker in time to signify completion of some epic project, to only have eyes laid upon it by possibly 4-6 people, and probably not even that many, as I’ve heard stories of graduate students getting away with copy pasting large amounts of nonsense between an introduction and conclusion and getting away with it. So should I wait many months for this official pile of paper to be published to some Stanford server to be forgotten about before it even exists? No thanks. Let’s talk about this here and now.

    This reproducibility crisis comes down to interpretation - the glass can be half full or half empty, but it doesn’t really matter because at the end of the day we just need to pour more water in the stupid glass, or ask why we are wasting out time evaluating and complaining about the level of water when we could be digging wells. The metric itself doesn’t even matter, because it casts a shadow of doubt not only on our discoveries, but on our integrity and capabilities of scientists. Here we are tooting on about “big data” and publishing incremental changes to methods when what we desperately is need paradigm shifts in the most basic, standard practices for conducting sound research. Some people might throw their hands up and say “It’s too big of a problem for me to contribute.” or “The process is too political and it’s unlikely that we can make any significant change.” I would suggest that change will come slowly by way of setting the standard through example. I would also say that our saving grace will come by way of leadership and new methods and infrastructure to synthesize data. Yes, our savior comes by way of example from software development and informatics.

    Incentives for Publication

    It also does not come as a surprise that the incentive structure for conducting science and publishing is a little broken. The standard practice is to aggressively pursue significant findings to publish, and if it’s not significant, then it’s not sexy, and you can file it away in the “forgotten drawer of shame.” In my short time as a graduate student, I have seen other graduate students, and even faculty anguish over the process of publication. I’ve seen graduate students want to get out as quickly as possible, willing to do just about anything “for that one paper.” The incentive structure renders otherwise rational people into publication-hungry wolves that might even want to turn garbage into published work by way of the science of bullshit. As a young graduate student it is stressful to encounter these situations and know that it goes against what you consider to be a sound practice of science. It is always best to listen to your gut about these things, and to pursue working with individuals that have the highest of standards. This is only one of the reasons that Poldrack Lab is so excellent. But I digress. Given that our incentives are in check, what about the publications themselves?

    Even when a result makes it as far as a published paper, the representation of results as static page does not stand up to our current technological capabilities. Why is it that entire careers can be made out of parsing Pubmed to do different flavors of meta-analysis, and a large majority of results seem to be completely overlooked or eventually forgotten? Why is a result a static thing that does not get updated as our understanding of the world, and availability of data, changes? We pour our hearts out into these manuscripts, sometimes making claims that are larger than the result itself, in order to make the paper loftier than it actually is. While a manuscript should be presented with an interesting story to capture the attention of others who may not have interest in a topic, it still bothers me that many results can be over-sensationalized, and other important results, perhaps null or non significant findings, are not shared. Once the ink has dried on the page, the scientist is incentivized to focus on pursuit on the next impressive p-value. In this landscape, we don’t spend enough time thinking about reproducible science. What does it mean, computationally, to reproduce a result? Where do I go to get an overview of our current understanding for some question in a field without needing to read all published research since the dawn of time? It seems painfully obvious to me that continued confidence in our practice of research requires more standardization and best practices for methods and infrastructure that lead to such results. We need informed ways to compare a new claim to everything that came before it.

    Lessons from Software Development and Informatics

    Should this responsibility for a complete restructuring of practices, the albatross for the modern scientist, be his burden? Probably this is not fair. Informatics, a subset of science that focuses on the infrastructure and methodology of a scientific discipline, might come to his aid. I came into this field because I’m not driven by answering biological questions, but by building tools. I’ve had several high status individuals tell me at different times that someone like myself does not belong in a PhD program, and I will continue to highly disagree. There is a missing level across all universities, across all of academia, and it is called the Academic Software Developer. No one with such a skillset in their right mind would stay in academia when they could be paid two to three fold in industry. Luckily, some of us either don’t have a right mind, or are just incredibly stubborn about this calling that a monetary incentive structure is less important than the mission itself. We need tools to both empower researchers to assess the reproducibility of their work, and to derive new reproducible products. While I will not delve into some of the work I’ve done in my graduate career that is in line with this vision (let’s save that for thesis drivelings), I wlll discuss some important observations about the academic ecosystem, and make suggestions for current scientists to do better.

    Reproducibility and Graduate Students

    Reproducibility goes far beyond the creation of a single database to deposit results. Factors such as careful documentation of variables and methods, how the data were derived, and dissemination of results unify to embody a pattern of sound research practices that have previously not been emphasized. Any single step in an analysis pipeline that is not properly documented, or does not allow for a continued life cycle of a method or data, breaks reproducibility. If you are a graduate student, is this your problem? Yes it is your problem. Each researcher must think about the habits and standards that he or she partakes in from the initial generation of an idea through the publishing of a completed manuscript. On the one hand, I think that there is already a great burden on researchers to design sound experiments, conduct proper statistical tests, and derive reasonable inferences from those tests. Much of the disorganization and oversight to sound practices could be resolved with the advent of better tools such as resources for performing analysis, visualizing and capturing workflows, and assessing the reproducibility of a result. On the other hand, who is going to create these tools? The unspoken expectation is that “This is someone else’s problem.” Many seem to experience tunnel vision during graduate school. There is no reality other than the individual’s thesis, and as graduate students we are protected from the larger problems of the community. I would argue that the thesis is rather trivial, and if you spend most of your graduate career working on just one project, you did not give the experience justice. I don’t mean to say that the thesis is not important, because graduation does not happen without its successful completion. But rather, graduate school is the perfect time to throw yourself into learning, collaborating on projects, and taking risks. If you have time on the weekends to regularly socialize, go to vineyards, trips, and consistently do things that are not obsessively working on the topic(s) that you claimed to be passionate about when applying, this is unfortunate. If you aim to get a PhD toward the goal of settling into a comfy, high income job that may not even be related to your research, unless you accomplished amazing things during your time as a young researcher, this is also unfortunate. The opportunity cost of these things is that there is probably someone else in the world that would have better taken advantage of the amazing experience that is being a graduate student. The reason I bring this up is because we should be working harder to solve these problems. With this in mind, let’s talk about tiny things that we can do to improve how we conduct research.

    The components of a reproducible analysis

    A reproducible analysis, in its truest definition, must be easy to do again. This means several key components for the creation and life cycle of the data and methods:

    • complete documentation of data derivation, analysis, and structure
    • machine accessible methods and data resources
    • automatic integration of data, methods, and standards

    A truly reproducible analysis requires the collection, processing, documentation, standardization, and sound evaluation of a well-scoped hypothesis using large data and openly available methods. From an infrastructural standpoint this extends far beyond requiring expertise in a domain science and writing skills, calling for prowess in high performance computing, programming, database and data structure generation and management, and web development. Given initiatives like the Stanford Center for Reproducibile Neuroscience, we may not be too far off from “reproducibility as a service.” This does not change the fact that reproducibility starts on the level of the individual researcher.

    Documentation

    While an infrastructure that manages data organization and analysis will immediately provide documentation for workflow, this same standard must trickle into the routine of the average scientist before and during the collection of the input data. The research process is not an algorithm, but rather a set of cultural and personal customs that starts from the generation of new ideas, and encompasses preferences and style in reading papers and taking notes, and even personal reflection. Young scientists learn through personal experience and immersion in highly productive labs with more experienced scientists to advise their learning. A lab at a prestigious University is like a business that exists only by way of having some success with producing research products, and so the underlying assumption is that the scientists in training should follow suit. The unfortunate reality is that the highly competitive nature of obtaining positions in research means that the composition of a lab tends to weigh heavily in individuals early in their research careers, with a prime focus on procuring funding for grants to publish significant results to find emotional closure in establishing security of their entire life path thus far. In this depiction of a lab, we quickly realize that the true expertise comes by way of the Principle Investigator, and the expectation of a single human being to train his or her entire army while simultaneously driving innovative discovery in his or her field is outrageous. Thus, it tends to be the case that young scientists know that it’s important to read papers, take notes, and immerse themselves in their passion, but their method of doing this comes by way of personal stumbling to a local optimum, or embodying the stumbling of a slightly larger fish.

    Levels of Writing

    A distinction must be made between a scientist pondering a new idea, to testing code for a new method, to archiving a procedure for future lab-mates to learn from. We can define different levels of writing based on the intended audience (personal versus shared), and level of privacy (private versus public). From an efficiency standpoint, the scientist has much to gain by instilling organization and recording procedure in personal learning and data exploration, whether it be public or private. A simple research journal means a reliable means to quickly turn around and turn a discovery into a published piece of work. This is an example of personal work, and private may mean that it is stored on an individual’s private online Dropbox, Box, or Google Drive, and public may mean that it is written about on a personal blog or forum. Keeping this kind of documentation, whether it is private or public, can help an individual to keep better track of ideas and learning, and be a more efficient researcher. Many trainees quickly realize the need to record ideas, and stumble on a solution without consciously thinking ahead to what kind of platform would best integrate with a workflow, and allow for future synthesis and use of the knowledge that is recorded.

    In the case of shared resources, for computational labs that work primarily with data, an online platform with appropriate privacy and backup is an ideal solution over more fragile solutions such as paper or documents on a local machine. The previously named online platforms for storing documents (Box, Dropbox, and Google Drive), while not appropriate for PI or proprietary documents, are another reasonable solution toward the goal of shared research writing. These platforms are optimized for sharing amongst a select group, and again without conscious decision making, are commonly the resources that lab’s used in an unstructured fashion.

    Documentation of Code

    In computational fields, it is typically the case that the most direct link to reproducing an analysis is not perusing through research prose, but by way of obtaining the code. Writing is just idealistic idea and hope until someone has programmed something. Thus, a researcher in a computational field will find it very hard to be successful if he or she is not comfortable with version control. Version control keeps a record of all changes through the life cycle of a project. It allows for the tagging of points in time to different versions of a piece of software, and going back in time. These elements are essential for reproducible science practices that are based on sharing of methods and robust documentation of a research process. It takes very little effort for a researcher to create an account with a version control service (for example, http://www.github.com), and typically the biggest barriers to this practice are cultural. A researcher striving to publish novel ideas and methods is naturally going to be concerned over sharing ideas and methods until they have been given credit for them. It also seems that researchers are terrified of others finding mistakes. I would argue if the process is open and transparent, coding is collaborative, and peer review includes review of code, finding a bug (oh, you are a human and make mistakes every now and then?) is rather trivial and not to be feared. This calls for a change not only in infrastructure, but research culture, and there is likely no way to do that other than by slow change of incentives and example over time. It should be natural for a researcher, when starting a new project, to immediately create a repository to organize its life-cycle. While we cannot be certain that services like Github, Bitbucket, and Sourceforge are completely reliable and will exist into infinitum, this basic step can minimally ensure that work is not lost to a suddenly dead hard-drive, and methods reported in the text of a manuscript can be immediately found in the language that produced the result. Researchers have much to gain in being able to collaboratively develop methods and thinking by way of slowly gaining expertise in using these services. If a computational graduate student is not using and established in using Github by the end of his or her career, this is a failure in his or her training as a reproducible scientist.

    On the level of documentation in the code itself, this is often a personal, stylistic process that varies by field. An individual in the field of computer science is more likely to have training in algorithms and proper use of data structures and advanced programming ideas, and is more likely to produce computationally efficient applications based on bringing together a cohesive set of functions and objects. We might say this kind of research scientist, by way of choosing to study computer science to begin with, might be more driven to develop tools and applications, and unfortunately for academia will ultimately be most rewarded for pursuing a job in industry. This lack of “academic software developers,” as noted previously, is arguably the prime reason that better, domain-specific, tools do not exist for academic researchers. A scientist that is more driven to answer biological questions sees coding as a means to procure those answers, and is more likely to produce batch scripts that use software or functions provided by others in the field. In both cases, we gripe over “poorly documented” code, which on the most superficial level suggests that the creator did not add a proper comment to each line explaining what it means. An epiphany that sometimes takes years to realize is the idea that documentation of applications lives in the code itself. The design, choice of variable names and data structures, spacing of the lines and functions, and implementation decisions can render a script easy to understand, or a mess of characters that can only be understood by walking through each line in an interactive console. Scientists in training, whether aiming to build elegant tools or simple batch scripts, should be aware of these subtle choices in the structure of their applications. Cryptic syntax and non-intuitive processes can be made up for with a (sometimes seemingly) excessive amount of commenting. The ultimate goal is to make sure that a researcher’s flow of thinking and process is sufficiently represented in his programming outputs.

    Documentation Resources for Scientists

    A salient observation is that these are all service oriented, web-based tools. The preference for Desktop software such as Microsoft Word or Excel is founded on the fact that Desktop software tends to provide better user experience (UI) and functionality. However, the current trend is that the line is blurring between Desktop and browser, and with the growing trend of browser-based offline tools that work with or without an internet connection, it is only a matter of time until there will be no benefit to using a Desktop application over a web-based one. Research institutions have taken notice of the benefit of using these services for scientists, and are working with some of these platforms to provide “branded” versions for their scientists. Stanford University provides easy access to wikis, branded “Box” accounts for labs to share data, along with interactive deployment of Wordpress blogs for individuals and research groups to deploy blogs and websites for the public. Non-standard resources might include an online platform for writing and sharing LaTex documents http://www.overleaf.com, for collecting and sharing citations (http://www.paperpile.com, http://www.mendeley.com), and for communicating about projects and daily activity (http://www.slack.com) or keeping track of projects and tasks (http://www.asana.com).

    This link between local and web-based resource continues to be a challenge that is helped with better tools. For example, automated documentation tools (e.g., Sphinx for Python) can immediately transform comments hidden away in a Github repository into a clean, user friendly website for reading about the functions. Dissemination of a result, to both other scientists and the public, is just as important (if not more important) than generation of the result, period. An overlooked component toward understanding of a result is providing the learner with more than a statistical metric reported in a manuscript, but a cohesive story to put the result into terms that he or she can relate to. The culture of publication is to write in what sounds like “research speak,” despite the fact that humans learn best by way of metaphor and story. What this means is that it might be common practice to, along with a publication, write a blog post and link to it. This is not to say that results should be presented as larger than they really are, but put into terms that are clear and undertandable for someone outside of the field. Communication about results to other researchers and the public is an entire thesis in itself, but minimally scientists must have power to relate their findings to the world via an internet browser. Right now, that means a simple text report and prose to accompany a thought, or publication. Our standards for dissemination of results should reflect modern technology. We should have interactive posters for conferences, theses and papers immediately parsed for sophisticated natural language processing applications, and integration of social media discussion and author prose to accompany manuscripts. A scientist should be immediately empowered to publish a domain-specific web report that includes meaningful visualization and prose for an analysis. It might be interactive, including the most modern methods for data visualization and sharing. Importantly, it must integrate seamlessly into the methodology that it aims to explain, and associated resources that were used to derive it. It’s up to us to build these tools. We will try many times, and fail many times. But each effort is meaningful. It might be a great idea, or inspire someone. We have to try harder, and we can use best practices from software development to guide us.

    The Academic Software Developer

    The need for reproducible science has brought with it the emerging niche of the “academic software developer,” an individual that is a combined research scientist and full stack software developer, and is well suited to develop applications for specific domains of research. This is a space that exists between research and software development, and the niche that I choose to operate in. The Academic Software Developer, in the year 2016, is thinking very hard about how to integrate large data, analysis pipelines, and structured terminology and standard into web-friendly things. He or she is using modern web technology including streaming data, server side JavaScript, Python frameworks and cloud resources, and Virtual Machines. He or she is building and using Application Programming Interfaces, Continuous Integration, and version control. Speaking personally, I am continually experimenting with my own research, continually trying new things and trying to do a little bit better each time. I want to be a programming badass, and have ridiculous skill using Docker, Neo4j, Web Components, and building Desktop applications to go along with the webby ones. It is not satisfying to stop learning, or to see such amazing technology being developed down the street and have painful awareness that I might never be able to absorb it all. My work can always be better, and perhaps the biggest strength and burden of having such stubbornness is this feeling that efforts are never good enough. I think this can be an OK way to be only given the understanding that it is ok for things to not work the first time. I find this process of learning, trying and failing, and trying again, to be exciting and essential for life fulfillment. There is no satisfaction at the end of the day if there are not many interesting, challenging problems to work on.

    I don’t have an “ending” for this story, but I can tell you briefly what I am thinking about. Every paper should be associated with some kind of “reproducible repo.” This could mean one (or more) of several things, depending on the abilities of the researcher and importance of the result. It may mean that I can deploy an entire analysis with the click of a button, akin to the recently published MyConnectome Project. It may mean that a paper comes with a small web interface linking to a database and API to access methods and data, as I attempted even for my first tiny publication. It could be a simple interactive web interface hosted with analysis code on a Github repo to explore a result. We could use continuous integration outside of its scope to run an analysis, or programatically generate a visualization using completely open source data and methods (APIs). A published result is almost useless if care is not taken to make it an actionable, implementable thing. I’m tired of static text being the output of years of work. As a researcher I want some kind of “reactive analysis” that is an assertion a researcher makes about a data input answering some hypothesis, and receiving notification about a change in results when the state of the world (data) changes. I want current “research culture” to be more open to business and industry practice of using data from unexpected places beyond Pubmed and limited self-report metrics that are somehow “more official” than someone writing about their life experience informally online. I am not convinced that the limited number of datasets that we pass around and protect, not sharing until we’ve squeezed out every last inference, are somehow better than the crapton of data that is sitting right in front of us in unexpected internet places. Outside of a shift in research culture, generation of tools toward this vision is by no means an easy thing to do. Such desires require intelligent methods and infrastructure that must be thought about carefully, and built. But we don’t currently have these things, and we are already way fallen behind the standard in industry that probably comes by way of having more financial resources. What do we have? We have ourselves. We have our motivation, and skillset, and we can make a difference. My hope is that other graduate students have equivalent awareness to take responsibility for making things better. Work harder. Take risks, and do not be complacent. Take initiative to set the standard, even if you feel like you are just a little fish.

    ·

  • Got Santa on the Brain?

    Got Santa on the Brain? We do at Poldracklab! Ladies and gentlemen, we start with a nice square Santa:

    We convert his colors to integer values…

    And after we do some substantial research on the christmas spirit network, we use our brain science skills and…

    We’ve found the Christmas Spirit Network!

    What useless nonsense is this?

    I recently had fun generating photos from tiny pictures of brains, and today we are going to flip that on its head (artbrain!). My colleague had an idea to do something spirited for our NeuroVault database, and specifically, why not draw pictures onto brainmaps? I thought this idea was excellent. How about a tool that can do it? Let’s go!

    Reading Images in Python

    In my previous brainart I used the standard PIL library to read in a jpeg image, and didn’t take any attention to the reality that many images come with an additional fourth dimension, an “alpha” layer that determines image transparency. This is why we can have transparency in a png, and not in a jpg, at least per my limited undertanding. With this in mind, I wanted to test in different ways for reading png, and minimally choosing to ignore the transparency. We can use the PyPNG to read in the png:

    
        import numpy
        import png
        import os
        import itertools
    
        pngReader=png.Reader(filename=png_image)
        row_count, column_count, pngdata, meta = pngReader.asDirect()
    
    

    In the “meta” variable, this is a dictionary that holds different meta data about the image:

    
        meta
         {'alpha': True,
          'bitdepth': 8,
          'greyscale': False,
          'interlace': 0,
          'planes': 4,
          'size': (512, 512)}
    
        bitdepth=meta['bitdepth']
        plane_count=meta['planes']
    
    

    Right off the bat this gives us a lot of power to filter or understand the image that the user chose to read in. I’m going to not be restrictive and let everything come in, because I’m more interested in the errors that might be triggered. It’s standard practice to freak out when we see an error, but debugging is one of my favorite things to do, because we can generally learn a lot from errors. We then want to use numpy to reshape the image into something that is intuitive to index, with (X,Y,RGBA)

    
        image_2d = numpy.vstack(itertools.imap(numpy.uint16, pngdata))
        # If "image_plane" == 4, this means an alpha layer, take 3 for RGB
        for row_index, one_boxed_row_flat_pixels in enumerate(pngdata):
            image_2d[row_index,:]=one_boxed_row_flat_pixels
        image_3d = numpy.reshape(image_2d,(row_count,column_count,plane_count))
    
    

    The pngdata variable is an iterator, which is why we can enumerate over it. If you want to look at one piece in isolation when you are testing this, after generating the variable you can just do:

    
    pngdata.next()
    
    

    To spit it out to the console. Then when we want to reference each of the Red, Green, and Blue layers, we can do it like this:

    
        R = image_3d[:,:,0]
        G = image_3d[:,:,1]
        B = image_3d[:,:,2]
    
    

    And the alpha layer (transparency) is here:

    
        A = image_3d[:,:,4]
    
    

    Finally, since we want to map this onto a brain image (that doesn’t support different color channels) I used a simple equation that I found on StackOverflow to convert to integer value:

    
        # Convert to integer value
        rgb = R;
        rgb = (rgb << 8) + G
        rgb = (rgb << 8) + B
    
    

    For the final brain map, I normalized to a Z score to give positive and negative values, because then using the Papaya Viewer the default will detect these positive and negative, and give you two choices of color map to play with. Check out an example here, or just follow instructions to make one yourself! I must admit I threw this together rather quickly, and only tested on two square png images, so be on the lookout for them bugs. Merry Christmas and Happy Holidays from the Poldracklab! We found Santa on the brain, methinks.

    ·

  • Behind Her Nose

    It has been said that to fall in love is to see for the first time. The upturn of an eye is the deepest of blues emit from a single stringed instrument. The definition of mystery is a brief brush by the softest of skin on the inner side of the wrist. The promise of a new day is the hope that you sense in the cautious grasp of an outreached hand. These were the subtitles that called to her in metaphor and painted her life a romantic composition that brought forth beauty in the details. When others saw a point of color, she saw a tiny universe. Behind every subtle detail was a rich emotion, the full story of an intensive day that ended with the draw of a breath. If at one point it had overwhelmed her, she had learned to step into the stream of information and not fight being carried off into the current of story that surrounds the people that she cared about.

    Today it was a cold, rushing flow. The gingerbread air freshener fell from the mailbox into the bushes, and she didn’t reach to pick him up. His squishy rubber body was plastered with a plastic white smile that suggested warm evenings by a fire, and family. How cold and inhumane. She sometimes wanted to be mean. She imagined it would be so satisfying to throw a nasty glance to someone that had hurt her, or turn a stone shoulder to one of the many ornery assholes of the world. She tried this every so often, and the outcome was emotional pain on her part. How squishy could she be to feel shame for being so awful to her gingerbread air freshener? Probably just as squishy as he was.

    Her arms felt insanely long and her hands infinitely far away, and she seemed to remember some questions online that asked about strange body perceptions like that. The problem with making such boldly stated assertions about normality and then ascribing people with labels given some ill-defined questionnaire is that normality is an illusion, and such assertions only serve to encourage people to package themselves up and not reveal any experience or cognition that might regard them as broken, or not quite right. The irony is that the set of fundamental human qualities includes a desire to be understood, and this rests on having some ability to connect with other people. Such a simple thing can bring a soul back from sadness into finding acceptance, yet in our desire to “help” such people we discourage revelations and intimacy, and drive them deeper into emotional isolation. Nuts. The girl realized that she was standing in her doorway, again finding herself lost in her own thoughts. She was sure they would have a question about that too.

    The kitchen was dark upon entering, only with a small spot of light shining on the pile of blankets where she slept on the blue tile. Everything she looked at, spoke to her in metaphor. It is usually the case that for one’s life, the color that the metaphor paints its experience, is determined by the most pressing issue in the person’s conscious or unconscious mind. The girl was instensely distracted with her an upcoming event: to make a declaration of her ultimate purpose before it was to be discovered by way of trial of error, by learning and growth. It was a backwards way to go about things, to need to sign off on a future vision and not simply declare that she wanted to continue her growth happening in the present. Thus, this was the metaphor that painted her empty kitchen that day. She did not care about a future title or role, but rather wanted to craft the perfect environment for such learning and growth, and one that would maximize those moments of brilliance when the multiple flows of information that were her constant state of thoughts came together in beautiful symphony, producing a swift and elegant efficiency that gave the feeling of the ultimate fulfillment. She was tired of being probed and tested for the things she knew, and what she did not. There were always infinite things that she would and could possibly not know. She was brilliant sometimes, and completely broken and useless in other things, and she could only promise to do her best. She wanted her best to be enough. And so she looked for this feeling in her kitchen. To be like the spoon that falls between the oven and the sink: not quite fit right to be used for cooking, but falling short of where all the other utensils were spending their time.

    She wondered what it might be like to have a firm belonging in the sink, or even granted the celebrity status to get a pass into the dishwasher. In times like these, her strategy for evaluating the degree of belonging was to pretend to be someone else. The answers came easily, flooding her mind with a particularly blue and colorful river of emotional thought. “I can’t stand being with her,” thought the girl, and the statement was so assertive that she rushed out of the room to give action to its salience. It was clear that it would be easy to be overwhelmed by her intensity, a constant beat of urgency like a gust of wind just strong enough to topple one’s balance and force taking a necessary step. Her relaxed state was a breath held, over a decade ago, and forgotten. If it were to be found and rush out, with it might come particles of experience that had been swirling inside her like a dust storm for years. It’s no wonder she didn’t belong in the sink. She was less of a utensil, and more of the water rushing from the faucet.

    She exited stage left from this thought, and escaped from it by closing the kitchen door behind her, collapsing onto a pile of blankets on the floor. She for some reason was adversive to wanting to purchase a bed, because it seemed like just another expensive item that would be disposed of too quickly to justify the cost, and resorted to sleeping on piles of soft things thrown on the floor in different rooms, wherever she happened to sit with her computer. She rolled over 180 degrees to face the ceiling, and threw back her arms over her head. She closed her eyes. The tiny fan that powered the entire air flow in her apartment provided a soothing noise to fight against the flashes that were the constant behind those closed eyes. It was easy to see why keeping company with others was so challenging for this explosion of a human being. Rationalization, intelligent thought, and most standard cognitive and behavioral approaches could not reason with her natural rhythm, and she found this funny. It might have seemed overwhelming to others, but was not really a big deal for her after so much life experience with it. Most insight comes from this strange kind of intense thinking, the kind that combines unexpected things in sometimes hilarious ways. She searched for some well chosen thought that would serve as a mental blankie to bring the rhythm of her mind to a different key. Sometimes she chose motivational phrases, or even Latin. Today it was two words. Just. Breathe.

    It was now getting dark, and she imagined herself reduced to a dark silhouette against the setting sun from behind the blinds. It is assumed that which is right in front of us can be seen, and she found this logical and true for most tangible things. But for all that defined her in this current setting, the longest of fingers, scraggly hair and mantis arms, she came to realize that for the non-tangible, she could not be seen. And in the times like these, when her future was based on some brief evaluation by a stranger, when she wanted more than anything to be seen, it was even more unlikely. It would take an abyss of time and careful words articulated with story to properly describe whatever encompassed her spirit, and this was not feasible. It was even worse when she thought about love. It had been a painful experience, time and time again, to come to terms that despite her assumptions, the people that she loved could not distinguish her from a crowd. It is interesting how, when the seemingly different domains of life are broken into their component Legos, the fundamental human desires are equivalent. She wanted to be understood, and she wanted to be valued, and this was true across things. For this next step in her life, perhaps a different strategy was needed. To make an assertion that an external thing should see and value her in some way was not the right way to go about it.

    It has been said that to fall in love is to see for the first time. It can be added to that wisdom that to be able to glow brilliantly and distinguish oneself from a crowd, one might choose to be blind. It is only when we close our eyes to the expectations of the rest of the world that we can grow beautifully, and immensely. She realized that, for this next step in her life, she did not want to try and be seen, but to just continue growing, without expectation. She wrinkled her nose at the discovery of such a lovely place in the now darkness.

    ·

  • Reproducible Analyses: the MyConnectome Project

    Reproducibility of an analysis means having total transparency about the methods, and sharing of data so that it can be replicated by other scientists. While it used to be acceptable to detail a method in a manuscript, modern technology demands that we do better than that. Today coincides with the publication of the MyConnectome Project, a multi-year endeavour by Russ Poldrack to collect longitudinal behavioral, brain imaging, and genomics data to do the first comprehensive phenotyping of a single human including imaging data. Russ came to Stanford in the Fall of 2014 when I started working with (and eventually joined) Poldracklab, at which point the data acquisition had finished, analyses were being finished up, and we were presented with the larger problem of packaging this entire thing up for someone else to run. We came up with the MyConnectome Results web interface, and completely reproducible pipeline that will be the topic for this post. Russ has written about this process, and I’d like to supplement those ideas with more detail about the development of the virtual machine itself.

    What is a reproducible analysis?

    From a development standpoint, we want intelligent tools that make it easy to package an entire workflow into something usable by other scientists. The easy answer to this is using a virtual machine, where one has control over the operation system and software, this is the strategy that we took, using a package called vagrant that serves as a wrapper around virtualbox. This means that it can be deployed locally on a single user’s machine, or on some cloud to be widely available. During our process of packaging the entire thing up, we had several key areas to think about:

    Infrastructure

    While it may seem like one cohesive thing, we are dealing with three things: the analysis code that does all the data processing, the virtual machine to deploy this code in an environment with the proper software and dependencies, and the web interface to watch over things running, and keep the user informed.

    Server and Framework

    A web framework is what we might call the combination of some “back-end” of things running on the server communicating with the “front-end,” or what is seen in the browser. Given substantial analyses, we can’t rely just on front-end technologies like JavaScript and HTML. The choice of a back-end was easy in this case, as most neuroimaging analysis tends to be in python, we went with a python-based framework called “Flask.” Flask is something I fell in love with, not only because it was in python, but because it gave complete freedom to make any kind of web application you could think of in a relatively short amount of time. Unlike its more controlled sibling framework, Django that has some basic standards about defining models and working with a database, Flask lets you roll your own whatever. I like to think of Django as a Mom minivan, and Flask as the Batmobile. The hardest part of deployment with Flask was realizing how hairy setting up web servers from scratch was, and worrying about security and server usage. Everything in this deployment was installed from scratch and custom set up, however I think if I did it again I would move to a container based architecture (e.g., Docker) for which there are many pre-build system components that can be put together with a tool called docker-compose like Legos to build a castle. We also figured out how to manage potentially large traffic with Elastic Load Balancing. ELB can take multiple instances of a site (in different server time zones, ideally) and can do as promised, and balance the load to the individual servers. If you’ve never done any kind of work on Amazon Web Services (AWS) before, I highly recommend it. The tools for logging, setting up alerts, permissions, and all of the things necessary to get a server up and running are very good. I’ve used Google Cloud as well, and although the console is different, it is equally powerful. There are pros and cons to each, discussion of which is outside the scope of this post.

    Data

    Data are the flour and eggs of the analysis cake, and if too big, are not going to fit in the pantry. When the data are too big to be packaged with the virtual machine, as was our case, option two is to provide it as an external download. However, there is still the issue that many analyses (especially involving genomic data) are optimal for cluster environments, meaning lots of computers, and lots of memory. As awesome as my Lenovo Thinkpad is, many times when I run analyses in a cluster environment I calculate out how long the same thing would take to run in serial on a single computer, and it’s something ridiculous like 8 months. Science may feel slow sometimes, but I don’t think even the turtle-iest of researchers want to step out for that long to make a sandwich. Thus, for the purposes of reproducing the analyses, in these cases it makes sense to provide some intermediate level of data. This is again the strategy that we took, and I found it amazing how many bugs could be triggered by something as simple as losing an internet connection, or a download server that is somewhat unreliable. While there is technology expanding to connect applications to clustery places, there are still too many security risks to open up an entire supercomputer to the public at large. Thus, for the time being, the best solution seems to be putting your data somewhere with backup, and reliable network connectivity.

    Versions

    As a developer, my greatest fear is that dependencies change, and down the line something breaks. This unfortunately happened to us (as Russ mentions in his post) when we downloaded the latest python mini computational environment (miniconda) and the update renamed the folder to “miniconda2” instead of miniconda. The entire virtual machine broke. We learned our lesson, but it begs to take notice that any reproducible workflow must take into account software and package versions, and be able to obtain them reliably.

    Expect Errors

    With so many different software packages, inputs, and analyses coming together, and the potential variability of the users internet connection, there is never complete certainty of a virtual machine running cleanly from start to finish. A pretty common error is that the user’s internet connection blips, and for some reason a file is not downloaded properly, or completely missing. A reproducible repo must be able to be like a ship, and take on water in some places without sinking. A good reproducible workflow must be able to break a leg, and finish the marathon.

    Timing

    The interface is nice in keeping the user updated about an estimated time remaining. We accomplished this by running the analyses through completiion to come up with a set of initial times associated with the generation of each output file. Since these files are generated reliably in the same order, we could generate a function to return the time associated with the index of the output file farthest along in the list. This means that if there is an error and a file is not produced, the original estimated time may be off by some, but the total time remaining will be calculated based on files that do not exist after the index of the most recently generated file. This means that it can adjust properly in the case of files missing due to error. It’s a rather simple system that can be greatly improved upon, but it seemed to work.

    Communication

    As the user watches a percentile completed bar increase with an estimated time remaining, different links to analyses items change from gray to green to indicate completion. The user can also look at the log tab to see outputs to the console. We took care to arrange the different kinds of analyses in the order they are presented in the paper, but the user has no insight beyond that. An ideal reproducible workflow would give the user insight to what is actually happening, not just in an output log, but in a clean iterface with descriptions and explanations of inputs and outputs. It might even include comments from the creator about parameters and analysis choices. How would this be possible? The software could read in comments from code, and the generator of the repo would be told to leave notes about what is going on in the comments. the software would need to then be able to track what lines are currently being executed in a script, and report comments appropriately. A good reprodudible workflow comes with ample, even excessive, documentation, and there is no doubt about why something is happening at any given point.

    Template Interfaces

    The front page is a navigation screen to link to all analyses, and it updates in real time to keep the user informed about what is completed. An interactive D3 banner across the top of the screen was the very first component I generated specifically for this interface, inspired by a static image on Russ’ original site. While custom, hard coded elements are sometimes appropriate, I much prefer to produce elements that can be customized for many different use cases. Although these elements serve no purpose other than to add a hint of creativity and fun, I think taking the time and attention for these kinds of details makes applications a little bit special, more enjoyable for the user, and thus more likely to be used.

    The output and error log page is a set of tabs that read in dynamically from an output text file. The funny thing about these logs is that what gets classified as “error” versus “output” is largely determined by the applications outputting the messages, and I’m not sure that I completely agree with all of these messages. I found myself needing to check both logs when searching for errors, and realizing that the developer can’t rely on the application classification to return reliable messages to the user. Some higher level entity would need to more properly catch errors and warnings, and present them in a more organized fashion than a simple dump of a text file on a screen. It’s not terrible because it worked well to debug the virtual machine during development, but it’s a bit messy.

    The interactive data tables page uses the Jquery Datatables library to make nicely paginated, sortable tables of results. I fell in love with these simple tables when I first laid eyes on them during my early days of developing for NeuroVault. When you don’t know any better, the idea of having a searchable, sortable, and dynamic table seems like magic. It still does. The nice thing about science is that regardless of the high-tech visualizations and output formats, many results are arguably still presented best in a tabular format. Sometimes all we really want to do is sort based on something like a p-value. However, not everything is fit for a table. I don’t think the researcher deploying the workflow should need to have to match his or her results to the right visualization type - the larger idea here is that outputs and vIsualization of some kind of result must be sensitive to output data type. Our implementation was largely hard coded for each individual output, whether that be an ipython notebook or R Markdown rendered to HTML, a graphic, PDF, or a table. Instead of this strategy, I can envision a tool that sees an “ipynb” and knows to install a server (or point a file to render at one) and if it sees a csv or tsv file, it knows to plug it into a web template with an interactive table. In this light, we can rank the “goodness” of a data structure based on how easy it is to convert from its raw output to something interpretable in a web browser. Something like a PDF, tsv, graphic, or JSON data structure get an A+. A brain image that needs a custom viewer or a data structure that must be queried (e.g., RDF or OWL) does not fare as well, but arguably the tool deploying the analysis can be sensitive to even complex data formats. Finally, all directories should be browsable, as we accomplished with Flask-Autoindex.

    Download

    On the simplest level, outputs should be easy to find, and viewable for inerpretation in some fashion. It also might make sense to provide zipped versions of data outputs for the user to quickly download from the virtual machine, in the case of wanting to do something on a local computer or share the data.

    Usage and Reproducibility Metrics

    As all good developers do, we copy pasted some Google Analytics code into our page templates so that we could keep track of visitors and usage. However, releasing a reproducible workflow of this type that is to be run on some system with a web connection offers so much more opportunity for learning about reproducible analyses. In the case that it’s not on a virtual machine (e.g., someone just ran the myconnectome python package on their computer) we could have a final step to upload a report of results to somewhere so that we could compare across platforms. We could track usage over time, and see if there are some variables we didn’t account for to lead to variance in our results. The entire base of “meta data about the analysis” is another thing all together that must be considered.

    Next steps: the Reprodudible Repo

    Throughout this process, the cognition that repeatedly danced across my mind was “How do I turn this into something that can be done with the click of a button?” Could this process somehow be automatized, and can I plug it into Github? I did a fun bit of work to make a small package called visci, and it’s really just a low level python module that provides a standard for plugging some set of outputs into some template that can be rendered via continuous integration (or other platform). This seems like one of the first problems to solve to make a more intelligent tool. We would want to be able to take any workflow, hand it over to some software that can watch it run, and then have that software plug the entire thing into a virtual machine that can immediately be deployed to reproduce the analyses. I have not yet ventured into playing more with this idea, but most definitely will in the future, and look forward to the day when its standard practice to provide workflows in immediately reproducible formats.

    ·

  • BrainArt. No, really!

    There have been several cases in the last year when we’ve wanted to turn images into brains, or use images in some way to generate images. The first was for the Poldrack and Farah Nature piece on what we do and don’t know about the human brain. It came out rather splendid:

    Nature526

    And I had some fun with this in an informal talk, along with generating a badly needed animated version to do justice to the matrix reference. The next example came with the NeuroImage cover to showcase brain image databases:

    NeuroImage

    This is closer to a “true” data image because it was generated from actual brain maps, and along the lines of what I would want to make.

    BrainArt

    You can skip over everything and just look at the gallery, or the code. It’s under development and there are many things I am not happy with (detailed below), but it does pretty well for this early version. For example, here is “The Scream”:

    This isn’t just any static image. Let’s look a little closer…

    Matter of fact, each “pixel” is a tiny brain:

    And when you see them interactively, you can click on any brain to be taken to the data from which it was generated in the NeuroVault database. BrainArt!

    Limitations

    The first version of this generated the image lookup tables (the “database”) from a standard set of matplotlib color maps. This means we had a lot of red, blue, green, purple, and not a lot of natural colors, or dark “boring” colors that are pretty important for images. For example, here was an original rendering of a face that clearly shows the missing colors:

    UPDATE 12/6/2015: The color tables were extended to include brainmaps of single colors, and the algorithm modified to better match to colors in the database:

    The generation could still be optimized. It’s really slow. Embarrassingly, I have for loops. The original implementation did not generate x and y to match the specific sampling rate specified by the user, and this has also been fixed.

    I spent an entire weekend doing this, and although I have regrets about not finishing “real” work, this is pretty awesome. I should have more common sense and not spend so much time on something no one will use except for me… oh well! It would be fantastic to have different color lookup tables, or even sagittal and/or coronal images. Feel free to contribute if you are looking for some fun! :)

    How does it work?

    The package works by way of generating a bunch of axial brain slices using the NeuroVault API (script). This was done by me to generate a database and lookup tables of black and white background images, and these images (served from github) are used in the function. You first install it:

    
    pip install brainart
    
    

    This will place an executable, ‘brainart’ in your system folder. Use it!

    
    brainart --input /home/vanessa/Desktop/flower.jpg
    
    # With an output folder specified
    brainart --input /home/vanessa/Desktop/flower.jpg --output-folder /home/vanessa/Desktop
    
    

    It will open in your browser, and tell you the location of the output file (in tmp), if you did not specify. Type the name of the executable without any args to see your options.

    Color Lookup Tables

    The default package comes with two lookup tables, which are generated from a combination of matplotlib color maps (for the brains with multiple colors) and single hex values (the single colored brains for colors not well represented in matplotlib). Currently, choice of a color lookup table just means choosing a black or white background, and in the future could be extended to color schemes or different brain orientations. The way to specify this:

    
    brainart --input /home/vanessa/Desktop/flower.jpg --color-lookup black
    
    

    Selection Value N

    By default, the algorithm randomly selects from the top N sorted images with color value similar to the pixel in your image. For those interested, it just takes the minimum of the sorted sums of absolute value of the differences (I believe this is a Manhattan Distance). There is a tradeoff in this “N” value - larger values of N mean more variation in both color and brain images, which makes the image more interesting, but may not match the color as well. You can adjust this value:

    
    brainart --input /home/vanessa/Desktop/flower.jpg --N 100
    
    

    Adding more brain renderings per color would allow for specifying a larger N and giving variation in brains without deviating from the correct color, but then the database would be generally larger, and increase the computation time. The obvious fix is to streamline the computation and add more images, but I’m pretty happy with it for now and don’t see this as an urgent need.

    Sampling Rate

    You can also modify the sampling rate to produce smaller images. The default is every 15 pixels, which seems to generally produce a good result. Take a look in the gallery at “girl with pearl” huge vs. the other versions to get a feel for what I mean. To change this:

    
    brainart --input /home/vanessa/Desktop/flower.jpg --sample 100
    
    

    Contribute!

    The gallery is the index file hosted on the github pages for this repo. See instructions for submitting something to the gallery. While I don’t have a server to host generation of these images dynamically in the browser, something like this could easily be integrated into NeuroVault for users to create art from their brainmaps, but methinks nobody would want this except for me :)

    ·

  • Brain Matrix

    I wanted to make a visualization to liken the cognitive concepts in the cognitive atlas to The Matrix, and so I made the brain matrix without branding. Canvas was the proper choice for this fun project in that I needed to render the entire visualization quickly and dynamically, and while a complete review of the code is not needed, I want to discuss two particular challenges:

    Rendering an svg element into d3

    The traditional strategy of adding a shape to a visualization, meaning appending a data object to it, looks something like this:

    
    svg.selectAll("circle")
        .data(data)
        .enter()
        .append("svg:circle")
        .attr("cy",function(d,i){ return 30*d.Y })
        .attr("cx",function(d,i){ return 30*d.X })
        .attr("r", 10)
        .attr("fill","yellow")
        .attr("stroke-width",10)            
    
    

    You could then get fancy, and instead append an image:

    
    svg.selectAll("svg:image")
        .data(data)
        .enter()
        .append("svg:image")
        .attr("y",function(d,i){ return 30*d.Y })
        .attr("x",function(d,i){ return 30*d.X })
        .attr('width', 20)
        .attr('height', 24)
        .attr("xlink:href","path/to/image.png")
    
    

    The issue, of course, with the above is that you can’t do anything dynamic with an image, beyond maybe adding click or mouse-over functions, or changing basic styling. I wanted to append lots of tiny pictures of brains, and dynamically change the fill, and svg was needed for that. What to do?

    1. Create your svg

    I created my tiny brain in Inkscape, and made sure that the entire thing was represented by one path. I also simplified the path as much as possible, since I would be adding it just under 900 times to the page, and didn’t want to explode the browser. I then added it directly into my HTML. How? An SVG image is just a text file, so open it up in text editor, and copy-paste away, Merrill! Note that I didn’t bother to hide it, however you could easily do that by giving it class of “hidden” or setting the visibility of the div to “none.”

    2. Give the path an id

    We want to be able to “grab” the path, and so it needs an id. Here is the id, I called it “brainpath”. Yes, my creativity in the wee hours of the morning when making this seems like a great idea is, lacking. :)

    3. Insert the paths

    Instead of appending a “circle” or an “svg:image,” we want a “path”. Also note that the link for the image (“svg:a”) is appended first, so it will be parent to the image (and thus work).

    
    svg.selectAll("path")
        .data(data)
        .enter()
        .append("svg:a")
            .attr("xlink:href", function(d){return "http://www.cognitiveatlas.org/term/id/" + d.id;})
        ...
    
    

    I then chose to add a group (“svg:g”), and this is likely unnecessary, but I wanted to attribute the mouse over functions (what are called the “tips”) to the group.

    
        ...
        .append("svg:g")
        .on('mouseout.tip', tip.hide)
        .on('mouseover.tip', tip.show)
        ...
    
    

    Now, we append the path! Since we need to get the X and Y coordinate from the input data, this is going to be a function. Here is what we do. We first need to “grab” the path that we embedded in the svg, and note that I am using JQuery to do this:

    
    var pathy = $("#brainpath").attr("d")
    
    

    What we are actually doing is grabbing just the data element, which is called d. It’s a string of numbers separated by spaces.

    
    m 50,60 c -1.146148,-0.32219 -2.480447,-0.78184 -2.982912,-1.96751 ...
    
    

    When I first did this, I just returned the data element, and all 810 of my objects rendered in the same spot. I then looked for some X and Y coordinate in the path element, but didn’t find one! And then I realized, the coordinate is part of the data:

    
    m 50,60...
    
    

    Those first two numbers after the m! That is the coordinate! So we need to change it. I did this by splitting the data string by an empty space

    
    var pathy = $("#brainpath").attr("d").split(" ")
    
    

    getting rid of the old coordinate, and replacing it with the X and Y from my data:

    
    pathy[1] = 50*d.Y + "," + 60*d.X;
    
    

    and then returning it, making sure to again join the list (Array) into a single string. The entire last section looks like this:

    
        ...
        .append("svg:path")
        .attr("d",function(d){
           var pathy = $("#brainpath").attr("d").split(" ")
           pathy[1] = 50*d.Y + "," + 60*d.X;
           return pathy.join(" ")
         })
        .attr("width",15)
        .attr("height",15)
    
    

    and the entire thing comes together to be this!

    
    svg.selectAll("path")
        .data(data)
        .enter()
        .append("svg:a")
            .attr("xlink:href", function(d){return "http://www.cognitiveatlas.org/term/id/" + d.id;})
        .append("svg:g")
        .on('mouseout.tip', tip.hide)
        .on('mouseover.tip', tip.show)
        .append("svg:path")
        .attr("d",function(d){
           var pathy = $("#brainpath").attr("d").split(" ")
           pathy[1] = 50*d.Y + "," + 60*d.X;
           return pathy.join(" ")
         })
        .attr("width",15)
        .attr("height",15)
    
    

    Embedding an image into the canvas

    Finally, for the cognitive atlas version I wanted to embed the logo, somewhere. When I added it to the page as an image, and adjusted the div to have a higher z-index, an absolute position, and then the left and top coordinates set to where I wanted the graphic to display, it showed up outside of the canvas. I then realized that I needed to embed the graphic directly into the canvas, and have it drawn each time as well. To do this, first I made the graphic an image object:

    
    var background = new Image();
    background.src = "data/ca.png";
    
    

    Then in my draw function, I added a line to draw the image, ctx.drawImage where I wanted it. The first argument is the image variable (background), the second and third are the page coordinates, and the last two are the width and height:

    
    var draw = function () {
      ctx.fillStyle='rgba(0,0,0,.05)';
      ctx.fillRect(0,0,width,height);
      var color = cacolors[Math.floor(Math.random() * cacolors.length)];         
      ctx.fillStyle=color;
      ctx.font = '10pt Georgia';
      ctx.drawImage(background,1200,150,200,70);   
      var randomConcept = concepts[Math.floor(Math.random() * concepts.length)];
      yPositions.map(functio
    
    

    Pretty neat! The rest is pretty straight forward, and you can look at the code to see. I think that d3 is great, and that it could be a lot more powerful manipulating custom svg graphics over standard circles and squares. However, it still has challenges when you want to render more than a couple thousand points in the browser. Anyway, this is largely useless, but I think it’s beautiful. Check it out, in the cognitive atlas and blue brain versions.

    ·

  • Nifti Drop

    The biggest challenge with developing tools for neuroimaging researchers is the sheer size of the data. A brain is like a mountain. We’ve figured out how to capture it with neuroimaging, and then store the image that we capture in a nifti little file format (that happens to be called nifti). But what happens when we want to share or manipulate our mountains in that trendy little place called the internet? That’s really hard. We rely on big servers to put the files first, and then do stuff. This is an OK strategy when you have brain images that are big and important (e.g., to go with a manuscript), but it’s still not standard practice to use a web interface for smaller things.

    Drag and Drop Nifti

    I want to be able to do the smaller stuff in my web-browser. It’s amazing how many posts I see on different neuroimaging lists about doing basic operations with headers or the data, and visualization is so low priority that nobody gives it the time of day. One of my favorite things to do is develop web-based visualizations. Most of my work relies on some python backend to do stuff first, and then render with web-stuffs. I also tried making a small app to show local images in the browser, or as a default directory view. But this isn’t good enough. I realized some time ago that these tools are only going to be useful if they are drag and drop. I want to be able to load, view header details, visualize in a million cool ways, and export different manipulations of my data without needing to clone a github repo, log in anywhere, or do anything beyond dragging a file over a box. So this weekend, I started some basic learning to figure out how to do that. This is the start of Nifti-drop:

    #DEMO

    It took me an entire day to learn about the FileReader, and implement it to read a nifti file. Then I realized that most of those files are compressed, and it took me another day to get that working. My learning resources are an nifti-js (npm), the nifti standard, FileReader, and papaya. It is 100% static, as it has to be, being hosted on github pages!

    What I want to add

    Right now it just displays header data alongside an embarrassingly hideous histogram. I am planning to integrate the following:

    Papaya Viewer: is pretty standard these days, and my favorite javascript viewer, although the code-base is very complicated, and I can barely get my head around it.

    NIDM Export: meaning that you can upload some contrast image, select your contrast from the Cognitive Atlas, and export a data object that captures those things.

    Visualization: Beyond a basic viewer, I am excited about being able to integrate different visuaization functions into an interface like this, so you can essentially drop a map, click a button, get a plot, and download it.

    NeuroVault: is near and dear to my heart, and this is the proper place to store statistical brain maps for longevity, sharing, publication, etc. An interface with some kind of nifti-drop functionality could clearly integrate with something like NeuroVault or NeuroSynth

    Feedback

    Please post feedback as comments, or even better, as github issues so I will see them the next time I jump into a work session.

    ·

  • For Brother and Jane

    Before the light of this evening
    Into a memory does wane
    I would like to share a sentiment
    for Brother and Jane

    The nostalgia within us all
    on this fifth of September
    is not entirely in this moment
    but in the things we remember

    We step in and out of ourselves
    Like an old pair of shoes
    And the biggest insight to life may be
    that our happiness we do so chose

    When Brother was small
    A curly haired Matthew
    Not much taller than a hip
    and I called him Cashew

    With imagination we built
    tiny ships out of paper
    he had a slight head tilt
    he was rice and cheese caper

    We lived in our heads
    and that made adolesence hard
    Brother receded into himself
    put up an emotional guard

    It was ten years later
    during college at UMASS
    when he grew into himself
    and I realized this time had passed

    And then he went to Spain
    and interpret how you will this sign
    Brother became a debonnaire
    and developed a taste for red wine

    And during his time in med school
    a memory not mine but true
    Brother laid eyes on the lovely Jane
    and thought, “I choose you.”

    And such happiness in my heart
    to see this love unfold
    such joy in my family
    for this story to be told

    And it is not something to fear
    to grow up and old
    because destiny is not decided
    But rather foretold

    I love you so much,
    From fire start to fading embre
    Remember, remember, the fifth of September

    ·

  • Reproducibility: Science and Art

    I was thinking about the recent “Reproducibility Project” and how it humbly revealed that science is hard, and we really aren’t certain about much at all, let alone having confidence in a single result. Then I started to wonder, are there other domains that, one might say, “got this reproducibility thing down, pat?” The answer, of course, is yes. Now, I’m extremely skeptical of this domain, but the first one that comes to mind is art. Can we learn any lessons for science from art? The metaphor is clear: It was technology that gave power to reproducible art. We can imagine a single statistical result as an effort to capture a scene. A master painter, if for a second you might superficially say his effort was to reproduce such a scene, went out of work with the advent of the photograph. A photographer that develops film was replaced by the printer, and then digital photography exploded that the quantity to insurmountable digits. This is not to say that we should change our expectations for the quality of the photograph. Any kind of result is still valued based on the statistical decisions and experimental design, just as a single picture can be valued based on the quality of the production medium and decisions for the layout. However, the key difference is figuring out how to produce such a result with the quality that we desire en-masse. And just like the photograph, the answer is in the technology. If we want reproducible science, we need better infrastructure, and tools, whether that comes down to the processing of the data or dissemination of the results. If we want reproducibility the responsibility cannot be in the hands of a single artist, or a single scientist. We must do better than that, or things will largely stay the same: slow progress and limited learning. I cannot say that it is not valuable to ask good biological questions, but this kind of thing is what makes me much more passionate about building tools than pondering such questions.

    ·

  • Different

    It was only when she was surrounded by others that she felt terribly alone. The floor was speckled with what must have been a mix of spilled alcohol combined with hot wing sauce taking a ride from table to bathroom on exhausted shoes. The standing tables with flowers were lovely, but out of place. The sitting tables, pushed together, were shaking and rumbling against the slam of finished glasses, orders being wrong or just plain forgotten, and garrulous laughter that, much of the time, might have been forced from a cohort of unwilling alveoli. And sitting at a table in the middle of it all, the tired girl was distracted by her inability to find the right place to put her feet. She was surrounded by people that she cared so deeply about, but somehow could not reach them through the blockade of noise. Her lovely new backpack, clean and black as a velveteen raven, waited patiently by the base of the chair, and she held her breath each time the rattled waitress scurried over with an ever-tilting, tiny striped tray with overfilled, dripping beers and martini glasses. She imagined the tray falling over, likely a regular occurrence for the pony-tailed waitress bee, and a catastrophic outcome for the girl’s collection of things that she carried with her.

    Only when we leave the lovely place of our passions do we find things that we do not want to find. The girl lived primarily in a beautiful world inside of her head. In this place, she found happiness. She could someday master her domain, lead an army, inspire a heart, and it didn’t matter if that domain, army, or heart lived entirely within herself. From a confusing, unidentifiable source she derived focus and drive toward solving tiny challenges, and solving these tiny challenges gave her meaning and emotional triumph. It was not something that needed attention or validation from any external source. She didn’t care what she might be called, the amounts it would lead her to, or the next calendar event she was supposed to look forward to. If we might be given a running start to imagine the ideal version of ourselves at some future time, it’s only a distraction from the reality that we are existing and full in the present. For the girl, this fullness was intoxicating. She was in a constant competition with herself, like a game of hide and seek where you are searching for the next version of your dreams across time. This intensity at various times in her life had been overwhelming, leading her to run across mountains, bike thousands of miles, and continue a search for solace in some yet-undiscovered alcove in her mind. But with much life experience comes knowing that the self is less an actual thing and more of a decision. The fun at the wedding party is not the shoes you put on but the feet that you put into them. The turkeys can only get you down if you offer yourself as doormat to their turkey feet. Her overwhelming intensity had matured and grown into an undying source of inspiration and happiness.

    But this internal fire, like any source of warmth, was subject to the temperature around it. The external stimuli was too much for any of her tricks, and although she hadn’t a clue what everyone was erupting about, the force of it brought her to respond with an equivalent forceful laugh, a response that was an effort to fight a current by swimming in the same direction. All of her efforts to sneak off into dreaming about building elegant systems and tools were overpowered by such noise. She imagined that she might pull from her pocket a small packet of dust, and throw it into the air to cause a melodic pause, and tiptoe away to her bike parked outside. Was he still safely secured to the sign post? Do bikes get lonely? She imagined a world where bikes too would meet up to socialize after work, and decided that they would definitely go to pick up roller skates at a roller rink. In the world of transportation, love and companionship are shared by the common trait of having wheels.

    Her fantasy was interrupted at a question directed toward her. Why did she have to make a claim about things that she would want to do tomorrow if she loved the things that she did today? The arbitrage of external inputs made her feel washed away and empty. It was situations like these, being completely surrounded by people, when she felt completely isolated. It was times like these when loneliness grew in her heart because she suddenly felt out of place. It was moments as blurred and hazy as this evening hour when she realized that one of the things is not like the others, and she was not an others. And so she endured until she was certain that there could possibly be no more plates of tiny meat on sticks arriving at the table, and then she made her escape. It was with directed energy that she flowed through the back of the restaurant, as if guided by an invisible current from a deus ex machina. She felt relief and empowerment unlocking her bike, and feeling the force of the tires restored her to the lovely state of being in her own thoughts. She had felt this a thousand times before, and yet she still kept trying. It had come to her when she was a little girl, when she walked home in the setting sun after running practice in high school, and when she looked across the desolation of campus after the last day of classes during University. It’s common and normal to be different, but she had yet to meet another soul that she imagined felt as she did.

    But something today was different. The growing loneliness, a gently spreading gray, was leaked into by a soft purple when she imagined him in her minds eye. It had been days since they walked together, and she wanted nothing more than to talk to him. The spending of a parcel of extra time without him felt like an opportunity cost, like choosing to not have ice cream when you really had wanted to try the coconut. He had a kindness, naivete, and quiet intellect that made him incredibly handsome and endearing, and she was sure that he didn’t even know it. She had hugged him twice, even mustered up the courage to look him in the eye, and it made her feel comforted, safe, and understood. She wasn’t even sure that her immediate family, let alone the rest of the world, understood what it was like inside her head, but she was convinced that he might. It was as if she had traveled thousands of miles, for decades, and found, for the first time, someone that brought color into the grays of being surrounded by social loneliness. People she had loved, in painful obvious and unrequited secret, had never loved her back, and yet her heart always seemed to return to an idealistic, childish hope to find such understanding.  And as she pedaled home, across the traffic, lights, and scurry of downtown, her mind erupted in beautiful, colorful memory. If a moment in time can be like the beginning of a universe, the expansion had just begun. Little did she know that she was now on a path to separate herself, one tiny eon at a time, from the last moment she would ever feel alone.

    ·

  • The Sound of Silence

    There once was a small town in the province of Heschl, where there lived a young woman, Silence. At dinner parties there was never an empty plate, for parts of speech she brought eight. She carried with her a fountain pen, and painted the taverns and shops with a poetic zen. Her suffixes, whether a -lit or -ation, completed the prefixes that rushed out of the mouths of the people with confident start and lacking end. The tiny houses, one or two story, were ever so carefully framed with her guidance. If she tried to mediate a dilemma it was common knowledge to let her, because with every pro she brought a con, and for every right, she could present with a wrong. Her words were beautiful to see, her similie like a hot, body warming tea.

    Then one day, silence fell in love. He was so empty of meaning that Silence was drawn to smother him with everything that she might have. His jacket was the most beautiful, darkest of blues that she imagined it caused the purples, indigos, and violets that shared near on the rainbow to faint. His eyes read of nothing but were stained with a story of a million lifetimes. Somewhere in his jacket she imagined there to be a tiny pocket-watch where he kept all of time at a standstill. He was undefined, needing, and lost. His name was Sadness.

    To his cold lips she lifted a warm cup of story, and hoped that it might flow life and joy into his tired veins. He tasted the broth, and pushed the cup away. She aired his dark cape in a lovely fragrence of pun and wildflowers, and he returned a cold, empty stare. Around his shoulders she put the blanket of a sonnet, her most powerful words paired in twos and threes, and his reponse was a mistrusting, flash of grimace, of seize.

    Sadness’ first response was with neutral melancholy, but soon he scratched away all formality and started to bear the turmoil he created inside himself. Silence wanted so badly to give him her words, but he ridiculed her. He brought out the demons that so haunted him and released the pain that he felt into her open heart. He captured her song with his fist, squeezed it until it trickled no more, and cast it across the room where it hit the wall, and crumpled to the floor. In her decades of life, the only thing she could bring to a fight was her word, and without her word she was as vulnerable as the empty lines that were missing it. Silence had tried, so hard, but Sadness could not bear to let her words give him sustenance.

    She had nothing more to give him. Her words had failed her. Her eyes, reflecting the being across from her, were stained with Sadness. There was never a time when no gesture went without the beautiful song of Silence. There was never a moment when human thought or desire was left without a way to express it. This moment marked a change in the short, but ever-present human history. Silence had fallen in love, and fallen she would remain. The entire village too, was at a loss for words, and they would never recover from this new inability to not effortlessly express themselves.

    And now, Silence put down her pen, and for the first time, parted her lips, and there was truly nothing. The laughter of beauty receded into the tapestries, and the echos of hope hid behind the mountains. For the first time, the world heard the sound of silence, and it was heartbreaking.

    ·

  • The Mountain

    He had wanted it to be her. The fantasy had been imagined so many times, repeated indefinitely in his head, that the absence of the defining moment was as unacceptable as ripping a page out of a book. The back of his neck radiated heat, calling forth a cool, wet cloth that might provide temporary relief to his discomfort. They say that drinking hot liquid like tea actually serves to cool the body, but the thought of introducing more heat into the system seemed illogical and unsafe to him in that moment.

    For all his successes, it was not enough. As a man, he was defined by his cleverness, ample responses when thinking on his feet, the momentary flash in his eye before responding to a challenge, and the mastery that was hidden in the s’s that should have been z’s in his words. It was not enough because the true strength of a man is not in the outside of a perception, but the inner workings, and coming to terms with the self without need for deception.

    His heart felt like a tea bag immersed in a stew of hot water. It was filled with aromatic leaves and spice, and one would think they would escape when submersed in the first and last hot liquid that they would ever touch. But the translucent, slightly waxy white bag was a terrible lie. It puffed up like a white pressed shirt filled with air, giving subtle hint to the shadow and shape of the leaves inside, but barely a worthy taste or strength of the hidden potpourri could escape. And so it was submersed a second, a third, and another time, each instance a meek effort to release the pungent smelling spice. But too long in the bath only serves to wrinkle fingertips and diminishes the ability of the soapy water to bubble: the tea bag loses its strength and fades away. Or so we think, because no one really knows what happens to the true composition of the contents inside. But he knew exactly. The same was true of his heart. An external hope, an openness to expressing vulnerability and aching for the chance to send it off like a raft down a creek, and then following through, only served to build up more apprehension should that raft submerge and sink. The concentration of the outside steam was in complete, counter-intuitive opposition to the increase in intensity of that which remained inside. He would immerse himself entirely in just one more experience, a chance to finally give in completely to the surroundings, but each time the water was drank and he left slightly lesser than before.

    And so in times like these, he reached for something else in his pack, something that, rationally should counter such a herbal heat. He shouldn’t have drank that soda, but it’s bite was so sharp, so quick and intensely satisfying that it sent his teeth into a painful overdrive that shot up to the roots and climaxed into the most awful and wonderful of cold headaches. It was a shot that gave him a momentary high, and it brought him back to the memory he so yearned for in his time of thirst.

    The mountain sky was blue, and then pink and red and purple, a distant painting to emphasize the impressive beast that it framed. He had touched that mountain in close detail. In the bitter cool morning the rock was unforgiving to his pleas and made each reach a calculated and unnerving risk. As it warmed in the rising sun, it promised him nothing but shadows, and greatness always one more peak away, if his bleeding hands could stand it and there was just enough powder left to cover his fingers like a powdered doughnut. At the crest of the day he made the final push, and then the mountain gave him everything, its most fantastic and shattering vulnerabilities all revealed at the sudden realization that there was no more vertical place to be reached and if there was a heaven this was truly it. Surrounding the thin and life-giving air was nothing but space and infinite time, and that is where he lost himself, and found an addictive warmth of awe, humility, and love. It was when the murkiness and stress of everyday life was lifted, to reveal his deepest thoughts and sequestered desires, when he tasted hints of meaning and purpose. And that’s when he saw her. Those dark, compassionate eyes rendered in his soul. She was not bold enough to speak outwardly above the noise of the group, but her affection and concern for him was stronger than the loudest of voices. She gave him hope, filled him with sustenance, and a beautiful sonata that echoed in the crevices of the mountain. Her deepest insecurities, were beautiful to him. His most humanizing imperfections, she eroded away with a single wave of her joyful smile. In the portrait of that mountain was ingrained her presence, and he climbed it relentlessly in his mind looking for her likeness.

    The summit was beautiful, but missing the realization of that which he longed for so deeply. He came back to the harsh reality of the evening train. The back of his neck was so hot. How could he be overheating in such a cool air? The car door opened, and he lifted inside his bike, a faithful companion yet disappointingly void in terms of conversation, and never expressing preference for Miso soup or dumplings. An ocean of tired faces lifted their bikes into the same car, and strangers equally monitored the stream looking for friend or companion. It was a long ride, and at every turn of a head with straight, dark hair, he hoped to see those soulful eyes peering out from a head caged in a bike helmet. It was never her. He didn’t ache for yet another conversation about numbers or missing method, but just a companion to render the space around him safe and comforting, to combat the awful taste of too many people marinating in such a tiny space. He certainly did not need her to define him, or to give him focus to his work, but he didn’t want to have to be so outwardly strong, and so caged all of the time. From the mountain to the setting suns that passed by the window day after day, his heart was filled with so much beauty that if he could not share it, he would surely explode.

    But in the dawn of the moonlight this evening, he realized that he found his own heart in the mountain. It’s majestic grace, character, and quiet wisdom had and would continue to give him peace. It was an unconditional love; it would not turn him away, it would give him air to counter the things that took it away from him. For so long he had selfishly looked for himself on those cliffs without giving back to the beast that guided his heart. An artist of movement and position, he had painted his story into the ledges time and time again, providing another layer to complement such a majestic portrait.

    And so, he brought her to the mountain, a gift to further complement this majestic portrait. The reds, pinks, and blues gave backdrop to not a single, but a group silhouette against the setting sun enveloping the lake. Warmed by a small fire and the sound of chopsticks, the mountain gazed at the creation that it had inspired. The momentary loneliness that comes with the dusk was returned to content, akin to the feeling of companionship that comes with reveling at existing in the same space as someone that you love. It is sometimes lonely to be a mountain, because it is expected to give itself to those that sacrifice themselves. But when the bravest of climbers see its true vulnerability, they bring their experiences to share with it. And the tea, shared by all, was fragrant, full bodied, and finally realized.

    ·

  • The Ultimate

    Now since 17 days has come to bear,
    let me tell you about this ingrown hair.
    Upon first introduction, when all was new to me
    he was introduced as my new friend JP.
    Between him and I it is hard to tell
    But on this distinction, I’ve come to dwell.
    He emerges from a labyrinth that I cannot see
    intermixing and twisty, elaborate like a tree
    Unassuming but strange, he pokes out of his hole
    Not to be mistaken for freckle or mole.
    From the outside glance I would never know
    where this JP does boldly go.
    Submerging from the surface, behind my ear
    wrapping through the cheek, blue and clear.
    He then dives down, running out of space
    into the depths of that soft necky place.
    Where he ends I have yet to feel
    His girth and length, I’m going to reel.
    He was supposed to leave after 7 days time
    but he refused, his home far too sublime.
    And after this time had come to pass
    JP has a little bit of attitude, of sass.
    He drools more on the pillow than I’ve ever done
    He can’t talk much in public, so he leaks a ton.
    He spits out presents of things I can’t ID
    So many gifts, without a charge or fee!
    His fashion sense, questionable at best,
    a white mumu to complement my black vest.
    I have often wished to yank out this fool,
    I could sure do without following his rule.
    But reminded am I, the reason he is here
    Is to give me care, in a time of fear.
    And so he continues, a batman in a private lair
    the diabolical, the most ultimate, ingrown hair.

    ·

  • Flask Banner Image Application

    Two interesting circumstances combined today, and the result was a fun project that, like most things that I produce, is entirely useless. However, it is a Saturday, which means that I can fill my time with such projects that, albeit being useless, are awesomely fulfilling to make.  The two circumstances were 1) I really like making Flask applications, and 2) I am highly allergic to pushing around pixels in Illustrator/Inkscape.

    And what happened?

    I found myself needing to make a banner graphic. It was a simple style – a text string of my choice hidden inside randomly generated letters. I then realized, to my despair, that this would require at least 10 minutes of using Inkscape. Nothing could be so painful. My creative brain then started up its usual humming. If I could make this svg dynamically, I could add beautiful animations, or minimally, some kind of interactivity to it. I could even make a tool so that, the next time I needed one, I wouldn’t have to start from nothing. This resulted in the “banner-maker.” A few points:

    Fonts: come by way of Google Fonts. There are over 600 in the database, and I randomly selected just under 200. All of these fonts are added with a single css link.

    Input Data: includes hidden letters inside of a randomly generated list, x and y coordinates, as well as two colors. I wrote a standalone function to generate such data.

    Application: is of course flask! We parse the user input from the page, and update the url, which re-renders the page with a new graphic.

    SVG: is of course produced with simple text nodes a la D3.

    The biggest issue is that my button to save the svg image does not render the Google Fonts, and because of this I added a box for the user to copy paste the svg code for his or her application. It’s not perfect, but my original intention was not to generate the tool, but the python code so that I can build a cool interface with more interactive functionality integrated into this banner. It was fun to make, and now I’m ready for a long walk home and a good dinner.

    Banner-maker [github] [demo]

     

    ·

  • Freckles

    Her landlord thought she was nuts. Or minimally, just super annoying. Her fear of complaining was reaffirmed by the small white note that appeared in the mailbox the very same day of the complaint. It was a polite notification that the rent would be increasing by $100 in the next month. She had lived there for two years, and never anything like this, until this single day when she had to say something. But how could she not? It was a feat of strength, and a struggle, every single time the key went into lock. It was a game of probability. There was a 0.3 probability that it would not turn the bolt to the left. Then another 0.3 that it wouldn’t come out, or even turn at all. That under 10% chance occurrence happened on the morning of the complaint, or better stated, the morning of the meek text message that started it all. This time, however, the sheer force of exerting her entire 121 pounds on the key made the inside of her inner knuckles bleed. Are complaints justified if they draw blood? The note was followed by silence. Sometimes great mistakes can be undone if you pretend they never happened at all. But it’s called “wishful thinking” for a reason. The silence after a storm is not convincing that the storm never happened at all, but rather, that damage caused and a call for reflection can cohabitate in the same moment. Such combination is a recipe for contemplation and forgiveness. But she worried in this case it was an eerie foreshadowing of proactive action and manipulation.

    Her landlord was on, she thought, a strategic mission to be rid of her. Did these things work like most relationships, in that one party gets bored and wants to change things up? The landlord had asked twice in the afternoon when she visited about how many years were left in the PhD. The second asking was rationalized with an abrasive comment about being short of hearing, but it was a passive aggressive statement that cut into her, sharp and suffocating as she imagined it would be for a sumo wrestler modeling an elastic bikini. Actually, about half of what the landlord said, the girl didn’t understand at all. She was a petite Asian woman, fiery and commanding despite her small stature, usually dressed in a flowered shirt that was a cross between a nurse’s scrub and a sweet smelling pajama. Her eyes were beady, so that there was no possible way to look deeply into them and infer if understanding or empathy was instilled. She had clearly worked hard her entire life, made no excuses, and demanded respect. But these qualities also made her extremely hard to read, meaning that trying to sift through her actions to uncover true intentions was about as easy as bringing a strainer to sand and maple syrup. A pancake of worry started to roll up in her mind. Was she not the ideal tenant she imagined herself to be? In the middle of the night she had taken to blending ice drinks to ward away the dank heat. She did not pay for utilities, but every so often turned on a fan hidden in the window to flush the hot air out of the apartment. She responded to a gas leak by not asking for replacement pipes, but by unplugging the stove and using it as a glorified laundry organizer. Finally, she regularly placed recyclables in the trash bin, mostly out of sheer laziness and a “collective action failure” frame of mind that her single instances of defaulting on recycling wouldn’t make any difference toward planetary well being. Recycling wouldn’t have been so terrifying if the bins and dumpster didn’t evoke the backyard scene from the 1990’s movie “The Sandlot,” the night-time smoothies wouldn’t be necessary if she wasn’t so darn thirsty all the time, and the fan wouldn’t be needed if she wasn’t so highly allergic to every airborne pollen, mold, and dust mite. If only her immune system had more strength than a lethargic cat. Perhaps her landlord had picked up on these details and the evidence was now too far stacked against her favor to pull herself out of the hole that she had slowly dug with a plastic spoon.

    There was a sudden knock at the door, and she responded immediately. It was her neighbor across the street, an older Indian man, one that she had only seen briefly on walks, and he would always cross the street immediately to avoid the dire possibility of crossing within awkward feet of her on the same sidewalk. Or maybe it was her that did that. He seemed to have knocked at the door and was yelling at her, dressed in his usual faded blues, from across the street. How did he move so quickly? But then she woke up, and it was clear that her neighborly interaction was just the tail end of a dream. Her dreams were always vivid, visually more distinct than reality itself, and sometimes a more interesting place to be. It was immediately apparent that something was burning. She looked down at the mattress next to her hot pink pillow: her small space heater had fallen over and was face-planted on the mattress like a toddler that had fallen over and lacked the arm strength to do anything about it. She recovered him, Delonghi was his name, and was immediately grateful to her dream neighbor’s warning. The last dream she had that related to real life was back when she was 8 years old. She dreamed of swimming in a green river, getting painfully bitten by an alligator-thing in the foot, and waking up immediately having fallen out of bed with a twisted ankle. At least this time she caught the hazard before Smokey the bear-thing showed up in her dream to roast marshmallows.

    It was pitch black. Maybe she should make a smoothie, why was it so hot? The nightingale was still singing, maybe he wanted a smoothie too. She went to the bathroom quickly to resolve the prior two hours of waking up and drinking a small ocean, and then went to sit at her desk. Her mind was busy at work, and she tucked her knees up under her chin to support her massive head. And then she saw the spot on her left knee, just a hair and a freckle to the bottom right of her knee cap. Actually, a “freckle” is quite the appropriate metric of distance, because this spot used to be one. And then possibly the world’s first insight inspired by a freckle came to be. A cascade of warm, pink joy started to creep into her toes, all the way up to her knees, down again to her base, up through her torso, and then slipping out at the corners of her lips. The emergence of this smile was due to the realization that everything must change. Her angst wasn’t about the lock, or the landlord, but the same fear of uncertainty and change that made her cling to routine. There was a certain comfort in knowing the intricacies and details of her world, a foundation made of smoke and glass. For 28 years she had garnished a birth mark in that spot. It was real, certain, tangible. Then one day, it was just gone, and as silly as it seems, she learned to appreciate her new knee without its identifying mark. Her knee spot formerly-known-as-freckle reminded her that tiny details were a form of mental blankie, providing comfort in not changing, but in reality being rather inconsequential. What is true for freckles is also true for more important things. Some amount of digital money that gets buzzed from one account to another, represented as a slightly different rendering of pixels on a screen, was exactly that. It could make her feel in or out of control depending on how she decided to feel about it. And thus we stumble on the strength that comes from making choices. She felt a sudden appreciation and understanding for her landlord, and for all the freckles that never were, and used to be.

    ·

  • The Sink

    Immersed in the water, her senses were no longer preoccupied by the dollar-store sounds of traffic passing, that confused bird that sings in the dark, and the gentle bumps of neighbors moving from behind the wall. She imagined not having any neighbors at all, but rather, little people that scurried around tunnels wrapping beside the beams of the wall. Thud. Her toothbrush knocked of the counter onto the bathroom floor: the floor where things fall permanently, because no rational being would ever dare try to salvage anything. Let’s be frank. Most things in this world, cell phones, shoes, bags, and especially floors, are completely covered in poop. There is likely a negative correlation between “you think it’s-covered-in-poopness” and “actually-covered-in-poopness.” Her mind interactively plotted such a scientific idea: would her mental imagery be in R or python today? Or a different plotting software that had yet to be invented?

    These were the ridicules, entire fantasies and thought processes triggered by something so small as a thud, that kept her imagination at bay. The normal inundation with daily noises also provided a constant source of material to inspire such fantasies. But now, this moment, with water up to and into the ears, granted a whole other level of freedom. She dreamed of a cloud-based environment, no, it was an entire army of servers, where people could collaboratively program. For the meek, for those obsessed with building, solving, and risking, for those for whom it comes harder to maintain eye contact, it offered companionship. Like two friends sitting next to one another quietly embracing the togetherness that comes with shared motivation behind a larger goal, they wrote while, for, and if statements side by side on the computer screen. And with the touch of a button, either could bring down the fence that separated the coding environments, allowing the other in for an allotted time to inspect a variable, share a function, or bestow invaluable knowledge to the other. The gentle passing of hours in this flow: it was beautiful, mesmerizing, romantic. And warm… wait, what is that?

    There are two possibilities when you feel a sudden warmth spill across you. You have either time traveled back to being 3 years old and peed in your pants, possibly an indication that you are starting the last phase of your life, or in her case, you know you’ve been checked out into your fantasy for just a little bit too long. The sink was overflowing. She jumped back, found momentary relief that she wasn’t again 3 or yet 83, and then returned to the reality of the small, yellow-lit bathroom. Raskolnikov, is that you? The toothbrush had long passed the five second rule (a fair extension as it too is something that is put in the mouth), the tiny wall neighbors were well tucked into their insulation beds, and it dawned on her that the confused bird was in fact a nightingale. She would possibly say something to her landlord about a sink that doesn’t properly drain, but that might risk being lost in her own mind indefinitely. It was certainly a lovely place to be, a constant comedic, vibrant and active narrator to bring joy and life to the events of everyday life. It’s amazing how much can happen in the small amount of time that a sink fills with water.

    ·

  • Mariposa Mente

    You may not give a damn, but I must tell you how I am.

    I have learned to navigate my microwave from button pizza to start.
    At the market, I consistently place the same items in my cart.
    Terror is the sweating glass that coaxes to be moved near,
    that sends out its leaky loveliness to destroy my computer, my dear.
    No matter the age that stamps my worth, or the numbers that you see
    my excitedness over colored pens reveals the age I should be.
    I don’t desire to see the world, I am happiest where I am.
    Arduous and annoying defines an expensive travel plan.
    That how to achieve sophistication is totally beyond me,
    but halfway there is wrapping turnip greens in nori
    To be driven by logic and reason, a good robot it has been said
    yet I am still irrationally terrified of fruits that are red.
    I won’t dress nicely, in a form that would attract.
    My style and manner has no cunning, strategy, or tact.
    That I feel in wonder at things with underneath spaces,
    each an abyss of dropped things in hidden places.
    These colorful dreams, sharper than the reality I know
    take me to breathtaking places that I’ll never go.
    Tell me how I must change, from your words I do run,
    despite deep down knowing I shall change for just one.
    That finding all those tiny bugs did not tell me clear,
    that a much larger bug was lurking near.
    I won’t wear makeup, you will see me in the raw.
    Stinky and hideous, is the beastie that you saw.
    I am never lonely, and I do not reach for the phone,
    despite the fact that I am tangibly alone.
    My pajamas stained in toothpaste, small pandas and kale,
    My once olive skin, now smooth, and covered pale.
    Spongebob square pants mouthwash is the kind of thing
    that gives these days a silky, and playful ring.
    Beat up toes, Achilles heels, and purple feet,
    telling a story of the kind of girl you shall meet.
    I do not sleep when I can, I want it when I should not.
    I will not talk when others do, for conflict is not sought.
    I fall in love quietly, a mental symphony of my own,
    stays with me through the passing of time, never alone.
    To take things so seriously, I can no longer do,
    Your world a timid beige, I will paint it blue.
    Wisdom comes with quiet memory, titanium dreams.
    Dancing through cranial valleys, heart beat seams.
    The summation of life experience is more than should be,
    The deus ex machina never came, but charged a fee
    the set difference of that painted blue,
    it turns out is you.

    mariposa mente, the imperfection that you see
    is that which makes you beautiful to me

    ·

  • The Story of Stumbling

    Almost eight years ago, the director of a group in a company where I worked gave me a book that changed my life. It was called Stumbling on Happiness, and almost eight years ago, I started reading it at my home in New Hampshire. I was terribly unhappy. I had gone through a highly painful and prolonged surgery at the end of the previous school year that, even after being released from the hospital after many weeks, left me with tubes coming out of my abdomen hooked up to a machine that I had to carry around in a black bag. Whomever made those tubes clearly was either just being practical, or had no empathy for a college student that would have to place the machine front and center on a desk in front of 160 other students. I also had experienced heartbreak, unfortunately at the exact same time, and that is on top of the normal introspective questioning about purpose, worth, and interacting with other people that is the albatross to any college-aged human. That was just the end of the school year. I launched right into a full time summer internship, which was physiologically stressful in that I made a 2-3 hour commute (one way) from New Hampshire to Boston each day. In a potpourri of transportation methods, it included driving, bus riding, walking, and sometimes a spurious trip on the T mostly because I like being in tunnels. However, the bus was my favorite because it was quiet and soft. I used to curl my knees up to my chest, plug headphones into the free music outlet, and quietly cry. This act, although embarrassing in most situations, is a well-needed release for emotion when there is no other cabinet to lock it into. Still, I did not show this to anyone, because to be so weak was so shameful. By the end of it all, specifically when it was time to return to school for another round, I went and came back. I had no drive to think hard about seemingly unimportant classwork because nothing was certain. I had always been a machine, and I was defined by strength and being able to survive things that are unexpected. But my foundation of certainty was about as substantial as bonito flakes. It would blow away whenever anyone sneezed.

    I was laying on the floor of my room on a purple flowered rug that made me feel itchy, and despite the highly introverted nature of my family leading us to all be in our own sections of the house anyway, I had the door tightly shut. My room in our farm was over the section of the house without heat, away from the core of warmth from our wood stove, so it was always freezing. Since I was in college we had moved away from the house where we lived in high school, and I missed the soft carpet in my old room, and the warmth of the house. I’ve always been a floor worker, and a monkey in chairs, so I was appropriately sprawled out reading a book. In front of me was my Dell, my faithful companion, who currently had the World of Warcraft login screen open, showing my character, Sinotopia, standing at attention with a small movement every now and then to adjust a hand, wiggle a leg, or be convincing that she wasn’t actually a repeating animation sequence. sinoIt was deep in the middle of the night, because I didn’t sleep so much, and I had just finished playing for many hours, and as I always did, I logged out and realized that the momentary distraction, the pixels that try to convince of meaningful interaction and accomplishment, did not serve to fill the emptiness that came to awareness after. It was my strategy to avoid spending quality time with myself, because I tend to think very critically about things, and go through a depth of introspection that is akin to diving shoulder-deep into the impressive pails that are hidden in the waist-high freezers at the ice cream shop where I worked in high school. I think about things a lot because I’m rather stupid. I can only understand things to any degree of satisfaction and reproducibility after tearing them into the tiniest of pieces, and then putting those pieces back together again. While getting the last scoop of ice cream would be desirable, this mental diving effort was something to be avoided. For this reason I had avoided (and still do, to some degree), extensive reading of things, or partaking in anything that wasn’t a straight forward, logical task. Anything other than enjoyable building or production of something, my brain would gobble up, and prompt introspection that was exhausting. It always (and still does) prompt me to write, because I have to put it somewhere to get rid of it. I was, possibly foolishly, reading Stumbling on Happiness. stumblingYes, it’s no different right now, I went back to revisit that book. At the time I think that I was hoping that it would stumble me in the right direction, which appropriately, it seemed to do.

    It is typical for us to perceive experience, and color our experience based on context. The book’s charging message is that human beings are terrible at thinking about the future, specifically, we are hard-wired to be irrationally optimistic and be completely wrong about the things that will make us happy. Most of the book is filled with clever puns and an extensive reporting of every niche psychology study, ones that you could only imagine ways for how they got funding. At the time, I was overwhelmed with the realization that I didn’t know myself at all. I was no longer a competitive runner, something that had defined me for many years, I wasn’t particularly good at anything, and I was one of those unfortunate undergraduates majoring in computer games with a sampling of primarily useless Psychology courses on the side. I didn’t have many deep friendships because getting close to people meant vulnerability and being social was hard, and I was convinced of being the girl that could disappear and no one would (save possibly my parents) really notice. It’s a dangerous mental state, but I would suspect a common one, for the 20 year old with frontal lobes still developing. Although I was soaking in a marinade of computer games and self-loathing, what had always been my core, an embedded sense of logic and proactive decision making, was still with me. If I was unhappy, I just needed to figure out what would make me happy, and then do it. I needed time to think, and I knew that it wouldn’t happen if I felt trapped at a farm. I had always found inspiration from things that are beautiful, from movement, and from music, and so I decided to pursue those things. At approximately 5 in the morning in early September, I packed a small backpack with a cell phone, credit card, a Garmin navigation device, and one change of clothes, and decided to go for a really long run.

    My plan was to go generally West, and I would use this time to think. This was the ultimate committment device, and relief from the situation of being trapped in a farm and the burden on my parents of dealing with my ornery self. I ran and walked for most of the first day, and by the evening I had covered over 40 miles, going from Weare to Keene, NH, and ending up at a hotel in some shopping center. My feet were bleeding. This was not something that I had expected. Matter of fact, I took a picture, if you can stomach it.  It was then time to call my parents. I had decided to create some distance between us, because there was no way they would approve of this journey of mine. They still didn’t, but they have always approached raising my brother and I with an eternal provision of economic and functional support. They drove the distance (much faster than my much slower method) and they brought me my Brother’s old bike. I would bike for the remainder of the trip, with a short joy run in the morning to keep both muscle groups functioning properly.

    Stumbling on Happiness changed my life because it prompted a journey from New Hampshire to Ohio, across tiny mountains that I wasn’t even aware of existing, and all the while asking myself a lot of hard questions that truly could only be addressed in the presence of rolling roadways, and the embrace of the wind. summitI sometimes slept in actual hotels that surprisingly would offer immensely wonderful free food, cheap rooms, and encouragement, sometimes ad-hoc camp grounds, and one night was even privy to be in the same establishment of cabins as some kind of biker gang that did know how to have fun after the sun went down. The exhausting physical effort in the day, and sheer appreciation for things like warm showers gave me much needed moments of serenity and calm. I always woke up with the dawn, would put on my “other” change of clothes, and get back at it, namely, pedaling and thinking. After just under 1000 miles, going from New Hampshire through the majority of Ohio, I had regained my foundation of decision, meaning a set of proactive steps to take, a strategy, for resolving this current issue. I was resolved that my stubbornness had served me well before, and would do again, because it meant that I would never give up. I realized that It was acceptable to not have the answers, and to be stupid and lost, as long as there was a plan for moving forward. I had to also come to the acceptance that a chain of bad things had happened to me since I left high school, that it was unfortunate, that it had changed me irrevocably, and that I did not want to be defined by it. I also realized that the underlying sadness was prompted by an inability to foster any kind of control over my relationships, my future, or my incentive structure. However, control over those things is also (largely) an unrealistic thing to strive for. Rather, re-establishing happiness would likely involve re-building confidence, and a sense of control in having understanding of the tiny bits of experience that bring joy, and equivalently, stress and sadness. It was really a very selfish way of thinking, but mindless achievement followed by listless floor dwelling was simply not an option. What were those little things, and could I learn to incorporate more of the good bits into my life, and avoid the bad ones? It occurred to me that, while on the surface this goal was very selfish, I would be most useful and positively impact others given that I had a strong sense of self and purpose. I decided that the only way to figure out the things that would give me larger purpose was to dip my toe into many streams, and travel down many new roads. roadI needed to try absolutely everything, and this filled me with a new sense of purpose and excitement. My appetite for risk was enhanced, and it retrospectively dawned on me that one of the hardest things in life, change, can sometimes only be spurred by an ability to embrace such risk. Further, uncertainty that may be deemed as risk at one point in life may completely lose the label when one has not much to lose. but much to gain.

    As quickly as I had left for the journey, I knew when it was over, and I was ready to go home. I found a local bike shop in a town I was passing through, a kid not much older than myself who put my bike in a box into the mail, and drove me to a tiny airport, asking nothing more than a $10 bill. I returned home just in time for my birthday, and my Dad, who was coming home from a long shift, brought me a blueberry muffin that we appropriately put a candle into. 21On my 17th birthday, I was forced to grow up very quickly, and go through mental processes that likely don’t spawn into the end of the third decade of life. Although I was an old soul, my sense of self was not matched to that age. On my 21st birthday, as if both of us had been wandering the landscape for years, we drove up the same intersection, and were reunited.

     

     

    The Story of Stumbling: Coming Full Circle

    It is now almost 8 years later, and while I take precautions to not return to things that bring subtle aches of memory, I realize that I need to come full circle in this Story of Stumbling. Reading some of this book for a second time has led to me thinking about the following points. The funny thing about these introspections is that I have seen many of these themes before, possibly hinting that I am rather slow at coming to resolutions, or limited in my own thinking capacity.

    Emotional memory returns when prompted

    In reading the pages of Stumbling on Happiness again, I was first overtaken with memory. There are aches of remembrance that I would much prefer to not feel again, and largely, I can control not feeling such aches by avoiding the experiences that cause them.

    We vary in the degree to which we think about the future

    I was next aware of a very basic assumption that the author was making – that people tend to think (or dream up) little fantasies of the future simply for pure enjoyment. This can be as simple as looking forward to a birthday party, seeing family, or having the weekend off. I know that I used to do that a lot, because I remember planning little parties, looking forward to showing a movie in Spanish class, or coming home for Christmas. I am very sensitive when I have epiphanies of being different, or possibly broken, and this realization made me feel that twinge. I think a lot about the present, most definitely the past to remember things that were enjoyable or funny, and while I cannot answer why I don’t fantasize about the future, I can say that it’s very infrequent. It does well to explain my fairly limited incentive structure to always be wanting to do things in the moment that give momentary fulfillment and purpose, and my traditional answer to “keep doing what I am doing now,” when asked about plans for the future. And so, I have come to realize that like most personality traits, people must differ in the degree to which they think about the future. I don’t have a sense for this distribution of people – it could be the case that chronically depressed dwell in the past (and are not privy to having the common irrational but evolutionarily advantageous optimistic life bias), and overly self-assured and economically gifted individuals live for dreaming up future scenarios to the point they assume themselves already there and have a very low tolerance for hard work or adversity. I just don’t know.

    Context drives interpretation

    I was next aware of the importance of context to drive interpretation. My first reading resulted in the thought “I have no idea about the experiences (functional, daily things) that give me meaning,” and for this second reading, the thought has changed to “I have no idea about the people (interactions) that give me meaning.” It’s easy to follow scripts based on previous social interactions to know what to do at a dinner outing, or an office meeting, but following such scripts is merely a strategy for being a functioning human, and says nothing about the good-feelingness (or bad-feelingness) that may come from the interaction. Arguably, if we make the assumption that humans are monogomous, long-term relationship desiring beings, we would strive to find relationships with others that maximize some benefit of each person to the other(s) life. It could be functional, emotional, physical, financial, or more realistically, some combination of those things. Eight years ago I was overwhelmed with needing to understand meaning in the context of myself, and now I am wanting to understand my meaning in the context of others.

    We need one another

    One of the deepest insecurities that can reside in a human soul is the fear of not having anything to add to anyone else’s life. Deep down, we all want to be needed and valued, by someone, for something, and possibly have some mental comfort that the strength of that need is substantial enough so that there is some certainty that it will endure. For even the tiniest thing, like taking head of the ship to bring someone else a coffee, being relied upon by a friend to bring a cherished snack, can well us up with happiness like bloated raisins. In fact, people like one another more when they ask for favors, but this stands in opposition to the common fear of inconveniencing people by asking for things. Asking for raisins, coffee, emotional support, or help is also context dependent. If an individual values another individual, the bond is strengthened. If the value is not yet established, the person is annoying, needy, and leads to the second individual not liking the person. This second situation is terrifying, and means that it is more risk averse to not ask for things. It’s also hard to ask for help because asking for help means being vulnerable. When we see things about ourselves that we do not like so much, given that we don’t like ourselves for having such things, it is only logical that others won’t either. On the other hand, knowing about others’ imperfections (counter-intuitively) makes us feel closer to them. The perception of an “average” or “generally normal” person is just that, a perception.  Most people come from interesting life experiences, are survivors, and/or feel insecure about things, and the only true difference is the degree to which that information is revealed.  For an individual with perfectionistic tendencies, the state I would call “self-loathing” comes strongly to mind. In absence of external support, that negative state is projected directly inward, and the projection of the underlying belief that led to the loathing onto others further prevents revealing such vulnerabilities to obtain support. This leads to an individual taking on the complete burden of their own insecurities, and what I would call existence at a distance. In this situation it is impossible to establish relationships where a duality of back and forth needing can be fostered, and thus the human desire for need is not fulfilled.

    Choice paralyzes, and hinders connecting with others

    To connect with others, it is essential to have some sense of self-worth. This is hindered because there is a tendency to immediately compare ourselves to some template or ideal, become aware of the enormous amount of choice that others have when choosing relationships, friendships, and conclude that it is minimally unlikely to be chosen over others. Even if we were to make the top of a list, it’s even more likely that people are terrible at allocating time, or even taking small actions to demonstrate to others that they value one another. To speak from personal experience, over the years I of course have had that insecurity, and while again there is no control over allocating others’ values, I have tried to make an effort to commit to things I know that I can make time for, and show value in the limited number of ways that I know how, which usually means being physically present, or giving presents (on a side note, nothing gives greater joy than presents, although ironically receiving them usually results in feeling badly that some amount of money or energy was spent).

    Given that we are paralyzed by making choices, how do people connect with one another? What makes most sense to me is that people will naturally find one another when they like to do the same things (Oh, look, I choose to do X in my daily life, and you do too, we can do activity X together), when they also have affection for one another (Oh, you fell off your bike? I have this deep and confusing desire to take care of you), and when they don’t mind the other’s presence (Oh, it’s 9pm on a Tuesday night, yes I’m OK that you are breathing in the same space as me, and you will be occupying valuable blanket area in the same bed in about 20 minutes). It seems to me (and is unfortunate) that many relationships (whether romantic or friendship), get started based on convenience (or for just romantic, physical infatuation) and then the only logical result is that the individuals get bored of one another. Let’s be honest, even in “good” relationships this is highly likely to happen. It’s a terrible outcome because it really hurts to have this happen, and can negatively impact other wonderful things in daily life for many years. So, maintaining superficial relationships is a much safer strategy. But that means that we would be incapable of connecting with one another. What gives?

    Being human probably means that we must try our hardest to connect, to be vulnerable, and know that any any moment it can all come crashing down. Reading some of these passages a second time, I am again thinking about my basic beliefs and the action that results (or doesn’t result) from them. As I get older, it occurs to me that there are times when I don’t want to have to be so strong. There are times when I really just want the biggest of hugs, or another human to have awareness of me needing support, even possibly when I do or cannot express it. On the flip side, an even deeper desire is to be the one that can give the support.  What many of us ask, is that beyond friendships of convenience (like single serving airplane friends that will end when the flight is over) could there exist another person (robot?) that we might stumble into, and give insight to answering this question about what components of interaction provide deeper meaning? I suspect the answer to that question will be different for each person. I also suspect that answering it will require more risk taking and sheer luck, and finally having an answer will coincide with growing into a new level of interpersonal maturity.

    The best strategy is probably maintaining openness to experience

    I don’t know the answer to this question, and I’m not even sure how to figure it out. It’s pretty easy to address when introspection is involved. During my epic bike journey I thought over many experiences, and came to some basic conclusions that I needed to experience more things. In the case of people, other than going to a substantial number of social things, throwing away insecurity about talking to random people encountered in daily life, and in a romantic sense, going on an occasional date, there is no good way to “experience people.” Actually, the more salient factor here is control. With a search for meaning in the self, there is complete control over choosing experiences, deciding if they are liked, and then doing them. With people, even if the perfect other individual could be identified for a friend, housemate, or special life companion, there is no way to ensure that the liking would be mutual. It’s highly likely that it wouldn’t be. Most of the time some external life circumstances force interaction of people with one another, and further chance life circumstances, namely experiencing something that a second person also experiences, establishes special closeness. That makes it an even more impossible problem. Further, the common fear of vulnerability, tendency to not take risks, and easiness to let indecision guide decision (maintaining the status quot) means that answering this question has a large component that is chance. This subtly implies that there is no ideal strategy other than being open to experience, focusing on what gives meaning in the present, and letting probability do its thing. A third complicating factor is having an incentive structure that is not predictably average, and I am thinking of myself in this case. The first round of this “stumbling on happiness” introspection worked so well that I identified the little bits of things that gave me meaning, and now I find it hard to do anything else.

    Conclusions

    I again have many questions and not a lot of good answers. Ironically, I read about 2/3 of this book, got bored with the endless citations of “surprising” research, and still have not finished it. I suspect I will give it another try in 8 years! The problem is that, if we can break people into two groups: those that consume things, and those that produce them, my capacity for production of things far out-sprints my capacity to consume them. I don’t know how this is distributed in a normal population, but I’d guess given American culture that most are more heavy on the consumer side. In graduate school I have absorbed the belief that to be successful, I must err on the side of consumption with careful, targeted production. Thus, I live in constant angst that I am off balance, and try my every effort to resolve the weakness.  But it could be the case that being highly proficient in both (living in autarky) is an inefficient strategy, and that the ideal collaboration would involve specialization, meaning the pairing of a consumer and a producer. The consumer would absorb all of the knowledge and need that is currently represented, and communicate what is missing to the producer, who would then fulfill the need. It’s a lot harder to ask good questions than to generate an algorithm or tool to answer them. I do need to find a good consumer, because I’m sure there are answers out there to some of my questions if internal drive to produce could be slowed down in favor of consumption. Perhaps I can only conclude that reading might be highly dangerous for me, because it results in something longer than the pages themselves.

    On a more serious note, looking back on this experience, a proper conclusion to this 8 year introspection must include an evaluation. While sometimes it feels like it would be less of a burden to have the emotional depth of a goldfish, I find value in the possibility of being able to introspect, and instill change.  While these early experiences (possibly) eliminated my capacity for deriving enjoyment from thinking about the future, they did alter my focus to direct, immediate actions and feelings, and over time that has instilled in me an almost stupid naivety and ability to derive joy from such trivial things. I plan my future in a way to maximize these momentary pleasures, which means avoiding airports, sitting in traffic, and post-office lines. It’s also lead to a (so far) bottomless well of motivation and drive that lacks any clear explanation for existing at all. When self-doubt and obstacles knock, while there may be a time when the turkeys get me down, a strength comes forth that transforms frustration into empowerment, and I try again.

    One thing I am sure of, is that there are only about 3 hours left before I must bike home in the evening, and I really want to do some lovely producing! I don’t know if I’ll stumble into interpersonal meaning, but for now I’m going to stumble back into syntax colored gedit where I like to be :).

    ·

  • Thinking About The Future

    She used to climb the stairs in threes, and claim reward in the hot cup of coffee waiting for her lips in the small mail room by the flight. Half a mile from the building, the rich brown beans appeared in her mind’s eye, patiently waiting for the next academic to push the hollow, plastic black button. If she just went a little faster, those beans would belong to her. She could predict, and carry through with action to control her future, if just one sip at time. Life was many little games, just like these. There was infinite power in the threes.

    But somewhere between her stoic bravery to survive that which was not meant to be, and an impenetrable heartbreak that catapulted her dimension of emotional experience five rainbows farther than one can perceive, she stopped thinking about the future. It existed in the expectations of others that were blurrily mapped onto her daily rituals, and appropriately perceived as life goals. It was unspoken and expected to want things in a year, two, or perhaps even three. But into that near, somewhat near, and approaching future, this girl did choose not to see.

    They don’t talk about what it feels like to feel nothing at all, and to question the underpinnings of the human experience. They also don’t talk about the gift that results from such adversity, a selfish, wampant desire for constant, emotional feedback in the present. To wash the brain in the things that light it up is the ultimate ecstasy: akin to adding happiness bleach to make whites from a colorful wash cycle. It is choosing consistency over uncertainty. It is more alluring than any drug. She learned that heartbreak and predictable inconsistency are painful, and should be avoided at all costs.

    He was her maybe. She never knew what it meant to have someone emotionally care for her, because in such perfect households to experience emotional roughing of feathers is to show weakness. Dually, she longed to be needed, for the opportunity to emotionally take care of someone. But to accept emotional support is to offer vulnerability, and reveal such shameful weakness. There was no room for weakness when she had to be strong. So it was always from within herself that she pulled strength, muffled away her vulnerabilities, and felt the overwhelming build up of everything that was not logic inside of her chest.

    She found affirmation through music. It delivered the emotional validation from amygdala to prefrontal cortex that was undoubtedly matched to the color of feeling that she was experiencing at any moment. There are some things in life that are certain: creamrinse getting stuck in the top of the ear after a shower, things tasting better on the first bite, cars having faces if one looks closely enough, and the emotional salience of music. Music was the gentle stream that could invigorate and then wash away the things that were not logical inside her heart.

    She searched for a love that would bring her peace. She kept such a fantasy in her mind, and so in most of the time when she was alone, that was all she might need. She searched for another that would reach between the cells and break the sheathing of perfection that cradled her heart. She searched for a love that made her feel free. But deep down, she understood what the naive, positive-thinking and biased average brain would typically rationalize away. The harsh reality was that people that she loved, or that might love her, eventually went away. There was only certainty in the hum of the self, and choices that were made for it, because this would endure as long as the heart beat and the mind remained sharp. And so this promise of a love was nothing more, could be nothing more, than a rosy, idealistic dream that served as an emotional blanket when the night felt a little cold.

    The exception was in her dreams. The details of reality in the fabric of stories woven together by her subconscious were strangely more sharp than anything her eyes could see in the real world. If evolution and natural selection were still relevant, her extremely poor vision would have caused her to be eaten by a more important animal many years ago. But in the age of survival, when everyone who is broken can be fixed by metal rods and expensive procedures, she endured.  And so in these dreams she found a strange sense of present in interactions and scenarios that could never be placed in time. It might have been her subconscious producing that which she needed so badly. In these dreams she found comfort, love, and richly bodied cups of coffee produced by impossibly perfect beans.

    She used to climb the stairs in threes, until she realized there was more to appreciate in the current step than hope for what might be at the top of the flight. She was empowered in that moment, unstoppable and driven, and it no longer mattered what might be at the top of the stair.  Indeed, thinking about the future is common, and can be alluring, but it just wasn’t for her anymore.

    ·