topics:  main-page   everything   99things   things-to-do   software   space   future   exercise & health   faith  
  thought   web   movies+TV   music   mymusic   food   curiosity   tidbits   I remember   wishlist   misc   links


Function Search Engine / How To Search Engine
December 28, 2014

I had an idea recently that has sparked a lot of excitement in my mind... not infrequently, I find myself needing a function that I know has probably been implemented 10,000 different times by other software developers over the ages, and I groan that here I am, about to do it again. Other times the function might be more unique, but I'm still convinced that its something that other people have already implemented at least a few times.

What if there was a really compelling way for developers to share functions/classes? There already exist places like GitHub for sharing projects, and that's great, but so often what I want isn't an existing project, it's an existing function. Imagine this search engine was more than a search engine, it was a combination of a search engine and a source code repository like GitHub. People could upload functions, associate unit tests with them, and the site would allow others to view those functions and even run them interactively on the website to play with them. Users could file bugs against those functions, resolve those bugs / commit fixes, etc. Users could comment on functions or make requests for improvements, etc.

The second ingredient would be to make these functions very findable through clever use of NLP, etc. So, you're coding in Java and want code to download a webpage? No problem -- search for "download webpage", and see functions that do exactly that.

This could be expanded to also encompass the idea of "how to's" / "example code". Search for "Java convert string to integer" and a function would be found that demonstrates how to do that. You might not want to use the function in the end, but at least to be able to examine the function to learn how to do what you were asking for.

Next: The ability to write functions that call other functions on the site. Technically you'd be calling a certain REVISION of that function, since future revisions of the function you were calling might cause breakage, but automated tools could be used figure out if it was safe to call a newer version of that function. It would also be interesting, upon modifying your function, to see if any of the tests for things that call your function break. (A kind of canary in the coal mine that might suggest you broke something in your function)

I think this idea combines (can combine) some powerful things:

Open source
Crowd sourcing
Wiki
NLP
Exponential nature of technology (building up more powerful pieces)
Ratings: People could rate functions to make them higher in the search results
Status: As people contribute more, they gain status. Useful for resumes, feeling good about one's contributions, etc.

Also imagine people defining "interfaces" + tests that define useful bundles of functionality, and being able to associate functions with interfaces. The system might even try to automatically detect when a new function matches an existing interface. Lots of interesting possibilities there.

The system could automatically sort functions by their runtime to show you which implementations were fastest, etc.

Yet another way to search for a function could be to define the arguments of a function you're about to write, the description, and a few sample input/output value pairs, and then have your IDE connect to the service to see if there are any existing matches or close matches. If so, it could essentially fill in the body of the function you were about to write automatically, or download the function and simply refer to its implementation.

Then imagine associating implementations in one language with implementations in another so that if you're learning a new language, you can simply click on a link to see how some particular thing is implemented in another language. It could also then generate metrics to show how many relative lines of code you need to implement something in one language VS another, the speed of execution, etc. That could then be used as a semi-automated tool for converting code from one language to another -- just use the properly mapped function.

And the final idea I'll propose is to provide a way to map what a function does onto a semantic model with the goal of making it even more possible to simply write a specification of what you want done, and have the site be able to cobble together the appropriate functions to do what you want, and spit out the required code.

Lots of really exciting possibilities in this space...


Voice Scripting / Intersecting Circles of Interest / Understanding Self
December 6, 2014

Everyone has things that they are strongly interested in and/or enjoy doing. A realization this week is that occasionally we come across an activity that combines 2 or 3 of our interests, and that can result in very strong levels of engagement. A way to visualize this is the venn diagram -- intersecting circles.

