Bug: :session results in unfriendly error reporting

2021-08-15 Thread James Powell

I write a deliberate syntax error into a code block:

: #+begin_src R :session
:   x <- 1
:   y xx z
: #+end_src

I put my cursor in there and C-c C-c.

What I expect: a gentle useful report about the error.
Maybe even org would move the cursor to the point of the
error in the org buffer.  If not, at least the buffer
"*Org-Babel Error Output*" will open and show me the error,
something like this (see also [1]),

: Error: unexpected symbol in:
: "x <- 1
: y xx"
: -UUU:@**--F2  *Org-Babel Error Output*   All L17    (Compilation etu) 
4:13PM 0.53 Mail --$


What happens instead:

- the *R* buffer is displayed.  It contains a long spammy traceback
  that has run off of the top of the screen.  To learn more I have to
  move the cursor into the *R* buffer and page back to the top of the
  traceback.

On the other hand, if I set ":session none", I get much friendlier
behavior.  The Error Output buffer opens with the simple error message
in it as I showed above when I use this source block:

: #+begin_src R :session none
:   x <- 1
:   y xx z
: #+end_src

I do not want to abandon :session because my code reads in a lot of
data to get started and I want my scripts, not my environment to be
"real" so I am not depending on R's ability to save and reload the
workspace at all [2] or on "Org's (clever and useful but) somewhat clunky
and inflexible method of passing data explicitly" [3].

Is there a way to get back to the "Error Output" buffer opening with a
simple message /while/ having :session being enabled?

thank you,
  James P.

References

[1] "Currently the only action Babel takes with STDERR is to display it in a
    pop-up buffer when code block evaluation fails" (Eric Schulte in 
2012, at

https://lists.gnu.org/archive/html/emacs-orgmode/2012-03/msg00057.html).

