Blog

  • Memories of elementary school: Moravian Chicken Pie

    I’ve been wanting to try this for a few weeks. I saw a similar recipe in a recent issue of Cook’s Country magazine and it reminded me of a pot pie that was served in the lunchroom of our elementary school back in the late 1960s in the NC mountains (back when they actually cooked stuff in elementary school lunchrooms). The magazine version used a homemade sour-cream pie crust, this version uses pre-made crusts.

    2(10- to 12-ounce) bone-in split chicken breasts, trimmed and halved crosswise
    3(5- to 7-ounce) bone-in chicken thighs, trimmed
    Salt and pepper
    1 tablespoon vegetable oil
    3 cups low-sodium chicken broth
    1 bay leaf
    2 tablespoons unsalted butter
    1/4cup all-purpose flour
    1/4 cup milk 
    2 prepared pie crusts
    1 large egg, lightly beaten
    
    • Pat chicken dry with paper towels and season with salt and pepper. Heat oil in large Dutch oven over medium-high heat until just smoking. Cook chicken until browned all over, about 10 minutes; transfer to plate. Pour fat (you should have 2 tablespoons) into small bowl; reserve. When chicken is cool enough to handle, remove and discard skin. Add broth, chicken, and bay leaf to now-empty pot and bring to boil. Reduce heat to low and simmer, covered, until breasts register 160 degrees and thighs register 175 degrees, 14 to 18 minutes. Transfer chicken to bowl. When chicken is cool enough to handle, shred into bite-size pieces, discarding bones. Pour broth through fine-mesh strainer into second bowl and reserve (you should have about 2¾ cups); discard bay leaf.
    • Adjust oven rack to lowest position and heat oven to 450 degrees. Heat butter and reserved fat in now-empty pot over medium heat until shimmering. Add flour and cook, whisking constantly, until golden, 1 to 2 minutes. Slowly whisk in 2 cups of reserved broth and half-and-half and bring to boil. Reduce heat to medium-low and simmer gravy until thickened and reduced to 1¾ cups, 6 to 8 minutes. Season with salt and pepper to taste. Combine 1 cup gravy with shredded chicken; reserve remaining gravy for serving.
    • Line pie plate with one of the pie crust rounds. Transfer chicken mixture to dough-lined pie plate and spread into even layer. Top with second dough round, leaving at least 1/2-inch overhang all around. Fold dough under itself so that edge of fold is flush with outer rim of pie plate. Flute edges using thumb and forefinger or press with tines of fork to seal. Cut four 1-inch slits in top. Brush pie with egg and bake until top is light golden brown, 18 to 20 minutes. Reduce oven temperature to 375 degrees and continue to bake until crust is deep golden brown, 10 to 15 minutes. Let pie cool on wire rack for at least 45 minutes.
    • When ready to serve, bring remaining ¾ cup reserved gravy and remaining ¾ cup reserved broth to boil in medium saucepan. Simmer over medium-low heat until slightly thickened, 5 to 7 minutes. Season with salt and pepper to taste. Serve pie with gravy.

    With a tip of the hat to the folks at Cook’s Country

  • A philosophy of teaching

    The supreme end of education is expert discernment in all things — the ability to tell the good from the bad, the genuine from the counterfeit, and to prefer the good and the genuine to the bad and the counterfeit.
    — Samuel Johnson

    I enjoy teaching and have done it for several
    years, both in academia and industry. The main subjects in which I have gained teaching experience include Computer Architecture, Computational Science and Scientific Computing, and Information Technology. I have experience teaching students at all levels, from teaching introductory class for non-Computer Science majors, to teaching upper division classes for Computer Science students, and to mentoring both undergraduate and graduate students in independent studies. I can teach these subjects with utmost ease and look forward to an opportunity for teaching these as well as other related subjects.

    In a recent article in Sewanee, the quarterly magazine for
    alumni of The University of the South, Dr. Joel Cunningham, Vice
    Chancellor Emeritus of the University, addressed the question “What is worth learning?” In his remarks, Dr. Cunningham related a conversation he had with a recent alumnus of the University about Andrew Lytle, a noted author of literature about the American South. The alumnus recalled that Mr. Lytle took the position that the modern focus on “What do you do?” is wrong. Rather, Mr. Lytle thought it to better to ask “Where do you come from?”, “Who are your people?”, and “Who are you?”. As educators, we must, through scholarship, strive to guide
    our students towards an understanding of these questions and aid our students in their search for their own answers to said questions.

    The Carnegie Foundation for the Advancement of Teaching defines
    scholarship in teaching as being built from three components:

    • discovery: research and performance that adds to
      a knowledge base and intellectual climate of an institution,
    • integration: drawing together and interpreting
      diverse kinds of knowledge, and
    • application: applying knowledge to practical problems.

    Scholarship of discovery means we strive to create a sense of discovery and wonder in our students whether we are in the classroom or the laboratory. The experience goes beyond classroom and laboratory; for as we enable our students to absorb concepts through experience, they provide us with new insights into the subject. This inspires us to teach in more creative
    ways by exploring alternative approaches.

    By fostering a sense of discovery in our students, we build
    enough foundation and kindle enough appetite in them that they
    realize that they are capable of scholarship of integration upon their own volition. Today’s students pull information from many sources and it is my task to incorporate traditional teaching tools, hands-on experience in labs, and non-traditional teaching tools from the Internet such as social media to provide the best possible learning environment. In particular, complementing the in-person classroom experience with an on-line presence and research opportunities helps the student link coursework with practical real-world experience.

    Effective learning requires the student to be able to apply knowledge taught in the classroom to practical situations. I accomplish this by highlighting how the subject being taught plays an important role in our daily lives, the applicable commercial products and specific companies producing hardware/software in that area, and promise and challenges of that subject in the coming years. Laboratory exercises, programming assignments, and classroom lectures in my classes are designed with the
    objective of linking material in the classroom environment to practical application. This fosters independent, logical, and analytical thinking into my students so that they learn how to solve problems on their own. As my students devise their own approaches and bring novel ideas in being, I learn from them in turn.

    In higher education, we have two goals towards which we must
    strive. First, we must be able to answer Mr. Lytle’s questions for
    ourselves so that we can answer without thought or hesitation: “This is who I am!”, “These are my people!”, and “This is me!”. Then, we have to answer to the most difficult challenge: coaxing, convincing, and with just a little bit of forcing those whom we teach to be able to answer those sorts of questions for themselves with the same sort of verve and elan that we expect of ourselves.

  • We’re back

    So, I’m back in the blogging business…

    For about 10 years, my web site and blog were hosted by a small web hosting provider based in Germany. They always came across as being a bit dodgy but kept their servers running, provided me the base service I needed, and generally stayed out of the way.

    Well, finally the excrement hit the oscillating device and we had a bit of a tiff over billing; they charged my card the annual renewal, turned off my access, and tried to screw me out of the refund. Sadly, it ended up with the overseas outfit locking down my old domain and refusing to provide me the transfer code.

    At this point, I’ve now switched over to the one of the large web-hosting providers and moved over enough of my content to get back on my feet. I’m still restoring content from my old blog and well be adding stuff over time. In the meantime, enjoy!

    Selah.

  • Computing like it’s 1999

    One of my recent “science fair” projects has been trying to get an older ASUS EeePC 900A netbook configured to a usable state. This was one of the first really practical netbooks with a 1st generation Intel ATOM processor with 1GB of Memory and one of very first practical SSD cards for file storage with 4GB of space. Not the most capable of machines from a hardware standpoint. ASUS shipped the machine with a rather hacked-up lightweight Linux distro. Sadly, the distribution they selected wasn’t one of the mainstream distributions like Debian, Ubuntu, or Fedora. This meant that you didn’t have access to a lot of the stuff that you need to work in an academic environment like my workplace. So, you say “Big deal, just install the NetBook Remix of Ubuntu?” It’s the problem of “Linux… just too darn fat” raising it’s ugly head again. Even the netbook oriented repackages of Ubuntu or Fedora assume a much more capable machine than what the 900A can handle.

    That got me thinking: you know the specs on this machine would have been pretty sweet back 10 years ago. So, how would I have configured Linux back around 1999 and would that configuration be useful today. First step: how to setup the OS. GNOME and KDE are right out… And that gets rid of a ton of fat right there. Think about it: how much of what those desktop managers install do you really use in the normal course of business. OK, do we even need X-Windows? Could I really be that “Tech Neanderthal” and just work with text-mode EMACS on a Linux console?

    Problem is web browsing. The guys at Google may be onto something with ChromeOS given how much time I spend during the day doing useful stuff in the web browser. However, while you can do a lot stuff using text mode browsers like w3m, a lot of the stuff you want to do just requires a GUI. OK, so we need a X-Windows and, thus, some sort of window manager to go with it. The best solution I’ve found was Fluxbox: it’s lightweight and works well.

    Beyond web browsing,everything else that I do in my life I can do from inside EMACS. Writing documents (with AUCTEX and TeXLive), reading and responding to E-mail, manage my day-to-day tasks can all be done using the “editor that thinks it’s an operating system”. So, with the base OS, X/Windows+Fluxbox, Firefox, and GNU Emacs installed, I’ve used up about 80% of the 4GB SSD. Put my /home partition (where user data is stored) on a 4GB flash card in the flash card slot combined with a well-tuned command-line installation of Dropbox and I’m in business.

    Of course there are still problems. The hardware is pretty slow, esp. when surfing to graphics-intensive web sites. I have to aggressively manage what files I keep local to the netbook given the available space. Particularly vexing is dealing with the dependency hell that is modern Linux package management. Good example is UI toolkit that I had to install for teaching purposes the other day. For one package, I had to install nearly 40 other dependent packages. It’s getting almost as bad as DLL-hell on Windows.

    So, worthy experiment? Yep, I now have a usable travel machine that’s about 3 pounds lighter than the MacBook Pro I use at work. Still saving up to get a MacBook Air, tho’. And it does lend some credence to the thought that the GNOME, KDE, Windows, and Mac OS X folks have gotten complacent about the amount of resources they use when building applications.

    Selah.

  • Talk to me about being effective, not being efficient

    In the course of finishing up the dissertation, I’ve been reminded about that old argument between being effective vs. being efficient. Like just about every graduate student, I was getting the “work harder, work faster” speech from my committee chair. A large part of those diatribes involved discussions about being more efficient in my work and dealing with adjusting the focus knob.

    Here’s how the words are defined by dictionary.com:

    Effective (adj.): Adequate to accomplish a purpose; producing the intended or expected result.

    Efficient (adj.): Performing or functioning in the best possible manner with the least waste of time and effort.

    Getting my head clear about the difference between these two things has been one of major roadblocks towards finishing my dissertation. I’ve become quite efficient about doing the things I’ve needed to do to get through the last semester but most of what I’ve been doing hasn’t been very effective  in moving me towards finishing.

    So, how to break the pattern? It varies from person to person but I started with a  two step plan. First, keep track of what you do during the day. This is something some people do without thinking… I’m not one of those people and a I think I’m a member of the majority in that regard. The result is that I find myself becoming very interrupt-driven. I quickly noticed just how scatter-shot my time had become.

    Second, do some “post-mortem” (and “after-death” is the right term here given how my advisor wants to shoot me) and look at how you spend your time after a few days of tracking your work. Then, prune and watch what you do.

    Selah.

  • The C++11 standard and C++ as a teaching language

    The C++ Standards Committee recently published the 2011 update to the language standard with a large body of new features. Looking over some of the changes got me thinking again about my experiences as a software developer using the language and as an instructor teaching others how to use C++. And I’m not certain that the changes in the standard bodes well for the use of C++ as a teaching language.

    A Historical Perspective

    Like many who were first introduced to computers in the late 1970s and early 1980s, I learned how to hack using BASIC and assembly language, how to program using Pascal, and finally understood computer science when I grokked LISP and Smalltalk in my first run at graduate school. My introduction to C was in the late 1980s while learning to become a UNIX system administrator while working on my Master degree and C++ in my first real job writing point-of-sale software. So,like most people in my generation I’m not a native C++ speaker; most of the time I’m really thinking in C.

    So, why comment now?

    Part of my Ph.D. experience has involved working as a part-time instructor in our undergraduate program. Our department is very old-school in many ways; one of which is that we use C++ as our primary teaching language. And we teach C++ exactly as I learned the language 20 years ago in that we first teach imperative programming using the language as more fancy version of C and then we teach the object-oriented features. In other words, for the student’s first three or four semester we teach them that “C++ is just a better C compiler” and then dump object orientation on them when they have to also struggle with all of the theory of data structures. This brings us back to some of the features in the new language standard and how people who are taught to program in C++ in this traditional manner will never think to use them.

    So what are some of these features?

    Danny Kalev is a tech blogger and consultant who served on the C++ standard committee who recently posted a blog (here) that highlighted what he considered to be important new features of the standard. Let’s take a look at a few of those features from a teaching standpoint.

    Null pointers

    One of the big problems with not only C++ but also C is the way one dealt with concept of null pointers. From day 1 in both languages, the concept has been that machine addresses were represented by an integral subtype with value of 0 indicating an invalid null address. This lead to many issues in programs with people being caviler about treating the integer value of zero as being the same as indicating a NULL pointer. You have to be diligent in teaching people the difference between the two concepts and how to avoid the problems that are introduced by this convention.

    So the convention developed that you would define a preprocessor value called “NULL” that you set to zero to indicate you were working with a null pointer value. Eventually this macro was incorporated in the set of headers mandated by the standard. Consider an example from Kalev’s post:

    void f(int); //#1
    void f(char *);//#2
    //C++03
    f(0); //which f is called?

    In both cases, very dangerous as the compiler can’t figure out which version of the overloaded function to call. Now think how to explain this concept to a neophyte programmer just learning about concepts of machine addresses, pointers, and overloaded functions.

    So, the language standard introduces the concept of “nullptr”. For example, the nastiness from Kalev’s example becomes:

    void f(int); //#1
    void f(char *);//#2
    //C++11
    f(nullptr) //unambiguous, calls #2

    A glorious and wonderful thing for the language and a feature that will help teaching. But a good illustration of the problems that exist in teaching C++ to new programmers.

    Delegating constructors

    Object orientation is one of most difficult aspects of instructing people in programing C++. The idiosyncrasies of constructors and destructors are bad enough as currently defined but the new standard is adding more complexity to the issue. For instance, the C++11 standard permits the use of delegation in constructors. Again, we consider an example from Kalev’s post:

    class M //C++11 delegating constructors
    {
     int x, y;
     char *p;
    public:
     M(int v) : x(v), y(0),  p(new char [MAX])  {} //#1 target
     M(): M(0) {cout&lt&lt"delegating ctor"}
    }

     

    At last, we can now safely call other constructors, an excellent idea from an object-theroetical standpoint. However, the entire chain of teaching constructors becomes far more difficult with this feature.

    Lambda expressions

    The new standard adds the concept of lambda expressions to the language. A lambda expression lets you define functions locally at the place of the call to the function. In C++, this helps reduce some of the security risks that function objects incur in the language. Consider the following example from Kalev’s post:

    int main()
    {
       char s[]="Hello World!";
       int Uppercase = 0; //modified by the lambda
       for_each(s, s+sizeof(s), [&Uppercase] (char c) {
        if (isupper(c))
         Uppercase++;
        });
     cout&lt&lt"Uppercase&lt&lt" uppercase letters in: "&lt&lts&lt<endl;
    }

    In this case, we see an example of a lambda expression in the for_each construct where the Uppercase lambda expression defines a C++ expression for switching text to uppercase. Note the general form of the lambda expression

    [capture](parameters)-&gtreturn-type   {body}

    We see two pedagogical problems from this example: (1) the for_each construct is one that isn’t taught very well when you are inspired by the “C++ as better C” viewpoint of teaching, and (2) more critical, the entire concept of lambda expressions is one that you would not be able to teach until you have developed rather strong fundamental conceptual understanding of language design principles. Thus, not something easily taught to beginning programmers. In most undergraduate computer science programs, it’s a concept not taught until your third or fourth year in the program.

    OK, how do we tie all of these thoughts together?

    For me, the new standard makes the use of C++ as a teaching language even more problematic. Many of the concepts being added to the language to make it safer and cleaner make it more it more difficult and dangerous to use as a teaching language. Furthermore, it becomes even more problematic if your program is traditional and uses the “C++ as better C compiler” approach to teaching students just starting in their study of computer science.

    Closing thought: C++ not a good teaching language

    If we begin from the premise of C++ as being less than suited as a teaching language and becoming even more so with the introduction of the revised standard, what then should we use as a teaching language for new programmers? In my recent travels in search of a teaching position, it’s been my observation that many programs have switched to Java and C# as alternatives. These languages suffer from many of the same issues of C++. I’m beginning more and more to believe much as the teaching staff does as CMU and we should be teaching using languages such as Python.

    Selah.

    References

    Danny Kalev: The Biggest Changes in C++11 (and Why You Should Care)

    Robert Harper: Teaching FP to Freshmen

    Enhanced by Zemanta
  • A rave on the scholarship of learning

    We believe the time has come to move beyond the tired old “teaching versus research” debate and give the familiar and honorable term “scholarship” a broader, more capacious meaning, one that brings legitimacy to the full scope of academic work. Surely, scholarship means engaging in original research. But the work of the scholar also means stepping back from one’s investigation, looking for connections, building bridges between theory and practice, and communicating one’s knowledge effectively to students.
    —E. L. Boyer, 1990

    A classmate from graduate school was recently hired to teach at a small teaching-oriented institution in the Midwest. Like many newly-minted Ph.Ds, he is now finding that he’s being asked to think more about the metaphysics of teaching rather than worrying about how to teach people how to program. This person asked my opinions on the following “meta-questions” about teaching:

    1. How would you define excellence in teaching?
    2. How would you define the scholarship of teaching?
    3. How do these concepts tie together?

    They’re all very open-ended and difficult to answer. Note that the following responses are slanted towards my opinions on the subject and may differ from accepted norms. Standard disclaimers apply; your mileage may vary…

    These terms are rather well defined amongst professional educators (by which I mean people who get the “Ed.D” degree from a Department of Education who are experts in the theory of teaching). Look at some of the information that you can find on the website for the “Carnegie Foundation for the Advancement of Teaching” (yes, the same Andrew Carnegie who founded what is now US Steel Corp. and was one of the principal benefactors of Carnegie-Mellon University, go lookup his bio on Wikipedia).

    The Carnegie Foundation defines “scholarship in teaching” in three parts:

    1. Scholarship of discovery: research and performance that adds to a knowledge base and the intellectual climate of an institution
    2. Scholarship of integration: drawing together and interpreting diverse kinds of knowledge
    3. Scholarship of application: applying knowledge to practical problems

    Working from those definitions, you can define excellence in teaching by measuring, preferably in a quantifiable manner, how well an individual working within a program or a program in an educational institution addresses each of these areas. This is the equivalent of business planning in industry; you must define a set of objectives that you put in place to address these concerns and a set of goals that you must achieve to meet those objectives. Then a set of quantifiable measures are put in place that define whether or not you achieved the goals you have set for yourself.

    In a perfect world, an institution’s policies, practices, and infrastructure are aligned with these goals. An institution has to evaluate anything it does against the measures it has put in place for itself and adjust, enhance, eliminate, and/or introduce polices, practices, and structures as required.

    These are interesting questions that deserve further thought and ruminations. Look for more posts from me on this subject in the near future.

    References:

  • It’s gumbo weather

    Fall is starting to arrive here in South Louisiana… the temperature is finally dropping into the 70’s during the day and everyone is breaking out the winter clothing. Hey, it’s South Louisiana – you have to be careful to avoid splashing hot oil on your legs when you’re wearing shorts while you’re frying your Thanksgiving turkey.

    People down here describe this weather as being “gumbo weather”. So, in that spirit, here’s my favorite gumbo recipe. It’s adapted from one that John Folse included in one of his cookbooks. It’s a bit complicated but mais, cher’, it’s good. If you can’t get good oysters, feel free to use shrimp.

    Duck and Sausage Gumbo

    Stock
    4 (1 ½ pound) mallards or similar ducks
    4 ½ qt. water
    3 ribs celery, cut into chunks
    1 carrot, cut into half
    15 peppercorns
    4 bay leaves
    1 ¼ t. salt
    1 t. dried thyme
    ¼ t. garlic powder
    ¼ t. red pepper flakes
    Gumbo
    ¾ c. all-purpose flour
    ¾ c. vegetable oil
    2 c. chopped onions
    2 c. chopped celery
    1 c. chopped green bell pepper
    2 carrots, sliced
    1 T. chopped garlic
    1 lb. andouille or similar smoked sausage, cut into slices
    2/3 c. oyster liquor
    1/3 c. port
    2 bay leaves
    ½ t. freshly ground black pepper
    ¼ t. cayenne pepper
    2 doz. Oysters
    ½ c. chopped green onion tops
    ¼ c. chopped fresh parsley
    steamed rice
    File’ powder
    

    Stock

    Combine the ducks and all other ingredients in a stockpot. Bring to a boil. Reduce the heat and simmer for 3 to 4 hours or until the ducks are tender. Remove the ducks and chop, discarding the skin and bones. Strain the stock into a container discarding the solids. Chill until the fat has congealed on the stock. Remove the fat and reserve for other purposes (Potatoes fried in duck fat, while quite deadly from a coronary aspect, are quite tasty).

    Gumbo

    Make a roux with the flour and water in a large heavy pot. Add the vegetables and garlic. Cook until vegetables are tender. Add 3 quarts of the duck stock, reserved duck meat, the sausage, oyster liquor, port, bay leaves, black pepper, and cayenne pepper. Bring to a boil. Reduce the heat and simmer for 1 hour. Stir in the oysters, green onion tops, and parsley. Cook for 10 minutes longer. Remove and discard bay leaves. Ladle the gumbo over steamed rice to serve. Sprinkle with file’ powder if desired.

  • How to setup SSH to not ask for a password?

    I’ve had enough people ask me how to do this that I decided to post a summary here on my blog.

    Terms:
    Client: machine starting the SSH session
    Server: machine running the SSH session
    
    On Client:
    Use ssh-keygen to generate a new public/private keypair:
    ssh-keygen -t dsa
    Take the defaults (except for passphrase if you want to be picky)
    
    Now append the generated public key (id_dsa.pub) onto the authorized keys for server:
    cat id_dsa.pub | ssh uname@server 'cat >>.ssh/authorized_keys2'
    

    Make certain that .ssh directory is configured with permission 0700 and contents are permission 0600.

  • Welcome to my web site!

    P2110055

    This collection of pages is a reflection of my personal interests and experimentation. I tend to use these things two ways: trying different funky HTML things and as sort of an extended “Bookmark” file. So, pardon the mess and feel free to use this page as jumping off point to lots of neat places

    .