I experienced this phenomenon this week as I was setting up some voice-activated scripts/actions on my computer. I have things setup so that when I press Ctrl-Q, my computer starts listening (via Google's web speech API), and I can then issue voice commands. If I say "email John", my work email program creates a compose window and fills in John's email address. If I say "email Meredith using Gmail", a web browser opens a Gmail compose window and fills in Meredith's email address. If I say "lookup John in the company directory", the company directory page opens in my web browser with results filtered for "John". I could go on and on with the plans that I have for this technology... what is interesting is that setting those voice scripts up was mind blowingly compelling for me. I could easily lose myself for many hours, days, perhaps even months, implementing that kind of thing.

As I was setting this up, I recalled my days working for my former employer. Something that made me unique was scripting. I had a directory with 100+ scripts, many of them built on top of each other, allowing me to do all sorts of things with incredible efficiency.

It's no mystery to me that I'm hugely motivated by efficiency and automation. Those are two highly overlapping areas of interest. But upon further thought, there are several areas of strong interest at play with these voice scripts. It's fascinating to unpack those things, because it uncovers significant aspects of who I am, the things I value, what I find natural, etc.

1.Automation: Another way to put this is that I find repetitive tasks extremely frustrating. Any time in the past that I've had to do data entry, for example, it's like a "nails on chalkboard" experience. Working on a computer is no stranger to repetitive tasks, or tasks that consist of a bunch of predictable steps that just begs to be simplified down into one step. Any time I'm able to automate something, it is extremely rewarding. See also: Efficiency, Productivity. Creating voice scripts is a powerful form of automation.

2.Efficiency: I've heard that my grandpa Green highly valued efficiency, and if so, then the apple didn't fall very far from the tree. My mind seems to naturally gravitate to thinking about how to do things more efficiently. As mentioned, there is a strong connection here to Automation. Another connection is that I really dislike waste, and inefficiency is wasted time. Creating voice scripts is a great way to make doing your work more efficient.

3.Productivity: Strongly related with 'efficiency' and 'automation', I find high levels of productivity extremely rewarding. The todo list with ten items on it, all checked of as completely, is thrilling. Anything that helps me get work done faster is very compelling, and voice scripting fits this bill.

4.Natural Language Understanding: The area of technology that I'm most interested in (and have been for about 6 years) is the problem of natural language understanding, and this is a key component of creating voice scripts, because it requires understand/mapping natural language commands to the actions you want to achieve.

5.Voice Commands: Back in 2008, I wrote an application called "Grace" that ran on an iMac in the corner of our kitchen. In a sense, it was very much similar to the voice scripts I'm building now, but was focused on home life rather than work life. Having a computer be able to understand the spoken word was somehow very compelling and exciting for me, and still is. It puts a smile on my face.

6.User Interfaces: When I was a teenager I discovered that I had a significant interest in graphical user interfaces. I loved the challenge of crafting a UI that would allow a user to get something done. One day I was contemplating my intense interest in natural language understanding, and it suddenly dawned on me that there was actually a connection between my interest in that and graphical user interfaces. That is, they are both user interfaces. Voice scripting is a fascinating addition to keyboard and mouse. My general sense is definitely not to replace keyboard and mouse with voice. I think that's a huge mistake. The idea is to supplement keyboard and mouse with voice, and to do that where voice is more powerful. For example, if I want to email Meredith using Gmail, and if I use keyboard and mouse to do it, I need to: 1) Move my mouse down to the Windows task bar, 2) Click on Chrome, 3) Press Ctrl-T to open a new tab, 4) Click on Gmail, 5) Click on 'Compose', 6) Type in Meredith's email address. That is 5 or 6 steps to initiate the desired action. Using a voice script, I have to: 1) Press Ctrl-Q, 2) Say 'Email Meredith Using Gmail'. The 2-step solution is cognitively much simpler and takes about half of the time. Meanwhile, if I'm typing an email and I want to type something in a bold font, would it be easier to have to press Ctrl-Q and speak "bold font" than it is to simply press Ctrl-B? No, of course not. It's all about choosing the right tool for the right job.