[2] « what will you save as your lasting record of what happened?
  [...[ As a beginning R user, it's OK to consider your environment
  [...]  "real."  However, in the long run, you'll be much better off
  if you consider your R scripts as "real." » (p. 111, Wickham, H. "R
  for data science : import, tidy, transform, visualize, and model
  data" O'Reilly Media, 2016).  To facilitate this, I have disabled
  'save workspace' permanently:
  : q <- function (save = "no", status = 0, runLast = TRUE)
  : .Internal(quit(save, status, runLast))

[3] «When I look at Org and think of "session-based" blocks, I see a
    potential big benefit in having multiple source-blocks throughout
    my document share the same session»
(https://lists.gnu.org/archive/html/emacs-orgmode/2011-06/msg00654.html,
    the only good hit for a search for "session Org-Babel Error Output" at
    https://lists.gnu.org/archive/html/emacs-orgmode/ as of
    [2021-08-15 Sun]).


--
James E. Powell, MS
Pronouns: he/him/his
Applied Physics PhD Candidate
Department of Physics
Portland State University
Home page: http://web.pdx.edu/~powellj
Office: SRTC 409B Phone: +1-503-725-8515




bug: Error handling in source blocks.

2021-08-09 Thread James Powell

  Error handling is important and hard to get right.  Me, I prefer to
  treat every warning as an error (-Werror in gcc, "options(warn=2)" in
  R, etc).  I want the system to grind to a halt at the least sign of
  trouble.

  When I write some nonsense into a code block as in this example:

  ,
  | : This next code block is intended to trigger an error, because that
  | : variable "f838293483" with that attribute/member "x8483848"
  | : probably does not exist.
  | :
  | : #+begin_src R :exports both
  | : x <- f838293483$x8483848
  | : #+end_src
  | :
  | : #+RESULTS:
  | :
  | : #+begin_src R :exports both :results table :colnames yes
  | : require(tidyverse)
  | : tribble(~a, ~b, 1, 2)
  | : #+end_src
  | :
  | : #+RESULTS:
  | : | a | b |
  | : |---+---|
  | : | 1 | 2 |
  | : #+end_src
  `


  which does trigger an error in R
  ,
  | Error: object 'f838293483' not found
  | [traceback follows]
  `


  and I do org-to-PDF export, I would like the PDF to be not built and
  loud alarm bells to ring bringing the error to my attention.

  What happens instead: the document builds from org into PDF with no
  indication that anything went wrong at all, except perhaps minor bits
  of missing or incorrect text in the PDF file.  The error can easily be
  buried in the output as more and later source blocks from the same
  document are evaluated.

  Likewise, in 'sh',
  ,
  | #+begin_src sh :exports results
  | exit 1
  | #+end_src
  `


  Sh exits 1 to indicate an error, so I would like this to ring alarm
  bells and fail to produce a PDF on org-to-PDF export.

  We might add examples in Java, Python, C++, C along the same lines.
  All of these should be in a unit test (because error handling is 
important).

  There do not seem to be any unit tests that exercise error handling in
  org-9.4.4.

  Exceptions that are thrown in the block should also at least
  optionally always and reliably abort the org-to-PDX export and ring
  alarm bells.

  I would like to see a section in the org manual called "Error handling
  in source blocks" that discusses the issue.

  I searched for "error handling" at ,
  with no results that are relevant.

  thank you for your time,
  - JP

--
James E. Powell, MS
Pronouns: he/him/his
Applied Physics PhD Candidate
Department of Physics
Portland State University
Home page: http://web.pdx.edu/~powellj
Office: SRTC 409B Phone: +1-503-725-8515




Bug: spurious change in list indent cursor motion [9.4.4 (9.4.4-dist @ /home/powellj/elisp/org-9.4.4/lisp/)]

2021-05-09 Thread James Powell

Remember to cover the basics, that is, what you expected to happen and
what in fact did happen.  You don't know how to make a good report?  See

 https://orgmode.org/manual/Feedback.html#Feedback

Your bug report will be posted to the Org mailing list.


I open a new file, /tmp/demo.org, and I start a new list
by typing "- a".  It appears:

- a

What I expect: my cursor should now be at column 0.  This was the
behavior in 9.3.6 and it makes perfect sense.

What happens instead: after upgrade to 9.4.4, the cursor rests at
column 2, under the a.

How do I change the behavior back to the 9.3.6 one?

Facts about it:

- When I start emacs with 'emacs -Q -nw' the bug does not manifest even 
in 9.4.4.

- When I paste the 'current state' elisp below into ~/it.el, and start emacs
  with emacs -Q -nw, and 'L' in dired to load ~/it.el, the bug does not 
manifest.

- I have read the changelog and the manual, with no good result.
- I have an example where the bug does not manifest even in 9.4.4 and
  even without running emacs -Q, where the .org file is a little thing
  full of lines starting with ':' only (!).
- I tried setting org-adapt-indentation to 't (the default) as it is
  an obvious suspect, the bug still manifested.

many thanks,

- James P.

Emacs  : GNU Emacs 25.3.1 (x86_64-pc-linux-gnu, GTK+ Version 3.24.5)
 of 2020-07-07
Package: Org mode version 9.4.4 (9.4.4-dist @ 
/home/powellj/elisp/org-9.4.4/lisp/)


current state:
==
(setq
 org-tab-first-hook '(org-babel-hide-result-toggle-maybe 
org-babel-header-arg-expand)

 org-adapt-indentation nil
 org-latex-classes '(("achemso" "\\documentclass{achemso}" 
("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . 
"\\subsection*{%s}")
  ("\\subsubsection{%s}" . "\\subsubsection*{%s}") 
("\\paragraph{%s}" . "\\paragraph*{%s}")

  ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
 ("article" "\\documentclass[11pt]{article}" 
("\\section{%s}" . "\\section*{%s}")
  ("\\subsection{%s}" . "\\subsection*{%s}") 
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
  ("\\paragraph{%s}" . "\\paragraph*{%s}") 
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
 ("report" "\\documentclass[11pt]{report}" 
("\\part{%s}" . "\\part*{%s}") ("\\chapter{%s}" . "\\chapter*{%s}")
  ("\\section{%s}" . "\\section*{%s}") 
("\\subsection{%s}" . "\\subsection*{%s}")

  ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
 ("book" "\\documentclass[11pt]{book}" 
("\\part{%s}" . "\\part*{%s}") ("\\chapter{%s}" . "\\chapter*{%s}")
  ("\\section{%s}" . "\\section*{%s}") 
("\\subsection{%s}" . "\\subsection*{%s}")

  ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
 )
 org-speed-command-hook '(org-speed-command-activate 
org-babel-speed-command-activate)

 org-reverse-note-order t
 org-occur-hook '(org-first-headline-recenter)
 org-metaup-hook '(org-babel-load-in-session-maybe)
 org-agenda-start-on-weekday nil
 org-html-format-drawer-function #[514 "\207" [] 3 "\n\n(fn NAME 
CONTENTS)"]

 org-log-done 'time
 org-latex-format-inlinetask-function 
'org-latex-format-inlinetask-default-function

 org-confirm-shell-link-function 'yes-or-no-p
 org-ascii-format-inlinetask-function 'org-ascii-format-inlinetask-default
 org-startup-folded 'content
 org-agenda-loop-over-headlines-in-active-region nil
 org-link-search-must-match-exact-headline nil
 org-file-apps '(("\\.pdf" . "evince %s") (auto-mode . emacs) 
(directory . emacs) ("\\.mm\\'" . default) ("\\.x?html?\\'" . default)

 ("\\.pdf\\'" . default))
 org-agenda-skip-scheduled-if-done t
 org-agenda-custom-commands '(("d" todo #("DELEGATED" 0 9 (face 
org-warning)) nil)
  ("c" todo #("DONE|DEFERRED|CANCELLED" 0 
23 (face org-warning)) nil)
  ("w" todo #("WAITING" 0 7 (face 
org-warning)) nil) ("W" agenda "" ((org-agenda-ndays 21)))

  ("A" agenda ""
   ((org-agenda-skip-function (lambda nil 
(org-agenda-skip-entry-if (quote notregexp) "\\=.*\\[#A\\]")))
    (org-agenda-ndays 1) 
(org-agenda-overriding-header "Today's Priority #A tasks: "))

   )
  ("u" alltodo ""
   ((org-agenda-skip-function
 (lambda nil (org-agenda-skip-entry-if 
(quote scheduled) (quote deadline) (quote regexp) "<[^>\n]+>")))
    (org-agenda-overriding-header 
"Unscheduled TODO entries: "))

   )
  )
 org-latex-format-headline-function 
'org-latex-format-headline-default-function

 org-default-notes-file 

Re: Bug: redundant and undocumented #label is required to link to a table [9.4.4 (9.4.4-dist @ /home/powellj/elisp/org-9.4.4/lisp/)]

2021-04-19 Thread James Powell

If I put #+name before the table, the link does indeed work, but now
the table is reproduced twice in the latex output and also C-c C-c in
the code block writes a new table into the file instead of updating
the current table.

Before C-c C-c in the code block, this org snippet produces the table 
twice in the latex output:

<>
#+begin_src R :exports both
  library(tidyverse)
  x <- tribble(~a, ~b, 1, 3)
  x
#+end_src
#+NAME: t1
#+CAPTION: Org Table
#+RESULTS: t1
| 1 | 3 |

I want to refer to Table [[t1]].
<>

After C-c C-c in the code block, the table appears twice in the org mode 
file:

<>
#+begin_src R :exports both
  library(tidyverse)
  x <- tribble(~a, ~b, 1, 3)
  x
#+end_src

#+RESULTS:
| 1 | 3 |

#+NAME: t1
#+CAPTION: Org Table
#+RESULTS: t1
| 1 | 3 |

I want to refer to Table [[t1]].
<>

The literature and the Library of Babel do not seem to address the
case, which is so common in peer-reviewed literature, of a captioned
and referenced table that was produced by code.  It was only through a
large investment in trial and error and searching that I was able to
build the example above, in which the code does indeed generate a
table that is captioned and referenced.

- JP

On 4/19/21 10:45 AM, Nicolas Goaziou wrote:

Hello,

James Powell  writes:


Using Org mode version 9.4.4 I build this document:

<>

#+NAME: t1
#+begin_src R :exports both

    library(tidyverse)   x <- tribble(~a, ~b, 1, 3)   x #+end_src

#+CAPTION: Org Table
#+RESULTS: t1

| 1 | 3 |

I want to refer to Table [[t1]].
<>

What I expect: the latex export will include the table and link to it.

What happens instead: the code and table appear, numbered and captioned.
However, the link is broken ("I want to refer to Table ??"). Looking in
the latex, this line reads

  > I want to refer to Table \ref{org993764c}.

but that label org993764c appears nowhere else in the file.

Org-lint doesn't complain about the file at all.  I posted this
earlier to this list and learned about a workaround

" It works if you put a #+label on the table ... which confuses me,
because I looked through the manual for #+label and there's no mention
of it at all, but a bunch of my Org files use it (for LaTeX export). "

#+label is an outdated equivalent for #+name.

In this case, you are referencing the source code block whereas you want
to reference the table. So #+name should go before the table.

Note that if you follow [[t1]] link, point will move to the source code
block, not the table.

Regards,


--
James E. Powell, MS
Pronouns: he/him/his
Applied Physics PhD Candidate
Department of Physics
Portland State University
Home page: http://web.pdx.edu/~powellj
Office: SRTC 409B Phone: +1-503-725-8515




Bug: redundant and undocumented #label is required to link to a table [9.4.4 (9.4.4-dist @ /home/powellj/elisp/org-9.4.4/lisp/)]

2021-04-19 Thread James Powell

Using Org mode version 9.4.4 I build this document:

<>
#+NAME: t1
#+begin_src R :exports both
  library(tidyverse)
  x <- tribble(~a, ~b, 1, 3)
  x
#+end_src
#+CAPTION: Org Table
#+RESULTS: t1
| 1 | 3 |

I want to refer to Table [[t1]].
<>

What I expect: the latex export will include the table and link to it.

What happens instead: the code and table appear, numbered and captioned.
However, the link is broken ("I want to refer to Table ??"). Looking in
the latex, this line reads

> I want to refer to Table \ref{org993764c}.

but that label org993764c appears nowhere else in the file.

Org-lint doesn't complain about the file at all.  I posted this
earlier to this list and learned about a workaround

" It works if you put a #+label on the table ... which confuses me,
because I looked through the manual for #+label and there's no mention
of it at all, but a bunch of my Org files use it (for LaTeX export). "

(William Denton writing in
https://lists.gnu.org/archive/html/emacs-orgmode/2021-04/msg00170.html)

As another workaround, the snippet as written (with no #+label) works
if you export to html instead of latex.

- JP

---

Emacs  : GNU Emacs 25.3.1 (x86_64-pc-linux-gnu, GTK+ Version 3.24.5)
 of 2020-07-07
Package: Org mode version 9.4.4 (9.4.4-dist @ 
/home/powellj/elisp/org-9.4.4/lisp/)


current state:
==
(setq
 org-tab-first-hook '(org-babel-hide-result-toggle-maybe 
org-babel-header-arg-expand)

 org-adapt-indentation nil
 org-latex-classes '(("achemso" "\\documentclass{achemso}"
  ("\\section{%s}" . "\\section*{%s}")
  ("\\subsection{%s}" . "\\subsection*{%s}")
  ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
  ("\\paragraph{%s}" . "\\paragraph*{%s}")
  ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
 ("article" "\\documentclass[11pt]{article}"
  ("\\section{%s}" . "\\section*{%s}")
  ("\\subsection{%s}" . "\\subsection*{%s}")
  ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
  ("\\paragraph{%s}" . "\\paragraph*{%s}")
  ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
 ("report" "\\documentclass[11pt]{report}"
  ("\\part{%s}" . "\\part*{%s}")
  ("\\chapter{%s}" . "\\chapter*{%s}")
  ("\\section{%s}" . "\\section*{%s}")
  ("\\subsection{%s}" . "\\subsection*{%s}")
  ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
 ("book" "\\documentclass[11pt]{book}"
  ("\\part{%s}" . "\\part*{%s}")
  ("\\chapter{%s}" . "\\chapter*{%s}")
  ("\\section{%s}" . "\\section*{%s}")
  ("\\subsection{%s}" . "\\subsection*{%s}")
  ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
 )
 org-speed-command-hook '(org-speed-command-activate 
org-babel-speed-command-activate)

 org-reverse-note-order t
 org-occur-hook '(org-first-headline-recenter)
 org-metaup-hook '(org-babel-load-in-session-maybe)
 org-agenda-start-on-weekday nil
 org-html-format-drawer-function #[514 "\207" [] 3 "\n\n(fn NAME 
CONTENTS)"]

 org-log-done 'time
 org-latex-format-inlinetask-function 
'org-latex-format-inlinetask-default-function

 org-confirm-shell-link-function 'yes-or-no-p
 org-ascii-format-inlinetask-function 'org-ascii-format-inlinetask-default
 org-startup-folded 'content
 org-agenda-loop-over-headlines-in-active-region nil
 org-link-search-must-match-exact-headline nil
 org-file-apps '(("\\.pdf" . "evince %s") (auto-mode . emacs) 
(directory . emacs)

 ("\\.mm\\'" . default) ("\\.x?html?\\'" . default)
 ("\\.pdf\\'" . default))
 org-agenda-skip-scheduled-if-done t
 org-agenda-custom-commands '(("d" todo #("DELEGATED" 0 9 (face 
org-warning)) nil)

  ("c" todo
   #("DONE|DEFERRED|CANCELLED" 0 23 (face 
org-warning))

   nil)
  ("w" todo #("WAITING" 0 7 (face 
org-warning)) nil)

  ("W" agenda "" ((org-agenda-ndays 21)))
  ("A" agenda ""
   ((org-agenda-skip-function
 (lambda nil
  (org-agenda-skip-entry-if (quote 
notregexp)

   "\\=.*\\[#A\\]")
  )
 )
    (org-agenda-ndays 1)
    (org-agenda-overriding-header
 "Today's Priority #A tasks: ")
    )
   )
  ("u" alltodo ""
   

captioned named table in org-babel R is dangling link in latex export

2021-04-06 Thread James Powell

I have a goal: make a table in R using org-babel and have it appear in
the latex export.  I also want to be able to refer to the table by name in
the org file and have that become a hypertext link in the latex export.

Using Org mode version 9.4.4 I build this document:

<>
#+NAME: t1
#+begin_src R :exports both
  library(tidyverse)
  x <- tribble(~a, ~b, 1, 3)
  x
#+end_src
#+CAPTION: Org Table
#+RESULTS: t1
| 1 | 3 |

I want to refer to Table [[t1]].
<>

What I expect: the latex export will include the table and link to it.

What happens instead: the code and table appear, numbered and captioned.
However, the link is broken ("I want to refer to Table ??"). Looking in
the latex, this line reads

> I want to refer to Table \ref{org993764c}.

but that label org993764c appears nowhere else in the file.

Org-lint doesn't complain about the file at all.  I searched the archives
and the intertubes, I don't see any discussion of this.

Any help would be greatly appreciated.

- JP

--
James E. Powell, MS
Pronouns: he/him/his
Applied Physics PhD Candidate
Department of Physics
Portland State University
Home page: http://web.pdx.edu/~powellj
Office: SRTC 409B Phone: +1-503-725-8515




Re: fuzzy link can't be exported when \begin{foo} is there

2021-03-31 Thread James Powell
Thank you Kyle.  I can see how using the latex environments the way I 
did caused the table part to not be org-mode at all any more.  I didn't 
realize org behaved that way, and the workaround of using #+LATEX works 
wonderfully.


Incidentally would not org-mode benefit from a bug tracker? Ordinarily 
here I would say "close the bug" but this is close enough I hope?


- JP

On 3/29/21 9:45 PM, Kyle Meyer wrote:

James Powell writes:


First time poster, long time user.  Glad to be here.

Welcome.


This seems to a bug.

[...]

When I add some latex in the middle:
<>
In Table [[tableOne]] I show that this site has AADT 143925, by
TVT_Detailed_2019.xlsx.

\begin{landscape}
#+NAME: tableOne
#+CAPTION: Site 26016 has AADT 143925.
| SITE_ID | LRM  |  BEGMP |  ENDMP | CLASS_01 | [...] |   AADT |
K_FACTOR | D_FACTOR | Ton_Factor |
|   26016 | 00100I00 | 297.31 | 298.93 | 0.11 | [...] | 143925
|  7.5 |   52 |  4 |
\end{landscape}
<>
I expect it to keep on working.  But instead, now I get

:  1 high  Unknown fuzzy location "tableOne"
in org-lint.  Latex export reports "BROKEN LINK".

I believe the above text is sent as is (i.e. that won't be processed as
an Org table).  Calling org-element-at-point on it reports that it's a
latex-environment.

Perhaps you want

--8<---cut here---start->8---
#+LATEX: \begin{landscape}
#+NAME: tableOne
#+CAPTION: Site 26016 has AADT 143925.
| SITE_ID | LRM  |  BEGMP |  ENDMP | CLASS_01 | [...] |   AADT | K_FACTOR | 
D_FACTOR | Ton_Factor |
|   26016 | 00100I00 | 297.31 | 298.93 | 0.11 | [...] | 143925 |  7.5 | 
  52 |  4 |
#+LATEX: \end{landscape}
--8<---cut here---end--->8---


Incidentally I started this bug report with org-mode 9.3.6.  Back in
9.3.6, it was worse: not only would org-lint report 'unknown fuzzy'
and latex export say "BROKEN LINK" but also C-c C-o
(org-open-at-point) would fail to find the target and make the jump.

The type error was guarded against with 3bb073b63 (ol: Fix type error in
org-link-search corner case, 2020-11-30).  There's no name here, so it
then falls back to fuzzy search.
Compare

   (org-element-property :name (org-element-at-point))

in with point on the table in your original snippet and the suggested
one above.


--
James E. Powell, MS
Pronouns: he/him/his
Applied Physics PhD Candidate
Department of Physics
Portland State University
Home page: http://web.pdx.edu/~powellj
Office: SRTC 409B Phone: +1-503-725-8515




fuzzy link can't be exported when \begin{foo} is there

2021-03-27 Thread James Powell

First time poster, long time user.  Glad to be here.

This seems to a bug.

- Org mode version 9.4.4
- GNU Emacs 25.3.1

If I write in a little table like this:

: In Table [[tableOne]] I show that this site has AADT 143925, by 
TVT_Detailed_2019.xlsx.

:
: #+NAME: tableOne
: #+CAPTION: Site 26016 has AADT 143925.
: | SITE_ID | LRM  |  BEGMP |  ENDMP | CLASS_01 | [...] |   AADT | 
K_FACTOR | D_FACTOR | Ton_Factor |
: |   26016 | 00100I00 | 297.31 | 298.93 | 0.11 | [...] | 143925 
|  7.5 |   52 |  4 |


It should be org-lint clean and export as a link when I export to 
latex.  And it is and it does.


So far so good.   When I add some latex in the middle:
<>
In Table [[tableOne]] I show that this site has AADT 143925, by 
TVT_Detailed_2019.xlsx.


\begin{landscape}
#+NAME: tableOne
#+CAPTION: Site 26016 has AADT 143925.
| SITE_ID | LRM  |  BEGMP |  ENDMP | CLASS_01 | [...] |   AADT | 
K_FACTOR | D_FACTOR | Ton_Factor |
|   26016 | 00100I00 | 297.31 | 298.93 | 0.11 | [...] | 143925 
|  7.5 |   52 |  4 |

\end{landscape}
<>
I expect it to keep on working.  But instead, now I get

:  1 high  Unknown fuzzy location "tableOne"
in org-lint.  Latex export reports "BROKEN LINK".

If you wish, you may paste the text from <> to <> 
noninclusive above in this email to reproduce.  The manual says that it 
should work: "The following snippets will be identified as LaTeX source 
code [...] Environments of any kind" ( *info* (org) LaTeX fragments).  I 
searched the mailing list for help, I see lots of comments about 
org-lint but not so much on this.  I scanned the open bugs at 
https://updates.orgmode.org/#bugs and nothing seemed relevant.


Incidentally I started this bug report with org-mode 9.3.6.  Back in
9.3.6, it was worse: not only would org-lint report 'unknown fuzzy'
and latex export say "BROKEN LINK" but also C-c C-o
(org-open-at-point) would fail to find the target and make the jump.

Many thanks.

- JP


--
James E. Powell, MS
Pronouns: he/him/his
Applied Physics PhD Candidate
Department of Physics
Portland State University
Home page: http://web.pdx.edu/~powellj
Office: SRTC 409B Phone: +1-503-725-8515