Yogurt

Bring a gallon of whole milk to 90°C (194°F). Do this in a large stock pot so that the milk doesn’t boil over. Get a thermometer with an alarm.
Turn off heat and let it cool to 55°C(131°F).
Stir in ~ 1/2 cup of yogurt (now down to 2 table spoons).
Leave it alone covered for 6hrs ~ 3 days.  It should curdle in 6hrs.  If you leave it longer the acid develops and whey separates.

The large volume holds the temperature longer. The main bacteria that eats lactose to make yogurt grow very well at high temperature of 55°C. This high temperature suppresses the growth of other bacteria, so you don’t have to worry too much about anything. Just keep everything clean.

Do get a thermometer with an alarm, it really helps. If the milk is too cool you can reheat it to 55°C. My thermometer with an alarm died.  I could not find a cheap one that has cool down alarm.

For starter culture I add two table spoons of the old yogurt. I’ve been able to use this for 6 months now.
When I don’t have a nice previous yogurt culture, I like the brown cow brand plain. The yogurt comes out creamy, smooth, not tart, and almost sweet. It will work with flavored kind, or other brands. Most of the other brands produce yogurt that is too tart or take too long. Don’t use moldy old yogurt. Don’t put sweetener in at this stage it makes things difficult. Sugar invites other contaminating bacteria to grow. These are not toxic but the taste usually suck. Some brands of yogurt (yoplait brand with probiotics for example) use bacteria that do not do well at 55°C and they do not come out well.

You don’t have to use whole milk, but the yogurt is richer this way.

 

Starting up servers

login as kona

cd into instiki
instiki start -d

cd  into labbook
rails server -d

(optional)
cd into stuffz

rvm use 2.2.5 (don’t know why this is needed)
cp the latest database file into db/ from ~/shuttle/

rails server -p 3001 -d (this does not work, it starts passenger though)
bundle exec passenger start -p 3001 -d

Restart for ttm server
log on as niko@198.58.101.207
cd rails/ttm_current
thin start -d
exit

crontab on Mac

crontab on Mac is phased out, use launchd

More details on writing the plist

Rye Bread

This recipe works without adding any new yeast. 

Due to Covid-19 pandemic (4/3/20), everyone is baking at home. This created a sudden shortage of yeast in stores, local and on line. Bad timing, I am at the end of a large bag of dry yeast I bought ~4 years ago. In a 2 weeks old unwashed shoebox container from the last batch of dough,  I added 3 cups of flour, 2 cups of water and sprinkle of salt. The wet dough is bubbling happily now for 2 days at room temperature.  I now have yeast.  Maybe I can maintain this as a perpetual sour dough starter, it is starting to have the sour dough smell.

No knead rye bread adapted from this book

  1. Mix the dough
  2. Shape the bread
  3. Bake

1. Mix the dough

Mix flour-yeast-salt-water  at 13-3-3-6.  I’ve halved the recipe.

Flour: 6.5 cups ( 5 cups of all purpose unbleached flour and 1.5 cups of rye flour).  You can play around with the type of flour here.  1.5 cups seem the upper limit for non-wheat flour.  For heavier dense bread, use more non wheat flour.  For light airy bread, i.e. french bread, you can use 100% bread flour.

Yeast: 1.5 table spoons.  Don’t worry about the kind of yeast, if it is alive it will work.  Don’t bother proofing.  I’ve been using less, 1 table spoon and letting the dough rise longer.

Salt: 1.5 table spoons.  I’ve been using 1 table spoon.  The role of salt is to limit the growth of yeast.  This has nothing to do with flavor.

Water: 3 cups.  Tap water is fine.  Don’t need to adjust the temperature.  In 18 hours, starting temperature of the water makes little difference.

I mix the dough using a dough whisk.  You can use two knives if you don’t have one. But forks and spatulas just suck. I use a  plastic shoe  box for my dough. The dough has to sit covered at room temperature for at least an over night.  Then the dough can be kept in the fridge for ~3 weeks.  This recipe makes three loaves. You can mix the dough in a round mixing bowl with a plastic on top and it will work fine.  That setup really sucks for the long term storage.  With two shoe boxes, you can start two different breads and keep them stacked in the fridge. During storage in the fridge, the dough develops acid and takes on a sour doughy flavor which is nice.  And if you like don’t wash the container between different batches of to carry along the sough dough flavor.