7.Minimalism: It's no mystery to myself or others that know me well that I seem to be a minimalist by nature. I like clean, tidy environments that aren't overrun by junk. (There was another famous minimalist -- his name was Steve Jobs!) I love well designed things that have had all of the rarely-used knobs hidden away in cupboards, and execute brilliantly on the core functionality. Voice scripts are actually a pretty strong embodiment of this vision. There are no knobs to be bombarded with. You just say what you want, and it's done. What a beautiful minimalist UI!

8.AI: At some point, as perhaps many technology people can relate to, I became a bit captivated by the idea of "AI". Probably because we all realize how powerful / useful intelligent systems are. Being able to create software that leverages intelligence is extremely compelling to me, and voice scripting intersects this realm.

9.Cutting Edge: As with many technology people, I get a real kick from seeing and using things that are new and interesting, which push the limits of what is possible. Voice scripting has that flare to it for me.

10.Creativity: I enjoy my work much, much more if there is a strong element of creativity involved. Envisioning how voice scripting should work, what use cases to target, etc, is a nicely creative process.

11.Self-directed Work: Probably like most people, I find implementing my own ideas more interesting and rewarding than being told "go do this".

12.Ideas: I'm an idea person. I find it thrilling to come up with ideas that seem valuable. I've never actually seen someone demonstrate a really effective synergy between keyboard, mouse, and voice, and so in envisioning that possibility, I feel like I'm tapping into a powerful idea.



So this voice scripting stuff combines many different areas of strong interest for me. I suppose it shouldn't be surprising that setting up voice scripts is such a rewarding endeavor for me. It's such a strong intrigue that I find it hard to stop thinking about it.

The end-goal vision is this: Being able to do one's work incredibly efficiently with powerful voice scripts, which are backed by robust natural language understanding.

Want to start working on a task? Just copy the task ID into your clipboard and say "work on this task" -- your time tracking program will start logging that task, the task will be displayed in Jira, a new directory will be created for the task with the appropriate name, a new Mathematica notebook will be created and placed into that directory and displayed on your screen, the type of task detected from the Jira issue and the appropriate notebook template used so that the various functions you need to perform the debugging (etc) and right there in front of you, etc.

Done working on a task? Just say "resolve the task" and the Jira issue will be resolved, with the appropriate time spent recorded from your time tracking tool. Back in your time tracking tools, your work log will be appended with a line item indicating that the task was completed.

Need to comment on the issue you're working on? "comment on task"

Need to create a new issue? "create issue", "create bug", etc.

Need to chat with someone? "chat with John"

Need to send an email to someone? "email John and Amy"

Need to request a tag move? "request a tag move" and have your recent commit be automatically found and an appropriate email with "To", "Subject", and "Body" filled out. Just review and press "Send".

Need to restart a software component that would normally take a bunch of manual steps? Just say "restart <blah>" and have it all done automatically.

Need to go to a directory? "goto <blah>"

Need to download a new software build? "update build"



My sense is that there are many strong candidates for core / frequent actions to be packaged up nicely, allowing work to be done very quickly.

Part of the thinking here is that the human mind wants to be freed up to do the high level thinking, and not be burdened with endless clicking, navigating, etc. If all of the unnecessary low-level stuff can be factored away, it leaves the mind better able to focus on the problem solving, and hopefully, that results in a higher level of mental engagement, more passion for the work being done, etc.

One final closing thought here is that I work from home, so yabbering away at my computer all day is no problem. This wouldn't really work for people clustered around desks in an office environment. So the utility of this idea more generally might not be as great as I might hope.


Mind, Consciousness, And The Many-Dimensional Canvas
June 27, 2014

Our universe is composed of various dimensions.  Mostly commonly, we think of the three dimensions of space, but time is also understood as one of the dimensions of our reality.  We can think of these dimensions as a kind of “canvas”.  In the same way that an artist’s canvas can hold paint, the canvas of our physical reality holds matter and energy in its four dimensions.  They are the “paint” of our reality, giving shape to the picture you see when you open your eyes.

