Sid Carter

Chana Saag (Chickpea Spinach Curry)

Well, you gotta write something. Why not write the recipe I used to make Chana Saag or Chickpea Spinach Curry tonite.

You’ll need:

  • 1/2 tsp of mustard seeds
  • 1/2 tsp of cumin seeds
  • 5-6 curry leaves
  • 1 inch cinnamon stick
  • 1 onion – thinly sliced or chopped
  • 1 tbsp ginger garlic paste
    • Alternately 1 inch of grated ginger and 5 cloves of minced garlic
  • 1 can of diced or pureed tomatoes
  • 1/2 tsp of turmeric powder
  • 1/2 tsp of chilli powder
  • 1/2 tsp of garam masala
  • 1 tsp of salt or to taste
  • 2 15oz cans of chickpeas
  • 1 pack of frozen spinach or 1 lb fresh baby spinach
  • a pinch of chilli powder (cayenne)

Let’s start cooking. Make sure you have your favorite apron on – it’s important.

  1. Start with some oil in a saucepan on medium heat.
  2. Once the pan is hot, add the mustard seeds, cumin seeds, cinnamon stick and curry leaves.
  3. When the mustard seeds start popping, increase the heat to high and add the onions. Saute them until they’re golden.
  4. Reduce heat to medium and add turmeric powder, chilli powder, garam masala and salt.
  5. Add the ginger garlic paste or the grated ginger and minced garlic. Stir and mix everything well.
  6. Add the tomatoes and cook for 3-4 minutes until everything is mixed well. Ensure there are not chunky tomato pieces.
  7. Add the chickpeas next and mix everything well. Stir regularly and let it cook for 3-4 minutes.
  8. Add a pinch of cayenne chilli powder – for extra spice. You can skip it if you don’t want the dish hot.
  9. Add the spinach and let it simmer for 10 minutes with the lid on.

And that should be it. Serve with some warm roti, naan or basmatic rice. It’s gonna be yummy!

Stay Hungry. Stay Foolish.

It’s a new year and new things to come, built on old ideas and thoughts that have been lost and forgotten.

This year, I intend to:

  • be more confident
  • be very specific
  • plan vacations
  • save to buy a house
  • take time to think
  • but decide quickly
  • be open to possibilities
  • paint more
  • write more
  • read more
  • be healthy

And finally a quote by Ai Weiwei:

“A small act is worth a million thoughts.”

Reducing the size of a docker image

I’ve been building a docker image for Heketi and noticed that the image size was more than 3 times the size of a base Centos 7 image. Searching on google, I came across this page on optimizing docker images. Now, I understand why the Dockerfiles spread across github have multi-line RUN commands.

My docker image started with a size of around 698.2 MB. Now it’s just 198.5MB.

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
heketi/heketi       centos7             eda2e47811c6        15 seconds ago      198.5 MB
docker.io/centos    latest              ce20c473cd8a        5 days ago          172.3 MB

You can take a look at the Dockerfile I created.

Vagrant and Fedora 22

I’ve used Vagrant previously for testing something and forgot about it. Now, I need a Fedora server to test something. So, I thought, why not use Vagrant to do what I want. And as I’m wont to do, I wanted to document it. So here goes nothing and everything.

I’m using a Mac, so I’m obviously going to use Homebrew to install everything I need. Before we proceed, let’s first install cask, cause we’ll need that to install our packages.

$ brew install caskroom/cask/brew-cask

That’s done. Let’s install vagrant and virtualbox next.

$ brew cask install virtualbox
$ brew cask install vagrant

Next, let’s get the Fedora images. Make sure you get the image for vagrant. Here’s the one I downloaded:

~/Downloads $ du -h *.box
209M	Fedora-Cloud-Base-Vagrant-22-20150521.x86_64.vagrant-virtualbox.box
~/Downloads $ shasum -a 256 Fedora-Cloud-Base-Vagrant-22-20150521.x86_64.vagrant-virtualbox.box
2513342f70c00310e161a110e34973a133691fedd866859e65904fa056ae7a0c  Fedora-Cloud-Base-Vagrant-22-20150521.x86_64.vagrant-virtualbox.box

To be able to use our downloaded image, we’ll need to add it to Vagrant.

~/Cave/Fedora22 $ vagrant box add ~/Downloads/Fedora-Cloud-Base-Vagrant-22-20150521.x86_64.vagrant-virtualbox.box --name fedora-22
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'fedora-22' (v0) for provider:
    box: Unpacking necessary files from: file:///Users/sidcarter/Downloads/Fedora-Cloud-Base-Vagrant-22-20150521.x86_64.vagrant-virtualbox.box
==> box: Successfully added box 'fedora-22' (v0) for 'virtualbox'!

After adding the image to vagrant, create a Vagrantfile that’ll use this image.

$ cat Vagrantfile
Vagrant.configure(2) do |config|
  config.vm.box = "fedora-22"
end

Let’s start them engines now, shall we? In the directory with the Vagrantfile, you can do a vagrant up and you should see this:

~/Cave/Fedora22 $ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'fedora-22'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: Fedora22_default_1444702096982_14160
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: No guest additions were detected on the base box for this VM! Guest
    default: additions are required for forwarded ports, shared folders, host only
    default: networking, and more. If SSH fails on this machine, please install
    default: the guest additions and repackage the box to continue.
    default:
    default: This is not an error message; everything may continue to work properly,
    default: in which case you may ignore this message.
==> default: Installing rsync to the VM...
==> default: Rsyncing folder: /Users/sidcarter/Cave/Fedora22/ => /vagrant

That’s looking good so far. Let’s login to the box now and look at what we got, shall we?

~/Cave/Fedora22 $ vagrant ssh
Last login: Tue Oct 13 02:10:25 2015 from 10.0.2.2
[vagrant@ip-10-0-2-15 ~]$
[vagrant@ip-10-0-2-15 ~]$ cat /etc/fedora-release
Fedora release 22 (Twenty Two)

Fantastic! We’re done here. I hope you find this useful.

String formatting in Python

Python has had awesome string formatters for many years but the documentation on them is far too theoretic and technical. With this site we try to show you the most common use-cases covered by the old and new style string formatting API with practical examples.