How to Make Pesto like an Italian Grandmother
One key to perfect pesto is chopping all the ingredients by hand, preferably with a sharp mezzaluna or knife. I gave my double-bladed mezzaluna to a friend last year because it was collecting dust (I also didn't like how ingredients would get stuck between the blades), but have a large half-moon shaped pizza cutter that works like a dream. Francesca's mom even approved and said it cut her chopping time in half. This pesto will keep a bit in the refrigerator, but it really hits its peak when served soon after it is made.
The technique here is: chop a bit, add some ingredients, chop some more. I think part of the reason she does it this way (instead of chopping everything all at once) is because some things get chopped into oblivion, while some not as much - it encourages specturm of cut sizes throughout the pesto contributing to the overall texture. All told, the chopping took me a leisurely twenty to thirty minutes, I wasn't in any particular rush.
You'll notice this recipe doesn't have any added salt (just the saltiness from the cheese), make sure your pasta water is well salted if you are going to use this pesto on pasta or the overall flavor profile will fall flat. Also, be sure to adjust for seasoning before serving. With food this simple, you need to get the seasoning right.
1 large bunch of basil, leaves only, washed and dried
3 medium cloves of garlic
one small handful of raw pine nuts
roughly 3/4 cup Parmesan, loosely packed and FRESHLY GRATED
A few tablespoons of extra-virgin olive oil
Special equipment: large mezzaluna for chopping
Start chopping the garlic along with about 1/3 of the basil leaves. Once this is loosely chopped add more basil, chop some more, add the rest of the basil, chop some more. I scrape and chop, gather and chop. At this point the basil and garlic should be a very fine mince. Add about half the pine nuts, chop. Add the rest of the pine nuts, chop. Add half of the Parmesan, chop. Add the rest of the Parmesan, and chop. In the end you want a chop so fine that you can press all the ingredients into a basil "cake" - see the photo up above. Transfer the pesto "cake" to a small bowl (not much bigger than the cake). Cover with a bit of olive oil, it doesn't take much, just a few tablespoons.
You can set this aside or place it in the refrigerator until you are ready to use it. Just before serving give the pesto a quick stir to incorporate some of the oil into the basil. She occasionally thins the pesto with a splash of pasta water for more coverage, but for our gnocchi this wasn't necessary.
Makes about 1 cup.
Tuesday, October 27, 2009
Wednesday, October 21, 2009
log4net - Force New (Specified) Log File
private static readonly ILog alog = LogManager.GetLogger("AlgoLogger");
public void SwitchToNewUniqueAlgoLogFile(long scheduleID)
{
ILoggerRepository logRepos = LogManager.GetRepository();
IAppender[] logAppenders = logRepos.GetAppenders();
string targetAppenderName = "myAppender"
// first find the logger we are actually looking for
for (int i = 0; i < logAppenders.Length; i++)
{
IAppender appender = logAppenders[i];
if (appender.Name == targetAppenderName )
{
// cast generic appender to our type
RollingFileAppender rfa = appender as RollingFileAppender;
// get full name of current log file
string oldFName = rfa.File;
// extract path
int indexOfLastSlash = oldFName.LastIndexOf(@"\");
string path = oldFName.Substring(0, indexOfLastSlash + 1);
// generate new log file name
string newLogFileName = "newLog.txt"
string newFullFileName = path + newLogFileName;
// set new file name
rfa.File = newFullFileName;
// indicate to change
rfa.ActivateOptions();
break;
}
}
}
Switching Log-Files During Logging
private static readonly ILog alog = LogManager.GetLogger("AlgoLogger");
public void SwitchToNewUniqueAlgoLogFile(long scheduleID)
{
ILoggerRepository logRepos = LogManager.GetRepository();
IAppender[] logAppenders = logRepos.GetAppenders();
string targetAppenderName = "myAppender"
// first find the logger we are actually looking for
for (int i = 0; i < logAppenders.Length; i++)
{
IAppender appender = logAppenders[i];
if (appender.Name == targetAppenderName )
{
// cast generic appender to our type
RollingFileAppender rfa = appender as RollingFileAppender;
string oldFName = rfa.File;
int indexOfLastSlash = oldFName.LastIndexOf(@"\");
string path = oldFName.Substring(0, indexOfLastSlash + 1);
// generate new log file name
string scheduleName = SQLHandler.GetScheduleName(scheduleID);
string newLogFileName = "newLog.txt"
string newFullFileName = path + newLogFileName ;
rfa.File = newFullFileName;
rfa.ActivateOptions();
break;
}
}
}
Thursday, October 1, 2009
Debugging Python
The standard python includes includes a debug module : PDB
Python Docs Entry @ doc.python.org
Cheat Sheet
reqd to use the debugger
= import pdb
define breakpoint
= pdb.set_trace()
halts program execution, and drops you into the debugger console
commands available within debugger console
n = execute next line of code, making entire method call
s = execute next line, stepping into any method calls
c = continue to next break point
q = quit
!xxxxx = execute python instruction xxxxx
Tutorials
- Ayman Hourieh Blog Post
- Steve Ferg Blog Post
- SonTek / John Anderson Blog Post
Python Docs Entry @ doc.python.org
Cheat Sheet
reqd to use the debugger
= import pdb
define breakpoint
= pdb.set_trace()
halts program execution, and drops you into the debugger console
commands available within debugger console
n = execute next line of code, making entire method call
s = execute next line, stepping into any method calls
c = continue to next break point
q = quit
!xxxxx = execute python instruction xxxxx
Tutorials
- Ayman Hourieh Blog Post
- Steve Ferg Blog Post
- SonTek / John Anderson Blog Post
C# Object.CompareTo(otherOb)
big.CompareTo(small) = 1
self.CompareTo(self) = 0
small.CompareTo(big) = -1
self.CompareTo(self) = 0
small.CompareTo(big) = -1
Subscribe to:
Posts (Atom)