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 | STEEM |
| market_balance | 0.000STEEM | STEEM |
| savings_balance | 0.000STEEM | STEEM |
| reward_steem_balance | 0.000STEEM | STEEM |
| STEEM POWER | ||
| Own SP | 56.239SP | SP |
| Delegated Out | 0.000SP | SP |
| Delegation In | 0.000SP | SP |
| Effective Power | 56.239SP | SP |
| Reward SP (pending) | 0.000SP | SP |
| SBD | ||
| sbd_balance | 0.000SBD | SBD |
| sbd_conversions | 0.000SBD | SBD |
| sbd_market_balance | 0.000SBD | SBD |
| savings_sbd_balance | 0.000SBD | SBD |
| reward_sbd_balance | 0.000SBD | SBD |
{
"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
| name | qfilter |
| id | 482194 |
| rank | 31,862 |
| reputation | 391282423676 |
| created | 2017-12-07T22:10:12 |
| recovery_account | greer184 |
| proxy | None |
| post_count | 53 |
| comment_count | 0 |
| lifetime_vote_count | 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 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 0 |
| delayed_votes | 0 |
| balance | 0.000 STEEM |
| savings_balance | 0.000 STEEM |
| sbd_balance | 0.000 SBD |
| savings_sbd_balance | 0.000 SBD |
| vesting_shares | 91578.121125 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 0.000000 VESTS |
| reward_vesting_balance | 0.000000 VESTS |
| vesting_balance | 0.000 STEEM |
| vesting_withdraw_rate | 0.000000 VESTS |
| next_vesting_withdrawal | 1969-12-31T23:59:59 |
| withdrawn | 0 |
| to_withdraw | 0 |
| withdraw_routes | 0 |
| savings_withdraw_requests | 0 |
| last_account_recovery | 1970-01-01T00:00:00 |
| reset_account | null |
| last_owner_update | 2017-12-08T19:06:42 |
| last_account_update | 2017-12-10T04:44:21 |
| mined | No |
| sbd_seconds | 267,579 |
| sbd_last_interest_payment | 2019-03-30T19:16:21 |
| savings_sbd_last_interest_payment | 1970-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
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
chencreplied to @qfilter / re-an-experimental-steem-content-filter2020/01/12 08:25:21
chencreplied to @qfilter / re-an-experimental-steem-content-filter
2020/01/12 08:25:21
| 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 | {} |
| Transaction Info | Block #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
2019/12/07 23:08:27
| 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! <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 Info | Block #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\"]}"
}
]
}2019/03/30 19:17:24
2019/03/30 19:17:24
| from | qfilter |
| to | qfilter |
| amount | 15.764 STEEM |
| Transaction Info | Block #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 create2019/03/30 19:17:00
qfilterblockchain operation: limit order create
2019/03/30 19:17:00
| 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 |
| Transaction Info | Block #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"
}
]
}2019/03/30 19:17:00
2019/03/30 19:17:00
| current owner | qfilter |
| current orderid | 1553973402 |
| current pays | 6.861 SBD |
| open owner | oscarps |
| open orderid | 1553973018 |
| open pays | 15.331 STEEM |
| Transaction Info | Block #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 SP2019/03/30 19:16:21
qfilterclaimed reward balance: 0.384 STEEM, 0.482 SP
2019/03/30 19:16:21
| account | qfilter |
| reward steem | 0.384 STEEM |
| reward sbd | 0.000 SBD |
| reward vests | 785.119126 VESTS |
| Transaction Info | Block #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"
}
]
}2018/12/18 18:27:54
2018/12/18 18:27:54
| 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 |
| Transaction Info | Block #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
2018/12/07 23:12:51
| 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! <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 Info | Block #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\"]}"
}
]
}ofirareplied to @qfilter / re-an-experimental-steem-content-filter2018/11/06 07:52:42
ofirareplied to @qfilter / re-an-experimental-steem-content-filter
2018/11/06 07:52:42
| 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 | {} |
| Transaction Info | Block #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-cache2018/09/07 02:20:12
qfilterreceived 0.015 STEEM, 0.019 SP author reward for @qfilter / greenshift-037-developing-a-network-cache
2018/09/07 02:20:12
| author | qfilter |
| permlink | greenshift-037-developing-a-network-cache |
| sbd payout | 0.000 SBD |
| steem payout | 0.015 STEEM |
| vesting payout | 30.340963 VESTS |
| Transaction Info | Block #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-happens2018/09/04 01:53:21
qfilterreceived 0.021 STEEM, 0.027 SP author reward for @qfilter / greenshift-036-where-the-magic-happens
2018/09/04 01:53:21
| author | qfilter |
| permlink | greenshift-036-where-the-magic-happens |
| sbd payout | 0.000 SBD |
| steem payout | 0.021 STEEM |
| vesting payout | 44.507228 VESTS |
| Transaction Info | Block #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-carpet2018/09/03 00:57:33
qfilterreceived 0.049 STEEM, 0.062 SP author reward for @qfilter / greenshift-035-rolling-out-the-red-carpet
2018/09/03 00:57:33
| 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 |
| Transaction Info | Block #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-content2018/09/02 01:58:27
qfilterreceived 0.031 STEEM, 0.040 SP author reward for @qfilter / greenshift-034-getting-actual-content
2018/09/02 01:58:27
| author | qfilter |
| permlink | greenshift-034-getting-actual-content |
| sbd payout | 0.000 SBD |
| steem payout | 0.031 STEEM |
| vesting payout | 64.744672 VESTS |
| Transaction Info | Block #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"
}
]
}teknomunkupvoted (100.00%) @qfilter / greenshift-037-developing-a-network-cache2018/09/01 15:59:30
teknomunkupvoted (100.00%) @qfilter / greenshift-037-developing-a-network-cache
2018/09/01 15:59:30
| voter | teknomunk |
| author | qfilter |
| permlink | greenshift-037-developing-a-network-cache |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}
]
}jacekw.devupvoted (100.00%) @qfilter / greenshift-037-developing-a-network-cache2018/08/31 19:20:30
jacekw.devupvoted (100.00%) @qfilter / greenshift-037-developing-a-network-cache
2018/08/31 19:20:30
| voter | jacekw.dev |
| author | qfilter |
| permlink | greenshift-037-developing-a-network-cache |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
2018/08/31 04:52:51
| 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 ;) Good luck! |
| json metadata | {"tags":["greenshift"],"community":"steempeak","app":"steempeak"} |
| Transaction Info | Block #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\"}"
}
]
}carnupvoted (100.00%) @qfilter / greenshift-037-developing-a-network-cache2018/08/31 04:49:33
carnupvoted (100.00%) @qfilter / greenshift-037-developing-a-network-cache
2018/08/31 04:49:33
| voter | carn |
| author | qfilter |
| permlink | greenshift-037-developing-a-network-cache |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
2018/08/31 02:54:57
| parent author | qfilter |
| parent permlink | greenshift-037-developing-a-network-cache |
| author | steemprojects |
| permlink | re-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 Info | Block #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": ""
}
]
}edictedupvoted (21.00%) @qfilter / greenshift-037-developing-a-network-cache2018/08/31 02:34:33
edictedupvoted (21.00%) @qfilter / greenshift-037-developing-a-network-cache
2018/08/31 02:34:33
| voter | edicted |
| author | qfilter |
| permlink | greenshift-037-developing-a-network-cache |
| weight | 2100 (21.00%) |
| Transaction Info | Block #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
}
]
}ilovecodingreplied to @qfilter / 20180831t022027419z2018/08/31 02:20:27
ilovecodingreplied to @qfilter / 20180831t022027419z
2018/08/31 02:20:27
| 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!  |
| json metadata | {"tags":["ilovecoding"],"app":"ilovecoding"} |
| Transaction Info | Block #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 ",
"json_metadata": "{\"tags\":[\"ilovecoding\"],\"app\":\"ilovecoding\"}"
}
]
}ilovecodingupvoted (5.00%) @qfilter / greenshift-037-developing-a-network-cache2018/08/31 02:20:24
ilovecodingupvoted (5.00%) @qfilter / greenshift-037-developing-a-network-cache
2018/08/31 02:20:24
| voter | ilovecoding |
| author | qfilter |
| permlink | greenshift-037-developing-a-network-cache |
| weight | 500 (5.00%) |
| Transaction Info | Block #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
}
]
}qfilterpublished a new post: greenshift-037-developing-a-network-cache2018/08/31 02:20:12
qfilterpublished a new post: greenshift-037-developing-a-network-cache
2018/08/31 02:20:12
| 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. 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 Info | Block #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-view2018/08/31 01:42:39
qfilterreceived 0.048 STEEM, 0.061 SP author reward for @qfilter / greenshift-033-rebuilding-the-view
2018/08/31 01:42:39
| author | qfilter |
| permlink | greenshift-033-rebuilding-the-view |
| sbd payout | 0.000 SBD |
| steem payout | 0.048 STEEM |
| vesting payout | 99.150944 VESTS |
| Transaction Info | Block #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-databases2018/08/30 01:27:15
qfilterreceived 0.080 STEEM, 0.099 SP author reward for @qfilter / greenshift-032-messing-around-with-databases
2018/08/30 01:27:15
| author | qfilter |
| permlink | greenshift-032-messing-around-with-databases |
| sbd payout | 0.000 SBD |
| steem payout | 0.080 STEEM |
| vesting payout | 161.887848 VESTS |
| Transaction Info | Block #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"
}
]
}carnupvoted (100.00%) @qfilter / greenshift-035-rolling-out-the-red-carpet2018/08/29 19:00:09
carnupvoted (100.00%) @qfilter / greenshift-035-rolling-out-the-red-carpet
2018/08/29 19:00:09
| voter | carn |
| author | qfilter |
| permlink | greenshift-035-rolling-out-the-red-carpet |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}
]
}carnupvoted (100.00%) @qfilter / greenshift-036-where-the-magic-happens2018/08/29 18:58:09
carnupvoted (100.00%) @qfilter / greenshift-036-where-the-magic-happens
2018/08/29 18:58:09
| voter | carn |
| author | qfilter |
| permlink | greenshift-036-where-the-magic-happens |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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-flow2018/08/29 00:19:15
qfilterreceived 0.049 STEEM, 0.061 SP author reward for @qfilter / greenshift-031-explaining-data-flow
2018/08/29 00:19:15
| author | qfilter |
| permlink | greenshift-031-explaining-data-flow |
| sbd payout | 0.000 SBD |
| steem payout | 0.049 STEEM |
| vesting payout | 99.161874 VESTS |
| Transaction Info | Block #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"
}
]
}edictedupvoted (42.00%) @qfilter / greenshift-036-where-the-magic-happens2018/08/28 20:20:42
edictedupvoted (42.00%) @qfilter / greenshift-036-where-the-magic-happens
2018/08/28 20:20:42
| voter | edicted |
| author | qfilter |
| permlink | greenshift-036-where-the-magic-happens |
| weight | 4200 (42.00%) |
| Transaction Info | Block #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
2018/08/28 03:02:33
| parent author | qfilter |
| parent permlink | greenshift-036-where-the-magic-happens |
| author | steemprojects |
| permlink | re-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 Info | Block #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": ""
}
]
}qfilterpublished a new post: greenshift-036-where-the-magic-happens2018/08/28 01:53:21
qfilterpublished a new post: greenshift-036-where-the-magic-happens
2018/08/28 01:53:21
| 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. 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>  </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>  </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>  </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>  </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>  </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 Info | Block #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\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\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\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\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\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-direction2018/08/28 01:25:33
qfilterreceived 0.091 STEEM, 0.113 SP author reward for @qfilter / greenshift-030-shifting-direction
2018/08/28 01:25:33
| author | qfilter |
| permlink | greenshift-030-shifting-direction |
| sbd payout | 0.000 SBD |
| steem payout | 0.091 STEEM |
| vesting payout | 184.167217 VESTS |
| Transaction Info | Block #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"
}
]
}limesodaupvoted (9.00%) @qfilter / greenshift-035-rolling-out-the-red-carpet2018/08/27 06:12:15
limesodaupvoted (9.00%) @qfilter / greenshift-035-rolling-out-the-red-carpet
2018/08/27 06:12:15
| voter | limesoda |
| author | qfilter |
| permlink | greenshift-035-rolling-out-the-red-carpet |
| weight | 900 (9.00%) |
| Transaction Info | Block #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
2018/08/27 01:50:57
| 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 | 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 Info | Block #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": ""
}
]
}tinoschloeglupvoted (5.00%) @qfilter / greenshift-035-rolling-out-the-red-carpet2018/08/27 01:27:42
tinoschloeglupvoted (5.00%) @qfilter / greenshift-035-rolling-out-the-red-carpet
2018/08/27 01:27:42
| voter | tinoschloegl |
| author | qfilter |
| permlink | greenshift-035-rolling-out-the-red-carpet |
| weight | 500 (5.00%) |
| Transaction Info | Block #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
}
]
}youngogmarqsupvoted (0.02%) @qfilter / greenshift-035-rolling-out-the-red-carpet2018/08/27 01:22:39
youngogmarqsupvoted (0.02%) @qfilter / greenshift-035-rolling-out-the-red-carpet
2018/08/27 01:22:39
| voter | youngogmarqs |
| author | qfilter |
| permlink | greenshift-035-rolling-out-the-red-carpet |
| weight | 2 (0.02%) |
| Transaction Info | Block #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
}
]
}edictedupvoted (66.00%) @qfilter / greenshift-035-rolling-out-the-red-carpet2018/08/27 01:22:06
edictedupvoted (66.00%) @qfilter / greenshift-035-rolling-out-the-red-carpet
2018/08/27 01:22:06
| voter | edicted |
| author | qfilter |
| permlink | greenshift-035-rolling-out-the-red-carpet |
| weight | 6600 (66.00%) |
| Transaction Info | Block #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 SP2018/08/27 00:58:30
qfilterclaimed reward balance: 0.048 STEEM, 0.060 SP
2018/08/27 00:58:30
| account | qfilter |
| reward steem | 0.048 STEEM |
| reward sbd | 0.000 SBD |
| reward vests | 97.153863 VESTS |
| Transaction Info | Block #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"
}
]
}qfilterpublished a new post: greenshift-035-rolling-out-the-red-carpet2018/08/27 00:57:33
qfilterpublished a new post: greenshift-035-rolling-out-the-red-carpet
2018/08/27 00:57:33
| 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. 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>  </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>  </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>  </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 Info | Block #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\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\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\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\"}"
}
]
}carnupvoted (100.00%) @qfilter / greenshift-034-getting-actual-content2018/08/26 20:44:30
carnupvoted (100.00%) @qfilter / greenshift-034-getting-actual-content
2018/08/26 20:44:30
| voter | carn |
| author | qfilter |
| permlink | greenshift-034-getting-actual-content |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}
]
}edictedupvoted (52.00%) @qfilter / greenshift-034-getting-actual-content2018/08/26 18:39:24
edictedupvoted (52.00%) @qfilter / greenshift-034-getting-actual-content
2018/08/26 18:39:24
| voter | edicted |
| author | qfilter |
| permlink | greenshift-034-getting-actual-content |
| weight | 5200 (52.00%) |
| Transaction Info | Block #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
}
]
}jacekw.devupvoted (100.00%) @qfilter / greenshift-034-getting-actual-content2018/08/26 07:50:03
jacekw.devupvoted (100.00%) @qfilter / greenshift-034-getting-actual-content
2018/08/26 07:50:03
| voter | jacekw.dev |
| author | qfilter |
| permlink | greenshift-034-getting-actual-content |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}
]
}tomiscuriousupvoted (5.00%) @qfilter / greenshift-034-getting-actual-content2018/08/26 02:32:21
tomiscuriousupvoted (5.00%) @qfilter / greenshift-034-getting-actual-content
2018/08/26 02:32:21
| voter | tomiscurious |
| author | qfilter |
| permlink | greenshift-034-getting-actual-content |
| weight | 500 (5.00%) |
| Transaction Info | Block #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
}
]
}tinoschloeglupvoted (5.00%) @qfilter / greenshift-034-getting-actual-content2018/08/26 02:28:36
tinoschloeglupvoted (5.00%) @qfilter / greenshift-034-getting-actual-content
2018/08/26 02:28:36
| voter | tinoschloegl |
| author | qfilter |
| permlink | greenshift-034-getting-actual-content |
| weight | 500 (5.00%) |
| Transaction Info | Block #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
}
]
}lordofrewardupvoted (0.75%) @qfilter / greenshift-034-getting-actual-content2018/08/26 02:26:03
lordofrewardupvoted (0.75%) @qfilter / greenshift-034-getting-actual-content
2018/08/26 02:26:03
| voter | lordofreward |
| author | qfilter |
| permlink | greenshift-034-getting-actual-content |
| weight | 75 (0.75%) |
| Transaction Info | Block #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
2018/08/26 02:00:54
| parent author | qfilter |
| parent permlink | greenshift-034-getting-actual-content |
| author | steemprojects |
| permlink | re-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 Info | Block #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": ""
}
]
}qfilterpublished a new post: greenshift-034-getting-actual-content2018/08/26 01:58:27
qfilterpublished a new post: greenshift-034-getting-actual-content
2018/08/26 01:58:27
| 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. 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>  </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>  </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>  </center> Our hyperlinks are back, but now they lead to the new web page that I created rather than going to Steemit.com: <center>  </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>  </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 Info | Block #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\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\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\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\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\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-technicalities2018/08/26 00:16:33
qfilterreceived 0.048 STEEM, 0.060 SP author reward for @qfilter / greenshift-028-damn-technicalities
2018/08/26 00:16:33
| author | qfilter |
| permlink | greenshift-028-damn-technicalities |
| sbd payout | 0.000 SBD |
| steem payout | 0.048 STEEM |
| vesting payout | 97.153863 VESTS |
| Transaction Info | Block #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"
}
]
}carnupvoted (100.00%) @qfilter / greenshift-033-rebuilding-the-view2018/08/24 11:21:21
carnupvoted (100.00%) @qfilter / greenshift-033-rebuilding-the-view
2018/08/24 11:21:21
| voter | carn |
| author | qfilter |
| permlink | greenshift-033-rebuilding-the-view |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}
]
}edictedupvoted (100.00%) @qfilter / greenshift-033-rebuilding-the-view2018/08/24 04:13:39
edictedupvoted (100.00%) @qfilter / greenshift-033-rebuilding-the-view
2018/08/24 04:13:39
| voter | edicted |
| author | qfilter |
| permlink | greenshift-033-rebuilding-the-view |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}
]
}lordofrewardupvoted (0.75%) @qfilter / greenshift-033-rebuilding-the-view2018/08/24 02:10:03
lordofrewardupvoted (0.75%) @qfilter / greenshift-033-rebuilding-the-view
2018/08/24 02:10:03
| voter | lordofreward |
| author | qfilter |
| permlink | greenshift-033-rebuilding-the-view |
| weight | 75 (0.75%) |
| Transaction Info | Block #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
2018/08/24 01:47:54
| parent author | qfilter |
| parent permlink | greenshift-033-rebuilding-the-view |
| author | steemprojects |
| permlink | re-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 Info | Block #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": ""
}
]
}2018/08/24 01:46:45
2018/08/24 01:46:45
| from | qfilter |
| to | qfilter |
| amount | 4.247 STEEM |
| Transaction Info | Block #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 SP2018/08/24 01:46:06
qfilterclaimed reward balance: 3.163 STEEM, 1.305 SBD, 5.158 SP
2018/08/24 01:46:06
| account | qfilter |
| reward steem | 3.163 STEEM |
| reward sbd | 1.305 SBD |
| reward vests | 8399.398275 VESTS |
| Transaction Info | Block #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"
}
]
}qfilterpublished a new post: greenshift-033-rebuilding-the-view2018/08/24 01:42:39
qfilterpublished a new post: greenshift-033-rebuilding-the-view
2018/08/24 01:42:39
| 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. 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>  </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>  </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>  </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>  </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 Info | Block #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\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\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\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\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\"}"
}
]
}carnupvoted (100.00%) @qfilter / greenshift-028-damn-technicalities2018/08/23 10:16:57
carnupvoted (100.00%) @qfilter / greenshift-028-damn-technicalities
2018/08/23 10:16:57
| voter | carn |
| author | qfilter |
| permlink | greenshift-028-damn-technicalities |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}
]
}carnupvoted (100.00%) @qfilter / greenshift-029-decisions2018/08/23 10:14:00
carnupvoted (100.00%) @qfilter / greenshift-029-decisions
2018/08/23 10:14:00
| voter | carn |
| author | qfilter |
| permlink | greenshift-029-decisions |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}
]
}carnupvoted (100.00%) @qfilter / greenshift-030-shifting-direction2018/08/23 10:12:51
carnupvoted (100.00%) @qfilter / greenshift-030-shifting-direction
2018/08/23 10:12:51
| voter | carn |
| author | qfilter |
| permlink | greenshift-030-shifting-direction |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}
]
}carnupvoted (100.00%) @qfilter / greenshift-031-explaining-data-flow2018/08/23 10:11:33
carnupvoted (100.00%) @qfilter / greenshift-031-explaining-data-flow
2018/08/23 10:11:33
| voter | carn |
| author | qfilter |
| permlink | greenshift-031-explaining-data-flow |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}
]
}carnupvoted (100.00%) @qfilter / greenshift-032-messing-around-with-databases2018/08/23 10:09:06
carnupvoted (100.00%) @qfilter / greenshift-032-messing-around-with-databases
2018/08/23 10:09:06
| voter | carn |
| author | qfilter |
| permlink | greenshift-032-messing-around-with-databases |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}
]
}jacekw.devupvoted (100.00%) @qfilter / greenshift-031-explaining-data-flow2018/08/23 07:01:06
jacekw.devupvoted (100.00%) @qfilter / greenshift-031-explaining-data-flow
2018/08/23 07:01:06
| voter | jacekw.dev |
| author | qfilter |
| permlink | greenshift-031-explaining-data-flow |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}
]
}jacekw.devupvoted (100.00%) @qfilter / greenshift-032-messing-around-with-databases2018/08/23 07:00:39
jacekw.devupvoted (100.00%) @qfilter / greenshift-032-messing-around-with-databases
2018/08/23 07:00:39
| voter | jacekw.dev |
| author | qfilter |
| permlink | greenshift-032-messing-around-with-databases |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}
]
}edictedupvoted (100.00%) @qfilter / greenshift-032-messing-around-with-databases2018/08/23 04:23:18
edictedupvoted (100.00%) @qfilter / greenshift-032-messing-around-with-databases
2018/08/23 04:23:18
| voter | edicted |
| author | qfilter |
| permlink | greenshift-032-messing-around-with-databases |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
2018/08/23 01:59:18
| parent author | qfilter |
| parent permlink | greenshift-032-messing-around-with-databases |
| author | steemprojects |
| permlink | re-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 Info | Block #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": ""
}
]
}hr1upvoted (0.02%) @qfilter / greenshift-032-messing-around-with-databases2018/08/23 01:57:06
hr1upvoted (0.02%) @qfilter / greenshift-032-messing-around-with-databases
2018/08/23 01:57:06
| voter | hr1 |
| author | qfilter |
| permlink | greenshift-032-messing-around-with-databases |
| weight | 2 (0.02%) |
| Transaction Info | Block #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-hyperlinks2018/08/23 01:40:03
qfilterreceived 0.050 STEEM, 0.062 SP author reward for @qfilter / greenshift-026-hyperlinks
2018/08/23 01:40:03
| author | qfilter |
| permlink | greenshift-026-hyperlinks |
| sbd payout | 0.000 SBD |
| steem payout | 0.050 STEEM |
| vesting payout | 101.218008 VESTS |
| Transaction Info | Block #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"
}
]
}edmundocentenorupvoted (100.00%) @qfilter / greenshift-032-messing-around-with-databases2018/08/23 01:34:51
edmundocentenorupvoted (100.00%) @qfilter / greenshift-032-messing-around-with-databases
2018/08/23 01:34:51
| voter | edmundocentenor |
| author | qfilter |
| permlink | greenshift-032-messing-around-with-databases |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}
]
}qfilterpublished a new post: greenshift-032-messing-around-with-databases2018/08/23 01:27:15
qfilterpublished a new post: greenshift-032-messing-around-with-databases
2018/08/23 01:27:15
| 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. 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>  </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>  </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>  </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>  </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 Info | Block #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\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\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\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\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\"}"
}
]
}edictedupvoted (100.00%) @qfilter / greenshift-031-explaining-data-flow2018/08/22 02:41:57
edictedupvoted (100.00%) @qfilter / greenshift-031-explaining-data-flow
2018/08/22 02:41:57
| voter | edicted |
| author | qfilter |
| permlink | greenshift-031-explaining-data-flow |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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-forward2018/08/22 01:40:21
qfilterreceived 0.033 STEEM, 0.042 SP author reward for @qfilter / greenshift-025-moving-forward
2018/08/22 01:40:21
| author | qfilter |
| permlink | greenshift-025-moving-forward |
| sbd payout | 0.000 SBD |
| steem payout | 0.033 STEEM |
| vesting payout | 68.831958 VESTS |
| Transaction Info | Block #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
2018/08/22 01:03:27
| parent author | qfilter |
| parent permlink | greenshift-031-explaining-data-flow |
| author | steemprojects |
| permlink | re-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 Info | Block #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": ""
}
]
}tinoschloeglupvoted (5.00%) @qfilter / greenshift-031-explaining-data-flow2018/08/22 00:49:24
tinoschloeglupvoted (5.00%) @qfilter / greenshift-031-explaining-data-flow
2018/08/22 00:49:24
| voter | tinoschloegl |
| author | qfilter |
| permlink | greenshift-031-explaining-data-flow |
| weight | 500 (5.00%) |
| Transaction Info | Block #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
}
]
}legkoupvoted (1.00%) @qfilter / greenshift-031-explaining-data-flow2018/08/22 00:39:03
legkoupvoted (1.00%) @qfilter / greenshift-031-explaining-data-flow
2018/08/22 00:39:03
| voter | legko |
| author | qfilter |
| permlink | greenshift-031-explaining-data-flow |
| weight | 100 (1.00%) |
| Transaction Info | Block #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
}
]
}cheneatsupvoted (15.00%) @qfilter / greenshift-031-explaining-data-flow2018/08/22 00:37:51
cheneatsupvoted (15.00%) @qfilter / greenshift-031-explaining-data-flow
2018/08/22 00:37:51
| voter | cheneats |
| author | qfilter |
| permlink | greenshift-031-explaining-data-flow |
| weight | 1500 (15.00%) |
| Transaction Info | Block #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
}
]
}qfilterpublished a new post: greenshift-031-explaining-data-flow2018/08/22 00:19:15
qfilterpublished a new post: greenshift-031-explaining-data-flow
2018/08/22 00:19:15
| 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. 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>  </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>  </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 Info | Block #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\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\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\"}"
}
]
}jacekw.devupvoted (100.00%) @qfilter / greenshift-029-decisions2018/08/21 22:46:03
jacekw.devupvoted (100.00%) @qfilter / greenshift-029-decisions
2018/08/21 22:46:03
| voter | jacekw.dev |
| author | qfilter |
| permlink | greenshift-029-decisions |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}
]
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress33.24%
{
"voting_manabar": {
"current_mana": "91578121125",
"last_update_time": 1553973444
},
"downvote_manabar": {
"current_mana": 0,
"last_update_time": 1512684612
},
"rc_account": {
"account": "qfilter",
"rc_manabar": {
"current_mana": "92543320544",
"last_update_time": 1553973444
},
"max_rc_creation_adjustment": {
"amount": "2020748973",
"precision": 6,
"nai": "@@000000037"
},
"max_rc": "93598870098"
}
}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.
[]