Showing posts with label generalities. Show all posts
Showing posts with label generalities. Show all posts

Sunday, February 11, 2018

Something new - recommendations

My purpose for posting these blogs is not to brag about my own exploits. It's to encourage others to go out and experience their own worlds. To emphasize that, I will begin putting suggestions for others that want to explore some of the topics in their areas.

That sounds a little pompous to me. Who am I to tell you how to explore your world? There are parts of the world where I would be lost, without a clue as to what's going on. With that in mind, I don't take my suggestions and necessary or sufficient.

They're not necessary because your own creativity is your best guide. These are just some ideas that might give you inspiration or somewhere to start. There are so many other ways to approach these subjects, I couldn't hope to scratch the surface.

They're not sufficient because I can't hope to encapsulate everything about any topic. You might start where I left off and go in a completely different direction.

And remember, you can post comments. Adventure can be in interaction with others. I like diversity. I would like to hear other's ideas. I would like to see people disagree with me (and why). And, especially, I would like to read others' stories.

It's a new year and I'm looking at new things. I hope you stay with me and go much farther than I have. Explore your world - and, maybe, even change it.

Wednesday, August 9, 2017


--- Your adventures ---

2016

Andalusia is far south in Alabama. There are no mountains near there. It's far south of the fall line. But there is a waterfall about 5 miles north of there. It's in a little town called River Falls and I was curious as to why a town that far south would be called "River Falls", so I drove down there one weekend to find out.

I asked several people if there was a waterfall in the area and no one knew until I stopped at a convenience store, ready to give it up and go back home. I asked the counter person, who didn't know but said that, if anyone did know, it would be the lady over there, a mail carrier. Sure enough, she knew and gave me directions to an impressive waterfall in town.



                                                        Photo of River Falls waterfall

It's my experience that people don't know what they have in their own neighborhoods.

Adventure can be near or far. It can be as simple as cooking a new dish or as complex as a vacation in a place that you've never visited. A surgical procedure is definitely an adventure. Do you dare go to YouTube and find a video of the same procedure?

But above all, an adventure can be a learning experience. Where are your adventures?


Thursday, August 3, 2017


--- Cool lectures for computer enthusiasts ---

2016

The best computer science video courses I have been able to find online are the Harvard courses presented by David J. Malan, a clear and entertaining presenter.

