tag:blogger.com,1999:blog-37803297954210279962024-03-13T09:03:48.625-07:00Fundamental Thinking'Fundamental Thinking' is intended as a central reference point for technical and nontechnical information relevant for myself and other aspiring or established scientists. From time to time I will also post product reviews and the like.jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.comBlogger79125tag:blogger.com,1999:blog-3780329795421027996.post-64441235676475862522016-07-28T07:36:00.003-07:002016-07-28T07:36:55.027-07:00Changing Shells on a DomainProblem: Linux box on Windows domain does not allow the user to set the shell with chsh -s /bin/zsh (or whichever shell). There are no errors, it just doesn't work. Using root, nothing happens either, using chsh -s /bin/zsh user.name to set it for the user gives the error user 'user.name' does not exist in /etc/passwd. You could probably go into the passwd file and make it work but a suitable way is to add to .bashrc<br />
<br />
export SHELL=/bin/zsh<br />
exec /bin/zsh -l<br />
<br />
This redirects the shell to zsh but also allows you to type "exit" to leave the terminal - not just return to bash.<br />
<br />
*NOTE: this should also work if the user does not have root access - like on a shared computerjbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-87691829085960160892016-07-28T07:28:00.000-07:002016-07-28T07:28:51.895-07:00OpenFOAM on Domain ComputerProblem: OpenFOAM does not work linux machine added to a Windows domain. When you source OpenFOAM bashrc file, it overwrites the PATH so no terminal commands are recognized (ls, sudo, etc.)<br />
<br />
Solution:<br />
cd /opt/openfoam4/etc (or whichever version is installed)<br />
<br />
sudo vim bashrc<br />
<br />
comment line 153:<br />
# cleaned=`$foamClean "$PATH" "$foamOldDirs"` && PATH="$cleaned"<br />
<br />
save and quit (:wq)<br />
<br />
For some reason, this line destroys the path when the machine is on the domain. This is not a problem for machines not on a domain.<br />
<br />
<br />
*NOTE: for zsh shell, there may be an error stating that "-t" flag is not recognized, if so:<br />
<br />
sudo vim config.sh/aliases<br />
<br />
delete the "-t" from line 73<br />
<br />
the line should read:<br />
[ "$(type wmRefresh)" = "alias" ] && unalias wmRefresh || unset wmRefreshjbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-34197217318869805862016-06-01T13:54:00.004-07:002016-06-01T13:54:59.029-07:00Label 3D Scatter Plots in PythonI work with grid data and sometimes I need to see the sequence in which nodes are ordered.<br />
<br />
This can be done with annotate in 2D (see documentation) but not 3D. Alternatively use "text"<br />
<br />
ax.text(x[i], y[i], z[i] , "%s" % (str(i)), size=20, zorder=1, color = "black")<br />
<br />
x,y,z are the location in 3-space, %s stores a string, str(i) converts "i" into a string and puts it in place of %s.<br />
<div>
<br /></div>
jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-50180262346312887932016-05-20T08:15:00.001-07:002016-05-20T08:15:54.419-07:00Accidentially hit C-x C-s in VimI use both emacs and Vim, but mostly emacs. I often forget I'm in vim and hit C-x C-s to save. C-s is scroll lock which effectively locks up vim.<br />
<br />
C-q will unlock and allow you to return to vim.<br />
<br />
*C = Ctrl so C-q is Ctrl+qjbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-55937762042335092322016-05-19T15:12:00.003-07:002016-05-19T15:13:10.648-07:00Initiating Multidimensional Vectors in c++I found this page helpful for 3D since 2D was reasonably straightforward.<br />
http://www.cplusplus.com/forum/articles/7459/<br />
<br />
2x1<br />
std::vector<float> array1D(2);</float><br />
<br />
2x3<br />
std::vector<std::vector float=""> > array2D(2,std::vector<float>(3))</float></std::vector><br />
<br />
2x3x4<br />
std::vector<std::vector float="" std::vector=""> > > array3d;</std::vector><br />
int rows = 2, columns = 3, planes = 4;<br />
array3d.resize(rows);<br />
for (int i = 0; i < rows; i++) {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>array3d[i].resize(columns);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>for (int j = 0; j < columns; j++) {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> array3d[i][j].resize(planes);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
}<br />
<br />
and using structures<br />
struct VoxelProperties {<br />
// Contains:<br />
int NumInVoxel; // Num points in each voxel<br />
std::vector<int> NodeIndex; // Array to store the Index of points in the voxel</int><br />
};<br />
<div>
<div>
</div>
<div>
std::vector<voxelproperties> Voxels(2);</voxelproperties></div>
<div>
Voxels[0].NumInVoxel = 1;</div>
<div>
Voxels[0].NodeIndex.push_back(13);</div>
<div>
std::cout << Voxels[0].NumInVoxel << std::endl;</div>
<div>
std::cout << Voxels[0].NodeIndex[0] << std::endl;</div>
<div>
<br /></div>
<div>
std::vector<std::vector oxelproperties=""> > Voxels(2,std::vector<voxelproperties>(3));</voxelproperties></std::vector></div>
<div>
Voxels[0][0].NumInVoxel = 1;</div>
<div>
Voxels[0][0].NodeIndex.push_back(13);</div>
<div>
Voxels[1][1].NumInVoxel = 11;</div>
<div>
Voxels[1][2].NodeIndex.push_back(15);</div>
<div>
std::cout << Voxels[0][0].NumInVoxel << std::endl;</div>
<div>
std::cout << Voxels[0][0].NodeIndex[0] << std::endl;</div>
<div>
std::cout << Voxels[1][1].NumInVoxel << std::endl;</div>
<div>
std::cout << Voxels[1][2].NodeIndex[0] << std::endl;</div>
<div>
<br /></div>
<div>
std::vector<std::vector oxelproperties="" std::vector=""> > > Voxels(2,std::vector<voxelproperties>(3));</voxelproperties></std::vector></div>
<div>
std::vector<std::vector oxelproperties="" std::vector=""> > > Voxels(2,std::vector<std::vector oxelproperties="">(2) >(3));</std::vector></std::vector></div>
<div>
std::vector<std::vector oxelproperties="" std::vector=""> > > Voxels;</std::vector></div>
<div>
int rows = 2, columns = 3, planes = 4;</div>
<div>
Voxels.resize(rows);</div>
<div>
for (int i = 0; i < rows; i++) {</div>
<div>
Voxels[i].resize(columns);</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>for (int j = 0; j < columns; j++) {</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span> Voxels[i][j].resize(planes);</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>}</div>
<div>
}</div>
<div>
Voxels[0][0][0].NumInVoxel = 1;</div>
<div>
Voxels[0][0][1].NodeIndex.push_back(13);</div>
<div>
Voxels[1][1][2].NumInVoxel = 11;</div>
<div>
Voxels[1][2][2].NodeIndex.push_back(15);</div>
<div>
Voxels[1][2][2].NodeIndex.push_back(16);</div>
<div>
std::cout << Voxels[0][0][0].NumInVoxel << std::endl;</div>
<div>
std::cout << Voxels[0][0][1].NodeIndex[0] << std::endl;</div>
<div>
std::cout << Voxels[1][1][2].NumInVoxel << std::endl;</div>
<div>
std::cout << Voxels[1][2][2].NodeIndex[0] << std::endl;</div>
<div>
std::cout << Voxels[1][2][2].NodeIndex[1] << std::endl;</div>
</div>
<div>
<br /></div>
jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-11518715775195923582016-04-01T16:26:00.000-07:002016-04-01T16:26:01.889-07:00Min, Max, argMin, argMax of std::vector in c++<strike>I love c++.</strike> <strike>I hate c++.</strike> I can confirm that c++ exists. There... that's how I feel. Coming from basic to VB to Matlab to Fortran to python to c++ - and all within the realm of numerical analysis - I view c++ as that dumb guy who thinks he's so much smarter than everyone else. The rest of us just have to deal with him because he...is...always...there... but nobody really respects him (Linux: I'm talking to you too even though I have grown quite fond of you as my daily OS).<br />
<br />
Anyway...ya ya ya c++ writes operating systems. Beat that Fortran. At least if I want to find the minimum and maximum values of an array, it's simple in Matlab and Fortran and Python and ... mrp min(x), max(x), argmin(x), argmax(x) or something simple like that.<br />
<br />
Stackexchange is a godsend...not so much for this question though.<br />
<br />
Here is how to do it in c++ using c++ BS to do it.<br />
<br />
I almost exclusively use std::vectors so that's what I'm talking about now.<br />
<br />
double min = *std::min_element(x.begin(), x.end());<br />
double max = *std::max_element(x.begin(), x.end());<br />
<br />
int argMin = std::distance(x.begin(), std::min_element(x.begin(), x.end()));<br />
int argMax = std::distance(x.begin(), std::max_element(x.begin(), x.end()));<br />
<br />jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com1tag:blogger.com,1999:blog-3780329795421027996.post-36265411935403598722016-03-15T08:31:00.005-07:002016-03-15T08:32:28.037-07:00Convert git --bare to normalI was making a bunch of --bare repos for interpreted codes. I started working in compiled languages and found it nicer to have the compiled program easily available so my coworkers can just copy and run it rather than cloning and compiling themselves. I wanted to convert the --bare to normal repos. Enter stack exchange!<br />
<br />
http://stackoverflow.com/questions/10637378/how-do-i-convert-a-bare-git-repository-into-a-normal-one-in-place<br />
<br />
I'm reposting here because you have to read the answer and the comments to get it all working.<br />
<br />
Make a .git folder in the top-level of your repository.<br />
Move the all the repo folders into the .git folder (HEAD branches config description hooks info objects refs) into the .git you just created.<br />
Run git config --local --bool core.bare false to convert the local git-repository to non-bare (might need sudo)<br />
run git checkout master (this one was found in the comments)jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-61472999595470782442015-12-30T07:22:00.000-08:002016-04-25T06:35:42.682-07:00My Fresh Linux Install ScriptMy personal set of software to install and commands to run on a fresh install of Ubuntu<br />
<br />
sudo apt-get install gfortran vim git tmux texlive openssh-server libgnome2-bin pandoc gnuplot ffmpeg gimp inkscape emacs zsh htop octave unison<br />
<br />
git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle<br />
<br />
anaconda python<br />
mendeley<br />
chrome<br />
teamviewer<br />
<br />
Thunderbird:<br />
gcontactsync<br />
lightning<br />
provider for google calendar<br />
thunderbird conversations<br />
<br />
if there's a problem with the zsh after copying oh_my_zsh from another install rather than downloading from scratch:<br />
zsh compinit: insecure directories, run compaudit for list.<br />
Ignore insecure directories and continue [y] or abort compinit [n]?<br />
<br />
sudo chmod -R 755 .oh-my-zsh<br />
<br />
<br />
fedora 23<br />
<br />
sudo dnf install vim-enhanced gcc-gfortran gcc-c++ gimp inkscape tmux texlive libgnome zsh gnome-tweak-tool htop octave unison qtwebkit<br />
<br />
to get gnome-open working<br />
libgnome<br />
<br />
to get mendeley working<br />
sudo dnf install qtwebkit<br />
<br />
add to .tmux.conf<br />
set -g default-shell /bin/zshjbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-72440495822694471032015-12-29T11:19:00.002-08:002015-12-30T06:05:00.576-08:00Sync Files Between Windows and Linux with UnisonI'd been using GoodSync to synchronize and backup all my important files on windows. I was GoodSync to perform backups both locally and to remote machines. I loved it. It worked perfectly fine when both machines were windows based. Now that I'm at least partially switched to Linux, Goodsync still works, but it's a command line tool that isn't quite as nice as it was before.<br />
<br />
First I tried rsync. That required a push and a pull command to get updates propagated both directions. That's fine in one direction but once files get deleted, problems abound since you'd have to know the direction to propagate the deletion to specify the order of the push and pull. I wanted something that could handle things a bit better.<br />
<br />
My setup: Linux (Ubuntu) as primary, Windows as remote<br />
<br />
First Install ssh on windows. OpenSSH should work fine but for some reason years ago I tried out Bitvise and stuck with it. Either way, should be fine<br />
<br />
Now download the binary for windows<br />
http://unison-binaries.inria.fr/<br />
<br />
and install unison on Linux<br />
sudo apt-get install unison<br />
<br />
make sure you can connect to the windows ssh - port forwarding could be required<br />
<br />
ssh username@ipaddress<br />
for those of us without dydns setup<br />
<br />
Set up the unison binary:<br />
I used the text version not the gui version.<br />
Extract the zip<br />
<br />
copy the executable somewhere (I made a folder C:/Users/UserName/Unison)<br />
<br />
Add that folder to the path<br />
System>Advanced Settings>Environmental Variables>Path<br />
(something line ; pathtounisonfolder) (don't forget the semicolon to denote a new entry)<br />
<br />
I also renamed the executable to simply "unison.exe" so that I could invoke the keyword "unison" from command prompt. You can check this now.<br />
<br />
From Linux make sure unison can be invoked<br />
ssh username@ipaddress unison -version<br />
the result should match<br />
unison -version<br />
if it doesn't see about getting the same version of the software on both local and remote systems.<br />
<br />
now setup a synchronization for instance syncing local (linux) dir1 to remote dir4<br />
unison -auto ~/Desktop/dir1 ssh://username@ipaddress/Desktop/dir4<br />
<br />
-auto so it doesn't require you to confirm that every single change exists. It will still ask you to confirm before syncing...there's another command to make it just do it.<br />
<br />
Lastly, if you need to access other harddrives on the remote machine, it can be done with symbolic links<br />
<br />
for instance to make a link to My_Library on D drive ssh into the machine and<br />
mklink /J C:\Users\UserName\Unison\My_Library D:\My_Library<br />
<br />
/J for directory link<br />
The first entry is the Location and name of the link and the second is the actual directory<br />
<br />
now in unison use<br />
unison -auto ~/media/mountpoint/My_Library ssh://username@ipaddress/Unison/My_Library<br />
<br />
ignoring files can be done in the ~/.unison/default.prf file<br />
ignore = Path _gsdata_<br />
ignores my goodsync hidden files from before<br />
<br />
that should be it!<br />
<br />
https://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#furtherjbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-89600788425987522292015-12-23T13:46:00.001-08:002015-12-29T11:20:40.992-08:00Matlab Comments in VimI'm using vim-commentary but having problems with matlab and octave scripts trying to comment like c blocks<br />
<br />
in the vim-commentary documentation it says to do:<br />
autocmd FileType matlab setlocal commentstring=%\%s<br />
<br />
but it wasn't working for me. The solution was to open the matlab.vim file as admin<br />
<br />
sudo gedit /usr/share/vim/vim74/ftplugin/matlab.vim<br />
<br />
and add<br />
<br />
setlocal commentstring=%\%s<br />
<br />
to the file<br />
<br />
Now it works automatically when vim loads a matlab file!jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-64450190656599669942015-11-04T09:34:00.004-08:002015-12-23T13:47:53.035-08:00My tmux.conf fileI took this from a couple places namely<br />
http://tangledhelix.com/blog/2012/07/16/tmux-and-mouse-mode/<br />
https://unwiredcouch.com/2013/11/15/my-tmux-setup.html<br />
https://wiki.archlinux.org/index.php/Tmux<br />
<br />
very helpful<br />
<br />
<br />
# Change prefix to C-s<br />
unbind C-b<br />
set -g prefix C-s<br />
bind C-s send-prefix<br />
<br />
# force a reload of the config file<br />
unbind r<br />
bind r source-file ~/.tmux.conf<br />
<br />
# start window numbering at 1 for easier switching<br />
set -g base-index 1<br />
<br />
# colors<br />
set -g default-terminal "screen-256color"<br />
<br />
# unicode<br />
setw -g utf8 on<br />
set -g status-utf8 on<br />
<br />
# status bar config<br />
set -g status-left "#h:[#S]"<br />
set -g status-left-length 50<br />
set -g status-right-length 50<br />
set -g status-right "⚡ #(~/bin/tmux-battery) [✉#(~/bin/imap_check.py)] %H:%M %d-%h-%Y"<br />
setw -g window-status-current-format "|#I:#W|"<br />
set-window-option -g automatic-rename off<br />
<br />
# listen to alerts from all windows<br />
set -g bell-action any<br />
<br />
# rebind pane tiling<br />
bind V split-window -h<br />
bind H split-window<br />
<br />
# quick pane cycling<br />
unbind ^A<br />
bind ^A select-pane -t :.+<br />
<br />
# screen like window toggling<br />
bind Tab last-window<br />
bind Escape copy-mode<br />
<br />
# vim movement bindings<br />
set-window-option -g mode-keys vi<br />
bind h select-pane -L<br />
bind j select-pane -D<br />
bind k select-pane -U<br />
bind l select-pane -R<br />
<br />
# Enable mouse scrolling<br />
#set-window-option -g mode-mouse on<br />
set -g mode-mouse on<br />
set -g mouse-resize-pane on<br />
set -g mouse-select-pane on<br />
set -g mouse-select-window on<br />
<div>
<br /></div>
jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-58359061809559026762015-11-04T08:50:00.003-08:002015-12-30T07:09:48.932-08:00My .vimrc fileI'm certainly no expert in vim or all the packages. Here's what I have so far<br />
<br />
vundle package manager<br />
syntastic for syntax error flags<br />
vim-airline for aesthetic bar and plugin integration<br />
vim-commentary for easy comment/uncomment<br />
vim-gitgutter to identify changes since last commit<br />
YouCompleteMe for autocompletion (no longer bothering with it)<br />
<br />
most of these can be installed by :PluginInstall inside vim<br />
YouCompleteMe is a bit more indepth http://christopherpoole.github.io/setting-up-vim-with-YouCompleteMe/<br />
<br />
vundle requires .vimrc edits to work<br />
<br />
here is my .vimrc file<br />
<br />
"""""""""""""""""""""""""""""<br />
" Must Haves<br />
"""""""""""""""""""""""""""""<br />
filetype off<br />
<br />
set nocompatible<br />
set modelines=0<br />
"""""""""""""""""""""""""""""<br />
" Vundle<br />
"""""""""""""""""""""""""""""<br />
" set the runtime path to include vundle and initialize<br />
set rtp+=~/.vim/bundle/vundle/<br />
call vundle#begin()<br />
<br />
" let vundle manage vundle, required<br />
Plugin 'gmarik/vundle'<br />
<br />
Plugin 'airblade/vim-gitgutter.git'<br />
Plugin 'bling/vim-airline'<br />
Plugin 'tpope/vim-commentary.git'<br />
Plugin 'scrooloose/syntastic'<br />
" Plugin 'Valloric/YouCompleteMe'<br />
<br />
call vundle#end()<br />
<br />
filetype plugin indent on<br />
<br />
"""""""""""""""""""""""""""""<br />
" Tabs<br />
"""""""""""""""""""""""""""""<br />
set tabstop=2<br />
set shiftwidth=2<br />
set softtabstop=2<br />
set expandtab<br />
<br />
"""""""""""""""""""""""""""""<br />
" General Improvements<br />
"""""""""""""""""""""""""""""<br />
set t_Co=256<br />
set encoding=utf-8<br />
set scrolloff=3<br />
set autoindent<br />
set showmode<br />
set showcmd<br />
set hidden<br />
set wildmenu<br />
set wildmode=list:longest<br />
set visualbell<br />
set cursorline<br />
set ttyfast<br />
set ruler<br />
set backspace=indent,eol,start<br />
set laststatus=2<br />
set relativenumber<br />
set number<br />
"set undofile<br />
<br />
"""""""""""""""""""""""""""""<br />
" Leader<br />
"""""""""""""""""""""""""""""<br />
let mapleader = ","<br />
<br />
"""""""""""""""""""""""""""""<br />
" Searching and Moving<br />
"""""""""""""""""""""""""""""<br />
set ignorecase<br />
set smartcase<br />
set gdefault<br />
set incsearch<br />
set showmatch<br />
set hlsearch<br />
nnoremap <leader><space> :noh<cr></cr></space></leader><br />
nnoremap <tab> %</tab><br />
vnoremap <tab> %</tab><br />
<br />
""""""""""""""""""""""""""""<br />
" Long Lines<br />
""""""""""""""""""""""""""""<br />
set nowrap<br />
" set textwidth=79<br />
" set formatoptions=qrn1<br />
" set colorcolumn=85<br />
<br />
""""""""""""""""""""""""""""<br />
" Invisible Characters (tabs, returns, etc.)<br />
""""""""""""""""""""""""""""<br />
" set list<br />
<br />
""""""""""""""""""""""""""""<br />
" Disable arrow keys<br />
""""""""""""""""""""""""""""<br />
" nnoremap <up> <nop></nop></up><br />
" nnoremap <down> <nop></nop></down><br />
" nnoremap <left> <nop></nop></left><br />
" nnoremap <right> <nop></nop></right><br />
" inoremap <up> <nop></nop></up><br />
" inoremap <down> <nop></nop></down><br />
" inoremap <left> <nop></nop></left><br />
" inoremap <right> <nop></nop></right><br />
" nnoremap j gj<br />
" nnoremap k gk<br />
<br />
"""""""""""""""""""""""""""<br />
" Help Key Remap<br />
"""""""""""""""""""""""""""<br />
"inoremap <f1> <esc></esc></f1><br />
"nnoremap <f1> <esc></esc></f1><br />
"vnoremap <f1> <esc></esc></f1><br />
<br />
"""""""""""""""""""""""""""<br />
" Save when not focus<br />
"""""""""""""""""""""""""""<br />
:au FocusLost * :wa<br />
" set autowriteall<br />
<br />
"""""""""""""""""""""""""""<br />
" Fortran Free-form<br />
"""""""""""""""""""""""""""<br />
let fortran_free_source=1<br />
let fortran_do_enddo=1<br />
<br />
"""""""""""""""""""""""""""<br />
" Automatically Close Delimiters<br />
"""""""""""""""""""""""""""<br />
" inoremap { {}<left></left><br />
inoremap {<cr> {<cr>}<esc>O</esc></cr></cr><br />
inoremap {{ {}<left></left><br />
inoremap {} {}<left></left><br />
<br />
" inoremap ( ()<left></left><br />
inoremap (<cr> (<cr>)<esc>O</esc></cr></cr><br />
inoremap (( ()<left></left><br />
inoremap () ()<left></left><br />
<br />
" inoremap [ []<left></left><br />
inoremap [<cr> [<cr>]<esc>O</esc></cr></cr><br />
inoremap [[ []<left></left><br />
inoremap [] []<left></left><br />
<br />
" inoremap [<cr> [<cr>]<esc>O</esc></cr></cr><br />
inoremap '' ''<left></left><br />
inoremap "" ""<left></left><br />
" inoremap [] []<left></left><br />
<br />
""""""""""""""""""""""""""""<br />
" ColorSchemes<br />
""""""""""""""""""""""""""""<br />
set background=dark<br />
colorscheme gruvbox<br />
<br />
""""""""""""""""""""""""""""<br />
" Enable Mouse<br />
""""""""""""""""""""""""""""<br />
set mouse=a<br />
<br />
syntax on<br />
""""""""""""""""""""""""""""<br />
" Delete buffer without closing split<br />
""""""""""""""""""""""""""""<br />
<br />
let g:airline#extensions#tabline#enabled=1<br />
" let g:airline_powerline_fonts=1<br />
<br />
<br />
nmap ,d :b#<bar>bd#<cr></cr></bar><br />
<bar><br /></bar>
<div>
:nnoremap <silent> <f5> :let _s=@/<bar>:%s/\s\+$//e<bar>:let @/=_s<bar>:nohl<cr></cr></bar></bar></bar></f5></silent></div>
<div>
<br /></div>
jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-74573200526931959512015-09-03T05:36:00.001-07:002015-09-03T05:39:04.863-07:00Plotting From FortranFortran does not automatically allow for plotting during execution. There is a work around. I touched on this with my previous post about plotting with gnuplot from python. The same principles apply here.<br />
<br />
From fortran call gnuplot. For instance, to make a vector plot from fortran use the command<br />
<br />
call system('gnuplot Vector.gp')<br />
<br />
where Vector.gp is the gnuplot setup file for vector plotting.<br />
<br />
This also requires a datafile that gnuplot can read. I prefer a csv file because I can put that directly into other programs like excel as well.<br />
<br />
So what I've done, is built an IO module with several subfunctions that will create a datafile for gnuplot and call the system for me. More plot types are on the way. See attached for details.<br />
<br />
example scatter plot colored by the vorticity:<br />
call cScatter(x,y,omegaz)<br />
<br />
<a href="https://drive.google.com/file/d/0B81VL20ggLWyXzdDLVA5Z3dxelU/view?usp=sharing">Fortran-GnuPlot Plotting.zip</a><br />
<br />
By the way, I've switched to Atom text editor by github for my programming. The .gp files I included save as .png files so I can use them with both word and latex. Atom will open .png directly inside the editor and update as the figure updates. This is approaching an IDE and it's a lot faster to update the figure than with Windows Image Viewer. It should be a cross-platform solution too.jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-16959747614095880842015-08-06T10:40:00.002-07:002015-08-06T10:40:58.488-07:00Alternative Approach for Using Gnuplot with Python in WindowsI ran into a problem plotting with python in windows. I don't know how common this problem is, but here were a few articles about it. 2 problems<br />
<br />
First: matplotlib would crash (not respond) when trying to update the plot in a loop so that I could visualize data as it's generated.<br />
<br />
Second: because windows command prompt doesn't play well with -persist, the well-known Gnuplot.py couldn't open a figure, display the data, then continue the code without closing the figure. The figure has to be manually closed (or closed from command or not using persist) before the code would continue. The other option is to use the png terminal to generate a png image that can be viewed outside either python or gnuplot.<br />
<br />
This gave me an idea - but not for python. In windows, windows photo viewer automatically updates if the image it's viewing is updated. So I thought, why not generate a single png file that is viewed in windows photo viewer and let windows photo viewer update the image in real time. This works as long as the png can be written and viewed before the next one is written.<br />
<br />
So if I can do this with python, why couldn't I do it in Fortran too?<br />
<br />
Here's my idea: Make a module that has two functions. First, one that takes variable arguments with column data and parses it in the correct form for gnuplot csv ( columns next to each other for each variable) and writes the data to a .dat file. The second takes data and a gnuplot script name and calls the first to generate the correct data and then executes the load 'gnuscript.txt' command.<br />
<br />
This is a bit redundant in python but I decided to use it as a first step towards something better. Since fortran doesn't visualize data on any operating system (easily at least), this approach would be extensible to other OS.<br />
<br />
Attached is a python collection with gnuplot scripts to generate several common figures.<br />
<br />
<a href="https://drive.google.com/file/d/0B81VL20ggLWyRVhpQkE0NU9lbVE/view?usp=sharing">GnuPlotLib.zip</a><br />
<br />jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-59682827634511414602015-03-03T13:28:00.001-08:002015-03-03T13:28:36.147-08:00Fortran Dynamic Allocation on the FlyThis article from stackoverflow suggests linked lists (which I think are intended to be used with pointers) to append allocatable arrays on the fly with more or less elements.<br />
http://stackoverflow.com/questions/8384406/how-to-increase-array-size-on-the-fly-in-fortran<br />
<br />
That's all fine but ehh. Those of us coming from Matlab background might not understand what's going on with pointers, linked lists, etc. nor do we understand how Matlab actually dynamically allocates arrays. Since I don't care about the former (right now), the latter question can be answered easily. An array is allocated according to the number of elements contained within. If you want to add another element on the bottom, Matlab will allocate a new spot in memory with 1 more element, copy the old array to that physical memory location, then deallocate the original array. This is poor programming and very inefficient but you'd never notice for small arrays. For large arrays, your code will crawl.<br />
<br />
C, fortran, most other languages of interest (I can't remember how python does it) force you to declare the exact number of elements you intend to store in an array before you can store any elements at all. In the tutorial guides, you'll see whole sections about allocating and deallocating variables and think that it's all unnecessary - because matlab just works! Except even really good matlab can be very slow. I recently converted a code to Fortran and got a 99.4% increase in speed over a well written, matlab code.<br />
<br />
So if you're in C or Fortran, what can we do if we need to allocate more space on the fly? One option is (written in Fortran)<br />
<br />
allocate(temp(size(myVariable)))<br />
temp = myVariable<br />
deallocate(myVariable)<br />
allocate(myVariable(size(temp)+1))<br />
myVariable(1:temp) = temp<br />
<br />
This is doing exactly what Matlab does, but you have to code it yourself. If this is in a loop, and you're doing this every iteration, things will be slowed down considerably but RAM conservation will be maximized.<br />
<br />
Why not allocate for a large fixed size ahead of time? allocate(myVariable(100)). Because if you only have 10 elements to store, then 90 percent of your memory usage is waste.<br />
<br />
Here's my solution<br />
allocate with a number<br />
<br />
allocate(myVariable(10))<br />
counter = 10<br />
<br />
then<br />
<br />
pcounter = 0<br />
do i=1,Total,1<br />
myVariable(i) = i<br />
pcounter = pcounter + 1<br />
if pcounter = counter then<br />
allocate(temp(size(myVariable)))<br />
temp = myVariable<br />
deallocate(myVariable)<br />
allocate(myVariable(size(temp)+10))<br />
myVariable(1:temp) = temp<br />
counter = counter + 10<br />
end if<br />
end do<br />
<br />
this gives a buffer of 10 so you don't reallocate every iteration, but at worst, only every 10 iterations<br />
<br />
the opposite can be done to deallocate on the fly<br />
<br />
if counter - 10 > pcounter then<br />
allocate(temp(size(myVariable)))<br />
temp = myVariable<br />
deallocate(myVariable)<br />
allocate(myVariable(size(temp)-10))<br />
myVariable(1:temp) = temp<br />
counter = counter - 10<br />
end if<br />
<br />
this approach isn't too computationally intensive and it saves a ton of RAM for large simulations. Best of all, it's pretty straightforward in any language. I've even used it in Matlab when reading experimental data from arduino boards.<br />
<br />
<br />
<br />jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-53593965234796189712015-03-03T13:07:00.003-08:002015-03-03T13:07:22.925-08:00Brief Intro to Structures in FortranIn Matlab, the cell variable type can be very useful. For those not familiar, a cell (in Matlab) is kinda like a variable inside a variable. For instance I could have a cell called FieldVariables. There are 4 elements inside this cell: 1 each for pressure, density, Vx, Vy. Each of these 5 cell elements has Nx by Ny elements inside relating to the value of the variable at the gridpoints. This can be a convenient way to collect related data while incurring minimal overhead.<br />
<br />
In Fortran, something similar can be done in the form of structures. A structure allows you to define a custom variable type that can be used similarly integer by coding integer:: i . It's maybe not exactly the same.<br />
<br />
For this example, I need a variable named PointsInCell<br />
Inside PointsInCell, I want to store variables associated with x and y gridpoints. So, at every gridpoint I want to store:<br />
1) an integer counter NumInCell<br />
2) an allocatable integer array called pIndex<br />
3) an integer called pcounter<br />
<br />
I want to do this because NumInCell, pIndex, and pcounter are all related to information local to a specific cell and it's convenient later in the code to have them all collected together. So first, I define a type that declares NumInVox, pIndex, and pCounter<br />
<br />
type CellIndex<br />
! Contains:<br />
integer:: NumInCell ! # points in each Cell<br />
integer,dimension(:),allocatable:: pIndex ! array storing index of all points in Cell<br />
integer:: pcounter ! # counter for dynamic array sizing<br />
end type<br />
this takes care of defining what is to be stored AT each gridpoint<br />
<br />
Next, I define another type to define the gridpoints where CellIndex will be stored:<br />
<br />
type Cells<br />
type(CellIndex),dimension(:,:),allocatable:: Cell ! each element contains NumInVox, pIndex<br />
end type<br />
<br />
This defines the variable Cell as rows and columns were CellIndex will be stored<br />
<br />
Lastly, I want to define a single variable that will contain all this information<br />
<br />
type(Cells):: PointsInCell<br />
<br />
Now to allocate these variables in the structure<br />
<br />
allocate(PointsInCell % Cell(yNum,xNum))<br />
do i=1,yNum,1<br />
do j=1,xNum,1<br />
allocate(PointsInCell % Cell(i,j) % pIndex(10))<br />
end do<br />
end do<br />
PointsInCell % Cell(:,:) % pcounter = 10<br />
<br />
so if I want to change the pcounter at Cell(10,20) to 20, I'd write<br />
PointsInCell % Cell(10,20) % pcounter = 20<br />
<br />
the percent sign defines another level deeper in the structure.<br />
<br />jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-37630328718749544602015-02-16T18:22:00.001-08:002015-04-17T07:26:44.830-07:00Installing Fortran on Windows with MinGWAs a followup to the previous post using cygwin to emulate linux to install gfortran, this post is the same but using mingw. From my own experience, cygwin worked on 2/3 of the computers I installed it on. On the third, it was unusably slow - 2-3 minutes to open terminal. The instructions online to speed things up were unhelpful - my problem was not addressed. Fortunately, there is also minwg that does the same thing from the perspective of a scientist that needs a compiler (CS guys might disagree but their purpose would be different). The biggest difference between the two is that mingw compiles programs to be run on windows while cygwin works on cygwin.<br />
<br />
This post is more for me to aggregate the hard work of others so I have a single place to look when installing Fortran on Windows.<br />
<br />
Here's the gist:<br />
<br />
1) make sure you've got Java installed if you use Eclipse (or other Java-based IDEs) http://www.oracle.com/technetwork/java/javase/downloads/index.html<br />
<br />
2) download MinGW from www.mingw.org . Click Downloads on the left and Download the latest version setup.exe file from sourceforge<br />
<br />
3) install minwg as administrator to the c:\ drive. <br />
<br />
4) I installed all the packages in the basic setup options (developers kit, base, ada, fortran, c++, object c, msys base)<br />
<br />
these will get you started. The g++ compiler is also available and eventually, installing all pthreads packages will get openMP running.<br />
<br />
5) Add path variables:<br />
;C:\MinGW\bin;C:\MinGW\msys\1.0\bin\<br />
<br />
5) Check that gfortran is installed by typing gfortran --version into windows command prompt or terminal. The terminal is in C:\MinGW\msys\1.0 msys.bat opens it.<br />
<br />
6) Install Eclipse Parallel tools developer kit (containing Photran) http://www.eclipse.org/ptp/<br />
if you had a previous project running in cygwin, you'll probably have to open a new project so the new addresses for the compilers will be recognized.jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-62438225333034942362015-02-15T14:23:00.000-08:002015-02-16T18:10:17.239-08:00Installing Fortran on Windows with CygwinThis post is more for me to aggregate the hard work of others so I have a single place to look when installing Fortran on Windows.<br />
<br />
This set of instructions is where I got most of my help. There are a couple tweaks that were necessary to keep everything up and running on 64bit with newer packages. After all, the video is a couple years old.<br />
https://www.youtube.com/watch?v=GfCmiEbGtpE<br />
<br />
Here's the gist:<br />
<br />
1) make sure you've got Java installed if you use Eclipse (or other Java-based IDEs) http://www.oracle.com/technetwork/java/javase/downloads/index.html<br />
<br />
2) download cygwin from www.cygwin.org . Download the setup.exe file for either 32 or 64 bit systems<br />
<br />
3) install cygwin as administrator to the c:\ drive. The cygwin.mirrors.hoobly.com mirror definitely works.<br />
<br />
4) Install these packages in cygwin:<br />
gcc-fortran: GNU Compiler Collection<br />
gdb: The GNU Debugger<br />
make: The GNU version of the 'make' utility<br />
<br />
these will get you started. The g++ compiler is also available and eventually, I (you) might need either OpenMP or OpenMPI.<br />
<br />
5) Add path variables:<br />
for 64 bit<br />
;C:\Cygwin64\bin;C:\Cygwin64\usr\bin;C:\Cygwin64\usr\local\bin;C:\Cygwin64\lib;C:\Cygwin64\usr\lib<br />
or for 32 bit<br />
;C:\Cygwin\bin;C:\Cygwin\usr\bin;C:\Cygwin\usr\local\bin;C:\Cygwin\lib;C:\Cygwin\usr\lib<br />
<br />
5) Check that gfortran is installed by typing gfortran --version into command prompt<br />
<br />
6) Install Eclipse Parallel tools developer kit (containing Photran) http://www.eclipse.org/ptp/jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com4tag:blogger.com,1999:blog-3780329795421027996.post-63825322200782871532014-08-16T10:36:00.001-07:002015-05-22T06:57:14.692-07:00Second order Finite Difference Schemes for Non-Uniform Grid SpacingA lot of credit goes to<br />
http://www.scientificpython.net/<br />
<br />
In the attached pdf I lay out the derivation for second order finite differences for non-uniform grid spacing for first and second derivatives. Higher derivatives can be approximated in a comparable fashion...albeit with a lot more algebra involved in finding the derivatives.<br />
<br />
I use Lagrange interpolating polynomials as the base functions and it results in the same derivatives that they provide at http://www.scientificpython.net/pyblog/non-uniform-first-order-finite-differences for the first derivatives. Second derivatives are the same for the inner points, but they only supply the first order accurate second derivatives at the endpoints. I wanted a better solution at the ends so I derived it myself. This derivation contains second order accurate approximations for the endpoints as well.<br />
<br />
<a href="https://drive.google.com/open?id=0B81VL20ggLWyVEdLalF6R0NFdWM&authuser=0">PDF</a>jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-15799711502079204412014-08-12T12:08:00.001-07:002014-08-16T10:37:34.994-07:00Excel Figures with Directional ArrowsI needed streamlines and a I wanted arrows to show the flow direction of the flow.<br />
<br />
I scoured the web and didn't find a single solution but I did find the pieces I needed to make an VBA macro to add directional arrows to my streamlines<br />
<br />
Here's the instructions<br />
<br />
Pull in your Original XY Data in the Original Sheet - I use the Matlab code below to generate constant streamlines<br />
<br />
In the Control sheet, enter the number of points before an arrowhead is drawn in the appropriate cell<br />
This sets the distance between arrowheads<br />
<br />
Click Parse Data<br />
This will take the original data and break it up into many different columns that can be added as individual series<br />
<br />
Click on the figure in the Figure sheet<br />
This is a prerequisite for the next step<br />
<br />
From the XL toolbox addon, click Chart series>Add Many Series<br />
Select all the cells containing the data and labels for the series from the Parsed for Streamlines sheet<br />
<br />
Change the chart type to XYScatterSmoothNoMarkers<br />
<br />
Select Individual X values/labels for each series<br />
<br />
click Add series<br />
This adds all the new XY pairs as individual series in the figure<br />
<br />
Once it's completed, the Format Chart Series button can be used to automatically format the chart.<br />
This automatically adds arrowheads and sets the formatting of the data series. Since there will be A LOT of series, this is a life saver. The drawback of this operation is that it you have to edit the VBA code to change the automatic formatting properties.<br />
<br />
<br />
<a href="https://drive.google.com/file/d/0B81VL20ggLWyMmlFMXNockthM0U/edit?usp=sharing">Figure Generator</a><br />
<br />
<a href="https://drive.google.com/file/d/0B81VL20ggLWySXNyeGprUWxVNmM/edit?usp=sharing">Matlab Streamline Code</a>jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-15912285031056346852014-08-04T05:56:00.001-07:002014-08-16T10:37:42.154-07:00XL Toolbox "Cannot find object"On my laptop with Office 2010, I get an error every time I install/update Daniel's XL toolbox. It says something like "object cannot be found..."<br />
<br />
From the forums,<br />
http://xltoolbox.sourceforge.net/referencesfix/<br />
it says to uncheck any references listed as "missing." I have none. What seems to work though is simply saving the macro.<br />
<br />
In excel hit alt+F11 to open the macro editor. Highlight Daniel's XL toolbox in the tree. Click the save button. That's it.<br />
<br />
The first time I had this happen, I spend hour(s) trying to find the solution and ended up finding a forum that had me delete something out of the tree and saving...it worked but I can't find the forum. It was supposed to rebuild something in the macro and save it. Since I saved it, it might have been the only key.jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-78263481364408316272014-07-28T07:37:00.003-07:002014-08-16T10:37:59.901-07:00Comparing figure types for PublicationThis is from the Microsoft website<br />
<br />
http://office.microsoft.com/en-us/help/choosing-the-best-graphic-format-for-the-job-HA001056305.aspx<br />
<br />
<h3 style="background-color: white; color: #101010; font-family: 'Segoe UI Light', SegoeUILightWF, Arial, sans-serif; font-size: 1.9em; font-weight: normal; line-height: 1.1em; margin-bottom: 0px; margin-top: 0px; padding: 0px 0px 9px;">
Figure out the best file format for your task</h3>
<div style="background-color: white; color: #444444; font-family: 'Segoe UI', SegoeUIWF, Arial, sans-serif; font-size: 1.4em; line-height: 1.286em; margin-bottom: 10px; margin-left: inherit; padding: 0px;">
When you save your document, data and workbooks, or presentation as a Web page in Hypertext Markup Language (HTML) format, all graphics (including drawing objects and pictures) are saved in GIF, JPEG, or PNG format so that they can be viewed in a Web browser.</div>
<div style="background-color: white; color: #444444; font-family: 'Segoe UI', SegoeUIWF, Arial, sans-serif; font-size: 1.4em; line-height: 1.286em; margin-bottom: 10px; margin-left: inherit; padding: 0px;">
If you reopen the Web page in Word, Excel, or PowerPoint, the graphics will be in their original file formats so that you can still edit them as you normally would.</div>
<div class="cntIndent0" id="tableoverflow" style="background-color: white; color: #666666; font-family: 'Segoe UI', SegoeUIWF, Arial, sans-serif; font-size: 10px; margin: 0px 0px 10px inherit; overflow: auto; padding: 0px;">
<table class="collapse" style="border-bottom-style: none; border-collapse: collapse; margin: 0px; width: 700px;"><tbody>
<tr class="trbgeven" style="background-color: #f3f3f3; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; padding: 0px; vertical-align: top;"><th style="background: rgb(216, 216, 216) !important; border-bottom-color: rgb(164, 164, 164); border-bottom-style: solid; border-bottom-width: 1px; border-top-color: rgb(164, 164, 164); border-top-style: solid; border-top-width: 1px; color: #444444; font-size: 1.4em; font-weight: normal; padding: 3px 10px 3px 5px; text-transform: uppercase;"><span class="bterm" style="font-weight: 600;">ACTION</span></th><th style="background: rgb(216, 216, 216) !important; border-bottom-color: rgb(164, 164, 164); border-bottom-style: solid; border-bottom-width: 1px; border-top-color: rgb(164, 164, 164); border-top-style: solid; border-top-width: 1px; color: #444444; font-size: 1.4em; font-weight: normal; padding: 3px 10px 3px 5px; text-transform: uppercase;"><span class="bterm" style="font-weight: 600;">BMP</span></th><th style="background: rgb(216, 216, 216) !important; border-bottom-color: rgb(164, 164, 164); border-bottom-style: solid; border-bottom-width: 1px; border-top-color: rgb(164, 164, 164); border-top-style: solid; border-top-width: 1px; color: #444444; font-size: 1.4em; font-weight: normal; padding: 3px 10px 3px 5px; text-transform: uppercase;"><span class="bterm" style="font-weight: 600;">GIF</span></th><th style="background: rgb(216, 216, 216) !important; border-bottom-color: rgb(164, 164, 164); border-bottom-style: solid; border-bottom-width: 1px; border-top-color: rgb(164, 164, 164); border-top-style: solid; border-top-width: 1px; color: #444444; font-size: 1.4em; font-weight: normal; padding: 3px 10px 3px 5px; text-transform: uppercase;"><span class="bterm" style="font-weight: 600;">JPEG</span></th><th style="background: rgb(216, 216, 216) !important; border-bottom-color: rgb(164, 164, 164); border-bottom-style: solid; border-bottom-width: 1px; border-top-color: rgb(164, 164, 164); border-top-style: solid; border-top-width: 1px; color: #444444; font-size: 1.4em; font-weight: normal; padding: 3px 10px 3px 5px; text-transform: uppercase;"><span class="bterm" style="font-weight: 600;">PNG</span></th><th style="background: rgb(216, 216, 216) !important; border-bottom-color: rgb(164, 164, 164); border-bottom-style: solid; border-bottom-width: 1px; border-top-color: rgb(164, 164, 164); border-top-style: solid; border-top-width: 1px; color: #444444; font-size: 1.4em; font-weight: normal; padding: 3px 10px 3px 5px; text-transform: uppercase;"><span class="bterm" style="font-weight: 600;">TIFF</span></th></tr>
<tr class="trbgodd" style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; padding: 0px; vertical-align: top;"><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">Post an image on a Web page</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td></tr>
<tr class="trbgeven" style="background-color: #f3f3f3; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; padding: 0px; vertical-align: top;"><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">Export easily to other computer imaging programs</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td></tr>
<tr class="trbgodd" style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; padding: 0px; vertical-align: top;"><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">Compress a large image to create a small file to send in e-mail</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td></tr>
<tr class="trbgeven" style="background-color: #f3f3f3; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; padding: 0px; vertical-align: top;"><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">Use transparent areas in images</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td></tr>
<tr class="trbgodd" style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; padding: 0px; vertical-align: top;"><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">Create animation files</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td></tr>
<tr class="trbgeven" style="background-color: #f3f3f3; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; padding: 0px; vertical-align: top;"><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">Decompress images without loss of quality</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td></tr>
<tr class="trbgodd" style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; padding: 0px; vertical-align: top;"><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">Create highest quality images (for publishing, etc.)</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td></tr>
<tr class="trbgeven" style="background-color: #f3f3f3; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; padding: 0px; vertical-align: top;"><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">Display millions of colors in an image</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td></tr>
<tr class="trbgodd" style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; padding: 0px; vertical-align: top;"><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">Retain image quality through numerous saves</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;"></td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td><td style="color: #444444; font-size: 1.4em; margin: 0px; padding: 4px 10px 4px 5px; vertical-align: top;">X</td></tr>
</tbody></table>
</div>
<div style="background-color: white; color: #444444; font-family: 'Segoe UI', SegoeUIWF, Arial, sans-serif; font-size: 1.4em; line-height: 1.286em; margin-bottom: 10px; margin-left: inherit; padding: 0px;">
<span class="cntnote" style="background: rgb(249, 249, 249); border-bottom-color: rgb(234, 234, 234); border-bottom-width: 1px; border-style: solid none; border-top-color: rgb(234, 234, 234); border-top-width: 1px; font-size: 0.92em; line-height: 1em; margin: 20px 0px 5px; padding: 0px 2px 1px 1px; text-transform: uppercase;"> NOTE </span> The formats that are generally used for Web pages are GIF and JPEG. When you add a graphic other than a GIF or JPEG to a page and then save it, FrontPage automatically converts the graphic to a GIF if it has 8 bits of color or less, or to a JPEG if it has more than 8 bits of color.</div>
<div style="background-color: white; color: #444444; font-family: 'Segoe UI', SegoeUIWF, Arial, sans-serif; font-size: 1.4em; line-height: 1.286em; margin-bottom: 10px; margin-left: inherit; padding: 0px;">
<br /></div>
<div style="background-color: white; color: #444444; font-family: 'Segoe UI', SegoeUIWF, Arial, sans-serif; font-size: 1.4em; line-height: 1.286em; margin-bottom: 10px; margin-left: inherit; padding: 0px;">
<br /></div>
jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-12708498210869174602014-07-28T07:14:00.001-07:002014-07-28T07:14:33.232-07:00"max element depth constraint violated" in Word 2013 from a document created in Word 2010<br />
This is the solution by Doug Robbins that worked for me.<br />
<br />
http://answers.microsoft.com/en-us/office/forum/office_2013_release-word/word-2013-error-operation-aborted-max-element/5dac9b2d-c145-4aea-9c20-3f50d1889dd0<br />
<br />
<div style="-webkit-font-smoothing: antialiased; background-color: white; border: 0px; color: #333333; font-family: 'Segoe UI', Arial, sans-serif; font-size: 13px; min-height: 19px; padding: 0px; vertical-align: top;">
</div>
<div style="-webkit-font-smoothing: antialiased; background-color: white; border: 0px; color: #333333; font-family: 'Segoe UI', Arial, sans-serif; font-size: 13px; min-height: 19px; padding: 0px; vertical-align: top;">
"Another thing that you might try on a copy of the document is to change the extension to .zip and the open the archive and delete the WebSettings.xml file from the archive. Others have reported that has overcome problems with documents."</div>
<div style="-webkit-font-smoothing: antialiased; background-color: white; border: 0px; color: #333333; font-family: 'Segoe UI', Arial, sans-serif; font-size: 13px; min-height: 19px; padding: 0px; vertical-align: top;">
<br /></div>
<div style="-webkit-font-smoothing: antialiased; background-color: white; border: 0px; color: #333333; font-family: 'Segoe UI', Arial, sans-serif; font-size: 13px; min-height: 19px; padding: 0px; vertical-align: top;">
Rename file extension to .zip. Open find the WebSettings.xml in one of the subdirectories. Delete. Close. Rename extension back to .docx. Open in Word as normal</div>
<div style="-webkit-font-smoothing: antialiased; background-color: white; border: 0px; color: #333333; font-family: 'Segoe UI', Arial, sans-serif; font-size: 13px; min-height: 19px; padding: 0px; vertical-align: top;">
<br /></div>
<div style="-webkit-font-smoothing: antialiased; background-color: white; border: 0px; color: #333333; font-family: 'Segoe UI', Arial, sans-serif; font-size: 13px; min-height: 19px; padding: 0px; vertical-align: top;">
I'm filing it here for my own personal quick reference. He suggested some other options. See the original link.</div>
<div style="-webkit-font-smoothing: antialiased; background-color: white; border: 0px; color: #333333; font-family: 'Segoe UI', Arial, sans-serif; font-size: 13px; min-height: 19px; padding: 0px; vertical-align: top;">
<br /></div>
<div style="-webkit-font-smoothing: antialiased; background-color: white; border: 0px; color: #333333; font-family: 'Segoe UI', Arial, sans-serif; font-size: 13px; min-height: 19px; padding: 0px; vertical-align: top;">
<br /></div>
jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-52177854506863488182014-07-17T07:07:00.000-07:002014-08-16T10:38:07.587-07:00Publication Quality Legends in ExcelI've already written about making publication quality figures in excel. The legends still cause problem since you can't edit individual characters.<br />
<br />
For instance, if I have a legend label z = 0, "z" needs to be italics since it's a variable. I can only italic the entire entry "<i>z=0</i>". This is incorrect since the "0" shouldn't be italic.<br />
<br />
The quick and dirty answer is to insert a text box and set the correct legend entries there, then move it over the top of the original entries to cover them up. EXCEPT, you can adjust the size of the legend causing the spacing between entries to also adjust, but you can't adjust the spacing in a text box. For me, I run the risk of running out of real estate on the figure because I can't make the legend smaller than the text box.<br />
<br />
I have mathtype (this may work in equation editor too) so what I've done is typeset the legend entries in mathtype and copy them to the excel figure one at a time. Make sure you have the cut and copy preferences set to MathML or LaTeX or else they won't embed into the figure and therefore, won't copy to word as an excel object (exporting as image should work though).<br />
<br />
If you have your figure set up like I do in my previous post and the cut and copy preferences set, then each mathtype equation will show up as a picture. For equations without subscripts and superscripts, setting the picture height to 0.16 will make the text 9 point - which is what I use for figures and captions. Equations with Subscripts and Superscripts or fractions may have to be adjusted differently.<br />
<br />
Once I have all the labels inserted, I align and group them and set the background to white.<br />
<br />
Other plotting software can handle individual characters in legends. Excel should be able to as well.jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0tag:blogger.com,1999:blog-3780329795421027996.post-91335415143932329722014-02-05T10:07:00.002-08:002014-02-05T10:09:07.691-08:00Gaps in Prime Numbers (Repost of Chaos in Prime Numbers from my other blog)This post was originally posted on my original attempt at blogging<br />
http://ionlyreadthearticles.blogspot.com/2008/06/chaos-in-prime-numbers.html<br />
<br />
I decided to copy it here after watching a Numberphile video on YouTube<br />
http://www.youtube.com/watch?v=vkMXdShDdtY<br />
<br />
This video talked about the Gaps in Prime Number and about a gentleman by the name of Yitang Zhang who showed that you can bound the difference between prime numbers.<br />
<span style="background-color: white; color: #222222; font-family: Arial, sans-serif; font-size: 13px; line-height: 16.1200008392334px;"><br /></span>
<span style="background-color: white; color: #222222; font-family: Arial, sans-serif; font-size: 13px; line-height: 16.1200008392334px;">Zhang, Yitang. "Bounded gaps between primes." </span><i style="background-color: white; color: #222222; font-family: Arial, sans-serif; font-size: 13px; line-height: 16.1200008392334px;">Ann. of Math., to appear</i><span style="background-color: white; color: #222222; font-family: Arial, sans-serif; font-size: 13px; line-height: 16.1200008392334px;">.</span><br />
<br />
Another article discussing Zhang's proof is given here:<br />
http://www.dms.umontreal.ca/~andrew/CurrentEventsArticle.pdf<br />
<br />
When I was in gradschool, I conducted a numerical experiment that plotted the distance between two consecutive prime numbers vs the distance to the next prime number<br />
<br />
If A is prime, B is the next prime, and C is the next prime, then I calculated and plotted B-A vs C-B. It resulted in a very interesting and repeatable pattern. I continued by taking the second and third differences and plotting them as well. Everything was very consistent. It was a small numerical experiment that didn't have any mathematical proof associated with it and I didn't do much followup work. Now that the math behind my experiment is available, I would be curious to know if my post had any influence.<br />
<br />
Here is the original post:<br />
<h2 class="date-header" style="background-color: #214552; color: #3d81ee; font-family: Arial, sans-serif; font-size: 15px; margin: 0px 0px 0.5em;">
Sunday, June 8, 2008</h2>
<div class="date-posts" style="background-color: #214552; color: white; font-family: Arial, sans-serif; font-size: 12px;">
<div class="post-outer">
<div class="post hentry uncustomized-post-template" itemprop="blogPost" itemscope="itemscope" itemtype="http://schema.org/BlogPosting" style="margin: 0px 0px 2em;">
<a href="https://www.blogger.com/blogger.g?blogID=3780329795421027996" name="7726463702582713987"></a><br />
<h3 class="post-title entry-title" itemprop="name" style="color: #80ff00; font-size: 25px; line-height: 1.4em; margin: 0px 0px 0.25em;">
Chaos in Prime Numbers</h3>
<div class="post-header">
<div class="post-header-line-1">
</div>
</div>
<div class="post-body entry-content" id="post-body-7726463702582713987" itemprop="description articleBody">
About a year ago I sat in on a seminar by Dr. Boris Kupershmidt on the topic of prime numbers. I'm not a mathematician and therefore most of what he said went right over my head. He did say something, however, that caught my attention: "The distribution of prime numbers is chaotic." If I remember right he was referring to "small" prime numbers. Of course in number theory 10^16 is "small." I had previously taken a course in nonlinear systems and had studied chaos. Mathematical chaos has a very interesting and subtle structure; there is order in chaos. My post entitled <a href="http://ionlyreadthearticles.blogspot.com/2008/03/mathematical-perspective-of-global.html" style="color: #777766; text-decoration: none;"><em>A Mathematical Perspective of Global Warming </em></a><em></em>talked about chaos in the weather. Anyway, I am enthralled with chaos to the point that I see<a href="http://en.wikipedia.org/wiki/Strange_attractor" style="color: #777766; text-decoration: none;">strange attractors</a> everywhere. Every time I see a flag blowing in the wind I see a strange attractor. My work in hydrodynamic instability deals with turbulence and turbulence is very closely related to chaos so I get a personal satisfaction of coupling my work with my perspective of nature. I digress. I decided to see for myself if by "chaotic" he meant chaotic in the mathematical sense or chaotic in the nonmathematical vernacular.<br />
<span xmlns=""></span><br />
<div style="line-height: 1.6em; margin-bottom: 0.75em;">
<span xmlns="">I read a book by <a href="http://en.wikipedia.org/wiki/James_Gleick" style="color: #777766; text-decoration: none;" title="James Gleick">James Gleick</a> called <em>Chaos: Making a New Science</em><a href="http://en.wikipedia.org/wiki/Special:BookSources/0140092501" style="color: #777766; text-decoration: none;">ISBN 0-140-09250-1</a>. In it he discussed a group from the University of California at Santa Cruz called the Dynamical Systems Collective. They devised an experiment to find attractors in water dripping from a faucet. They saw that in general, the water dripped at a steady rate. If the faucet was disturbed they could force the drips to fall in groups. In order to visualize the attractor they plotted the time between one drip verses the time for the next. The plots showed "blobs" centered around two points for pairs of drips, three points for 3 drips and so forth. I got the idea to plot prime numbers in the same way: the "distance" on a number line between one appearance of a prime and the next. Low and behold some very interesting patterns emerged!</span></div>
<span xmlns="">
<div style="line-height: 1.6em; margin-bottom: 0.75em;">
The first plot shows the result for the first 100000 primes. Many points actually plot on top of each other. The more points you plot the more complete the graph becomes and the farther it extends in both the x and y directions. However, this is extremely slow since so many plot directly on top of each other.</div>
<div style="line-height: 1.6em; margin-bottom: 0.75em; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg47_bKxaqrhxj17RgG7A7r-xZ5xL2f2UaO3TEpC7UeezLpx3QBbLE0DrTX30GZRD76xYAMS3hIbt8njTjdES-hOADTcfXhIFwyOI2axHioqmAifx82nKOLpjGYccRsim8cTAE7lUszmY/s1600-h/d1.jpg" style="color: #777766; text-decoration: none;"><img alt="" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg47_bKxaqrhxj17RgG7A7r-xZ5xL2f2UaO3TEpC7UeezLpx3QBbLE0DrTX30GZRD76xYAMS3hIbt8njTjdES-hOADTcfXhIFwyOI2axHioqmAifx82nKOLpjGYccRsim8cTAE7lUszmY/s320/d1.jpg" id="BLOGGER_PHOTO_ID_5209565045459981682" style="border: 5px solid rgb(255, 255, 255); cursor: pointer; display: block; margin: 0px auto 10px;" /></a></div>
<div style="line-height: 1.6em; margin-bottom: 0.75em;">
My next idea was to take the second difference and plotting it against the first difference</div>
<div style="line-height: 1.6em; margin-bottom: 0.75em; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgd_QnXHogzc2y_kb90utCMg6mt3IryFdBZv28VgeSOea_DRox06S0rFiVTrXhUdQSikyYxv6PrjAhG6Miy_R9ff161cYyq0ikc4jiWLohMMfpgrkgKwCF2go9_-cmDbb_n1eOOzLcMW4/s1600-h/d2.jpg" style="color: #777766; text-decoration: none;"><img alt="" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgd_QnXHogzc2y_kb90utCMg6mt3IryFdBZv28VgeSOea_DRox06S0rFiVTrXhUdQSikyYxv6PrjAhG6Miy_R9ff161cYyq0ikc4jiWLohMMfpgrkgKwCF2go9_-cmDbb_n1eOOzLcMW4/s320/d2.jpg" id="BLOGGER_PHOTO_ID_5209565228402664834" style="border: 5px solid rgb(255, 255, 255); cursor: pointer; display: block; margin: 0px auto 10px;" /></a></div>
<div style="line-height: 1.6em; margin-bottom: 0.75em;">
I took the 3<sup>rd</sup> difference and plotted it against the 2nd difference</div>
<div style="line-height: 1.6em; margin-bottom: 0.75em; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1YuPTRIR9wrs5ZNz9U2e9u9R8RJBqy1mJHVSbMlKhnA0WhYRZWjaCyXJw5cTIty5rNW4AIPXewAlqNhHbMiYAHg9f72m4Yto7CT_nKwudKbDouWWDefGTui1fhrW-zlM3BX5CQicLlOI/s1600-h/d3.jpg" style="color: #777766; text-decoration: none;"><img alt="" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1YuPTRIR9wrs5ZNz9U2e9u9R8RJBqy1mJHVSbMlKhnA0WhYRZWjaCyXJw5cTIty5rNW4AIPXewAlqNhHbMiYAHg9f72m4Yto7CT_nKwudKbDouWWDefGTui1fhrW-zlM3BX5CQicLlOI/s320/d3.jpg" id="BLOGGER_PHOTO_ID_5209565323819561506" style="border: 5px solid rgb(255, 255, 255); cursor: pointer; display: block; margin: 0px auto 10px;" /></a></div>
<div style="line-height: 1.6em; margin-bottom: 0.75em;">
Beyond that, the pattern wasn't much different and the shape of the envelope only changed slightly.</div>
<div style="line-height: 1.6em; margin-bottom: 0.75em;">
As far as predicting prime numbers, I can't really comment on these results other than they seem to give an envelope in which many primes clearly fall and inside the envelope comes organized patterns so that one would not (so) blindly test for primes. As far as theory goes, I'm not worthy enough to even try. The most recent developments in Riemann's Conjecture and computational experiments in prime numbers suggest that this is likely to have been an exercise in futility. That's why I figured it was safe to post this to a blog rather than somewhere in the mathematical community. Either way, if somebody does find this important, I would appreciate some credit!</div>
<div style="line-height: 1.6em; margin-bottom: 0.75em;">
And now a deep thought…</div>
<div style="line-height: 1.6em; margin-bottom: 0.75em;">
Is our definition of mathematics universal?</div>
</span><br />
<div style="clear: both;">
</div>
</div>
<div class="post-footer" style="color: #80ff00;">
<div class="post-footer-line post-footer-line-1">
<span class="post-author vcard">Posted by <span class="fn" itemprop="author" itemscope="itemscope" itemtype="http://schema.org/Person"><span itemprop="name">Dr. Joshua W. Batterson</span> </span></span><span class="post-timestamp">at <a class="timestamp-link" href="http://ionlyreadthearticles.blogspot.com/2008/06/chaos-in-prime-numbers.html" rel="bookmark" style="color: #777766; text-decoration: none;" title="permanent link"><abbr class="published" itemprop="datePublished" style="border: none;" title="2008-06-08T12:31:00-05:00">12:31 PM</abbr></a></span><span class="reaction-buttons"></span><span class="star-ratings"></span><span class="post-comment-link"></span><span class="post-backlinks post-comment-link"></span><span class="post-icons"></span></div>
<div class="post-footer-line post-footer-line-2">
<span class="post-labels">Labels: <a href="http://ionlyreadthearticles.blogspot.com/search/label/Chaos" rel="tag" style="color: #777766; text-decoration: none;">Chaos</a>, <a href="http://ionlyreadthearticles.blogspot.com/search/label/mathematics" rel="tag" style="color: #777766; text-decoration: none;">mathematics</a>, <a href="http://ionlyreadthearticles.blogspot.com/search/label/prime%20numbers" rel="tag" style="color: #777766; text-decoration: none;">prime numbers</a></span></div>
</div>
</div>
</div>
</div>
jbattershttp://www.blogger.com/profile/03449257267244924388noreply@blogger.com0