MY FAVORITE VEGAN BREAKFAST AND SNACK

20140322-100748.jpg

VEGAN SPAGHETTI WITH MEAT SAUCE

20140319-091444.jpg

A dish we normally eat once a week is spaghetti and meat sauce; however, since we have been eating vegan we needed to substitute the meat sauce, as well as egg pasta.

The pasta wasn’t difficult at all, our local grocery store carried a brand right next to all the other pasta noodles.

20140319-091438.jpg

As for the meat sauce, we decided to try Seitan (a wheat product).

The ground Seitan cooked up quite nicely, and even resembled the ground beef we were accustomed to.

STILL HAVE PIZZA AND BEER FOR DINNER!

Day 3 of eating vegan and we still have Pizza and Beer, eating vegan isn’t as hard as you may think!

20140309-092218.jpg

VEGAN WAFFLE BREAKFAST

We are now on the third day of our vegan lifestyle change, and this morning we decided to give vegan waffles a try.

We’ve always made our waffles from scratch, but up till this point have used cows milk and eggs. This morning we tweaked that with almond milk to replace the cows milk, and apple sauce to replace the egg.

20140309-092206.jpg

After a few minutes in the waffle iron our breakfast was ready, and you couldn’t tell the difference between the vegan and the non-vegan waffles by look.

1984 BY GEORGE ORWELL

1984

I did not get a chance to read George Orwell’s 1984 while in high school, but have heard many times how great a book it is.It has always been on my list of to read books, but never got around to doing so until recently.

At time of this writing I’ve finished, and I have to say the book was fantastic!

I would highly recommend this book to anyone who enjoys reading fiction or dystopian style novels. It isn’t to long of a read, around 300 pages.

READING YUM REPOSITORY DATA

I’ve spent a lot of time working with RPM in the last couple years, and have had the pleasure of maintaining the IUS Community .

I wanted to share a small utility we use quite often called repodataParser , repodataParser is a Python class for working with RPM repositories, and used in a few of our Django applications .

The idea is all RPM repositories contain a XML file containing details about the package it contains. Lets take CentOS’s Vault for example:

RANDOM BOARD GAME SELECTION USING BOARD GAME GEEK

Using Board Game Geek’s API I wanted to create a simple Python tool for randomly picking a game to play. Below is some quick Python code to achieve my goal:

from urllib2 import urlopen
from lxml import etree
from random import choice

def get_xml():
    req = urlopen('http://www.boardgamegeek.com/xmlapi/collection/flip387')
    return req

def get_items():
    xml = etree.parse(get_xml())
    return xml.xpath('//item')

def get_thumbnail(item):
    t = item.xpath('thumbnail')
    if len(t) == 1:
        return t[0].text

def get_name(item):
    t = item.xpath('name')
    if len(t) == 1:
        return t[0].text

def get_stats(item):
    t = item.xpath('stats')
    if len(t) == 1:
        return dict(t[0].items())

def get_minplayers(item):
    return get_stats(item).get('minplayers')

def get_maxplayers(item):
    return get_stats(item).get('maxplayers')

def get_playingtime(item):
    return get_stats(item).get('playingtime')

def get_as_dict(item):
    return dict(
        name=get_name(item),
        thumbnail=get_thumbnail(item),
        minplayers=get_minplayers(item),
        maxplayers=get_maxplayers(item),
        playingtime=get_playingtime(item)
    )

def get_games():
    items = get_items()
    return [get_as_dict(i) for i in items]

def get_random_game():
    games = get_games()
    return choice(games)

And using this would work like so:

USING GPG TO SIGN AND VERIFY A MESSAGE

First off GPG stands for GNU Privacy Guard , and is a open source implementation of PGP.

So what can you do with GPG , and why should we care?

One common use of is to sign your messages, this way the receiver can verify it did in fact come from you, and that it hasn’t been altered.

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: SKS 1.1.4
Comment: Hostname: keyserver.ubuntu.com

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
=pePB
-----END PGP PUBLIC KEY BLOCK-----

Using the above public key we can verify a signed message I wrote.

ANDROID DICE ROLLER

Found an old Android App I wrote about a year back, this was the first and last Android App I wrote.

Android Installable Package for Dice Roller

  • md5 => 49e138fc4b2cf8b83bc28e780ff2411b

Source Code can be viewed at Github 4.0 Holo theme on the left and 2.1 default theme on the right

diceroller

BOARDGAME GEEK API

Today I learned Boardgamegeek.com provides a XML API which appears to be pretty well documented. For example if I wanted to list all the Board Games I own I could do something like this in python:

In [1]: from urllib2 import urlopen

In [2]: from lxml import etree

In [3]: req = urlopen('http://www.boardgamegeek.com/xmlapi/collection/flip387')

In [4]: xml = etree.parse(req)

In [5]: sorted([ i.text for i in xml.xpath('//name') ])
Out[5]:
['Arkham Horror',
 'Bears!',
 'Castle Panic',
 'Clue',
 'Cranium',
 'Dominion',
 'Dungeon!',
 'Dungeons & Dragons: Wrath of Ashardalon Board Game',
 'Elder Sign',
 'Legendary: A Marvel Deck Building Game',
 'Legendary: Dark City',
 'Monopoly',
 'Munchkin',
 'Munchkin Pathfinder',
 'Once Upon a Time: The Storytelling Card Game',
 'Pandemic',
 'Pathfinder Adventure Card Game: Rise of the Runelords - Base Set',
 'Risk',
 'Scrabble',
 'Small World',
 'Star Wars: X-Wing Miniatures Game',
 'Talisman (Revised 4th Edition)',
 'The Settlers of Catan',
 'Ticket to Ride',
 'Zombie Dice']