But many of us sense that there is more to our universe than matter and energy.  As humans, we experience our reality via what is typically called consciousness.  Color, which starts its journey in our physical world as a wavelength of electromagnetic energy, enters our eyes, is converted into electrical impulses, and somewhere along the way, allows us to experience color.  How we understand the essence of that experience, or how it comes about, remains an incredible mystery.  We can ask: What is the color red, as seen by humans?  So far, no one knows.  No one knows how to understand the essence of watching a sunset, or standing on the shore while huge waves crash around us.

But there seems to be a fascinating connection between the canvas of our physical reality, and the canvas of our consciousness.  That is, we can think of consciousness, too, as a kind of canvas, upon which our experience is painted.  However, consciousness would seem to be comprised of many dimensions.  Sight is distinct from sound, which is distinct from touch, which is distinct from formal thought, which is distinct from emotion.  One way to view consciousness, then, is that each “sense” is its own canvas, its own dimension, but that those canvases are united as a super-canvas which we call our consciousness.

This gives rise to the sense, which many people have, that consciousness is part of the fabric of the universe -- just like space and time are part of the fabric of our reality.

We’re missing a piece here.  When I talked about spacetime as a canvas, I made a distinction between the canvas and what was on the canvas. In that case, matter and energy were what filled the canvas.  I haven’t made the same distinction for consciousness -- we have used that word both to refer to the canvas, as well as what is on the canvas at any one time, but perhaps we should distinguish between the two.  And here, language may start to fail us.  One alternate candidate word for the canvas itself might be “mind”, while we might call what’s on that canvas to be “the experience of mind”.

One hugely significant difference between spacetime and “mind” (which I will use to refer to the canvas of consciousness) is that the canvas of spacetime is unified.  The entire universe represents a single, continuous canvas.  Conversely, the canvas of mind, so far as we know, is broken into many discrete canvases.  My experience is different than your experience.  I have a private theatre, which you know little about.

This gives rise to an important question: Is the canvas of mind truly broken up into discrete canvases, or is that an illusion?  Perhaps each of us simply projects onto our area of a much larger canvas that unifies us all.

And that possibility of a unified canvas is somewhat breathtaking.  One way to envision that is a wall of TV screens at a department store.  Each screen is projecting its own story, but is part of a larger surface that contains all of those experiences.

When we think of a unified, many-dimensional canvas that is imbued with each of our consciousnesses, and when we use the word “mind” to refer to that unified canvas, we can’t help but wonder where the intersection between that canvas and God is.

What comes to mind for me is the movie Matrix, which supposed that our reality was actually inside of a computer.  And I think that’s why, upon watching that movie, myself and many others resonated at a deep level.  We intuitively have this sense that we are part of something greater than ourselves -- a structure of mind that carries and supports each of our beings, and without which we could not exist.

Such ideas can seem both encouraging and challenging to our notion of God.  On one hand, it matches the sense that God is all knowing and all feeling, because the canvas of all space, time, and consciousness holds everything. (how’s that for a take on the sense that all of our good and bad deeds are recorded in a book)

On the other hand, if God is simply a unified canvas that holds each of our minds, we are left with a being that doesn’t have its own will apart from us, and that is in sharp contrast to the way most people view God.

It is helpful, though, to realize that God need not be limited by this unified canvas, but rather to think of this canvas as possibly being part of God’s being.  Or, alternatively, is the canvas not part of God’s being at all, and simply carried by God.  Those are old questions, and perhaps we have some hints to muse one way or another.

Let me leave you with the main thought of this essay, said one more time: We are amazing creatures that dance and flit across an expansive and many dimensional canvas. We occupy the canvases of space, of time, and of consciousness, all intimately linked together to form a super-canvas.  We are composed of matter, energy, and things which we can yet hardly grasp.  Thanks be to God.

older >>