<div><br class="Apple-interchange-newline">Thanks for all the feedback!  Comments inline.</div><div><br></div><br><div class="gmail_quote">On Sat, Mar 23, 2013 at 11:36 AM, Greg Wilson <span dir="ltr">&lt;<a href="mailto:gvwilson@third-bit.com" target="_blank">gvwilson@third-bit.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi everyone,<br>
<br>
I know it&#39;s bad form to introduce myself to a list with a post of this<br>
length, but I just spent a few minutes converting a small part of the<br>
Software Carpentry instructors&#39; guide [1] to an IPython Notebook [2].<br>
Here are a few notes; Paul Ivanov has already opened a ticket [3]<br>
about the linking issue, but I&#39;d be really grateful for your comments<br>
on the rest of it as well: I&#39;m still a notebook newbie, so I&#39;m almost<br>
certainly either doing things the wrong way, or missing things that<br>
are already there.<br></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Thanks,<br>
Greg Wilson<br>
Mozilla Foundation / Software Carpentry<br>
<br>
* I want to put each logical thought in its own cell [4].  This<br>
   usually translates into &quot;one cell per paragraph, one paragraph per<br>
   cell&quot;, but not always: as you can see, I often want a small block of<br>
   code in the middle of a thought.  In HTML and LaTeX, I signal this<br>
   by marking the second (or subsequent) part of the thought with:<br>
<br>
    &lt;p class=&quot;continue&quot;&gt;<br>
<br>
    or:<br>
<br>
    \noindent<br>
<br>
   From what I understand, nested cells will do what I want here; any<br>
   idea when they&#39;re likely to land in production?<br></blockquote><div><br></div><div>We have no plans for nested cells per se.  Our current plan for expressing document hierarchy is strictly with header cells, and operating on the groupings implied by these headers - outline view, tabbed view, reordering / hiding whole sections at a time, etc.  One case this really doesn&#39;t serve is the code cell inside a paragraph case.  We&#39;ll have to think about this one.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
* I want to include diagrams done as SVG images in my notebook [5],<br>
   but putting:<br>
<br>
   &lt;img src=&quot;setdict-simple-set.svg&quot; /&gt;<br>
<br>
   inside a Markdown cell doesn&#39;t work.  After reading<br>
<a href="http://lists.ipython.scipy.org/pipermail/ipython-user/2012-July/010542.html" target="_blank">http://lists.ipython.scipy.org/pipermail/ipython-user/2012-July/010542.html</a>,<br>
   I tried:<br>
