Angel \”Java\” Lopez on Blog

April 28, 2016

Redis: Links, News And Resources (7)

Filed under: Links, NoSQL, Redis — ajlopez @ 8:43 am

Previous Post
Next Post

Securing Redis with Sedona – Will Urbanski on Vimeo
http://vimeo.com/79743671

Announcement: Redis Monitoring in SPM | Sematext Blog
http://blog.sematext.com/2014/01/30/announcement-redis-monitoring-in-spm/

Running Redis as a Windows Service – CodeProject
http://www.codeproject.com/Articles/715967/Running-Redis-as-a-Windows-Service

Forrst | How I make models in Node.js (using Redis as database) – Some code from jackbach
http://forrst.com/posts/How_I_make_models_in_Node_js_using_Redis_as_dat-90W

Redis Cluster and limiting divergences. – Antirez weblog
http://antirez.com/news/70

Using Redis sorted sets to build a scalable real-time web waiting list. | The Carbon Emitter
http://blog.carbonfive.com/2014/01/17/using-redis-sorted-sets-to-build-a-scalable-real-time-web-waiting-list/

forcedotcom/rmux
https://github.com/forcedotcom/rmux

High Scalability – High Scalability – How HipChat Stores and Indexes Billions of Messages Using ElasticSearch and Redis
http://highscalability.com/blog/2014/1/6/how-hipchat-stores-and-indexes-billions-of-messages-using-el.html

Knossos: Redis and linearizability
http://aphyr.com/posts/309-knossos-redis-and-linearizability

brightmarch/picto
https://github.com/brightmarch/picto

softwaredoug/subredis
https://github.com/softwaredoug/subredis

OptimalBits/bull
https://github.com/OptimalBits/bull

Some fun with Redis Cluster testing – Antirez weblog
http://antirez.com/news/69

Redis as AP system, reloaded – Antirez weblog
http://antirez.com/news/68

Redis cluster tutorial – Redis
http://redis.io/topics/cluster-tutorial

Redis Sentinel Documentation – Redis
http://redis.io/topics/sentinel

My Links
http://delicious.com/ajlopez/redis

Stay tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

April 25, 2016

Building A Blockchain (6)

Previous Post
Next Post

These days, I added transaction processing to my personal project:

https://github.com/ajlopez/BlockchainSharp

In the previous post, I described the immutable Trie structure. Now, I have an AccountState that is saved by hash in a such Trie:

public class AccountState
{
    private BigInteger balance;

    public AccountState(BigInteger balance)
    {
        if (BigInteger.Compare(BigInteger.Zero, balance) > 0)
            throw new InvalidOperationException("Invalid balance");

        this.balance = balance;
    }

    public BigInteger Balance { get { return this.balance; } }

    public AccountState AddToBalance(BigInteger amount)
    {
        return new AccountState(BigInteger.Add(this.balance, amount));
    }

    public AccountState SubtractFromBalance(BigInteger amount)
    {
        return new AccountState(BigInteger.Subtract(this.balance, amount));
    }
}

I decided to implement the Ethereum way: having an account state, instead of inputs and outputs. The only property is Balance, but I will add more data. Notice that negative balances are rejeceted. Then, I added a TransactionProcessor:

public class TransactionProcessor
{
    private Trie<AccountState> states;

    public TransactionProcessor(Trie<AccountState> states)
    {
        this.states = states;
    }

    public Trie<AccountState> States { get { return this.states; } }