Intensive Introduction to Computer Science (https://cs50.harvard.edu/weeks)

Understanding Computers and the Internet
(See Academic Earth's Computer Science Courses on http://academicearth.org/computer-science/)

There are also many more open courses available at Academic Earth.

The University of Washington also presents a History of Computing course with instructors Ed Lazowska, Steve Maurer, and Geoff Voelker which could not be more in-depth with guest speakers who are the history of computing. In addition to video lectures, the course is loaded with graphic slides and other materials. It is available here:

http://courses.cs.washington.edu/courses/csep590a/06au/

(The above websites were accessed 7/30/2017)


Wednesday, July 26, 2017


--- Websites, Blogs, and Videos...Oh my!! ---

2016

Actually, media is a new thing for me - on computers anyway. I operated the media department of the School of Pharmacy at Auburn University as a work-study student back in the 70s but computers didn't have much of a part there. I picked up an equivalent of a minor in computer science - I already had three minors, though, so I didn't get to claim it. Comparing those computers with this one (the one I'm using to compose this blog) is sorta funny.

Computer graphics back then was - okay, I won't go there.

I've even been exposed to HTML, but I can't do everything all at once. I didn't compose this blog from scratch. Fact is, I took the easy way out and used Google Blogger. But, then, I like the results - don't reinvent the wheel - right? All you have to do is just put everything together the way you want it.

I already had a website - The Therian Timeline. I took the easy way with that, too. I used Site Solution, a service provided by Yahoo Aabaco Small Business services. Again, you just tell it what you want and it does it.

I could have chosen a bunch of other such throw-it-together tools on the Internet but, you get the idea.

I'm working on a series of science demonstration videos to go along with my blogs for when I get to physics in a couple of years. See, I plan ahead! I'm a new hand to computer videos so, you guessed it - I took the easy way.

My laptop already had a video program called Dell Webcam Central, so I'm using it to put together videos, along with a desktop recorder called CamStudio Recorder. That way, I can display everything I put on the video - LibreOffice Impress presentations, spreadsheets, webcam videos, whatever - and CamStudio will record it all. So, if I can just live long enough....

Well, you'll get to see it if I do.

Until, then, I'll be here.

Stay well.
Wolf


Tuesday, July 18, 2017


--- Museums ---

2016

Museums are great places to learn.

Just visiting a museum provides opportunities to pick up things you didn't know before - not too good for picking up practical knowledge or skills. but many museums offer classes, workshops and field trips.

I've never lived in an area that didn't have museums. Most of the museums around Valley, Alabama, where I grew up, were in nearby cities like Opelika, Auburn, and Columbus, but the University at Auburn was packed with museums and I see that at least one old closed mill has been turned into a historic museum in Lanett, Alabama (It's called The Cannery).

Most university buildings maintain displays. I used to enjoy walking through the buildings at Auburn University. The art school was practically an art museum itself, hosting exhibits of the works of well known artists and showing the works of students. Between building were places like the Arboretum and the Eagle mascot's aviary.

Large towns are often cultural centers. Denver is loaded with museums and theaters. Within my hiking range is an outdoor art museum and a great paleontology museum. And then there's Dinosaur Ridge which includes two indoor museums and the side of a mountain.

I maintain a family membership with the Denver Museum of Nature and Science which provides exhibits, films, IMax, a planetarium, crowd sourced research  opportunities, classes, workshops, field trips and entertainment. In the neighborhood is also the Denver Botanic Gardens and the Denver Zoo. It's an easy train ride and hike through Capitol Hill (where the Capitol is) with great examples of architecture, from home to the museum.

I went in search of a more convenient path to the large Walmart in my area. The way I had been taking was a full day's hike. My plan was to walk through River Point shopping area to Oxford Station, catch the train to Englewood Station and walk the short distance from there to the Walmart. It was an improvement and the bonus was that my trail lead through the Denver Museum of Outdoor Arts.

This is a strange concept. There is no one building (though there is a central headquarters and indoor museum) and the museum is scattered all over Denver There is a website (http://moaonline.org/) so you can plan a visit. They even have a walking tour brochure that you can download. I went through the Englewood exhibition in December, so the central piece was a Christmas Tree.






I'll be utilizing the museums of Denver in future blogs and I'll be remembering museums of my past.

Sunday, July 16, 2017


--- Crosstabulation ---

2016

Until I figured out how to create stub and banner tables with LibreOffice pivot tables, I was considering making a tabling routine for DANSYSX but that would be redundant, so my focus for crosstabulation became just the 2-way and 3-way statistics programs. Since they are involved and, from scratch, it will give me a chance to talk about my structured approach to developing Calc routines.

XTab is a big (!) matrix function, but it's a sequential function, meaning that it has many procedures that are completed before the next process is started. My first task is to outline the processes with comments. A comment in LibreOffice Basic begins with a single apostrophe. Here, I include a header:

FUNCTION XTab(optional InMat,optional InType, optional CellCont as string,
_)

(It's not complete, because I'll be adding parameters as different procedures require them.) Then, comes a descriptive comment:

'Performs a complete analysis on crosstabulation data
'from a raw data table or a crosstabulation of data.
'The input is the data and the output is a matrix containing
'a stub-and-banner table of cell data followed by
'a table of statistics. InType=1 (Crosstab), 2 (raw data)
'CellCont is a binary string designated data to be displayed in
'cells of output: 10 places: counts, exp counts, row%, column%,
'Total%, residuals, stand. residuals, adj, residuals, chi square,
'likelihood chi square, odds, compare column proportions (Bonferroni).

and a declarations and initialization section:

'Declarations and initialization. If InMat isn't specified,
'InMat=MatArray1. If InType isn't specified, InType=1 (crosstab).
'If CellCont isn't specified, CellCont="100000000000"

DIM OutMat(), Xi(), Yj(), OutR as integer, OutC as integer
DIM I AS INTEGER, J AS INTEGER, K AS INTEGER, L AS INTEGER

That will also grow as I add code. I'll declare other variables in alphabetical order, inserting each as I use them, so I can keep up with names that I've used. Double declarations and accidentally using the same variable for multiple purposes without knowing it can be major headaches.

Then, I know that I'll have to crosstabulate data if a raw data table is fed to the function, so I annotate that section:

'Crosstabulation, if needed.


Redim OutMat(), Xi(1,2), Yj(1,2)

Thinking ahead, I know I'll have to redimension the output matrix when I know what the stub-and-banner part of the display will look like. Everything below that will be pretty straightforward and I can add size as I finish each section. Each section is independent of the ones below it, so I can test each one as I finish it. I have a test data on the Report sheet of DANSYSX that I will use to progressively test each section.

The final section will just display the OutMat matrix which, by that time, will already be constructed by the procedures I have coded. OutMat is a convention I use for all macros that display a matrix.

I will have the crosstabulation saved in MatArray3, just to increase it's utility and make it compatible with the matrix functions I've programmed for DANSYS and DANSYSX.

I use a lot of spreadsheet functions in the program and that's a little tricky. The topic isn't covered in the programming guide, but you can find information online.

To use a spreadsheet function in a Basic routine, you must first declare an object variable to hold the function. You only have to declare it once since you can't use more than one spreadsheet function at a time. I use the same name, svc, and declare it as an object variable:

DIM svc AS OBJECT

Then the variable has to be set as a function variable. That only has to be done once, also.

svc=createUnoService("com.sun.star.sheet.FunctionAccess")

Uno is the object manipulation language used by LibreOffice. This statement invokes a Uno service called FunctionAccess.

After the variable is set, it can be used to call spreadsheet functions such as :

PCS=svc.CallFunction("CHIDIST",Array(CSQW,dfCS))

This statement calls the CHIDIST spreadsheet function. CHIDIST evaluates a chi square value at a specified degrees of freedom value. The CallFunction method for a function variable requires the name of the function as a string (in quotes) followed by the information to be transferred to the function in an array. The function requires a value and degrees of freedom (if you look the function up in the Calc Function Wizard, you can see the structure of the function) to be passed as an array. Even if you pass an array to a spreadsheet function, you have to use the Array statement followed by the name of the array in parentheses. You can see that here:

XMIN=SVC.CALLFUNCTION("MIN",ARRAY(Eij))

in a statement that finds the minimum value in the array Eij.

To get the return value, a variable, PCS, is set equal to the function variable.

One of the aggravating things about LibreOffice Basic is you can't return a matrix like this, which is why I went about programming a complete matrix language for DANSYS.

Displaying the results is easy. I just set the function to the output matrix, like:

XTab=OutMat.

There was some debugging that had to be done, but you can see the final product when I post DANSYSX in the Therian Timeline, here:

http://www.theriantimeline.com/excursions/labbooks

Note: DANSYSX version 1.0 is available now on the timeline.



Saturday, July 15, 2017

I figured the take away for the fourth Indiana Jones movie was, "seems we've reached an age when life stops giving you things and starts taking them away." And the implicit answer is that life can surprise you at any age.

This last relocation was an unpleasant jar but I think we might have come out better. I guess my biggest regret is that, now, we're further from the mountains than I've been since I moved to Colorado. In Broomfield, I was just far enough away that I could walk up to them close enough to be able to spit on them, but then I couldn't go any further. In South Harvey Park, I could walk a little ways into them. Now, on foot, I wouldn't even be able to get close, but, luckily, I'm learning to use the transportation resources around here and the buses and trains can get me places I never could go before.

The good thing is that there is a lot around here. My favorite restaurant is within walking distance. The University of Denver is right up the street and between here and there there is an operating observatory and a line of parks along Harvard Gulch. Also, the bus that stops in front of our house makes a beeline to City Park, which includes the zoo and the science and nature museum. I'm expecting some exciting adventures in my future.

I walked to the local library the second time today. It's an easy walk sans that killer hill above Bear Creek. The area is lushly packed with trees and the walk isn't far. The library is well stocked and, being a part of the Denver library system, cooperates with the other libraries in the area to provide a huge selection of books and other media. They also have an interesting calendar. I expect to be spending a lot of time there. Here's a picture of the Ross-University Hills branch of the Denver Public Library. The building itself is interesting - modern art.



Tuesday, July 11, 2017


--- Graphics ---

2016

One of my more frustrating programming episodes occurred with one of OpenOffices updates. I tried to install the new version and it wouldn't install. The suggestion on the user forum was to uninstall the older version and then try to install the new version. The new install still didn't work so I had no working version of OpenOffice and a lot of work on DANSYS that I had not saved. Dumb of me - irritating of OpenOffice. That was when I decided to junk OpenOffice and switch to LibreOffice.

The biggest loss was a set of programs I had put a lot of work into that expanded the ability of OpenOffice Calc to produce statistical graphs. They constituted a graph building suite. Instead of creating a set of predesigned graphs (as with the charts currently produced by Calc), I could build graphs from elements such as axes, points, lines, and such. I decided to ditch the idea. I just didn't have the heart to redo all that work, and I had other programs that would produce all the statistical graphs I would ever need.

But then I started thinking (often a big mistake, but one that often leads to adventure) that it would be nice to have DANSYSX be able to generate some simple graphics. Points and lines and such are useful for a lot more than making statistical graphs.

One limitation of spreadsheet functions is that they can only output data into cells, so I couldn't use functions to generate geometrical objects on a spreadsheet. I would have to use subroutines, and thus commands, to do the job, and that meant creating a menu of graphical commands.

I also wanted to be able to translate the positions of the geometrical objects into a specified area - a frame. I had done that with the OpenOffice commands, so I should be able to do it again for LibreOffice.

This is a different kind of programming than creating a function to output a value or matrix of values. I had to actually place objects on a spreadsheet. That meant that I had to have the program determine where everything had to go and place it there. LibreOffice Basic can do that and I'll show you the frame routine. You can find the others in the Graphics folder of the DANSYSX macros.

One thing I remember doing over and over in the older programs was translating data points from one range (the range of data values) to another (the range of positions on a frame on a spreadsheet). That got old, so, this time I created a very simple function to do that. It looks like this:

Function Rescale(c,a,b,y,z)
'Rescales a value, c, between a and b to be proportionally
'between y and z)
Rescale=(c-a)*(z-y)/(b-a)+y

End Function

That was easy and, if you went through the article, DANSYSX: Complex cubic equations, you know what that all means.

The way I had the older macros work is that the user would create a specification form on a spreadsheet for a specific object, fill it out, process the specifications, and then display the object on the spreadsheet.  I've trimmed this four step process down in DANSYSX except for the frame. You still have to process the specifications for the frame. A frame has to be generated (whether it's displayed or not) so LibreOffice knows where to place the graphics object.

The Specification routine is tedious (there's a lot of information required to specify the frame) but straightforward. A frame is just a rectangle. Draw a rectangle and you have a frame that you can situate everything else on.

The only complication is that I need different specifications according to the kind of background to have on the frame, so I had to work up a dialog to select the kind of background before printing the specification form.

Here is the specification routine:

SUB FrameSpec()
'Prints out a frame specification form onto a spreadsheet
'beginning at the current cell.
DIM I AS INTEGER, J AS INTEGER
DIM RP, CP, DLG AS OBJECT, STL AS INTEGER, LBX AS OBJECT
DIM oDoc AS OBJECT, oSheet AS OBJECT, oSel AS OBJECT
DIM addr AS OBJECT, M AS INTEGER, N AS INTEGER
DIM oCell AS OBJECT, oView AS OBJECT



'Display dialog Frame

DialogLibraries.LoadLibrary("Standard")
DLG=CreateUnoDialog(DialogLibraries.Standard.Frame)
DLG.Execute()


LBX=DLG.getControl("ListBox1")
STL=LBX.SelectedItemPos

IF DLG.Execute()=0 THEN EXIT SUB


'Print form
 oDoc=ThisComponent
 oView=ThisComponent.getCurrentController()
 oSheet=oView.getActiveSheet()
 oSel=oDoc.getCurrentSelection
 addr=oSel.getRangeAddress()

 m=addr.StartRow
 n=addr.StartColumn

oCell=oSheet.getCellByPosition(n,m)
oCell.String="Frame"
oCell=oSheet.getCellByPosition(n,m+1)
oCell.String="Position 1/10 mm"
oCell=oSheet.getCellByPosition(n+1,m+2)
oCell.String="X"
oCell=oSheet.getCellByPosition(n+1,m+3)
oCell.String="Y"
oCell=oSheet.getCellByPosition(n,m+4)
oCell.String="Size 1/10 mm"
oCell=oSheet.getCellByPosition(n+1,m+5)
oCell.String="Width"
oCell=oSheet.getCellByPosition(n+1,m+6)
oCell.String="Height"
oCell=oSheet.getCellByPosition(n,m+7)
oCell.String="Margins: 1/10 mm"
oCell=oSheet.getCellByPosition(n+1,m+8)
oCell.String="Top"
oCell=oSheet.getCellByPosition(n+1,m+9)
oCell.String="Bottom"
oCell=oSheet.getCellByPosition(n+1,m+10)
oCell.String="Left"
oCell=oSheet.getCellByPosition(n+1,m+11)
oCell.String="Right"
oCell=oSheet.getCellByPosition(n,m+12)
oCell.String="Caption"
oCell=oSheet.getCellByPosition(n+1,m+13)
oCell.String="Top"
oCell=oSheet.getCellByPosition(n+1,m+14)
oCell.String="Bottom"
oCell=oSheet.getCellByPosition(n+1,m+15)
oCell.String="Left"
oCell=oSheet.getCellByPosition(n+1,m+16)
oCell.String="Right"
oCell=oSheet.getCellByPosition(n,m+17)
oCell.String="Transparency: percent"
oCell=oSheet.getCellByPosition(n,m+18)
oCell.String="Border"
oCell=oSheet.getCellByPosition(n+1,m+19)
oCell.String="Line Style: NONE, SOLID, DASH"
oCell=oSheet.getCellByPosition(n+1,m+20)
oCell.String="Line Color: RGB"
oCell=oSheet.getCellByPosition(n+1,m+21)
oCell.String="Line Transparency :percent"
oCell=oSheet.getCellByPosition(n+1,m+22)
oCell.String="Line Width: 1/10 mm"
oCell=oSheet.getCellByPosition(n+1,m+23)
oCell.String="Line Joint: NONE, MIDDLE, BEVEL, MITER, ROUND"
SELECT CASE STL
CASE=0
oCell=oSheet.getCellByPosition(n,m+24)
oCell.String="Background: NONE"
CASE=1
oCell=oSheet.getCellByPosition(n,m+24)
oCell.String="Background: SOLID"
oCell=oSheet.getCellByPosition(n+1,m+25)
oCell.String="Red"
oCell=oSheet.getCellByPosition(n+1,m+26)
oCell.String="Green"
oCell=oSheet.getCellByPosition(n+1,m+27)
oCell.String="Blue"
CASE=2
oCell=oSheet.getCellByPosition(n,m+24)
oCell.String="Background: HATCH"
oCell=oSheet.getCellByPosition(n+1,m+25)
oCell.String="Style: SINGLE, DOUBLE, TRIPLE"
oCell=oSheet.getCellByPosition(n+1,m+26)
oCell.String="Color: RGB"
oCell=oSheet.getCellByPosition(n+1,m+27)
oCell.String="Distance: 1/100 mm"
oCell=oSheet.getCellByPosition(n+1,m+28)
oCell.String="Angle: 1/10 degree"
CASE=3
oCell=oSheet.getCellByPosition(n,m+24)
oCell.String="Bitmap - Named"
oCell=oSheet.getCellByPosition(n+1,m+25)
oCell.String="Name"
oCell=oSheet.getCellByPosition(n+1,m+26)
oCell.String="Style: REPEAT, STRETCH, NO_REPEAT"
CASE=4
oCell=oSheet.getCellByPosition(n,m+24)
oCell.String="Bitmap - URL"
oCell=oSheet.getCellByPosition(n+1,m+25)
oCell.String="URL"
CASE=5
oCell=oSheet.getCellByPosition(n,m+24)
oCell.String="Gradient - Named"
oCell=oSheet.getCellByPosition(n+1,m+25)
oCell.String="Name"
CASE=6
oCell=oSheet.getCellByPosition(n,m+24)
oCell.String="Gradient - Custom"
oCell=oSheet.getCellByPosition(n+1,m+25)
oCell.String="Style: LINEAR, AXIAL, RADIAL, ELLIPTICAL, SQUARE, RECT"
oCell=oSheet.getCellByPosition(n+1,m+26)
oCell.String="Start Color: RGB"
oCell=oSheet.getCellByPosition(n+1,m+27)
oCell.String="End Color: RGB"
oCell=oSheet.getCellByPosition(n+1,m+28)
oCell.String="Angle: 1/10 degree"
oCell=oSheet.getCellByPosition(n+1,m+29)
oCell.String="X Offset: 1/10 mm"
oCell=oSheet.getCellByPosition(n+1,m+30)
oCell.String="Y Offset: 1/10 mm"
oCell=oSheet.getCellByPosition(n+1,m+31)
oCell.String="Start Intensity: percent"
oCell=oSheet.getCellByPosition(n+1,m+32)
oCell.String="End Intensity: percent"
oCell=oSheet.getCellByPosition(n+1,m+33)
oCell.String="Step Count: number of color graduations"
END SELECT

It's long but fairly simple. It does illustrate how you can get things from a program onto a spreadsheet, though. Let's look at the sections.

Variables can be set to hold things like documents, sheets, cells, ranges, shapes, and such but they have to be declared as objects. This program uses several object variables.

DialogLibraries.LoadLibrary("Standard")
DLG=CreateUnoDialog(DialogLibraries.Standard.Frame)
DLG.Execute()


LBX=DLG.getControl("ListBox1")
STL=LBX.SelectedItemPos

IF DLG.Execute()=0 THEN EXIT SUB

This section displays the dialog that has the list box of styles for backgrounds. I constructed the dialog in the dialog editor (Select Macro>Organizer>Dialogs tab) with a listbox (I specified the items in the listbox in the properties settings for the listbox.), a Okay button, and a Cancel button. Here's what the dialog editor looked like:



"DialogLibraries.LoadLibrary("Standard")" loads the library that contains the Frame dialog.
"DLG=CreateUnoDialog(DialogLibraries.Standard.Frame)" sets the DLG object variable to contain the Frame dialog.
"DLG.Execute()" displays the dialog. As long as the dialog is displayed and working, nothing else runs in Calc.
"LBX=DLG.getControl("ListBox1")" loads the listbox1 control into object variable LBX and "STL=LBX.SelectedItemPos" gets the selected text string from the listbox1.
"IF DLG.Execute()=0 THEN EXIT SUB" specifies that, if the Cancel button is clicked (which generates a 0 from the DLG object), that the subroutine is closed without doing anything.

 oDoc=ThisComponent
 oView=ThisComponent.getCurrentController()
 oSheet=oView.getActiveSheet()
 oSel=oDoc.getCurrentSelection
 addr=oSel.getRangeAddress()

 m=addr.StartRow
 n=addr.StartColumn

The oDoc variable is set to contain the document that is currently open (DANSYSX)
The oView variable is set to contain the current documents view.
The oSheet variable is set to contain the currently active sheet in the view of the document.
The oSel variable is set to contain the currently active range (in this case, just one cell, the top left cell intended to start the Frame form.)
The addr variable contains the address structure of oSel. It contains the starting and ending cell row and columns as a data structure.

Data structures are addressed by the name of the data structure (in this case addr) followed by a period and the name of the specific value to be accessed. For instance, addr.StartRow returns the value of the StartRow value in addr. The integer variable m is set to the StartRow value and the integer variable n is set to the StartColumn value.

The rest of the subroutine is just a long list of statement of the form:

oCell=oSheet.getCellByPosition(n,m)
oCell.String="Frame"

Here, the oCell variable is set to the cell at column n and row m on the currently active sheet. Notice that cell positions are opposite to matrix positions. Matrix positions are addressed by (row,column); cell positions are addresses by (column, row) order. This is in keeping with the way cells are addressed on spreadsheets. A cell at position C5 is at column C and row 5. It's also not obvious here, but the first row on a spreadsheet is row 0, and the first column is column 0.

I use a Select Case structure to decide the labels to output onto the spreadsheet according to which background style is chosen. The Select Case structure works like this:

SELECT CASE (statement)
CASE (value)
CASE (value)
...
CASE (value)
END SELECT

The statement in the first line specifies what the following case values refer to. In this example, the case is the value of STL, the numerical position of the selected style in the dropdown list of the dialog. The first CASE statement is CASE 0, which is the value of the first item, NONE, in the list. If STL=0, the block of statements following CASE 0 is executed and, then, the other case statements are ignored. END SELECT marks the end of the Select Case structure. Notice that the Case values can be numerical or string values, inequalities like >5 or <=3, or statements like "between 2 and 5".

When this routine is run from the Graphics menu>FrameSpec, a form is printed onto the active spreadsheet beginning at the selected cell. This form can be filled in to specify a frame for other graphic objects.

Saving all this information so that it doesn't go away between sessions requires that I construct a hidden spreadsheet to save it on. You can see that by unhiding the Graphics sheet in DANSYSX. Right click on any sheet tab and select the Show Sheet... command. It will open a list of hidden sheet. Double click Graphics. Be careful and don't change anything. You'll the information generated by the FrameSpec command in the top part of the sheet. Below that, though, are several calculated value. These are values necessary to scale values to the frame, taking margin specifications into account.

The FrameGen command transfers information from the frame table to the FrameSpec sheet. It uses much of the same Basic and Uno commands but there are two sheets to deal with, the sheet the table is on and the FrameSpec sheet. You will recognize most of the code if you look at it.

This pattern is repeated a lot.

oCell=oSheet.getCellByPosition(n1+1,m1+0)
aCell=aSheet.getCellByPosition(1,0)
aCell.Value=oCell.Value

That, of course, transfers the information from the first column to the right and top row of the frame table to the first column and top row of the Frame Spec sheet. These lines are quite simple but tedious to write. Luckily, there is a lot of cut, paste, and modification going on.

There is an interesting little subroutine tagged onto the end that parses out a string of color specifications. Here, color is specified by three numbers from 0 to 225 specifying how much red, green, or blue is used to create the color desired. The subroutine is called using the statement:

GOSUB FG10

The cell containing the string is first specified as aCell. The subroutine has to come after the last line of the main subroutine:

EXIT SUB

and it must begin with the calling label. Here is the subroutine:

FG10: 'RGB subroutine. Sets R, G, and B.
RGBSTR=aCell.String
Clr=""
S=1
FOR I=1 TO LEN(RGBStr)
Clr=Clr & MID(RGBStr,I,1)
IF MID(RGBStr,I,1)="," OR I=LEN(RGBStr) THEN
IF S=1 THEN
R=Val(Clr)
ELSEIF S=2 THEN
G=Val(Clr)
ELSE
B=Val(Clr)
END IF
S=S+1
Clr=""
END IF
NEXT I

RETURN


 END SUB

The string in aCell is transferred into the RGBStr variable and the following loop structure takes the string apart, converting the parts between the commas into numerical values stored in the R, G, and B variables. The last line of the subroutine is RETURN, which switches processing back to the line immediately following the last GOSUB statement. Finally, the whole macro is closed out using the END SUB statement.

More than one subroutine with different line labels can be placed at the end of a macro, but they all have to come before the END SUB or END FUNCTION statement.

The FrameShow command acually places the graphics frame on the spreadsheet. It is just a drawn rectangle and the LibreOffice Basic Programmer's Guide very adequately explains how to code for various drawn shapes and I will direct you to that since there are a lot of possibilities, but I will point out a few things that it doesn't make terribly clear.

First, every spreadsheet has it's own drawing page. In Draw and Impress, this is pretty explicit, but not for Calc. The way the drawing page for the active sheet is specified is:

oSheet = aDoc.getcurrentcontroller.activesheet
DPAGE=oSheet.DrawPage

The first line defines the active sheet and loads it into an object variable (oSheet). The second loads the drawing page of oSheet into another object variable called DPAGE. Later, the frame, which is a rectangle stored in the object variable oRect, is placed on the drawing page by the following line:

DPAGE.add(oRect)

The frame is built up by sequentially adding the frame and all the specified captions (which are rectangles with text) with similar commands.

Other commands to create points, lines, ellipses, and boxes will be very similar. They will all be in the Graphics folder of the DANSYSX macro library.


Wednesday, June 28, 2017


--- Structuring programs ---

2016

My big project is a software package programmed into Calc, the LibreOffice spreadsheet component. The strength of this approach is that the statistics package already has all the utilities of a powerful spreadsheet. I call it DANSYS - the Data ANalysis System.

I'll be using DANSYS to talk about how to program in LibreOffice Basic. The manual, available at the LibreOffice website, is useful but there's a lot it doesn't explain how to do, and I've picked up a lot of tricks and workarounds over time. I'm working on an expanded version of DANSYS and I'll take you along on the journey.

I had to decide whether I wanted to just keep expanding DANSYS or make two versions: a basic version that does the most common statistical procedures and the expanded version that's much bigger and clunkier but will do many, many more cool things. I decided to go with the two version plan and both will be available on my other website (http://www.theriantimeline.com/excursions/labbooks) as I develop them. Currently, DANSYS and a statistics decision tree and glossary are available. I'm working on a user's manual for DANSYS and you'll see my progress on DANSYSX here.

Programming is a lot easier if you take a structured approach. Some languages (like Python) requires you to structure your programs. Others, like modern BASIC make it easy to structure programs but do not require it. Structured programming uses indentation to indicate levels of code (that will become much clearer as we go along). It also helps if you add notes to your code as you go along. This documentation serves two big functions: it reminds you what sections of code do if you need to go back and modify the code (which you often will), and it allows other people who use your code to understand what you've done.

I will admit that I sometimes slack off when it comes to documentation, but I will try to be responsible with the code in DANSYSX.

I try to maintain a five section structure for my LibreOffice Basic programs. The first section is the header. The first line of LibreOffice Baisc code names the program, tells whether the program is a subroutine or a function, and passes all the necessary information into the program.

The second section defines all the variables I'll be using in the program using DIM (DIMension) statements. I usually precede this section with a long comment explaining the program.

The third section initializes whatever variables need to start with some specific value.

The fourth section is where all the good stuff happens. It contains the works of the program.

The fifth and last section formats and outputs the data from the program.

Flow charts are useful to some people to help plan out complicated programs. I tend more to plot the way the program is supposed to work in pseudocode. Pseudocode describes the working of a program in descriptive English, line by line. For instance, if I want to add 1 to the variable bx over and over until it reaches 15, I might describe it with the following pseudocode:

bx=0
When bx reaches 15, jump out of the following loop
Add 1 to bx
Continue looping

More often, I type a scaffold of comments before I even start programming and then fill in the code. A comment in LibreOffice Basic looks like this:

'This is a comment. Notice that it begins with an apostrophe.
'LibreOffice Basic will ignore any statement beginning with an apostrophe.

[Note: If you've tried to use any of the in-text links to the Timeline, you will have found that they don't work anymore. That will be because I've moved it to a more secure site. I keep the links in the link section at the upper right of my webpages updated, and those do work.]


Wednesday, June 21, 2017


--- Flatirons Crossing ---

2016

Flatirons Crossing is a shopping district in the town of Superior, Colorado. I have been there several times when I lived in nearby Broomfield and a House brother works in Superior so, planning for my endurance hike, and needing to get back in shape after the hot summer, which is my off season for hiking, I decided to take a long hike in the high plains between Superior and the Flatirons.



The Coalton Trail is a nice, broad, dirt trail. The most demanding part is the grade up Davidson Mesa. Once on top, it's pretty flat all the way to highway 128. The primary draw through most of the year is the view of the Flatirons, a steeply folded series of dark sedimentary rocks that loom over Boulder, Colorado. The flat, platelike shapes give them their name. In the spring, I'm told, this area is a great hike for looking at wildflowers. The Coalton Trail ends at the Boulder Alternative Energy Research station at Rocky Flats, the site of a controversial weapons grade fissionable materials factory in the last half of the 20th Century. I carried a dosimeter along but it didn't twitch. Evidently, they did a good job cleaning it up.




A short road walk brought me to the Flatirons Vista trailhead. It is similar to, but a little hillier than the Coalton Trail and it leads to a great overview of the southern end of the Flatirons and the Eldorado Canyon area.




On the way back, I decided to take an alternate path, instead of the road walk. That was a big mistake. The High Plains trail, in the first place, isn't a trail - it's a rut that winds crazily through cow pastures. It is very narrow, deep and has a curved bed that destroyed my hiking shoes. This same model of shoes lasted me for five years of regular walking and extreme hiking and a new pair is gone in less than half a year. The rocks in the rut were like gravel you might find in a terminal moraine of a glacier. About half way back to the Coalton trail, I gave up and took a farm road back to the less demanding, ankle pounding asphalt of highway 128.

A friendly biker evidently thought that I looked like I wouldn't make it back to Superior, so he gave me a lift back to the other end of the Coalton Trail. While I was recuperating, I had a conversation with a lady who was preparing for an Ironman Triathlon and I was gratified to note that she evaluated the High Plains Trail as "brutal". That made me feel much less like a whiner.

Anyway, I got my money's worth. The hike was great, except for the terminal moraine and I feel ready to stand up to a hike out to Waterton Canyon.


Thursday, June 15, 2017

--- Ubiquitous BASIC ---

2016

I have another range - cyberspace. Specifically, I explorer the more abstract corners of the world by programming.

I originally learned to program using BASIC. "BASIC" stands for "Beginner's All-purpose Symbolic Instruction Code" and it was developed by John G. Kemeny and Thomas E. Kurtz at Dartmouth College. It was designed to be a computer language that is similar to English so that beginning programmers could easily learn to program. It quickly became a popular, all-purpose language. In fact, it is often included in other software as a macro language.

In college, I programmed for other people and never had a problem adapting to other languages (except for - shudder- COBOL). More recently, I've played around some with Python but mostly use LibreOffice's version of Basic. LibreOffice uses a trimmed down version of BASIC to allow users to program their office productivity software.


Thursday, June 8, 2017


--- Getting started in programming ---

2016

There are still plenty of reasons to program computers.

Most software products have a limited bag of tricks. The developer has tried to figure all the features that a typical user would want from their program but there is no truly typical user. Sooner or later, everyone is going to gaze dreamily into the distance and say, "I sure wish this program could....(fill in the blank.)" The answer is to be able to program the computer to do what you want it to do.

A lifelong learner has much more reason to program. Programming a concept into a computer - teaching the computer to do what you're learning how to do - requires that you take the concept apart (analysis) and then put it back together in a form a computer will understand. You get to see the inner workings of the concept. How can you help but to learn?

There are many very accessible languages available to the beginner.

In fact, BASIC stands for Beginner's All-purpose Symbolic Instruction Code. It is designed to be easy to understand and easy to use. Even better, most of the office productivity suites like Microsoft Office, LibreOffice, and WPS uses a version of BASIC as a macro language. If one of these suites doesn't do something you want it to do, you can teach it to do the task and it will happily oblige you.

I like LibreOffice Basic because LibreOffice is a free, full powered office suite and, if you are using it to look at my Excursion documents, which are LibreOffice documents, then you're already set for programming with LibreOffice Basic.

There are programs that are designed to be fun and useful.

Scratch is a programming language consisting of blocks that you snap together. It was originally designed to manipulate graphic images in a learning environment, but with Custom Blocks, you can program it to perform more typical computer tasks.

If you want to play around with Scratch, you can find it here:

https://wiki.scratch.mit.edu/wiki/Scratch_Wiki_Home

Two languages that provide instant feedback as you program are Python and LiveCode. Both show you what your statements do as you type them in.

Python is a very popular, but fairly typical language. It seems too be very easy to  learn using supplied tutorials and user guides. You can find it here:

https://www.python.org

A modern version of a cool, old language (it was way before it's time back in the 70s) is LiveCode, an update of a language called HyperCard. It's also an object oriented language that will manipulate graphic objects, but it does much, much more. It's intended to be able to work with many platforms. Look at it here:

https://livecode.com

A similar such language also designed to be multiplatform (you can write programs to be used with many different systems - they're even working to make their product compatible with smartphone operating systems) is Xojo and here is their website:

http://www.xojo.com

In future articles, I will be giving you some tips for programming in LibreOffice Basic, primarily because it is very accessible, and most of the work I'm doing now is in that language, but, certainly, if you decide you like programming, look at these other languages and you might even want to spread out and play with some of the many (many!) other languages like C, FORTRAN, or (Whoa!) the assembly language for your processor.


Wednesday, May 31, 2017


--- Learning on a computer ---

2016

Computers are excellent platforms for learning. By its very nature a computer is multimedia and can engage most of the senses in the learning experience (they haven't hooked smell and taste in yet and maybe that's a good thing). Throw in a portable computer in the form of a smartphone or tablet and the learning goes with you.

I  can look up practically anything on the Internet and my digital library is enormous - there are public libraries without the resources I have on my desk.

Before I retired and moved to Denver, I found digital copies of all the books in my large library that I could and digitized audio tapes that I had made. There are a lot of sources on the Internet for digital books. Websites like the Gutenberg project (http://www.gutenberg.org/wiki/Main_Page) and the Internet Archive (https://archive.org/) provide access to a breathtaking array of books, software, audio, and video in the public domain. There are booksellers that provide digital versions of more recent works but many embed security code (DRM) in their products so they can only be viewed on their own software - the product, in effect, belongs to them and you buy the ability to see it. The Calibre Ebook management system, a free download, has a function that allows you to search the Internet for books and will alert you to the presence of security code in the books.

Calibre lets you maintain a home digital library and provides a reader for most ebook formats. It has a lot of features. If you want to check it out, the website is: https://calibre-ebook.com/ .

Another powerful learning technique is programming. If you can tell a computer how to do something, you really understand it because computers require very exact instructions. I'll be showing you some programming techniques later.

Again, computers can connect you very intimately with the thing you are learning about. When I was first getting into computers, if you wanted to connect a sensor to a computer, you had to build the interface, which was fun, but if you made a mistake, you ruined an expensive computer. Now, you can connect a desktop, laptop, portable, or smartphone computer to all kinds of stuff - thermometers, spectroscopes, telescopes, microscopes, electrocardiograms - the list is endless because it keeps growing.


Tuesday, May 23, 2017


--- Computer websites ---

2016

There are several websites that I make considerable use of while I program and do other computer related activities. Here are some of my favorites:

SourceForge: A great repository of opensourceware and freeware. It has pretty much everything you might need to maintain a computer and then some. https://sourceforge.net

Free Statistics: Being a statistician, this one is a predictable favorite. It makes available a wide range of free, demonstration, and shareware programs for just about any statistical need. http://freestatistics.altervista.org

Programmer's Heaven is a huge, general source of information for programmers. http://www.programmersheaven.com

Martindale computer resources. The Martindale site is a huge library of just about everything you might want information about. I enjoy just wandering around through the stacks. The address of the computer section is: http://www.martindalecenter.com/Calculators4A_1_CmCo.html#COMPUTER-COURSE-PROGRAMMING

Numerical recipes - the companion site to the classical resource for numerical algorithms. I've found a lot of solutions to mind wrenching programming problems here. http://numerical.recipes

The Stony Brook Algorithm Repository has many algorithms for many basic computing tasks. http://www3.cs.stonybrook.edu/~algorith

Jean Pierre Moreau's page is another great repository of mathematical (and a few other) algorithms. http://jean-pierre.moreau.pagesperso-orange.fr/links.html


Tuesday, May 16, 2017


--- Computer Bookshelf ---

2016

First, if you get new software, download the documentation for it, especially the user guide and tutorials. If the home site for the software doesn't have tutorials, search on the web for the software's name plus "tutorial". In my experience, the best way to learn how to use a program is to play with it, but it helps to have some guided examples to run through.

Here are some other books I like:

Musciano, Chuck (1988) HTML: The Definitive Guide, 3rd edition. O'Reilly and Associates. Actually, the definitive guide, and you know you're going to want to spruce up a webpage one day.

Verschuuren, Gerard (2008) Excel 2007 for Scientists and Engineers. Holy Macro! Books, Uniontown, OH. It's for Excel users, but most of it is also applicable for general spreadsheet use, and you know how much I like spreadsheets.

Wikibooks.org (2013) Basic Computing Using Windows. Ditto the other Wikibook, and this one can be downloaded at: https://en.wikibooks.org/wiki/Basic_Computing_Using_Windows

Wikibooks.org (2013) Computers for Beginners. This wikibook, from Wikipedia, is  a good guide for people who have never used a computer before and it can be downloaded for free at: https://en.wikibooks.org/wiki/Computers_for_Beginners


Thursday, May 11, 2017


--- Computer equipment ---

2016

I'm a packrat when it comes to collecting equipment for my lab. I look for inexpensive but reliable sources, both online and in my  neighborhood and travels. For instance, I can easily walk to several local WalMarts, a Home Depot, or The Science Company.

I've acquired a nice array of small accessories for both my computer and my smartphone. Here are a few items.

My computer equipment is kept in two computer bags.

My Dell N5040 laptop. I've had it for years and have no desire to replace it.

A couple of gigabyte flash drives is necessary because I'm always passing files to people when I carry my laptop out.

A few extra recordable CD's for the same reason.

A USB hub. That gives me four USB ports off one of the two on my laptop.

A dust brush to clean off the display.

A CD drive cleaner, because it tends to need it at the most inopportune times.

And, of course, all those cables, half of which I have no idea why they're still there.

The other computer case has the interesting stuff in it.

Trackball. I'm used to a mouse and would probably never switch to a trackball, but it comes in handy when you're doing psychological experiments dealing with coordination and such.

2 extra webcams. There's one built into the laptop, but it's nice to be able to switch between viewpoints and these tiny webcams are much easier to point at things.

A USB thermometer sensor.

A lamp that can be plugged into the computer's USB port. Those things are amazingly useful to be so simple.

My sensor hub is a Sinometer VA18B multimeter. It has all the cables including a USB link that will connect to my laptop. I can measure just about anything that I might want to measure with that, and the software allows me to either display a instantaneous value or track measurements over time as a graph or table of values.

(Note: Over time, the multimeter has stopped working with my computer and I have switched to a Dataq DI-145 data logger. For the price - much less than $100 - it does a great job.)

If I want to keep track of faster changing quantities, I have a Sainsmart computer oscilloscope in my bag.

A portable Adesso EZScan 2000 document scanner. Once I got used to feeding pages into it, operation has been pretty much flawless.

Intuos drawing tablet with the pen. It works very nicely as a computer blackboard.

The smartphone equipment is kept in a waist pack.

Very good smartphone cases are very inexpensive. Mine is a three piece LK case that has a silicon shock absorbing inner shell (which is important since I drop my phone from heights as parts of physics demonstrations), a hard outer case, and a cover that all that slides into. The cover and hard case has easel stands that slide out and the cover has a belt clip.

I also have an armband mount that keeps the phone where I can get to it - on my arm. Since I use it as a field instrument, that is one of the best purchases I've made for my phone.

The waist pack carries a couple of flashlights (one red, for night vision).

A clip on microscope lens with LED light. I got it from American Science and Surplus and they're right - it has no business working as well as it does. It gives me up to 30X, and that's about perfect for most field work.

A Carson 6X telephoto lens that has a clip on phone mount. I find smartphone telephoto lenses hard to aim, but once you have the target in sight, they're fantastic. One thing is certain - a tripod is necessary. I have a table tripod in the pack. If I need a full size camera tripod, I have a Bower professional rig I can sling over my shoulder (the carrying bag has a shoulder strap). It's not heavy but tends to swing in all the wrong directions.

I also keep a lens cloth in the pack.

A Edmund Scientific pen microscope/telescope (remember those? Mine still works fine and they still sell them).

A laser pointer.

A tape measure/minidriver tool set I picked up at a conference somewhere.

A tripod clamp mount that allows me to clamp a variety of things to my tripods.

And I have an iStabilizer smartphone tripod mount that has standard size tripod sockets on two sides. With the 1/4" x 20 threads per inch hardware I keep with me, I can mount my smartphone to just about anything. The mount will even clamp onto my Arduino microcomputer.


Wednesday, April 26, 2017


--- Using computers ---

2016

Long ago, in the late 60s, my brother was a computer technician in the Air Force. That gave me my first deep exposure to computers because I got to look through his training materials and he got permission to show us around what was then the Southeastern Defense installation. Back then, the Southeastern Defense computer was stored in a three and a half story, air-conditioned block house. The block house was air conditioned because the computer was made of vacuum tubes that would explode in the Southeastern summer if they were not kept cool. The computer could be programmed using assembly language but a lot of work was still done in machine code - all 1s and 0s.

Later, in the seventies, I took computer courses at Auburn University and even programmed as a work study student using strange languages like APL, PL-1, FORTRAN, and (Yuck!) COBOL. The computer I used was scattered across the campus. I programmed using punch cards (look it up!) but there was a new medium - paper tape that could be punched and kept in a roll until the code was compiled. A favorite program for up and coming programmers was a few lines that would make the tape punching machine spit out a prodigious pile of paper tape before an administrator could shut it off.

Back then, I would punch lines of code on paper card and carry the deck over to the computer department where I would wait a couple of days until they compiled the code. Hopefully the printout would say what I wanted it to say instead of ERROR.

In the 80s, I worked for Radio Shack and sold TRS-80 personal computers and Color Computers. My first personal computer was a 256K (that's a whopping 256 kilobytes of random access memory) Color Computer with a printer and, for external storage, a tape recorder. There were modules available that could be plugged into the side of the computer. I had an early spreadsheet and (my favorite) a synthesizer that I could program to play four-part harmonies. Some of my original pieces (now available for listening or download on the Therian Timeline) were composed on that computer. 256K - laugh if you want but that computer was more powerful than the Southeastern defense computer my brother worked on. I could program in BASIC!. A new thing at that time was a sorta cool thing called the Internet.

To that point, a computer user was also a computer programmer. Then, user friendly computer programs began coming out and, today, many, if not most computer users have no experience in programming.

When I finally began my professional life in Selma, Alabama, I was equipped with a computer with a few megabytes of RAM, a CRT monitor, and Windows 3.0. I had a job search program which always included Brain Surgeon in the list of possible jobs. I was trying to complete a Masters research project and the work computer couldn't handle my data set. By the time I retired in 2013, I had graduated to a Windows XP machine. I couldn't upgrade further because the program I had built over the 20 years in Selma to process my client information would not work on later versions of Microsoft Office. They had dropped the Visual Basic macro language I was using to program.

I have graduated now to a 581 Gigabyte computer with a Terabyte external hard drive and four CPUs, and a telephone (a telephone, mind you!) with 3.74 gigabytes of RAM  and 29.71 gigabytes of internal memory.

And I still get impatient waiting the few minutes it takes for my computer to finish doing what it's doing.

The Yale-New Haven Teacher's Instiute (http://www.yale.edu/ynhti/) has a quaint module called "Computing" from 1981 (That's about the time I was buying my first computer). You might want to read it - it has historical interest.

But, although they used BASIC then, I still use a version of BASIC to program. The Basic that's used as a macro language for OpenOffice and LIbreOffice is both more and less powerful than the BASIC I learned as a first programming language. It's more powerful because it is able to access and manipulate just about all the objects that make up the LibreOffice productivity suite. It's less powerful because the programming part of the language is only a subset of BASIC. For instance, it doesn't have the Data....Read structure that allows BASIC to load tables of data from strings of data contained in the code. I missed that so badly that I ended up programming a couple of functions to do approximately the same thing. "Real" programmers today use languages like Python, C, Java, and Drupal.

Not long ago, a striking shift occurred in the world. Suddenly, paper was not the preferred medium for storage. Before, even with computers, you printed a text and put it on a shelf or in a filing cabinet. Now, people save everything on digital media and, if they want to send something to someone else, they send an electronic file. And there is something called a cloud in which you can save all your stuff on the Internet, in cyberspace.

I often say that my father saw more change in his lifetime than was seen in the entire history of mankind before him. I have seen more change in my lifetime than has been seen in the entire history of mankind before me. My nephew has seen more change in his lifetime than has been seen in the entire history of mankind before him. It's daunting.

When I started to college, students were required to know how to use the greatest portable ever - the (nope, not the graphing calculator) slide rule. Now students have to be effective with a calculator that does logarithms, calculus, and graphs functions. When I started to college, a four function calculator (add, subtract, multiply, and divide) was just coming down to below a hundred dollars. I still like slide rules. They don't require batteries or the sun - but now they're antiques so they cost over a hundred dollars.

Another change.....do you know what an analog computer is? Twenty years ago, analog computers were a thing.


Tuesday, April 11, 2017


--- Field trips, hikes, and endurance hikes ---

2016

I made the decision to let go of my van back in 2014 and I haven't really regretted the decision. There are some down sides. If I leave the house, I do so on foot (unless it's a group activity, and those are fairly rare) and I'm limited to how far I can walk in a day or two or how many bus tickets I can afford, and the money has been rather scarce since I moved to south Denver.

But, on the whole, I prefer walking to driving for reasons I've mentioned. Most importantly, I miss too much when I'm driving.

There are three kinds of walking I regularly do.

Field trips have an end goal. I walk to get somewhere and do something at the farthest point of the walk. That might be a museum, a point of interest, or an activity, like a street festival or market. I guess my regular grocery runs could be called field trips.

For a hike, the walk is the goal. I regularly walk Bear Creek Trail, looking for particular things along the way. I rarely walk to Morrison to see something in Morrison. Morrison is only part of the reason for the walk.

Once or twice a year, I take endurance hikes - particularly long or grueling hikes. I joke that it's my annual stress test. I have a heart condition and I'm not sure how much it really effects me. The only thing I can say for sure is that working in a horizontal position or on an upside-down incline doesn't work too well for me. I figure that, if I can survive one of these endurance hikes, my heart must be in pretty good condition.

But, to be honest, I just like pushing myself occasionally. I've been doing this for some time. I met my long-time hiking friend, Paul Holm, in the early 70s in a biology class at Auburn University. Our first distance hike was a walk from the West Point exit of I85 at the Alabama-Georgia state line, across Pine Mountain, to Warm Springs, Georgia, a distance of over 27 miles. That was the longest day hike we took. The Dreaded Mid-Summer Death Hike became a tradition.

Our last long hike together, before I moved to Colorado was from the southern terminus of the Pinhoti Trail in Alabama about seven miles up and across Rebecca Mountain. It was a hot, dry day that improved when a line of thunderstorms moved in. When we were almost back to the cars, we found a patch of particularly juicy blackberries. That, by itself, made the pain worthwhile.

At the end of the hike, he went back home and I drove up to Mount Cheaha to camp over night. I ate at the restaurant on top of the mountain (one of my favorites), and the next morning, I checked out the Kymulga Covered Bridge, between Sylacauga and Talledega, and went to First Baptist Church in Sylacauga for Sunday School and the preaching service. After that, I drove back to Auburn and spent the rest of the day hiking and dining out with Paul.

Since moving to the Denver area, I've kept the tradition every year. In 2014, I walked from home in Broomfield to Flatirons Junction and then up the Coalton Trail, almost to the Flatirons before returning home. It was almost exactly a 12 hour walk with few short stops, so it was between 38.6 kilometers (24 miles) and 58 kilometers (36 miles). That hike was all high plains.

After moving to South Denver in 2015, I walked from home to Kipling Trail and from there up to Jewell Avenue; then I headed west to Green Mountain and across Dinosaur Ridge to Red Rocks park. A short road walk brought me to Morrison and Bear Creek Trail, which brought me back home.

After it snows a couple of times, I plan to walk to Waterton Canyon, which is south of the Denver area. One of my packmates works at River Point Shopping area, at the head of the trail system that leads to Waterton so I can start very early and cut off the Bear Creek portion of the hike. Still, it'll be well after dark before I get back home.


Tuesday, March 28, 2017


--- Bookshelves ---

2016

The day I retired from my professional practice as a rehabilitation specialist, I walked out to my van, already packed with everything I was taking with me, drove by the power company to pay my last bill, visited the man who would clean up my apartment for me (he had a flea market business), and left Selma for good (well, I could visit some day - you never know).

This was an adventure. The snow started just south of Birmingham and never let up the whole trip. In fact, it snowed for months for most of the time after I reached my new home. I stayed over a couple of days with a friend in Missouri. I didn't think I would be able to leave because the doors of my van were frozen shut, but I banged on them and tugged on them until the ice broke. I had to climb over a tiny space in my belongings from the side door of the van before I could finish my trip through Kansas at night. That was planned. Flat country with unbroken horizons make me neurotic.

I made it to Broomfield before noon on Christmas eve of 2013.

I carried only what I could fit in my Astrovan, which was about 10% of what I had in my apartment. Months before I left, I was digitizing my library. Everything I could find as a download, I packed on CDs. I had several tapes of music I had made, many of the gospel group I had been a part of, His Own. I digitized photos and bought digital versions of movies. I kept a few physical books, but not many.

As a result, I have a digital library that many public libraries would be proud to own. Some are Kindles, which, of course, nobody owns a Kindle eBook, they just buy the rights to look at them (grph!), but I managed to replace many with legitimate PDFs and EPUBs.

So, I'll be sharing my favorites with you as I go along.

Here are a few from my generalities bookshelf.

I have a contrary nature. I've always liked things that I'm not supposed to like. I'm acrophobic, so one of my hobbies is rock climbing. I'm dyslexic, so I  like language - word puzzles, word games, etymologies, dictionaries, foreign languages. It's understandable that I would prefer the classic thesaurus to modern ones. There are plenty of thesauruses out in print and online. If you have a word processor, it probably has a built in thesaurus. But most modern thesauruses just list the words in lexicographic order and gives synonyms and antonyms. Roget's Thesaurus gives a taxonomy - word families. For instance, word number 528 is "Concealment". There are many synonyms and related nouns, verbs, adverbs, and adjectives. The next word is the opposite, "Disclosure". Both are in section II, "Modes of Communication"; which is in division II, "Communication of Ideas"; which is in class IV, "Words Related to the Intellectual Facilities. Peter Mark Roget put a lot of work in this thing. It's still printed and can be bought in book stores but it is in the public domain and can be downloaded from:

The Gutenberg Project. http://www.gutenberg.org/ebooks/search/?query=roget
or the Internet Archive. https://archive.org/details/Rogets-Thesaurus

John Bartlett's Bartlett's Familiar Quotations should also be familiar to anyone who has ever had to write a paper for school. It can also be found in bound volumes and it is also in the public domain and can be found at:

The Internet Archive. https://archive.org/details/shorterbartletts00bart
or the Gutenberg Project. http://www.gutenberg.org/ebooks/27889

Norman Lewis (2014). Word Power Made Easy. The Complete Handbook for Building a Superior Vocabulary. Anchor Books: New York, NY.  There are several good vocabulary builders out there, but this is my favorite. It's a fun book that has an interesting flow to it. It effectively associates words so learned words provides pegs to hang new words on.

A Little Bit of Everything for Dummies, 20th Anniversary Edition (2011), from the Dummy series people, John Wiley and Sons, Inc. I like most of the Dummy books to start with but this wild compendium of diversity was much too much of a temptation. It may not comment on literally everything but it does go into a lot from the Boer War to dating.

The Encyclopedia Britannica Propaedia. Outline of Knowledge and Guide to the Britannica, edited and written by an army of folks at Encyclopedia Brittanica. If you can get your hands on just this volume of the huge, popular encyclopedia, it's worth it. It has a outline of human knowledge (as claimed) but it also has great articles by experts who can write well on the major divisions of knowledge. Of course, with the 15th edition of the encyclopedia in 2010, printing stopped and the company went to a digital version. It can still be perused at libraries or bought.

CK-12 is a company that produced free textbooks and they are actually quite good (or, at least the ones I've read. There are many.) A couple relevant here are the Basic Speller, by D. W. Cummings, and Journalism 101, by Nina Scott. Look at these and all those other many at http://www.ck12.org/student.

The Dewey Decimal System has an odd little section in the Generalities around 009 called Controversial Information. In a book store, it might be called the New Age section. The same material might be shelved in 130, Parapsychology, or the cryptozoology works may end up in 590, Zoology. Who knows?

But the works of Dr. Gregory Reece deserve, at least, an honorable mention here, not because they don't belong in the top 10 list, but because they don't belong here at all. They look like books about cults and magic, and weird creatures but what he writes about isn't controversial at all - it's about the way people use controversial information. So he writes about UFO cults, and Elvis cults, and Flat Earthers, and Hollow Earthers, and why people like scary stuff, and he does it with academic respectability. His books are: Elvis Religion: The Cult of the King, UFO Religion, Weird Science and Bizarre Beliefs, and Creatures of the Night, all published by I. B. Tauris.

B. J. Hollars review of Creatures of the Night,  included the following opinion on the Alabama Writer's Forum (June 2012):

"While his in-depth research does much to arm him against the ivory tower naysayers, his occasional insertion of personal experiences with the supernatural—while interesting—ultimately does more harm than good, undercutting the credibility he has worked so hard to achieve. The book is at its best when Reece refrains from the spotlight, allowing instead his facts to drive fears, rather than his fears muddying the facts."

With that, I respectably disagree. Reece isn't an armchair scholar, he leaves the archives often to research his topics in situ. It doesn't hurt to see that a reputed expert on a topic also has hands-on knowledge.

I left out an older work by Dr. Reece, Irony and Religious Belief (2002), from the Religion in Philosophy and Theology series published by J.C.B. Mohr (Paul Siebeck), Tubingen. It is his graduate thesis which was later made available to the general public. It is a deep consideration of irony in the works of Soren Kierkegaard, Ludwig Wittgenstein, and Richard Rorty. Being deep, it might be difficult, but it is also very readable. For those that enjoy such topics, I recommend it. For those that do not, read it anyway. You could widen your horizons.


Tuesday, March 21, 2017


--- The Library ---

2016

The first step in preparing for an adventure is research. I check to see what I can expect. Looking for gemstones in sedimentary rock is normally a losing proposition. I also like to know if there are hazards I will need to defend myself from. Is there a lot of verticality; will I need to pace myself for long distances and steep slopes? Are poisonous or hostile plants and animals a potential problem?

I have always maintained a good relationship with the staff of my local public library, especially the reference staff. They can help a lot when I'm looking for specific information. I also know how to use the InterLibrary Loan. I can usually get copies of academic journal articles less expensively through a library if those journals are available to the library, and they often are.

Here is a picture of the Central Branch of the Denver Public Library,


and here are some pictures of the Bear Valley Branch, my local library.



They have a nice rooftop patio where you can sit and read.

(pictures of Bear Creek Branch Library and the central Denver Public Library)

Of course, I just like being in a library. I've worked in libraries so they feel comfortable to me and libraries are adventures in their own rights. Most public libraries are part museum. For instance, the Selma Public Library maintained a local artist gallery and upstairs was a salt water aquarium.

My local library, the Bear Creek branch of the Denver Public Library has much more than books. They have computer terminals, music disks, video disks (movies, commentaries, lectures), and graphic novels. The central library upstairs has special exhibits and houses a western history museum. It's a huge building that has a lot going on in it. Like many modern public libraries, it has a website (https://www.denverlibrary.org)

Some people don't live close to a public library and, if you're like me, you like to have a reference library at your fingertips.

The Internet itself is a vast compendium of information. The problem is that the quality of the information you find there is often not good. Anybody can post just about anything to the Internet (there are a few things they might get in trouble for posting but they usually get away with it for a short time - until someone notices what they're doing.)

I keep a sizable library of website links in my resource hub. I have links for all the topics. I am hesitant to post website links because the websites they lead to often shut down without warning and I have dead links on my website, but there are a few that I have to share. To do otherwise would be inconsiderate.

The Yale-New Haven Teachers Institute site is a favorite. Aside from giving me ideas when I was a tutor, it gives me ideas for adventures. I can usually adapt a teaching module to a fieldtrip. Here's the link:

http://www.yale.edu/ynhti

You will see me refer to it occasionally.

Do you want a reference library for your computer - dictionaries, book sources, almanacs, directories, pretty much the kind of stuff your public library has in it's reference section - MIT has it for you here:

http://libguides.mit.edu/c.php?g=176227&p=1160775

Wikipedia has been criticized in the past for being too open for changes by people who don't know the subjects they post information about. Since Wikipedia is a huge Internet site built by its users, that's a real concern, but they seem to have worked out most of the problems and I rarely find glaring errors in the articles I use. But, then, the real power of Wikipedia is the bibliographic references at the end of each article. Here's an address:

https://www.wikipedia.org

Once you get to your language version, be sure and check all the home page. Wikipedia has several sister projects which provide things like media clips, textbooks, a library of quotations, subject curricula, software, books, travel guides, news, a species taxonomy of living things, and a dictionary and thesaurus.

Another vast Internet resource is Google. It's not just a web browser. Take a look at all these tools provided by Google:

https://www.google.com/intl/en/about/products

The Internet isn't a very good place to find peer reviewed information on specific topics. In college, I had access to citation indexes that covered all the major journals and, when I left, I kept my alumni status for that very reason. But Google has Google Scholar which provides a search utility for academic resources. I use it a lot to keep up with academic articles about therianthropy.

There are many eBook libraries on the Internet. Two of the best are the Gutenberg Project and the Internet Archives, and again, both offer many services other than eBooks.

Gutenberg Project: http://www.gutenberg.org/wiki/Main_Page

The Internet Archive: https://archive.org

I also use an eBook management program, Calibre, that will search the Internet for eBooks. It's a free download and you can find it here:

https://calibre-ebook.com

Pueblo, Colorado is the site of the United States' depository of practical knowledge, the Federal Citizen Information Center. It is a vast wealth of how-to-do-it information and it is here:

http://publications.usa.gov