Textual Analysis in Mac OS X

For those who use or access Macs, I just wanted to point out that videos of this year’s [WWDC sessions][wwdc2012] are up and they have a session on “Text and Linguistic Analysis.” All the sessions are at the URL below. I watched last year’s session on [latent semantic analysis][wwdc2011], which is also baked into the Mac OS, and it was quite good. You can watch the videos on-line or get them through iTunes to watch off-line, and they are also available as PDFs. (The site is worth checking out just to see how well it is designed.)

[wwdc2012]: https://developer.apple.com/videos/wwdc/2012/
[wwdc2011]: https://developer.apple.com/videos/wwdc/2011/


I run this site on Markdown, and I often use MultiMarkdown internally, but I really need to remember that reStructuredText is out there. Not only is it a Python project, a language that I am trying to learn, but it offers a lot of functionality. (Some would argue too much because its markup can strike some as being beyond the simple, plain text offered by something like Markdown.) Nevertheless, if I ever feel the need to increase the amount of metadata, and even some of the functionality, of my own documents, then it might be time to take the plunge.

Using IBM’s Word Cloud Generator

Okay, you have signed up for an IBM DeveloperWorks account and you have successfully clicked the **download** button. Now what? Now the fun begins.

First, you need to find the downloaded file, which should be a `zip` archive. Most modern operating systems should have the necessary applications to unzip the file — if your doesn’t, then look for a good archive utility that handles `zip`, `gzip`, `tar`, and other forms of compression on a site like MacUpdate or some other reliable source for software.

The unzipped file turns out to be a folder. Inside the folder you are going to see the following:

* a directory (folder) labelled examples
* a directory labelled license
* the actual word cloud generator application: `ibm-word-cloud.jar`
* a read-me file, `readme.html`
* a Windows batch file named `run-example.bat`
* a Unix shell script named `run-example.sh`

I am writing this from a computer running Mac OS X, which is a Unix machine with a pretty face, and so I am going to use the Unix shell script as my foundation, but the corresponding steps should work similarly for those of you running Windows OS and using the batch file. (Properly, I believe I should describe Mac OS X as POSIX-compliant, but I don’t know how many people, including myself, would understand at all what that meant.)

The `readme` file is somewhat helpful, but I find two documents (files) to be even more helpful. One is the shell script itself, which gives me an exact idea of what I should type — or, better, paste — into a terminal to begin to get results. And so the first thing you should do is copy the shell script, start with `java` and copy all the way to `example.png` into an open terminal window and hit return.

If you haven’t used the terminal before, or whatever your OS calls getting access to the command line, then you are in both for something of a shock as well as a real treat. The shock will come from something that looks, for those of you raised in the era of GUIs, so, well, *textual*, and the treat will come with realizing that even though its *textiness* seems so foreign, it’s actually fairly easy to use and you will be surprised how quickly you are going to get results.

And so, perhaps, the first place to begin is finding out where to find this Terminal application: in Mac OS X, it’s in the Utilities directory/folder within the Applications directory, which is at the root directory. The file hierarchy looks something like this:


You read this as follows:

* / (root)
* Applications/ (Applications directory)
* Utilities/ (Utilities directory)
* Terminal.app (application named Terminal)

Okay, now you have the Terminal application open, which means you have a window on your desktop which contains something like this:

`Last login: Wed Mar 30 16:51:05 on console`

The `%` is known as the prompt, which is short for “the command line prompt”, which means you are now working with the command line interface (CLI). Congratulations, you have just earned your first CLI credit.

Your prompt may very well be longer: I have shortened mine so that it places my current working directory between square braces and then gives me a percentage sign to tell me it’s ready to receive instructions. (There’s a lot more to say about the environment in which you now find yourself, but for the sake of getting on with this tutorial we will leave that for another time.)

If you paste the code that you copied out of the shell script above and try to run it from where you are, chances are you will get nothing. That is because the prompt can only run things when it knows where they are — much the same applies in the GUI, but Windows and Mac and Linux GUIs do a lot of work behind the scenes to find applications for you. You have two choices: add the file hierarchy to your command or to navigate to where the WCG application is and run it from within its directory. (If you were going to use the application a lot, there are some other considerations, but we will leave those for another time — but feel free to ask if you like.)

Typically, most Terminal windows will start you in your user home directory — which is indicated by the use of the tilde (`~`). My best advice for the sake of this current activity is to use Windows Explorer or the Mac Finder and move the unzipped folder containing the WCG, which is named “IBM Word Cloud” in my case, to the Desktop or to your Documents folder. Some place easy to get to.

Now, back at the CLI, you can do the following things:

* type `pwd` to print the working directory
* type `ls` to list the contents of the current working directory
* type `cd` to change the directory you are in
* type `cd ..` (that’s cd followed by a space followed by two periods) if you went into the wrong directory and need to back your way out of type `cd ~` to go back to the home directory no matter where you care

Navigate to the IBM Word Cloud directory, which we are going to pretend is on your Desktop. Now you can run that command `java … example.png` and it will produce results for you. If you look back in the IBM Word Cloud directory, using the Finder, you will see that a graphic file named `example.png` now exists there.

Congratulations, you have successfully produced your first word cloud, and your first graphic, from the command line. Everything else is a matter of making the kinds of adjustments we discussed in class.

Syntax Highlighting in Word

I am working on my paper for the computational folkloristics panel at AFS this year. My goal is to apply some of the network theory and visualization methods I learned at the NEH Institute on Networks and Networking in the Humanities do the intellectual history of folklore studies. I thought an interesting phenemonenon to tackle would be the emergence of performance studies as a paradigm. That is, what does a paradigm shift look like from the point of view of a network? What did it look like in folklore studies?

To do this work I am interacting with JSTOR’s *Data for Research* program, and I am trying to keep notes as I go. Because this will eventually be something I want to share with others, I am keeping my notes in Word — if only because I can control the presentation much more readily. For the XML with which I am working to be more readable, it could use some syntax highlighting, a feature I count on in my text editor, Textmate, but which is not available in Word … unless, of course, you happen upon on-line sites which will do the work for you.

