Ecoer Logo

@qfilter

48

An experimental Steem filter

steemit.com/@qfilter
VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS33.24%
Net Worth
3.047USD
STEEM
0.000STEEM
SBD
0.000SBD
Own SP
56.239SP

Detailed Balance

STEEM
balance
0.000STEEM
market_balance
0.000STEEM
savings_balance
0.000STEEM
reward_steem_balance
0.000STEEM
STEEM POWER
Own SP
56.239SP
Delegated Out
0.000SP
Delegation In
0.000SP
Effective Power
56.239SP
Reward SP (pending)
0.000SP
SBD
sbd_balance
0.000SBD
sbd_conversions
0.000SBD
sbd_market_balance
0.000SBD
savings_sbd_balance
0.000SBD
reward_sbd_balance
0.000SBD
{
  "balance": "0.000 STEEM",
  "savings_balance": "0.000 STEEM",
  "reward_steem_balance": "0.000 STEEM",
  "vesting_shares": "91578.121125 VESTS",
  "delegated_vesting_shares": "0.000000 VESTS",
  "received_vesting_shares": "0.000000 VESTS",
  "sbd_balance": "0.000 SBD",
  "savings_sbd_balance": "0.000 SBD",
  "reward_sbd_balance": "0.000 SBD",
  "conversions": []
}

Account Info

nameqfilter
id482194
rank31,862
reputation391282423676
created2017-12-07T22:10:12
recovery_accountgreer184
proxyNone
post_count53
comment_count0
lifetime_vote_count0
witnesses_voted_for0
last_post2018-08-31T02:20:12
last_root_post2018-08-31T02:20:12
last_vote_time2018-07-26T00:08:21
proxied_vsf_votes0, 0, 0, 0
can_vote1
voting_power0
delayed_votes0
balance0.000 STEEM
savings_balance0.000 STEEM
sbd_balance0.000 SBD
savings_sbd_balance0.000 SBD
vesting_shares91578.121125 VESTS
delegated_vesting_shares0.000000 VESTS
received_vesting_shares0.000000 VESTS
reward_vesting_balance0.000000 VESTS
vesting_balance0.000 STEEM
vesting_withdraw_rate0.000000 VESTS
next_vesting_withdrawal1969-12-31T23:59:59
withdrawn0
to_withdraw0
withdraw_routes0
savings_withdraw_requests0
last_account_recovery1970-01-01T00:00:00
reset_accountnull
last_owner_update2017-12-08T19:06:42
last_account_update2017-12-10T04:44:21
minedNo
sbd_seconds267,579
sbd_last_interest_payment2019-03-30T19:16:21
savings_sbd_last_interest_payment1970-01-01T00:00:00
{
  "id": 482194,
  "name": "qfilter",
  "owner": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM6sK4ZvmguGDk3fXBY8e1n3iqwLuTdufoQ2KrVUjxLHDxZ8kyWA",
        1
      ]
    ]
  },
  "active": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM8KuGM6op9ZXsYZ4rzWaNNXBApcxPoaunsYHU9tG9v3rafGrbiS",
        1
      ]
    ]
  },
  "posting": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM8J45fh49vc4bwpUawSsNCrFBXEYq4e8vp5X2pJXNxZZmKus2x2",
        1
      ]
    ]
  },
  "memo_key": "STM4ycdLF3jGK697dEpFekiag9RcuacaDUTi5NrGu8QY1gnEzKbo2",
  "json_metadata": "{\"profile\":{\"about\":\"An experimental Steem filter\",\"location\":\"the internet\",\"website\":\"http://qfilter.herokuapp.com/\"}}",
  "posting_json_metadata": "{\"profile\":{\"about\":\"An experimental Steem filter\",\"location\":\"the internet\",\"website\":\"http://qfilter.herokuapp.com/\"}}",
  "proxy": "",
  "last_owner_update": "2017-12-08T19:06:42",
  "last_account_update": "2017-12-10T04:44:21",
  "created": "2017-12-07T22:10:12",
  "mined": false,
  "recovery_account": "greer184",
  "last_account_recovery": "1970-01-01T00:00:00",
  "reset_account": "null",
  "comment_count": 0,
  "lifetime_vote_count": 0,
  "post_count": 53,
  "can_vote": true,
  "voting_manabar": {
    "current_mana": "91578121125",
    "last_update_time": 1553973444
  },
  "downvote_manabar": {
    "current_mana": 0,
    "last_update_time": 1512684612
  },
  "voting_power": 0,
  "balance": "0.000 STEEM",
  "savings_balance": "0.000 STEEM",
  "sbd_balance": "0.000 SBD",
  "sbd_seconds": "267579",
  "sbd_seconds_last_update": "2019-03-30T19:17:00",
  "sbd_last_interest_payment": "2019-03-30T19:16:21",
  "savings_sbd_balance": "0.000 SBD",
  "savings_sbd_seconds": "0",
  "savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
  "savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
  "savings_withdraw_requests": 0,
  "reward_sbd_balance": "0.000 SBD",
  "reward_steem_balance": "0.000 STEEM",
  "reward_vesting_balance": "0.000000 VESTS",
  "reward_vesting_steem": "0.000 STEEM",
  "vesting_shares": "91578.121125 VESTS",
  "delegated_vesting_shares": "0.000000 VESTS",
  "received_vesting_shares": "0.000000 VESTS",
  "vesting_withdraw_rate": "0.000000 VESTS",
  "next_vesting_withdrawal": "1969-12-31T23:59:59",
  "withdrawn": 0,
  "to_withdraw": 0,
  "withdraw_routes": 0,
  "curation_rewards": 71,
  "posting_rewards": 28812,
  "proxied_vsf_votes": [
    0,
    0,
    0,
    0
  ],
  "witnesses_voted_for": 0,
  "last_post": "2018-08-31T02:20:12",
  "last_root_post": "2018-08-31T02:20:12",
  "last_vote_time": "2018-07-26T00:08:21",
  "post_bandwidth": 0,
  "pending_claimed_accounts": 0,
  "vesting_balance": "0.000 STEEM",
  "reputation": "391282423676",
  "transfer_history": [],
  "market_history": [],
  "post_history": [],
  "vote_history": [],
  "other_history": [],
  "witness_votes": [],
  "tags_usage": [],
  "guest_bloggers": [],
  "rank": 31862
}

Withdraw Routes