<br>
    from IPython.display import SVG<br>
    SVG(filename=&#39;setdict-simple-set.svg&#39;)<br>
<br>
   but it didn&#39;t work either. Matt Davis pointed me at:<br>
<br>
   ![A Simple Set](files/setdict-simple-set.svg)<br></blockquote><div><br></div><div>I&#39;m a bit confused by this - your notebook currently has SVG(filename=&#39;setdict-simple-set.svg&#39;),</div><div>and seems to be working properly. Is it not?</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
   which does.  Longer-term, though, I want to have cells of type<br>
   &#39;SVG&#39;, and be able to edit my diagrams in-browser using something<br>
   like svg-edit.  Fernando and Brian tell me it&#39;s not going to make<br>
   sense to start work on that &#39;til mid- to late summer, so for now<br>
   I&#39;ll use LibreOffice to draw an SVG and then link to an exported<br>
   image.</blockquote><div><br></div><div>You can have SVG inlined in a markdown cell already, but an SVG-edit widget would still be useful.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<br>
* Part-way through building the notebook, I decided I wanted to<br>
   reorder a couple of things, but just moving the cells around didn&#39;t<br>
   have the desired effect, because the things in question had side<br>
   effects [5].  Is there a way to say, &quot;Re-set the In[*] counter to 1<br>
   and re-run all cells in the current order&quot;?  (I know I can restart<br>
   the kernel and run all, but I don&#39;t feel I should have to quit the<br>
   editor to renumber things.)  The closest I could get without a<br>
   restart was to select the first cell and re-run it and all<br>
   subsequent cells manually; that put everything in the right order,<br>
   but of course now the numbering starts with &#39;20&#39; instead of &#39;1&#39;.<br></blockquote><div><br></div><div>Prompt numbers are strictly and deliberately side effects of running cells.</div><div>If you want to reset without restarting, you can call `%reset` before doing &#39;run all&#39;.</div>

<div>I do not think that we are going to provide a mechanism for making any direct change to prompt numbers (other than clearing them).</div><div><br></div><div>What do you mean by &#39;quit the editor&#39;? Are you doing this outside the notebook?</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
* What&#39;s the right way to link from one notebook to another?  A<br>
   Markdown URL of the form:<br>
<br>
   [displayed text](otherfile.ipynb)<br>
<br>
   doesn&#39;t work, even when otherfile.ipynb is in the same directory.<br>
   Reading the discussion around [3] regarding hash URLs, redirection,<br>
   etc., it looks like this may already have been solved...<br>
<br>
   ...but how do I link to an anchor in a particular notebook file?<br></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">   For example, up near the top of the notebook, you&#39;ll see the words<br>


   &quot;design pattern&quot; formatted as a link.  Right now, the URL in thatl<br>
   link is &quot;glossary.ipynb#design-pattern&quot;, i.e., the glossary&#39;s<br>
   definition of the term.  I _could_ use a plain old HTML file for the<br>
   glossary (since it isn&#39;t likely to have any live content), but I&#39;m<br>
   definitely going to want cross-reference links from one section of a<br>
   real notebook to a particular section of another.<br></blockquote><div><br></div><div><div><br class="Apple-interchange-newline">In theory, a regular anchor url should work (we don&#39;t generate anchors, but we should for things like header cells, at least) but it doesn&#39;t seem to.  I haven&#39;t investigated thoroughly, but my guess is that it&#39;s because the elements in the page don&#39;t actually exist when the anchor url is resolved, as the notebook document is loaded asynchronously.</div>

<div>I bet we can figure this one out, though.</div><div><br></div><div>in-page anchors should actually work already (barring the fact that IPython doesn&#39;t add any itself yet, but your own anchors should work).</div>
</div>
<div><br></div><div>So things to add here:</div><div><br></div><div>1. when we render heading cells, give them the attr name=heading</div><div>2. investigate scrolling to anchor in url on the &#39;notebook loaded&#39; event</div>

<div><br></div><div>actually, I did it before I finished this email: <a href="https://github.com/ipython/ipython/pull/3064">https://github.com/ipython/ipython/pull/3064</a></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<br>
* I want subscripts (low priority) and tables (high priority) in my<br>
   Markdown.  Karthik, Erik, and Paul tell me I have to use HTML tags<br>
   for this, which is OK I guess, but from both an editing and a<br>
   teaching point of view, it would be _really_ nice if the notebook&#39;s<br>
   Markdown was identical to GitHub&#39;s.  On Twitter, Matthias pointed<br>
   out that doing this would be more complex than it first appears,<br>
   since things like the Emacs mode would have to be updated as well.<br></blockquote><div><br></div><div>We are extremely reticent to extend the markdown syntax,</div><div>because maintaining such a thing is well outside our core competency.</div>

<div>We have already found this to be troublesome with our one extension so far - including mathjax.</div><div>*However*, tables are a part of GitHub0-flavored markdown,</div><div>which all of us use every day.</div><div>

So perhaps we can get away with finding a javascript implementation of GHM,</div><div>in which case you would get tables <a href="https://help.github.com/articles/github-flavored-markdown">as described here</a>.</div><div>

 </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
* Cell 37 contains:<br>
<br>
      import sys<br>
<br>
      filename = sys.argv[1]<br>
      source = open(filename, &#39;r&#39;)<br>
      atoms = set()<br>
      for line in source:<br>
          name = line.strip()<br>
          atoms.add(name)<br>
      print atoms<br>
<br>
   I want this pretty-printed as Python, but do _not_ want the notebook<br>
   to try to execute it, because I&#39;m not launching it from the command<br>
   line.  Can I do that?  And similarly, if I want to format cells to<br>
   look like shell commands and their output (and then populate them<br>
   with copy-and-paste), can I do that?  I realize it&#39;s contrary to the<br>
   &quot;lab notebook&quot; philosophy, but pedagogically it&#39;s very useful. (And<br>
   yes, I _can_ use plain old Markdown cells, but I&#39;d like the colorizing<br>
   to be done automatically and consistently.)<br></blockquote><div><br></div><div>If you indent a block four spaces in a markdown cell, it will be highlighted as code, but is not a code cell,</div><div>and thus will not be executed.  This mechanism uses `prettify`, which infers the language being used,</div>

<div>and should highlight Python and shell blobs scripts properly.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
* Related to all of the above: I want some way to mark specific cells<br>
   with classes.  For example, I want the &#39;Understand&#39; and &#39;Summary&#39;<br>
   cells to be distinct from regular paragraphs, and the cell starting<br>
   with the title &#39;Negation&#39; to be marked as a callout box, so that I<br>
   can give it a border (and maybe a faint gray background) via CSS.<br></blockquote><div><br></div><div>The API for this would be cell metadata - in master, activate the cell toolbar to edit metadata for each cell.</div>

<div>We need to figure out some mechanisms for what we do with cell metadata,</div><div>and what we let authors do with metdata in terms of UI and effects.</div><div>The very best information on this is use cases people need, so we will definitely keep this in mind as we work out the design.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
   More importantly, I want to be able to mark notebook content as<br>
   being:<br>
<br>
   1. slide<br>
   2. presenter&#39;s notes<br>
   3. pedagogical metadata<br>
<br>
   The first is what the instructor would show learners while teaching.<br>
   The second is the narrative about that (e.g., the paragraphs of text<br>
   in the sample notebook in [2]), while the third is things like the<br>
   learning objectives (the section marked &quot;Understand&quot; at the start),<br>
   which might never be presented to learners, but helps instructors<br>
   make sense of it all.  (I _could_ keep these all in separate files,<br>
   but experience shows they&#39;re much more likely to stay in step if<br>
   they&#39;re side-by-side.)  Once they&#39;re marked with classes somehow, it<br>
   should be almost trivial to implement show/hide buttons so that<br>
   authors can toggle between &quot;here&#39;s what I want learners to see at<br>
   this point&quot; and &quot;here&#39;s what I want instructors to know about the<br>
   same material&quot;.<br>
<br>
[1] <a href="https://github.com/swcarpentry/guide.git" target="_blank">https://github.com/swcarpentry/guide.git</a> + setdict.html<br>
<br>
[2] <a href="https://github.com/swcarpentry/guide.git" target="_blank">https://github.com/swcarpentry/guide.git</a> + setdict-1-sets.ipynb<br>
<br>
[3] <a href="https://github.com/ipython/ipython/issues/3056" target="_blank">https://github.com/ipython/ipython/issues/3056</a> and<br>
     <a href="https://github.com/ipython/ipython/pull/3058" target="_blank">https://github.com/ipython/ipython/pull/3058</a><br>
<br>
[4] It makes things a _lot_ easier to move around during editing.<br>
<br>
[5] For the curious, the two things in question are now shown as cells<br>
     35 and 36; the original HTML page showed &#39;clear&#39; before &#39;remove&#39;<br>
     instead of &#39;remove&#39; before &#39;clear&#39;.<br></blockquote><div><br></div><div><br></div><div>Thanks again!</div><div>-MinRK</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<br>
_______________________________________________<br>
IPython-dev mailing list<br>
<a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
</blockquote></div><br>