<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel rdf:about="https://community.wolfram.com">
    <title>Community RSS Feed</title>
    <link>https://community.wolfram.com</link>
    <description>RSS Feed for Wolfram Community showing any discussions tagged with Mathematica Add-Ons sorted by most likes.</description>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1931315" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/560469" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2445356" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3043956" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1124967" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1788578" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3062832" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/963158" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3062403" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2864162" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/96823" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/787142" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/457288" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2328597" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/762950" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1646303" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1273720" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/147140" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1421180" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/866748" />
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1931315">
    <title>CodeParser and CodeInspector</title>
    <link>https://community.wolfram.com/groups/-/m/t/1931315</link>
    <description>[![enter image description here][2]][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][3]&#xD;
&#xD;
  [1]: https://youtu.be/rOa5IntICFA&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2020-04-09at12.54.33PM.png&amp;amp;userId=11733&#xD;
  [3]: https://www.wolframcloud.com/obj/afe2a2fb-ee55-4df5-a6fb-9bc16dd08af7</description>
    <dc:creator>Brenton Bostick</dc:creator>
    <dc:date>2020-04-09T15:04:38Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/560469">
    <title>IGraph/M: graph theory and network analysis with Mathematica</title>
    <link>https://community.wolfram.com/groups/-/m/t/560469</link>
    <description>*WOLFRAM MATERIALS for the ARTICLE:*&#xD;