IncomingOutgoing
Empty
Empty
{
  "incoming": [],
  "outgoing": []
}
From Date
To Date
2020/01/12 08:25:21
parent authorqfilter
parent permlinkan-experimental-steem-content-filter
authorchenc
permlinkre-an-experimental-steem-content-filter
title
bodyGoodlock in steemit.com
json metadata{}
Transaction InfoBlock #39858618/Trx 1d84979b311c9ed1fab5d1d8350a8ea894a99f39
View Raw JSON Data
{
  "trx_id": "1d84979b311c9ed1fab5d1d8350a8ea894a99f39",
  "block": 39858618,
  "trx_in_block": 13,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-01-12T08:25:21",
  "op": [
    "comment",
    {
      "parent_author": "qfilter",
      "parent_permlink": "an-experimental-steem-content-filter",
      "author": "chenc",
      "permlink": "re-an-experimental-steem-content-filter",
      "title": "",
      "body": "Goodlock in steemit.com",
      "json_metadata": "{}"
    }
  ]
}
2019/12/07 23:08:27
parent authorqfilter
parent permlinkgreenshift-037-developing-a-network-cache
authorsteemitboard
permlinksteemitboard-notify-qfilter-20191207t230826000z
title
bodyCongratulations @qfilter! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@qfilter/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@qfilter) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=qfilter)_</sub> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!
json metadata{"image":["https://steemitboard.com/img/notify.png"]}
Transaction InfoBlock #38841356/Trx 72318151d6a86acc12e6bdad91a8d3cacb0c4950
View Raw JSON Data
{
  "trx_id": "72318151d6a86acc12e6bdad91a8d3cacb0c4950",
  "block": 38841356,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-12-07T23:08:27",
  "op": [
    "comment",
    {
      "parent_author": "qfilter",
      "parent_permlink": "greenshift-037-developing-a-network-cache",
      "author": "steemitboard",
      "permlink": "steemitboard-notify-qfilter-20191207t230826000z",
      "title": "",
      "body": "Congratulations @qfilter! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@qfilter/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@qfilter) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=qfilter)_</sub>\n\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
      "json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}"
    }
  ]
}
qfilterpowered up 15.764 STEEM to @qfilter
2019/03/30 19:17:24
fromqfilter
toqfilter
amount15.764 STEEM
Transaction InfoBlock #31614655/Trx b5eedbeb2d744c59866ffe66c728b9415a2ab81f
View Raw JSON Data
{
  "trx_id": "b5eedbeb2d744c59866ffe66c728b9415a2ab81f",
  "block": 31614655,
  "trx_in_block": 9,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-03-30T19:17:24",
  "op": [
    "transfer_to_vesting",
    {
      "from": "qfilter",
      "to": "qfilter",
      "amount": "15.764 STEEM"
    }
  ]
}
qfilterblockchain operation: limit order create
2019/03/30 19:17:00
ownerqfilter
orderid1553973402
amount to sell6.861 SBD
min to receive15.331 STEEM
fill or killfalse
expiration2019-04-26T19:16:33
Transaction InfoBlock #31614647/Trx 9ca8dd929ccf288bfa3a03d8089e33f1d25548ec
View Raw JSON Data
{
  "trx_id": "9ca8dd929ccf288bfa3a03d8089e33f1d25548ec",
  "block": 31614647,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-03-30T19:17:00",
  "op": [
    "limit_order_create",
    {
      "owner": "qfilter",
      "orderid": 1553973402,
      "amount_to_sell": "6.861 SBD",
      "min_to_receive": "15.331 STEEM",
      "fill_or_kill": false,
      "expiration": "2019-04-26T19:16:33"
    }
  ]
}
qfilterbought 15.331 STEEM for 6.861 SBD from @oscarps
2019/03/30 19:17:00
current ownerqfilter
current orderid1553973402
current pays6.861 SBD
open owneroscarps
open orderid1553973018
open pays15.331 STEEM
Transaction InfoBlock #31614647/Trx 9ca8dd929ccf288bfa3a03d8089e33f1d25548ec
View Raw JSON Data
{
  "trx_id": "9ca8dd929ccf288bfa3a03d8089e33f1d25548ec",
  "block": 31614647,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 1,
  "timestamp": "2019-03-30T19:17:00",
  "op": [
    "fill_order",
    {
      "current_owner": "qfilter",
      "current_orderid": 1553973402,
      "current_pays": "6.861 SBD",
      "open_owner": "oscarps",
      "open_orderid": 1553973018,
      "open_pays": "15.331 STEEM"
    }
  ]
}
qfilterclaimed reward balance: 0.384 STEEM, 0.482 SP
2019/03/30 19:16:21
accountqfilter
reward steem0.384 STEEM
reward sbd0.000 SBD
reward vests785.119126 VESTS
Transaction InfoBlock #31614634/Trx 5a6cff9a934462feb19f5b2d547cfce704d4852e
View Raw JSON Data
{
  "trx_id": "5a6cff9a934462feb19f5b2d547cfce704d4852e",
  "block": 31614634,
  "trx_in_block": 8,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-03-30T19:16:21",
  "op": [
    "claim_reward_balance",
    {
      "account": "qfilter",
      "reward_steem": "0.384 STEEM",
      "reward_sbd": "0.000 SBD",
      "reward_vests": "785.119126 VESTS"
    }
  ]
}
merlin7sent 0.001 STEEM to @qfilter- "***Have you heard of magic dice in steem platform,which doubles your STEEM and SBD,check this link and register to double your STEEM/SBD https://bit.ly/magicdice2"
2018/12/18 18:27:54
frommerlin7
toqfilter
amount0.001 STEEM
memo***Have you heard of magic dice in steem platform,which doubles your STEEM and SBD,check this link and register to double your STEEM/SBD https://bit.ly/magicdice2
Transaction InfoBlock #28678356/Trx 4d9f3862cc51a7a01e549a9ad0e795e5a94c6415
View Raw JSON Data
{
  "trx_id": "4d9f3862cc51a7a01e549a9ad0e795e5a94c6415",
  "block": 28678356,
  "trx_in_block": 13,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-12-18T18:27:54",
  "op": [
    "transfer",
    {
      "from": "merlin7",
      "to": "qfilter",
      "amount": "0.001 STEEM",
      "memo": "***Have you heard of magic dice in steem platform,which doubles your STEEM and SBD,check this link and register to double your STEEM/SBD  https://bit.ly/magicdice2"
    }
  ]
}
2018/12/07 23:12:51
parent authorqfilter
parent permlinkgreenshift-037-developing-a-network-cache
authorsteemitboard
permlinksteemitboard-notify-qfilter-20181207t231250000z
title
bodyCongratulations @qfilter! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@qfilter/birthday1.png</td><td>1 Year on Steemit</td></tr></table> <sub>_[Click here to view your Board of Honor](https://steemitboard.com/@qfilter)_</sub> **Do not miss the last post from @steemitboard:** <table><tr><td><a href="https://steemit.com/steemitboard/@steemitboard/5jrq2c-steemitboard-saint-nicholas-day"><img src="https://steemitimages.com/64x128/http://i.cubeupload.com/mGo2Zd.png"></a></td><td><a href="https://steemit.com/steemitboard/@steemitboard/5jrq2c-steemitboard-saint-nicholas-day">Saint Nicholas challenge for good boys and girls</a></td></tr></table> > Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!
json metadata{"image":["https://steemitboard.com/img/notify.png"]}
Transaction InfoBlock #28367467/Trx 248f1e21002790c3266f8d0d253e45810de8145a
View Raw JSON Data
{
  "trx_id": "248f1e21002790c3266f8d0d253e45810de8145a",
  "block": 28367467,
  "trx_in_block": 10,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-12-07T23:12:51",
  "op": [
    "comment",
    {
      "parent_author": "qfilter",
      "parent_permlink": "greenshift-037-developing-a-network-cache",
      "author": "steemitboard",
      "permlink": "steemitboard-notify-qfilter-20181207t231250000z",
      "title": "",
      "body": "Congratulations @qfilter! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@qfilter/birthday1.png</td><td>1 Year on Steemit</td></tr></table>\n\n<sub>_[Click here to view your Board of Honor](https://steemitboard.com/@qfilter)_</sub>\n\n\n**Do not miss the last post from @steemitboard:**\n<table><tr><td><a href=\"https://steemit.com/steemitboard/@steemitboard/5jrq2c-steemitboard-saint-nicholas-day\"><img src=\"https://steemitimages.com/64x128/http://i.cubeupload.com/mGo2Zd.png\"></a></td><td><a href=\"https://steemit.com/steemitboard/@steemitboard/5jrq2c-steemitboard-saint-nicholas-day\">Saint Nicholas challenge for good boys and girls</a></td></tr></table>\n\n> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!",
      "json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}"
    }
  ]
}
2018/11/06 07:52:42
parent authorqfilter
parent permlinkan-experimental-steem-content-filter
authorofira
permlinkre-an-experimental-steem-content-filter
title
bodyWellcome to steemit
json metadata{}
Transaction InfoBlock #27456756/Trx 4dd883d67a7d7c116b814f2824072fc4e5538a90
View Raw JSON Data
{
  "trx_id": "4dd883d67a7d7c116b814f2824072fc4e5538a90",
  "block": 27456756,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-11-06T07:52:42",
  "op": [
    "comment",
    {
      "parent_author": "qfilter",
      "parent_permlink": "an-experimental-steem-content-filter",
      "author": "ofira",
      "permlink": "re-an-experimental-steem-content-filter",
      "title": "",
      "body": "Wellcome to steemit",
      "json_metadata": "{}"
    }
  ]
}
qfilterreceived 0.015 STEEM, 0.019 SP author reward for @qfilter / greenshift-037-developing-a-network-cache
2018/09/07 02:20:12
authorqfilter
permlinkgreenshift-037-developing-a-network-cache
sbd payout0.000 SBD
steem payout0.015 STEEM
vesting payout30.340963 VESTS
Transaction InfoBlock #25738995/Virtual Operation #13
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 25738995,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 13,
  "timestamp": "2018-09-07T02:20:12",
  "op": [
    "author_reward",
    {
      "author": "qfilter",
      "permlink": "greenshift-037-developing-a-network-cache",
      "sbd_payout": "0.000 SBD",
      "steem_payout": "0.015 STEEM",
      "vesting_payout": "30.340963 VESTS"
    }
  ]
}
qfilterreceived 0.021 STEEM, 0.027 SP author reward for @qfilter / greenshift-036-where-the-magic-happens
2018/09/04 01:53:21
authorqfilter
permlinkgreenshift-036-where-the-magic-happens
sbd payout0.000 SBD
steem payout0.021 STEEM
vesting payout44.507228 VESTS
Transaction InfoBlock #25652096/Virtual Operation #6
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 25652096,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 6,
  "timestamp": "2018-09-04T01:53:21",
  "op": [
    "author_reward",
    {
      "author": "qfilter",
      "permlink": "greenshift-036-where-the-magic-happens",
      "sbd_payout": "0.000 SBD",
      "steem_payout": "0.021 STEEM",
      "vesting_payout": "44.507228 VESTS"
    }
  ]
}
qfilterreceived 0.049 STEEM, 0.062 SP author reward for @qfilter / greenshift-035-rolling-out-the-red-carpet
2018/09/03 00:57:33
authorqfilter
permlinkgreenshift-035-rolling-out-the-red-carpet
sbd payout0.000 SBD
steem payout0.049 STEEM
vesting payout101.158380 VESTS
Transaction InfoBlock #25622209/Virtual Operation #4
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 25622209,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 4,
  "timestamp": "2018-09-03T00:57:33",
  "op": [
    "author_reward",
    {
      "author": "qfilter",
      "permlink": "greenshift-035-rolling-out-the-red-carpet",
      "sbd_payout": "0.000 SBD",
      "steem_payout": "0.049 STEEM",
      "vesting_payout": "101.158380 VESTS"
    }
  ]
}
qfilterreceived 0.031 STEEM, 0.040 SP author reward for @qfilter / greenshift-034-getting-actual-content
2018/09/02 01:58:27
authorqfilter
permlinkgreenshift-034-getting-actual-content
sbd payout0.000 SBD
steem payout0.031 STEEM
vesting payout64.744672 VESTS
Transaction InfoBlock #25594654/Virtual Operation #5
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 25594654,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 5,
  "timestamp": "2018-09-02T01:58:27",
  "op": [
    "author_reward",
    {
      "author": "qfilter",
      "permlink": "greenshift-034-getting-actual-content",
      "sbd_payout": "0.000 SBD",
      "steem_payout": "0.031 STEEM",
      "vesting_payout": "64.744672 VESTS"
    }
  ]
}
2018/09/01 15:59:30
voterteknomunk
authorqfilter
permlinkgreenshift-037-developing-a-network-cache
weight10000 (100.00%)
Transaction InfoBlock #25582682/Trx b27e033899038a9df96241802796e67facf9c0c4
View Raw JSON Data
{
  "trx_id": "b27e033899038a9df96241802796e67facf9c0c4",
  "block": 25582682,
  "trx_in_block": 34,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-09-01T15:59:30",
  "op": [
    "vote",
    {
      "voter": "teknomunk",
      "author": "qfilter",
      "permlink": "greenshift-037-developing-a-network-cache",
      "weight": 10000
    }
  ]
}
2018/08/31 19:20:30
voterjacekw.dev
authorqfilter
permlinkgreenshift-037-developing-a-network-cache
weight10000 (100.00%)
Transaction InfoBlock #25557913/Trx 6ca594572be5d70e2c1a262db468fd2ee3d5b87a
View Raw JSON Data
{
  "trx_id": "6ca594572be5d70e2c1a262db468fd2ee3d5b87a",
  "block": 25557913,
  "trx_in_block": 24,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-31T19:20:30",
  "op": [
    "vote",
    {
      "voter": "jacekw.dev",
      "author": "qfilter",
      "permlink": "greenshift-037-developing-a-network-cache",
      "weight": 10000
    }
  ]
}
2018/08/31 04:52:51
parent authorqfilter
parent permlinkgreenshift-037-developing-a-network-cache
authorcarn
permlinkre-qfilter-greenshift-037-developing-a-network-cache-20180831t045249488z
title
bodyJust wanna let you know, even though I'm not a good commenter, I am following this to see how it goes. Also mentioned it in the brainstorming channel of the SteemPeak Discord channel ;) Good luck!
json metadata{"tags":["greenshift"],"community":"steempeak","app":"steempeak"}
Transaction InfoBlock #25540563/Trx 466a607fe303324e49ec3f8d95680c22b74289a2
View Raw JSON Data
{
  "trx_id": "466a607fe303324e49ec3f8d95680c22b74289a2",
  "block": 25540563,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-31T04:52:51",
  "op": [
    "comment",
    {
      "parent_author": "qfilter",
      "parent_permlink": "greenshift-037-developing-a-network-cache",
      "author": "carn",
      "permlink": "re-qfilter-greenshift-037-developing-a-network-cache-20180831t045249488z",
      "title": "",
      "body": "Just wanna let you know, even though I'm not a good commenter, I am following this to see how it goes. Also mentioned it in the brainstorming channel of the SteemPeak Discord channel ;)\n\nGood luck!",
      "json_metadata": "{\"tags\":[\"greenshift\"],\"community\":\"steempeak\",\"app\":\"steempeak\"}"
    }
  ]
}
2018/08/31 04:49:33
votercarn
authorqfilter
permlinkgreenshift-037-developing-a-network-cache
weight10000 (100.00%)
Transaction InfoBlock #25540497/Trx d3cb71d2c5456979f16f841854969744d8ea20b7
View Raw JSON Data
{
  "trx_id": "d3cb71d2c5456979f16f841854969744d8ea20b7",
  "block": 25540497,
  "trx_in_block": 18,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-31T04:49:33",
  "op": [
    "vote",
    {
      "voter": "carn",
      "author": "qfilter",
      "permlink": "greenshift-037-developing-a-network-cache",
      "weight": 10000
    }
  ]
}
2018/08/31 02:54:57
parent authorqfilter
parent permlinkgreenshift-037-developing-a-network-cache
authorsteemprojects
permlinkre-greenshift-037-developing-a-network-cache-20180831t025456
title
body This post has been just added as new item to _[timeline of Q-Filter on Steem Projects](https://steemprojects.com/projects/p/q-filter/?utm_source=comment_timeline&utm_medium=steem&utm_campaign=new_event&utm_content=c1)_. If you want to be notified about new updates from this project, register on Steem Projects and add Q-Filter to your favorite projects.
json metadata
Transaction InfoBlock #25538205/Trx a0fc7cc1a21e78b0e28e8014a76b5331c7e7ee6b
View Raw JSON Data
{
  "trx_id": "a0fc7cc1a21e78b0e28e8014a76b5331c7e7ee6b",
  "block": 25538205,
  "trx_in_block": 7,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-31T02:54:57",
  "op": [
    "comment",
    {
      "parent_author": "qfilter",
      "parent_permlink": "greenshift-037-developing-a-network-cache",
      "author": "steemprojects",
      "permlink": "re-greenshift-037-developing-a-network-cache-20180831t025456",
      "title": "",
      "body": "\nThis post has been just added as new item to _[timeline of Q-Filter on Steem Projects](https://steemprojects.com/projects/p/q-filter/?utm_source=comment_timeline&utm_medium=steem&utm_campaign=new_event&utm_content=c1)_.\n\nIf you want to be notified about new updates from this project, register on Steem Projects and add Q-Filter to your favorite projects.\n",
      "json_metadata": ""
    }
  ]
}
2018/08/31 02:34:33
voteredicted
authorqfilter
permlinkgreenshift-037-developing-a-network-cache
weight2100 (21.00%)
Transaction InfoBlock #25537797/Trx 95829fb9c287939e66d7de6b3605fc35395f0af8
View Raw JSON Data
{
  "trx_id": "95829fb9c287939e66d7de6b3605fc35395f0af8",
  "block": 25537797,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-31T02:34:33",
  "op": [
    "vote",
    {
      "voter": "edicted",
      "author": "qfilter",
      "permlink": "greenshift-037-developing-a-network-cache",
      "weight": 2100
    }
  ]
}
2018/08/31 02:20:27
parent authorqfilter
parent permlinkgreenshift-037-developing-a-network-cache
authorilovecoding
permlink20180831t022027419z
title
bodyHello! Your post has been resteemed and upvoted by @ilovecoding because **we love coding**! Keep up good work! Consider upvoting this comment to support the @ilovecoding and increase your future rewards! ^_^ Steem On! ![](https://codingforspeed.com/images/i-love-coding.jpg)
json metadata{"tags":["ilovecoding"],"app":"ilovecoding"}
Transaction InfoBlock #25537515/Trx 58c704faa72ba9805d37d31912cba7af024659eb
View Raw JSON Data
{
  "trx_id": "58c704faa72ba9805d37d31912cba7af024659eb",
  "block": 25537515,
  "trx_in_block": 15,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-31T02:20:27",
  "op": [
    "comment",
    {
      "parent_author": "qfilter",
      "parent_permlink": "greenshift-037-developing-a-network-cache",
      "author": "ilovecoding",
      "permlink": "20180831t022027419z",
      "title": "",
      "body": "Hello! Your post has been resteemed and upvoted by @ilovecoding because **we love coding**! Keep up good work! Consider upvoting this comment to support the @ilovecoding and increase your future rewards! ^_^ Steem On! \n ![](https://codingforspeed.com/images/i-love-coding.jpg)",
      "json_metadata": "{\"tags\":[\"ilovecoding\"],\"app\":\"ilovecoding\"}"
    }
  ]
}
2018/08/31 02:20:24
voterilovecoding
authorqfilter
permlinkgreenshift-037-developing-a-network-cache
weight500 (5.00%)
Transaction InfoBlock #25537514/Trx 4328059ff120b7ca6e866321c1f8cf05cd9a8640
View Raw JSON Data
{
  "trx_id": "4328059ff120b7ca6e866321c1f8cf05cd9a8640",
  "block": 25537514,
  "trx_in_block": 11,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-31T02:20:24",
  "op": [
    "vote",
    {
      "voter": "ilovecoding",
      "author": "qfilter",
      "permlink": "greenshift-037-developing-a-network-cache",
      "weight": 500
    }
  ]
}
2018/08/31 02:20:12
parent author
parent permlinkgreenshift
authorqfilter
permlinkgreenshift-037-developing-a-network-cache
titleGreenshift 037: Developing A Network Cache
bodySo, I've missed the last couple of days due to being stuck at work for consecutive twelve hour days, but given that I'm relatively free I thought I would share an idea I came up with while in the shower and refined during my breaks during work. Pardon not adding any new code today, I'm kind of burnt out on that end for today. So, let's setup the issue we're going to tackle today: When we're getting content for users to pick from, we are doing a lot of querying from the blockchain. Some of this querying is justified. But what if we query from the same starting point a second time a short time after the first? Well it is likely nothing has changed. So we waste a lot of time querying, especially if areas of the Steem topology are traversed very frequently in a short period of time. Querying also takes a lot of time and some of the relationships do a lot of queries. So any solution needs to reduce the number of queries while also maintaining the fidelity of the product. What's the solution for this problem? Developing a cache for the entire network and updating the cache when updates are made. Here's how it works: We store nodes of the relevant network in our database. The relevant nodes in our case is a point where the relationships branch off of. In our case, a node would be a specific account since all relationships derive some information given a account. So, we would store seven things (given our current application): 1. Account Name (This acts as a Node identifier / reference ) 2. Content derived from relationship 1 3. Content derived from relationship 2 4. Content derived from relationship 3 5. Content derived from relationship 4 6. Content derived from relationship 5 7. Timestamp of last operation The first six are pretty obvious why we store them. We store the account name so if we search the same account in the future by anybody, we can simply give them the content rather than querying the blockchain a lot. The reason we need the timestamp is to perform a single check on the blockchain. If the author has performed an operation, then our information may be outdated and we should re-query the chain. If no operation has been performed, then we simply store the information in our network cache. In heavily traversed paths, this prevents us from spamming the blockchain and overloading the server on the web application end. The cache also saves the end user tons of time and makes the overall experience more enjoyable while providing the same content they would receive otherwise. And that's an ideal solution. One with tons of benefits with no downside. So we'll implement something like this in the future before launching the app. But for now, we'll probably shift our focus to developing a good entry portal into our traversal mechanism and developing a few backup relationships, so users have plenty of options to select from. Have a great night everyone!
json metadata{"tags":["greenshift","blog","development","brainstorm","programming"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #25537510/Trx 3b4d384b093032fa8b88f2bd3b7fa54fc1bb6eae
View Raw JSON Data
{
  "trx_id": "3b4d384b093032fa8b88f2bd3b7fa54fc1bb6eae",
  "block": 25537510,
  "trx_in_block": 27,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-31T02:20:12",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "greenshift",
      "author": "qfilter",
      "permlink": "greenshift-037-developing-a-network-cache",
      "title": "Greenshift 037: Developing A Network Cache",
      "body": "So, I've missed the last couple of days due to being stuck at work for consecutive twelve hour days, but given that I'm relatively free I thought I would share an idea I came up with while in the shower and refined during my breaks during work. Pardon not adding any new code today, I'm kind of burnt out on that end for today.\n\nSo, let's setup the issue we're going to tackle today:\n\nWhen we're getting content for users to pick from, we are doing a lot of querying from the blockchain. Some of this querying is justified. But what if we query from the same starting point a second time a short time after the first? Well it is likely nothing has changed. So we waste a lot of time querying, especially if areas of the Steem topology are traversed very frequently in a short period of time.\n\nQuerying also takes a lot of time and some of the relationships do a lot of queries. So any solution needs to reduce the number of queries while also maintaining the fidelity of the product. What's the solution for this problem? Developing a cache for the entire network and updating the cache when updates are made.\n\nHere's how it works:\n\nWe store nodes of the relevant network in our database. The relevant nodes in our case is a point where the relationships branch off of. In our case, a node would be a specific account since all relationships derive some information given a account. So, we would store seven things (given our current application):\n\n1. Account Name (This acts as a Node identifier / reference )\n2. Content derived from relationship 1\n3. Content derived from relationship 2\n4. Content derived from relationship 3\n5. Content derived from relationship 4\n6. Content derived from relationship 5\n7. Timestamp of last operation\n\nThe first six are pretty obvious why we store them. We store the account name so if we search the same account in the future by anybody, we can simply give them the content rather than querying the blockchain a lot. The reason we need the timestamp is to perform a single check on the blockchain. If the author has performed an operation, then our information may be outdated and we should re-query the chain. If no operation has been performed, then we simply store the information in our network cache.\n\nIn heavily traversed paths, this prevents us from spamming the blockchain and overloading the server on the web application end. The cache also saves the end user tons of time and makes the overall experience more enjoyable while providing the same content they would receive otherwise. And that's an ideal solution. One with tons of benefits with no downside.\n\nSo we'll implement something like this in the future before launching the app. But for now, we'll probably shift our focus to developing a good entry portal into our traversal mechanism and developing a few backup relationships, so users have plenty of options to select from. Have a great night everyone!",
      "json_metadata": "{\"tags\":[\"greenshift\",\"blog\",\"development\",\"brainstorm\",\"programming\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
qfilterreceived 0.048 STEEM, 0.061 SP author reward for @qfilter / greenshift-033-rebuilding-the-view
2018/08/31 01:42:39
authorqfilter
permlinkgreenshift-033-rebuilding-the-view
sbd payout0.000 SBD
steem payout0.048 STEEM
vesting payout99.150944 VESTS
Transaction InfoBlock #25536758/Virtual Operation #4
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 25536758,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 4,
  "timestamp": "2018-08-31T01:42:39",
  "op": [
    "author_reward",
    {
      "author": "qfilter",
      "permlink": "greenshift-033-rebuilding-the-view",
      "sbd_payout": "0.000 SBD",
      "steem_payout": "0.048 STEEM",
      "vesting_payout": "99.150944 VESTS"
    }
  ]
}
qfilterreceived 0.080 STEEM, 0.099 SP author reward for @qfilter / greenshift-032-messing-around-with-databases
2018/08/30 01:27:15
authorqfilter
permlinkgreenshift-032-messing-around-with-databases
sbd payout0.000 SBD
steem payout0.080 STEEM
vesting payout161.887848 VESTS
Transaction InfoBlock #25507666/Virtual Operation #5
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 25507666,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 5,
  "timestamp": "2018-08-30T01:27:15",
  "op": [
    "author_reward",
    {
      "author": "qfilter",
      "permlink": "greenshift-032-messing-around-with-databases",
      "sbd_payout": "0.000 SBD",
      "steem_payout": "0.080 STEEM",
      "vesting_payout": "161.887848 VESTS"
    }
  ]
}
2018/08/29 19:00:09
votercarn
authorqfilter
permlinkgreenshift-035-rolling-out-the-red-carpet
weight10000 (100.00%)
Transaction InfoBlock #25499933/Trx aa3fb92921ee57d6a27159569521ec0c25557d57
View Raw JSON Data
{
  "trx_id": "aa3fb92921ee57d6a27159569521ec0c25557d57",
  "block": 25499933,
  "trx_in_block": 33,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-29T19:00:09",
  "op": [
    "vote",
    {
      "voter": "carn",
      "author": "qfilter",
      "permlink": "greenshift-035-rolling-out-the-red-carpet",
      "weight": 10000
    }
  ]
}
2018/08/29 18:58:09
votercarn
authorqfilter
permlinkgreenshift-036-where-the-magic-happens
weight10000 (100.00%)
Transaction InfoBlock #25499893/Trx c603c5bd5d09b1ae802f0170b03c647cc7abb734
View Raw JSON Data
{
  "trx_id": "c603c5bd5d09b1ae802f0170b03c647cc7abb734",
  "block": 25499893,
  "trx_in_block": 52,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-29T18:58:09",
  "op": [
    "vote",
    {
      "voter": "carn",
      "author": "qfilter",
      "permlink": "greenshift-036-where-the-magic-happens",
      "weight": 10000
    }
  ]
}
qfilterreceived 0.049 STEEM, 0.061 SP author reward for @qfilter / greenshift-031-explaining-data-flow
2018/08/29 00:19:15
authorqfilter
permlinkgreenshift-031-explaining-data-flow
sbd payout0.000 SBD
steem payout0.049 STEEM
vesting payout99.161874 VESTS
Transaction InfoBlock #25477529/Virtual Operation #4
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 25477529,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 4,
  "timestamp": "2018-08-29T00:19:15",
  "op": [
    "author_reward",
    {
      "author": "qfilter",
      "permlink": "greenshift-031-explaining-data-flow",
      "sbd_payout": "0.000 SBD",
      "steem_payout": "0.049 STEEM",
      "vesting_payout": "99.161874 VESTS"
    }
  ]
}
2018/08/28 20:20:42
voteredicted
authorqfilter
permlinkgreenshift-036-where-the-magic-happens
weight4200 (42.00%)
Transaction InfoBlock #25472760/Trx 038f21d2c7e73ecc7b169be8261ec7f3c72db6c5
View Raw JSON Data
{
  "trx_id": "038f21d2c7e73ecc7b169be8261ec7f3c72db6c5",
  "block": 25472760,
  "trx_in_block": 29,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-28T20:20:42",
  "op": [
    "vote",
    {
      "voter": "edicted",
      "author": "qfilter",
      "permlink": "greenshift-036-where-the-magic-happens",
      "weight": 4200
    }
  ]
}
2018/08/28 03:02:33
parent authorqfilter
parent permlinkgreenshift-036-where-the-magic-happens
authorsteemprojects
permlinkre-greenshift-036-where-the-magic-happens-20180828t030233
title
body This post has been just added as new item to _[timeline of Q-Filter on Steem Projects](https://steemprojects.com/projects/p/q-filter/?utm_source=comment_timeline&utm_medium=steem&utm_campaign=new_event&utm_content=c1)_. If you want to be notified about new updates from this project, register on Steem Projects and add Q-Filter to your favorite projects.
json metadata
Transaction InfoBlock #25452017/Trx 9579608ea9901dd2aa1df1355ba6aa86ffb0c527
View Raw JSON Data
{
  "trx_id": "9579608ea9901dd2aa1df1355ba6aa86ffb0c527",
  "block": 25452017,
  "trx_in_block": 44,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-28T03:02:33",
  "op": [
    "comment",
    {
      "parent_author": "qfilter",
      "parent_permlink": "greenshift-036-where-the-magic-happens",
      "author": "steemprojects",
      "permlink": "re-greenshift-036-where-the-magic-happens-20180828t030233",
      "title": "",
      "body": "\nThis post has been just added as new item to _[timeline of Q-Filter on Steem Projects](https://steemprojects.com/projects/p/q-filter/?utm_source=comment_timeline&utm_medium=steem&utm_campaign=new_event&utm_content=c1)_.\n\nIf you want to be notified about new updates from this project, register on Steem Projects and add Q-Filter to your favorite projects.\n",
      "json_metadata": ""
    }
  ]
}
2018/08/28 01:53:21
parent author
parent permlinkgreenshift
authorqfilter
permlinkgreenshift-036-where-the-magic-happens
titleGreenshift 036: Where The Magic Happens
bodySo what's cooler than viewing content rendered outside Steemit? Finishing up our application in just a few lines of code. Of course that statement comes with a huge disclaimer. We're nowhere near having a commercial product or even an intriguing tool. But today, the vision becomes a reality. Now, that we have a piece of content, we'll want to move to the next set of content using our set of relationships. All we need to do is to have a hyperlink connect us back to the index web page and figure out a way to pass the current author to that web page so we can generate new content from the relationships. First, we'll add the link since that's pretty easy: <center> ![Greenshift 36-1.png](https://cdn.steemitimages.com/DQman3yyWewVcms4tqdNpnqB7Bez4g8YtApxapE4sBXMZGn/Greenshift%2036-1.png) </center> We simply use the `link_to` method and use the `posts_path` as our link. `posts_path` is a specially generated path that is created by using Posts as a resource. Next, we need to pass the author from one view to another. Or in terms of controllers, from one method to the another: <center> ![Greenshift 36-2.png](https://cdn.steemitimages.com/DQmZHT2fP4R4672xws7YXauWhZ8UgmYYx5LjFGwt4aYXhCd/Greenshift%2036-2.png) </center> In the `show` method, we assign the author of the post to an object called a Flash. Flashes are temporary hashes that pass from one state to another before disappearing. Since we are moving from the `show` state which displays a single post back to `index` which shows many posts, this method of data transport works for now. In the `index` function, we'll get the value that corresponds to the author key. If the hash doesn't exist, we simply use the default author (greer184) as the author to generate content from. Eventually, we'll let the user select their starting point, but that's a different idea that we'll focus on later. Now let us go through a single cycle and see how localized traversal works as opposed to the global and time-based approach a lot of other interfaces use. First, we have our starting page: <center> ![Greenshift 36-3.png](https://cdn.steemitimages.com/DQmUEWZpQQhJgvA3vE7tWqSzSNnG9VhQUotuTxrHvRUi1Ry/Greenshift%2036-3.png) </center> Then, we select a piece of content. We then move from the general view to the specific view of the specific piece of content. This specific piece of content is rendered from the Markdown we retrieved from the blockchain: <center> ![Greenshift 36-4.png](https://cdn.steemitimages.com/DQmUjTp183bFRPrTt1eqJsWRQJaWbjVsguMVPH4UZA9q99S/Greenshift%2036-4.png) </center> As you can see, there's a link up at the top that should lead us back to the general view. But given that we are reading a different author than who we started with, we hope to see some fresh material: <center> ![Greenshift 36-5.png](https://cdn.steemitimages.com/DQmTjZb26Rzr495afXf2YCLiSvVS1kvSpGBFppHvz9T9viM/Greenshift%2036-5.png) </center> And just like that, we have some fresh content to read! And we can continue to wander down the rabbit hole as deep as we want to go. And given that a lot of this content requires some level of approval from the previous author, we filter a lot of trash out since most content creators that don't spam typically don't vote for spam. Pretty neat, right? Now that we have completed the full loop and have the basic application laid out, we can now begin adding meat on to the bones and then add features on top of the completed application to make Greenshift a helpful tool for both content curators and content consumers.
json metadata{"tags":["greenshift","blog","development","rails","programming"],"image":["https://cdn.steemitimages.com/DQman3yyWewVcms4tqdNpnqB7Bez4g8YtApxapE4sBXMZGn/Greenshift%2036-1.png","https://cdn.steemitimages.com/DQmZHT2fP4R4672xws7YXauWhZ8UgmYYx5LjFGwt4aYXhCd/Greenshift%2036-2.png","https://cdn.steemitimages.com/DQmUEWZpQQhJgvA3vE7tWqSzSNnG9VhQUotuTxrHvRUi1Ry/Greenshift%2036-3.png","https://cdn.steemitimages.com/DQmUjTp183bFRPrTt1eqJsWRQJaWbjVsguMVPH4UZA9q99S/Greenshift%2036-4.png","https://cdn.steemitimages.com/DQmTjZb26Rzr495afXf2YCLiSvVS1kvSpGBFppHvz9T9viM/Greenshift%2036-5.png"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #25450635/Trx 919016991b232b66e04161517201129d47c54bc0
View Raw JSON Data
{
  "trx_id": "919016991b232b66e04161517201129d47c54bc0",
  "block": 25450635,
  "trx_in_block": 21,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-28T01:53:21",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "greenshift",
      "author": "qfilter",
      "permlink": "greenshift-036-where-the-magic-happens",
      "title": "Greenshift 036: Where The Magic Happens",
      "body": "So what's cooler than viewing content rendered outside Steemit? Finishing up our application in just a few lines of code. Of course that statement comes with a huge disclaimer. We're nowhere near having a commercial product or even an intriguing tool. But today, the vision becomes a reality.\n\nNow, that we have a piece of content, we'll want to move to the next set of content using our set of relationships. All we need to do is to have a hyperlink connect us back to the index web page and figure out a way to pass the current author to that web page so we can generate new content from the relationships.\n\nFirst, we'll add the link since that's pretty easy:\n\n<center>\n![Greenshift 36-1.png](https://cdn.steemitimages.com/DQman3yyWewVcms4tqdNpnqB7Bez4g8YtApxapE4sBXMZGn/Greenshift%2036-1.png)\n</center>\n\nWe simply use the `link_to` method and use the `posts_path` as our link. `posts_path` is a specially generated path that is created by using Posts as a resource. Next, we need to pass the author from one view to another. Or in terms of controllers, from one method to the another:\n\n<center>\n![Greenshift 36-2.png](https://cdn.steemitimages.com/DQmZHT2fP4R4672xws7YXauWhZ8UgmYYx5LjFGwt4aYXhCd/Greenshift%2036-2.png)\n</center>\n\nIn the `show` method, we assign the author of the post to an object called a Flash. Flashes are temporary hashes that pass from one state to another before disappearing. Since we are moving from the `show` state which displays a single post back to `index` which shows many posts, this method of data transport works for now.\n\nIn the `index` function, we'll get the value that corresponds to the author key. If the hash doesn't exist, we simply use the default author (greer184) as the author to generate content from. Eventually, we'll let the user select their starting point, but that's a different idea that we'll focus on later.\n\nNow let us go through a single cycle and see how localized traversal works as opposed to the global and time-based approach a lot of other interfaces use. First, we have our starting page:\n\n<center>\n![Greenshift 36-3.png](https://cdn.steemitimages.com/DQmUEWZpQQhJgvA3vE7tWqSzSNnG9VhQUotuTxrHvRUi1Ry/Greenshift%2036-3.png)\n</center>\n\nThen, we select a piece of content. We then move from the general view to the specific view of the specific piece of content. This specific piece of content is rendered from the Markdown we retrieved from the blockchain:\n\n<center>\n![Greenshift 36-4.png](https://cdn.steemitimages.com/DQmUjTp183bFRPrTt1eqJsWRQJaWbjVsguMVPH4UZA9q99S/Greenshift%2036-4.png)\n</center>\n\nAs you can see, there's a link up at the top that should lead us back to the general view. But given that we are reading a different author than who we started with, we hope to see some fresh material:\n\n<center>\n![Greenshift 36-5.png](https://cdn.steemitimages.com/DQmTjZb26Rzr495afXf2YCLiSvVS1kvSpGBFppHvz9T9viM/Greenshift%2036-5.png)\n</center>\n\nAnd just like that, we have some fresh content to read! And we can continue to wander down the rabbit hole as deep as we want to go. And given that a lot of this content requires some level of approval from the previous author, we filter a lot of trash out since most content creators that don't spam typically don't vote for spam. Pretty neat, right?\n\nNow that we have completed the full loop and have the basic application laid out, we can now begin adding meat on to the bones and then add features on top of the completed application to make Greenshift a helpful tool for both content curators and content consumers.",
      "json_metadata": "{\"tags\":[\"greenshift\",\"blog\",\"development\",\"rails\",\"programming\"],\"image\":[\"https://cdn.steemitimages.com/DQman3yyWewVcms4tqdNpnqB7Bez4g8YtApxapE4sBXMZGn/Greenshift%2036-1.png\",\"https://cdn.steemitimages.com/DQmZHT2fP4R4672xws7YXauWhZ8UgmYYx5LjFGwt4aYXhCd/Greenshift%2036-2.png\",\"https://cdn.steemitimages.com/DQmUEWZpQQhJgvA3vE7tWqSzSNnG9VhQUotuTxrHvRUi1Ry/Greenshift%2036-3.png\",\"https://cdn.steemitimages.com/DQmUjTp183bFRPrTt1eqJsWRQJaWbjVsguMVPH4UZA9q99S/Greenshift%2036-4.png\",\"https://cdn.steemitimages.com/DQmTjZb26Rzr495afXf2YCLiSvVS1kvSpGBFppHvz9T9viM/Greenshift%2036-5.png\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
qfilterreceived 0.091 STEEM, 0.113 SP author reward for @qfilter / greenshift-030-shifting-direction
2018/08/28 01:25:33
authorqfilter
permlinkgreenshift-030-shifting-direction
sbd payout0.000 SBD
steem payout0.091 STEEM
vesting payout184.167217 VESTS
Transaction InfoBlock #25450079/Virtual Operation #5
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 25450079,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 5,
  "timestamp": "2018-08-28T01:25:33",
  "op": [
    "author_reward",
    {
      "author": "qfilter",
      "permlink": "greenshift-030-shifting-direction",
      "sbd_payout": "0.000 SBD",
      "steem_payout": "0.091 STEEM",
      "vesting_payout": "184.167217 VESTS"
    }
  ]
}
2018/08/27 06:12:15
voterlimesoda
authorqfilter
permlinkgreenshift-035-rolling-out-the-red-carpet
weight900 (9.00%)
Transaction InfoBlock #25427018/Trx 2d0af6bc31f813e09dd58ab77881102956924e01
View Raw JSON Data
{
  "trx_id": "2d0af6bc31f813e09dd58ab77881102956924e01",
  "block": 25427018,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-27T06:12:15",
  "op": [
    "vote",
    {
      "voter": "limesoda",
      "author": "qfilter",
      "permlink": "greenshift-035-rolling-out-the-red-carpet",
      "weight": 900
    }
  ]
}
2018/08/27 01:50:57
parent authorqfilter
parent permlinkgreenshift-035-rolling-out-the-red-carpet
authorsteemprojects
permlinkre-greenshift-035-rolling-out-the-red-carpet-20180827t015057
title
body This post has been just added as new item to _[timeline of Q-Filter on Steem Projects](https://steemprojects.com/projects/p/q-filter/?utm_source=comment_timeline&utm_medium=steem&utm_campaign=new_event&utm_content=c1)_. If you want to be notified about new updates from this project, register on Steem Projects and add Q-Filter to your favorite projects.
json metadata
Transaction InfoBlock #25421792/Trx 2ed806fe53da3a0a0696a480df96ac531256420f
View Raw JSON Data
{
  "trx_id": "2ed806fe53da3a0a0696a480df96ac531256420f",
  "block": 25421792,
  "trx_in_block": 21,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-27T01:50:57",
  "op": [
    "comment",
    {
      "parent_author": "qfilter",
      "parent_permlink": "greenshift-035-rolling-out-the-red-carpet",
      "author": "steemprojects",
      "permlink": "re-greenshift-035-rolling-out-the-red-carpet-20180827t015057",
      "title": "",
      "body": "\nThis post has been just added as new item to _[timeline of Q-Filter on Steem Projects](https://steemprojects.com/projects/p/q-filter/?utm_source=comment_timeline&utm_medium=steem&utm_campaign=new_event&utm_content=c1)_.\n\nIf you want to be notified about new updates from this project, register on Steem Projects and add Q-Filter to your favorite projects.\n",
      "json_metadata": ""
    }
  ]
}
2018/08/27 01:27:42
votertinoschloegl
authorqfilter
permlinkgreenshift-035-rolling-out-the-red-carpet
weight500 (5.00%)
Transaction InfoBlock #25421327/Trx 000a5b92764cb7e2f05aed4eaaf115af739b3d44
View Raw JSON Data
{
  "trx_id": "000a5b92764cb7e2f05aed4eaaf115af739b3d44",
  "block": 25421327,
  "trx_in_block": 18,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-27T01:27:42",
  "op": [
    "vote",
    {
      "voter": "tinoschloegl",
      "author": "qfilter",
      "permlink": "greenshift-035-rolling-out-the-red-carpet",
      "weight": 500
    }
  ]
}
2018/08/27 01:22:39
voteryoungogmarqs
authorqfilter
permlinkgreenshift-035-rolling-out-the-red-carpet
weight2 (0.02%)
Transaction InfoBlock #25421226/Trx 6180b804a2a2ea4207859ef028290a7b9fd6c615
View Raw JSON Data
{
  "trx_id": "6180b804a2a2ea4207859ef028290a7b9fd6c615",
  "block": 25421226,
  "trx_in_block": 7,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-27T01:22:39",
  "op": [
    "vote",
    {
      "voter": "youngogmarqs",
      "author": "qfilter",
      "permlink": "greenshift-035-rolling-out-the-red-carpet",
      "weight": 2
    }
  ]
}
2018/08/27 01:22:06
voteredicted
authorqfilter
permlinkgreenshift-035-rolling-out-the-red-carpet
weight6600 (66.00%)
Transaction InfoBlock #25421215/Trx 678c007023b65ad6934829ae0ea6b0dbca0ed434
View Raw JSON Data
{
  "trx_id": "678c007023b65ad6934829ae0ea6b0dbca0ed434",
  "block": 25421215,
  "trx_in_block": 25,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-27T01:22:06",
  "op": [
    "vote",
    {
      "voter": "edicted",
      "author": "qfilter",
      "permlink": "greenshift-035-rolling-out-the-red-carpet",
      "weight": 6600
    }
  ]
}
qfilterclaimed reward balance: 0.048 STEEM, 0.060 SP
2018/08/27 00:58:30
accountqfilter
reward steem0.048 STEEM
reward sbd0.000 SBD
reward vests97.153863 VESTS
Transaction InfoBlock #25420743/Trx 3b42f3849b7beacbadeeabebc942265d8545ce7f
View Raw JSON Data
{
  "trx_id": "3b42f3849b7beacbadeeabebc942265d8545ce7f",
  "block": 25420743,
  "trx_in_block": 17,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-27T00:58:30",
  "op": [
    "claim_reward_balance",
    {
      "account": "qfilter",
      "reward_steem": "0.048 STEEM",
      "reward_sbd": "0.000 SBD",
      "reward_vests": "97.153863 VESTS"
    }
  ]
}
2018/08/27 00:57:33
parent author
parent permlinkgreenshift
authorqfilter
permlinkgreenshift-035-rolling-out-the-red-carpet
titleGreenshift 035: Rolling Out The Red Carpet
bodyLast time, we were able to view text that was stored in the blockchain and view it as a raw text String. But the blockchain stores this material in Markdown which can then be further translated into HTML. HTML is the language that web browsers can read. But we are giving it Markdown which views it as plain text. It's time to fix that. Now, I could spend several weeks developing a tool to do that conversion, but instead of reinventing the wheel, I could hope that someone else has run into this exact problem and has already designed a solution for me. Hey, what do you know? There is! Red Carpet, "the safe Markdown parser", is a Ruby gem that parses Markdown text into HTML and allows us to customize that process if we desire. In order to include gems in our project, we simply need to specify the gem with our Gemfile which lists the libraries that the project uses so other people that build the project have a single place that describes all the dependencies they have to download. Here's our updated Gemfile: <center> ![Greenshift 35-3.png](https://cdn.steemitimages.com/DQmNv1UDYxAWTdmumtXCw48BTgLFW3BazVLAK1P7VGW4pRi/Greenshift%2035-3.png) </center> After declaring we want to roll out the Red Carpet, we run `bundle install` which loads any gems within the Gemfile that we currently do not have. And just like that, we have a new library to play with. And here is me playing with it in our `show.html.erb` file: <center> ![Greenshift 35-1.png](https://cdn.steemitimages.com/DQmTVqhR1vknijKAi673wK697quhSqSPXbnfNMymrykwkUt/Greenshift%2035-1.png) </center> In the second line, we create a customizable `renderer` object. There are a ton of different options to select from, but we'll simply use hard wrapping which makes things look nicer by inserting breaks into our Markdown so the text wraps properly. Next, we create a `markdown` object from the `renderer` and then we render the Markdown into safe HTML. To simplify everything I just said above, we are simply creating a parser with certain rules, then creating the parser and using it to translate the Markdown into HTML. It's actually pretty simple when you abstract the complexities that occur in the background. Here is how the results of playing with Red Carpet look like: <center> ![Greenshift 35-2.png](https://cdn.steemitimages.com/DQmNhwEnxQu6GihPG3eN1AaPwV4Ym8GtWpTPL8Nsrrn6QhP/Greenshift%2035-2.png) </center> We now get images to render, we have headers showing up, and the text is now split up into different paragraphs. Granted it doesn't look super sexy, it is solid HTML which we can add some spicy styling to in the future. The nice thing about this library is that it creates the tags which we can now specify in later Javascript and CSS to make the page more dynamic and stylish.
json metadata{"tags":["greenshift","blog","development","markdown","programming"],"image":["https://cdn.steemitimages.com/DQmNv1UDYxAWTdmumtXCw48BTgLFW3BazVLAK1P7VGW4pRi/Greenshift%2035-3.png","https://cdn.steemitimages.com/DQmTVqhR1vknijKAi673wK697quhSqSPXbnfNMymrykwkUt/Greenshift%2035-1.png","https://cdn.steemitimages.com/DQmNhwEnxQu6GihPG3eN1AaPwV4Ym8GtWpTPL8Nsrrn6QhP/Greenshift%2035-2.png"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #25420724/Trx 985b1c7e17845b2c01ab914f1f87fd78631aa355
View Raw JSON Data
{
  "trx_id": "985b1c7e17845b2c01ab914f1f87fd78631aa355",
  "block": 25420724,
  "trx_in_block": 7,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-27T00:57:33",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "greenshift",
      "author": "qfilter",
      "permlink": "greenshift-035-rolling-out-the-red-carpet",
      "title": "Greenshift 035: Rolling Out The Red Carpet",
      "body": "Last time, we were able to view text that was stored in the blockchain and view it as a raw text String. But the blockchain stores this material in Markdown which can then be further translated into HTML. HTML is the language that web browsers can read. But we are giving it Markdown which views it as plain text. It's time to fix that.\n\nNow, I could spend several weeks developing a tool to do that conversion, but instead of reinventing the wheel, I could hope that someone else has run into this exact problem and has already designed a solution for me. Hey, what do you know? There is! Red Carpet, \"the safe Markdown parser\", is a Ruby gem that parses Markdown text into HTML and allows us to customize that process if we desire.\n\nIn order to include gems in our project, we simply need to specify the gem with our Gemfile which lists the libraries that the project uses so other people that build the project have a single place that describes all the dependencies they have to download. Here's our updated Gemfile:\n\n<center>\n![Greenshift 35-3.png](https://cdn.steemitimages.com/DQmNv1UDYxAWTdmumtXCw48BTgLFW3BazVLAK1P7VGW4pRi/Greenshift%2035-3.png)\n</center>\n\nAfter declaring we want to roll out the Red Carpet, we run `bundle install` which loads any gems within the Gemfile that we currently do not have. And just like that, we have a new library to play with. And here is me playing with it in our `show.html.erb` file:\n\n<center>\n![Greenshift 35-1.png](https://cdn.steemitimages.com/DQmTVqhR1vknijKAi673wK697quhSqSPXbnfNMymrykwkUt/Greenshift%2035-1.png)\n</center>\n\nIn the second line, we create a customizable `renderer` object. There are a ton of different options to select from, but we'll simply use hard wrapping which makes things look nicer by inserting breaks into our Markdown so the text wraps properly. Next, we create a `markdown` object from the `renderer` and then we render the Markdown into safe HTML. \n\nTo simplify everything I just said above, we are simply creating a parser with certain rules, then creating the parser and using it to translate the Markdown into HTML. It's actually pretty simple when you abstract the complexities that occur in the background.\n\nHere is how the results of playing with Red Carpet look like:\n\n<center>\n![Greenshift 35-2.png](https://cdn.steemitimages.com/DQmNhwEnxQu6GihPG3eN1AaPwV4Ym8GtWpTPL8Nsrrn6QhP/Greenshift%2035-2.png)\n</center>\n\nWe now get images to render, we have headers showing up, and the text is now split up into different paragraphs. Granted it doesn't look super sexy, it is solid HTML which we can add some spicy styling to in the future. The nice thing about this library is that it creates the tags which we can now specify in later Javascript and CSS to make the page more dynamic and stylish.",
      "json_metadata": "{\"tags\":[\"greenshift\",\"blog\",\"development\",\"markdown\",\"programming\"],\"image\":[\"https://cdn.steemitimages.com/DQmNv1UDYxAWTdmumtXCw48BTgLFW3BazVLAK1P7VGW4pRi/Greenshift%2035-3.png\",\"https://cdn.steemitimages.com/DQmTVqhR1vknijKAi673wK697quhSqSPXbnfNMymrykwkUt/Greenshift%2035-1.png\",\"https://cdn.steemitimages.com/DQmNhwEnxQu6GihPG3eN1AaPwV4Ym8GtWpTPL8Nsrrn6QhP/Greenshift%2035-2.png\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2018/08/26 20:44:30
votercarn
authorqfilter
permlinkgreenshift-034-getting-actual-content
weight10000 (100.00%)
Transaction InfoBlock #25415664/Trx f6141c8998d625ea015be7560f77acbcc927805c
View Raw JSON Data
{
  "trx_id": "f6141c8998d625ea015be7560f77acbcc927805c",
  "block": 25415664,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-26T20:44:30",
  "op": [
    "vote",
    {
      "voter": "carn",
      "author": "qfilter",
      "permlink": "greenshift-034-getting-actual-content",
      "weight": 10000
    }
  ]
}
2018/08/26 18:39:24
voteredicted
authorqfilter
permlinkgreenshift-034-getting-actual-content
weight5200 (52.00%)
Transaction InfoBlock #25413163/Trx e84246750c0214ee49b758a1cd5a430afbce7a9b
View Raw JSON Data
{
  "trx_id": "e84246750c0214ee49b758a1cd5a430afbce7a9b",
  "block": 25413163,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-26T18:39:24",
  "op": [
    "vote",
    {
      "voter": "edicted",
      "author": "qfilter",
      "permlink": "greenshift-034-getting-actual-content",
      "weight": 5200
    }
  ]
}
2018/08/26 07:50:03
voterjacekw.dev
authorqfilter
permlinkgreenshift-034-getting-actual-content
weight10000 (100.00%)
Transaction InfoBlock #25400178/Trx 27b40eff28df69100f6d4b81d85ea688f2ac493a
View Raw JSON Data
{
  "trx_id": "27b40eff28df69100f6d4b81d85ea688f2ac493a",
  "block": 25400178,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-26T07:50:03",
  "op": [
    "vote",
    {
      "voter": "jacekw.dev",
      "author": "qfilter",
      "permlink": "greenshift-034-getting-actual-content",
      "weight": 10000
    }
  ]
}
2018/08/26 02:32:21
votertomiscurious
authorqfilter
permlinkgreenshift-034-getting-actual-content
weight500 (5.00%)
Transaction InfoBlock #25393826/Trx d74fb37cb61ed4996b5e833faa44054e2bc133a9
View Raw JSON Data
{
  "trx_id": "d74fb37cb61ed4996b5e833faa44054e2bc133a9",
  "block": 25393826,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-26T02:32:21",
  "op": [
    "vote",
    {
      "voter": "tomiscurious",
      "author": "qfilter",
      "permlink": "greenshift-034-getting-actual-content",
      "weight": 500
    }
  ]
}
2018/08/26 02:28:36
votertinoschloegl
authorqfilter
permlinkgreenshift-034-getting-actual-content
weight500 (5.00%)
Transaction InfoBlock #25393751/Trx 19cc1ae8a2af553b510140c1d53322ca3a8c88ed
View Raw JSON Data
{
  "trx_id": "19cc1ae8a2af553b510140c1d53322ca3a8c88ed",
  "block": 25393751,
  "trx_in_block": 18,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-26T02:28:36",
  "op": [
    "vote",
    {
      "voter": "tinoschloegl",
      "author": "qfilter",
      "permlink": "greenshift-034-getting-actual-content",
      "weight": 500
    }
  ]
}
2018/08/26 02:26:03
voterlordofreward
authorqfilter
permlinkgreenshift-034-getting-actual-content
weight75 (0.75%)
Transaction InfoBlock #25393700/Trx ad740f87d301b7256274161be26dc371f5f8f1b2
View Raw JSON Data
{
  "trx_id": "ad740f87d301b7256274161be26dc371f5f8f1b2",
  "block": 25393700,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-26T02:26:03",
  "op": [
    "vote",
    {
      "voter": "lordofreward",
      "author": "qfilter",
      "permlink": "greenshift-034-getting-actual-content",
      "weight": 75
    }
  ]
}
2018/08/26 02:00:54
parent authorqfilter
parent permlinkgreenshift-034-getting-actual-content
authorsteemprojects
permlinkre-greenshift-034-getting-actual-content-20180826t020054
title
body This post has been just added as new item to _[timeline of Q-Filter on Steem Projects](https://steemprojects.com/projects/p/q-filter/?utm_source=comment_timeline&utm_medium=steem&utm_campaign=new_event&utm_content=c1)_. If you want to be notified about new updates from this project, register on Steem Projects and add Q-Filter to your favorite projects.
json metadata
Transaction InfoBlock #25393197/Trx b67c9a67f13999884214d8c9bbc108c9a73636f8
View Raw JSON Data
{
  "trx_id": "b67c9a67f13999884214d8c9bbc108c9a73636f8",
  "block": 25393197,
  "trx_in_block": 23,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-26T02:00:54",
  "op": [
    "comment",
    {
      "parent_author": "qfilter",
      "parent_permlink": "greenshift-034-getting-actual-content",
      "author": "steemprojects",
      "permlink": "re-greenshift-034-getting-actual-content-20180826t020054",
      "title": "",
      "body": "\nThis post has been just added as new item to _[timeline of Q-Filter on Steem Projects](https://steemprojects.com/projects/p/q-filter/?utm_source=comment_timeline&utm_medium=steem&utm_campaign=new_event&utm_content=c1)_.\n\nIf you want to be notified about new updates from this project, register on Steem Projects and add Q-Filter to your favorite projects.\n",
      "json_metadata": ""
    }
  ]
}
2018/08/26 01:58:27
parent author
parent permlinkgreenshift
authorqfilter
permlinkgreenshift-034-getting-actual-content
titleGreenshift 034: Getting Actual Content
bodyAlright. Let's stop screwing around and get some content to show up on the web application. Last time, we fixed things on the model and database end of our data. Now we're going to expand our user interface and the controller underneath. At the end of today's article, we'll display Steem content to the user. And you'll be able to copy my code, do something useful with it, and never use Steemit again. The first thing I worked on was within the model. I added a conditional statement to the relationships that prevents null content being stored in the database. Because that isn't useful. Then after that, I filtered null permlinks out since those are still passed to the controller even if they aren't in the database. I achieved this filter by using the `reject!` function which you can see below: <center> ![Greenshift 34-1.png](https://cdn.steemitimages.com/DQmNXmu2ESFSUa7hp6z8W9fWFtGocE7cLacXTm3P63oHMFn/Greenshift%2034-1.png) </center> You'll also notice another function outside the `index` function. We now have a new `show` function that corresponds with a new html web page named show. Within this function, we simply assign an instance variable `@post`to a Post that we find by using it's unique database id. But how does this function get this id? Well we use the `params` object which allows us to transfer information between views. But where do we pass this information? In our index view: <center> ![Greenshift 34-2.png](https://cdn.steemitimages.com/DQmVuxcTyPhQj2vDtjpUsrLqm4s7pgLctGzxXy2hAMsvNb4/Greenshift%2034-2.png) </center> If you were around the last time when we tied the title to hyperlinks you'll recognize the `link_to` function. That creates a hyperlink that uses the title as the link description. But what do we use as the link? The Post object! Inside the post object, the id is stored. Since Rails understands how to pass resources in apps that follow the REST pattern, it takes the id and puts it in params so we can use it to get the post information to give to the new HTML page that is created when we click on the hyperlink. From the id, we can then get the rest of the information we need without ever explicitly needing to code this passing ourselves. So, how does this look? Let's see below: <center> ![Greenshift 34-3.png](https://cdn.steemitimages.com/DQmZQ7tVuEg43vstRMaV1Lq4pzZT7eJpCdXaFS8YrCKW7WM/Greenshift%2034-3.png) </center> Our hyperlinks are back, but now they lead to the new web page that I created rather than going to Steemit.com: <center> ![Greenshift 34-4.png](https://cdn.steemitimages.com/DQmYisQwXPDeF99LZsNW6sqHT1fEnMXfBhyWaEPF1oB55kK/Greenshift%2034-4.png) </center> You'll notice the title and the body of the post. Next time, we'll translate the stored Markdown into something nicer looking. But you should be asking yourself a question. How did we get the body of the post if we didn't store it in the blockchain? Well, we make a call to the blockchain within the show view using embedded Ruby. This function is defined in the Post object: <center> ![Greenshift 34-5.png](https://cdn.steemitimages.com/DQmf6v6C6wd9BNAsau8uh1Wr8BfWyVRPx2orUaFGm8azQTY/Greenshift%2034-5.png) </center> You'll notice that I basically cleaned everything out of there since Rails and ActiveRecord are doing more of the heavy lifting. I do have a single function that takes the permlink and author and grabs the piece of content so we can return the body of the post to the show web page. The nice thing about resources is that through the single show web page, we can generate a new web page for every single piece of content. Pretty cool, right? One of the neat features of web frameworks that makes our live easier and makes development quicker. Anyway, I'll see you when we make this page a little more user friendly to read.
json metadata{"tags":["greenshift","blog","development","rails","programming"],"image":["https://cdn.steemitimages.com/DQmNXmu2ESFSUa7hp6z8W9fWFtGocE7cLacXTm3P63oHMFn/Greenshift%2034-1.png","https://cdn.steemitimages.com/DQmVuxcTyPhQj2vDtjpUsrLqm4s7pgLctGzxXy2hAMsvNb4/Greenshift%2034-2.png","https://cdn.steemitimages.com/DQmZQ7tVuEg43vstRMaV1Lq4pzZT7eJpCdXaFS8YrCKW7WM/Greenshift%2034-3.png","https://cdn.steemitimages.com/DQmYisQwXPDeF99LZsNW6sqHT1fEnMXfBhyWaEPF1oB55kK/Greenshift%2034-4.png","https://cdn.steemitimages.com/DQmf6v6C6wd9BNAsau8uh1Wr8BfWyVRPx2orUaFGm8azQTY/Greenshift%2034-5.png"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #25393148/Trx 499ed520ee276c3b6b97216841c6c74feb037529
View Raw JSON Data
{
  "trx_id": "499ed520ee276c3b6b97216841c6c74feb037529",
  "block": 25393148,
  "trx_in_block": 14,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-26T01:58:27",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "greenshift",
      "author": "qfilter",
      "permlink": "greenshift-034-getting-actual-content",
      "title": "Greenshift 034: Getting Actual Content",
      "body": "Alright. Let's stop screwing around and get some content to show up on the web application. Last time, we fixed things on the model and database end of our data. Now we're going to expand our user interface and the controller underneath. At the end of today's article, we'll display Steem content to the user. And you'll be able to copy my code, do something useful with it, and never use Steemit again.\n\nThe first thing I worked on was within the model. I added a conditional statement to the relationships that prevents null content being stored in the database. Because that isn't useful. Then after that, I filtered null permlinks out since those are still passed to the controller even if they aren't in the database. I achieved this filter by using the `reject!` function which you can see below:\n\n<center>\n![Greenshift 34-1.png](https://cdn.steemitimages.com/DQmNXmu2ESFSUa7hp6z8W9fWFtGocE7cLacXTm3P63oHMFn/Greenshift%2034-1.png)\n</center>\n\nYou'll also notice another function outside the `index` function. We now have a new `show` function that corresponds with a new html web page named show. Within this function, we simply assign an instance variable `@post`to a Post that we find by using it's unique database id. But how does this function get this id? Well we use the `params` object which allows us to transfer information between views. But where do we pass this information? In our index view:\n\n<center>\n![Greenshift 34-2.png](https://cdn.steemitimages.com/DQmVuxcTyPhQj2vDtjpUsrLqm4s7pgLctGzxXy2hAMsvNb4/Greenshift%2034-2.png)\n</center>  \n\nIf you were around the last time when we tied the title to hyperlinks you'll recognize the `link_to` function. That creates a hyperlink that uses the title as the link description. But what do we use as the link? The Post object! Inside the post object, the id is stored. \n\nSince Rails understands how to pass resources in apps that follow the REST pattern, it takes the id and puts it in params so we can use it to get the post information to give to the new HTML page that is created when we click on the hyperlink. From the id, we can then get the rest of the information we need without ever explicitly needing to code this passing ourselves.\n\nSo, how does this look? Let's see below:\n\n<center>\n![Greenshift 34-3.png](https://cdn.steemitimages.com/DQmZQ7tVuEg43vstRMaV1Lq4pzZT7eJpCdXaFS8YrCKW7WM/Greenshift%2034-3.png)\n</center>\n\nOur hyperlinks are back, but now they lead to the new web page that I created rather than going to Steemit.com:\n\n<center>\n![Greenshift 34-4.png](https://cdn.steemitimages.com/DQmYisQwXPDeF99LZsNW6sqHT1fEnMXfBhyWaEPF1oB55kK/Greenshift%2034-4.png)\n</center>\n\nYou'll notice the title and the body of the post. Next time, we'll translate the stored Markdown into something nicer looking. But you should be asking yourself a question. How did we get the body of the post if we didn't store it in the blockchain? Well, we make a call to the blockchain within the show view using embedded Ruby. This function is defined in the Post object:\n\n<center>\n![Greenshift 34-5.png](https://cdn.steemitimages.com/DQmf6v6C6wd9BNAsau8uh1Wr8BfWyVRPx2orUaFGm8azQTY/Greenshift%2034-5.png)\n</center>\n\nYou'll notice that I basically cleaned everything out of there since Rails and ActiveRecord are doing more of the heavy lifting. I do have a single function that takes the permlink and author and grabs the piece of content so we can return the body of the post to the show web page.\n\nThe nice thing about resources is that through the single show web page, we can generate a new web page for every single piece of content. Pretty cool, right? One of the neat features of web frameworks that makes our live easier and makes development quicker. Anyway, I'll see you when we make this page a little more user friendly to read.",
      "json_metadata": "{\"tags\":[\"greenshift\",\"blog\",\"development\",\"rails\",\"programming\"],\"image\":[\"https://cdn.steemitimages.com/DQmNXmu2ESFSUa7hp6z8W9fWFtGocE7cLacXTm3P63oHMFn/Greenshift%2034-1.png\",\"https://cdn.steemitimages.com/DQmVuxcTyPhQj2vDtjpUsrLqm4s7pgLctGzxXy2hAMsvNb4/Greenshift%2034-2.png\",\"https://cdn.steemitimages.com/DQmZQ7tVuEg43vstRMaV1Lq4pzZT7eJpCdXaFS8YrCKW7WM/Greenshift%2034-3.png\",\"https://cdn.steemitimages.com/DQmYisQwXPDeF99LZsNW6sqHT1fEnMXfBhyWaEPF1oB55kK/Greenshift%2034-4.png\",\"https://cdn.steemitimages.com/DQmf6v6C6wd9BNAsau8uh1Wr8BfWyVRPx2orUaFGm8azQTY/Greenshift%2034-5.png\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
qfilterreceived 0.048 STEEM, 0.060 SP author reward for @qfilter / greenshift-028-damn-technicalities
2018/08/26 00:16:33
authorqfilter
permlinkgreenshift-028-damn-technicalities
sbd payout0.000 SBD
steem payout0.048 STEEM
vesting payout97.153863 VESTS
Transaction InfoBlock #25391111/Virtual Operation #4
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 25391111,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 4,
  "timestamp": "2018-08-26T00:16:33",
  "op": [
    "author_reward",
    {
      "author": "qfilter",
      "permlink": "greenshift-028-damn-technicalities",
      "sbd_payout": "0.000 SBD",
      "steem_payout": "0.048 STEEM",
      "vesting_payout": "97.153863 VESTS"
    }
  ]
}
2018/08/24 11:21:21
votercarn
authorqfilter
permlinkgreenshift-033-rebuilding-the-view
weight10000 (100.00%)
Transaction InfoBlock #25346842/Trx 17efc53039060b0dd4e91c675228224313e34aab
View Raw JSON Data
{
  "trx_id": "17efc53039060b0dd4e91c675228224313e34aab",
  "block": 25346842,
  "trx_in_block": 13,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-24T11:21:21",
  "op": [
    "vote",
    {
      "voter": "carn",
      "author": "qfilter",
      "permlink": "greenshift-033-rebuilding-the-view",
      "weight": 10000
    }
  ]
}
2018/08/24 04:13:39
voteredicted
authorqfilter
permlinkgreenshift-033-rebuilding-the-view
weight10000 (100.00%)
Transaction InfoBlock #25338294/Trx e849d330933693d1dda8c0deccde5aab45eb8ba6
View Raw JSON Data
{
  "trx_id": "e849d330933693d1dda8c0deccde5aab45eb8ba6",
  "block": 25338294,
  "trx_in_block": 16,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-24T04:13:39",
  "op": [
    "vote",
    {
      "voter": "edicted",
      "author": "qfilter",
      "permlink": "greenshift-033-rebuilding-the-view",
      "weight": 10000
    }
  ]
}
2018/08/24 02:10:03
voterlordofreward
authorqfilter
permlinkgreenshift-033-rebuilding-the-view
weight75 (0.75%)
Transaction InfoBlock #25335824/Trx 90cd396c83cb7f29b11ad217f930642bea73d92c
View Raw JSON Data
{
  "trx_id": "90cd396c83cb7f29b11ad217f930642bea73d92c",
  "block": 25335824,
  "trx_in_block": 17,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-24T02:10:03",
  "op": [
    "vote",
    {
      "voter": "lordofreward",
      "author": "qfilter",
      "permlink": "greenshift-033-rebuilding-the-view",
      "weight": 75
    }
  ]
}
2018/08/24 01:47:54
parent authorqfilter
parent permlinkgreenshift-033-rebuilding-the-view
authorsteemprojects
permlinkre-greenshift-033-rebuilding-the-view-20180824t014751
title
body This post has been just added as new item to _[timeline of Q-Filter on Steem Projects](https://steemprojects.com/projects/p/q-filter/?utm_source=comment_timeline&utm_medium=steem&utm_campaign=new_event&utm_content=c1)_. If you want to be notified about new updates from this project, register on Steem Projects and add Q-Filter to your favorite projects.
json metadata
Transaction InfoBlock #25335382/Trx b6fcec698990fdcef0a8e055f9cdc684f69228e2
View Raw JSON Data
{
  "trx_id": "b6fcec698990fdcef0a8e055f9cdc684f69228e2",
  "block": 25335382,
  "trx_in_block": 16,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-24T01:47:54",
  "op": [
    "comment",
    {
      "parent_author": "qfilter",
      "parent_permlink": "greenshift-033-rebuilding-the-view",
      "author": "steemprojects",
      "permlink": "re-greenshift-033-rebuilding-the-view-20180824t014751",
      "title": "",
      "body": "\nThis post has been just added as new item to _[timeline of Q-Filter on Steem Projects](https://steemprojects.com/projects/p/q-filter/?utm_source=comment_timeline&utm_medium=steem&utm_campaign=new_event&utm_content=c1)_.\n\nIf you want to be notified about new updates from this project, register on Steem Projects and add Q-Filter to your favorite projects.\n",
      "json_metadata": ""
    }
  ]
}
qfilterpowered up 4.247 STEEM to @qfilter
2018/08/24 01:46:45
fromqfilter
toqfilter
amount4.247 STEEM
Transaction InfoBlock #25335359/Trx a8151f36cf0aad6c2ebceb443feda4c86228680c
View Raw JSON Data
{
  "trx_id": "a8151f36cf0aad6c2ebceb443feda4c86228680c",
  "block": 25335359,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-24T01:46:45",
  "op": [
    "transfer_to_vesting",
    {
      "from": "qfilter",
      "to": "qfilter",
      "amount": "4.247 STEEM"
    }
  ]
}
qfilterclaimed reward balance: 3.163 STEEM, 1.305 SBD, 5.158 SP
2018/08/24 01:46:06
accountqfilter
reward steem3.163 STEEM
reward sbd1.305 SBD
reward vests8399.398275 VESTS
Transaction InfoBlock #25335346/Trx 43b81d2c952cc1022659534209fb6cd37c32cd03
View Raw JSON Data
{
  "trx_id": "43b81d2c952cc1022659534209fb6cd37c32cd03",
  "block": 25335346,
  "trx_in_block": 8,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-24T01:46:06",
  "op": [
    "claim_reward_balance",
    {
      "account": "qfilter",
      "reward_steem": "3.163 STEEM",
      "reward_sbd": "1.305 SBD",
      "reward_vests": "8399.398275 VESTS"
    }
  ]
}
2018/08/24 01:42:39
parent author
parent permlinkgreenshift
authorqfilter
permlinkgreenshift-033-rebuilding-the-view
titleGreenshift 033: Rebuilding The View
bodySo last time, I lost my soul somewhere in a database deep in development hell. This time, hopefully we will have a working application. So, the goal for today is to rebuild our view. Once we get there, we can fix up anything else that isn't behaving correctly and then we can blaze a new trail closer to the end of Phase One. In the database, we were having trouble getting the title attribute. I found a bug where I was not getting the title correctly, but for some reason, I still wasn't quite getting the right results. So, I switched up to a code pattern that I used to store records from my old @qfilter bot: <center> ![Greenshift 33-1.png](https://cdn.steemitimages.com/DQmSXrDHsYGqnK11rPJEDQwJMHL765JJh3wj9ucRBBRfjjN/Greenshift%2033-1.png) </center> Here we do a similar thing, but instead perform a conditional statement rather than using a closure within a specialty Rails function. First, we check whether or not the permlink exists. If it does, we don't add it to the database since it is already there. If it isn't we create a new Post using the `create` function and build a new record using the collected parameters. Let's check our database, to make sure it worked: <center> ![Greenshift 33-4.png](https://cdn.steemitimages.com/DQmNtdPmEe7E8u2Gutrcs6skiZ3143SgJxXHwxNcBD41MKU/Greenshift%2033-4.png) </center> Well, we have four records, one of them being null. This means that we either have two relationships that have returned null, two relationships that return the same result, or something that has gone terribly wrong. If it is one of the first two options, then we are seeing the behavior we expect. So, probabilistically speaking, we're good! We also now have the `title` attribute in our database. Now that we have the title, we can now pass that information to the view to display to the end users of the application. But first, we need to manage the controller. If you paid careful attention in the code snippet above, you'll notice that we are passing the permlink back to the controller. The reason for passing the permlink back is that we can use it to reference our database and get the titles later. This means we don't have to bother with managing a heavy object higher in the MVC hierarchy. Here's how the controller looks now with the changes we have made: <center> ![Greenshift 33-2.png](https://cdn.steemitimages.com/DQmdvEyXymFgsB2wueytnFAhBnY4ev6uiMpDR4kJztPQZjh/Greenshift%2033-2.png) </center> You'll notice that we can simplify the `uniq!` function given that we pass a String instead of an object back. We also add another line of code where the `map!` function is used. With maps, we are able to iterate over an array and then apply some function to each element in the array. The exclamation point in functions is used to indicate that the function is a mutation. This type of operation changes the object it works on. So, we're basically mapping permlinks to Posts and changing the array in place such that all of the permlinks are now Posts. Cool, right? If, we list the titles in the view, we achieve my goal for the post: <center> ![Greenshift 33-3.png](https://cdn.steemitimages.com/DQmdMLNxESLGerQYsNwfjs8HXaGM1KraB4mbPAcehmatCrP/Greenshift%2033-3.png) </center> So at this point, we're basically at the same point we were (minus the hyperlinks) before we started this tangent. But now we have more flexibility to move forward. Next time, we'll quickly fix any bugs that I find and move onto displaying content to the interface after a user selects it.
json metadata{"tags":["greenshift","blog","development","rails","programming"],"users":["qfilter"],"image":["https://cdn.steemitimages.com/DQmSXrDHsYGqnK11rPJEDQwJMHL765JJh3wj9ucRBBRfjjN/Greenshift%2033-1.png","https://cdn.steemitimages.com/DQmNtdPmEe7E8u2Gutrcs6skiZ3143SgJxXHwxNcBD41MKU/Greenshift%2033-4.png","https://cdn.steemitimages.com/DQmdvEyXymFgsB2wueytnFAhBnY4ev6uiMpDR4kJztPQZjh/Greenshift%2033-2.png","https://cdn.steemitimages.com/DQmdMLNxESLGerQYsNwfjs8HXaGM1KraB4mbPAcehmatCrP/Greenshift%2033-3.png"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #25335277/Trx 0d6b83f6687cc71e26776d0b041c79a2bd2a12ad
View Raw JSON Data
{
  "trx_id": "0d6b83f6687cc71e26776d0b041c79a2bd2a12ad",
  "block": 25335277,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-24T01:42:39",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "greenshift",
      "author": "qfilter",
      "permlink": "greenshift-033-rebuilding-the-view",
      "title": "Greenshift 033: Rebuilding The View",
      "body": "So last time, I lost my soul somewhere in a database deep in development hell. This time, hopefully we will have a working application. So, the goal for today is to rebuild our view. Once we get there, we can fix up anything else that isn't behaving correctly and then we can blaze a new trail closer to the end of Phase One.\n\nIn the database, we were having trouble getting the title attribute. I found a bug where I was not getting the title correctly, but for some reason, I still wasn't quite getting the right results. So, I switched up to a code pattern that I used to store records from my old @qfilter bot:\n\n<center>\n![Greenshift 33-1.png](https://cdn.steemitimages.com/DQmSXrDHsYGqnK11rPJEDQwJMHL765JJh3wj9ucRBBRfjjN/Greenshift%2033-1.png)\n</center>\n\nHere we do a similar thing, but instead perform a conditional statement rather than using a closure within a specialty Rails function. First, we check whether or not the permlink exists. If it does, we don't add it to the database since it is already there. If it isn't we create a new Post using the `create` function and build a new record using the collected parameters. Let's check our database, to make sure it worked:\n\n<center>\n![Greenshift 33-4.png](https://cdn.steemitimages.com/DQmNtdPmEe7E8u2Gutrcs6skiZ3143SgJxXHwxNcBD41MKU/Greenshift%2033-4.png)\n</center>\n\nWell, we have four records, one of them being null. This means that we either have two relationships that have returned null, two relationships that return the same result, or something that has gone terribly wrong. If it is one of the first two options, then we are seeing the behavior we expect. So, probabilistically speaking, we're good! \n\nWe also now have the `title` attribute in our database. Now that we have the title, we can now pass that information to the view to display to the end users of the application. But first, we need to manage the controller. If you paid careful attention in the code snippet above, you'll notice that we are passing the permlink back to the controller.\n\nThe reason for passing the permlink back is that we can use it to reference our database and get the titles later. This means we don't have to bother with managing a heavy object higher in the MVC hierarchy. Here's how the controller looks now with the changes we have made:\n\n<center>\n![Greenshift 33-2.png](https://cdn.steemitimages.com/DQmdvEyXymFgsB2wueytnFAhBnY4ev6uiMpDR4kJztPQZjh/Greenshift%2033-2.png)\n</center>\n\nYou'll notice that we can simplify the `uniq!` function given that we pass a String instead of an object back. We also add another line of code where the `map!` function is used. With maps, we are able to iterate over an array and then apply some function to each element in the array. \n\nThe exclamation point in functions is used to indicate that the function is a mutation. This type of operation changes the object it works on. So, we're basically mapping permlinks to Posts and changing the array in place such that all of the permlinks are now Posts. Cool, right?\n\nIf, we list the titles in the view, we achieve my goal for the post:\n\n<center>\n![Greenshift 33-3.png](https://cdn.steemitimages.com/DQmdMLNxESLGerQYsNwfjs8HXaGM1KraB4mbPAcehmatCrP/Greenshift%2033-3.png)\n</center>\n\nSo at this point, we're basically at the same point we were (minus the hyperlinks) before we started this tangent. But now we have more flexibility to move forward. Next time, we'll quickly fix any bugs that I find and move onto displaying content to the interface after a user selects it.",
      "json_metadata": "{\"tags\":[\"greenshift\",\"blog\",\"development\",\"rails\",\"programming\"],\"users\":[\"qfilter\"],\"image\":[\"https://cdn.steemitimages.com/DQmSXrDHsYGqnK11rPJEDQwJMHL765JJh3wj9ucRBBRfjjN/Greenshift%2033-1.png\",\"https://cdn.steemitimages.com/DQmNtdPmEe7E8u2Gutrcs6skiZ3143SgJxXHwxNcBD41MKU/Greenshift%2033-4.png\",\"https://cdn.steemitimages.com/DQmdvEyXymFgsB2wueytnFAhBnY4ev6uiMpDR4kJztPQZjh/Greenshift%2033-2.png\",\"https://cdn.steemitimages.com/DQmdMLNxESLGerQYsNwfjs8HXaGM1KraB4mbPAcehmatCrP/Greenshift%2033-3.png\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2018/08/23 10:16:57
votercarn
authorqfilter
permlinkgreenshift-028-damn-technicalities
weight10000 (100.00%)
Transaction InfoBlock #25316780/Trx 3c164535fee0911900d817c7201275cd3838e910
View Raw JSON Data
{
  "trx_id": "3c164535fee0911900d817c7201275cd3838e910",
  "block": 25316780,
  "trx_in_block": 48,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-23T10:16:57",
  "op": [
    "vote",
    {
      "voter": "carn",
      "author": "qfilter",
      "permlink": "greenshift-028-damn-technicalities",
      "weight": 10000
    }
  ]
}
2018/08/23 10:14:00
votercarn
authorqfilter
permlinkgreenshift-029-decisions
weight10000 (100.00%)
Transaction InfoBlock #25316721/Trx 1b0ed8fabd26dd40bd4bef5f8331b6872fa327b5
View Raw JSON Data
{
  "trx_id": "1b0ed8fabd26dd40bd4bef5f8331b6872fa327b5",
  "block": 25316721,
  "trx_in_block": 15,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-23T10:14:00",
  "op": [
    "vote",
    {
      "voter": "carn",
      "author": "qfilter",
      "permlink": "greenshift-029-decisions",
      "weight": 10000
    }
  ]
}
2018/08/23 10:12:51
votercarn
authorqfilter
permlinkgreenshift-030-shifting-direction
weight10000 (100.00%)
Transaction InfoBlock #25316698/Trx 72099d39cc08375734e2e2fdb4a4f68d9fd29806
View Raw JSON Data
{
  "trx_id": "72099d39cc08375734e2e2fdb4a4f68d9fd29806",
  "block": 25316698,
  "trx_in_block": 49,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-23T10:12:51",
  "op": [
    "vote",
    {
      "voter": "carn",
      "author": "qfilter",
      "permlink": "greenshift-030-shifting-direction",
      "weight": 10000
    }
  ]
}
2018/08/23 10:11:33
votercarn
authorqfilter
permlinkgreenshift-031-explaining-data-flow
weight10000 (100.00%)
Transaction InfoBlock #25316672/Trx fc6fc67d743f0603c2295da6453daa77f195743d
View Raw JSON Data
{
  "trx_id": "fc6fc67d743f0603c2295da6453daa77f195743d",
  "block": 25316672,
  "trx_in_block": 21,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-23T10:11:33",
  "op": [
    "vote",
    {
      "voter": "carn",
      "author": "qfilter",
      "permlink": "greenshift-031-explaining-data-flow",
      "weight": 10000
    }
  ]
}
2018/08/23 10:09:06
votercarn
authorqfilter
permlinkgreenshift-032-messing-around-with-databases
weight10000 (100.00%)
Transaction InfoBlock #25316623/Trx 7d3e5cd55136dda1fb67834dbb9ba543eec36b9b
View Raw JSON Data
{
  "trx_id": "7d3e5cd55136dda1fb67834dbb9ba543eec36b9b",
  "block": 25316623,
  "trx_in_block": 17,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-23T10:09:06",
  "op": [
    "vote",
    {
      "voter": "carn",
      "author": "qfilter",
      "permlink": "greenshift-032-messing-around-with-databases",
      "weight": 10000
    }
  ]
}
2018/08/23 07:01:06
voterjacekw.dev
authorqfilter
permlinkgreenshift-031-explaining-data-flow
weight10000 (100.00%)
Transaction InfoBlock #25312865/Trx c69270722fe0740cea410612917d5aedf86df384
View Raw JSON Data
{
  "trx_id": "c69270722fe0740cea410612917d5aedf86df384",
  "block": 25312865,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-23T07:01:06",
  "op": [
    "vote",
    {
      "voter": "jacekw.dev",
      "author": "qfilter",
      "permlink": "greenshift-031-explaining-data-flow",
      "weight": 10000
    }
  ]
}
2018/08/23 07:00:39
voterjacekw.dev
authorqfilter
permlinkgreenshift-032-messing-around-with-databases
weight10000 (100.00%)
Transaction InfoBlock #25312856/Trx 214acc1abccffcea68ec52b802575098f20dfd34
View Raw JSON Data
{
  "trx_id": "214acc1abccffcea68ec52b802575098f20dfd34",
  "block": 25312856,
  "trx_in_block": 16,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-23T07:00:39",
  "op": [
    "vote",
    {
      "voter": "jacekw.dev",
      "author": "qfilter",
      "permlink": "greenshift-032-messing-around-with-databases",
      "weight": 10000
    }
  ]
}
2018/08/23 04:23:18
voteredicted
authorqfilter
permlinkgreenshift-032-messing-around-with-databases
weight10000 (100.00%)
Transaction InfoBlock #25309709/Trx f8376c8e1e15ae0e35b73e168feef0ddcd56f756
View Raw JSON Data
{
  "trx_id": "f8376c8e1e15ae0e35b73e168feef0ddcd56f756",
  "block": 25309709,
  "trx_in_block": 21,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-23T04:23:18",
  "op": [
    "vote",
    {
      "voter": "edicted",
      "author": "qfilter",
      "permlink": "greenshift-032-messing-around-with-databases",
      "weight": 10000
    }
  ]
}
2018/08/23 01:59:18
parent authorqfilter
parent permlinkgreenshift-032-messing-around-with-databases
authorsteemprojects
permlinkre-greenshift-032-messing-around-with-databases-20180823t015918
title
body This post has been just added as new item to _[timeline of Q-Filter on Steem Projects](https://steemprojects.com/projects/p/q-filter/?utm_source=comment_timeline&utm_medium=steem&utm_campaign=new_event&utm_content=c1)_. If you want to be notified about new updates from this project, register on Steem Projects and add Q-Filter to your favorite projects.
json metadata
Transaction InfoBlock #25306830/Trx d7b8d9bc619a89fdd8f75f61695b23a718a76bb3
View Raw JSON Data
{
  "trx_id": "d7b8d9bc619a89fdd8f75f61695b23a718a76bb3",
  "block": 25306830,
  "trx_in_block": 17,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-23T01:59:18",
  "op": [
    "comment",
    {
      "parent_author": "qfilter",
      "parent_permlink": "greenshift-032-messing-around-with-databases",
      "author": "steemprojects",
      "permlink": "re-greenshift-032-messing-around-with-databases-20180823t015918",
      "title": "",
      "body": "\nThis post has been just added as new item to _[timeline of Q-Filter on Steem Projects](https://steemprojects.com/projects/p/q-filter/?utm_source=comment_timeline&utm_medium=steem&utm_campaign=new_event&utm_content=c1)_.\n\nIf you want to be notified about new updates from this project, register on Steem Projects and add Q-Filter to your favorite projects.\n",
      "json_metadata": ""
    }
  ]
}
2018/08/23 01:57:06
voterhr1
authorqfilter
permlinkgreenshift-032-messing-around-with-databases
weight2 (0.02%)
Transaction InfoBlock #25306786/Trx 217ba1afc7c2833f382b6371840334f169f35bb0
View Raw JSON Data
{
  "trx_id": "217ba1afc7c2833f382b6371840334f169f35bb0",
  "block": 25306786,
  "trx_in_block": 25,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-23T01:57:06",
  "op": [
    "vote",
    {
      "voter": "hr1",
      "author": "qfilter",
      "permlink": "greenshift-032-messing-around-with-databases",
      "weight": 2
    }
  ]
}
qfilterreceived 0.050 STEEM, 0.062 SP author reward for @qfilter / greenshift-026-hyperlinks
2018/08/23 01:40:03
authorqfilter
permlinkgreenshift-026-hyperlinks
sbd payout0.000 SBD
steem payout0.050 STEEM
vesting payout101.218008 VESTS
Transaction InfoBlock #25306444/Virtual Operation #3
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 25306444,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 3,
  "timestamp": "2018-08-23T01:40:03",
  "op": [
    "author_reward",
    {
      "author": "qfilter",
      "permlink": "greenshift-026-hyperlinks",
      "sbd_payout": "0.000 SBD",
      "steem_payout": "0.050 STEEM",
      "vesting_payout": "101.218008 VESTS"
    }
  ]
}
2018/08/23 01:34:51
voteredmundocentenor
authorqfilter
permlinkgreenshift-032-messing-around-with-databases
weight10000 (100.00%)
Transaction InfoBlock #25306341/Trx df90e1e97ff76ae1a0c36de7462b34c453e19e96
View Raw JSON Data
{
  "trx_id": "df90e1e97ff76ae1a0c36de7462b34c453e19e96",
  "block": 25306341,
  "trx_in_block": 6,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-23T01:34:51",
  "op": [
    "vote",
    {
      "voter": "edmundocentenor",
      "author": "qfilter",
      "permlink": "greenshift-032-messing-around-with-databases",
      "weight": 10000
    }
  ]
}
2018/08/23 01:27:15
parent author
parent permlinkgreenshift
authorqfilter
permlinkgreenshift-032-messing-around-with-databases
titleGreenshift 032: Messing Around With Databases
bodySo last time we had a plan? Cool. Today we're going to mess around with some databases and get some results. But first, we need a way to view our database. I mean I'm not sure about you, but I'm not very fluent in raw SQLite3. Luckily there are programs we can use to view databases. I personally like SQLite Manager. It might not be the most aesthetic piece of code out there, but it gets the job done. Rails stores the development database in the db folder, so let's check out how things are doing so far in that file using SQLite Manager to visualize the data: <center> ![Greenshift 32-1.png](https://cdn.steemitimages.com/DQmdcN4KAPNDYrWYpX8GTAQ6t9wCfe1KhT9s2TcwPmcQVVg/Greenshift%2032-1.png) </center> First off, it's empty. Which is good because we haven't put anything in there yet. If something was in there I would be worried. But you will notice that the columns that we assigned via migration are there! Also included are the `id`, `created_at` and `updated_at` attributes. The first one serves as a unique id to differentiate the records and the last two are different timestamps on when the record was created and last updated respectively. So, let's fill that database. What do we have to work with right now? <center> ![Greenshift 32-2.png](https://cdn.steemitimages.com/DQmVQgDiWXj51Y4GjLhsuz2yiVXn8DvQPZPMPex6NuWP6Ab/Greenshift%2032-2.png) </center> So, it looks like we are creating an Post object that doesn't use the database and then returning that post. So, we're going to fix that by replacing this code with some spicy Rails code using stuff from the `ActiveRecord` library that allows us to treat database records in similar ways to objects: <center> ![Greenshift 32-3.png](https://cdn.steemitimages.com/DQmVL7E5XkEHcBZerHLzfMY2wCpPtgBqv7ehx4tdGsV89KS/Greenshift%2032-3.png) </center> So, we're going to the `find_or_create_by!` function which allows us to create a new record if one doesn't already exist within the database. This prevents us from storing duplicate entries within our database. We check if a post is already stored via using the permlink and then assign the author and title to the record if it doesn't exist. This code should store complete records if everything is working correctly and the relationship is valid. Let's check SQLiteManager to check out the results: <center> ![Greenshift 32-4.png](https://cdn.steemitimages.com/DQmU1jHa4TxDDRTij29CTeNzEJbme21ErK2MYTsRfcHMFsA/Greenshift%2032-4.png) </center> Well, good news, we now have something in our database. We have five records, one for each of our relationships. But now the bad news. While we are able to get the `permlink` and `title` attributes, for some reason, the title is not being initialized somewhere in the code. Thus, every record returns null for the `title` attribute. We also initialized a record that has null for everything. This is the result of the relationship not returning any results. Which means we have some debugging to do. But for now I say good night because I really could use some sleep right now.
json metadata{"tags":["greenshift","blog","development","databases","programming"],"image":["https://cdn.steemitimages.com/DQmdcN4KAPNDYrWYpX8GTAQ6t9wCfe1KhT9s2TcwPmcQVVg/Greenshift%2032-1.png","https://cdn.steemitimages.com/DQmVQgDiWXj51Y4GjLhsuz2yiVXn8DvQPZPMPex6NuWP6Ab/Greenshift%2032-2.png","https://cdn.steemitimages.com/DQmVL7E5XkEHcBZerHLzfMY2wCpPtgBqv7ehx4tdGsV89KS/Greenshift%2032-3.png","https://cdn.steemitimages.com/DQmU1jHa4TxDDRTij29CTeNzEJbme21ErK2MYTsRfcHMFsA/Greenshift%2032-4.png"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #25306189/Trx c048aad7c2caafe55ad1c2ad7465c90a13709c84
View Raw JSON Data
{
  "trx_id": "c048aad7c2caafe55ad1c2ad7465c90a13709c84",
  "block": 25306189,
  "trx_in_block": 13,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-23T01:27:15",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "greenshift",
      "author": "qfilter",
      "permlink": "greenshift-032-messing-around-with-databases",
      "title": "Greenshift 032: Messing Around With Databases",
      "body": "So last time we had a plan? Cool. Today we're going to mess around with some databases and get some results. But first, we need a way to view our database. I mean I'm not sure about you, but I'm not very fluent in raw SQLite3. Luckily there are programs we can use to view databases.\n\nI personally like SQLite Manager. It might not be the most aesthetic piece of code out there, but it gets the job done.  Rails stores the development database in the db folder, so let's check out how things are doing so far in that file using SQLite Manager to visualize the data:\n\n<center>\n![Greenshift 32-1.png](https://cdn.steemitimages.com/DQmdcN4KAPNDYrWYpX8GTAQ6t9wCfe1KhT9s2TcwPmcQVVg/Greenshift%2032-1.png)\n</center>\n\nFirst off, it's empty. Which is good because we haven't put anything in there yet. If something was in there I would be worried. But you will notice that the columns that we assigned via migration are there! Also included are the `id`, `created_at` and `updated_at` attributes. The first one serves as a unique id to differentiate the records and the last two are different timestamps on when the record was created and last updated respectively.\n\nSo, let's fill that database. What do we have to work with right now?\n\n<center>\n![Greenshift 32-2.png](https://cdn.steemitimages.com/DQmVQgDiWXj51Y4GjLhsuz2yiVXn8DvQPZPMPex6NuWP6Ab/Greenshift%2032-2.png)\n</center>\n\nSo, it looks like we are creating an Post object that doesn't use the database and then returning that post. So, we're going to fix that by replacing this code with some spicy Rails code using stuff from the `ActiveRecord` library that allows us to treat database records in similar ways to objects:\n\n<center>\n![Greenshift 32-3.png](https://cdn.steemitimages.com/DQmVL7E5XkEHcBZerHLzfMY2wCpPtgBqv7ehx4tdGsV89KS/Greenshift%2032-3.png)\n</center> \n\nSo, we're going to the `find_or_create_by!` function which allows us to create a new record if one doesn't already exist within the database. This prevents us from storing duplicate entries within our database. We check if a post is already stored via using the permlink and then assign the author and title to the record if it doesn't exist. This code should store complete records if everything is working correctly and the relationship is valid. \n\nLet's check SQLiteManager to check out the results:\n\n<center>\n![Greenshift 32-4.png](https://cdn.steemitimages.com/DQmU1jHa4TxDDRTij29CTeNzEJbme21ErK2MYTsRfcHMFsA/Greenshift%2032-4.png)\n</center>\n\nWell, good news, we now have something in our database. We have five records, one for each of our relationships. But now the bad news. While we are able to get the `permlink` and `title` attributes, for some reason, the title is not being initialized somewhere in the code. Thus, every record returns null for the `title` attribute. \n\nWe also initialized a record that has null for everything. This is the result of the relationship not returning any results. Which means we have some debugging to do. But for now I say good night because I really could use some sleep right now.",
      "json_metadata": "{\"tags\":[\"greenshift\",\"blog\",\"development\",\"databases\",\"programming\"],\"image\":[\"https://cdn.steemitimages.com/DQmdcN4KAPNDYrWYpX8GTAQ6t9wCfe1KhT9s2TcwPmcQVVg/Greenshift%2032-1.png\",\"https://cdn.steemitimages.com/DQmVQgDiWXj51Y4GjLhsuz2yiVXn8DvQPZPMPex6NuWP6Ab/Greenshift%2032-2.png\",\"https://cdn.steemitimages.com/DQmVL7E5XkEHcBZerHLzfMY2wCpPtgBqv7ehx4tdGsV89KS/Greenshift%2032-3.png\",\"https://cdn.steemitimages.com/DQmU1jHa4TxDDRTij29CTeNzEJbme21ErK2MYTsRfcHMFsA/Greenshift%2032-4.png\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2018/08/22 02:41:57
voteredicted
authorqfilter
permlinkgreenshift-031-explaining-data-flow
weight10000 (100.00%)
Transaction InfoBlock #25278891/Trx 202f68c0bafcaf7b4509d65bd9aeb9b03a177be8
View Raw JSON Data
{
  "trx_id": "202f68c0bafcaf7b4509d65bd9aeb9b03a177be8",
  "block": 25278891,
  "trx_in_block": 33,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-22T02:41:57",
  "op": [
    "vote",
    {
      "voter": "edicted",
      "author": "qfilter",
      "permlink": "greenshift-031-explaining-data-flow",
      "weight": 10000
    }
  ]
}
qfilterreceived 0.033 STEEM, 0.042 SP author reward for @qfilter / greenshift-025-moving-forward
2018/08/22 01:40:21
authorqfilter
permlinkgreenshift-025-moving-forward
sbd payout0.000 SBD
steem payout0.033 STEEM
vesting payout68.831958 VESTS
Transaction InfoBlock #25277658/Virtual Operation #4
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 25277658,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 4,
  "timestamp": "2018-08-22T01:40:21",
  "op": [
    "author_reward",
    {
      "author": "qfilter",
      "permlink": "greenshift-025-moving-forward",
      "sbd_payout": "0.000 SBD",
      "steem_payout": "0.033 STEEM",
      "vesting_payout": "68.831958 VESTS"
    }
  ]
}
2018/08/22 01:03:27
parent authorqfilter
parent permlinkgreenshift-031-explaining-data-flow
authorsteemprojects
permlinkre-greenshift-031-explaining-data-flow-20180822t010320
title
body This post has been just added as new item to _[timeline of Q-Filter on Steem Projects](https://steemprojects.com/projects/p/q-filter/?utm_source=comment_timeline&utm_medium=steem&utm_campaign=new_event&utm_content=c1)_. If you want to be notified about new updates from this project, register on Steem Projects and add Q-Filter to your favorite projects.
json metadata
Transaction InfoBlock #25276921/Trx 7085257e69c96d103d6dfe39fe8b9c580edcb49a
View Raw JSON Data
{
  "trx_id": "7085257e69c96d103d6dfe39fe8b9c580edcb49a",
  "block": 25276921,
  "trx_in_block": 32,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-22T01:03:27",
  "op": [
    "comment",
    {
      "parent_author": "qfilter",
      "parent_permlink": "greenshift-031-explaining-data-flow",
      "author": "steemprojects",
      "permlink": "re-greenshift-031-explaining-data-flow-20180822t010320",
      "title": "",
      "body": "\nThis post has been just added as new item to _[timeline of Q-Filter on Steem Projects](https://steemprojects.com/projects/p/q-filter/?utm_source=comment_timeline&utm_medium=steem&utm_campaign=new_event&utm_content=c1)_.\n\nIf you want to be notified about new updates from this project, register on Steem Projects and add Q-Filter to your favorite projects.\n",
      "json_metadata": ""
    }
  ]
}
2018/08/22 00:49:24
votertinoschloegl
authorqfilter
permlinkgreenshift-031-explaining-data-flow
weight500 (5.00%)
Transaction InfoBlock #25276640/Trx 2e943a481b14454a0213f2612928701f17fcf24a
View Raw JSON Data
{
  "trx_id": "2e943a481b14454a0213f2612928701f17fcf24a",
  "block": 25276640,
  "trx_in_block": 31,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-22T00:49:24",
  "op": [
    "vote",
    {
      "voter": "tinoschloegl",
      "author": "qfilter",
      "permlink": "greenshift-031-explaining-data-flow",
      "weight": 500
    }
  ]
}
2018/08/22 00:39:03
voterlegko
authorqfilter
permlinkgreenshift-031-explaining-data-flow
weight100 (1.00%)
Transaction InfoBlock #25276433/Trx 499e88cab2b83135cd089ba67e1964aff3ad7c23
View Raw JSON Data
{
  "trx_id": "499e88cab2b83135cd089ba67e1964aff3ad7c23",
  "block": 25276433,
  "trx_in_block": 10,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-22T00:39:03",
  "op": [
    "vote",
    {
      "voter": "legko",
      "author": "qfilter",
      "permlink": "greenshift-031-explaining-data-flow",
      "weight": 100
    }
  ]
}
2018/08/22 00:37:51
votercheneats
authorqfilter
permlinkgreenshift-031-explaining-data-flow
weight1500 (15.00%)
Transaction InfoBlock #25276409/Trx 5f848930495b9175dd60f52eec4b085f7b9db39c
View Raw JSON Data
{
  "trx_id": "5f848930495b9175dd60f52eec4b085f7b9db39c",
  "block": 25276409,
  "trx_in_block": 42,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-22T00:37:51",
  "op": [
    "vote",
    {
      "voter": "cheneats",
      "author": "qfilter",
      "permlink": "greenshift-031-explaining-data-flow",
      "weight": 1500
    }
  ]
}
2018/08/22 00:19:15
parent author
parent permlinkgreenshift
authorqfilter
permlinkgreenshift-031-explaining-data-flow
titleGreenshift 031: Explaining Data Flow
bodyNow that we are moving to using an intermediate database to help facilitate data flow and reduce dependence on the blockchain, it would be good to explore how exactly such a database would work. Last time, we created an updated Post model and defined a Posts database that would store the permlink and author of a post. Both of those things are required to query the blockchain for more information about the post. So, with this new database, while developing our relationships, we would eventually find permlinks and authors of different posts where we would store that piece of content as a record in our new database. Then, we would return the permlink which we would then use to do two things: 1. Reference the record stored in the database 2. Be used along with the author (via 1) to query the blockchain So, in our view, we could then use our new database to query the blockchain to get the title and display that on the screen. Then after selecting a post, we could query the blockchain a second time to get the body of a post and display it on the screen. This is now possible since the Post is now a formal resource and now we can pass around its information around the controller effectively. But we're still querying a lot. Since we don't need a lot of information for displaying the posts, why don't we add the title to the database? This means that we'll only have to query the blockchain once rather than up to six times for each of the relationships that we have. Sure, we still have to query a lot in the relationships, but this improves efficiency for the moment and eventually we can take a look and making those relationships more efficient. So in order to add another attribute to the Posts model, we need to generate another migration in order to apply to our schema which defines our database. Last time, we generated an entire model, but this time, we'll simply use the `generation` function to add another attribute. This effectively adds another column named `title` to our database: <center> ![Greenshift 31-1.png](https://cdn.steemitimages.com/DQmaAqPUbhrUZFJ2THTJjYmVe4E5UjMQmfio6yxTScASTCQ/Greenshift%2031-1.png) </center> Great, we now have an updated database description. Well not exactly. While we have defined changes to our database, we haven't exactly applied them to the database yet. We actually have to run a `migrate` job in order to update our schema which I unfortunately forgot last time. But since we just added another migration, now is a great time to update the schema before we add data to it: <center> ![Greenshift 31-2.png](https://cdn.steemitimages.com/DQmbfdFkXQivafqSxSsjZ8WAbjifJLhCLSSfpKJHHdkR7sr/Greenshift%2031-2.png) </center> So, now we have a gameplan. We need to begin storing these references so we can lessen the amount of times we call the blockchain. Next time, we'll add our first posts into our database and refactor our old code to reflect this updated method of data flow and storage.
json metadata{"tags":["greenshift","blog","development","databases","programming"],"image":["https://cdn.steemitimages.com/DQmaAqPUbhrUZFJ2THTJjYmVe4E5UjMQmfio6yxTScASTCQ/Greenshift%2031-1.png","https://cdn.steemitimages.com/DQmbfdFkXQivafqSxSsjZ8WAbjifJLhCLSSfpKJHHdkR7sr/Greenshift%2031-2.png"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #25276037/Trx 3cd187e5d5b1b81f28b4de380024ef1a2b1b121d
View Raw JSON Data
{
  "trx_id": "3cd187e5d5b1b81f28b4de380024ef1a2b1b121d",
  "block": 25276037,
  "trx_in_block": 19,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-22T00:19:15",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "greenshift",
      "author": "qfilter",
      "permlink": "greenshift-031-explaining-data-flow",
      "title": "Greenshift 031: Explaining Data Flow",
      "body": "Now that we are moving to using an intermediate database to help facilitate data flow and reduce dependence on the blockchain, it would be good to explore how exactly such a database would work. Last time, we created an updated Post model and defined a Posts database that would store the permlink and author of a post. Both of those things are required to query the blockchain for more information about the post. \n\nSo, with this new database, while developing our relationships, we would eventually find permlinks and authors of different posts where we would store that piece of content as a record in our new database. Then, we would return the permlink which we would then use to do two things:\n\n1. Reference the record stored in the database \n2. Be used along with the author (via 1) to query the blockchain\n\nSo, in our view, we could then use our new database to query the blockchain to get the title and display that on the screen. Then after selecting a post, we could query the blockchain a second time to get the body of a post and display it on the screen. This is now possible since the Post is now a formal resource and now we can pass around its information around the controller effectively.\n\nBut we're still querying a lot. Since we don't need a lot of information for displaying the posts, why don't we add the title to the database? This means that we'll only have to query the blockchain once rather than up to six times for each of the relationships that we have. Sure, we still have to query a lot in the relationships, but this improves efficiency for the moment and eventually we can take a look and making those relationships more efficient.\n\nSo in order to add another attribute to the Posts model, we need to generate another migration in order to apply to our schema which defines our database. Last time, we generated an entire model, but this time, we'll simply use the `generation` function to add another attribute. This effectively adds another column named `title` to our database:\n\n<center>\n![Greenshift 31-1.png](https://cdn.steemitimages.com/DQmaAqPUbhrUZFJ2THTJjYmVe4E5UjMQmfio6yxTScASTCQ/Greenshift%2031-1.png)\n</center>\n\nGreat, we now have an updated database description. Well not exactly. While we have defined changes to our database, we haven't exactly applied them to the database yet. We actually have to run a `migrate` job in order to update our schema which I unfortunately forgot last time. But since we just added another migration, now is a great time to update the schema before we add data to it:\n\n<center>\n![Greenshift 31-2.png](https://cdn.steemitimages.com/DQmbfdFkXQivafqSxSsjZ8WAbjifJLhCLSSfpKJHHdkR7sr/Greenshift%2031-2.png)\n</center>\n\nSo, now we have a gameplan. We need to begin storing these references so we can lessen the amount of times we call the blockchain. Next time, we'll add our first posts into our database and refactor our old code to reflect this updated method of data flow and storage.",
      "json_metadata": "{\"tags\":[\"greenshift\",\"blog\",\"development\",\"databases\",\"programming\"],\"image\":[\"https://cdn.steemitimages.com/DQmaAqPUbhrUZFJ2THTJjYmVe4E5UjMQmfio6yxTScASTCQ/Greenshift%2031-1.png\",\"https://cdn.steemitimages.com/DQmbfdFkXQivafqSxSsjZ8WAbjifJLhCLSSfpKJHHdkR7sr/Greenshift%2031-2.png\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2018/08/21 22:46:03
voterjacekw.dev
authorqfilter
permlinkgreenshift-029-decisions
weight10000 (100.00%)
Transaction InfoBlock #25274173/Trx df3e019e2c797f4bbf4146740dee80185ff7f12f
View Raw JSON Data
{
  "trx_id": "df3e019e2c797f4bbf4146740dee80185ff7f12f",
  "block": 25274173,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-21T22:46:03",
  "op": [
    "vote",
    {
      "voter": "jacekw.dev",
      "author": "qfilter",
      "permlink": "greenshift-029-decisions",
      "weight": 10000
    }
  ]
}

Account Metadata

POSTING JSON METADATA
profile{"about":"An experimental Steem filter","location":"the internet","website":"http://qfilter.herokuapp.com/"}
JSON METADATA
profile{"about":"An experimental Steem filter","location":"the internet","website":"http://qfilter.herokuapp.com/"}
{
  "posting_json_metadata": {
    "profile": {
      "about": "An experimental Steem filter",
      "location": "the internet",
      "website": "http://qfilter.herokuapp.com/"
    }
  },
  "json_metadata": {
    "profile": {
      "about": "An experimental Steem filter",
      "location": "the internet",
      "website": "http://qfilter.herokuapp.com/"
    }
  }
}

Auth Keys

Owner
Single Signature
Public Keys
STM6sK4ZvmguGDk3fXBY8e1n3iqwLuTdufoQ2KrVUjxLHDxZ8kyWA1/1
Active
Single Signature
Public Keys
STM8KuGM6op9ZXsYZ4rzWaNNXBApcxPoaunsYHU9tG9v3rafGrbiS1/1
Posting
Single Signature
Public Keys
STM8J45fh49vc4bwpUawSsNCrFBXEYq4e8vp5X2pJXNxZZmKus2x21/1
Memo
STM4ycdLF3jGK697dEpFekiag9RcuacaDUTi5NrGu8QY1gnEzKbo2
{
  "owner": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM6sK4ZvmguGDk3fXBY8e1n3iqwLuTdufoQ2KrVUjxLHDxZ8kyWA",
        1
      ]
    ]
  },
  "active": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM8KuGM6op9ZXsYZ4rzWaNNXBApcxPoaunsYHU9tG9v3rafGrbiS",
        1
      ]
    ]
  },
  "posting": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM8J45fh49vc4bwpUawSsNCrFBXEYq4e8vp5X2pJXNxZZmKus2x2",
        1
      ]
    ]
  },
  "memo": "STM4ycdLF3jGK697dEpFekiag9RcuacaDUTi5NrGu8QY1gnEzKbo2"
}

Witness Votes

0 / 30
No active witness votes.
[]