And the Galilean invariance thing is kinda cool: who knew that you didn't need something as fundamental as Galilean invariance?
2,464 karma · joined July 25, 2010
https://tali.link
https://twitter.com/taliesinb
And the Galilean invariance thing is kinda cool: who knew that you didn't need something as fundamental as Galilean invariance?
0. internal stresses exist = mutter "look at all these contradictions and warts"; start rethinking assumptions
1. raise temperature = get creative and start brainstorming; new possibilities and combinations present themselves
2. decrease in free energy = do a bunch of prototyping; some radical simplifications or changes of perspective present themselves
3. lower temperature = realize some details are still messy, some ideas were bad; get more conservative and start weeding out stuff
4. repeat until you have to ship
No, the Wolfram Language is not natural language. It's the LISP-like language behind Mathematica. We needed to do that from a branding perspective so that the Mathematica product can continue to exist for the academic market without being conflated with the underlying language, which has much wider aspirations.
But as for natural language, you can press '=' and go into 'natural language mode' and write stuff like "total the list", but in my opinion it isn't very good yet and is only really useful for absolute beginners. I think it could get much better in the future when we have nice sophisticated type inference going (which I am working on right now).
As for IPython: the In[..] and Out[..] lines you see in IPython (and amusingly some other cloud system-based IDEs now) mirror v1 of Mathematica back in 1987 (I believe deliberately). It's an amusing accident of syntax that evaluating In[1] works in both Python and Mathematica.
But yes, exactly, part of this whole story is an online IDE (actually, a set of them) that makes it extremely easy to get a whole system deployed. Imagine setting up some machine learning, creating some slick visualizations, allocating some persistent storage, putting it behind an API, and creating an embedded dashboard, all in the space of 20 minutes and a few dozens of lines of code.
The closest existing competitor is FP complete's cloud Haskell system, but I'd love to know about others.
Here's a very high-level and eclectic list of themes and specific research directions I can remember off-hand: agent-based modeling in economics and operational research, game theory automata in evolutionary biology, lattice gas methods in fluid dynamics, tessellation-based approaches to solving PDAs, L-systems in architectural design, logic automata for programming array-based computers, cellular automata-based PRNGs for stream ciphers, program search for finding lock-free concurrent algorithms, rBMs as used in deep learning.
In fact, I used an exhaustive NKS-style search the other day to find novel data query primitives (i.e. what other functions live in the type-signature space that MapReduce occupies?).
And I wasn't comparing to other programming subs, just saying comment threads don't get nearly as long as they ought to given how much activity is going on with Rust itself.
Pity that r/rust is still fairly low volume.
It's bizarre to think that in the dying days of apartheid there was already some faction of the government seduced by the promise of third-world techno-utopianism.
One imagines a future in which we have a dwindling supply of biodiversity to 'sacrifice' in order to keep ourselves safe from bacterial onslaught.
Not unlike oil -- millions of years to produce, but destroyed in a few generations of exponential human growth.
I can imagine goto makes region analysis hellishly more difficult, and region analysis is what gives Rust the ability to statically reason about reference lifetimes, which makes it practical to remove null references from the language.
So on the Rust view, goto is even more antithetical to safe code than on Dijkstra!
http://www.infoq.com/presentations/Null-References-The-Billi...
The problem we've had with SPARQL and co is that we feel it isn't optimized for computational queries. Ontologies don't matter as much in that case, and inference in tuple stores costs you significantly in performance, although the technology is improving.
As often as not, however, the computationally irreducible work lies in making a domain suitable for computational consumption, not in the technology used for representation.
To analogize, UTF-8 is great, but without the notion of Unicode code points it wouldn't exist.
We (Wolfram) are working on a web frontend for the Wolfram Language that will make the language "effectively" open, even if it is still proprietary.
And after the next version, we're going to be concentrating hard on defining a typed subset of the language that can compile via LLVM to all kinds of targets, including the browser.
JuliaFP = Compile[
{{const,_Complex}, {init,_Complex}},
Module[{val=init,n=0},
While[Abs[val] < 5 && n < 25, val = val^2 + const; n++];
{Mod[Arg[val]/(2*3.14159), 1], 1 - Abs[val]/5, 1 - Abs[val]/100}
],
CompilationTarget -> "C",
RuntimeAttributes -> Listable,
RuntimeOptions -> "Speed"
];
{fine, coarse} = Table[Complex[j,i],
{dx, {0.008, 0.002}}, {i,-1.5,1.5,dx}, {j,-1.5,1.5,dx}
];
pt = {0.0,0.0};
Graphics[{
Raster[
JuliaFP[Complex @@ pt/2, If[ControlActive[], fine, coarse]],
{{-2.0,-2.0}, {2.0,2.0}},
ColorFunction-> Hue
],
Locator[Dynamic[pt]]},
ImageSize -> 800
] // Dynamic
P.S. Original post is awesome. I love the cow!Explain your "slightly rotated" comment?
There is also uniform perceptual LAB: http://www.brucelindbloom.com/index.html?UPLab.html which is a slight tweak to LAB to reduce the 'blue -> purple' effect that happens when you tweak chroma.
1. Once you've seen a colored element in the graphic, you want to quickly match it to its corresponding element in a legend (or vice versa). Having distinct hue and chroma is more important for this, because lightness is so vulnerable to your brain's tendency to 'correct' it based on contextual cues.
2. Hues should be aesthetically pleasing.
3. Lightness tends to impart connotations to an visualization: class X is more important than other classes if it is substantially darker or lighter. Same goes for chroma. So one wants to bound lightness and chroma to within a specific range when using them for class labeling.
Another deep complication is color impossibility, which is another way of saying that for any reasonably perceptually uniform color space like CIELAB, there is no straight-forward parametrization of the space that is both linear and avoids impossible colors.
My gut instinct is that space-filling curves could play a greater role in parameterizing the valid portions of such color spaces. Desiderata 3 is suggestive: we want some parameter that 'wiggles' within the allowed range of lightness and chroma to achieve both good distinction between nearby parameterized colors, and good global uniformity of color and chroma.
This wiggling could also 'absorb' the 'nooks and crannies' that color impossibility produces.
Still a research project, though.
We _are_ taking machine learning more seriously (I claim some credit here). My team is integrating ML into Mathematica 10 as we speak. And we've experimented with deep learning. I think some interesting things will come out of that in the future.
I think a hybrid approach is pragmatic. There is much computational knowledge that can't be assembled from web scrapes, as Google's purchase of Metaweb indicates (anyone remember Google Squared?).
It's interesting to contrast Google's and Microsoft's approach with ours at Wolfram Research (at 0.3% their size, of course [1]).
We've come to see that it is very fruitful to live in a murky space somewhere between "commercial product" and "research project".
I'm thinking specifically about Wolfram|Alpha.
It's an enormous and daunting project. We've tackled a lot of very hard problems, and obviously have a long way still to go.
It has the weird property of being a thing that ships every week, but not one that the parent company depends on financially.
And so we kind of do our own thing, encoding domain knowledge, adding content, curating data, and designing frameworks, even if some if it won't ever make us any money (e.g. who will ever pay for dog vision [2]). We mostly just do things because they're cool or fun.
But it's been incredibly useful to drive innovation elsewhere in the company.
For example:
1. Alpha's unit system (the best in the world, the authors claim) is already in Mathematica 9.
2. Alpha is inspiring us to bring high-level semantic data and reasoning to Mathematica 10.
3. The automatic analysis in Pro is being souped up and will form part of Mathematica's predictive interface (automatic suggestions to "perform logistic regression", and so on).
4. We're working on taking the natural language understanding frameworks we've built for Alpha and using them to translate natural language queries into structured SQL or hierarchical document queries.
5. The domain specific languages we've invented to represent things in the real world are going to be exposed in a soon-to-be open format we're calling the Wolfram Data Format (which I hope will succeed where RDF is failing).
We wouldn't have though of any of this stuff without Alpha. And it wasn't explicitly driven by either commercial or basic research, but rather some kind of eccentric blend of the two.
[0] http://www.youtube.com/watch?v=Nu-nlQqFCKg [1] http://www.wolframalpha.com/input/?i=600+people+%2F+%28numbe... [2] http://www.wolframalpha.com/input/?i=apply+dog+vision+to+ima...
On the other hand, Microsoft has for a long time made a serious investment in basic research, both on the programming language side and on algorithms, but that hasn't stopped them from misfiring in multiple product categories.
Refactoring our documentation a bit for M10 will help, the predictive interface in M9 helps, and there are some cool "code hint" ideas that are coming in M10 that will hopefully make it easier to keep learning.
We'll also soon be launching a community site to make it easy to discuss functionality, seek answers, and share code. For now, http://mathematica.stackexchange.com is a good resource.
We're also working on getting some materials about the Wolfram Language that should make it easier for people with existing programming experience to grok what is unique and different about WL, and how they might go about learning it.
Probably the best resource remains the existing Mathematica documentation. It is vast -- containing for example more than 100,000 evaluatable code snippets that demonstrate each function being used in multiple ways.
It is available online (http://reference.wolfram.com/mathematica/guide/Mathematica.h...) as well as in-product (double-click function you want to know about, then press F1 or Cmd+Shift+F). Following hyperlinks from familiar territory can get you a long way.
It's quite easy to get lost in it, of course, so here's a short list of "bread and butter" functions that I think every WL programmer should know really well: https://gist.github.com/taliesinb/5848321
Lastly, here is an eclectic mix of guides that might serve as good 'anchors' for some documentation spelunking:
http://reference.wolfram.com/mathematica/guide/LanguageOverv...
http://reference.wolfram.com/mathematica/guide/RulesAndPatte...
http://reference.wolfram.com/mathematica/guide/Patterns.html
http://reference.wolfram.com/mathematica/guide/StringPattern...
http://reference.wolfram.com/mathematica/tutorial/BlocksAndL...
http://reference.wolfram.com/mathematica/tutorial/LevelsInEx...
http://reference.wolfram.com/mathematica/tutorial/ApplyingFu...
http://reference.wolfram.com/mathematica/tutorial/Manipulati...
http://reference.wolfram.com/mathematica/tutorial/Introducti...
http://reference.wolfram.com/mathematica/guide/SymbolicGraph...
http://reference.wolfram.com/mathematica/Compile/tutorial/Ov...
http://reference.wolfram.com/mathematica/guide/GraphsAndNetw...
http://reference.wolfram.com/mathematica/guide/MatricesAndLi...