One such site is [ToHTML](http://tohtml.com/). [PlanetB](http://www.planetb.ca/2008/11/syntax-highlight-code-in-word-documents/) will also do some syntax highlighting.

Word Wrapping in vim

It has taken some research, but I was unable ever to accomplish in emacs I have been able to pull off successfully, and in short order, in vim. To be sure, it’s not my doing but the work of others that I have cobbled together here, but what it provides is the kind of word wrapping to which most of us have become accustomed in GUIs. You will need to place the following in your .vimrc file in your home directory:

:set wrap
:set linebreak
:set nolist  " list disables linebreak
:set textwidth=0
:set wrapmargin=0
:set formatoptions+=l

From Word to HTML

Because Microsoft Word’s own *save-as-webpage* HTML conversion option is pretty awful. I am saving Word documents as RTF and then using Mac OS X’s `textutil` in the terminal. Enter `textutil -convert html foo.rtf` to convert `foo.rtf` to `foo.html`. (I’m working on some AFS website materials, and Word is the lingua franca of humanities scholarship, or so it seems. I can’t wait to show my digital humanities seminar what a Word document actually looks like.)

TEI By Example

For those of us still struggling with all the complexities, riches!, of TEI, the Centre for Scholarly Editing and Document Studies[ctb] of the Royal Academy of Dutch Language and Literature, the Centre for Computing in the Humanities[cch] of King’s College London, and the Department of Information Studies[dis] of University College London, have created TEI by Example.

Markdown in Brief

# Header 1 #
## Header 2 ##
### Header 3 ###             (Hashes on right are optional)
#### Header 4 ####
##### Header 5 #####

This is a paragraph, which is text surrounded by whitespace.
Paragraphs can be on one line (or many), and can drone on
for hours.  

Here is a Markdown link to [Warped](http://warpedvisions.org), 
and a literal .  Now some SimpleLinks, like 
one to google (autolinks to are-you-feeling-lucky), a test 
link to a Wikipedia page, and a CPU at foldoc. 

Now some inline markup like _italics_,  **bold**, and `code()`.

![picture alt](/images/photo.jpeg "Title is optional")     

> Blockquotes are like quoted text in email replies
>> And, they can be nested

* Bullet lists are easy too
- Another one
+ Another one

1. A numbered list
2. Which is numbered
3. With periods and a space

And now some code:

    // Code is just text indented a bit
    which(is_easy) to_remember();

Text with  
two trailing spaces  
(on the right)  
can be used  
for things like poems  

Some horizontal rules ...

* * * *


[MacTeX Home Page](http://www.tug.org/mactex/)

[Latex tricks and editing with Textmate and Skim](http://www.niquille.com/2008/11/29/latex-tricks-and-editing-with-textmate-and-skim/)


[Haris Skiadas’ List of His LaTeX and Textmate pages](http://skiadas.dcostanet.net/afterthought/list-of-my-textmate-pages/)

ReST Primer

A ReStructuredText Primer

:Author: Richard Jones
:Version: $Revision: 4350 $
:Copyright: This document has been placed in the public domain.

.. contents::

The text below contains links that look like "(quickref__)".  These
are relative links that point to the `Quick reStructuredText`_ user
reference.  If these links don't work, please refer to the `master
quick reference`_ document.

.. _Quick reStructuredText: quickref.html
.. _master quick reference:


From the outset, let me say that "Structured Text" is probably a bit
of a misnomer.  It's more like "Relaxed Text" that uses certain
consistent patterns.  These patterns are interpreted by a HTML
converter to produce "Very Structured Text" that can be used by a web

The most basic pattern recognised is a **paragraph** (quickref__).
That's a chunk of text that is separated by blank lines (one is
enough).  Paragraphs must have the same indentation -- that is, line
up at their left edge.  Paragraphs that start indented will result in
indented quote paragraphs. For example::

  This is a paragraph.  It's quite

     This paragraph will result in an indented block of
     text, typically used for quoting other text.

  This is another one.

Results in:

  This is a paragraph.  It's quite

     This paragraph will result in an indented block of
     text, typically used for quoting other text.

  This is another one.

__ quickref.html#paragraphs

Text styles


__ quickref.html#inline-markup

Inside paragraphs and other bodies of text, you may additionally mark
text for *italics* with "``*italics*``" or **bold** with

If you want something to appear as a fixed-space literal, use
"````double back-quotes````".  Note that no further fiddling is done
inside the double back-quotes -- so asterisks "``*``" etc. are left

If you find that you want to use one of the "special" characters in
text, it will generally be OK -- reStructuredText is pretty smart.
For example, this * asterisk is handled just fine.  If you actually
want text \*surrounded by asterisks* to **not** be italicised, then
you need to indicate that the asterisk is not special.  You do this by
placing a backslash just before it, like so "``\*``" (quickref__), or
by enclosing it in double back-quotes (inline literals), like this::


__ quickref.html#escaping


Lists of items come in three main flavours: **enumerated**,
**bulleted** and **definitions**.  In all list cases, you may have as
many paragraphs, sublists, etc. as you want, as long as the left-hand
side of the paragraph or whatever aligns with the first line of text
in the list item.

Lists must always start a new paragraph -- that is, they must appear
after a blank line.

**enumerated** lists (numbers, letters or roman numerals; quickref__)
  __ quickref.html#enumerated-lists

  Start a line off with a number or letter followed by a period ".",
  right bracket ")" or surrounded by brackets "( )" -- whatever you're
  comfortable with.  All of the following forms are recognised::

    1. numbers

    A. upper-case letters
       and it goes over many lines

       with two paragraphs and all!

    a. lower-case letters

       3. with a sub-list starting at a different number
       4. make sure the numbers are in the correct sequence though!

    I. upper-case roman numerals

    i. lower-case roman numerals

    (1) numbers again

    1) and again

  Results in (note: the different enumerated list styles are not
  always supported by every web browser, so you may not get the full
  effect here):

  1. numbers

  A. upper-case letters
     and it goes over many lines

     with two paragraphs and all!

  a. lower-case letters

     3. with a sub-list starting at a different number
     4. make sure the numbers are in the correct sequence though!

  I. upper-case roman numerals

  i. lower-case roman numerals

  (1) numbers again

  1) and again

**bulleted** lists (quickref__)
  __ quickref.html#bullet-lists

  Just like enumerated lists, start the line off with a bullet point
  character - either "-", "+" or "*"::

    * a bullet point using "*"

      - a sub-list using "-"

        + yet another sub-list

      - another item

  Results in:

  * a bullet point using "*"

    - a sub-list using "-"

      + yet another sub-list

    - another item

**definition** lists (quickref__)
  __ quickref.html#definition-lists

  Unlike the other two, the definition lists consist of a term, and
  the definition of that term.  The format of a definition list is::

      Definition lists associate a term with a definition.

      The term is a one-line phrase, and the definition is one or more
      paragraphs or body elements, indented relative to the term.
      Blank lines are not allowed between term and definition.

  Results in:

    Definition lists associate a term with a definition.

    The term is a one-line phrase, and the definition is one or more
    paragraphs or body elements, indented relative to the term.
    Blank lines are not allowed between term and definition.

Preformatting (code samples)

__ quickref.html#literal-blocks

To just include a chunk of preformatted, never-to-be-fiddled-with
text, finish the prior paragraph with "``::``".  The preformatted
block is finished when the text falls back to the same indentation
level as a paragraph prior to the preformatted block.  For example::

  An example::

      Whitespace, newlines, blank lines, and all kinds of markup
        (like *this* or \this) is preserved by literal blocks.
    Lookie here, I've dropped an indentation level
    (but not far enough)

  no more example

Results in:

  An example::

      Whitespace, newlines, blank lines, and all kinds of markup
        (like *this* or \this) is preserved by literal blocks.
    Lookie here, I've dropped an indentation level
    (but not far enough)

  no more example

Note that if a paragraph consists only of "``::``", then it's removed
from the output::


      This is preformatted text, and the
      last "::" paragraph is removed

Results in:


    This is preformatted text, and the
    last "::" paragraph is removed



__ quickref.html#section-structure

To break longer text up into sections, you use **section headers**.
These are a single line of text (one or more words) with adornment: an
underline alone, or an underline and an overline together, in dashes
"``-----``", equals "``======``", tildes "``~~~~~~``" or any of the
non-alphanumeric characters ``= - ` : ' " ~ ^ _ * + # < >`` that you
feel comfortable with.  An underline-only adornment is distinct from
an overline-and-underline adornment using the same character.  The
underline/overline must be at least as long as the title text.  Be
consistent, since all sections marked with the same adornment style
are deemed to be at the same level::

  Chapter 1 Title

  Section 1.1 Title

  Subsection 1.1.1 Title

  Section 1.2 Title

  Chapter 2 Title

This results in the following structure, illustrated by simplified

Chapter 1 Title <section> <title> Section 1.1 Title <section> <title> Subsection 1.1.1 Title <section> <title> Section 1.2 Title <section> <title> Chapter 2 Title (Pseudo-XML uses indentation for nesting and has no end-tags. It's not possible to show actual processed output, as in the other examples, because sections cannot exist inside block quotes. For a concrete example, compare the section structure of this document's source text and processed output.) Note that section headers are available as link targets, just using their name. To link to the Lists_ heading, I write "``Lists_``". If the heading has a space in it like `text styles`_, we need to quote the heading "```text styles`_``". Document Title / Subtitle ````````````````````````` The title of the whole document is distinct from section titles and may be formatted somewhat differently (e.g. the HTML writer by default shows it as a centered heading). To indicate the document title in reStructuredText, use a unique adornment style at the beginning of the document. To indicate the document subtitle, use another unique adornment style immediately after the document title. For example:: ================ Document Title ================ ---------- Subtitle ---------- Section Title ============= ... Note that "Document Title" and "Section Title" above both use equals signs, but are distict and unrelated styles. The text of overline-and-underlined titles (but not underlined-only) may be inset for aesthetics. Images ------ (quickref__) __ quickref.html#directives To include an image in your document, you use the the ``image`` directive__. For example:: .. image:: images/biohazard.png results in: .. image:: images/biohazard.png The ``images/biohazard.png`` part indicates the filename of the image you wish to appear in the document. There's no restriction placed on the image (format, size etc). If the image is to appear in HTML and you wish to supply additional information, you may:: .. image:: images/biohazard.png :height: 100 :width: 200 :scale: 50 :alt: alternate text See the full `image directive documentation`__ for more info. __ ../../ref/rst/directives.html __ ../../ref/rst/directives.html#images What Next? ---------- This primer introduces the most common features of reStructuredText, but there are a lot more to explore. The `Quick reStructuredText`_ user reference is a good place to go next. For complete details, the `reStructuredText Markup Specification`_ is the place to go [#]_. Users who have questions or need assistance with Docutils or reStructuredText should post a message to the Docutils-users_ mailing list. .. [#] If that relative link doesn't work, try the master document: http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html. .. _reStructuredText Markup Specification: ../../ref/rst/restructuredtext.html .. _Docutils-users: ../mailing-lists.html#docutils-users .. _Docutils project web site: http://docutils.sourceforge.net/ </pre> </div><!-- .entry-content --> <footer class="entry-meta"> Posted on <a href="http://johnlaudun.org/20080407-rest-primer/" title="10:10" rel="bookmark"><time class="entry-date" datetime="2008-04-07T10:10:05+00:00" pubdate>2008 April 7</time></a><span class="byline"> by <span class="author vcard"><a class="url fn n" href="http://johnlaudun.org/author/johnlaudun/" title="View all posts by johnlaudun" rel="author">johnlaudun</a></span></span>. <span class="sep"> | </span> <span class="tags-links"> Tagged: <a href="http://johnlaudun.org/tag/text/" rel="tag">text</a>.</span> </footer><!-- .entry-meta --> </article><!-- #post-2007 --> <article id="post-1999" class="post-1999 post type-post status-publish format-standard hentry category-work tag-editing tag-emacs tag-text"> <header class="entry-header"> <h1 class="entry-title"><a href="http://johnlaudun.org/20080320-word-wrap-in-emacs/" title="Permalink to Word Wrap in Emacs" rel="bookmark">Word Wrap in Emacs</a></h1> </header><!-- .entry-header --> <div class="entry-content"> <p>Quite frankly, this is emacs’ greatest disappointment as a text editor – something so fundamentally important to so many people and something so many other editors do well. Without modification, emacs does not soft wrap the way you’d like it to. Will that change? Perhaps – open source software’s greatest strength is that clever people with programming skills can modify projects to suit their own needs. But if this is something you can’t overlook, emacs will drive you crazy and you’re better off with another application.</p> <p>Word wrap comes in two forms: soft wrap and hard wrap. Hard wrap means that at the end of every line a “newline” character is inserted. Most plain text email is sent this way. If you have 80 character wide paragraphs and want them to be 120 characters wide, you have to reformat. In other text editors that’s a real pain, but in emacs it’s easy, and that’s one reason few programmers feel compelled to do anything about the word wrap problem. Soft wrap means the program recognizes the width of the window on your screen and reformats the words to fit the window, without inserting any newline characters. If you resize the window, the words adjust automatically. Emacs does not do this.</p> <p>Emacs presents three options:</p> <p>* No wrap: Lines do not wrap around the screen at all, but continue on and on to the right until you finally hit “return,” which for text, would be at the end of the paragraph. This is acceptable for people writing code, but not acceptable for text.<br /> * Wrap: Lines wrap around the screen, but emacs doesn’t pay attention to words, and will wrap right in the middle of the word, showing a little symbol, probably a backslash, at the right edge of the screen to show the line is being continued below. If you can deal with this, it’s the best way to go for writers. But it’s not ideal.<br /> * Fill: Emacs calls it “filling” a paragraph, and it means inserting a newline at a certain distance from the beginning of the line, for example 120 characters, paying attention not to split a word. This gives you nicely formatted paragraphs that look nice, but can get distorted if you add words in the middle of the paragraph afterward, for example. Then you have to reformat the paragraph (which is a simple keystroke). If you’re writing using LATEX (more about that later), this is the best option. But if you eventually want to hand the text to a publisher, they’ll be very unhappy about all the newlines and the hard formatting, so you’ll be forced to find an alternative.</p> <p>Let’s look at filling first. The command M-x auto-fill-mode toggles filling on or off. It will insert a newline at a certain position, taking care to pass a word onto the next line if it would be otherwise split. At what character will it do so? Probably around 72 unless you tell it otherwise. Here’s how to choose: C-u 80 C-x f sets the width (80 characters, in this example) of your paragraph but does not reformat the paragraph. M-q reformats the paragraph.</p> <p>So let’s say you are typing at the console, which is 120 characters wide, and you are starting a new document. Before you start, hit C-u 120 C-x f to set the margin, and type M-x auto-fill-mode to toggle auto-fill mode on (check the status bar at the bottom of the screen to see if it’s on: look for the word “fill” in the mode line). Now start typing. Your paragraphs will be hard wrapped at 120 characters, the width of your screen. Now if you go back to edit your work, the paragraph will be out of whack. Hit M-q to reformat the paragraph. If you later decide you want the paragraph to be 72 characters wide again, you can hit C-u 72 C-x f to set the new margin and M-q to reformat it.</p> <p>There are two other useful commands available to you if you’ve selected a region you’d like to format. The command fill-individual paragraphs (remember, as explained in section 6.1 you would access this by typing M-x fill-individual-paragraphs) reformats each paragraph in the region. This is probably what you want if you want to globally change all the paragraphs in your document from 72 to 85 characters wide, for example. The command fill-region-as-paragraph will take all the fragments of text in your region and make them into a single paragraph, removing extraneous blank lines and double spaces, etc. Very handy way to reformat hacked-up text.</p> <p>## Word Wrap in EMACS</p> <p>Add the following commands to emacs.rc in each user’s root directory<br /> to make Emacs use the cursorpad and do word wrap. You may wish to use<br /> 65 as a wrap value or even 78 (not 40).</p> <p>bind-to-key quick-exit ^Z</p> <p>bind-to-key previous-line FNA</p> <p>bind-to-key next-line FNB</p> <p>bind-to-key forward-character FNC</p> <p>bind-to-key backward-character FND</p> <p>40 set-fill-column</p> <p>add-global-mode “wrap”</p> <p>## Word-wrap in Emacs is called filling. ##</p> <p>The Emacs Manual tells you this about it:</p> <p>`M-q` Fill current paragraph (fill-paragraph).<br /> `C-x f`<br /> Set the fill column (set-fill-column).<br /> M-x fill-region<br /> Fill each paragraph in the region (fill-region).<br /> M-x fill-region-as-paragraph<br /> Fill the region, considering it as one paragraph.<br /> M-s<br /> Center a line.<br /> But of course it doesn’t tell you how to actually use “C-x f”. If you just type “C-x f” you get this error:</p> <p>set-fill-column requires an explicit argument<br /> To set the line wrap to 80 for example, type ‘C-u 80 <RET> C-x f <RET>‘</p> <p>## Continuation Lines</p> <p>If you add too many characters to one line without breaking it with RET, the line grows to occupy two (or more) lines on the screen. On graphical displays, Emacs indicates line wrapping with small bent arrows in the fringes to the left and right of the window. On text-only terminals, Emacs displays a `\’ character at the right margin of a screen line if it is not the last in its text line. This `\’ character says that the following screen line is not really a distinct line in the text, just a continuation of a line too long to fit the screen. Continuation is also called line wrapping.</p> <p>When line wrapping occurs before a character that is wider than one column, some columns at the end of the previous screen line may be “empty.” In this case, Emacs displays additional `\’ characters in the “empty” columns, just before the `\’ character that indicates continuation.</p> <p>Sometimes it is nice to have Emacs insert newlines automatically when a line gets too long. Continuation on the screen does not do that. Use Auto Fill mode (see section T.5 Filling Text) if that’s what you want.</p> <p>As an alternative to continuation, Emacs can display long lines by truncation. This means that all the characters that do not fit in the width of the screen or window do not appear at all. They remain in the buffer, temporarily invisible. On terminals, `$’ in the last column informs you that the line has been truncated on the display. On window systems, a small straight arrow in the fringe to the right of the window indicates a truncated line.</p> <p>Truncation instead of continuation happens whenever horizontal scrolling is in use, and optionally in all side-by-side windows (see section O. Multiple Windows). You can enable or disable truncation for a particular buffer with the command M-x toggle-truncate-lines.</p> <p>See section J.12 Customization of Display, for additional variables that affect how text is displayed.</p> <p>Word Wrapping in emacs</p> <p>To enter word wrap mode from within emacs, enter the following command:</p> <p> Meta-x auto-fill-mode</p> <p>To word wrap a pre-existing paragraph, enter:</p> <p> Meta-q</p> <p>To word wrap and full-justify a pre-existing paragraph, enter:</p> <p> Ctrl-u Meta-q</p> </div><!-- .entry-content --> <footer class="entry-meta"> Posted on <a href="http://johnlaudun.org/20080320-word-wrap-in-emacs/" title="19:12" rel="bookmark"><time class="entry-date" datetime="2008-03-20T19:12:05+00:00" pubdate>2008 March 20</time></a><span class="byline"> by <span class="author vcard"><a class="url fn n" href="http://johnlaudun.org/author/johnlaudun/" title="View all posts by johnlaudun" rel="author">johnlaudun</a></span></span>. <span class="sep"> | </span> <span class="tags-links"> Tagged: <a href="http://johnlaudun.org/tag/editing/" rel="tag">editing</a>, <a href="http://johnlaudun.org/tag/emacs/" rel="tag">emacs</a>, <a href="http://johnlaudun.org/tag/text/" rel="tag">text</a>.</span> </footer><!-- .entry-meta --> </article><!-- #post-1999 --> <article id="post-2017" class="post-2017 post type-post status-publish format-standard hentry category-work tag-text"> <header class="entry-header"> <h1 class="entry-title"><a href="http://johnlaudun.org/20071201-textmate-tips/" title="Permalink to Textmate Tips" rel="bookmark">Textmate Tips</a></h1> </header><!-- .entry-header --> <div class="entry-content"> <p>## Add Line Breaks ##</p> <p>On 20 Nov 2007, at 22:33, Robin Houston wrote:</p> <p>On 20/11/2007, Frank Eves <gold_eagle@mac.com> wrote:<br /> – TextMate Soft Wrap set to 66 characters<br /> – How do I Hard Wrap my document at 66 columns?</p> <p>As far as I know, TextMate doesn’t have a built-in command to do this.<br /> You can use Text > Filter Through Command… to run some external<br /> formatter of your choice. Unfortunately the BSD version of fmt included<br /> with OS X can’t quite be made to do the right thing […]</p> <p>fold -sw66 though should do exactly what Frank wants. Or to make it actually use his soft wrap setting: fold -sw$TM_COLUMNS</p> <p>### Using Perl:</p> <p>If you don’t need to worry about dealing properly with (hard) tabs,<br /> then you can easily write a short command to do the reformatting.</p> <p>Set input to “Entire Document”, output to “Replace Document”, and put the code</p> <p> #!/usr/bin/perl -p<br /> print “$1\n” while s/(\S{$ENV{TM_COLUMNS}})//;<br /> print “$1\n” while s/(.{0,$ENV{TM_COLUMNS}})\s//;</p> <p>into the Command(s) box. This will treat a tab as though it took up a<br /> single column, so if you have a lot of tab indents then it will leave<br /> excessively long lines. Writing something that deals properly with<br /> tabs would be a bit harder, but very possible.</p> <p>===</p> <p>## How to select something in a document by using a macro/command?</p> <p>I found a way to select something – calculated on run-time – by using a normal macro (plus command) without TMTOOLS!!</p> <p>The problem was if I have a script which outputs a text chunk or a regexp how can we select that text/regexp in a TM window?<br /> The approach is actually very simple. I copy the text/regexp into the shared find pasteboard; place the caret to a proper location; and execute ‘findNext’. Thus I wrote a tiny C program which copies a string into the shared find pasteboard. OK, then I wanted to write a man page for that command on basis of the normal pbcopy man page, and I figured out that pbcopy is already able to do this 😉</p> <p>Fine. The only problem was that if I write a tmcommand à la:</p> <p>echo -en “FINDTEXT” | pbcopy -pboard find</p> <p>it doesn’t work because “pbcopy -pboard find” is called from inside of TM. If I execute that in a Terminal, switch back to TM it works. The solution: I have to execute this in a new bash environment.</p> <p>The basic tmcommand (example name “SELECTTEXT”):</p> <p>RESULT=$(A SCRIPT WHICH RETURNS A TEXT OR REGEXP)<br /> export RESULT<br /> /bin/bash -c ‘echo -en “$RESULT” | pbcopy -pboard find’<br /> #place the caret to a proper location to be able to execute ‘findNext’!<br /> open “txmt://open/?line=$LINE&column=$COLUMN”</p> <p>After executing that command the string $RESULT is in the shared find pasteboard, and the caret is set.</p> <p>Next step > the macro:<br /> Before we can execute ‘findNext’ (= APPLE+G) we have to set the parameters of the find panel, meaning whether we want to do a regexp search or not; ignore case or not.</p> <p>Thus record a macro à la:</p> <p>1) open find panel, set the desired parameters, and do a dummy search for something which is NOT in the document -e.g. look for \xFFF3; and close it</p> <p>2) execute the command “SELECTTEXT”</p> <p>3) APPLE+G</p> <p>That’s it. The nice side-effect is that the macro changes nothing within TM’s find panel 😉<br /> And the macro does not affect the undo buffer, it does not change the text etc., and the selection is done instantly.</p> <p>But attention:<br /> The only tricky point : Be aware of correct escaping!!</p> <p>On that basis I wrote the “Select XML/HTML balanced tags” script which will come as soon as possible. I only have to fix some tiny things.</p> <p>Comments?</p> <p>### Addition:</p> <p>To minimize the escaping one can use:</p> <p>/bin/bash -c ‘echo -n “$RESULT” | pbcopy -pboard find’</p> <p>instead of:</p> <p>/bin/bash -c ‘echo -en “$RESULT” | pbcopy -pboard find’</p> <p>### Addition II:</p> <p>To get rid of the utf8 encoding one can use:</p> <p>/bin/bash -c ‘export __CF_USER_TEXT_ENCODING=0x1F5:0x8000100:0x8000100;echo -n “$RES” | pbcopy -pboard find’</p> <p>On 5. Apr 2007, at 16:26, Digital Rust wrote:</p> <p>Hi, the tidy feature used to create an xtml compliant document. Since I upgraded to 1.5.5 it now creates an HTML 4.01 doc. How can I change this back to XTML?</p> <p>Set TM_XHTML to ” /” in Preferences → Advanced → Shell Variables, that should both make inserted tags XHTML and make Tidy default to XHTML as output.</p> <p>I’ve just been trying TextMate, trying to move away from TextEdit and<br /> TextWrangler. One thing which is really bugging me is the way it underlines<br /> hyperlinks on the ‘Plain Text’ setting. If I wanted that kind of behaviour<br /> I’d use Microsoft Word! Is there a way I can set it up so that plain text is<br /> exactly that, completely plain vanilla typing?</p> <p>Thanks</p> <p>Go to the Bundle Editor (Bundle -> Bundle Editor -> Show Bundle Editor)<br /> and open the Text Bundle (click on the triangle). Then to scroll down to<br /> the object “Plain Text” with a gray L in front of it. If you want to<br /> remove all markings then just delete everything. If you just want to<br /> remove the underlined links then delete the following:</p> <p>{ begin = ‘^([ \t]*)(?=\S)’;<br /> end = ‘^(?!\1(?=\S))’;<br /> patterns = (<br /> { name = ‘markup.underline.link’;<br /> match = ‘(?x)<br /> ( (https?|s?ftp|ftps|file|smb|afp|nfs|(x-)?man|gopher|txmt)://|mailto:)<br /> [-:@a-zA-Z0-9_.,~%+/?=&#]+(?<![.,?:]) '; }, ); contentName = 'meta.paragraph.text'; }, Then close the bundle editor and TextMate and start it again. </p> </div><!-- .entry-content --> <footer class="entry-meta"> Posted on <a href="http://johnlaudun.org/20071201-textmate-tips/" title="09:24" rel="bookmark"><time class="entry-date" datetime="2007-12-01T09:24:26+00:00" pubdate>2007 December 1</time></a><span class="byline"> by <span class="author vcard"><a class="url fn n" href="http://johnlaudun.org/author/johnlaudun/" title="View all posts by johnlaudun" rel="author">johnlaudun</a></span></span>. <span class="sep"> | </span> <span class="tags-links"> Tagged: <a href="http://johnlaudun.org/tag/text/" rel="tag">text</a>.</span> </footer><!-- .entry-meta --> </article><!-- #post-2017 --> <article id="post-2001" class="post-2001 post type-post status-publish format-standard hentry category-work tag-coding tag-text"> <header class="entry-header"> <h1 class="entry-title"><a href="http://johnlaudun.org/20071117-hanging-indent-in-plain-text/" title="Permalink to Hanging Indent in Plain Text" rel="bookmark">Hanging Indent in Plain Text</a></h1> </header><!-- .entry-header --> <div class="entry-content"> <p>Hanging Indent</p> <p>I’ve got a list that looks like this:</p> <p>1. The job of a writer is to discover what series of events best illustrates an idea or an emotion.<br /> 2. Just like the actor, your job is one of translation, the most difficult part which is that it all comes down to this: you have to write something that a person can do in front of a camera.</p> <p>and I want it to look like this:</p> <pre> 1. The job of a writer is to discover what series of events best illustrates an idea or an emotion. </pre> <p>That required the insertion of a hard return at the end of the line and then an insertion of three spaces in addition to the existing single space in order to make it four spaces and to line up with the tab.</p> <p>2. Just like the actor, your job is one of translation, the most difficult<br /> part which is that it all comes down to this: you have to write something<br /> that a person can do in front of a camera.</p> <p>Okay, that’s consistent:</p> <p> Go to end of line.</p> <p> Insert hard return</p> <p> Go to beginning of next line (or advance one character)</p> <p> Insert three spaces.</p> <p> Continue until you get to a pre-existing hard return.</p> </div><!-- .entry-content --> <footer class="entry-meta"> Posted on <a href="http://johnlaudun.org/20071117-hanging-indent-in-plain-text/" title="16:35" rel="bookmark"><time class="entry-date" datetime="2007-11-17T16:35:22+00:00" pubdate>2007 November 17</time></a><span class="byline"> by <span class="author vcard"><a class="url fn n" href="http://johnlaudun.org/author/johnlaudun/" title="View all posts by johnlaudun" rel="author">johnlaudun</a></span></span>. <span class="sep"> | </span> <span class="tags-links"> Tagged: <a href="http://johnlaudun.org/tag/coding/" rel="tag">coding</a>, <a href="http://johnlaudun.org/tag/text/" rel="tag">text</a>.</span> </footer><!-- .entry-meta --> </article><!-- #post-2001 --> <article id="post-2121" class="post-2121 post type-post status-publish format-standard hentry category-work tag-text"> <header class="entry-header"> <h1 class="entry-title"><a href="http://johnlaudun.org/20071010-text-editors-for-everyone/" title="Permalink to Text Editors for Everyone" rel="bookmark">Text Editors for Everyone</a></h1> </header><!-- .entry-header --> <div class="entry-content"> <p>I am now, more than ever, convinced that writers should be taught how to write on text editors and not on modern word processors. The same goes for beginning writers as well as advanced writers. </p> <p>Why? Good text editors — and there are plenty of good ones for the Mac, for Linux, and for Windows — do not give you WYSIWYG. (“What You See Is What You Get” is a close approximation of what the printed page will look like). Instead, text editors give you a blank screen, perhaps some line numbers, perhaps some syntax coloring (more on this in a moment) and no real sense of what the output is going to look like. And that’s a good thing, because you shouldn’t be thinking about the output while you’re writing. You should be thinking about what it is you are trying to communicate. You shouldn’t care what the margins look like, what the headers and footers look like, what the headings look like, etc. What you should be paying attention to are the words themselves and how you structure them into paragraphs and sections that convey what it is you are trying to say. </p> <p>Unfortunately, most word processors sidetrack writers, especially inexperienced writers, into worrying about formatting, into confusing the styling of typography with styling of prose. (Mark Turner’s [Clear and Simple as the Truth][cst] explores what style really is.) </p> <p>I want to be clear: typography and design are important, but they are only important insofar as they reflect and/or augment what it is the text itself is trying to say. Or, as I will say more about in a minute, design should be a function not only of the text and the audience and the intended meaning but also the medium in which the transaction is taking place. Even some of university professors and high-powered business people confuse formatting with structure, and so what hope for beginning writers and thinkers? And it’s going to get worse before it gets better, because for every web application that uses [Markdown][md], [Textile][tt], [ReST][rest], or some other version of easy-to-use markup, there are four web apps that provide a WYSIWYG editing interface. </p> <p>So let loose the dogs of **bold** and *italics*! Facebook and MySpace have made everyone having a home on the internet easy, but in making it easy they have also taken a lot of thinking out of the process. Okay, I’m a humanist. I think thinking should always be a part of the process. It stings me that so few humanists worry about this. I understand that not everything needs to be thought about. My wife is a good example. For her, Microsoft Word works just fine. And, so far, she has never had a Word document go bad. I have. And it only took a time or two before I began thinking about not only how my data was locked up in someone else’s proprietary format — it’s a lot like someone encoding your data and turning it into a secret message that you can’t open with anything else but their key — but also how fragile that format was. Fragile both in terms of corruptibility and in terms of longevity. And never mind that every document was ten times, *ten times*, the size of the data it contained. What else was Word stuffing in there? </p> <p>Elsewhere I’ve written about the importance of thinking about [platforms][pf], so I won’t go into it here. But obviously one thing having “just plain text” that can then be transformed into **xhtml** and from there into an **rtf** document or a PDF or a myriad of other things does is allow the writer to move quickly across platforms, multi-purposing their work. It’s my belief that we’re going to have to teach both humanists and communications people not only how to do this but the mindset behind it. I know the humanists aren’t getting it in their classes, and I’m pretty sure the communications folks aren’t either. </p> <p>Personally, I think this is the key not only to good thinking, but also the key to good design. Once you “get this,” then your world changes. Suddenly, all media forms become languages that have their own grammars that you are free both to use conventionally and also innovate within — depending upon your objective. </p> <p>[md]: http://daringfireball.net/projects/markdown/syntax<br /> [tt]: http://hobix.com/textile/<br /> [rest]: http://docutils.sourceforge.net/docs/user/rst/quickstart.html<br /> [pf]: http://johnlaudun.org/2007/10/4/what-platforms-do<br /> [cst]: http://www.amazon.com/gp/product/0691036675?ie=UTF8&tag=johnlaudun-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0691036675</p> </div><!-- .entry-content --> <footer class="entry-meta"> Posted on <a href="http://johnlaudun.org/20071010-text-editors-for-everyone/" title="08:00" rel="bookmark"><time class="entry-date" datetime="2007-10-10T08:00:09+00:00" pubdate>2007 October 10</time></a><span class="byline"> by <span class="author vcard"><a class="url fn n" href="http://johnlaudun.org/author/johnlaudun/" title="View all posts by johnlaudun" rel="author">johnlaudun</a></span></span>. <span class="sep"> | </span> <span class="tags-links"> Tagged: <a href="http://johnlaudun.org/tag/text/" rel="tag">text</a>.</span> </footer><!-- .entry-meta --> </article><!-- #post-2121 --> <nav role="navigation" id="nav-below" class="site-navigation paging-navigation"> <h1 class="assistive-text">Post navigation</h1> <div class="nav-previous"><a href="http://johnlaudun.org/tag/text/page/2/" ><span class="meta-nav">←</span> Older posts</a></div> </nav><!-- #nav-below --> </div><!-- #content .site-content --> </section><!-- #primary .content-area --> <div id="secondary" class="widget-area" role="complementary"> <aside id="search-5" class="widget widget_search"> <form method="get" id="searchform" action="http://johnlaudun.org/" role="search"> <label for="s" class="assistive-text">Search</label> <input type="text" class="field" name="s" value="" id="s" placeholder="Search …" /> <input type="submit" class="submit" name="submit" id="searchsubmit" value="Search" /> </form> </aside><aside id="text-3" class="widget widget_text"> <div class="textwidget"><a href="http://johnlaudun.org/boat/" rel="attachment wp-att-7877"><img src="https://i0.wp.com/media.johnlaudun.org.s3.amazonaws.com/wordpress/media/2016/01/ACB-cover-small-103x150.jpeg?resize=103%2C150" alt="The Amazing Crawfish Boat" width="103" height="150" data-recalc-dims="1" /></a> <p style="line-height:1.1 "><small><em>The Amazing Crawfish Boat</em> is available at your favorite bookseller (both <a href="http://amzn.to/1rf9wAT">Amazon</a> and <a href="http://www.barnesandnoble.com/w/the-amazing-crawfish-boat-john-laudun/1121843205?ean=9781496804204">B&N</a>). I have also released some additional <em>free</em> materials: audio versions of some of the chapters and photos — all available for download. Details are available on the <a href="http://johnlaudun.org/boat/">book’s page</a>.</small></p></div> </aside><aside id="top-posts-2" class="widget widget_top-posts"><h1 class="widget-title">Top Posts</h1><ul> <li> <a href="http://johnlaudun.org/20131228-ipython-notebook-keyboard-shortcuts/" class="bump-view" data-bump-view="tp"> iPython Notebook Keyboard Shortcuts </a> </li> <li> <a href="http://johnlaudun.org/20170928-append-python-list-using-list-comprehension/" class="bump-view" data-bump-view="tp"> Append a Python List Using a List Comprehension </a> </li> <li> <a href="http://johnlaudun.org/20170228-open-source-tools-for-nlp/" class="bump-view" data-bump-view="tp"> Open Source Tools for NLP </a> </li> <li> <a href="http://johnlaudun.org/20150512-installing-and-setting-pip-with-macports/" class="bump-view" data-bump-view="tp"> Installing, and Setting, PIP with MacPorts </a> </li> <li> <a href="http://johnlaudun.org/20130126-nltk-stopwords/" class="bump-view" data-bump-view="tp"> NLTK and Stopwords </a> </li> </ul></aside> </div><!-- #secondary .widget-area --> </div><!-- #main .site-main --> <footer id="colophon" class="site-footer" role="contentinfo"> <div class="site-info"> <a href="http://wordpress.org/" rel="generator">Proudly powered by WordPress</a> Theme: Publish by <a href="http://kovshenin.com/" rel="designer">Konstantin Kovshenin</a>. </div><!-- .site-info --> </footer><!-- #colophon .site-footer --> </div><!-- #page .hfeed .site --> <script type="text/javascript"> //<![CDATA[ var infiniteScroll = {"settings":{"id":"content","ajaxurl":"http:\/\/johnlaudun.org\/?infinity=scrolling","type":"scroll","wrapper":true,"wrapper_class":"infinite-wrap","footer":"page","click_handle":"1","text":"Older posts","totop":"Scroll back to top","currentday":"10.10.07","order":"DESC","scripts":[],"styles":[],"google_analytics":false,"offset":1,"history":{"host":"johnlaudun.org","path":"\/tag\/text\/page\/%d\/","use_trailing_slashes":true,"parameters":""},"query_args":{"tag":"text","error":"","m":"","p":0,"post_parent":"","subpost":"","subpost_id":"","attachment":"","attachment_id":0,"name":"","static":"","pagename":"","page_id":0,"second":"","minute":"","hour":"","day":0,"monthnum":0,"year":0,"w":0,"category_name":"","cat":"","tag_id":276,"author":"","author_name":"","feed":"","tb":"","paged":0,"meta_key":"","meta_value":"","preview":"","s":"","sentence":"","title":"","fields":"","menu_order":"","embed":"","category__in":[],"category__not_in":[],"category__and":[],"post__in":[],"post__not_in":[],"post_name__in":[],"tag__in":[],"tag__not_in":[],"tag__and":[],"tag_slug__in":["text"],"tag_slug__and":[],"post_parent__in":[],"post_parent__not_in":[],"author__in":[],"author__not_in":[],"posts_per_page":15,"ignore_sticky_posts":false,"suppress_filters":false,"cache_results":true,"update_post_term_cache":true,"lazy_load_term_meta":true,"update_post_meta_cache":true,"post_type":"","nopaging":false,"comments_per_page":"50","no_found_rows":false,"order":"DESC"},"query_before":"2018-06-22 18:25:15","last_post_date":"2007-10-10 08:00:09","body_class":"infinite-scroll neverending","stats":"blog=33779968&host=johnlaudun.org&v=ext&j=1:6.1.1&x_pagetype=infinite-jetpack"}}; //]]> </script> <div style="display:none"> </div> <script> jQuery(document).ready(function () { jQuery.post('http://johnlaudun.org?ga_action=googleanalytics_get_script', {action: 'googleanalytics_get_script'}, function(response) { var F = new Function ( response ); return( F() ); }); }); </script> <div id="infinite-footer"> <div class="container"> <div class="blog-info"> <a id="infinity-blog-title" href="http://johnlaudun.org/" rel="home"> John Laudun </a> </div> <div class="blog-credits"> <a href="http://wordpress.org/" rel="generator">Proudly powered by WordPress</a> Theme: Publish by <a href="http://kovshenin.com/" rel="designer">Konstantin Kovshenin</a>. </div> </div> </div><!-- #infinite-footer --> <script type='text/javascript' src='http://johnlaudun.org/wordpress/wp-content/plugins/jetpack/_inc/build/infinite-scroll/infinity.min.js?ver=4.0.0'></script> <script type='text/javascript' src='http://johnlaudun.org/wordpress/wp-content/plugins/jetpack/_inc/build/photon/photon.min.js?ver=20130122'></script> <script type='text/javascript' src='https://s0.wp.com/wp-content/js/devicepx-jetpack.js?ver=201825'></script> <script type='text/javascript'> /* <![CDATA[ */ var jetpackCarouselStrings = {"widths":[370,700,1000,1200,1400,2000],"is_logged_in":"","lang":"en","ajaxurl":"http:\/\/johnlaudun.org\/wordpress\/wp-admin\/admin-ajax.php","nonce":"cecf15dc33","display_exif":"1","display_geo":"1","single_image_gallery":"1","single_image_gallery_media_file":"","background_color":"black","comment":"Comment","post_comment":"Post Comment","write_comment":"Write a Comment...","loading_comments":"Loading Comments...","download_original":"View full size <span class=\"photo-size\">{0}<span class=\"photo-size-times\">\u00d7<\/span>{1}<\/span>","no_comment_text":"Please be sure to submit some text with your comment.","no_comment_email":"Please provide an email address to comment.","no_comment_author":"Please provide your name to comment.","comment_post_error":"Sorry, but there was an error posting your comment. Please try again later.","comment_approved":"Your comment was approved.","comment_unapproved":"Your comment is in moderation.","camera":"Camera","aperture":"Aperture","shutter_speed":"Shutter Speed","focal_length":"Focal Length","copyright":"Copyright","comment_registration":"0","require_name_email":"1","login_url":"http:\/\/johnlaudun.org\/wordpress\/wp-login.php?redirect_to=http%3A%2F%2Fjohnlaudun.org%2F20120620-textual-analysis-in-mac-os-x%2F","blog_id":"1","meta_data":["camera","aperture","shutter_speed","focal_length","copyright"],"local_comments_commenting_as":"<fieldset><label for=\"email\">Email (Required)<\/label> <input type=\"text\" name=\"email\" class=\"jp-carousel-comment-form-field jp-carousel-comment-form-text-field\" id=\"jp-carousel-comment-form-email-field\" \/><\/fieldset><fieldset><label for=\"author\">Name (Required)<\/label> <input type=\"text\" name=\"author\" class=\"jp-carousel-comment-form-field jp-carousel-comment-form-text-field\" id=\"jp-carousel-comment-form-author-field\" \/><\/fieldset><fieldset><label for=\"url\">Website<\/label> <input type=\"text\" name=\"url\" class=\"jp-carousel-comment-form-field jp-carousel-comment-form-text-field\" id=\"jp-carousel-comment-form-url-field\" \/><\/fieldset>"}; /* ]]> */ </script> <script type='text/javascript' src='http://johnlaudun.org/wordpress/wp-content/plugins/jetpack/_inc/build/carousel/jetpack-carousel.min.js?ver=20170209'></script> <script type='text/javascript' src='http://johnlaudun.org/wordpress/wp-includes/js/mediaelement/wp-mediaelement.min.js?ver=4.9.6'></script> <script type='text/javascript' src='https://secure.gravatar.com/js/gprofiles.js?ver=2018Junaa'></script> <script type='text/javascript'> /* <![CDATA[ */ var WPGroHo = {"my_hash":""}; /* ]]> */ </script> <script type='text/javascript' src='http://johnlaudun.org/wordpress/wp-content/plugins/jetpack/modules/wpgroho.js?ver=4.9.6'></script> <script type='text/javascript' src='http://johnlaudun.org/wordpress/wp-content/themes/publish/js/small-menu.js?ver=20120206'></script> <script type='text/javascript' src='http://johnlaudun.org/wordpress/wp-includes/js/wp-embed.min.js?ver=4.9.6'></script> <script type="text/javascript"> jQuery.extend( infiniteScroll.settings.scripts, ["jquery-core","jquery-migrate","jquery","spin","jquery.spin","tiled-gallery","mediaelement-core","mediaelement-migrate","mediaelement","the-neverending-homepage","jetpack-photon","devicepx","jetpack-carousel","wp-mediaelement","grofiles-cards","wpgroho","small-menu","wp-embed"] ); jQuery.extend( infiniteScroll.settings.styles, ["the-neverending-homepage","jetpack-carousel","jetpack-carousel-ie8fix","tiled-gallery","mediaelement","wp-mediaelement","jetpack_likes","publish-style","jetpack-widget-social-icons-styles","jetpack-top-posts-widget","jetpack_css"] ); </script><script type='text/javascript' src='https://stats.wp.com/e-201825.js' async='async' defer='defer'></script> <script type='text/javascript'> _stq = window._stq || []; _stq.push([ 'view', {v:'ext',j:'1:6.1.1',blog:'33779968',post:'0',tz:'-6',srv:'johnlaudun.org'} ]); _stq.push([ 'clickTrackerInit', '33779968', '0' ]); </script> </body> </html>