Category Archives: mathematica

Mathematica and MySQL Server

I often use Mathematica and MySQL together; it’s typically a lot more efficient than trying to keep megabytes of data in the Mathematica notebook itself, and becomes vastly more powerful if I want to use the same data from multiple machines, all of which can tap into the same database.

Mathematica supports these uses natively, and you can send arbitrary SQL code to the server with the SQLExecute command. Interestingly, Mathematica also provides commands that map to major SQL commands, including SQLSelect[] and SQLInsert[]. I have never used these, viewing it as easier to program SQL commands in SQL itself, tuning them in MySQL Workbench.

Today, it occurred to me that Mathematica’s built-in commands might somehow be quicker than sending raw SQL, and I tested this hypothesis. Surprisingly, it turns out to be the case, with results similar to the following for a number of cases.


In[1]:= Needs["DatabaseLink`"]

In[2]:= commodDB = OpenSQLConnection[JDBC["MySQL(Connector/J)", "localhost:3306/commoddb"],
Username -> "myUsername", Password -> "myPassword"];

In[3]:= Timing[
SQLSelect[commodDB, "tbcommodprices", {"date", "ticker", "price"},
SQLColumn["ticker"] == "LAV08 Comdty" && SQLColumn["whichprice"] == "last"];]

Out[3]= {0.031, Null}

In[4]:= Timing[
SQLExecute[commodDB, "SELECT date, ticker, price FROM `commoddb`.`tbcommodprices` where ticker='LAV09 Comdty' and whichprice='last'"];]

Out[4]= {0.047, Null}

(The two queries differ slightly because I did not want caching to give an advantage to the second query).

Mathematica at StackExchange

There is a proposal to create a Mathematica section at the popular programming Q&A site StackExchange. I think it’s probably a good idea; the mathgroup mailing list has been a great resource for years but the web is easier and quicker than e-mail sometimes.

Sign up to support it here:
Stack Exchange Q&A site proposal: Mathematica

(Or, if the link above is busted, just visit http://area51.stackexchange.com/proposals/15787/mathematica)

Amusing Youth With A Computable Document Format

A few months ago, Wolfram proposed the Computable Document Format, a standard format for files with computable content. If you have a CDF reader, you can execute the computations on your own machine. At this point, only Wolfram itself makes software for producing or reading CDFs, and I see no signs of rapid adoption, though it may be taking off in educational communities or others to which I have little exposure.

If you have Wolfram’s Computable Document Player, or Plugin installed on your computer, you should be able to use the following bit of code, which I created to amuse my daughter after the “day of the week your birthday falls on” code failed to do so.

colorList = ColorData["Indexed", "ColorList"][[1]];

Manipulate[
Rotate[Style[Text["CHILD'S NAME HERE"], FontSize -> size,
FontColor -> colorList[[Round[color]]]], rotation], {{size, 40},
30, 120}, {rotation, 0, 2*Pi}, {color, 1, Length[colorList]}]

[WolframCDF source=”http://www.wheels.org/monkeywrench/wp-content/uploads/2011/09/name.cdf” CDFwidth=”600″ CDFheight=”600″ altimage=”http://www.wheels.org/monkeywrench/wp-content/uploads/2011/09/name.png”]

I actually modified it for the CDF, combining the two lines into a single Module[], which the CDF player seems to prefer, and giving a choice of three names. You might think it would be best to include a text entry field so that the program can display any name you like, but the CDF player is Mathematica at heart, if you feed it a solvable math problem as the name, it will try to solve it. Wolfram therefore disallows free-form text entry.

Trivial birthday code

My daughter asked yesterday what an “application” was, which led to a discussion of computer programming. I demonstrated by writing a one-line program in Mathematica that computed the day of the week her birthday landed on every year since she was born. She was not impressed.

Code below; birthday changed for privacy protection.

Module[{bday},
 TableForm[
  Table[{i, bday = DatePlus["August 1, 2005", {i, "Year"}];
    DateString[bday, {"MonthName", " ", "DayShort", ", ", "Year"}],
    DateString[bday, "DayName"]}, {i, 0, 7}],
  TableHeadings -> {None, {"Birthday", "Date", "Day of Week"}}]]

table of birthdays

For extra credit, it’s not hard to generate a histogram showing the distribution of days of the week.

daysOfTheWeek = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",  "Friday", "Saturday"};

numboHits[dayOfWeek_] :=
 Module[{holder},
  holder =
   Select[
    Gather[
     Sort[
      Table[
       DateString[DatePlus["August 1, 2005", {i, "Year"}], "DayName"], {i, 0,
        25(*years to check*)}]]], #[[1]] == dayOfWeek &];
  If[Length[holder] == 1, Length[holder[[1]]], 0]]

BarChart[Map[numboHits[#] &, daysOfTheWeek], ChartLabels -> daysOfTheWeek]

birthday histogram