&amp;gt; Szabolcs Horvát, Jakub Podkalicki, Gábor Csárdi, Tamás Nepusz, Vincent Traag, Fabio Zanini, Daniel Noom, (2022).&#xD;
&#xD;
&amp;gt; *IGraph/M: graph theory and network analysis for Mathematica*.&#xD;
&#xD;
&amp;gt; arXiv:2209.09145 **[physics.soc-ph]**.&#xD;
&#xD;
&amp;gt; https://doi.org/10.48550/arXiv.2209.09145&#xD;
&#xD;
&#xD;
[![Discourse topics](https://img.shields.io/discourse/topics?color=limegreen&amp;amp;server=https%3A%2F%2Figraph.discourse.group)](https://igraph.discourse.group)&#xD;
[![GitHub (pre-)release](https://img.shields.io/github/release/szhorvat/IGraphM/all.svg)](https://github.com/szhorvat/IGraphM/releases)&#xD;
[![Contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg)](https://github.com/szhorvat/IGraphM#contributions)&#xD;
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.1134932.svg)](https://doi.org/10.5281/zenodo.1134932)&#xD;
&#xD;
----&#xD;
&#xD;
##Article abstract&#xD;
&#xD;
IGraph/M is an efficient general purpose graph theory and network analysis package for Mathematica. IGraph/M serves as the Wolfram Language interfaces to the igraph C library, and also provides several unique pieces of functionality not yet present in igraph, but made possible by combining its capabilities with Mathematica&amp;#039;s. The package is designed to support both graph theoretical research as well as the analysis of large-scale empirical networks.&#xD;
&#xD;
----&#xD;
&#xD;
##Introduction&#xD;
&#xD;
The post below was written for the original release of IGraph/M. The package has come a long way since then and now contains ~300 functions. See http://szhorvat.net/mathematica/IGraphM for more details on the current release.&#xD;
&#xD;
Compatibility: 64-it Windows/macOS/Linux or Raspberry Pi; Mathematica &amp;lt;del&amp;gt;10.0&amp;lt;/del&amp;gt; 11.0 or later.&#xD;
&#xD;
&amp;lt;a href=&amp;#034;http://szhorvat.net/mathematica/IGraphM&amp;#034;&amp;gt;&amp;lt;img src=&amp;#034;https://community.wolfram.com//c/portal/getImageAttachment?filename=IGraphM-ad-3.png&amp;amp;userId=38370&amp;#034; width=&amp;#034;300&amp;#034;&amp;gt;&amp;lt;/a&amp;gt;&#xD;
&#xD;
----&#xD;
&#xD;
I would like to announce IGraph/M, a new igraph interface for Mathematica: http://szhorvat.net/mathematica/IGraphM&#xD;
&#xD;
[igraph](http://igraph.org/) is a graph manipulation and analysis package.  IGraph/M makes its functionality available from Mathematica.&#xD;
&#xD;
This initial release, version 0.1, covers only some igraph functions, as I focused on the things that I need personally.  However the main framework is complete, and new functions can be added quickly.  If anyone would like to contribute, please contact me.&#xD;
&#xD;
Binary packages for OS X (10.9 or later) and Linux can be downloaded [from GitHub](https://github.com/szhorvat/IGraphM/releases).  Unfortunately, I was unable to compile the development version of igraph for Windows, so I cannot provide a Windows version. If you can help with compiling igraph itself (not IGraph/M) on Windows, please let me know!&#xD;
&#xD;
Functionality in this release that is not built into Mathematica:&#xD;
&#xD;
 * Vertex betweenness centrality for weighted graphs&#xD;
 * Estimates of vertex betweenness, edge betweenness and closeness centrality; for large graphs&#xD;
 * Minimum feedback arc set for weighted and unweighted graphs&#xD;
 * Find all cliques (not just maximal ones)&#xD;
 * Count 3- and 4-motifs&#xD;
 * Rewire edges, keeping either the density or the degree sequence&#xD;
 * Alternative algorithms for isomorphism testing: Bliss, VF2&#xD;
 * Subgraph isomorphism&#xD;
 * Test if a degree sequence is graphical&#xD;
 * Alternative algorithms for generating random graphs with given degree sequence&#xD;
 * Layout algorithms that take weights into account&#xD;
&#xD;
Note that IGraph/M is *not a replacement* for Mathematica&amp;#039;s graphs and networks functionality.  It is meant to complement what is already available in Mathematica, thus it primarily focuses on adding functionality that is not already present.&#xD;
&#xD;
Why did I release the package before covering most of the igraph functionality?  I do not have time to work on things I do not personally need or use, so I am unlikely to extend it further unless the need comes up.  I do think that the functions that are included in v0.1 can already be useful to others too.  I would also like to give the opportunity for people to contribute to the project if they wish to.  The groundwork has been laid, so further extensions should be quick and relatively easy.&#xD;
&#xD;
Also check out a related project, [IGraphR](https://github.com/szhorvat/IGraphR), which makes igraph available for Mathematica users through RLink.  I wrote IGraph/M because I needed higher performance and greater reliability (especially for parallel computing) than what RLink could provide.&#xD;
&#xD;
----&#xD;
&#xD;
**A request:** If any of you have used IGraphR in the past to access igraph from Mathematica, please post a response to this thread and let me know which specific functions you were using.&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/94639221-60b4-47e3-8862-d996caa40388</description>
    <dc:creator>Szabolcs Horvát</dc:creator>
    <dc:date>2015-09-06T12:55:14Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2445356">
    <title>A Wolfram Language facsimile of Wordle</title>
    <link>https://community.wolfram.com/groups/-/m/t/2445356</link>
    <description>![enter image description here][1]&#xD;
&#xD;
The popular game Wordle can take up a lot of your time.  The author designed it so that it you can only play it once a day, thus saving us from ourselves :-).&#xD;
&#xD;
[Wordle][2]&#xD;
&#xD;
[NYTimes article on Wordle][3]&#xD;
&#xD;
But I couldn&amp;#039;t resist the challenge to create a version of it in Mathematica, just for fun and because I was bored this past weekend. &#xD;
&#xD;
See the attached notebook and enjoy.  Alas, since you can run it any number of times you are only to blame for yourself it you spend too much time on it. &#xD;
&#xD;
After executing the notebook just execute &#xD;
&#xD;
    MWordle[Deploy]&#xD;
&#xD;
to bring up the game.&#xD;
&#xD;
A few additional comments.  The notebook MWordle.nb has the option&#xD;
&#xD;
AutoGeneratedPackage -&amp;gt; Automatic&#xD;
&#xD;
which causes it, when saved, to create an MWordle.m package file in its same directory. &#xD;
&#xD;
The code in MWordle.nb is set up as a package with the context MWordle`Mwordle`&#xD;
&#xD;
If you want to set things up so that the package gets loaded and the MWordle game is automatically launched, do the following.&#xD;
&#xD;
Create a directory MWordleGame on your disk  (The name MWordleGame can actually be whatever you wish.)  And in the MWordleGame directory create a new directory called MWordle.  (This name must be exactly that so that the MWordle`Mwordle` Context is property respected.)  Put the MWordle.nb notebook in the MWordle dierectory, open it in Mathematica and save it so that the MWordle.m file is created in the MWordle directory.  Then you can close the MWordle.nb notebook.&#xD;
&#xD;
Now in your MWordleGame directory save a new notebook -- you can call it whatever you wish, but something like LaunchMwordle.nb is a sensible choice.&#xD;
&#xD;
In that notebook create a button with the following command:&#xD;
&#xD;
&#xD;
    CellPrint[TextCell[Button[&amp;#034;Launch MWordle&amp;#034;,&#xD;
       Monitor[&#xD;
        If[! MemberQ[$Path, NotebookDirectory[]], &#xD;
         AppendTo[$Path, NotebookDirectory[]]];&#xD;
        Needs[&amp;#034;MWordle`MWordle`&amp;#034;]; MWordle`MWordle`MWordle[Deploy],&#xD;
        Row[{ProgressIndicator[Appearance -&amp;gt; &amp;#034;Necklace&amp;#034;, &#xD;
           ImageSize -&amp;gt; Small], Spacer[5], &#xD;
          Style[&amp;#034;Launching MWordle...&amp;#034;, 12, Blue, &#xD;
           FontFamily -&amp;gt; &amp;#034;Arial&amp;#034;]}]],&#xD;
       Method -&amp;gt; &amp;#034;Queued&amp;#034;], &amp;#034;Text&amp;#034;, GeneratedCell -&amp;gt; False, &#xD;
      CellAutoOverwrite -&amp;gt; False]]&#xD;
&#xD;
You now have a button in your LaunchMwordle.nb notebook which you can use any time you want to launch MWordle without having to execute the cells in the MWordle.nb notebook.&#xD;
&#xD;
Download the actual notebook from the link at the end of this post. The following is a version here to read.&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][4]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Wordle.gif&amp;amp;userId=20103&#xD;
  [2]: https://www.powerlanguage.co.uk/wordle/&#xD;
  [3]: https://www.nytimes.com/2022/01/03/technology/wordle-word-game-creator.html&#xD;
  [4]: https://www.wolframcloud.com/obj/08c015e2-0d65-4634-bf54-4b73e518f6d5</description>
    <dc:creator>David Reiss</dc:creator>
    <dc:date>2022-01-13T21:47:44Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3043956">
    <title>OpenSource Notebook Interface with JavaScript</title>
    <link>https://community.wolfram.com/groups/-/m/t/3043956</link>
    <description>*Wolfram Language JavaScript Frontend:*  &#xD;
*DOCUMENTATION:* https://jerryi.github.io/wljs-docs/  &#xD;
*GITHUB:* https://github.com/JerryI/wolfram-js-frontend&#xD;
&#xD;
![enter image description here][1]   &#xD;
&#xD;
&#xD;
**[Wolfram Language JavaScript Frontend](https://github.com/JerryI/wolfram-js-frontend)** is a project that aims to create a free, open-source alternative to Mathematica with its own features and benefits, and more specifically, to implement a user interface for the Wolfram Language (WL) kernel. You can use the kernel included in Mathematica or the Wolfram Engine. So this application is just a user interface for WL, not an attempt to completely rewrite the language. Below is a demonstration of the features, as well as the differences from Mathematica and other applications. You will definitely find this interesting if you like the programming approach that platforms like Mathematica, Jupyter, NTeract, JupyterLab, DeepNote, ObservableHQ, Google Collab, and a few others use.&#xD;
&#xD;
## Installation&#xD;
&#xD;
The main system requirement is Wolfram Engine or Mathematica. Then you can go to the [release page](https://github.com/JerryI/wolfram-js-frontend/releases) and download an installer suitable for your system. Run the installer - first the application will be unpacked into the user directory, and then it will run. It is approximately the same as it happens with other applications on electron. Then you need to wait a bit until all dependencies are loaded and this window opens:&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
## Main menu&#xD;
&#xD;
It is intuitive and works about as a user would expect from most desktop applications.&#xD;
&#xD;
- *File* - allows you to create, open, save, export a notepad&#xD;
- *Edit* - cut, paste, delete, select&#xD;
- *Window* - reloads the window and controls the size&#xD;
- *Evaluation* - executes cell code, stops calculation and manages the kernel&#xD;
- *Misc* - customizations and information&#xD;
&#xD;
Especially worth noting is the *File &amp;gt; Share* item, which allows you to export Notepad to an HTML file, where all markup and interactive elements will be saved. Of course only those that do not require a connection to the core.&#xD;
&#xD;
To create a notepad with a demonstration of features, go to the *File &amp;gt; New* menu or press the **CTRL + N** key combination. After that, a new file with a random name and the extension .wln - Wolfram Language Notebook - will appear in the left navigation area.&#xD;
&#xD;
## Navigation bar&#xD;
&#xD;
![enter image description here][3]&#xD;
&#xD;
Navigation through files and directories is also very simple and intuitive. Directories can be opened. Files are opened on the main panel after clicking the left mouse button, and after clicking the right mouse button - a context menu appears, where the file can be opened in a separate window, renamed, copied, deleted, shown in the file manager. The navigator sidebar is minimized using the *&amp;#034;&amp;lt;&amp;lt;&amp;#034;* button. After moving to any directory, you can go back up a level by clicking on the top line in the navigator list with the name *&amp;#034;../&amp;#034;*. On the screenshot, our new file is already open on the main panel of the window. There is nothing in it yet, except for one empty cell with a small hint.&#xD;
&#xD;
## Cells&#xD;
&#xD;
![enter image description here][4]&#xD;
&#xD;
All notebooks contains list of cells and internal metadata. There is nothing else in them. There are different types of cells. First of all, they are divided into input cells and output cells. By default, the user can create only input cells using the keyboard and mouse. This is done either by clicking in the area between the cells in the document or by double-clicking the **↓** key in the last cell. Another way to create a new cell is by clicking on the **+** button that pops up when you hover over the area to the left of an existing cell. To delete, you must first delete all text and then press the **BACKSPACE** key.&#xD;
&#xD;
The result of executing your code appears in the cells with the output. What will be there depends on what the user entered. It can be a graph, text, markup and much more. To create such a cell, just press **SHIFT + ENTER** in any input cell (if there is a code there, of course). Then the application will read the code of the cell, send it to the interpreter, wait for the response and print the result below. For example, this is what the result will be when this code is executed:&#xD;
&#xD;
```mathematica&#xD;
Graphics3D[Table[{RandomColor[], &#xD;
  Sphere[RandomReal[1, 3], 0.05 + RandomReal[]/10]}, {25}]]&#xD;
```&#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
Notice the other popup buttons. In the lower left corner there is a down arrow that allows you to hide input, and in the upper right corner there are 4 more buttons in order: delete output, make initialization cell, detach result from window, and execute code (alternative to **SHIFT + ENTER**). If you execute the code again, the result will be replaced with a new one. In general, this is the main functionality of the application - interactive cells with code that immediately show the user the result. This is what we will focus on in more detail.&#xD;
&#xD;
## Wolfram Language&#xD;
&#xD;
This is the main programming language supported here. After all, the entire backend is written in it. To write in this language, you don&amp;#039;t need to do anything extra - just execute the code in the cell. For example, below is a demonstration of how to solve an equation:&#xD;
&#xD;
```mathematica&#xD;
Solve[x^2 + 9 * x - 1 == 0, x]&#xD;
```&#xD;
&#xD;
![enter image description here][6]&#xD;
&#xD;
In the animation above, you can see that the text output is printed formatted. The roots of the equation contain a radical sign, and rational numbers are displayed as fractions. It is worth mentioning here that all this is possible due to the use of [CodeMirror](https://codemirror.net) and [wljs-interpreter](https://github.com/JerryI/wljs-interpreter) JavaScript libraries. It is it that allows you to display formatted output so that under this output hides a completely different code without formatting - i.e. allow you to create syntactic sugar. And mathematical formulas are only a small and the most obvious part of this syntactic sugar.&#xD;
&#xD;
It is worth noting that the concept of displaying mathematical formulas here is most similar to Mathematica, but different from other tools with a &amp;#034;notebook&amp;#034; interface, such as [Jupyter](jupyter.org/), [DeepNote](https://deepnote.com/home), [Observablehq](observablehq.com), [nteract](https://nteract.io), and so on. All formulas are not just pretty markup, but are editable WL expressions that can be modified directly in the output cells.&#xD;
&#xD;
![enter image description here][7]&#xD;
&#xD;
Not only formulas but any other objects are implemented using the same syntactic sugar and they too are supported by the editor:&#xD;
&#xD;
![enter image description here][8]&#xD;
&#xD;
## Markdown&#xD;
&#xD;
In addition to Wolfram Language support, the same input cells work with other programming languages and markup languages. In order to tell an application that a cell contains something that needs to be interpreted in a different way, it is necessary to enter a dot at the beginning of the cell, then the name of the language, and on the next line enter the code or markup itself. For example, for markdown it would look like this:&#xD;
&#xD;
    .md&#xD;
    # Demo notebook&#xD;
    ## Markdown cells&#xD;
    _you_ *can* __hide__ **the** input cell using the ~pop-up~ `buttons` &#xD;
    on the [left side]()&#xD;
    ## Supported languages&#xD;
    * Wolfram&#xD;
    * ect..&#xD;
    ## Wolfram code example&#xD;
    (**)```wolfram&#xD;
    Plot[Sin[x], {x, 1, 2}]&#xD;
    (**)```&#xD;
&#xD;
Then you just need to execute that cell and the output will show the formatted text:&#xD;
&#xD;
![enter image description here][9]&#xD;
&#xD;
This way of typing can be thought of as if Notebook is a file editor and by specifying &amp;#034;extension&amp;#034; at the beginning we create an anonymous file whose text starts on the next line. We will come back to this comparison below, but for now let&amp;#039;s move on to other supported languages.&#xD;
&#xD;
## JavaScript&#xD;
&#xD;
This language is supported for obvious reasons - after all, the application is actually a web page packed in [electron](https://www.electronjs.org). As in the previous case, you just need to type &amp;#034;extension&amp;#034; in the first line, and then you can write code in JS. Below is an example of drawing circles on mouse click:&#xD;
&#xD;
```javascript&#xD;
.js&#xD;
const canvas = document.createElement(&amp;#039;canvas&amp;#039;);&#xD;
const context = canvas.getContext(&amp;#039;2d&amp;#039;);&#xD;
canvas.width = 300;&#xD;
canvas.height = 400;&#xD;
let x, y&#xD;
const handleDrawCircle = (event) =&amp;gt; {&#xD;
  x = event.pageX;&#xD;
  y = event.pageY;&#xD;
  drawCircle(x, y);&#xD;
};&#xD;
const drawCircle = (x, y) =&amp;gt; {&#xD;
  context.beginPath();&#xD;
  context.arc(x, y, 50, 0, 2 * Math.PI);&#xD;
  context.strokeStyle = &amp;#039;red&amp;#039;;&#xD;
  context.stroke();&#xD;
};&#xD;
canvas.addEventListener(&amp;#039;click&amp;#039;, handleDrawCircle);&#xD;
return canvas; &#xD;
```&#xD;
&#xD;
Here&amp;#039;s what it looks like in the notebook itself:&#xD;
&#xD;
![enter image description here][10]&#xD;
&#xD;
Important features of JavaScript execution inside Notebook:&#xD;
&#xD;
- You must write return at the end of the cell to specify what to print in the output&#xD;
- All code is essentially wrapped in a function and has local scope only within a cell. That is, any declared functions and variables are only visible in a single cell&#xD;
- To create global functions and variables use the window object.&#xD;
&#xD;
JS gives full access to the entire document. With scripts in cells, you can change the entire interface beyond recognition. But you can also break it completely with the first script.&#xD;
&#xD;
## HTML&#xD;
&#xD;
If markdown markup doesn&amp;#039;t allow you to do what you want - you can use HTML in the cells. Everything works exactly the same by specifying .html in the first line. All markup from the input cell inserts into the output cell as a page fragment:&#xD;
&#xD;
```html&#xD;
.html&#xD;
&amp;lt;button&amp;gt;click me!&amp;lt;/button&amp;gt;&#xD;
&amp;lt;select&amp;gt;&#xD;
    &amp;lt;option&amp;gt;WL&amp;lt;/option&amp;gt;&#xD;
    &amp;lt;option&amp;gt;JS&amp;lt;/option&amp;gt;&#xD;
    &amp;lt;option&amp;gt;MD&amp;lt;/option&amp;gt;&#xD;
    &amp;lt;option&amp;gt;HTML&amp;lt;/option&amp;gt;&#xD;
&amp;lt;/select&amp;gt;&#xD;
```&#xD;
&#xD;
![enter image description here][11]&#xD;
&#xD;
HTML cells have one very important advantage. Code that is embedded in the markup is executed to the global scope. This can be useful for creating JavaScript functions available throughout the document. But even more useful is that you can import third-party scripts and styles from the HTML markup, as well as modify the styles of the current document. This is how, for example, I can add a rounded border to all code cells:&#xD;
&#xD;
```html&#xD;
.html&#xD;
&amp;lt;style&amp;gt;&#xD;
  .cm-editor {&#xD;
    border-radius: 5px;&#xD;
  }&#xD;
&amp;lt;/style&amp;gt;&#xD;
```&#xD;
&#xD;
![enter image description here][12]&#xD;
&#xD;
## WolframScript Pages&#xD;
&#xD;
And the most important feature of HTML cells. They support WolramScript Pages (WSP) syntax by default. You can read more about the WSP technology itself on the [project page](https://github.com/JerryI/wl-wsp), but in short, it is an extension of XML syntax with a special tag `&amp;lt;?wsp code[] ?&amp;gt;`, which inserts a WL expression into the markup - i.e., it&amp;#039;s about the same as it works in PHP.&#xD;
&#xD;
![enter image description here][13]&#xD;
&#xD;
You can use almost any Wolfram language expression in WSP. You can insert functions defined inside Notebook, but most importantly, you can separate expressions with markup tags and then the text is mixed with code right inside the page. This is how, for example, you can create tables of several random shapes:&#xD;
&#xD;
```mathematica&#xD;
randomFigure[] := &#xD;
Graphics[{{RandomColor[], RandomChoice[{Disk, Circle, Rectangle}][]}}, &#xD;
  ImageSize -&amp;gt; 60&#xD;
]&#xD;
```&#xD;
&#xD;
    .html&#xD;
    &amp;lt;ul&amp;gt;&amp;lt;?wsp Table[ ?&amp;gt;&amp;lt;li&amp;gt;&amp;lt;?wsp randomFigure[] ?&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;?wsp , {i, 1, 4}] ?&amp;gt;&amp;lt;/ul&amp;gt;&#xD;
&#xD;
![enter image description here][14]&#xD;
&#xD;
## Wolfram Language XML Extension&#xD;
&#xD;
Another technology that mixes WL code with page markup. Only now it looks like PHP, but like JSX. That is, it works the other way around - we write WL code and can add markup to it. You can read more about this technology on the documentation page, and to create a cell in the first line we write .wlx. Below is an example of a chart with a header and all this in one cell:&#xD;
&#xD;
```mathematica&#xD;
.wlx&#xD;
Heading[Text_] := &amp;lt;h2 class=&amp;#034;tracking-tight&amp;#034;&amp;gt;&amp;lt;Text/&amp;gt;&amp;lt;/h2&amp;gt;;&#xD;
Graphics1 = Plot[Sin[x], {x, -4, 4}, ImageSize -&amp;gt; 350]; &#xD;
&#xD;
&amp;lt;body&amp;gt;&#xD;
  &amp;lt;Heading&amp;gt;&#xD;
    Hello World!&#xD;
  &amp;lt;/Heading&amp;gt;&#xD;
  &amp;lt;Graphics1 /&amp;gt;&#xD;
&amp;lt;/body&amp;gt;&#xD;
```&#xD;
&#xD;
![enter image description here][15]&#xD;
&#xD;
Note the important features:&#xD;
&#xD;
- WL functions declared in the document are available inside WLX markup&#xD;
- Return the result enclosed in one common tag.&#xD;
- All HTML markup tags always start with a lowercase letter.&#xD;
- All tags that are converted into the result of WL execution are capitalized.&#xD;
- To insert a variable use `&amp;lt;Name /&amp;gt;`&#xD;
- To insert a function:`&amp;lt;Func&amp;gt;arg1 arg2&amp;lt;/Func&amp;gt;`&#xD;
- You can easily import scripts and styles&#xD;
&#xD;
## Mermaid&#xD;
&#xD;
It&amp;#039;s simple here. The Mermaid diagram support works on the basis of a JavaScript library. Here is for example a diagram that describes the backend of an application:&#xD;
&#xD;
```mermaid&#xD;
.mermaid&#xD;
flowchart TD    &#xD;
    A[Frontend]-- HTTP+WS ---B(marster kernel)&#xD;
    B---|WSTP+JTP|C[[sub kernel]]&#xD;
    C--&amp;gt;|WS|A &#xD;
```&#xD;
&#xD;
![enter image description here][16]&#xD;
&#xD;
## Slides&#xD;
&#xD;
Another markup &amp;#034;language&amp;#034; that is supported using the RevalJS library. In the first line we specify the cell type .slide or .slides, and then we can use the RevalJS presentation rules. The simplest presentations are created using .md markup and using HTML. Here&amp;#039;s an example:&#xD;
&#xD;
```mathematica&#xD;
Graphics1 = Plot[Sin[x], {x, -2, 2}]; &#xD;
&#xD;
Graphics2 = Plot3D[Sin[x] + Cos[y], {x, -2, 2}, &#xD;
{y, -2, 2}]; &#xD;
```&#xD;
&#xD;
```markdown&#xD;
.slide&#xD;
&#xD;
# Slide 1&#xD;
&#xD;
2D graphics&#xD;
&#xD;
&amp;lt;Graphics1 /&amp;gt;&#xD;
&#xD;
---&#xD;
&#xD;
# Slide 2&#xD;
&#xD;
3D graphics&#xD;
&#xD;
&amp;lt;Graphics2 /&amp;gt;&#xD;
```&#xD;
&#xD;
![enter image description here][17]&#xD;
&#xD;
Note that HTML in slide markup supports WLX by default, which means that while writing a presentation you can create various objects: graphs, pictures and charts in Wolfram and insert them directly into the presentation. Once a cell with the result is printed, it needs to be &amp;#034;detach&amp;#034; to switch to the slide show mode:&#xD;
&#xD;
![enter image description here][18]&#xD;
&#xD;
## ChatGPT&#xD;
&#xD;
We couldn&amp;#039;t resist the temptation not to join the general wave of hype - so we added the ability to communicate with the GPT3.5 model directly from Notepad cells. To do this, just type .llm in the first line and any text on the next line:&#xD;
&#xD;
![enter image description here][19]&#xD;
&#xD;
There are a couple of interesting features in cell-dialogs with a neural network:&#xD;
&#xD;
- The neural network&amp;#039;s response is printed as a set of cell pairs: input + output&#xD;
- If the text is bad somewhere - you can easily edit the input and re-execute it&#xD;
- If the neural network responds with code in .md markup - it turns into input without output&#xD;
- All output is printed above the input cell, thus simulating the work of an assistant who fills in input cells with you from top to bottom and executes code in them.&#xD;
- When the first input cell is shifted to the very bottom - it becomes like a normal dialog or ChatGPT interface.&#xD;
&#xD;
## Files&#xD;
&#xD;
At the very beginning of the review there was a comparison with anonymous files inside a cell. So cells can not only create &amp;#034;anonymous files in notepad&amp;#034;, but also read existing files! To do this, you need to enter a file name in the first line and execute cell. For example, below we will export a picture and then print it in the next cell:&#xD;
&#xD;
```mathematica&#xD;
Export[&amp;#034;bubbleChart.png&amp;#034;,BubbleChart[RandomReal[1, {5, 7, 3}]]]&#xD;
```&#xD;
&#xD;
```&#xD;
bubbleChart.png&#xD;
```&#xD;
&#xD;
![enter image description here][20]&#xD;
&#xD;
You can also write text files like this:&#xD;
&#xD;
```&#xD;
file.txt&#xD;
col1, col2, col3&#xD;
1, 2, 3&#xD;
4, 5, 6&#xD;
```&#xD;
&#xD;
Then read&#xD;
&#xD;
```&#xD;
file.txt&#xD;
```&#xD;
&#xD;
And then they will be available for import by Wolfram Language functions:&#xD;
&#xD;
```mathematica&#xD;
Import[&amp;#034;file.txt&amp;#034;, &amp;#034;CSV&amp;#034;, HeaderLines -&amp;gt; 1]&#xD;
```&#xD;
&#xD;
![enter image description here][21]&#xD;
&#xD;
## Conclusion and the headline image&#xD;
&#xD;
This concludes our review of the features of the free interface for Wolfram Language. This article did not cover all the features of the application, but only the most basic ones (not even all supported cell types). In addition to creating the interface itself, we (developers) also add our own useful features and plugins. Dear readers could see the result of such a function on headline image. In the picture, besides the logo and text, there is a real screenshot of a notepad with a 3D image of Spikey. So what&amp;#039;s so special about this polyhedron? Well, the thing is that in the screenshot, this polyhedron is built using Graphics3D, but with ray tracing and HDRI lighting map (which has unavailable in Graphics3D inside Mathmetica). Here is the code that allows you to build a Graphics3D with Spikey and ray tracing:&#xD;
&#xD;
```mathematica&#xD;
Graphics3D[{{Red, N@PolyhedronData[&amp;#034;Spikey&amp;#034;, &amp;#034;Polygons&amp;#034;]}}, &#xD;
  Boxed-&amp;gt;False,&amp;#034;RTX&amp;#034;-&amp;gt;True,&amp;#034;Lighting&amp;#034;-&amp;gt;None,&#xD;
  ImageSize-&amp;gt;{500, 400},&amp;#034;ViewProjection&amp;#034;-&amp;gt;&amp;#034;Perspective&amp;#034;, &#xD;
  &amp;#034;Lightmap&amp;#034;-&amp;gt;&amp;#034;https://raw.githubusercontent.com/JerryI/Mathematica-ThreeJS-graphics-engine/master/assets/PureSky.hdr&amp;#034;&#xD;
]&#xD;
```&#xD;
&#xD;
![enter image description here][22]&#xD;
&#xD;
That&amp;#039;s definitely all for now! Thank you all for your attention and see you in the next articles and reviews! Our project is under active development and is constantly being updated. You can follow it on [GitHub](https://github.com/JerryI/wolfram-js-frontend) and on the [documentation page](https://jerryi.github.io/wljs-docs/). Freewawre Wolfram Language JavaScript Frontend developers Kirill Vasin (https://github.com/jerryi) and Kirill Belov (https://github.com/kirillbelovtest) were with you!&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=1.png&amp;amp;userId=937303&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=2.png&amp;amp;userId=937303&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=3.png&amp;amp;userId=937303&#xD;
  [4]: https://community.wolfram.com//c/portal/getImageAttachment?filename=4.png&amp;amp;userId=937303&#xD;
  [5]: https://community.wolfram.com//c/portal/getImageAttachment?filename=5.png&amp;amp;userId=937303&#xD;
  [6]: https://community.wolfram.com//c/portal/getImageAttachment?filename=6.gif&amp;amp;userId=937303&#xD;
  [7]: https://community.wolfram.com//c/portal/getImageAttachment?filename=7.gif&amp;amp;userId=937303&#xD;
  [8]: https://community.wolfram.com//c/portal/getImageAttachment?filename=8.gif&amp;amp;userId=937303&#xD;
  [9]: https://community.wolfram.com//c/portal/getImageAttachment?filename=9.png&amp;amp;userId=937303&#xD;
  [10]: https://community.wolfram.com//c/portal/getImageAttachment?filename=10.png&amp;amp;userId=937303&#xD;
  [11]: https://community.wolfram.com//c/portal/getImageAttachment?filename=11.png&amp;amp;userId=937303&#xD;
  [12]: https://community.wolfram.com//c/portal/getImageAttachment?filename=12.png&amp;amp;userId=937303&#xD;
  [13]: https://community.wolfram.com//c/portal/getImageAttachment?filename=13.png&amp;amp;userId=937303&#xD;
  [14]: https://community.wolfram.com//c/portal/getImageAttachment?filename=14.png&amp;amp;userId=937303&#xD;
  [15]: https://community.wolfram.com//c/portal/getImageAttachment?filename=15.png&amp;amp;userId=937303&#xD;
  [16]: https://community.wolfram.com//c/portal/getImageAttachment?filename=16.png&amp;amp;userId=937303&#xD;
  [17]: https://community.wolfram.com//c/portal/getImageAttachment?filename=17.png&amp;amp;userId=937303&#xD;
  [18]: https://community.wolfram.com//c/portal/getImageAttachment?filename=18.gif&amp;amp;userId=937303&#xD;
  [19]: https://community.wolfram.com//c/portal/getImageAttachment?filename=19.gif&amp;amp;userId=937303&#xD;
  [20]: https://community.wolfram.com//c/portal/getImageAttachment?filename=20.png&amp;amp;userId=937303&#xD;
  [21]: https://community.wolfram.com//c/portal/getImageAttachment?filename=21.png&amp;amp;userId=937303&#xD;
  [22]: https://community.wolfram.com//c/portal/getImageAttachment?filename=22.png&amp;amp;userId=937303</description>
    <dc:creator>Kirill Belov</dc:creator>
    <dc:date>2023-10-17T05:24:05Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1124967">
    <title>VisX 1: Visual Interface to the Wolfram Language</title>
    <link>https://community.wolfram.com/groups/-/m/t/1124967</link>
    <description>&amp;gt; Website: https://visx.io/&#xD;
&#xD;
&amp;gt; Announcement video: https://youtu.be/Ulz96RZXHAY&#xD;
&#xD;
&amp;gt; Beta version call: https://community.wolfram.com/groups/-/m/t/2713297&#xD;
&#xD;
Hi everyone.&#xD;
&#xD;
I&amp;#039;m working on a visual interface to the Wolfram Language called [visX][1], and I&amp;#039;d like to ask what you all think of it.&#xD;
&#xD;
Wolfram Language code can often be thought of as a set of blocks, each of which takes some inputs, does something, and produces an output.  VisX lets you write WL code exactly this way - you draw a digram, connecting blocks with links.  For example, say you want to count how many times each digit (0 to 9) occurs in the first 30 digits of Pi.  With text-based WL code, you&amp;#039;d write&#xD;
&#xD;
    digits = RealDigits[N[Pi, 30]][[1]]&#xD;
    Count[digits, #] &amp;amp; /@ Range[0, 9]&#xD;
&#xD;
In visX, you&amp;#039;d draw this:&#xD;
&#xD;
![digits of Pi][2]&#xD;
&#xD;
I guess it&amp;#039;s pretty self-explanatory.  In addition to using built-in WL blocks, you can write your own, like the CountInList block.  Normally, blocks just transform inputs to output, but the CountInList block is mapped over its input which is indicated by the little brackets on the outside of its connection ports.  (That&amp;#039;s basically visual syntactic sugar for &amp;#034;/@&amp;#034; or Map.)  The 4 in the upper-right corner indicates that results inside this block are showing results from the 4-th time through the map.  The block with &amp;#034;digits&amp;#034; in it sets a variable, which is then referenced in the CountInList block.&#xD;
&#xD;
You define blocks (which are basically functions) by just making an empty rectangle and dragging contents in then wiring them together, then you can use copies of the block wherever you want.  A change in any copy of the block will be reflected in all other copies.  There&amp;#039;s no real difference between a defining a block and using it.  Recursion can be specified by just including a copy of the block inside itself.  Blocks can call other blocks in the same manner.&#xD;
&#xD;
Just like regular WL code, visX blocks can be nested deeply, but with the visual interface, it&amp;#039;s easy to zoom in and out.  At any point, the UI will show you the right amount of detail for each block - sometimes no detail at all, sometimes its name and labels on its inputs, sometimes its actual contents (which can then be edited or further zoomed...).&#xD;
&#xD;
visX is stand-alone software that runs locally on your machine, evaluates the diagram using your local Mathematica kernel, and receives the results and puts them back in the diagram.  You can load data files using Import as usual.&#xD;
&#xD;
One of the problems that I&amp;#039;ve seen with visual languages in the past is that while simple things are easy to do, the code quickly gets too complex to manage and the visual interface starts to get in the way.  With the Wolfram Language in theory everything is an expression, and this can lead you to write functional-style programs which are easily thought of as a diagram, but that&amp;#039;s not always the most natural way to express a computation.  Sometimes you just need a little for loop.  Consider calculating Fibonacci numbers.  Start the sequence with 1, 1, ... then each element of the sequence is the sum of the previous two.  Yes, you can write a recursive algorithm to do this, but most people just want to write a little for loop.  In visX, you can do this (calculates the 6th Fibonacci number):&#xD;
&#xD;
![embedded code][4]&#xD;
&#xD;
I&amp;#039;ve tried to let you use blocks-and-links when that&amp;#039;s the most natural thing (which is usually), and text-based code when that&amp;#039;s better.  Of course, you can mix them together however you want.&#xD;
&#xD;
A second problem I&amp;#039;ve found with visual programming languages is that it can actually be much slower to use then writing out text, because you have to laboriously drag and drop every single block.  Even simple algebraic expressions like&#xD;
&#xD;
    Sin[x]^2 + Cos[x]^2&#xD;
    2x^2 + 4x*y + 8y^2&#xD;
&#xD;
would involve a lot of blocks because of all the Plus, Times, and Power blocks, as well as all the constants and symbols.  With visX, you can enter Wolfram Language code snippets like those, and it will parse them and transform them into blocks which you can then insert into your diagram all at once and edit at will.  This makes it much faster to get your idea onto the screen so that you can start evaluating it and developing it.  I&amp;#039;m also working on the ability to take a visX block and give you back the Wolfram Language code that it represents.&#xD;
&#xD;
The examples given here are simple, but of course you can use this interface for putting together a complex piece of code as well.  I find it especially handy when building up a calculation with lots of intermediate results along the way, or to rapidly prototype an algorithm where I want to be able to easily switch the data flows around.&#xD;
&#xD;
Does this project seem useful to anyone?  I&amp;#039;d like to get some feedback - what do you think of it?  Would you use it?  For what?&#xD;
&#xD;
If there&amp;#039;s interest, I could do a small-scale alpha test in about a month from now.&#xD;
&#xD;
More info at [visx.io][5].&#xD;
&#xD;
-Nicholas Hoff&#xD;
&#xD;
*edited to clarify block definitions and recursion*&#xD;
&#xD;
&#xD;
  [1]: http://visx.io&#xD;
  [2]: http://community.wolfram.com//c/portal/getImageAttachment?filename=pi_digits_without_chrome.png&amp;amp;userId=1124239&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=pi_digits.png&amp;amp;userId=1124239&#xD;
  [4]: http://community.wolfram.com//c/portal/getImageAttachment?filename=embeded_wl.png&amp;amp;userId=1124239&#xD;
  [5]: http://visx.io</description>
    <dc:creator>Nicholas Hoff</dc:creator>
    <dc:date>2017-06-20T10:02:52Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1788578">
    <title>Wolfram Notebook Embedder released</title>
    <link>https://community.wolfram.com/groups/-/m/t/1788578</link>
    <description>Today, we&amp;#039;re happy to officially announce the first version of the [Wolfram Notebook Embedder][1] JavaScript library, which allows you to seamlessly embed [Wolfram Cloud](https://www.wolframcloud.com/) notebooks on websites. It can automatically resize a container based on the notebook size and it offers an API that can be used to &amp;#034;reach into&amp;#034; the notebook from the outer website, e.g. controlling a [Manipulate](https://reference.wolfram.com/language/ref/Manipulate.html) variable. These things were not easily possible by embedding notebooks using an `&amp;lt;iframe&amp;gt;`.&#xD;
&#xD;
![HTML page with embedded JavaScript code that embeds a notebook into a given container div][2]&#xD;
&#xD;
You can read more on the [official Wolfram Notebook Embedder website](https://reference.wolfram.com/language/WolframNotebookEmbedder/), check out its [GitHub repository](https://github.com/WolframResearch/wolfram-notebook-embedder) or install the library from [npm](https://www.npmjs.com/package/wolfram-notebook-embedder). In addition to extensive [documentation](https://reference.wolfram.com/language/WolframNotebookEmbedder/docs/GettingStarted/), the website also contains a few interactive [examples](https://reference.wolfram.com/language/WolframNotebookEmbedder/examples/) for how to use the library.&#xD;
&#xD;
While we&amp;#039;re really excited about this release, it still has some limitations to be aware of (see also the [troubleshooting guide](https://reference.wolfram.com/language/WolframNotebookEmbedder/docs/Troubleshooting/)):&#xD;
&#xD;
* Due to 3rd-party cookie blocking, embedded notebooks don&amp;#039;t work very well in the Safari web browser right now. We don&amp;#039;t track any personal data using these cookies, but we use them for load balancing, so we can&amp;#039;t support certain features without these for now. Depending on the notebook content, you might still have to fall back to using an `&amp;lt;iframe&amp;gt;` in Safari. We&amp;#039;re working on a solution to this (using a different load-balencing strategy).&#xD;
* Since the notebook is rendered directly into the DOM of the containing website, CSS definitions are shared between the two worlds and can &amp;#034;bleed&amp;#034; from the outside into the notebook and the other way around, potentially breaking styles in either of them. You might be able to work around such issues by increasing the [specificity](https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity) of your CSS definitions, so they (1) override conflicting definitions coming from the notebook and (2) do not affect the notebook. We&amp;#039;re working on a more robust solution, perhaps using a separate [Shadow DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM) root for embedded notebooks to isolate all styling.&#xD;
&#xD;
If you encounter any other bugs, please [file an issue on GitHub](https://github.com/WolframResearch/wolfram-notebook-embedder/issues).&#xD;
&#xD;
This is just the beginning of our initiative to make notebooks easier to embed and interoperate with. Please let us know us what you want to do with this and if you have any questions, ideas or suggestions. One thing we&amp;#039;re already starting to work on is an API (e.g. `https://www.wolframcloud.com/nb?url=...`) that will allow you to render a whole notebook (at a certain URL or with a certain content) on the fly  stay tuned.&#xD;
&#xD;
&#xD;
  [1]: https://reference.wolfram.com/language/WolframNotebookEmbedder&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=hero.png&amp;amp;userId=29488</description>
    <dc:creator>Jan Poeschko</dc:creator>
    <dc:date>2019-09-13T09:32:01Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3062832">
    <title>The Telephone Game - next level with GPT</title>
    <link>https://community.wolfram.com/groups/-/m/t/3062832</link>
    <description>![enter image description here][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=w5qgsdf.jpg&amp;amp;userId=11733&#xD;
  [2]: https://www.wolframcloud.com/obj/04458d24-aacf-4cd7-8a5d-46efde37e927</description>
    <dc:creator>Marco Thiel</dc:creator>
    <dc:date>2023-11-09T22:51:38Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/963158">
    <title>Draw: vector drawing &amp;amp; technical illustration application</title>
    <link>https://community.wolfram.com/groups/-/m/t/963158</link>
    <description>Recently John Fultz [announced][1] GitLink as open source on GitHub. He also mentioned the desire to offer more Wolfram related open source to the community. Draw was not mentioned by John but readers of his post followed the GitHub [link][2] and discovered the Draw repository. Naturally questions followed so here we are with an introduction of Draw, the latest open source contribution to the community.&#xD;
&#xD;
Draw is a vector drawing application. Many of the technical illustrations found in the Wolfram Language documentation were created using it. The release of Draw is to promote the advantages of using the Wolfram Language for software development.&#xD;
&#xD;
Draw was a personal project that grew from an idea to develop a simple tool to automate the drawing of flowcharts. This simple tool expanded in response to the need of functionality for solving specific challenges required by various illustrations. The Wolfram Language was very instrumental in helping Draw evolve during this process.&#xD;
&#xD;
Some of the more prominent features of Draw include:&#xD;
&#xD;
 - Orthographic 3D drawing&#xD;
 - Circuit, Mechanical and 3D library presets&#xD;
 - Adjustable shapes such as gears or spirals&#xD;
 - Shape arrays&#xD;
 - Image autotrace&#xD;
&#xD;
The gallery of examples below demonstrate the capabilities of Draw:&#xD;
&#xD;
![gallery][3]&#xD;
&#xD;
A look inside the application reveals an interface divided into four distinct sections:&#xD;
&#xD;
![interface sections][4]&#xD;
&#xD;
An example of Draw being used to work on a flowchart:&#xD;
&#xD;
![interface][5]&#xD;
&#xD;
The Circuit, Mechanical and 3D libraries:&#xD;
&#xD;
![libraries][6]&#xD;
&#xD;
The adjustable gear shape:&#xD;
&#xD;
![gear][7]&#xD;
&#xD;
The shape array:&#xD;
&#xD;
![shape array][8]&#xD;
&#xD;
Hope this brief introduction is enough to inspire you to download the Draw notebook from [this GitHub link][9]. Start creating illustrations or explore the Wolfram Language code to discover how the application works. Support is available by clicking the blue help button for topics such as the basics, features, interaction, tools, examples and tips. Tooltips appear for all buttons detailing their behavior. Remember this is open source software and comes with no guarantee. That being said, feel free to kick the tires and take it for a spin.&#xD;
&#xD;
Draw works best when used in Mathematica 11 but most functionality is supported by Mathematica 10.4.1.&#xD;
&#xD;
&#xD;
  [1]: http://community.wolfram.com/groups/-/m/t/960333&#xD;
  [2]: https://github.com/WolframResearch&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=examples.png&amp;amp;userId=28355&#xD;
  [4]: http://community.wolfram.com//c/portal/getImageAttachment?filename=interfaceSections.png&amp;amp;userId=28355&#xD;
  [5]: http://community.wolfram.com//c/portal/getImageAttachment?filename=interface.png&amp;amp;userId=28355&#xD;
  [6]: http://community.wolfram.com//c/portal/getImageAttachment?filename=libraries.png&amp;amp;userId=28355&#xD;
  [7]: http://community.wolfram.com//c/portal/getImageAttachment?filename=gear.png&amp;amp;userId=28355&#xD;
  [8]: http://community.wolfram.com//c/portal/getImageAttachment?filename=shapearray.png&amp;amp;userId=28355&#xD;
  [9]: https://github.com/shdlbwr/draw</description>
    <dc:creator>Tim Shedelbower</dc:creator>
    <dc:date>2016-11-14T20:15:12Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3062403">
    <title>Direct API access to new features of GPT-4 (including vision, DALL-E, and TTS)</title>
    <link>https://community.wolfram.com/groups/-/m/t/3062403</link>
    <description>![enter image description here][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=fg45qw.jpg&amp;amp;userId=11733&#xD;
  [2]: https://www.wolframcloud.com/obj/34ac42c4-10de-4201-a158-6af47eda2bd8</description>
    <dc:creator>Marco Thiel</dc:creator>
    <dc:date>2023-11-08T21:48:25Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2864162">
    <title>OpenAIMode: paclet for interaction w/ OpenAI&amp;#039;s GPT &amp;amp; DALL-E via OpenAILink</title>
    <link>https://community.wolfram.com/groups/-/m/t/2864162</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/04e935d4-d928-4868-adb8-ae6f84fae1f8</description>
    <dc:creator>Anton Antonov</dc:creator>
    <dc:date>2023-04-02T19:01:27Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/96823">
    <title>Simple, fast compiled peak detection based on moving average</title>
    <link>https://community.wolfram.com/groups/-/m/t/96823</link>
    <description>Recently [b][url=http://community.wolfram.com/groups/-/m/t/91868]Christopher coded a neat wavelet-based method for peak detection[/url][/b]. Peak detection is often needed in various scientific fields: all sorts of spectral analysis, time series and general feature recognition in data come to mind right away.  There are many methods for peak detection. Besides his wavelet-based code Christopher also mentions a built-in MaxDetect function rooted in image processing. [b][url=http://reference.wolfram.com/mathematica/ref/MaxDetect.html]MaxDetect[/url][/b], though, being a rather elaborate tool for multi-dimensional data (2D, 3D images) and with a specific image-processing-minded parameter tuning, was not meant to target time series and other 1D data. This got me thinking.

[b]Can we come up with a minimal compile-able peak detection code that would be accurate, robust and fast in most situations for 1D data?[/b]

I am not an expert in the subject, but intuitively peak detection consists of two stages. 
[list]
[*][b]Finding all maxima[/b]. This can be done via Differences with selection of neighbor difference pairs that change from positive to negative. Such pair would indicate local maximum.
[*][b]Filtering out peaks[/b]. Selecting those maxima that are high splashes of amplitude with respect to its immediate neighborhood. Quoted words are relative and depend on particular data. This is why they are set as tuning parameters in the algorithm.
[/list]To illustrate 2nd point lets take a look at the [b][url=http://www.wolframalpha.com/input/?i=Albert+Einstein+Wikipedia+page+hits+history]Albert Einstein Wikipedia page hits history[/url][/b] below. Obviously a large peak in the past can be lower than current average in case if there is strong trend in the data. This is why we need windowing when looking for peaks, - to compare a peak to its immediate neighborhood. 

[url=http://www.wolframalpha.com/input/?i=Albert+Einstein+Wikipedia+page+hits+history][img=width: 600px; height: 469px;]/c/portal/getImageAttachment?filename=ScreenShot2013-08-14at3.13.07PM.png&amp;amp;userId=11733[/img][/url]

Without further ado here is a function written specifically in terms of functions that can be compiled. For example I do not use MovingAverage, but do trick with Partition instead.[mcode]PeakDetect = Compile[{{data, _Real, 1}, {width, _Integer}, {cut, _Real}}, (Table[0, {width}]~Join~
      Map[UnitStep[# - cut] &amp;amp;, data[[1 + width ;; -1 - width]] - Map[Mean, Partition[data, 1 + 2 width, 1]]]~Join~
      Table[0, {width}]) ({0}~Join~ Map[Piecewise[{{1, Sign[#] == {1, -1}}, {0, Sign[#] != {1, -1}}}] &amp;amp;, 
       Partition[Differences[data], 2, 1]]~Join~{0}), CompilationTarget -&amp;gt; &amp;#034;C&amp;#034;];[/mcode]The legend for the function arguments is the following:[list]
[*]data  1D numerical list of data
[*]width  half-width of the moving average window not including central point
[*]cut  threshold at which to cut off the peak in natural units of data amplitudes 
[/list]Now lets see some usage cases. Lets import the same Albert Einstein data as a proof of concept. [mcode]raw = WolframAlpha[ &amp;#034;albert einstein&amp;#034;, {{&amp;#034;PopularityPod:WikipediaStatsData&amp;#034;, 1}, &amp;#034;TimeSeriesData&amp;#034;}];
data = raw[[All, 2]][[All, 1]];[/mcode]We use total window width of 5 points here and cut off peak at a standard deviation of the whole data. The peak labeled May 2008 is nicely picked up even though it is comparable then current average. This peak is most probably due to publication on May 13, 2008 of [b][url=http://www.amazon.com/Einstein-Life-Universe-Walter-Isaacson/dp/0743264746]one of the most famous books about Einstein[/url][/b] marked as New York Times bestseller that also got award Quill Award. Of course you can play with controls to pick or drop peaks. On the top plot one sees data, moving average, and bands formed by moving average displaced up and down by fraction of standard deviation. Any maximum above the top band becomes a peak.

[url=http://www.amazon.com/Einstein-Life-Universe-Walter-Isaacson/dp/0743264746][img=width: 800px; height: 382px;]/c/portal/getImageAttachment?filename=9672ScreenShot2013-08-14at3.47.18PM.png&amp;amp;userId=11733[/img][/url]

The code for the app is at the very end. Lets try a different data set  recent sun spot activity. [mcode]raw = WolframAlpha[&amp;#034;sun spot&amp;#034;, {{&amp;#034;SunspotsPartialTimeSeries:SpaceWeatherData&amp;#034;, 1}, &amp;#034;TimeSeriesData&amp;#034;}];
data = raw[[All, 2]];[/mcode]We right away found on May 2013 mark - a [b][url=http://en.wikipedia.org/wiki/Solar_cycle_24#May_2013]most powerful recent event described in Wikipedia page here[/url][/b]. Please let me know if you have suggestions how to speed this up or improve it generally. I would be very curious to know your opinion and critique. 

[color=#ff0000][i]The .GIF below is large - wait till it is loaded.[/i][/color]

[img=width: 800px; height: 380px;]/c/portal/getImageAttachment?filename=sunspot.gif&amp;amp;userId=11733[/img]

The following reference could be useful:[list]
[*][b][url=http://www.tcs-trddc.com/trddc_website/pdf/SRL/Palshikar_SAPDTS_2009.pdf]Simple Algorithms for Peak Detection in Time-Series[/url][/b]
[*][b][url=http://www.mdpi.com/1999-4893/5/4/588]An Efficient Algorithm for Automatic Peak Detection in Noisy Periodic and Quasi-Periodic Signals[/url][/b]
[/list]The code for the interactive app:[mcode]Manipulate[
 tt = {#, 
     Rotate[DateString[#, {&amp;#034;MonthNameShort&amp;#034;, &amp;#034; &amp;#034;, &amp;#034;Year&amp;#034;}], Pi/2]} &amp;amp; /@
    Pick[raw, PeakDetect[data, wid, thr StandardDeviation[data]], 1][[
    All, 1]];
 
 Column[{
   
   ListLinePlot[{data, 
     ArrayPad[MovingAverage[data, 1 + 2 wid], wid, &amp;#034;Fixed&amp;#034;], 
     ArrayPad[MovingAverage[data, 1 + 2 wid], wid, &amp;#034;Fixed&amp;#034;] + 
      thr StandardDeviation[data], 
     ArrayPad[MovingAverage[data, 1 + 2 wid], wid, &amp;#034;Fixed&amp;#034;] - 
      thr StandardDeviation[data]}, AspectRatio -&amp;gt; 1/6, 
    ImageSize -&amp;gt; 800, Filling -&amp;gt; {2 -&amp;gt; {1}, 3 -&amp;gt; {4}}, 
    FrameTicks -&amp;gt; {None, Automatic}, 
    FillingStyle -&amp;gt; {Directive[Red, Opacity[.7]], 
      Directive[Blue, Opacity[.7]], Directive[Gray, Opacity[.1]]}, 
    PlotStyle -&amp;gt; Opacity[.7], PlotRange -&amp;gt; All, Frame -&amp;gt; True, 
    GridLines -&amp;gt; Automatic, PlotRangePadding -&amp;gt; 0],
   
   Show[
    DateListPlot[raw, Joined -&amp;gt; True, AspectRatio -&amp;gt; 1/6, 
     ImageSize -&amp;gt; 800, Filling -&amp;gt; Bottom, Ticks -&amp;gt; {tt, Automatic}, 
     Frame -&amp;gt; False, Mesh -&amp;gt; All, PlotRange -&amp;gt; All],
    DateListPlot[
     If[# == {}, raw[[1 ;; 2]], #, #] &amp;amp;[
      Pick[raw, PeakDetect[data, wid, thr StandardDeviation[data]], 
       1]], AspectRatio -&amp;gt; 1/6, ImageSize -&amp;gt; 800, 
     PlotStyle -&amp;gt; Directive[Red, PointSize[.007]], PlotRange -&amp;gt; All]
    , PlotRangePadding -&amp;gt; {0, Automatic}]
   
   }],
 Row[{
   Control[{{thr, 1, &amp;#034;threshold&amp;#034;}, 0, 2, Appearance -&amp;gt; &amp;#034;Labeled&amp;#034;}], 
   Spacer[100],
   Control[{{wid, 3, &amp;#034;hal-width&amp;#034;}, 1, 10, 1, Setter}]
   }]
 ][/mcode]
[b]============== UPDATE =================[/b]

Thank you all very much for contributing. I collected everyone&amp;#039;s efforts and Danny&amp;#039;s two functions in a single completely compile-able expression which seems to give shortest time; - but just vaguely faster then Danny&amp;#039;s ingenious maneuver. I very much liked format suggested by Christopher, the one that Michael also kept in his packages. But I wanted to make some benchmarking and thus followed the format returned by the function [b][url=http://reference.wolfram.com/mathematica/ref/MaxDetect.html]MaxDetect[/url][/b] - simply for the sake of speed comparison. This format is just a binary list of the length of original data with 1s in positions of found peaks. 

Here is the function:[mcode]PeakDetect = 
  Compile[{{data, _Real, 1}, {width, _Integer}, {cut, _Real}}, 
   (Table[0, {width}]~Join~
      UnitStep[
       Take[data, {1 + width, -1 - width}] - 
          (Module[{tot = Total[#1[[1 ;; #2 - 1]]], last = 0.}, 
              Table[tot = tot + #1[[j + #2]] - last; 
               last = #1[[j + 1]];
               tot, {j, 0, Length[#1] - #2}]]/#2) &amp;amp;[data, 1 + 2 width] - cut]
    ~Join~Table[0, {width}]) ({0}~Join~
      Table[If[Sign[{data[[ii + 1]] - data[[ii]], 
           data[[ii + 2]] - data[[ii + 1]]}] == {1, -1}, 1, 0], 
           {ii, 1, Length[data] - 2}]~Join~{0}), CompilationTarget -&amp;gt; &amp;#034;C&amp;#034;];
dat = RandomReal[1, 10^7];

pks = MaxDetect[dat]; // AbsoluteTiming
Total[pks]
(* ======== output ======== 
{62.807928, Null}
3333361
   ======== output ======== *)

pks = PeakDetect[dat, 1, 0]; // AbsoluteTiming
Total[pks]
(* ======== output ======== 
{1.560074, Null}
3333360
   ======== output ======== *)[/mcode]And here are the speed benchmarks on 10 million data points which shows 40 times speed-up:</description>
    <dc:creator>Vitaliy Kaurov</dc:creator>
    <dc:date>2013-08-14T21:21:54Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/787142">
    <title>Crystallica: A package to plot crystal structures</title>
    <link>https://community.wolfram.com/groups/-/m/t/787142</link>
    <description>## General information and download links ##&#xD;
&#xD;
If you&amp;#039;re interested in crystal structures, you can now download the Crystallica application from the Wolfram Library Archive, and then you can do things like this:&#xD;
&#xD;
    Needs[&amp;#034;Crystallica`&amp;#034;];&#xD;
    CrystalPlot[&#xD;
    {{5.4,0,0},{0,5.4,0},{0,0,5.4}},&#xD;
    {{0,0,0},{0,0,.5},{0,.5,0},{.5,0,0},{.24,.24,.24},{.24,.76,.76},{.76,.24,.76},{.76,.76,.24}},&#xD;
    {1,2,2,2,3,3,3,3},&#xD;
    AtomCol-&amp;gt;{&amp;#034;Firebrick&amp;#034;,&amp;#034;YellowGreen&amp;#034;,White},AtomRad-&amp;gt;.4,&#xD;
    BondStyle-&amp;gt;2,BondDist-&amp;gt;3,&#xD;
    CellLineStyle-&amp;gt;False,AddQ-&amp;gt;True,Lighting-&amp;gt;{{&amp;#034;Directional&amp;#034;,White,ImageScaled[{0,0,1}]}},Background-&amp;gt;Black]&#xD;
&#xD;
![enter image description here][1]&#xD;
&#xD;
Here are the download links for Crystallica and two other packages you may need:&#xD;
&#xD;
[Crystallica][2] - contains the functions `CrystalPlot` and `CrystalChange`&#xD;
&#xD;
[CifImport][3] - contains an import function for CIF files&#xD;
&#xD;
[VaspImport][4] - contains an import function for files related to [VASP][5]&#xD;
&#xD;
Once you&amp;#039;ve installed Crystallica (by saving the entire Crystallica folder - not the zip archive - to `$USerBaseDirectory/Applications` and re-starting the Kernel), you can enter Crystallica into the Documentation Center and you&amp;#039;ll find lots of useful examples. Most of the examples in this post are taken from the Documentation. For the other two packages, just install them and evaluate this:&#xD;
&#xD;
    ?CifImport&#xD;
    ?VaspImport&#xD;
&#xD;
I&amp;#039;ll first show you a few things the `CrystalPlot` function can do when you already have crystal structure data inside Mathematica, wherever it may have come from. Then we&amp;#039;ll take a look at how to get the data into Mathematica in the first place, which is where `CifImport` and `VaspImport` will come into play - but we&amp;#039;ll get data from other sources as well. I&amp;#039;ll cover the different import solutions in separate replies to this thread, because I have a feeling that I&amp;#039;ll be rambling on and on and on...&#xD;
&#xD;
## Simple plot ##&#xD;
&#xD;
Traditional ball-and-stick plots are usually just fine, so the simplest thing you can do is this:&#xD;
&#xD;
    CrystalPlot[&#xD;
    {{4.5,0,0},{0,4.5,0},{0,0,3}},&#xD;
    {{0,0,0},{.5,.5,.5},{.2,.8,.5},{.3,.3,0},{.7,.7,0},{.8,.2,.5}},&#xD;
    {1,1,2,2,2,2}]&#xD;
&#xD;
![enter image description here][6]&#xD;
&#xD;
As you can see, `CrystalPlot` expects three arguments. The first one contains the lattice vectors, which are simply the three vectors that create the parallelepiped that constitutes the cell. The second argument contains the atomic coordinates, but they&amp;#039;re given in the basis of the lattice vectors (which is quite useful in crystallography). The third argument is a list of integers that gives the atom types, with one entry for each atom. If you want to plot a molecule instead, you can call `CrystalPlot` with just two arguments: A list of atom coordinates in cartesian space, and a list of atom types. Everything else you see in the plot - the atoms, bonds, colours, arrows etc. - represents the default settings of various layout options.&#xD;
&#xD;
## Advanced atoms and bonds ##&#xD;
&#xD;
Let&amp;#039;s take a look at some more advanced options just for fun. For instance, atoms and bonds can look any way you need them to, because you can specify your own functions for them. You can also fine-tune where to put bonds and what to do with their thickness and colour in a physically (or chemically) meaningful way, but I won&amp;#039;t show that here. So here are some customized atoms and bonds:&#xD;
&#xD;
    Row[Table[&#xD;
    CrystalPlot[{{4,0,0},{0,4,0},{0,0,4}},{{0,0,0},{.4,.4,.4},{.8,.8,.8}},{1,2,3},&#xD;
    AtomRad-&amp;gt;{.4,1.2,.7},AtomFunction-&amp;gt;style,ImageSize-&amp;gt;400],&#xD;
    {style,{&#xD;
    (Ball[#1,#2]&amp;amp;),&#xD;
    (Scale[Sphere[#1,#2],{1,1,.5}]&amp;amp;),&#xD;
    ({EdgeForm[Thick],Opacity[.7],Cuboid[#1-.5*#2,#1+.5*#2]}&amp;amp;)&#xD;
    }}]]&#xD;
&#xD;
![enter image description here][7]&#xD;
&#xD;
    Row[Table[&#xD;
    CrystalPlot[{{0,0,0},{5,0,0},{2.5,4,0}},{1,2,3},BondDist-&amp;gt;6,BondStyle-&amp;gt;style,ImageSize-&amp;gt;400],&#xD;
    {style,{&#xD;
    1,&#xD;
    Function[{bonds,partcol},Table[{If[ii&amp;lt;.5,partcol[#,1],partcol[#,2]],Sphere[bonds[[#,1]]+ii*(bonds[[#,2]]-bonds[[#,1]]),.15]},{ii,0,1,1/9}]&amp;amp;/@Range[Length[bonds]]],&#xD;
    Function[{bonds,partcol},Module[{spiral,points,rad=.05},&#xD;
    spiral[atoms_]:=Module[{scale=.5,dist=atoms[[2]]-atoms[[1]],curls=60,normal,rot,scaled},&#xD;
    normal=Table[{scale*Cos[ii],scale*Sin[ii],.1*ii},{ii,0,curls,\[Pi]/10}];&#xD;
    scaled={#[[1]],#[[2]],10*Norm[dist]/curls*#[[3]]}&amp;amp;/@normal;&#xD;
    rot=scaled.Quiet[RotationMatrix[{dist,{0,0,1}}]];&#xD;
    Join[{atoms[[1]]},#+atoms[[1]]&amp;amp;/@(rot[[25;;-25]]),{atoms[[2]]}]];&#xD;
    points=spiral/@bonds;&#xD;
    {partcol[#,1],Tube[BSplineCurve[points[[#,;;Round[Length[points[[#]]]/2]]],rad]],partcol[#,2],Tube[BSplineCurve[points[[#,Round[Length[points[[#]]]/2];;]],rad]]}&amp;amp;/@Range[Length[bonds]]&#xD;
    ]]&#xD;
    }}]]&#xD;
&#xD;
![enter image description here][8]&#xD;
&#xD;
## Lattice planes ##&#xD;
&#xD;
Crystallica can also add lattice planes to the plot. You can specify them using [h,k,l] Miller indices and distance to the origin.&#xD;
&#xD;
    CrystalPlot[{{3,0,0},{0,3,0},{0,0,3}},{{0,0,0}},{1},&#xD;
    AddQ-&amp;gt;True,AtomRad-&amp;gt;.3,AtomCol-&amp;gt;&amp;#034;CadmiumYellow&amp;#034;,Sysdim-&amp;gt;2,CellLineStyle-&amp;gt;2,&#xD;
    LatticePlanes-&amp;gt;Table[{{1,1,1},dist},{dist,1,5}],ContourStyle-&amp;gt;{&amp;#034;TerreVerte&amp;#034;,Opacity[.7]},BoundaryStyle-&amp;gt;Thick]&#xD;
&#xD;
![enter image description here][9]&#xD;
&#xD;
## Coordination polyhedra ##&#xD;
&#xD;
You can automatically search for and plot coordination polyhedra. This is not limited to the commonly occurring tetrahedra and octahedra - you can actually look for polyhedra with arbitrary numbers of corners. There are also options to fine-tune both the searching and the rendering.&#xD;
&#xD;
    plot[corners_,mixed_]:=CrystalPlot[{{0,0,0},{0,0,1.8},{-.9,-1.5,-.6},{-.9,1.5,-.6},{1.7,0,-.6},{.8,.8,.8}},{1,2,2,2,2,3},&#xD;
    BondStyle-&amp;gt;False,ImageSize-&amp;gt;250,&#xD;
    PolyMode[corners]-&amp;gt;{&amp;#034;Show&amp;#034;-&amp;gt;All,&amp;#034;AllowMixed&amp;#034;-&amp;gt;mixed},PolyStyle[corners]-&amp;gt;Directive[Opacity[.5],EdgeForm[Thick]]];&#xD;
    Grid[{{&#xD;
    &amp;#034;&amp;#034;,&#xD;
    &amp;#034;Search for polyhedra with \n4 corners&amp;#034;,&#xD;
    &amp;#034;Search for polyhedra with \n5 corners&amp;#034;&#xD;
    },{&#xD;
    &amp;#034;Allow \nmixed corners&amp;#034;,&#xD;
    plot[4,True],&#xD;
    plot[5,True]&#xD;
    },{&#xD;
    &amp;#034;Don&amp;#039;t allow \nmixed corners&amp;#034;,&#xD;
    plot[4,False],&#xD;
    plot[5,False]&#xD;
    }},Dividers-&amp;gt;All]&#xD;
&#xD;
![enter image description here][10]&#xD;
&#xD;
    CrystalPlot[{{2.5,-4.3,0},{2.5,4.3,0},{0,0,5.5}},&#xD;
    {{.5,0,0},{0,.5,.7},{.5,.5,.3},{.2,.4,.5},{.6,.8,.2},{.2,.8,.8},{.8,.6,.5},{.4,.2,.2},{.8,.2,.8}},{1,1,1,2,2,2,2,2,2},&#xD;
    PolyMode[4]-&amp;gt;True,PolyStyle[4]-&amp;gt;EdgeForm[None],AddQ-&amp;gt;True,&#xD;
    Sysdim-&amp;gt;2,AtomRad-&amp;gt;0,CellLineStyle-&amp;gt;False,AtomCol-&amp;gt;{&amp;#034;SlateGray&amp;#034;,&amp;#034;Firebrick&amp;#034;},&#xD;
    ViewAngle-&amp;gt;.4,ViewPoint-&amp;gt;{3.2,0,1.1},ViewVertical-&amp;gt;{.5,0,1.2}]&#xD;
&#xD;
![enter image description here][11]&#xD;
&#xD;
## Other things ##&#xD;
&#xD;
Visualization aside, you can also build supercells, change cell shapes, or add, remove and sort atoms... but that&amp;#039;s a bit boring to read, so I&amp;#039;ll refer you to the Documentation page of the `CrystalChange` function instead.&#xD;
&#xD;
If you&amp;#039;re interested, we can use this thread to talk about any questions you may have, or you can share your use of the package (if you decide to use it). I&amp;#039;m not offering full support here, but I&amp;#039;ll be floating around, and I&amp;#039;d like to hear your feedback. We don&amp;#039;t have any intentions to be involved in further development. But if you have a good idea and some time, then by all means, work on it for yourself, or host it on your favourite code collaboration site.&#xD;
&#xD;
Bianca Eifert and Christian Heiliger&#xD;
&#xD;
&#xD;
  [1]: http://community.wolfram.com//c/portal/getImageAttachment?filename=teaser.png&amp;amp;userId=69107&#xD;
  [2]: http://library.wolfram.com/infocenter/MathSource/9372/&#xD;
  [3]: http://library.wolfram.com/infocenter/MathSource/9373/&#xD;
  [4]: http://library.wolfram.com/infocenter/MathSource/9375/&#xD;
  [5]: http://vasp.at/&#xD;
  [6]: http://community.wolfram.com//c/portal/getImageAttachment?filename=9692simple.png&amp;amp;userId=69107&#xD;
  [7]: http://community.wolfram.com//c/portal/getImageAttachment?filename=atoms.png&amp;amp;userId=69107&#xD;
  [8]: http://community.wolfram.com//c/portal/getImageAttachment?filename=bonds.png&amp;amp;userId=69107&#xD;
  [9]: http://community.wolfram.com//c/portal/getImageAttachment?filename=planes.png&amp;amp;userId=69107&#xD;
  [10]: http://community.wolfram.com//c/portal/getImageAttachment?filename=polys.png&amp;amp;userId=69107&#xD;
  [11]: http://community.wolfram.com//c/portal/getImageAttachment?filename=polys2.png&amp;amp;userId=69107&#xD;
  [12]: http://rruff.geo.arizona.edu/AMS/CIF_text_files/13532_cif.txt&#xD;
  [13]: http://cms.mpi.univie.ac.at/vasp/vasp/POSCAR_file.html&#xD;
  [14]: http://wiki.jmol.org/index.php/File:Caffeine.mol</description>
    <dc:creator>Bianca Eifert</dc:creator>
    <dc:date>2016-02-05T18:43:18Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/457288">
    <title>LaTeX typesetting in Mathematica</title>
    <link>https://community.wolfram.com/groups/-/m/t/457288</link>
    <description>[![Join the chat at https://gitter.im/MaTeX-help/Lobby](https://badges.gitter.im/MaTeX-help/Lobby.svg)](https://gitter.im/MaTeX-help/Lobby?utm_source=badge&amp;amp;utm_medium=badge&amp;amp;utm_campaign=pr-badge&amp;amp;utm_content=badge)&#xD;
[![GitHub (pre-)release](https://img.shields.io/github/release/szhorvat/MaTeX/all.svg)](https://github.com/szhorvat/MaTeX/releases)&#xD;
[![Github All Releases](https://img.shields.io/github/downloads/szhorvat/MaTeX/total.svg)](https://github.com/szhorvat/MaTeX/releases)&#xD;
[![Contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg)](https://github.com/szhorvat/MaTeX/issues)&#xD;
[![DOI](https://zenodo.org/badge/31675019.svg)](https://zenodo.org/badge/latestdoi/31675019)&#xD;
&#xD;
----&#xD;
&#xD;
Hello everyone,&#xD;
&#xD;
I wrote a package that makes it easy to insert LaTeX-typeset formulae in Mathematica notebooks, in particular in Mathematica graphics.  I use this to create figures with high quality typesetting that fit well with the visual style of LaTeX documents.&#xD;
&#xD;
Here&amp;#039;s the [package description][1] and here&amp;#039;s [MaTeX][2].&#xD;
&#xD;
Features of the package:&#xD;
&#xD;
 - get LaTeX-typeset snippets as Mathematica `Graphics` expressions (convenient for a Mathematica-centric workflow)&#xD;
 - the baseline is preserved so these snippets can be precisely aligned with each other or with Mathematica text&#xD;
 - control over font size, magnification and display or inline styles&#xD;
 - integrated documentation (open the documentation centre and search for &amp;#034;MaTeX&amp;#034;)&#xD;
&#xD;
Let me know what you think and whether you find it useful.&#xD;
&#xD;
A quick demo:&#xD;
&#xD;
&amp;lt;img src=&amp;#034;http://community.wolfram.com//c/portal/getImageAttachment?filename=Screenshot2017-09-0111.08.27.png&amp;amp;userId=38370&amp;#034; width=&amp;#034;772&amp;#034;&amp;gt;&#xD;
&#xD;
&#xD;
  [1]: http://szhorvat.net/pelican/latex-typesetting-in-mathematica.html&#xD;
  [2]: https://github.com/szhorvat/MaTeX&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Screenshot2017-09-0111.08.27.png&amp;amp;userId=38370</description>
    <dc:creator>Szabolcs Horvát</dc:creator>
    <dc:date>2015-03-12T01:39:42Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2328597">
    <title>Training a recurrent neural network (RNN) to generate piano music</title>
    <link>https://community.wolfram.com/groups/-/m/t/2328597</link>
    <description>&amp;gt; **GitHub Repository:** https://github.com/alecGraves/Howl&#xD;
&#xD;
&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/da6d3b76-7bbf-4a55-9fcd-058e7f1e17bf</description>
    <dc:creator>Alec Graves</dc:creator>
    <dc:date>2021-07-27T14:09:12Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/762950">
    <title>Package for Radar Charts</title>
    <link>https://community.wolfram.com/groups/-/m/t/762950</link>
    <description>**RadarChart Mathematica Package**&#xD;
&#xD;
The *RadarChart* mathematica package incorporates Radar Charts (also known as Spider Charts, Web Charts and Star Plots) as a new set of visualization tools into the mathematica environment.&#xD;
&#xD;
A detailed explanation on the use of radar charts can be found in the following [wikipedia page](https://en.wikipedia.org/wiki/Radar_chart).&#xD;
&#xD;
The project is listed at the mathematica package repository ([http://packagedata.net][1]), or can be accessed directly at  [github][2].&#xD;
&#xD;
Thanks to [halirutan](https://github.com/halirutan) for his guidance on setting up this project. Installation Instructions are heavily based on his existing projects.&#xD;
&#xD;
---&#xD;
**Navigation**&#xD;
&#xD;
- [Detailed Usage](#-detailed-usage)&#xD;
- [Examples](#examples)&#xD;
- [Neat Examples](#neat-examples)&#xD;
- [Installation](#installation)&#xD;
	- [Automatic Installation for *Mathematica* 9 and above](#automatic-installation-for-mathematica-9-and-above)&#xD;
	- [Manual Installation](#manual-installation)&#xD;
- [Contact](#-contact) &#xD;
	&#xD;
---&#xD;
&#xD;
##![doc image](http://i.stack.imgur.com/erf8e.png) Detailed Usage&#xD;
    RadarChart[{y1,y2,y3,...}]&#xD;
generates a radar plot (also known as web, star, spider, cobweb or kiviat diagram) corresponding to a list of values. This type of chart is suitable for showing commonality and outliers across different variables. &#xD;
     RadarChart[{list1,list2,...}]&#xD;
generates a radar plot to compare several series. &#xD;
&#xD;
     RadarChart[association]&#xD;
generates a radar plot to view the variable values in an association. &#xD;
&#xD;
     RadarChart[{association1,association2,...}]&#xD;
generates a radar plot to compare several series. &#xD;
&#xD;
     RadarChart[dataset]&#xD;
generates a radar plot to compare several series.&#xD;
&#xD;
Options are listed in the help file, and also in the readme document @ the github site.&#xD;
&#xD;
##Examples&#xD;
    Needs[&amp;#034;RadarChart`&amp;#034;]&#xD;
    RadarChart[{1, 2, 4, 5, 3}, &#xD;
    ChartLegends -&amp;gt; {&amp;#034;Private Label Strawberry Juice&amp;#034;}, &#xD;
    AxesLabel -&amp;gt; {&amp;#034;Ripe&amp;#034;, &amp;#034;Green&amp;#034;, &amp;#034;Candy&amp;#034;, &amp;#034;Juicy&amp;#034;, &amp;#034;Sulphur&amp;#034;}, &#xD;
    PlotLabel -&amp;gt; Style[&amp;#034;Sensory Map Strawberry Juice&amp;#034;, Bold, Large], &#xD;
    ImageSize -&amp;gt; Medium]&#xD;
    &#xD;
![Basic Example](http://i.stack.imgur.com/Opnwp.png)    &#xD;
&#xD;
Multiple Series can be charted.&#xD;
&#xD;
     Needs[&amp;#034;RadarChart`&amp;#034;]&#xD;
     RadarChart[{{1, 4, 3, 5, 2}, {2, 4, 3, 2, 1}}, Filling -&amp;gt; Axis, &#xD;
         AxesLabel -&amp;gt; {&amp;#034;Sweet&amp;#034;, &amp;#034;Sour&amp;#034;, &amp;#034;Salty&amp;#034;, &amp;#034;Bitter&amp;#034;, &amp;#034;Umami&amp;#034;}, &#xD;
         PlotStyle -&amp;gt; {Red, Blue}, ChartLegends -&amp;gt; {&amp;#034;Fernet-Cola&amp;#034;, &amp;#034;Jugo&amp;#034;}]&#xD;
![Mathematica graphics](http://i.stack.imgur.com/zvBVd.png)   &#xD;
&#xD;
Example of a start plot.&#xD;
&#xD;
     Needs[&amp;#034;RadarChart`&amp;#034;];&#xD;
     RadarChart[{{1, 4, 3, 5, 2}, {2, 4, 3, 2, 1}}, AxesType -&amp;gt; &amp;#034;Star&amp;#034;]&#xD;
&#xD;
![Mathematica graphics](http://i.stack.imgur.com/umecs.png)&#xD;
&#xD;
Compare survey results.&#xD;
&#xD;
     Needs[&amp;#034;RadarChart`&amp;#034;];&#xD;
     RadarChart[{{3, 4, 3, 4, 2}, {4, 5, 4, 5, 3}}, &#xD;
         AxesLabel -&amp;gt; {&amp;#034;Assets&amp;#034;, &amp;#034;Reliability&amp;#034;, &amp;#034;Cost Control&amp;#034;, &#xD;
         &amp;#034;Abstenteeism&amp;#034;, &amp;#034;Revenue&amp;#034;}, &#xD;
         ChartLegends -&amp;gt; {&amp;#034;Past Year&amp;#034;, &amp;#034;Current Year&amp;#034;}, Filling -&amp;gt; Axis, &#xD;
         PlotStyle -&amp;gt; {{Gray}, {Black}}, ImageSize -&amp;gt; Medium]&#xD;
     &#xD;
![Mathematica graphics](http://i.stack.imgur.com/WUH8c.png)&#xD;
&#xD;
##Neat Examples&#xD;
&#xD;
Analyze and compare crime statistics across states.&#xD;
&#xD;
     Needs[&amp;#034;RadarChart`&amp;#034;];&#xD;
     states = EntityClass[&amp;#034;AdministrativeDivision&amp;#034;, &amp;#034;AllUSStatesPlusDC&amp;#034;];&#xD;
     stateNames = First@StringSplit[#, &amp;#034;,&amp;#034;] &amp;amp; /@ states[&amp;#034;Name&amp;#034;];&#xD;
     crimeProps = {&amp;#034;AggravatedAssaultRate&amp;#034;, &amp;#034;BurglaryRate&amp;#034;, &#xD;
         &amp;#034;ForcibleRapeRate&amp;#034;, &amp;#034;LarcenyTheftRate&amp;#034;, &#xD;
         &amp;#034;MurderNonnegligentManslaughterRate&amp;#034;, &amp;#034;PropertyCrimeRate&amp;#034;, &#xD;
         &amp;#034;RobberyRate&amp;#034;, &amp;#034;ViolentCrimeRate&amp;#034;};&#xD;
     crimeData = EntityValue[states, &#xD;
         EntityProperty[&amp;#034;AdministrativeDivision&amp;#034;, #] &amp;amp; /@ crimeProps];&#xD;
     crimeRanking = Transpose[&#xD;
         Ordering[crimeData[[All, #]]] &amp;amp; /@ Range@Length@crimeProps];&#xD;
     ds = Dataset[&#xD;
         AssociationThread[stateNames, &#xD;
             AssociationThread[crimeProps, #] &amp;amp; /@ crimeRanking]];&#xD;
     GraphicsRow[{RadarChart[ds[&amp;#034;Georgia&amp;#034;], AxesType -&amp;gt; &amp;#034;Star&amp;#034;, &#xD;
         PlotLabel -&amp;gt; Style[&amp;#034;Georgia&amp;#034;, Bold, Large], &#xD;
         Epilog -&amp;gt; {Dashed, Circle[{0, 0}, 25.5]}, ImageSize -&amp;gt; Large], &#xD;
         GraphicsGrid[&#xD;
             Partition[&#xD;
                 RadarChart[ds[#], PlotLabel -&amp;gt; #, AxesLabel -&amp;gt; None, &#xD;
                 PlotRange -&amp;gt; {0, 50}, AxesType -&amp;gt; &amp;#034;Star&amp;#034;,&#xD;
                 PlotRangePadding -&amp;gt; Full, FrameTicks -&amp;gt; None, &#xD;
                 Epilog -&amp;gt; {Dashed, Circle[{0, 0}, 25.5]}] &amp;amp; /@ stateNames, &#xD;
                 UpTo[6]], ImageSize -&amp;gt; 600]}]]&#xD;
                 &#xD;
![Mathematica graphics](http://i.stack.imgur.com/5Vk7j.png)&#xD;
&#xD;
#Installation&#xD;
&#xD;
This package should work with Mathematica &amp;gt;8 if not using associations or datasets. The package was developed using mathematica 10.&#xD;
The installation is simple: Copy the `RadarChart` package directory into a location where *Mathematica* can find it. Usually this is the `Applications` directory in your `$UserBaseDirectory`. Just evaluate&#xD;
&#xD;
    FileNameJoin[{$UserBaseDirectory, &amp;#034;Applications&amp;#034;}]&#xD;
&#xD;
to see it. If there is an old installation of the `RadarChart`, remove it. Please find detailed steps below.&#xD;
&#xD;
###Automatic Installation for *Mathematica* 9 and above&#xD;
&#xD;
We have set up [an installation script](https://raw.githubusercontent.com/catrasca/RadarChart/master/RadarChart/installer.m) that does all the steps, except deleting old installations, for you. If it finds an old installation, it will prompt you with the location and quit, so that you can remove the old installation. After removing the old files, just start it again and it will proceed through all the steps pointed out in the manual installation section. To start the installation script, simply call&#xD;
&#xD;
    Import[&amp;#034;http://tinyurl.com/ntmhkca&amp;#034;]&#xD;
&#xD;
After this, the package should be available in your mathematica instance.&#xD;
&#xD;
###Manual Installation&#xD;
&#xD;
####Removing old Installations&#xD;
&#xD;
Old installation packages can be found by simply searching directories in your `$Path`. &#xD;
&#xD;
    FileNames[&amp;#034;RadarChart&amp;#034;, $Path]&#xD;
&#xD;
Please remove old installation directories that appear after evaluating the commands above. You can use &#xD;
&#xD;
    DeleteDirectory[dir, DeleteContents -&amp;gt; True]&#xD;
&#xD;
for that, but note that on Windows this might fail, because there, some files are locked when *Mathematica* is running. In this case, close *Mathematica* and do it manually using an explorer.&#xD;
&#xD;
###Downloading, Extracting and Copying the New Version&#xD;
&#xD;
The easiest way is, to download the whole repository as zip file. Use [this master.zip](https://github.com/catrasca/RadarChart/archive/master.zip) or click the *Download ZIP* on the right side on this page.&#xD;
&#xD;
After you have downloaded the file extract it. If you have no tool for this on Windows, you could use the [free 7-Zip](http://7-zip.org/). Under Mac OSX and Linux this should work out of the box.&#xD;
&#xD;
Inside the extracted directory, you will find a subdirectory `RadarChart` which has the following structure&#xD;
&#xD;
    RadarChart/&#xD;
    ??? Documentation&#xD;
    ?   ??? English&#xD;
    ?       ??? ReferencePages&#xD;
    ?           ??? Symbols&#xD;
    ?               ??? RadarChart.nb&#xD;
    ??? Kernel&#xD;
    ?   ??? init.m&#xD;
    ??? Installer.m&#xD;
    ??? pacletInfo.m&#xD;
    ??? RadarChart.m&#xD;
&#xD;
Copy the whole `RadarChart` directory with all its content to your `Applications` folder under your `$UserBaseDiretory`. If everything is in place proceed to the next step.&#xD;
&#xD;
###Finishing the Installation&#xD;
&#xD;
To make the package works, you can simply restart *Mathematica*.&#xD;
&#xD;
##![contact team](http://i.stack.imgur.com/tCbmW.png) Contact&#xD;
&#xD;
If you find bugs or have any other questions, please [create a new issue](https://github.com/catrasca/RadarChart/issues) in the bug-tracker. &#xD;
&#xD;
&#xD;
  [1]: http://packagedata.net/&#xD;
  [2]: http://github.com/catrasca/RadarChart</description>
    <dc:creator>Diego Zviovich</dc:creator>
    <dc:date>2015-12-22T20:02:41Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1646303">
    <title>UNET: neural network for 2D &amp;amp; 3D image segmentation w/ medical examples</title>
    <link>https://community.wolfram.com/groups/-/m/t/1646303</link>
    <description># UNET [![DOI](https://zenodo.org/badge/137186334.svg)](https://zenodo.org/badge/latestdoi/137186334) [![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/dwyl/esta/issues)&#xD;
&#xD;
&#xD;
----------&#xD;
&#xD;
![Automated 3D muscle segmentation using UNET / RESNET using DIXON MRI data][17]&#xD;
&#xD;
&#xD;
A package to generate and train a UNET deep convolutional network for 2D and 3D image segmentation.&#xD;
&#xD;
Some code was based on [work][1] by [@Ali Hashmi][at0], which was also dicussed in [this post][2] &#xD;
The full version of the toolbox can be found on my [github page][3].&#xD;
&#xD;
* [Information](#information)&#xD;
* [Install toolbox](#install-toolbox)&#xD;
* [Using the toolbox](#using-the-toolbox)&#xD;
* [Functionality](#functionality)&#xD;
* [Visualization](#visualization)&#xD;
* [Example](#example)&#xD;
&#xD;
## Information&#xD;
&#xD;
UNET is developed for [Mathematica](https://www.wolfram.com/mathematica/).&#xD;
It contains the following toolboxes:&#xD;
&#xD;
- UnetCore&#xD;
- UnetSupport&#xD;
&#xD;
Documentation of all functions and their options is fully integrated in the Mathematica documentation.&#xD;
The toolbox always works within the latest version of Mathematica and does not support any backward compatibility.&#xD;
&#xD;
All code and documentation is maintained and uploaded to github using [Workbench](https://www.wolfram.com/workbench/).&#xD;
&#xD;
## Install toolbox&#xD;
&#xD;
Install the toolbox in the Mathematica UserBaseDirectory &amp;gt; Applications.&#xD;
&#xD;
	FileNameJoin[{$UserBaseDirectory, &amp;#034;Applications&amp;#034;}]&#xD;
  &#xD;
## Using the toolbox&#xD;
&#xD;
The toolbox can be loaded by using &amp;lt;&amp;lt;UNET`&#xD;
&#xD;
The notbook ``UNET.nb`` shows examples of how to use the toolbox on artificially generated 2D data. &#xD;
There are also examples how to visualize the layer of your trained network and how to visualize the training itself. &#xD;
&#xD;
## Functionality&#xD;
&#xD;
The network supports multi channel inputs and multi class segmentation.&#xD;
&#xD;
* UNET generates a UNET convolutional network.  &#xD;
    * 2D UNET  &#xD;
![UNET 2D][4]&#xD;
    * 3D UNET  &#xD;
![UNET 3D][5]&#xD;
&#xD;
* Loss Layers: Training the data is done using three loss layers: a SoftDiceLossLayer, BrierLossLayer and a CrossEntropyLossLayer.  &#xD;
![SoftDiceLossLayer, BrierLossLayer and a CrossEntropyLossLayer][6]&#xD;
&#xD;
* Convolution Blocks: The toobox contains five different convolution blocks that build up the network: [UNET][7], UResNet, [RestNet][8], UDenseNet, [DensNet][9].  &#xD;
![Convolution blocks][10]&#xD;
&#xD;
* SplitTrainData splits the data and labels into training, validation and test data.  &#xD;
![split train Data][11]&#xD;
&#xD;
* TrainUNET trains the network.  &#xD;
![Train UNET][12]&#xD;
&#xD;
## Visualization&#xD;
&#xD;
* Visualize the network and results.  &#xD;
    * Visualize the features of the layers.  &#xD;
![Visualize layer features][13]&#xD;
    * Visualize the results.  &#xD;
![Visualize the results][14]&#xD;
    * Animate the training process.  &#xD;
![UNET 2D animation][15]  &#xD;
![UNET 3D animation][16]&#xD;
&#xD;
## Example&#xD;
&#xD;
* Example: 3D segmentation of lower legg muscles using MRI data.  &#xD;
&#xD;
![Automated 3D muscle segmentation using UNET / RESNET using DIXON MRI data][17]&#xD;
&#xD;
&#xD;
  [1]: https://github.com/alihashmiii/UNet-Segmentation-Wolfram&#xD;
  [2]: https://community.wolfram.com/groups/-/m/t/1341081?p_p_auth=w8PIeeiA&#xD;
  [3]: https://github.com/mfroeling&#xD;
  [4]: https://community.wolfram.com//c/portal/getImageAttachment?filename=UNET2D.PNG&amp;amp;userId=1332602&#xD;
  [5]: https://community.wolfram.com//c/portal/getImageAttachment?filename=UNET3D.PNG&amp;amp;userId=1332602&#xD;
  [6]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Loss.PNG&amp;amp;userId=1332602&#xD;
  [7]: https://arxiv.org/abs/1505.04597&#xD;
  [8]: https://arxiv.org/abs/1512.03385&#xD;
  [9]: https://arxiv.org/abs/1608.06993&#xD;
  [10]: https://community.wolfram.com//c/portal/getImageAttachment?filename=convblocks.PNG&amp;amp;userId=1332602&#xD;
  [11]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Split.PNG&amp;amp;userId=1332602&#xD;
  [12]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Train.PNG&amp;amp;userId=1332602&#xD;
  [13]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Visualize1.PNG&amp;amp;userId=1332602&#xD;
  [14]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Visualize2.PNG&amp;amp;userId=1332602&#xD;
  [15]: https://community.wolfram.com//c/portal/getImageAttachment?filename=amin0-v2.gif&amp;amp;userId=1332602&#xD;
  [16]: https://community.wolfram.com//c/portal/getImageAttachment?filename=amin4-v2.gif&amp;amp;userId=1332602&#xD;
  [17]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Muscle_Segmentation.jpg&amp;amp;userId=1332602&#xD;
&#xD;
 [at0]: https://community.wolfram.com/web/alihashmi87</description>
    <dc:creator>Martijn Froeling</dc:creator>
    <dc:date>2019-04-03T20:01:26Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1273720">
    <title>Live code templates</title>
    <link>https://community.wolfram.com/groups/-/m/t/1273720</link>
    <description>## Background&#xD;
&#xD;
I enjoy coding in the FrontEnd (except it crashes and lookup across files does not exist), but I often miss &amp;#039;hands on keyboard&amp;#039;, customizable code templates.&#xD;
&#xD;
E.g. I often forget to wrap an option name with quotes &amp;#034;_&amp;#034; or I&amp;#039;m starting a new function and would like to avoid retyping `Attributes/Options` `Catch/Check` etc. I don&amp;#039;t like palettes for something that I need to do quickly and frequently. The are not &amp;#039;hands on keyboard&amp;#039; either. So I created a little package/stylesheet, should work on Win/MacOs with MMA 10.4+&#xD;
&#xD;
https://github.com/kubaPod/DevTools&#xD;
&#xD;
In case you are interested and/or have any ideas about this / similar features, let me know here or create an Issue in GitHub.&#xD;
&#xD;
Topic cross posted on Mathematica.stackexchange: https://mathematica.stackexchange.com/q/164653/5478&#xD;
&#xD;
&#xD;
&#xD;
[![enter image description here][2]][2]&#xD;
&#xD;
## Index&#xD;
&#xD;
Most up to date examples, setup and other details can be found in [**project&amp;#039;s Readme.MD**](https://github.com/kubaPod/DevTools)&#xD;
&#xD;
- [v0.10.0 (01-12-2018) NotebookActions](https://community.wolfram.com/groups/-/m/t/1273720#lukr_reply)&#xD;
&#xD;
- [v0.8.0 (06-07-2018) VerificationTest template](https://community.wolfram.com/groups/-/m/t/1273720#kxdi_reply)&#xD;
&#xD;
- [v0.7.0 (21-02-2018) support for V10.4](https://community.wolfram.com/groups/-/m/t/1273720#gkow_reply)&#xD;
&#xD;
  [2]: https://i.stack.imgur.com/g96TY.gif</description>
    <dc:creator>Kuba Podkalicki</dc:creator>
    <dc:date>2018-01-28T18:00:23Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/147140">
    <title>Seamlessly call MATLAB from Mathematica</title>
    <link>https://community.wolfram.com/groups/-/m/t/147140</link>
    <description>[b]Disclaimer:[/b] I am one of the MATLink developers.&#xD;
&#xD;
Some of you have already seen it, but for those that haven&amp;#039;t, I would like to present the [url=http://matlink.org/]MATLink package available at matlink.org[/url]:&#xD;
&#xD;
[url=http://matlink.org/][img=width: 250px; height: 145px;]/c/portal/getImageAttachment?filename=logo.png&amp;amp;userId=38370[/img][/url]&#xD;
&#xD;
This package makes it possible to transfer data between Mathematica and MATLAB as well as seamlessly call MATLAB functions from Mathematica.  Some example applications are shown as [url=http://matlink.org/examples/]http://matlink.org/examples/&#xD;
[/url]&#xD;
As of version 1.0, the package can:&#xD;
[list]&#xD;
[*]Transfer data (variables) between the two systems in both directions.  Most MATLAB data structures are supported, including sparse arrays, cells and structs.&#xD;
[*]Wrap MATLAB functions in the MFunction head and call them directly.  Arguments and return values are translated automatically.&#xD;
[*]It works on all three common platforms (Windows, Mac, Linux).&#xD;
[/list]Note that version 1.0 does not make it possible to call Mathematica functions from MATLAB, only the reverse.  It is useful if Mathematica is your primary work environment but you need to use some MATLAB functionality in your Mathematica code.&#xD;
&#xD;
Here&amp;#039;s a transcript of a short MATLink session as a deomonstration:&#xD;
&#xD;
[mcode]&#xD;
In[1]:= &amp;lt;&amp;lt; MATLink`&#xD;
&#xD;
In[2]:= OpenMATLAB[] (* start MATLAB *)&#xD;
&#xD;
In[3]:= mat = RandomReal[1, {5, 5}]; (* create random matrix *)&#xD;
&#xD;
In[4]:= MEvaluate[&amp;#034;help eig&amp;#034;] (* get help on the eig() MATLAB function *)&#xD;
&#xD;
Out[4]= &amp;#034;&amp;gt;&amp;gt; EIG Eigenvalues and eigenvectors.&#xD;
    E = EIG(X) is a vector containing the eigenvalues of a square &#xD;
    matrix X.   &#xD;
    ...&#xD;
&amp;#034;&#xD;
&#xD;
In[5]:= MFunction[&amp;#034;eig&amp;#034;][mat] (* calculate eigenvalues using MATLAB *)&#xD;
Out[5]= {{2.62592 + 0. I}, {-0.0575 + 0.555101 I}, {-0.0575 - 0.555101 I}, {0.558724 + 0. I}, {0.128974 + 0. I}}&#xD;
&#xD;
In[6]:= Sort@Flatten[%] == Sort@Eigenvalues[mat] (* check that the result is the same that Mathematica gives *)&#xD;
Out[6]= True&#xD;
[/mcode]</description>
    <dc:creator>Szabolcs Horvát</dc:creator>
    <dc:date>2013-11-01T17:54:28Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1421180">
    <title>Rubi - The Rule-based Integrator for Mathematica</title>
    <link>https://community.wolfram.com/groups/-/m/t/1421180</link>
    <description>Two months ago, Albert Rich posted [&amp;#034;What&amp;#039;s the hardest integral Mathematica running Rubi can find?&amp;#034;](http://community.wolfram.com/groups/-/m/t/1343015) here on the Wolfram Community.&#xD;
You might have also seen that I responded in detail, and pointed out a few things that could help improve Rubi (Rule-based integrator).&#xD;
While it appears nothing really happened afterward, this is far from reality.&#xD;
Since then, Albert and I have worked closely together to make Rubi more accessible and user-friendly.&#xD;
If you would like to learn how our productive collaboration evolved, let me invite you to read [my latest blog-post](http://halirutan.de/programming/Rubi/).&#xD;
However, here, we want to share an update that should serve as an overview of what we have done to improve Rubi.&#xD;
&#xD;
First of all, Rubi has got a new home under [rulebasedintegration.org](https://rulebasedintegration.org/), and its old website will no longer be updated.&#xD;
On the new website, you will find information, installation instructions, and links to the source-code and test-suites.&#xD;
&#xD;
Secondly, we created a [Rubi Organization](https://github.com/RuleBasedIntegration) on GitHub that serves as the headquarters for all things Rubi.&#xD;
It contains all Rubi&amp;#039;s code, notebooks, and test-suites nicely structured into several repositories.&#xD;
At the moment, we provide repositories for the&#xD;
&#xD;
* loadable package files and notebook source files defining over 6700 integration rules,&#xD;
* PDF files displaying the rules in human-readable mathematical notation alongside the Mathematica code, and&#xD;
* test-suite files containing over 71000 integration problems and their solutions.&#xD;
&#xD;
The integration test files are available in the syntax used by 4 popular computer algebra systems (Mathematica, Maple, Maxima, and Axiom).&#xD;
The test-suite can be used to compare Rubi&amp;#039;s results with other symbolic integrators, including Mathematica&amp;#039;s `Integrate` function.&#xD;
&#xD;
In addition to the transition to GitHub, we recently released version 4.16.0.3 of Rubi which significantly expands the class of expressions the system can integrate.&#xD;
But the most noticeable change for users is the completely reworked display of the rules and intermediate steps Rubi uses to integrate expressions.&#xD;
Although installation, usage, and examples are given on [Rubi&amp;#039;s website](https://rulebasedintegration.org/), let me show you how easy it is to install and run Rubi 4.16.0.3 using Mathematica 11.3:&#xD;
&#xD;
The command&#xD;
&#xD;
    PacletInstall[&amp;#034;https://github.com/RuleBasedIntegration/Rubi/releases/download/4.16.0.3/Rubi-4.16.0.3.paclet&amp;#034;];&#xD;
&#xD;
installs the Rubi-4.16.0.3 paclet on your computer.&#xD;
After that, to load Rubi into Mathematica all you have to do is issue the `Get` command&#xD;
&#xD;
    &amp;lt;&amp;lt; Rubi`&#xD;
&#xD;
Then to integrate an expression with respect to a variable, use Rubi&amp;#039;s `Int` command similar to Mathematica&amp;#039;s `Integrate` command.  For example, evaluating&#xD;
&#xD;
    Int[(Sec[x]^2 + Sec[x]^2*Tan[x])/((2 - Tan[x])*Sqrt[1 + Tan[x]^3]), x]&#xD;
&#xD;
returns the antiderivative (a.k.a. the indefinite integral)&#xD;
&#xD;
![enter image description here][1]&#xD;
&#xD;
Rubi&amp;#039;s unique ability to display the steps it uses to integrate expressions is a great feature of the system.&#xD;
For example, the `Steps` command&#xD;
&#xD;
    Steps@Int[(Sec[x]^2 + Sec[x]^2*Tan[x])/((2 - Tan[x])*Sqrt[1 + Tan[x]^3]), x]&#xD;
&#xD;
displays&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
Here, in red are the rules used to integrate the expression, and in blue are the intermediate results.&#xD;
Each rule can be expanded to show the rule number, which directly corresponds to the index of the rule in `Int`&amp;#039;s list of DownValues.&#xD;
More importantly, you can see the conditions that have to be satisfied so the rule can be applied.&#xD;
&#xD;
![enter image description here][3]&#xD;
&#xD;
Rubi&amp;#039;s `Stats` command provides statistics about the integration. For example,&#xD;
&#xD;
    Stats[Int[(Sec[x]^2 + Sec[x]^2*Tan[x])/((2 - Tan[x])*Sqrt[1 + Tan[x]^3]), x]]&#xD;
&#xD;
displays&#xD;
&#xD;
![enter image description here][4]&#xD;
&#xD;
The leaf-count size of an antiderivative is a crude measure of its complexity.&#xD;
As you can see, Rubi&amp;#039;s antiderivative for this integral has a leaf-count of 25.&#xD;
Now compare Rubi&amp;#039;s antiderivative with that produced by Mathematica 11.3 for the same integral:&#xD;
&#xD;
    Integrate[(Sec[x]^2 + Sec[x]^2*Tan[x])/((2 - Tan[x])*Sqrt[1 + Tan[x]^3]), x]&#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
    LeafCount[%]&#xD;
    (*  290 *)&#xD;
&#xD;
Note that not only is Mathematica&amp;#039;s result more than 11 times the size of Rubi&amp;#039;s, it unnecessarily involves elliptic integral functions *and* the imaginary unit.&#xD;
&#xD;
Skeptics might be inclined to ask if Rubi&amp;#039;s dramatically simpler result is actually a valid antiderivative.&#xD;
Since symbolic differentiation is much easier than integration, antiderivatives can be verified correct by seeing if its derivative equals the original integrand as follows:&#xD;
&#xD;
    expr = (Sec[x]^2 + Sec[x]^2*Tan[x])/((2 - Tan[x])*Sqrt[1 + Tan[x]^3]);&#xD;
    FullSimplify[D[Int[expr, x], x] == expr]&#xD;
    FullSimplify[D[Integrate[expr, x], x] == expr]&#xD;
&#xD;
![enter image description here][6]&#xD;
&#xD;
As you can see Mathematica easily verifies Rubi&amp;#039;s antiderivative correct, but has a hard time verifying its own antiderivative correct...&#xD;
&#xD;
Albert and I are working on publishing the program used to thoroughly test each new version of Rubi before being released.&#xD;
The test program ensures Rubi&amp;#039;s result equals the optimal antiderivative for the over 71000 problems in the test-suite.&#xD;
And yes, the optimal antiderivatives have all been verified correct by differentiation.&#xD;
&#xD;
Of course, the optimal antiderivatives stored in the test-suite are actually just the simplest ones found so far.&#xD;
If you should find a substantially simpler antiderivative than the one in the test-suite, please report it so the test-suite can be made even harder on Rubi!&#xD;
&#xD;
If all that has got you interested in joining Rubi&amp;#039;s community of users, check out its website or talk to us in our [Gitter chatroom](https://gitter.im/Rule-Based-Integration/Lobby).&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=10564sSs5M.png&amp;amp;userId=11733&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=qDtIH.png&amp;amp;userId=11733&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=vQ4GR.png&amp;amp;userId=11733&#xD;
  [4]: https://community.wolfram.com//c/portal/getImageAttachment?filename=43t8e.png&amp;amp;userId=11733&#xD;
  [5]: https://community.wolfram.com//c/portal/getImageAttachment?filename=xjKTJ.png&amp;amp;userId=11733&#xD;
  [6]: https://community.wolfram.com//c/portal/getImageAttachment?filename=eCoWB.png&amp;amp;userId=11733</description>
    <dc:creator>Patrick Scheibe</dc:creator>
    <dc:date>2018-08-24T02:50:37Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/866748">
    <title>Facing your data with Chernoff faces</title>
    <link>https://community.wolfram.com/groups/-/m/t/866748</link>
    <description>## Introduction&#xD;
&#xD;
This post describes the use of face-like diagrams to visualize multidimensional data introduced by Herman Chernoff in 1973, see [1].&#xD;
&#xD;
The idea to use human faces in order to understand, evaluate, or easily discern (the records of) multidimensional data is very creative and inspirational. As Chernoff says in [1], the object of the idea is to &amp;#034;represent multivariate data, subject to strong but possibly complex relationships, in such a way that an investigator can quickly comprehend relevant information and then apply appropriate statistical analysis.&amp;#034; It is an interesting question how useful this approach is and it seems that there at least several articles discussing that; see for example [2].&#xD;
&#xD;
I personally find the use of Chernoff faces useful in a small number of cases, but that is probably true for many &amp;#034;creative&amp;#034; data visualization methods.&#xD;
&#xD;
Below are given both simple and more advanced examples of constructing Chernoff faces for data records using the *Mathematica* package [3]. The considered data is categorized as:&#xD;
&#xD;
1. a small number of records, each with small number of elements;&#xD;
2. a large number of records, each with less elements than Chernoff face parts;&#xD;
3. a list of long records, each record with much more elements than Chernoff face parts;&#xD;
4. a list of nearest neighbors or recommendations.&#xD;
&#xD;
For several of the visualizing scenarios the records of two &amp;#034;real life&amp;#034; data sets are used: Fisher Iris flower dataset [7], and &amp;#034;Vinho Verde&amp;#034; wine quality dataset [8]. For the rest of the scenarios the data is generated.&#xD;
&#xD;
A fundamental restriction of using Chernoff faces is the necessity to properly transform the data variables into the ranges of the Chernoff face diagram parameters. Therefore, proper data transformation (standadizing and rescaling) is an inherent part of the application of Chernoff faces, and this document describes such data transformation procedures (also using [3]).&#xD;
&#xD;
### Package load&#xD;
&#xD;
The packages [3,4] are used to produce the diagrams in this post. The following two commands load them.&#xD;
&#xD;
    Import[&amp;#034;https://raw.githubusercontent.com/antononcube/\&#xD;
    MathematicaForPrediction/master/ChernoffFaces.m&amp;#034;]&#xD;
&#xD;
    Import[&amp;#034;https://raw.githubusercontent.com/antononcube/\&#xD;
    MathematicaForPrediction/master/MathematicaForPredictionUtilities.m&amp;#034;]&#xD;
&#xD;
### Mirror&#xD;
This Community post mirrors the blog post [&amp;#034;Making Chernoff faces for data visualization&amp;#034;](https://mathematicaforprediction.wordpress.com/2016/06/03/making-chernoff-faces-for-data-visualization/).&#xD;
&#xD;
## Making faces&#xD;
&#xD;
### Just a face&#xD;
&#xD;
Here is a face produced by the function `ChernoffFace` of [3] with its simplest signature:&#xD;
&#xD;
    SeedRandom[152092]&#xD;
    ChernoffFace[]&#xD;
&#xD;
[![JustAFace](http://i.imgur.com/PIcrIcKm.gif)](http://i.imgur.com/PIcrIcK.gif)&#xD;
&#xD;
Here is a list of faces:&#xD;
&#xD;
    SeedRandom[152092]&#xD;
    Table[ChernoffFace[ImageSize -&amp;gt; Tiny], {7}]&#xD;
&#xD;
[![ ](http://i.imgur.com/SPWgX0r.gif)](http://i.imgur.com/SPWgX0r.gif)&#xD;
&#xD;
### Proper face making&#xD;
&#xD;
The &amp;#034;proper&amp;#034; way to call ChernoffFace is to use an association for the facial parts placement, size, rotation, and color. The options are passed to Graphics.&#xD;
&#xD;
    SeedRandom[2331];&#xD;
    ChernoffFace[ AssociationThread[&#xD;
        Keys[ChernoffFace[&amp;#034;FacePartsProperties&amp;#034;]] -&amp;gt; &#xD;
       RandomReal[1, Length[ChernoffFace[&amp;#034;FacePartsProperties&amp;#034;]]]],&#xD;
       ImageSize -&amp;gt; Small , Background -&amp;gt; GrayLevel[0.85]]&#xD;
&#xD;
[![ ](http://i.imgur.com/wY3bgKCm.gif)](http://i.imgur.com/wY3bgKC.gif)&#xD;
&#xD;
The Chernoff face drawn with the function `ChernoffFace` can be parameterized to be asymmetric.&#xD;
&#xD;
The parameters argument mixes (1) face parts placement, sizes, and rotation, with (2) face parts colors and (3) a parameter should it be attempted to make the face symmetric. All facial parts parameters have the range [0,1]&#xD;
&#xD;
Here is the facial parameter list:&#xD;
&#xD;
    Keys[ChernoffFace[&amp;#034;FacePartsProperties&amp;#034;]]&#xD;
&#xD;
    (* {&amp;#034;FaceLength&amp;#034;, &amp;#034;ForheadShape&amp;#034;, &amp;#034;EyesVerticalPosition&amp;#034;, &amp;#034;EyeSize&amp;#034;, \&#xD;
		&amp;#034;EyeSlant&amp;#034;, &amp;#034;LeftEyebrowSlant&amp;#034;, &amp;#034;LeftIris&amp;#034;, &amp;#034;NoseLength&amp;#034;, \&#xD;
		&amp;#034;MouthSmile&amp;#034;, &amp;#034;LeftEyebrowTrim&amp;#034;, &amp;#034;LeftEyebrowRaising&amp;#034;, &amp;#034;MouthTwist&amp;#034;, \&#xD;
		&amp;#034;MouthWidth&amp;#034;, &amp;#034;RightEyebrowTrim&amp;#034;, &amp;#034;RightEyebrowRaising&amp;#034;, \&#xD;
		&amp;#034;RightEyebrowSlant&amp;#034;, &amp;#034;RightIris&amp;#034;} *)&#xD;
&#xD;
The order of the parameters is chosen to favor making symmetric faces when a list of random numbers is given as an argument, and to make it easier to discern the faces when multiple records are visualized. For experiments and discussion about which facial features bring better discern-ability see [2]. One of the conclusions of [2] is that eye size and eye brow slant are most decisive, followed by face size and shape.&#xD;
&#xD;
Here are the rest of the parameters (colors and symmetricity):&#xD;
&#xD;
    Complement[Keys[ChernoffFace[&amp;#034;Properties&amp;#034;]], &#xD;
     Keys[ChernoffFace[&amp;#034;FacePartsProperties&amp;#034;]]]&#xD;
&#xD;
    (* {&amp;#034;EyeBallColor&amp;#034;, &amp;#034;FaceColor&amp;#034;, &amp;#034;IrisColor&amp;#034;, &amp;#034;MakeSymmetric&amp;#034;, \&#xD;
		&amp;#034;MouthColor&amp;#034;, &amp;#034;NoseColor&amp;#034;} *)&#xD;
&#xD;
### Face coloring&#xD;
&#xD;
The following code make a row of faces by generating seven sequences of random numbers in $[0,1]$, each sequence with length the number of facial parameters. The face color is assigned randomly and the face color or a darker version of it is used as a nose color. If the nose color is the same as the face color the nose is going to be shown &amp;#034;in profile&amp;#034;, otherwise as a filled polygon. The colors of the irises are random blend between light brown and light blue. The color of the mouth is randomly selected to be black or red.&#xD;
&#xD;
    SeedRandom[201894];&#xD;
    Block[{pars = Keys[ChernoffFace[&amp;#034;FacePartsProperties&amp;#034;]]},&#xD;
     Grid[{#}] &amp;amp;@&#xD;
      Table[ChernoffFace[Join[&#xD;
         AssociationThread[pars -&amp;gt; RandomReal[1, Length[pars]]],&#xD;
         &amp;lt;|&amp;#034;FaceColor&amp;#034; -&amp;gt; (rc = &#xD;
             ColorData[&amp;#034;BeachColors&amp;#034;][RandomReal[1]]),&#xD;
          &amp;#034;NoseColor&amp;#034; -&amp;gt; RandomChoice[{Identity, Darker}][rc],&#xD;
          &amp;#034;IrisColor&amp;#034; -&amp;gt; Lighter[Blend[{Brown, Blue}, RandomReal[1]]],&#xD;
          &amp;#034;MouthColor&amp;#034; -&amp;gt; RandomChoice[{Black, Red}]|&amp;gt;], &#xD;
        ImageSize -&amp;gt; 100], {7}]&#xD;
     ]&#xD;
&#xD;
[![ ](http://i.imgur.com/QN5Rhvfl.png)](http://i.imgur.com/QN5Rhvf.png)&#xD;
&#xD;
### Symmetric faces&#xD;
&#xD;
The parameter &amp;#034;MakeSymmetric&amp;#034; is by default `True`. Setting &amp;#034;MakeSymmetric&amp;#034; to true turns an incomplete face specification into a complete specification with the missing paired parameters filled in. In other words, the symmetricity is not enforced on the specified paired parameters, only on the ones for which specifications are missing.&#xD;
&#xD;
The following faces are made symmetric by removing the facial parts parameters that start with &amp;#034;R&amp;#034; (for &amp;#034;Right&amp;#034;) and the parameter &amp;#034;MouthTwist&amp;#034;. &#xD;
&#xD;
    SeedRandom[201894];&#xD;
    Block[{pars = Keys[ChernoffFace[&amp;#034;FacePartsProperties&amp;#034;]]},&#xD;
     Grid[{#}] &amp;amp;@Table[(&#xD;
        asc = &#xD;
         Join[AssociationThread[&#xD;
           pars -&amp;gt; RandomReal[1, Length[pars]]],&#xD;
          &amp;lt;|&amp;#034;FaceColor&amp;#034; -&amp;gt; (rc = &#xD;
              ColorData[&amp;#034;BeachColors&amp;#034;][RandomReal[1]]),&#xD;
           &amp;#034;NoseColor&amp;#034; -&amp;gt; RandomChoice[{Identity, Darker}][rc],&#xD;
           &amp;#034;IrisColor&amp;#034; -&amp;gt; &#xD;
            Lighter[Blend[{Brown, Blue}, RandomReal[1]]],&#xD;
           &amp;#034;MouthColor&amp;#034; -&amp;gt; RandomChoice[{Black, Red}]|&amp;gt;];&#xD;
        asc = &#xD;
         Pick[asc, &#xD;
          StringMatchQ[Keys[asc], &#xD;
           x : (StartOfString ~~ Except[&amp;#034;R&amp;#034;] ~~ __) /; &#xD;
            x != &amp;#034;MouthTwist&amp;#034;]];&#xD;
        ChernoffFace[asc, ImageSize -&amp;gt; 100]), {7}]]&#xD;
&#xD;
[![ ](http://i.imgur.com/7J7vl12l.png)](http://i.imgur.com/7J7vl12.png)&#xD;
&#xD;
Note that for the irises we have two possibilities of synchronization:&#xD;
&#xD;
    pars = &amp;lt;|&amp;#034;LeftIris&amp;#034; -&amp;gt; 0.8, &amp;#034;IrisColor&amp;#034; -&amp;gt; Green|&amp;gt;;&#xD;
    {ChernoffFace[Join[pars, &amp;lt;|&amp;#034;RightIris&amp;#034; -&amp;gt; pars[&amp;#034;LeftIris&amp;#034;]|&amp;gt;], &#xD;
      ImageSize -&amp;gt; 100], &#xD;
     ChernoffFace[&#xD;
      Join[pars, &amp;lt;|&amp;#034;RightIris&amp;#034; -&amp;gt; 1 - pars[&amp;#034;LeftIris&amp;#034;]|&amp;gt;], &#xD;
      ImageSize -&amp;gt; 100]}&#xD;
&#xD;
[![ ](http://i.imgur.com/8i16NUgl.gif)](http://i.imgur.com/8i16NUg.gif)&#xD;
&#xD;
## Visualizing records (first round)&#xD;
&#xD;
The conceptually straightforward application of Chernoff faces is to visualize (&amp;#034;give a face&amp;#034; to) each record in a dataset. Because the parameters of the faces have the same ranges for the different records, proper rescaling of the records have to be done first. Of course standardizing the data can be done before rescaling.&#xD;
&#xD;
First let us generate some random data using different distributions:&#xD;
&#xD;
    SeedRandom[3424]&#xD;
    {dists, data} = Transpose@Table[(&#xD;
         rdist = &#xD;
          RandomChoice[{NormalDistribution[RandomReal[10], &#xD;
             RandomReal[10]], PoissonDistribution[RandomReal[4]], &#xD;
            GammaDistribution[RandomReal[{2, 6}], 2]}];&#xD;
         {rdist, RandomVariate[rdist, 12]}), {10}];&#xD;
    data = Transpose[data];&#xD;
&#xD;
The data is generated in such a way that each column comes from a certain probability distribution. Hence, each record can be seen as an observation of the variables corresponding to the columns.&#xD;
&#xD;
This is how the **columns** of the generated data look like using `DistributionChart`:&#xD;
&#xD;
    DistributionChart[Transpose[data], &#xD;
     ChartLabels -&amp;gt; &#xD;
      Placed[MapIndexed[&#xD;
        Grid[List /@ {Style[#2[[1]], Bold, Red, Larger]}] &amp;amp;, dists], Above], &#xD;
     ChartElementFunction -&amp;gt; &amp;#034;PointDensity&amp;#034;, &#xD;
     ChartStyle -&amp;gt; &amp;#034;SandyTerrain&amp;#034;, ChartLegends -&amp;gt; dists, &#xD;
     BarOrigin -&amp;gt; Bottom, GridLines -&amp;gt; Automatic, &#xD;
     ImageSize -&amp;gt; 900]&#xD;
&#xD;
[![ ](http://i.imgur.com/iXQfzZGl.gif)](http://i.imgur.com/iXQfzZG.gif)&#xD;
&#xD;
At this point we can make a face for each **record** of the rescaled data:&#xD;
&#xD;
    faces = Map[ChernoffFace, Transpose[Rescale /@ Transpose[data]]];&#xD;
&#xD;
and visualize the obtained faces in a grid.&#xD;
&#xD;
    Row[{Grid[&#xD;
       Partition[#, 4] &amp;amp;@Map[Append[#, ImageSize -&amp;gt; 100] &amp;amp;, faces]],&#xD;
      &amp;#034;   &amp;#034;, Magnify[#, 0.85] &amp;amp;@&#xD;
       GridTableForm[&#xD;
        List /@ Take[Keys[ChernoffFace[&amp;#034;FacePartsProperties&amp;#034;]], &#xD;
          Dimensions[data][[2]]], &#xD;
        TableHeadings -&amp;gt; {&amp;#034;Face part&amp;#034;}]&#xD;
      }]&#xD;
&#xD;
[![ ](http://i.imgur.com/LMTsbCfl.gif)](http://i.imgur.com/LMTsbCf.gif)&#xD;
&#xD;
(The table on the right shows which facial parts are used for which data columns.)&#xD;
&#xD;
## Some questions to consider&#xD;
&#xD;
Several questions and observations arise from the example in the previous section. &#xD;
&#xD;
#### 1. What should we do if the data records have more elements than facial parts parameters of the Chernoff face diagram?&#xD;
&#xD;
This is another fundamental restriction of Chernoff faces -- the number of data columns is limiter by the number of facial features.&#xD;
&#xD;
One way to resolve this is to select important variables (columns) of the data; another is to represent the records with a vector of statistics. The latter is shown in the section &amp;#034;Chernoff faces for lists of long lists&amp;#034;.&#xD;
&#xD;
#### 2. Are there Chernoff face parts that are easier to perceive or judge than others and provide better discern-ability for large collections of records?&#xD;
&#xD;
Research of the [pre-attentiveness](https://en.wikipedia.org/wiki/Pre-attentive_processing) and effectiveness with Chernoff faces, [2], shows that eye size and eyebrow slant are the features that provide best discern-ability. Below this is used to select some of the variable-to-face-part correspondences. &#xD;
&#xD;
#### 3. How should we deal with outliers?&#xD;
&#xD;
Since we cannot just remove the outliers from a record -- we have to have complete records -- we can simply replace the outliers with the minimum or maximum values allowed for the corresponding Chernoff face feature. (All facial features of `ChernoffFace` have the range $[0,1]$.) See the next section for an example.&#xD;
&#xD;
## Data standardizing and rescaling&#xD;
&#xD;
Given a full array of records, we most likely have to standardize and rescale the columns in order to use the function `ChernoffFace`. To help with that the package [3] provides the function `VariablesRescale` which has the options &amp;#034;StandardizingFunction&amp;#034; and &amp;#034;RescaleRangeFunction&amp;#034;.&#xD;
&#xD;
Consider the following example of `VariableRescale` invocation in which:&#xD;
1. each column is centered around its median and then divided by the inter-quartile half-distance (quartile deviation),&#xD;
2. followed by clipping of the outliers that are outside of the disk with radius 3 times the quartile deviation, and&#xD;
3. rescaling to the unit interval.&#xD;
&#xD;
    rdata = VariablesRescale[N@data,&#xD;
       &amp;#034;StandardizingFunction&amp;#034; -&amp;gt; (Standardize[#, Median, QuartileDeviation] &amp;amp;),&#xD;
       &amp;#034;RescaleRangeFunction&amp;#034; -&amp;gt; ({-3, 3} QuartileDeviation[#] &amp;amp;)];&#xD;
    TableForm[rdata /. {0 -&amp;gt; Style[0, Bold, Red], 1 -&amp;gt; Style[1, Bold, Red]}]&#xD;
&#xD;
[![ ](http://i.imgur.com/LdhvQJMl.png)](http://i.imgur.com/LdhvQJM.png)&#xD;
&#xD;
**Remark:** The bottom outliers are replaced with 0 and the top outliers with 1 using `Clip`.&#xD;
&#xD;
## Chernoff faces for a small number of short records&#xD;
&#xD;
In this section we are going use the Fisher Iris flower data set [7]. By &amp;#034;small number of records&amp;#034; we mean few hundred or less.&#xD;
&#xD;
### Getting the data&#xD;
&#xD;
These commands get the Fisher Iris flower data set shipped with *Mathematica*:&#xD;
&#xD;
    irisDataSet = &#xD;
      Map[Flatten, &#xD;
       List @@@ ExampleData[{&amp;#034;MachineLearning&amp;#034;, &amp;#034;FisherIris&amp;#034;}, &amp;#034;Data&amp;#034;]];&#xD;
    irisColumnNames = &#xD;
      Most@Flatten[&#xD;
        List @@ ExampleData[{&amp;#034;MachineLearning&amp;#034;, &amp;#034;FisherIris&amp;#034;}, &#xD;
          &amp;#034;VariableDescriptions&amp;#034;]];&#xD;
    Dimensions[irisDataSet]&#xD;
&#xD;
    (* {150, 5} *)&#xD;
&#xD;
Here is a summary of the data:&#xD;
&#xD;
    Grid[{RecordsSummary[irisDataSet, irisColumnNames]}, &#xD;
     Dividers -&amp;gt; All, Alignment -&amp;gt; Top]&#xD;
&#xD;
[![ ](http://i.imgur.com/upxeRHvl.png)](http://i.imgur.com/upxeRHv.png)&#xD;
&#xD;
### Simple variable dependency analysis&#xD;
&#xD;
Using the function `VariableDependenceGrid` of the package [4] we can plot a grid of variable cross-dependencies. We can see from the last row and column that &amp;#034;Petal length&amp;#034; and &amp;#034;Petal width&amp;#034; separate setosa from versicolor and virginica with a pretty large gap.&#xD;
&#xD;
    Magnify[#, 1] &amp;amp;@&#xD;
     VariableDependenceGrid[irisDataSet, irisColumnNames, &#xD;
      &amp;#034;IgnoreCategoricalVariables&amp;#034; -&amp;gt; False]&#xD;
&#xD;
[![ ](http://i.imgur.com/vJA6kthl.png)](http://i.imgur.com/vJA6kth.png)&#xD;
&#xD;
### Chernoff faces for Iris flower records&#xD;
&#xD;
Since we want to evaluate the usefulness of Chernoff faces for discerning data records groups or clusters, we are going to do the following steps.&#xD;
&#xD;
1. Data transformation. This includes standardizing and rescaling and selection of colors.&#xD;
2. Make a Chernoff face for each record **without** the label class &amp;#034;Species of iris&amp;#034;.&#xD;
3. Plot shuffled Chernoff faces and attempt to visually cluster them or find patterns.&#xD;
4. Make a Chernoff face for each record using the label class &amp;#034;Specie of iris&amp;#034; to color the faces. (Records of the same class get faces of the same color.)&#xD;
5. Compare the plots and conclusions of step 2 and 4.&#xD;
&#xD;
#### 1. Data transformation&#xD;
&#xD;
First we standardize and rescale the data:&#xD;
&#xD;
    chernoffData = VariablesRescale[irisDataSet[[All, 1 ;; 4]]];&#xD;
&#xD;
These are the colors used for the different species of iris:&#xD;
&#xD;
    faceColorRules = &#xD;
     Thread[Union[ irisDataSet[[All, -1]]] \&#xD;
     -&amp;gt; Map[Lighter[#, 0.5] &amp;amp;, {Purple, Blue, Green}]]&#xD;
&#xD;
    (* {&amp;#034;setosa&amp;#034; -&amp;gt; RGBColor[0.75, 0.5, 0.75], &#xD;
        &amp;#034;versicolor&amp;#034; -&amp;gt; RGBColor[0.5, 0.5, 1.], &#xD;
        &amp;#034;virginica&amp;#034; -&amp;gt; RGBColor[0.5, 1., 0.5]} *)&#xD;
&#xD;
Add the colors to the data for the faces:&#xD;
&#xD;
    chernoffData = MapThread[&#xD;
       Append, {chernoffData, irisDataSet[[All, -1]] /. faceColorRules}];&#xD;
&#xD;
Plot the distributions of the rescaled variables:&#xD;
&#xD;
    DistributionChart[&#xD;
     Transpose@chernoffData[[All, 1 ;; 4]], &#xD;
     GridLines -&amp;gt; Automatic, &#xD;
     ChartElementFunction -&amp;gt; &amp;#034;PointDensity&amp;#034;, &#xD;
     ChartStyle -&amp;gt; &amp;#034;SandyTerrain&amp;#034;, &#xD;
     ChartLegends -&amp;gt; irisColumnNames, ImageSize -&amp;gt; Large]&#xD;
&#xD;
[![ ](http://i.imgur.com/rwm71tnm.gif)](http://i.imgur.com/rwm71tn.gif)&#xD;
&#xD;
#### 2. Black-and-white Chernoff faces&#xD;
&#xD;
Make a black-and-white Chernoff face for each record without using the species class:&#xD;
&#xD;
    chfacesBW = &#xD;
      ChernoffFace[&#xD;
         AssociationThread[{&amp;#034;NoseLength&amp;#034;, &amp;#034;LeftEyebrowTrim&amp;#034;, &amp;#034;EyeSize&amp;#034;, &#xD;
            &amp;#034;LeftEyebrowSlant&amp;#034;} -&amp;gt; Most[#]], &#xD;
         ImageSize -&amp;gt; 100] &amp;amp; /@ chernoffData;&#xD;
&#xD;
Since &amp;#034;Petal length&amp;#034; and &amp;#034;Petal width&amp;#034; separate the classes well for those columns we have selected the parameters &amp;#034;EyeSize&amp;#034; and &amp;#034;LeftEyebrowSlant&amp;#034; based on [2].&#xD;
&#xD;
#### 3. Finding patterns in a collection of faces&#xD;
&#xD;
Combine the faces into a image collage:&#xD;
&#xD;
    ImageCollage[RandomSample[chfacesBW], Background -&amp;gt; White]&#xD;
&#xD;
[![ ](http://i.imgur.com/zmBSQZRl.gif)](http://i.imgur.com/zmBSQZR.gif)&#xD;
&#xD;
We can see that faces with small eyes tend have middle-lowered eyebrows, and that faces with large eyes tend to have middle raised eyebrows and large noses.&#xD;
&#xD;
#### 4. Chernoff faces colored by the species&#xD;
&#xD;
Make a Chernoff face for each record using the colors added to the rescaled data:&#xD;
&#xD;
    chfaces = &#xD;
      ChernoffFace[&#xD;
         AssociationThread[{&amp;#034;NoseLength&amp;#034;, &amp;#034;LeftEyebrowTrim&amp;#034;, &amp;#034;EyeSize&amp;#034;, &#xD;
            &amp;#034;LeftEyebrowSlant&amp;#034;, &amp;#034;FaceColor&amp;#034;} -&amp;gt; #], &#xD;
         ImageSize -&amp;gt; 100] &amp;amp; /@ chernoffData;&#xD;
&#xD;
Make an image collage with the obtained faces:&#xD;
&#xD;
    ImageCollage[chfaces, Background -&amp;gt; White]&#xD;
&#xD;
[![ ](http://i.imgur.com/uPBZJufl.gif)](http://i.imgur.com/uPBZJuf.gif)&#xD;
&#xD;
#### 5. Comparison&#xD;
&#xD;
We can see that the collage with colored faces completely explains the patterns found in the black-and-white faces: setosa have smaller petals (both length and width), and virginica have larger petals.&#xD;
&#xD;
## Browsing a large number of records with Chernoff faces&#xD;
&#xD;
If we have a large number of records each comprised of a relative small number of numerical values we can use Chernoff faces to browse the data by taking small subsets of records.&#xD;
&#xD;
Here is an example using &amp;#034;Vinho Verde&amp;#034; wine quality dataset [8].&#xD;
&#xD;
[![ ](http://i.imgur.com/jDwXgfTl.png)](http://i.imgur.com/jDwXgfT.png)&#xD;
&#xD;
[![ ](http://i.imgur.com/ZOqwuFTl.png)](http://i.imgur.com/ZOqwuFT.png)&#xD;
&#xD;
## Chernoff faces for lists of long lists&#xD;
&#xD;
In this section we consider data that is a list of lists. Each of the lists (or rows) is fairly long and represents values of the same variable or process. If the data is a full array, then we can say that in this section we deal with transposed versions of the data in the previous sections.&#xD;
&#xD;
Since each row is a list of many elements visualizing the rows directly with Chernoff faces would mean using a small fraction of the data. A natural approach in those situations is to summarize each row with a set of descriptive statistics and use Chernoff faces for the row summaries. &#xD;
&#xD;
The process is fairly straightforward; the rest of the section gives concrete code steps of executing it.&#xD;
&#xD;
### Data generation&#xD;
&#xD;
Here we create 12 rows of 200 elements by selecting a probability distribution for each row.&#xD;
&#xD;
    SeedRandom[1425]&#xD;
    {dists, data} = Transpose@Table[(&#xD;
         rdist = &#xD;
          RandomChoice[{NormalDistribution[RandomReal[10], &#xD;
             RandomReal[10]], PoissonDistribution[RandomReal[4]], &#xD;
            GammaDistribution[RandomReal[{2, 6}], 2]}];&#xD;
         {rdist, RandomVariate[rdist, 200]}), {12}];&#xD;
    Dimensions[data]&#xD;
&#xD;
    (* {12, 200} *)&#xD;
&#xD;
We have the following 12 &amp;#034;records&amp;#034; each with 200 &amp;#034;fields&amp;#034;:&#xD;
&#xD;
    DistributionChart[data, &#xD;
     ChartLabels -&amp;gt; &#xD;
      MapIndexed[&#xD;
       Row[{Style[#2[[1]], Red, Larger],&#xD;
	        &amp;#034;  &amp;#034;, Style[#1, Larger]}] &amp;amp;, dists], &#xD;
     ChartElementFunction -&amp;gt; &#xD;
      ChartElementData[&amp;#034;PointDensity&amp;#034;, &#xD;
       &amp;#034;ColorScheme&amp;#034; -&amp;gt; &amp;#034;SouthwestColors&amp;#034;], BarOrigin -&amp;gt; Left, &#xD;
     GridLines -&amp;gt; Automatic, ImageSize -&amp;gt; 1000]&#xD;
&#xD;
[![ ](http://i.imgur.com/HJWZo6Tl.gif)](http://i.imgur.com/HJWZo6T.gif)&#xD;
&#xD;
Here is the summary of the records:&#xD;
&#xD;
    Grid[ArrayReshape[RecordsSummary[Transpose@N@data], {3, 4}], &#xD;
     Dividers -&amp;gt; All, Alignment -&amp;gt; {Left}]&#xD;
&#xD;
[![ ](http://i.imgur.com/HmIUX0dl.png)](http://i.imgur.com/HmIUX0d.png)&#xD;
&#xD;
### Data transformation&#xD;
&#xD;
Here we &amp;#034;transform&amp;#034; each row into a vector of descriptive statistics:&#xD;
&#xD;
    statFuncs = {Mean, StandardDeviation, Kurtosis, Median, &#xD;
       QuartileDeviation, PearsonChiSquareTest};&#xD;
    sdata = Map[Through[statFuncs[#]] &amp;amp;, data];&#xD;
    Dimensions[sdata]&#xD;
&#xD;
    (* {12, 6} *)&#xD;
&#xD;
&#xD;
Next we rescale the descriptive statistics data:&#xD;
&#xD;
    sdata = VariablesRescale[sdata, &#xD;
       &amp;#034;StandardizingFunction&amp;#034; -&amp;gt; (Standardize[#, Median, QuartileDeviation] &amp;amp;)];&#xD;
&#xD;
For kurtosis we have to do special rescaling if we want to utilize the property that Gaussian processes have kurtosis 3:&#xD;
&#xD;
    sdata[[All, 3]] = &#xD;
      Rescale[#, {3, Max[#]}, {0.5, 1}] &amp;amp;@Map[Kurtosis, N[data]];&#xD;
&#xD;
Here is the summary of the columns of the rescaled descriptive statistics array:&#xD;
&#xD;
    Grid[{RecordsSummary[sdata, ToString /@ statFuncs]}, Dividers -&amp;gt; All]&#xD;
&#xD;
[![ ](http://i.imgur.com/SHbLThql.png)](http://i.imgur.com/SHbLThq.png)&#xD;
&#xD;
### Visualization&#xD;
&#xD;
First we define a function that computes and tabulates (descriptive) statistics over a record.&#xD;
&#xD;
    Clear[TipTable]&#xD;
    TipTable[vec_, statFuncs_, faceParts_] :=&#xD;
      Block[{},&#xD;
        GridTableForm[&#xD;
         Transpose@{faceParts, statFuncs, &#xD;
           NumberForm[Chop[#], 2] &amp;amp; /@ Through[statFuncs[vec]]}, &#xD;
         TableHeadings -&amp;gt; {&amp;#034;FacePart&amp;#034;, &amp;#034;Statistic&amp;#034;, &amp;#034;Value&amp;#034;}]] /; &#xD;
       Length[statFuncs] == Length[faceParts];&#xD;
&#xD;
To visualize the descriptive statistics of the records using Chernoff faces we have to select appropriate facial features.&#xD;
&#xD;
    faceParts = {&amp;#034;NoseLength&amp;#034;, &amp;#034;EyeSize&amp;#034;, &amp;#034;EyeSlant&amp;#034;, &#xD;
       &amp;#034;EyesVerticalPosition&amp;#034;, &amp;#034;FaceLength&amp;#034;, &amp;#034;MouthSmile&amp;#034;};&#xD;
    TipTable[First@sdata, statFuncs, faceParts]&#xD;
&#xD;
[![ ](http://i.imgur.com/bEOFgXHl.png)](http://i.imgur.com/bEOFgXH.png)&#xD;
&#xD;
One possible visualization of all records is with the following commands. Note the addition of the parameter &amp;#034;FaceColor&amp;#034; to also represent how close a standardized row is to a sample from Normal Distribution.&#xD;
&#xD;
    {odFaceColor, ndFaceColor} = {White,  ColorData[7, &amp;#034;ColorList&amp;#034;][[8]]};&#xD;
    Grid[ArrayReshape[Flatten@#, {4, 3}, &amp;#034;&amp;#034;], Dividers -&amp;gt; All, &#xD;
       Alignment -&amp;gt; {Left, Top}] &amp;amp;@&#xD;
     MapThread[&#xD;
      (asc = AssociationThread[faceParts -&amp;gt; #2];&#xD;
        chFace = &#xD;
         ChernoffFace[&#xD;
          Join[asc, &amp;lt;|&#xD;
            &amp;#034;FaceColor&amp;#034; -&amp;gt; Blend[{odFaceColor, ndFaceColor}, #2[[-1]]], &#xD;
            &amp;#034;IrisColor&amp;#034; -&amp;gt; GrayLevel[0.8], &#xD;
            &amp;#034;NoseColor&amp;#034; -&amp;gt; ndFaceColor|&amp;gt;], ImageSize -&amp;gt; 120, &#xD;
          AspectRatio -&amp;gt; Automatic];&#xD;
        tt = TipTable[N@#3, Join[statFuncs, {Last@statFuncs}], &#xD;
          Join[faceParts, {&amp;#034;FaceColor&amp;#034;}]];&#xD;
        Column[{Style[#1, Red], &#xD;
          Grid[{{Magnify[#4, 0.8], &#xD;
             Tooltip[chFace, tt]}, {Magnify[tt, 0.7], SpanFromAbove}}, &#xD;
           Alignment -&amp;gt; {Left, Top}]}]) &amp;amp;&#xD;
      , {Range[Length[sdata]], sdata, data, dists}]&#xD;
&#xD;
[![ ](http://i.imgur.com/CGVbZck.png)](http://i.imgur.com/CGVbZck.png)&#xD;
&#xD;
## Visualizing similarity with nearest neighbors or recommendations &#xD;
&#xD;
### General idea&#xD;
&#xD;
Assume the following scenario: &#xD;
1. we have a set of items (movies, flowers, etc.), &#xD;
2. we have picked one item,&#xD;
3. we have computed the Nearest Neighbors (NNs) of that item, and&#xD;
4. we want to visualize how much of a good fit the NNs are to the picked item.&#xD;
&#xD;
Conceptually we can translate the phrase &amp;#034;how good the found NNs (or&#xD;
recommendations) are&amp;#034; to:&#xD;
&#xD;
* &amp;#034;how similar the NNs are to the selected item&amp;#034;, or&#xD;
&#xD;
* &amp;#034;how different the NNs are to the selected item.&amp;#034;&#xD;
&#xD;
If we consider the picked item as the prototype of the most normal or central item then we can use Chernoff faces to visualize item&amp;#039;s NNs deviations. &#xD;
&#xD;
**Remark:** Note that Chernoff faces provide similarity visualization most linked to Euclidean distance that to other distances.&#xD;
&#xD;
### Concrete example&#xD;
&#xD;
The code in this section demonstrates how to visualize nearest neighbors by Chernoff faces variations.&#xD;
&#xD;
First we create a nearest neighbors finding function over the Fisher Iris data set (without the species class label):&#xD;
&#xD;
    irisNNFunc = &#xD;
     Nearest[irisDataSet[[All, 1 ;; -2]] -&amp;gt; Automatic, &#xD;
      DistanceFunction -&amp;gt; EuclideanDistance]&#xD;
&#xD;
Here are nearest neighbors of some random row from the data.&#xD;
&#xD;
    itemInd = 67;&#xD;
    nnInds = irisNNFunc[irisDataSet[[itemInd, 1 ;; -2]], 20];&#xD;
&#xD;
We can visualize the distances with of the obtained NNs with the prototype:&#xD;
&#xD;
    ListPlot[Map[&#xD;
      EuclideanDistance[#, irisDataSet[[itemInd, 1 ;; -2]]] &amp;amp;, &#xD;
      irisDataSet[[nnInds, 1 ;; -2]]]]&#xD;
&#xD;
[![ ](http://i.imgur.com/dnUlWSDm.gif)](http://i.imgur.com/dnUlWSD.gif)&#xD;
&#xD;
Next we subtract the prototype row from the NNs data rows, we&#xD;
standardize, and we rescale the interval $[ 0, 3 \sigma ]$ to $[ 0.5, 1 ]$:&#xD;
&#xD;
    snns = Transpose@Map[&#xD;
        Clip[Rescale[&#xD;
           Standardize[#, 0 &amp;amp;, StandardDeviation], {0, 3}, {0.5, 1}], {0, &#xD;
           1}] &amp;amp;,&#xD;
        Transpose@&#xD;
         Map[# - irisDataSet[[itemInd, 1 ;; -2]] &amp;amp;, &#xD;
          irisDataSet[[nnInds, 1 ;; -2]]]];&#xD;
&#xD;
Here is how the original NNs data row look like:&#xD;
&#xD;
    GridTableForm[&#xD;
     Take[irisDataSet[[nnInds]], 12], TableHeadings -&amp;gt; irisColumnNames]&#xD;
&#xD;
[![ ](http://i.imgur.com/7r6habkl.png)](http://i.imgur.com/7r6habk.png)&#xD;
&#xD;
And here is how the rescaled NNs data rows look like:&#xD;
&#xD;
    GridTableForm[Take[snns, 12], &#xD;
     TableHeadings -&amp;gt; Most[irisColumnNames]]&#xD;
&#xD;
[![ ](http://i.imgur.com/P7xnwR5l.png)](http://i.imgur.com/P7xnwR5.png)&#xD;
&#xD;
Next we make Chernoff faces for the rescaled rows and present them in a easier to grasp way. &#xD;
&#xD;
We use the face parts:&#xD;
&#xD;
    Take[Keys[ChernoffFace[&amp;#034;FacePartsProperties&amp;#034;]], 4]&#xD;
&#xD;
    (* {&amp;#034;FaceLength&amp;#034;, &amp;#034;ForheadShape&amp;#034;, &amp;#034;EyesVerticalPosition&amp;#034;, &amp;#034;EyeSize&amp;#034;} *)&#xD;
&#xD;
To make the face comparison easier, the first face is the one of the prototype, each Chernoff face is drawn within the same rectangular frame, and the NNs indices are added on top of the faces.&#xD;
&#xD;
    chfaces = &#xD;
      ChernoffFace[#, Frame -&amp;gt; True, &#xD;
         PlotRange -&amp;gt; {{-1, 1}, {-2, 1.5}}, FrameTicks -&amp;gt; False, &#xD;
         ImageSize -&amp;gt; 100] &amp;amp; /@ snns;&#xD;
    chfaces = &#xD;
      MapThread[&#xD;
       ReplacePart[#1, &#xD;
         1 -&amp;gt; &#xD;
          Append[#1[[1]], &#xD;
           Text[Style[#2, Bold, Red], {0, 1.4}]]] &amp;amp;, {chfaces, nnInds}];&#xD;
    ImageCollage[chfaces, Background -&amp;gt; GrayLevel[0.95]]&#xD;
&#xD;
[![ ](http://i.imgur.com/EKpJ7mjm.gif)](http://i.imgur.com/EKpJ7mj.gif)&#xD;
&#xD;
We can see that the first few - i.e. closest -- NNs have fairly normal looking faces.&#xD;
&#xD;
Note that using a large number of NNs would change the rescaled values and in that way the first NNs would appear more similar.&#xD;
&#xD;
## References&#xD;
&#xD;
\[1\] Herman Chernoff (1973). &amp;#034;The Use of Faces to Represent Points in K-Dimensional Space Graphically&amp;#034; (PDF). Journal of the American Statistical Association (American Statistical Association) 68 (342): 361-368. doi:10.2307/2284077. JSTOR 2284077. URL: [http://lya.fciencias.unam.mx/rfuentes/faces-chernoff.pdf](http://lya.fciencias.unam.mx/rfuentes/faces-chernoff.pdf) .&#xD;
&#xD;
\[2\] Christopher J. Morris; David S. Ebert; Penny L. Rheingans, &amp;#034;Experimental analysis of the effectiveness of features in Chernoff faces&amp;#034;, Proc. SPIE 3905, 28th AIPR Workshop: 3D Visualization for Data Exploration and Decision Making, (5 May 2000); doi: 10.1117/12.384865. URL: [http://www.research.ibm.com/people/c/cjmorris/publications/Chernoff_990402.pdf](http://www.research.ibm.com/people/c/cjmorris/publications/Chernoff_990402.pdf) .&#xD;
&#xD;
\[3\] Anton Antonov, [Chernoff Faces implementation in Mathematica](https://github.com/antononcube/MathematicaForPrediction/blob/master/ChernoffFaces.m), (2016), source code at [MathematicaForPrediction at GitHub](https://github.com/antononcube/MathematicaForPrediction), package [ChernofFacess.m](https://raw.githubusercontent.com/antononcube/MathematicaForPrediction/master/ChernoffFaces.m) .&#xD;
&#xD;
\[4\] Anton Antonov, [MathematicaForPrediction utilities](https://github.com/antononcube/MathematicaForPrediction/blob/master/MathematicaForPredictionUtilities.m), (2014), source code [MathematicaForPrediction at GitHub](https://github.com/antononcube/MathematicaForPrediction), package [MathematicaForPredictionUtilities.m](https://raw.githubusercontent.com/antononcube/MathematicaForPrediction/master/MathematicaForPredictionUtilities.m).&#xD;
&#xD;
\[5\] Anton Antonov, [Variable importance determination by classifiers implementation in Mathematica](https://github.com/antononcube/MathematicaForPrediction/blob/master/VariableImportanceByClassifiers.m)[, ](https://github.com/antononcube/MathematicaForPrediction/blob/master/IndependentComponentAnalysis.m)(2015), source code at [MathematicaForPrediction at GitHub](https://github.com/antononcube/MathematicaForPrediction), package [VariableImportanceByClassifiers.m](https://raw.githubusercontent.com/antononcube/MathematicaForPrediction/master/VariableImportanceByClassifiers.m).&#xD;
&#xD;
\[6\] Anton Antonov, [&amp;#034;Importance of variables investigation guide&amp;#034;](https://github.com/antononcube/MathematicaForPrediction/blob/master/Documentation/Importance-of-variables-investigation-guide.pdf), (2016),  [MathematicaForPrediction at GitHub](https://github.com/antononcube/MathematicaForPrediction), [https://github.com/antononcube/MathematicaForPrediction](https://github.com/antononcube/MathematicaForPrediction), folder [Documentation](https://github.com/antononcube/MathematicaForPrediction/tree/master/Documentation).&#xD;
&#xD;
\[7\] Wikipedia entry, Iris flower data set, [https://en.wikipedia.org/wiki/Iris_flower_data _set](https://en.wikipedia.org/wiki/Iris_flower_data_set) .&#xD;
&#xD;
\[8\] P. Cortez, A. Cerdeira, F. Almeida, T. Matos and J. Reis. Modeling wine preferences by data mining from physicochemical properties. In Decision Support Systems, Elsevier, 47(4):547-553, 2009. URL [https://archive.ics.uci.edu/ml/datasets/Wine+Quality](https://archive.ics.uci.edu/ml/datasets/Wine+Quality) .</description>
    <dc:creator>Anton Antonov</dc:creator>
    <dc:date>2016-06-03T02:17:45Z</dc:date>
  </item>
</rdf:RDF>

