Photo credit

Thanks to Dad Huttar for the beautiful header photo. He and mom took this and other great photos during their visit here last month. Photo is of our oak canopy with the sun shining on the fall leaves at the top. Gorgeous.

Speaking of beautiful photos, I have discovered Gilbert Lennox Photography in recent months, thanks to his daughter, singer and modern hymnwriter, Kristyn Getty. (We love Keith and Kristyn’s music! You can purchase it in stores or at their website). Keith and Kristyn post some of Mr. Lennox’s photography on the Keith and Kristyn Getty Facebook page. We also really like Kristyn’s Uncle John Lennox who is a mathematician, philosopher, and Christian apologist. Check out his books! Our favorites include God’s Undertaker: Has Science Buried God? and God and Stephen Hawking: Whose Design Is It Anyway? This is a family talented and gifted by God.

Categories: Kate | Leave a comment

Exploring XPath 3.0 with BaseX

I don’t know about you, but I get excited reading papers like Dimitre Novatchev’s Programming in XPath 3.0, and want to try some of XPath 3.0′s new features for myself. I also want to build upon some of the examples given there.

But to do that, you need an XPath 3.0 processor. And it turns out, they’re harder to find than XPath 2.0 engines. (Not too surprising, since 3.0 is more complex, and has just reached official Recommendation status in the last 3 months.)

Saxon HE, the free version of the definitive XSLT/XQuery processor, does not do XPath 3.0. Saxon PE and EE do. They are not free (starting at £50.00 at the moment), though you can apply for a 30-day trial license. My trial license arrived pretty quickly today after I requested it. However that does put you under a time limit, and if you’re like me, picking up projects and putting them aside all the time, the clock may run out before you’re done experimenting.

XmlPrime is listed on the QT3 Test Suite Results Summary for XPath 3.0, so it sounds like it implements XPath 3.0, right? But the version of XmlPrime listed there is 3.0.0.0, whereas the most recent version that seems to have been released publicly is 2.9. And that version doesn’t claim to run XPath 3.0 or XQuery 3.0. So where do we get our hands on the version that does?

However I found out (via Dimitre) that BaseX includes XQuery 3.0, which should by definition include XPath 3.0. (Why then is BaseX not listed on the implementations of XPath 3.0 in the QT3 Test Suite Results Summary? It’s listed for XQuery 3.0… Hmm.)

If BaseX does run XPath 3.0 (and yes it does seem to… but see caveats below), it also has the advantages of (1) being free, and (2) having a GUI front-end that makes it easy to experiment with different queries. A minor disadvantage is that it seems a bit daunting to be installing a full-blown XML database server, if all you want is to try some XPath. But disk space is cheap, and honestly, my low-end laptop didn’t have trouble running BaseX along with several other applications. Moreover, it wasn’t complicated to set up and start evaluating XPath.

