I have an Apple Watch problem. I'm obsessed. I can't not close my rings. Every challenge, accepted.
So the March Challenge is 31 workouts - no problem. I double up a couple days just to be sure.
Then it's the 26th and I look at my progress - wait, 13? It's not counting all my workouts!!
But when I look at the Workouts tab on the iPhone Activity app, sure enough, they're all there.
Googled around, nothing jumped out at me, so I started a chat with Apple.
To make a long story short, they had me unpair and re-pair my watch and my phone, which was kind of time consuming but not a big deal.
And the problem was fixed! March Challenge completed!!
Now if this happens to you - even if you just have to unpair/re-pair your watch and phone for any reason - here are some things to keep in mind:
1. by the end of the day, my watch battery was super low. if you're going to unpair/re-pair, you might want to put it on the charger while you do so.
2. I got to the grocery store to discover that my credit cards weren't there anymore. you have to go into the Watch app on iPhone and re-add your cards, which is just a couple of clicks, BUT you do have to know your cards' PIN codes.
My thoughts on food, technology, politics, running and... nope, those are the only thoughts I've got!
Thursday, March 26, 2020
Wednesday, August 28, 2019
Homemade Taco Seasoning
I haven't made this yet, but I don't want to lose it
https://gimmedelicious.com/2018/03/16/the-best-homemade-taco-seasoning/
https://gimmedelicious.com/2018/03/16/the-best-homemade-taco-seasoning/
Wednesday, July 31, 2019
EXIF metadata with a Promise
I had occasion to use exiftool recently, but instead of a callback, I'd rather use promises.
This is what I came up with:
const exif = require('exiftool');
const util = require('util');
const exif_metadata = function (data) {
return new Promise((resolve, reject) => {
exif.metadata(data, (err, metadata) => {
if (err) {
reject(new Error(err));
} else {
resolve(metadata);
}
});
});
};
Worked great!
const fs_readFile = util.promisify(fs.readFile);
Promise.resolve()
.then(() => {
return fs_readFile(path);
})
.then(data => {
return exif_metadata(data);
})
.then(metadata => {
console.log('metadata: %O', metadata);
})
.catch(error => {
res.send(error.toString());
});
This is what I came up with:
const exif = require('exiftool');
const util = require('util');
const exif_metadata = function (data) {
return new Promise((resolve, reject) => {
exif.metadata(data, (err, metadata) => {
if (err) {
reject(new Error(err));
} else {
resolve(metadata);
}
});
});
};
Worked great!
const fs_readFile = util.promisify(fs.readFile);
Promise.resolve()
.then(() => {
return fs_readFile(path);
})
.then(data => {
return exif_metadata(data);
})
.then(metadata => {
console.log('metadata: %O', metadata);
})
.catch(error => {
res.send(error.toString());
});
Saturday, July 27, 2019
Add Port to UFW
I'm running UFW (uncomplicated firewall) to restrict traffic into my Linux system.
And while being super restrictive is generally a good thing, there are times when you have to poke a new hole and connect from another system inside the house.
Usually it's a new app running on a new port and since I never remember the command to allow this, here it is:
$ sudo ufw allow from 192.168.1.0/24 to any port 3100
You're welcome, future self!
And while being super restrictive is generally a good thing, there are times when you have to poke a new hole and connect from another system inside the house.
Usually it's a new app running on a new port and since I never remember the command to allow this, here it is:
$ sudo ufw allow from 192.168.1.0/24 to any port 3100
You're welcome, future self!
Saturday, July 20, 2019
The DX-M04 Shelving System
My dad bought a DX-M04 shelfy thing and I was tasked with its assembly.
I don't think a nicer set of shelves can be had at any price. And do you see the little screwdriver pictured in the instructions? YES, the DX-M04 really does come with a screwdriver!! And the bottom panel (part #3) has feet. Yes, they really did think of everything.
If I could make one suggestion:
At step three, you might want to leave the bottom a little loose, so when, in step four, you insert the back, you can wiggle it into the groove in the bottom. Then after you've installed the top in step five, you can go back and tighten the bottom.
If you need some shelves, you can't go wrong with the DX-M04. No, no idea where you'd buy them, but for the right price, I can put my hands on a really well assembled set.
I don't think a nicer set of shelves can be had at any price. And do you see the little screwdriver pictured in the instructions? YES, the DX-M04 really does come with a screwdriver!! And the bottom panel (part #3) has feet. Yes, they really did think of everything.
If I could make one suggestion:
At step three, you might want to leave the bottom a little loose, so when, in step four, you insert the back, you can wiggle it into the groove in the bottom. Then after you've installed the top in step five, you can go back and tighten the bottom.
If you need some shelves, you can't go wrong with the DX-M04. No, no idea where you'd buy them, but for the right price, I can put my hands on a really well assembled set.
Friday, July 19, 2019
MySQL CRAZIES
Did you install a new MySQL and things just aren't working the way you're used to?
WHAT?? ME TOO!!
In this case, I'm inserting just a few columns, and there are non-specified columns without default values.
In my other database it just works - I know, not correct behavior, but it's what I'm used to.
In my new database I get this error:
ERROR 1364 (HY000): Field 'xxx' doesn't have a default value
So what's the difference?
STRICT MODE
Thanks, documentation!!
Before, strict mode. Giving me an error...
mysql> select @@GLOBAL.sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
After, non-strict mode. Working like my other database!
mysql> SET GLOBAL sql_mode = '';
Query OK, 0 rows affected, 1 warning (0.00 sec)
WHAT?? ME TOO!!
In this case, I'm inserting just a few columns, and there are non-specified columns without default values.
In my other database it just works - I know, not correct behavior, but it's what I'm used to.
In my new database I get this error:
ERROR 1364 (HY000): Field 'xxx' doesn't have a default value
So what's the difference?
STRICT MODE
Thanks, documentation!!
Before, strict mode. Giving me an error...
mysql> select @@GLOBAL.sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
After, non-strict mode. Working like my other database!
mysql> SET GLOBAL sql_mode = '';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Tuesday, May 14, 2019
MySQL Passwords
I'll never remember this unless I write it down here. And hey, maybe it will help somebody else.
Problem:
Solution:
mysql> alter user 'username'@'localhost' identified with mysql_native_password by 'password';
See also: https://github.com/go-sql-driver/mysql/issues/785
Problem:
- MySQL version 8+
- github.com/go-sql-driver/mysql
- db, err = sql.Open("mysql", "username:password@/database")
(no error) - query, err := db.Query("SELECT * FROM TABLE")
this authentication plugin is not supported
Solution:
mysql> alter user 'username'@'localhost' identified with mysql_native_password by 'password';
See also: https://github.com/go-sql-driver/mysql/issues/785
Friday, March 08, 2019
How to Cook Chicken
This one, too.
375 degrees for 20 minutes, was it?
WIP: I'll note more detail next time.
375 degrees for 20 minutes, was it?
WIP: I'll note more detail next time.
How to Cook Salmon
I'm going to forget if I don't write this down.
- 1 lb salmon
- couple TBS oil
- Fish seasoning (salt, etc)
425 deg, 25 min
WIP: I'll write down more about this when I get a chance
- 1 lb salmon
- couple TBS oil
- Fish seasoning (salt, etc)
425 deg, 25 min
WIP: I'll write down more about this when I get a chance
Wednesday, February 06, 2019
My Very Own Burrito Recipe
I believe it was Benjamin Franklin who first said, "eat a burrito a day."
His recipe has been lost to the fog of time, but here's one I think he would like:
Makes two good-sized burritos
Ingredients
Steps
Serve with a little more salsa, some Spanish rice, maybe some refried beans.
His recipe has been lost to the fog of time, but here's one I think he would like:
Makes two good-sized burritos
Ingredients
- 1/4 lb., your choice of meat, cooked (alternatively 1/2 cup of cooked beans)
- 1/2 cup, cooked rice
- 1/2 cup, grated cheese - I used cheddar
- 1/4 cup, salsa
- two 10-inch flour (or gluten-free) tortillas
Steps
- Mix it all up (everything but the tortillas, of course) in a microwave-safe dish (or fire-safe, if you're into that kind of thing).
- Heat (microwave, fire, etc) the mixture until the cheese is melted
- Give it all a good stir
- Divide the melty mixture between the two tortillas, flattening and shaping it so as to create proper burrito-shaped innards
- Fold the two sides toward the middle, then the near end over the center; finally flop the middle part onto the other end of the tortilla - please don't make me draw a diagram
Serve with a little more salsa, some Spanish rice, maybe some refried beans.
And enjoy!
Monday, December 31, 2018
Onion Dip Experiment #2
It's time to try the onion dip recipe again.
Here are my notes from last time.
Here's what I'm doing this time...
Ingredients
Melt the butter. Add the onions and 1/2 tsp salt. Cook until golden brown. You'll know they're golden brown when a spouse or other responsible adult tells you you're golden brown. It should take about 30-35 minutes.
Put the cooked onions in a tightly covered dish and refrigerate until cool. While you wait, you can tweet or write a blog post about the experience.
Once the onions are cool, mix them in a medium bowl with the yogurt, 1/4 tsp salt, the pepper, and the chives.
I know I said I was going to try adding cayenne pepper. We'll see about that, and I'll let you know. Nah, I think it's perfect as-is.
So as promised, the sodium content. The TOTAL sodium in the whole recipe is just about 1000 mg:
Let's compare this with Lipton's onion soup mix. The mix itself has 610 mg. The sour cream adds another 40-something.
This recipe reduces the sodium by more than 80%. That's quite a savings!!
Can we get that number up to 96%? Stay tuned, I'll try that in a couple weeks!
Here are my notes from last time.
Here's what I'm doing this time...
Ingredients
- 2-3 small-medium onions (2 cups finely chopped)
- 2 TBS unsalted butter
- 3/4 tsp Kosher salt
- 1/8 tsp pepper
- 2 cups, plain yogurt
- 2 TBS chives
Melt the butter. Add the onions and 1/2 tsp salt. Cook until golden brown. You'll know they're golden brown when a spouse or other responsible adult tells you you're golden brown. It should take about 30-35 minutes.
Put the cooked onions in a tightly covered dish and refrigerate until cool. While you wait, you can tweet or write a blog post about the experience.
Once the onions are cool, mix them in a medium bowl with the yogurt, 1/4 tsp salt, the pepper, and the chives.
So as promised, the sodium content. The TOTAL sodium in the whole recipe is just about 1000 mg:
- onions: 8 mg
- unsalted butter: 0 mg
- 3/4 tsp kosher salt: 840 mg
- pepper: <1 mg
- yogurt: 150 mg
- chives: 0 mg
Let's compare this with Lipton's onion soup mix. The mix itself has 610 mg. The sour cream adds another 40-something.
This recipe reduces the sodium by more than 80%. That's quite a savings!!
Can we get that number up to 96%? Stay tuned, I'll try that in a couple weeks!
Tuesday, December 25, 2018
Sausage Bread
Originally from an old friend of the family.
Sausage Bread
Mix dough according to directions on box. Let rise 45 min. Roll out 1/4" thick oval. Cook onions wish sausage (not brown). Drain excess fat. Add all other ingredients. Stir until cheese has melted. Let cool. Don't spread to edges. Roll up and pinch ends together. Shape into crescent. Place on greased cookie sheet (with edges). Bake 20 min at 400 degrees until brown and toothpick comes out fairly clean.
I'm going to try and make this with gluten free bread dough sometime soon. I'll report back.
Sausage Bread
- 1 box of hot roll mix
- 1/4 cup Parmesan cheese
- 1/2 cup grated Swiss cheese
- 2 eggs beaten
- 1/4 tsp Tabasco
- 1/2 tsp salt
- 2 tbsp parsley
- 1 onion chopped
- 1 lb sausage, hot or sweet
Mix dough according to directions on box. Let rise 45 min. Roll out 1/4" thick oval. Cook onions wish sausage (not brown). Drain excess fat. Add all other ingredients. Stir until cheese has melted. Let cool. Don't spread to edges. Roll up and pinch ends together. Shape into crescent. Place on greased cookie sheet (with edges). Bake 20 min at 400 degrees until brown and toothpick comes out fairly clean.
I'm going to try and make this with gluten free bread dough sometime soon. I'll report back.
Sunday, December 23, 2018
Italian Wedding Soup
I found this great recipe for Italian Wedding Soup.
I used a one-pound box of baby spinach for the greens.
Instead of the three kinds of meat, I just used a pound of ground turkey.
Gillian's (unseasoned) gluten free bread crumbs worked very nicely.
I made the meatballs smaller - about 3/4 inch - which I find much nicer for soup.
And when you put them into the broth, it's a good idea to count them, so you know just how many you have if you're divvying them up for a large crowd. This batch served thirteen people as a soup course with a couple cups left over.
The spinach and puffed-up meatballs insisted on floating to the top, so swirling in the egg and cheese mixture was a bit difficult. I actually removed a bunch of it to perform this step!
Also worth noting: The meatball parsley should be chopped finely. And the recipe calls for a teaspoon of minced garlic - two cloves in the garlic press was just the right amount.
Garnish means "don't eat me" in Italian. Next time I'd use whole leaves of parsley and more coarsely grated cheese. (yes, eat the cheese)
Here's a pantry/fridge/freezer/shopping list for your convenience:
3 quarts homemade chicken stock (I might have used four? sorry, not sure)
1 lb. ground turkey
1 cup unseasoned (gluten free for my needs) bread crumbs
1/8 lb. Parmigiano-Reggiano (sorry, not sure how much I actually used)
3 large eggs
a medium onion
a bunch of fresh parsley
two cloves of garlic
kosher salt
black pepper grinder
I used a one-pound box of baby spinach for the greens.
Instead of the three kinds of meat, I just used a pound of ground turkey.
Gillian's (unseasoned) gluten free bread crumbs worked very nicely.
I made the meatballs smaller - about 3/4 inch - which I find much nicer for soup.
And when you put them into the broth, it's a good idea to count them, so you know just how many you have if you're divvying them up for a large crowd. This batch served thirteen people as a soup course with a couple cups left over.
The spinach and puffed-up meatballs insisted on floating to the top, so swirling in the egg and cheese mixture was a bit difficult. I actually removed a bunch of it to perform this step!
Garnish means "don't eat me" in Italian. Next time I'd use whole leaves of parsley and more coarsely grated cheese. (yes, eat the cheese)
Here's a pantry/fridge/freezer/shopping list for your convenience:
3 quarts homemade chicken stock (I might have used four? sorry, not sure)
1 lb. ground turkey
1 cup unseasoned (gluten free for my needs) bread crumbs
1/8 lb. Parmigiano-Reggiano (sorry, not sure how much I actually used)
3 large eggs
a medium onion
a bunch of fresh parsley
two cloves of garlic
kosher salt
black pepper grinder
Tuesday, December 11, 2018
Onion Dip Experiment #1
I love onion dip. Who doesn't? People on low-sodium diets, that's who. And besides, who wants all the crap that's in those processed soup packages? Not me, thanks!
So I went looking for an onion soup recipe to play with, and I found this one. My plan was to make it the first time exactly as written, but since I had some sour cream left over from Hanukkah, I combined that with some plain yogurt (Siggi's). And instead of unsalted butter and salt, I used the Land O' Lakes spread we had in the fridge. The rest of the salt I figured I would leave out.
The mixture is way too thick for my taste, so I think instead of the cream cheese, I'll stick with all yogurt next time - Greek or Icelandic.
My dip seemed a little bland, so I added some garlic powder. I guess I wish I'd read the original recipe's comments section, because somebody suggested adding a little cayenne pepper. That seems like a better idea.
Another commenter suggested getting a better texture by putting the cooked onions through a food processor. That seems like a lot of work, so I think next time I'll chop the onions instead of just slicing them before cooking them.
Now as for the salt, the recipe calls for cooking with a half teaspoon of salt, which I left out, though I did use a buttery spread containing about 25 mg of sodium per serving of dip. The additional quarter teaspoon of salt the recipe calls for only adds another 30 mg of sodium per serving, so I think next time, I'll leave it in. The overall sodium savings compared with processed soup mix has to be at least 500 mg. Once I have the recipeperfected the way I like it, I'll do that math.
One more thing, I put a small container in the freezer. I'll thaw it out next week and see if it's any good. Update: I froze a 5 oz yogurt container of the original unsalted recipe. It was in there for about a week and then I put it in the refrigerator for about a day to thaw. The texture was just as it was, still too thick for my taste. And taste, just the same. I would have added some cayenne, but dang it, there wasn't any in the cupboard. That will have to wait for experiment #2.
UPDATE: read all about Onion Dip Experiment #2!
So I went looking for an onion soup recipe to play with, and I found this one. My plan was to make it the first time exactly as written, but since I had some sour cream left over from Hanukkah, I combined that with some plain yogurt (Siggi's). And instead of unsalted butter and salt, I used the Land O' Lakes spread we had in the fridge. The rest of the salt I figured I would leave out.
The mixture is way too thick for my taste, so I think instead of the cream cheese, I'll stick with all yogurt next time - Greek or Icelandic.
My dip seemed a little bland, so I added some garlic powder. I guess I wish I'd read the original recipe's comments section, because somebody suggested adding a little cayenne pepper. That seems like a better idea.
Another commenter suggested getting a better texture by putting the cooked onions through a food processor. That seems like a lot of work, so I think next time I'll chop the onions instead of just slicing them before cooking them.
Now as for the salt, the recipe calls for cooking with a half teaspoon of salt, which I left out, though I did use a buttery spread containing about 25 mg of sodium per serving of dip. The additional quarter teaspoon of salt the recipe calls for only adds another 30 mg of sodium per serving, so I think next time, I'll leave it in. The overall sodium savings compared with processed soup mix has to be at least 500 mg. Once I have the recipe
One more thing, I put a small container in the freezer. I'll thaw it out next week and see if it's any good. Update: I froze a 5 oz yogurt container of the original unsalted recipe. It was in there for about a week and then I put it in the refrigerator for about a day to thaw. The texture was just as it was, still too thick for my taste. And taste, just the same. I would have added some cayenne, but dang it, there wasn't any in the cupboard. That will have to wait for experiment #2.
UPDATE: read all about Onion Dip Experiment #2!
Monday, November 26, 2018
Soup: Split Pea with Turkey
Thanksgiving took place under my roof, so naturally I took custody of the turkey carcass - with an eye toward soup, of course! On the other hand, I've had a hankering for split pea soup, but preferring to avoid all the sodium that ham is full of.
Enter this recipe. I used turkey broth instead of chicken. And instead of ham, I used the turkey that boiled off the bones during the broth-making. And I left out the salt (and forgot about the pepper).
It's really good!
There's still plenty of broth left over, some of which will turn into Sherry Noodle Soup. But I also plan to make a batch (or half batch) of split pea with a cup of water swapped out for sherry. UPDATE: I swapped 1/2 cup water for sherry, which really helps when you cook without salt. It was a great addition!
Enter this recipe. I used turkey broth instead of chicken. And instead of ham, I used the turkey that boiled off the bones during the broth-making. And I left out the salt (and forgot about the pepper).
It's really good!
There's still plenty of broth left over, some of which will turn into Sherry Noodle Soup. But I also plan to make a batch (or half batch) of split pea with a cup of water swapped out for sherry. UPDATE: I swapped 1/2 cup water for sherry, which really helps when you cook without salt. It was a great addition!
Saturday, November 17, 2018
Apache Reverse Proxy for Microservice Subdomain
You've got Apache 2 running. What more does a plain-old simple HTML site need, after all?
Now you want to add a microservice, but you don't want to add more hosting. Can you add it to this existing host? Yes you can!
Here's how to add a subdomain - tictactoe.example.com - that will send requests to your microservice that's listening on port 8888.
Put the following in /etc/apache2/sites-available/tictactoe.com.conf
<VirtualHost *:80>
ServerName tictactoe.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ProxyPass "/" "http://example.com:8888/"
ProxyPassReverse "/" "http://example.com:8888/"
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Then add your site:
sudo a2ensite tictactoe.com
The best part is your Go code (or Rust, Ruby, Python, whatever) can just handle HTTP. You can use Let's Encrypt/certbot to add the HTTPS virtual host that will proxy secure traffic to your microservice as well.
UPDATE: Nothing like getting an invalid command error trying to do this on an Apache without proxy enabled. So...
sudo a2enmod proxy_http
Now you want to add a microservice, but you don't want to add more hosting. Can you add it to this existing host? Yes you can!
Here's how to add a subdomain - tictactoe.example.com - that will send requests to your microservice that's listening on port 8888.
Put the following in /etc/apache2/sites-available/tictactoe.com.conf
<VirtualHost *:80>
ServerName tictactoe.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ProxyPass "/" "http://example.com:8888/"
ProxyPassReverse "/" "http://example.com:8888/"
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Then add your site:
sudo a2ensite tictactoe.com
The best part is your Go code (or Rust, Ruby, Python, whatever) can just handle HTTP. You can use Let's Encrypt/certbot to add the HTTPS virtual host that will proxy secure traffic to your microservice as well.
UPDATE: Nothing like getting an invalid command error trying to do this on an Apache without proxy enabled. So...
sudo a2enmod proxy_http
Sunday, November 11, 2018
All kinds of Ubuntu troubles (fixed)
1. Can't get Ubuntu to start up without using recovery mode? Try making this change in /etc/defaults/grub
GRUB_CMDLINE_LINUX_DEFAULT="nomodeset"
But then don't forget to
$ sudo update-grub
I've lost track of all the sites I looked at that steered me in the right direction, but I was still having trouble because I'd forgotten the update-grub step!
2a. Trouble getting VNC to install and start up? Look no further than Ubuntu's own Screen Sharing feature!
2b. Once I got that working, I discovered that I could not connect using:
- the RealVNC viewer (error: "Unable to connect to VNC Server using your chosen security setting. Either upgrade VNC Server to a more recent version from RealVNC, or select a weaker level of encryption.")
- MacOS Screen Sharing (error: "The software on the remote computer appears to be incompatible with this version of Screen Sharing.")
Thursday, November 01, 2018
Git won't Pull
Problem: cannot connect to remote
$ git pull
nc: getaddrinfo: nodename nor servname provided, or not known
ssh_exchange_identification: Connection closed by remote host
fatal: Could not read from remote repository.
$ git remote -v
origin git@github.com:blah/blah (fetch)
origin git@github.com:blah/blah (push)
$ cat .git/config
...
sshCommand = ssh -o 'ProxyCommand=nc -X connect -x blah:80 %h %p'
...
Aha!
Possible solution: remove sshCommand line from .git/config unless you are ALWAYS connecting through the proxy server.
$ git pull
nc: getaddrinfo: nodename nor servname provided, or not known
ssh_exchange_identification: Connection closed by remote host
fatal: Could not read from remote repository.
origin git@github.com:blah/blah (fetch)
origin git@github.com:blah/blah (push)
...
sshCommand = ssh -o 'ProxyCommand=nc -X connect -x blah:80 %h %p'
...
Aha!
Possible solution: remove sshCommand line from .git/config unless you are ALWAYS connecting through the proxy server.
Friday, October 26, 2018
Sherry Noodle Soup (v2!)
Back in the day, you could find my recipe for Sherry Noodle Soup on dave-net.com. Well that old domain is long gone. And sadly, I don't think you can even find it on The Wayback Machine!
But I found it on a hard drive and decided to cook up a batch. But nah, that recipe needed a little tweak here and there. So without further ado, here's version two...
But I found it on a hard drive and decided to cook up a batch. But nah, that recipe needed a little tweak here and there. So without further ado, here's version two...
Sherry Noodle Soup
Ingredients:
- A couple chicken bodies or one turkey frame, with a little meat left on (you'll want about two cups of meat off the bones later)
- 3 quarts, water
- 1 medium-large onion (half quartered, half chopped)
- 2 tsp, salt (if you really must)
- 1 cup, dry sherry
- 1½ tsp, oregano
- 1 tsp, thyme
- 1/8 tsp, ground black pepper
- 2 cups, chopped carrots
- 2 cups, chopped celery
- 2 cups, raw mushrooms (optional)
- 1 lb, cooked pasta (or dry + ??? cups, water TBD)
Combine meaty bones, water, half of the onion (quartered) in a large pot. Bring to boil and then simmer for an hour or so.
Remove everything from the broth. Salvage whatever meat you can from the bones. Discard the bones and the soggy onion and the other yucky stuff. Set aside two cups of meat for later. The rest will make a nice sandwich! you can give to your dog! ONLY GIVE MEAT TO YOUR DOG IF YOU LEAVE OUT THE ONION.
Strain the broth. If you like, you can let it cool and skim the fat off the top.
Combine the broth with the meat and the rest of the raw onion (chopped) and everything else except for the pasta, which you should save for later. Bring it all to a boil and then simmer for 30 minutes.
Add the pasta (cooked or dry plus ??? cups of water) and simmer for another ten minutes or so.
Enjoy!!
Update (12/11/18): I made this with mushrooms for the first time the other day, and I really liked how it turned out!
Update (12/11/18): I made this with mushrooms for the first time the other day, and I really liked how it turned out!
Saturday, June 16, 2018
Fix your iTunes names (and numbers!)
I made a thing!
https://github.com/dldnh/fix-itunes-names
https://github.com/dldnh/fix-itunes-names
When Amazon announced they were retiring their Music Storage Subscriptions, I decided to download all of my music.
This was troublesome in a number of ways. The metadata was pretty well screwed up, so there would be songs without an artist name or album name. So I ended up downloading just one album at a time, so I would know which album was which. Yeah, total PITA.
But once that was done, I found I had a number of songs with names like 'dd-tt- Title of the Song' where dd is the disc number and tt is the track number. And thankfully so, since some of these tracks didn't have the disc or track number in the metadata.
So what I've done is made this little AppleScript (called
Fix_iTunes_names.scpt) that will go through all of the songs and rename them from 'dd-tt- Title of the Song' to just 'Title of the Song' - but ONLY IF dd matches the disc number and tt matches the track number. So totally safe!
And then I added another Applescript (called
Fix_itunes_names_and_numbers.scpt) for more adventurous folks that will also rename songs from 'dd-tt- Title of the Song' to just 'Title of the Song' and ALSO set the disc number and tarck number to dd and tt - but ONLY IF either number was blank to start with.
You don't have to buy me a beer or anything, but if you want to, feel free - and thanks! http://paypal.me/dldnh
Subscribe to:
Posts (Atom)
