http://en.wikipedia.org/wiki/Homoiconicity From: hale.michael...@live.com To: wikidata-l@lists.wikimedia.org Date: Mon, 8 Jul 2013 15:57:44 -0400 Subject: Re: [Wikidata-l] Accelerating software innovation with Wikidata and improved Wikicode
In the functional programming language family (think Lisp) there is no fundamental distinction between code and data. > Date: Mon, 8 Jul 2013 22:47:46 +0300 > From: marty...@graphity.org > To: wikidata-l@lists.wikimedia.org > Subject: Re: [Wikidata-l] Accelerating software innovation with Wikidata and > improved Wikicode > > Here's my approach to software code problems: we need less of it, not > more. We need to remove domain logic from source code and move it into > data, which can be managed and on which UI can be built. > In that way we can build generic scalable software agents. That is the > way to Semantic Web. > > Martynas > graphityhq.com > > On Mon, Jul 8, 2013 at 10:13 PM, Michael Hale <hale.michael...@live.com> > wrote: > > There are lots of code snippets scattered around the internet, but most of > > them can't be wired together in a simple flowchart manner. If you look at > > object libraries that are designed specifically for that purpose, like > > Modelica, you can do all sorts of neat engineering tasks like simulate the > > thermodynamics and power usage of a new refrigerator design. Then if your > > company is designing a new insulation material you would make a new "block" > > with the experimentally determined properties of your material to include in > > the programmatic flowchart to quickly calibrate other aspects of the > > refrigerator's design. To my understanding, Modelica is as big and good as > > it gets for code libraries that represent physically accurate objects. > > Often, the visual representation of those objects needs to be handled > > separately. As far as general purpose, standard programming libraries go, > > Mathematica is the best one I've found for quickly prototyping new > > functionality. A typical "web mashup" app or site will combine functionality > > and/or data from 3 to 6 APIs. Mobile apps will typically use the phone's > > functionality, an extra library for better graphics support, a proprietary > > library or two made by the company, and a couple of web APIs. A similar > > story for desktop media-editing programs, business software, and high-end > > games except the libraries are often larger. But there aren't many software > > libraries that I would describe as huge. And there are even fewer that > > manage to scale the usefulness of the library equally with the size it > > occupies on disk. > > > > Platform fragmentation (increase in number and popularity of smart phones > > and tablets) has proven to be a tremendous challenge for continuing to > > improve libraries. I now just have 15 different ways to draw a circle on > > different screens. The attempts to provide virtual machines with write-once > > run-anywhere functionality (Java and .NET) have failed, often due to > > customer lock-in reasons as much as platform fragmentation. Flash isn't > > designed to grow much beyond its current scope. The web standards can only > > progress as quickly as the least common denominator of functionality > > provided by other means, which is better than nothing I suppose. Mathematica > > has continued to improve their library (that's essentially what they sell), > > but they don't try to cover a lot of platforms. They also aren't open source > > and don't attempt to make the entire encyclopedia interactive and > > programmable. Open source attempts like the Boost C++ library don't seem to > > grow very quickly. But I think using Wikipedia articles as a scaffold for a > > massive open source, object-oriented library might be what is needed. > > > > I have a few approaches I use to decide what code to write next. They can be > > arranged from most useful as an exercise to stay sharp in the long term to > > most immediately useful for a specific project. Sometimes I just write code > > in a vacuum. Like, I will just choose a simple task like making a 2D ball > > bounce around some stairs interactively and I will just spend a few hours > > writing it and rewriting it to be more efficient and easier to expand. It > > always gives me a greater appreciation for the types of details that can be > > specified to a computer (and hence the scope of the computational universe, > > or space of all computer programs). Like with the ball bouncing example you > > can get lost defining interesting options for the ball and the ground or in > > the geometry logic for calculating the intersections (like if the ball > > doesn't deform or if the stairs have certain constraints on their shape > > there are optimizations you can make). At the end of the exercise I still > > just have a ball bouncing down some stairs, but my mind feels like it has > > been on a journey. Sometimes I try to write code that I think a group of > > people would find useful. I will browse the articles in the areas of > > computer science category by popularity and start writing the first things I > > see that aren't already in the libraries I use. So I'll expand Mathematica's > > FindClusters function to support density based methods or I'll expand the > > RandomSample function to support files that are too large to fit in memory > > with a reservoir sampling algorithm. Finally, I write code for specific > > projects. I'm trying to genetically engineer turf grass that doesn't need to > > be cut, so I need to automate some of the work I do for GenBank imports and > > sequence comparisons. For all of those, if there was an organized place to > > put my code afterwards so it would fit into a larger useful library I would > > totally be willing to do a little bit of gluing work to help fit it all > > together. > > > >> Date: Mon, 8 Jul 2013 19:13:54 +0200 > >> From: jane...@gmail.com > >> To: wikidata-l@lists.wikimedia.org > > > >> Subject: Re: [Wikidata-l] Accelerating software innovation with Wikidata > >> and improved Wikicode > >> > >> I am all for a "dictionary of code snippets", but as with all > >> dictionaries, you need a way to group them, either by alphabetical > >> order or "birth date". It sounds like you have an idea how to group > >> those code samples, so why don't you share it? I would love to build > >> my own "pipeline" from a series of algorithms that someone else > >> published for me to reuse. I am also for more sharing of datacentric > >> programs, but where would the data be stored? Wikidata is for data > >> that can be used by Wikipedia, not by other projects, though maybe > >> someday we will find the need to put actual weather measurements in > >> Wikidata for some oddball Wikisource project tp do with the history of > >> global warming or something like that. > >> > >> I just don't quite see how your idea would translate in the > >> Wiki(p/m)edia world into a project that could be indexed. > >> > >> But then I never felt the need for "high-fidelity simulations of > >> virtual worlds" either. > >> > >> 2013/7/6, Michael Hale <hale.michael...@live.com>: > >> > I have been pondering this for some time, and I would like some > >> > feedback. I > >> > figure there are many programmers on this list, but I think others might > >> > find it interesting as well. > >> > Are you satisfied with our progress in increasing software > >> > sophistication as > >> > compared to, say, increasing the size of datacenters? Personally, I > >> > think > >> > there is still too much "reinventing the wheel" going on, and the best > >> > way > >> > to get to software that is complex enough to do things like > >> > high-fidelity > >> > simulations of virtual worlds is to essentially crowd-source the > >> > translation > >> > of Wikipedia into code. The existing structure of the Wikipedia articles > >> > would serve as a scaffold for a large, consistently designed, > >> > open-source > >> > software library. Then, whether I was making software for weather > >> > prediction > >> > and I needed code to slowly simulate physically accurate clouds or I was > >> > making a game and I needed code to quickly draw stylized clouds I could > >> > just > >> > go to the article for clouds, click on C++ (or whatever programming > >> > language > >> > is appropriate) and then find some useful chunks of code. Every article > >> > could link to useful algorithms, data structures, and interface designs > >> > that > >> > are relevant to the subject of the article. You could also find > >> > data-centric > >> > programs too. Like, maybe a JavaScript weather statistics browser and > >> > visualizer that accesses Wikidata. The big advantage would be that > >> > constraining the design of the library to the structure of Wikipedia > >> > would > >> > handle the encapsulation and modularity aspects of the software > >> > engineering > >> > so that the components could improve independently. Creating a > >> > simulation or > >> > visualization where you zoom in from a whole cloud to see its > >> > constituent > >> > microscopic particles is certainly doable right now, but it would be a > >> > lot > >> > easier with a function library like this. > >> > If you look at the existing Wikicode and Rosetta Code the code samples > >> > are > >> > small and isolated. They will show, for example, how to open a file in > >> > 10 > >> > different languages. However, the search engines already do a great job > >> > of > >> > helping us find those types of code samples across blog posts of people > >> > who > >> > have had to do that specific task before. However, a problem that I run > >> > into > >> > frequently that the search engines don't help me solve is if I read a > >> > nanoelectronics paper and I want to do a simulation of the physical > >> > system > >> > they describe I often have to go to the websites of several different > >> > professors and do a fair bit of manual work to assemble their different > >> > programs into a pipeline, and then the result of my hacking is not easy > >> > to > >> > expand to new scenarios. We've made enough progress on Wikipedia that I > >> > can > >> > often just click on a couple of articles to get an understanding of the > >> > paper, but if I want to experiment with the ideas in a software context > >> > I > >> > have to do a lot of scavenging and gluing. > >> > I'm not yet convinced that this could work. Maybe Wikipedia works so > >> > well > >> > because the internet reached a point where there was so much redundant > >> > knowledge listed in many places that there was immense social and > >> > economic > >> > pressure to utilize knowledgeable people to summarize it in a free > >> > encyclopedia. Maybe the total amount of software that has been written > >> > is > >> > still too small, there are still too few programmers, and it's still too > >> > difficult compared to writing natural languages for the crowdsourcing > >> > dynamics to work. There have been a lot of successful open-source > >> > software > >> > projects of course, but most of them are focused on creating software > >> > for a > >> > specific task instead of library components that cover all of the > >> > knowledge > >> > in the encyclopedia. > >> > >> _______________________________________________ > >> Wikidata-l mailing list > >> Wikidata-l@lists.wikimedia.org > >> https://lists.wikimedia.org/mailman/listinfo/wikidata-l > > > > _______________________________________________ > > Wikidata-l mailing list > > Wikidata-l@lists.wikimedia.org > > https://lists.wikimedia.org/mailman/listinfo/wikidata-l > > > > _______________________________________________ > Wikidata-l mailing list > Wikidata-l@lists.wikimedia.org > https://lists.wikimedia.org/mailman/listinfo/wikidata-l _______________________________________________ Wikidata-l mailing list Wikidata-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/wikidata-l
_______________________________________________ Wikidata-l mailing list Wikidata-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/wikidata-l