    public bool ExecuteTransaction(Transaction transaction)
    {
        var states = this.states;

        try
        {
            foreach (var av in transaction.Inputs)
            {
                var addr = av.Address.ToString();
                var state = states.Get(addr);
                var newstate = state.SubtractFromBalance(av.Value);
                states = states.Put(addr, newstate);
            }

            foreach (var av in transaction.Outputs)
            {
                var addr = av.Address.ToString();
                var state = states.Get(addr);
                var newstate = state.AddToBalance(av.Value);
                states = states.Put(addr, newstate);
            }

            this.states = states;

            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }
}

If the transaction is processed, a new account state trie is generated, and ExecuteTransaction returns true. If the transaction is rejected, the initial accout state trie still has the original values. A typical test:

[TestMethod]
public void ExecuteTransaction()
{
    var transaction = CreateTransaction(100);

    var addr1 = transaction.Inputs.First().Address;
    var addr2 = transaction.Outputs.First().Address;

    var states = new Trie<AccountState>(new AccountState(BigInteger.Zero));

    states = states.Put(addr1.ToString(), new AccountState(new BigInteger(200)));

    var processor = new TransactionProcessor(states);

    Assert.IsTrue(processor.ExecuteTransaction(transaction));

    var newstates = processor.States;

    Assert.IsNotNull(newstates);
    Assert.AreNotSame(states, newstates);

    Assert.AreEqual(new BigInteger(200), states.Get(addr1.ToString()).Balance);
    Assert.AreEqual(BigInteger.Zero, states.Get(addr2.ToString()).Balance);

    Assert.AreEqual(new BigInteger(100), newstates.Get(addr1.ToString()).Balance);
    Assert.AreEqual(new BigInteger(100), newstates.Get(addr2.ToString()).Balance);
}

The auxiliary CreateTransaction method creates a transaction with an amount, and two random addresses.

I’m thinking to have only one sender account and receiving account per transaction, as in Ethereum. The change is easy, I have all the TDD tests to help me to do redesigns without a lot of work.

Next topics: executing blocks with transactions, saving state in persistent store, virtual machine and its bytecodes, a simple compiler, etc…

Stay tuned!

Angel “Java” Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

April 23, 2016

ReactJS: Links And Resources (4)

Filed under: JavaScript, Links, React, Web Development — ajlopez @ 9:02 am

Previous Post
Next Post

Jed Watson – Going Mobile with React at react-europe 2015 – YouTube
https://www.youtube.com/watch?v=ctwmd5L1U_Q

Pure UI
http://rauchg.com/2015/pure-ui/

Tag Archive for “javascript” | Scotch
https://scotch.io/tag/javascript

Lee Byron – Exploring GraphQL at react-europe 2015 – YouTube
https://www.youtube.com/watch?v=WQLzZf34FJ8

Dan Abramov – Live React: Hot Reloading with Time Travel at react-europe 2015 – YouTube
https://www.youtube.com/watch?v=xsSnOQynTHs

React Native Playground: Share and test your React Native code in the browser
https://rnplay.org/

WinJS 4.0 Is Compatible with AngularJS, React, Bootstrap and Knockout
http://www.infoq.com/news/2015/06/winjs-4-angular-react

Mutations in Relay // Speaker Deck
https://speakerdeck.com/laneyk/mutations-in-relay

Harrison Harnisch: React native and Meteor — Devshop SF April 2015 – YouTube
https://www.youtube.com/watch?v=7BF5LHn2B5s&feature=em-subs_digest

Max Harris: Two weeks with React Meteor — Devshop SF March 2015 – YouTube
https://www.youtube.com/watch?v=-QtrkXKvQFc&feature=youtu.be&list=PLTUf4ytkmI8Q3mSRIrkPfjkERTxHopzKG

CS 294-101 01 Pete Hunt: React vs The World – YouTube
https://www.youtube.com/watch?v=MC376f3QWYw

Reagent • TodoMVC
http://todomvc.com/examples/reagent/

My Links
https://delicious.com/ajlopez/reactjs

Stay tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

April 17, 2016

Building A Blockchain (5)

Filed under: Bitcoin, Blockchain, C Sharp, Ethereum, Test-Driven Development — ajlopez @ 10:02 am

Previous Post
Next Post

I was working a lot on my personal project:

https://github.com/ajlopez/BlockchainSharp

implementing a blockchain in C#, using TDD (Test-Driven Development) workflow. One element I need to implement, is the store of account states (initially their balances). The balance of an account should be retrieved by account id (a hash). But in many use cases, I need to know the balances of accounts at a given time. It is not enough to have the LATESTS balances. So, I implemented a data structure, a trie, but with immutable properties.

A trie is a tree where the non-leaf nodes stores part of the key:

In the above example, the value V1 is associated with key AAA, and the value V5 is associated with key ACA. When I change the value associated with key ABC from V4 to V7, part of a new trie is created, so the original one persists without modification:

I can access the original key/values using the “old root”, and then, I can switch to use the “new root”, at any moment. If any node/root is not reachable from a variable, garbage collector will release the memory associated with that node.

I wrote a typed trie implementation, using TDD. An example test:

[TestMethod]
public void PutAndGetKeyValue()
{
    Trie<string> trie = new Trie<string>();

    var trie2 = trie.Put("012", "foo");

    Assert.IsNotNull(trie2);
    Assert.AreNotSame(trie2, trie);
    Assert.IsNull(trie.Get("012"));
    Assert.AreEqual("foo", trie2.Get("012"));
}

An example that shows the persistent of tries after updates:

[TestMethod]
public void ReplaceValue()
{
    Trie<string> trie = new Trie<string>();

    var trie2 = trie.Put("012", "foo");
    var trie3 = trie2.Put("012", "bar");

    Assert.IsNotNull(trie2);
    Assert.AreNotSame(trie2, trie);
    Assert.IsNull(trie.Get("012"));
    Assert.AreEqual("foo", trie2.Get("012"));

    Assert.IsNotNull(trie3);
    Assert.AreNotSame(trie3, trie2);
    Assert.AreEqual("bar", trie3.Get("012"));
}

My idea is to use Trie<AccountState> as a store for account balances. At the end of a block (with transactions) processing, there is an account state trie. Ant the end of the next block processing, another trie will be generated. At any moment, I could retrieve the account balances at time “block 1”, and at time “block 2”, using the generated tries.

Stay tuned!

Angel “Java” Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

April 11, 2016

Building A Blockchain (4)

Filed under: Bitcoin, Blockchain, C Sharp, Ethereum, Open Source Projects — ajlopez @ 10:20 am

Previous Post
Next Post

In this post, I want to describe the key parts of a blockchain example I’m writing at:

https://github.com/ajlopez/BlockchainSharp

using C# and TDD (Test-Driven Development). The essential things to be implemented are:

– Blocks
– Transactions

the concepts of:

– Account
– Account State
– Smart Contracts (executed in a virtual machine)

and utilities for:

– Encode/Decode entities to be transmited/received via the network of nodes
– Hash calculations
– Immutable tries
– Sign transactions
– Verify transaction sign
– Verify block integrity
– Verify transactions are valid
– Proof of Work calculation (as usual in Bitcoin and Ethereum implementations)
– Store some entities: complete blocks, partial blocks (block headers in Ethereum), account state, … in general, tries with storage

Some days ago, I started to write a Transaction class, having pairs of accounts and values. I adopted Ethereum approach: instead of having inputs/outputs as in Bitcoin, I have accounts with balances/states. Each account is identified by an address (actually a random hexadecimal string):

Each transaction can have one or more inputs and outputs. Each input/output has an account address and a value. The values are instances of BigInteger, so I can manage large integer numbers. It’s the way the criptocurrencies implementations allow the use of value fractions: the unity is a power of 10, and the amounts are expressed in integer quantity of minimal fractions.

Next steps: add transactions to blocks, apply transaction to account states, validate that input values are available, store states in an immutable trie,…

Stay tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

April 9, 2016

New Month’s Resolutions: Aprill 2016

Filed under: Blockchain, C Sharp, Ethereum, JavaScript, NodeJs, Open Source Projects, SimpleForth — ajlopez @ 4:34 pm

A new month started, and it’s time to write the new resolutions. And to review the past month ones:

– Improve AjGenesisNode-Express [pending]
– Work on CrysJS [complete] see repo
– Work on CrysSharp [pending]
– Improve my SimpleGA samples [pending
– Work on SharpGo [pending]
– Work on EthSharp [complete] see repo

Also I worked on:

– Improve SimpleForth in JavaScript [complete] see repo
– Start WangTiles in C# [complete] see repo
– Publish new version of SimpleArgs [complete] see repo
– Start BlockchainSharp in C# [complete] see repo
– Improve SimpleDT samples [complete] see repo
– Move AjGo to GitHub [complete] see repo
– Improve RuScript [complete] see repo
– Add Code Coverate to ethereumjs rlp [complete] see repo
– New Machine Learning in JavaScript presentation [complete] see repo see talk

My new resolutions:

– Improve WangTiles
– Improve BlockchainSharp
– Start Blockchain in JavaScript
– Work on EthSharp
– Improve SimpleGA
– Improve AjGenesisNode-Express
– Work on CrysJS
– Work on CrysSharp

Stay tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

April 8, 2016

Ethereum: Links, News And Resources (3)

Filed under: Bitcoin, Blockchain, Ethereum, Links — ajlopez @ 9:23 am

Previous Post

LE12: Sergio Lerner – RootStock and Smart Contract Platforms – Liberty Entrepreneurs Podcast
http://libertyentrepreneurs.com/2016/01/le12-sergio-lerner-rootstock-and-smart-contract-platforms/

ConsenSys (@ConsenSysLLC) | Twitter
https://twitter.com/ConsenSysLLC

Christian Lundkvist (@ChrisLundkvist) | Twitter
https://twitter.com/ChrisLundkvist

Slock.it – Blockchain IoT
https://slock.it/

Eight Months Since Release, Ethereum Is Second Only To Bitcoin
http://cointelegraph.com/news/eight-months-since-release-ethereum-is-second-only-to-bitcoin

– MANÐΞLΞIL – (@mandeleil) | Twitter
https://twitter.com/mandeleil

The Ether Review (@etherreview) | Twitter
https://twitter.com/etherreview

The Ether Review #16 – Dominic Williams, Synthetic Assets by Arthur Falls
https://soundcloud.com/arthurfalls/the-ether-review-16-dominic

Microsoft’s Marley Gray: Ripple and ILP Will Be the Fabric of Multi-Chain Future | Ripple
https://ripple.com/insights/microsofts-marley-gray-ripple-and-ilp-will-be-the-fabric-of-multi-chain-future/

Azure Blockchain as a Service update | Blog | Microsoft Azure
https://azure.microsoft.com/en-us/blog/azure-blockchain-as-a-service-update/

Dapp Developer Resources · ethereum/wiki Wiki
https://github.com/ethereum/wiki/wiki/Dapp-Developer-Resources

From Smart Contracts to Courts with not so Smart Judges – Ethereum Blog
https://blog.ethereum.org/2016/02/17/smart-contracts-courts-not-smart-judges/

Microsoft continues its blockchain-as-a-service push | ZDNet
http://www.zdnet.com/article/microsoft-continues-its-blockchain-as-a-service-push/

Ethereum messaging for the masses (including fathers) – via infographic – Ethereum Blog
https://blog.ethereum.org/2015/06/21/ethereum-messaging-masses-including-fathers-via-infographic/

EthereumVibes (@EthereumVibes) | Twitter
https://twitter.com/EthereumVibes

Ukraine Embraces Ethereum Blockchain For Election Transparency – NEWSBTC
http://www.newsbtc.com/2016/02/12/ukraine-embraces-ethereum-blockchain-for-election-transparency/

Home
http://www.ethereum-computation-market.com/

My Links
http://delicious.com/ajlopez/ethereum

Stay tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

April 7, 2016

Clojure: Links, News And Resources (24)

Filed under: Clojure, Functional Programming, Links, Programming Languages — ajlopez @ 10:06 am

Previous Post

Clojure powered robot 3 of 3 – YouTube
https://www.youtube.com/watch?v=iQK9p0XV2IY

Clojure powered robot 2 of 3 – YouTube
https://www.youtube.com/watch?v=QPN2DFrlrYo

Clojure powered robot 1 of 3 – YouTube
https://www.youtube.com/watch?v=XMIKfOmAMjQ

OSCON 2013: Carin Meier, "The Joy of Flying Robots with Clojure" – YouTube
http://www.youtube.com/watch?v=Ty9QDqV-_Ak

Macros vs. Monads
http://www.infoq.com/presentations/Macros-Monads

Functional Infrastructures: It’s All Fn until You Hit Production
http://www.infoq.com/presentations/clojure-infrastructure

ztellman/riddley
https://github.com/ztellman/riddley

liebke/incanter
https://github.com/liebke/incanter
Clojure-based, R-like statistical computing and graphics environment for the JVM 
http://incanter.org

Hammock Driven Development – Rich Hickey – YouTube
http://www.youtube.com/watch?v=f84n5oFoZBc

Skills Matter : Clojure eXchange 2013 06-12-13
http://skillsmatter.com/event/java-jee/clojure-exchange-2013

clojure-numerics/expresso
https://github.com/clojure-numerics/expresso
Clojure library for symbolic computation

cemerick/austin · GitHub
https://github.com/cemerick/austin
The ClojureScript browser-REPL rebuilt stronger, faster, easier.

justiniac/clotilde · GitHub
https://github.com/justiniac/clotilde
The Linda process coordination language written in Clojure.

mountain/knowledge · GitHub
https://github.com/mountain/knowledge
combining wikidata and clojure core.logic

FRP in ClojureScript with Javelin
http://www.infoq.com/presentations/ClojureScript-Javelin

Concurrent Bayes Classifiers in Clojure | Ascii Rain
http://asciirain.com/wordpress/2013/05/03/concurrent-bayes-classifiers-in-clojure/

Cascalog – Clojure-based query language for Hadoop – The Changelog
http://thechangelog.com/cascalog-clojure-based-query-language-for-hadoop/

symbols – In Clojure, how to define a variable named by a string? – Stack Overflow
http://stackoverflow.com/questions/2486752/in-clojure-how-to-define-a-variable-named-by-a-string

mtnygard/devs
https://github.com/mtnygard/devs
Discrete Event Simulation Specification

Introduction to web application development in Clojure
http://jeeconf.com/materials/web-development-in-clojure/

MQTT in Clojure with the core.async library | Clojure in a bank
http://blog.malcolmsparks.com/?p=134

sebastiansen/rip
https://github.com/sebastiansen/rip
REST in Peace

My Links
http://delicious.com/ajlopez/clojure

Stay tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

April 4, 2016

Building A Blockchain (3)

Previous Post
Next Post

I added a lot of code to my simple blockchain implementation written in C#:

https://github.com/ajlopez/BlockchainSharp

As usual, I followed TDD (Test-Driven Development) workflow, pursuing simplicity, doing baby steps. In the last post I mentioned the use of a DSL (Domain Specific Language) to specify some block processing tests that have complex setup.

Initially, I wrote tests like:

[TestMethod]
public void ProcessTwoBlocksAndTwoUncles()
{
    Block genesis = new Block(0, null);
    Block block = new Block(1, genesis.Hash);
    Block uncle1 = new Block(1, genesis.Hash);
    Block uncle2 = new Block(2, uncle1.Hash);

    BlockProcessor processor = new BlockProcessor();

    processor.Process(genesis);
    processor.Process(block);
    processor.Process(uncle1);
    processor.Process(uncle2);

    Assert.IsNotNull(processor.BlockChain);
    Assert.AreEqual(2, processor.BlockChain.BestBlockNumber);
    Assert.AreEqual(genesis, processor.BlockChain.GetBlock(0));
    Assert.AreEqual(uncle1, processor.BlockChain.GetBlock(1));
    Assert.AreEqual(uncle2, processor.BlockChain.GetBlock(2));
}

The idea is:

– Create some blocks

– Send the blocks to the block processor

– Check the blocks in the block chain

The created blocks are related by parent relationships. Sometimes, a competing block is created, so the block processor must deal with block branches.

But the setup code could be long and complex. So, I wrote a DSL, and now I have tests like:

[TestMethod]
public void SendTwoBlocksAndTwoUncles()
{
    var processor = new BlockProcessor();
    var dsl = new BlockProcessorDsl(processor);

    dsl.Run(new string[] 
    {
        "chain g0 b1 b2",
        "chain b1 c2 c3",
        "send b1 b2",
        "send c2 c3",
        "top c3"
    });
}

Each command is an string, with verb and arguments. The block g0 is the genesis block. The verb “chain” enumerates a list of blocks to be created, each block is child of its previous block. The verb “send” sends the created blocks to the block processor. The verb “top” checks if the specified block is the top block in the current blockchain.

The result should not depend on order of arriving blocks, ie:

[TestMethod]
public void SendTwoBlocksInReversedOrder()
{
    var processor = new BlockProcessor();
    var dsl = new BlockProcessorDsl(processor);

    dsl.Run(new string[] 
    {
        "chain g0 b1 b2",
        "send b2 b1",
        "top b2"
    });
}

I could add text files, each one specifying command lines to be executed as sentences of the DSL.

In the next posts: core implementations needed by a blockchain, byte serialization, and implementing immutable tries for storing states.

Stay tuned!

Angel “Java” Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

April 1, 2016

Clojure: Links, News And Resources (23)

Filed under: Clojure, Links, Lisp, Programming Languages — ajlopez @ 8:48 am

Previous Post
Next Post

clj-wamp ~ Clojure WebSocket subprotocol for HTTP Kit
http://cljwamp.us/

Purely functional data structures in Clojure: Red-Black Trees – Leonardo Borges
http://www.leonardoborges.com/writings/2013/07/15/purely-functional-data-structures-in-clojure-red-black-trees/

Clojure and LLVM
http://www.infoq.com/presentations/Clojure-LLVM

Clojure, Neo4j and Domain Specific Languages Applied to Lisp and Cancer – Ola Bini in Hamburg in Hamburg | XING Events
http://www.xing.com/events/clojure-neo4j-domain-specific-languages-applied-lisp-cancer-ola-bini-hamburg-1275882

7 Languages in 7 Workshops: Clojure – Cambridge Software Craftsmanship (Cambridge, England) – Meetup
http://www.meetup.com/Cambridge-Software-Craftsmanship/events/123030182/

Getting Started
http://fluokitten.uncomplicate.org/articles/getting_started.html

ddellacosta/friend-oauth2-examples
https://github.com/ddellacosta/friend-oauth2-examples

Introducing HipHip (Array): Fast and flexible numerical computation in Clojure — Prismatic Blog
http://blog.getprismatic.com/blog/2013/7/10/introducing-hiphip-array-fast-and-flexible-numerical-computation-in-clojure

In Retrospect: QCon NYC 2013 (and a conversation with Rich Hickey on languages) « Inviting Epiphany
http://richardminerich.com/2013/07/in-retrospect-qcon-nyc-2013-and-a-conversation-with-rich-hickey-on-languages/

Clojure/West Content on InfoQ
http://www.infoq.com/clojure-west/

Rock Paper Scissors with core.async : Pure Danger Tech
http://tech.puredanger.com/2013/07/10/rps-core-async/

Blog | Rich Hickey and core.async – Podcast Episode 035 | Relevance
http://thinkrelevance.com/blog/2013/07/10/rich-hickey-and-core-async-podcast-episode-035

Clojure – The Last Programming Language by Robert C. Martin at NDC 2011 at Oslo, Norway – EveryTalk.tv
http://www.everytalk.tv/talks/667-NDC-Clojure-The-Last-Programming-Language

Leiningen 2 – Humane build management for Clojure
http://www.infoq.com/presentations/Leiningen-2-Clojure

Clojure, core.async and the Lisp advantage – Leonardo Borges
http://www.leonardoborges.com/writings/2013/07/06/clojure-core-dot-async-lisp-advantage/

pcorliss/clojure-koans
https://github.com/pcorliss/clojure-koans

Using java.jdbc | Clojure Documentation | Clojure Docs
http://clojure-doc.org/articles/ecosystem/java_jdbc/home.html

technomancy/skaro
https://github.com/technomancy/skaro

Pedestal Documentation – Application Introduction
http://pedestal.io/documentation/application-introduction/

blancas/morph
https://github.com/blancas/morph

Fluokitten – Category Theory in Idiomatic Clojure
http://fluokitten.uncomplicate.org/

langref.org
http://langref.org/

brandonbloom/asyncx
https://github.com/brandonbloom/asyncx

My Links
http://delicious.com/ajlopez/clojure

Stay tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

« Newer PostsOlder Posts »

The Shocking Blue Green Theme. Create a free website or blog at WordPress.com.

Follow

Get every new post delivered to your Inbox.

Join 73 other followers