So here’s the procedure, as I did it.

  1. Download and install BaseX. I’m on Windows, so I used the Windows Installer (v. 7.9).
  2. Following the Getting Started instructions, launch the GUI. I didn’t have the installer create desktop icons, so I had to type basexgui.bat in the Windows 8.1 Start menu. Windows found the .bat file and launched the GUI successfully.
    Alternatively, you can use the command line or the client/server scenarios, but I think the GUI’s ideal for experimenting and development.
  3. You can’t (AFAIK…) run XPath (or XQuery) without having an input document. So, following the GUI instructions, create an XML database. This consists of specifying an XML document to connect to as the database.
    There’s a suggestion to use BaseX/etc/factbook.xml as a sample, which is a substantial one (1.25MB) and good for many cases; but if your use of XPath tends to ignore the input document (like most of Dimitre’s examples), you may want a tiny document like the included w3-catalog.xml.
    The document structure pane in the upper right shows a really cool representation of the XML tree, to which a tiny document does not do justice.
  4. Try out a simple XPath (or XQuery) expression in the “XQuery Panel.” To do this, click on the dropdown that says “Find” and change it to “XQuery.”Then enter an expression in the text field next to it. E.g. try one of these…
    • 5 + 6
    • count(//*) (: returns 4, for w3c-catalog.xml :)
    • /*/*[2]
    • let $i := 3 return $i

    You should be seeing the expected output in the Result pane (lower left quadrant). screen shot of BaseX

    You also get some nifty profiling information in the lower right pane.

  5. Now you want to try more sophisticated queries? Type/copy/paste your query into the Editor window (below the XQuery Panel on the left). You can also open your XPath/XQuery files using the file browser on the left side. Caution: if your query code filenames don’t match the default filters (*.xml and *.xq*), you may get frustrated trying to find them, even though the file browser says it’s showing “All Files”. First go to Options>Preferences, check General>Use Simple File Chooser, and add *.* to Editor>File Filter. After I did that, I was able to find my files.Press Ctrl+Enter, or hit the green play button, to run your example. Again, the results appear in the Result pane below the Editor.

So now we’ve achieved our goal: a working XPath 3.0 processor. Right?

Basically, yes. I had trouble running some of Dimitre’s examples, e.g. when declaring recursive functions. I seemed to get an error whenever a function parameter was declared as function() without declaring the return type of the passed function. I’ll probably submit a StackOverflow question about that. But other examples worked well, e.g. using the simple mapping operator:

('London', 'New York', 'Paris') ! string-length()

or creating elements in XPath:

name(parse-xml(concat('<Person>', (//Author)[last()], '</Person>'))/*)

The examples on closures and partial application also worked fine.

Update: The spec has apparently changed for declaration of general function types. You have to declare them as function(*) rather than just function().

Categories: Lars, xpath | 1 Comment

Happy International Tatting Day!

Getting ready to celebrate with many tatting friends in the Online Tatting Class! Join us in tatting today.

IMG_3188

Info on tatting and International Tatting Day:

http://www.gone-ta-pott.com/international_tatting_day.html

http://www.altiusdirectory.com/Society/international-tatting-day.html

Categories: Kate | Tags: | Leave a comment

Yogurt success!

A few years ago I tried my hand at making yogurt. The first few times I met with great success. Then suddenly I had two or three tries that ended with a crock pot of whey with about a half inch of yogurt. :( Thankfully, the whey was great in smoothies and soups and other things, but it wasn’t yogurt. But I gave up on making my own yogurt.

Have you noticed, however, that dairy prices are skyrocketing? The basic milk at the grocery store is $4 a gallon. And yogurt is also pricey, especially Greek yogurt. So when I found milk on clearance, I thought it was time to give yogurt making a go.

Time to search for a recipe again, and preferably a different one since my last attempts had failed. (I do think a lot of that may be due to a crock pot that heated too hot and too fast.)

I found a new recipe that advertised “fool-proof crock pot yogurt.” After my failed attempts, I was a bit skeptical, but thought I would try since the blog author said if you follow the directions precisely, it would work. Yesterday I began the process. I was surprised how long the milk took to heat up. Over five hours to reach 185F. Then it took another 3.5 hours to drop back to the ideal temp of 110F for adding in the starter and sticking it all in the oven.

The results were well worth the extra vigilance. It worked! This morning I had beautiful, creamy, white yogurt. Just had a bowl with a spoon of honey and it was delicious. One jar of it is already gone after all of us snacking on it. :)

Unfortunately, I was so excited to scoop out the thick yogurt, that I didn’t think of taking a photo, but I will take a photo of it in the jar and spoon and post it.

I am giving credit of the success to the blog author, “Granny Miller”! And the failure, at least in part, to the crock pot I used before. I did have to adjust the recipe a bit because I used my smaller crock pot, since I don’t trust the big one which failed me.

I am once again a happy yogurt maker!

Categories: Kate | Tags: | Comments Off

Book a month in 2014

Today I ran across this blog post which challenged me to come up with a non-fiction book list of my own for 2014. The blogger has some great books from last year as well as this year. When I first saw the post, I thought, “That should be easy, I read a lot of books in 2013.” Then I looked at my actual list of read books and realized that I had only finished reading 8 non-fiction books in 2013. :( Granted, there are a lot of books in progress in the non-fiction category, but I did not finish them as I had hoped. So, here is the current list of books for 2014.

First the ones that I have started and need to finish (which is most of them):

  • A Mother’s Heart by Jean Fleming
  • A Place of Quiet Rest by Nancy Leigh DeMoss
  • Choosing Gratitude by Nancy Leigh DeMoss
  • Heaven by Randy Alcorn
  • Radical Womanhood by Carolyn McCulley
  • Streams in the Desert by L.B.E Cowman
  • The Bondage Breaker by Neil T. Anderson
  • The Core by Leigh A Bortins
  • The Mom Walk by Sally Clarkson

And the ones I would like to read this year:

  • The Quest for Meekness and Quietness of Spirit by Matthew Henry
  • Shepherding a Child’s Heart by Tedd Tripp
  • The Mission-Minded Family by Ann Dunagan
  • Instructing a Child’s Heart by Tedd and Margy Tripp
  • What Happens When Women Pray by Evelyn Christenson
  • How to be a Christian in a Brave New World by Joni Eareckson Tada
  • Angel Tracks in the Snow by Gary Sheperd
  • Bringing Up Girls by James Dobson
  • John and Betty Stam by Mrs. Howard Taylor

Yes, I realize this is more than 12. I couldn’t narrow it down more than that at the moment. :) And many of them I am well into, so they only count as half, right? I also hope to sneak in during the summer:

  • Bonhoeffer by Eric Metaxas
  • The Question by Leigh Bortins
  • and a few others :)

One can dream, right? No, this is a plan, not just a dream.

I’ll update as I have read them. What are you reading this year?

 

20140106-223842.jpg

Categories: Kate | Tags: , | 2 Comments

In everything give thanks

IMG_1591

Crowders Mountain State Park with Grandma and Grandpa Huttar

Blessed Thanksgiving to each of you!

We are so grateful for our family, our friends, and most of all our Lord and Savior, Jesus Christ!

The Huttars

Categories: Kate | Tags: | Comments Off

Welcome, www.huttar.net!

IMG_5616

Field trip to the Schiele Museum in Gastonia, NC

IMG_5667

In front of the gristmill at the Schiele Museum

We finally updated our website to forward everyone here to our blog until we can rebuild our website. The website has been mostly broken for months. Sorry to those who have gone to our web address and found an

outdated photo and not much else.

We will try to get more up there in coming months, but until then, we will post some updates here, as well as a few photos now and then.

For starters here are some photos of the girls on a field trip with our CC community, and a few funny faces by Baby beans.

IMG_5602

Full of silly faces

Categories: Classical Conversations, Huttar Academy, Kate | Tags: , | Comments Off

Birth of Dogwood Designs

IMG_5814Last weekend we participated in our first Craft Show. It was a small one that a friend had organized near our home. Seemed a long shot that we would be able to find enough to show, but in the end we decided to go for it. I made some crocheted items, the older girls made potholders/coasters and scarves. Also on display were some lovely lip balms and lotion bars.IMG_5821

The night before the show, as I was working on tagging all the items, I was trying to design labels for things and Lars suggested “dogwood” being in the name. So we found clip art of a dogwood flower and thus, Dogwood Designs was born. We figure that it will work well for our crafting: crochet, tatting, weaving, woodworking; as well as Lars’s web app work. Perfect.IMG_5825

More on Dogwood Designs and photos in future posts. Maybe we will even get an Etsy store set up someday!

PS: Having done a web search, I see several other “Dogwood Designs.” Hmmm…not too surprising, but we will have to see if we can make it original. Any suggestions?

Categories: Kate | Tags: | 2 Comments

Weaving finished

Here is the finished project, as promised! IMG_3372

It was great fun to weave and I can’t wait to start the next project: tea towels. Unfortunately, I have other projects that must be finished first, so it will have to wait.

More on that project when I get it warped and start weaving. :)

Kate

Categories: Kate | Tags: | Comments Off

Initials shadow block, using POV-Ray

Gödel, Escher, Bach: cover

Many of us (geeks?) who grew up in the right era were inspired by Douglas Hofstadter’s book Gödel, Escher, Bach: An Eternal Golden Braid (“GEB”). My dad introduced me to it via his copy. (If you haven’t read it … it’s fascinating stuff.) On the cover was a photo of some cleverly-carved blocks of wood, shaped just right so that spotlights shining through them along each of the three axes cast the shadows of the initials in the book’s title: E, G, B.

Like probably many other GEB fans, I tried my hand at designing shadow blocks like these, for different sets of letters. About 20 years ago (!), while working for a software company, I used POV-Ray to mock up a shadow-block logo for the product we were working on. That was done by designing the letters manually, using virtual cylinder and sphere primitives. The result was satisfactory, but I didn’t really go beyond those three letters.

Then yesterday I ran across a neat Instructable about making this kind of shadow block out of wood. The author astutely notes that designing how the letter shapes intersect each other is “actually the most important, but also probably the most difficult [step]. All you need to do is draw your initials on each side of the cube, and imagine what shape will result when you cut them out.”

As much fun as it is to imagine 3D shapes, I got to wondering how well the “imagining” step could be automated. If you get letter shapes of the right size, and could use CSG to intersect them, you could often produce something that fulfilled the requirements, even if the resulting shapes were not the most aesthetically pleasing. (Not always… because, depending on the choice of letters, the ordering, and the characteristics of the typeface, it’s sometimes not possible to design a block that casts the right shadows.)

As I looked into doing this automated version in POV-Ray, I was pleased to find that letters made from True-Type fonts were primitives that could be manipulated by CSG commands like Intersect. That made it pretty easy to plug in the desired three letters, and attempt to construct a shadow block. Here’s the code:

// 3D monogram, by Lars Huttar
// Inspired by the cover of Godel, Escher, Bach
//   by Douglas Hofstadter

// Declare your initials here:
#declare L1 = "G";
#declare L2 = "E";
#declare L3 = "B";
// You may need to reorder the letters for best results.     
// Try thicker (blacker) fonts such as "IMPACT.TTF" or "CARBONBL.TTF",
// or "cyrvetic.ttf" as a fallback.
#declare FontFile = "IMPACT.TTF";

#version  3.6;
global_settings { 
  assumed_gamma 2.2
}

#include "colors.inc"
#include "textures.inc"
#include "woods.inc"

camera {
   location  <3, 2,-3>*0.7
   direction <0, 0,  1>
   up        <0,  1,  0>
   right     <4/3, 0,  0>
   look_at   <0, -0.35, 0>
   }

background { color rgb <0.5, 0.5, 0.5> }  

#macro Make_Letter(letter, rotation)
    #local Letter = 
        text { ttf FontFile,
            letter, 1, 0
        };              
    #local Max = max_extent(Letter);
    object {
        Letter
        scale <1.0 / Max.x, 1.0 / Max.y, 1.0>
        translate -0.5 // put center at origin
        rotate rotation
    }        
#end

// Define each of the three letters, with the lower left corner at origin.
// Scale so that the opposite corner is at <1,1,1>.

intersection {
   Make_Letter(L1, y*-90)
   Make_Letter(L2, 0)
   Make_Letter(L3, x*90) 
   texture { T_Wood19
     finish { specular 0.50 roughness 0.1 ambient 0.25 }
   }
}

#declare Brightness = 0.8;
light_source {<100, 0, 0>  colour White*Brightness spotlight radius 0.2 falloff 0.5 point_at <-1,0,0>}
light_source {<100, 0, 0>  colour Orange*Brightness spotlight radius 0.3 falloff 0.6 point_at <-1,0,0>}
light_source {<0, 100, 0>  colour White*Brightness spotlight radius 0.2 falloff 0.5 point_at <0,-1,0>}
light_source {<0, 100, 0>  colour Orange*Brightness spotlight radius 0.3 falloff 0.6 point_at <0,-1,0>}
light_source {<0, 0, -100> colour White*Brightness spotlight radius 0.2 falloff 0.5 point_at <0,0,1>}
light_source {<0, 0, -100> colour Orange*Brightness spotlight radius 0.3 falloff 0.6 point_at <0,0,1>}

union {                          
   plane { <1, 0, 0>, -2 }
   plane { <0, 1, 0>, -1.75 }
   plane { <0, 0, -1>, -2 }
   pigment { color rgb <1, 1, 1> }
   finish { ambient 0.2 diffuse 0.6 }
}

And here’s the result, for the letters GEB, using the Impact font that comes with Windows:
monogram3D

It’s interesting to me how similar this automatically-constructed wood shape looks to the manually (I assume) designed upper block on the cover of GEB. Maybe there are not that many options. Here’s how it works with a less “black” font, cyrvetic.ttf that comes with POV-Ray:

monogramGEBcyr

Note that this POV-Ray code scales each letter to the size of a unit cube. If you use a skinny letter like I, it will get stretched wide and will look pretty strange. Also, serif typefaces don’t work very well:

monogramGEBtimrom

I plugged in the initials of each person in our family…

monogramKPH1

monogramLAH1

etc. Lots of fun!

Categories: Lars | Comments Off