2. Shape the bread. On a cookie sheet sprinkle flour and spread this with your hands.  Then grab the dough with flour covered hands.  Let gravity pull the dough down to make a rectangular shape.  Fold the dough in half and close the edges with your finger and place it on the flour coated cookie sheet.  Slash the bread with a sharp knife to prevent the bread from cracking open. Sprinkle caraway seeds on top.  Let the bread rest for ~15 min to return to room temperature.  You can also make the bread into different shapes.  Fennel seeds, sesame seeds, etc are also nice too.

3. Baking.  450°F  in a steamed oven for 50 minutes at 5000 feet.  At sea level shorter baking time will do.  Put a pan of water in the bottom of the oven to generate the steam.  And also spray water on the walls of the water towards the end of the baking to get the golden crust.

4. Variations: Put 1~2 table spoons of cumin seeds in the dough.  This makes a very fragrant bread.

rhubarb sour cream cake

rhubarb-sour-cream-crumb-cake

Quick table dump from Rails 3

Table from Rails 3

Method 1,  csv output from the index as explained here

To the controller, add format.csv like below:

[ruby]

respond_to do |format|

format.html # index.html.erb

format.json { render json: @people }

format.csv

end

[/ruby]

And create a view, people.csv.erb with something like this:

[plain]<% @people.each do |p| > <= raw “#{p.first_name} #{p.last_name}” > < end %>[/plain]

When you want a quick table,  add extension “.csv”  after the name of the view in the URL.  If you add this extension before the question mark, you can also output search results.

[text]

localhost:3000/people<span style="color: #33cccc;">.csv</span>

localhost:3000/search/people<span style="color: #33cccc;">.csv</span>?utf8=✓&q=71..80&commit=find

[/text]

Method 2, yaml dump in the console

rails c
y People.find([1,2,3], select=>[id, name])

Method3, using table_print from the console
Install table_print

From the console type:

[shell]
tp People.where(id: 3..14), :id, :name => {:width => 60}
[/shell]

Instiki migration

Instiki

Old server: version 0.19.1,  SQLite3, Mac OS 10.5

New server: version 0.19.5, MySQL, Linux Debian

That was the plan.  Use rake to migrate and change the database yaml, that should do it right?  That didn’t work.  The version 0.19.5 does not have mysql driver.  Installing the mysql.rb was a pain.  Between rvm, gem, and bundler, mysql.rb is not recognized.  I don’t care if this runs on mysql or sqlite.

So a different approach was taken.  A week later I don’t recognize the webpages I was following.

  1. Installed instiki from git
  2. sudo apt-get install ruby1.8-dev swig libsqlite3-ruby1.8 flex bison
  3. Ran bundler somewhere here, I don’t know if this was necessary or helpful.
  4. Exported the old wiki as textile.
  5. Imported the content into a new wiki.
  6. Minor edits of the page names, namely ‘+’ were inserted into the titles.

Currently Instiki is running on WEBrick and stored in SQLite.

spam filter and instiki

I had to migrate my instiki and pimki to a new server out of the basement to a rented server at Linode.  I’ve been running these wikis for more than eight years, though it is just notes and todo lists for myself, they are invaluable to me.

The new version has a spam filter and I am stuck.  I guess obscurity may not be enough protection.  A page had a title “ribosomal RNA notes” and this did not pass the spam filter.  I looked at the config/spam_pattern.txt and there was nothing obvious.

I can figure this out from the spam_pattern.txt or the offending text  ribosomal RNA notes.  I’ll start from the offending text since that is shorter and I don’t need to restart the server each time.

  1. which word, ribosomal, RNA, or notes?  –ribosomal
  2. back end deletion –ribosoma ribosom
  3. front end deletion –ibosomal bosomal osomal somal omal
  4. spam_pattern.txt has soma

I remove soma, restart the server, and ribosomal passes the filter. I’ll live without the protection for now. I’ll be a biologist for little while longer and I can think of many words that include soma.  I don’t feel like writing a exceptions list.