Ecoer Logo
VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS43.39%
Net Worth
1.201USD
STEEM
0.000STEEM
SBD
0.123SBD
Own SP
19.694SP

Detailed Balance

STEEM
balance
0.000STEEM
market_balance
0.000STEEM
savings_balance
0.000STEEM
reward_steem_balance
0.000STEEM
STEEM POWER
Own SP
19.694SP
Delegated Out
0.000SP
Delegation In
0.000SP
Effective Power
19.694SP
Reward SP (pending)
0.125SP
SBD
sbd_balance
0.000SBD
sbd_conversions
0.000SBD
sbd_market_balance
0.000SBD
savings_sbd_balance
0.000SBD
reward_sbd_balance
0.123SBD
{
  "balance": "0.000 STEEM",
  "savings_balance": "0.000 STEEM",
  "reward_steem_balance": "0.000 STEEM",
  "vesting_shares": "32031.912180 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.123 SBD",
  "conversions": []
}

Account Info

namehqfzone
id82730
rank75,448
reputation1443196505
created2016-09-04T02:50:21
recovery_accountsteem
proxyNone
post_count9
comment_count0
lifetime_vote_count0
witnesses_voted_for0
last_post2017-07-12T10:49:06
last_root_post2017-07-12T10:49:06
last_vote_time2017-07-12T11:16:21
proxied_vsf_votes0, 0, 0, 0
can_vote1
voting_power7,010
delayed_votes0
balance0.000 STEEM
savings_balance0.000 STEEM
sbd_balance0.000 SBD
savings_sbd_balance0.000 SBD
vesting_shares32031.912180 VESTS
delegated_vesting_shares0.000000 VESTS
received_vesting_shares0.000000 VESTS
reward_vesting_balance258.350684 VESTS
vesting_balance0.000 STEEM
vesting_withdraw_rate0.000000 VESTS
next_vesting_withdrawal1969-12-31T23:59:59
withdrawn0
to_withdraw0
withdraw_routes0
savings_withdraw_requests0
last_account_recovery1970-01-01T00:00:00
reset_accountnull
last_owner_update1970-01-01T00:00:00
last_account_update2017-07-13T08:31:30
minedNo
sbd_seconds0
sbd_last_interest_payment1970-01-01T00:00:00
savings_sbd_last_interest_payment1970-01-01T00:00:00
{
  "id": 82730,
  "name": "hqfzone",
  "owner": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM4yZph2Mr3Bi2KbS8P7esEykr591Wc3E8CcxKhrxWL6oCaJg5gp",
        1
      ]
    ]
  },
  "active": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM7a5FYrzxiJkTBxcVLHqnGsA4XRVzQj7KXV31nHX9e6HE4QdwXA",
        1
      ]
    ]
  },
  "posting": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM6ggrqWhhtoWrDmoUPpoE9cxmNM5TqAvP2pUTy4yXsBZ4TvLCTu",
        1
      ]
    ]
  },
  "memo_key": "STM8kBbX3QTUiVhMCmGgvK6sFwo4DBtdq9Y1kdmXHQTYP6vDZCAV5",
  "json_metadata": "{\"profile\":{\"website\":\"https://qifu.me/\",\"name\":\"_\"}}",
  "posting_json_metadata": "{\"profile\":{\"website\":\"https://qifu.me/\",\"name\":\"_\"}}",
  "proxy": "",
  "last_owner_update": "1970-01-01T00:00:00",
  "last_account_update": "2017-07-13T08:31:30",
  "created": "2016-09-04T02:50:21",
  "mined": false,
  "recovery_account": "steem",
  "last_account_recovery": "1970-01-01T00:00:00",
  "reset_account": "null",
  "comment_count": 0,
  "lifetime_vote_count": 0,
  "post_count": 9,
  "can_vote": true,
  "voting_manabar": {
    "current_mana": 7010,
    "last_update_time": 1499858181
  },
  "downvote_manabar": {
    "current_mana": 0,
    "last_update_time": 1472957421
  },
  "voting_power": 7010,
  "balance": "0.000 STEEM",
  "savings_balance": "0.000 STEEM",
  "sbd_balance": "0.000 SBD",
  "sbd_seconds": "0",
  "sbd_seconds_last_update": "1970-01-01T00:00:00",
  "sbd_last_interest_payment": "1970-01-01T00:00:00",
  "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.123 SBD",
  "reward_steem_balance": "0.000 STEEM",
  "reward_vesting_balance": "258.350684 VESTS",
  "reward_vesting_steem": "0.125 STEEM",
  "vesting_shares": "32031.912180 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": 0,
  "posting_rewards": 248,
  "proxied_vsf_votes": [
    0,
    0,
    0,
    0
  ],
  "witnesses_voted_for": 0,
  "last_post": "2017-07-12T10:49:06",
  "last_root_post": "2017-07-12T10:49:06",
  "last_vote_time": "2017-07-12T11:16:21",
  "post_bandwidth": 0,
  "pending_claimed_accounts": 0,
  "vesting_balance": "0.000 STEEM",
  "reputation": 1443196505,
  "transfer_history": [],
  "market_history": [],
  "post_history": [],
  "vote_history": [],
  "other_history": [],
  "witness_votes": [],
  "tags_usage": [],
  "guest_bloggers": [],
  "rank": 75448
}

Withdraw Routes

IncomingOutgoing
Empty
Empty
{
  "incoming": [],
  "outgoing": []
}
From Date
To Date
2019/09/04 04:51:48
parent authorhqfzone
parent permlinkcss-calc-nth-of-type
authorsteemitboard
permlinksteemitboard-notify-hqfzone-20190904t045147000z
title
bodyCongratulations @hqfzone! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@hqfzone/birthday3.png</td><td>Happy Birthday! - You are on the Steem blockchain for 3 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@hqfzone) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=hqfzone)_</sub> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!
json metadata{"image":["https://steemitboard.com/img/notify.png"]}
Transaction InfoBlock #36118228/Trx 88a698fbcaccc04eb765585352d15ad9a455945b
View Raw JSON Data
{
  "trx_id": "88a698fbcaccc04eb765585352d15ad9a455945b",
  "block": 36118228,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-09-04T04:51:48",
  "op": [
    "comment",
    {
      "parent_author": "hqfzone",
      "parent_permlink": "css-calc-nth-of-type",
      "author": "steemitboard",
      "permlink": "steemitboard-notify-hqfzone-20190904t045147000z",
      "title": "",
      "body": "Congratulations @hqfzone! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@hqfzone/birthday3.png</td><td>Happy Birthday! - You are on the Steem blockchain for 3 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@hqfzone) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=hqfzone)_</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\"]}"
    }
  ]
}
hqfzonereceived 0.031 SBD, 0.041 SP author reward for @hqfzone / css-calc-nth-of-type
2017/07/19 10:49:06
authorhqfzone
permlinkcss-calc-nth-of-type
sbd payout0.031 SBD
steem payout0.000 STEEM
vesting payout66.137728 VESTS
Transaction InfoBlock #13817602/Virtual Operation #3
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 13817602,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 3,
  "timestamp": "2017-07-19T10:49:06",
  "op": [
    "author_reward",
    {
      "author": "hqfzone",
      "permlink": "css-calc-nth-of-type",
      "sbd_payout": "0.031 SBD",
      "steem_payout": "0.000 STEEM",
      "vesting_payout": "66.137728 VESTS"
    }
  ]
}
hqfzonereceived 0.029 SBD, 0.038 SP author reward for @hqfzone / dns-glue-record
2017/07/19 10:29:33
authorhqfzone
permlinkdns-glue-record
sbd payout0.029 SBD
steem payout0.000 STEEM
vesting payout62.004165 VESTS
Transaction InfoBlock #13817211/Virtual Operation #10
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 13817211,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 10,
  "timestamp": "2017-07-19T10:29:33",
  "op": [
    "author_reward",
    {
      "author": "hqfzone",
      "permlink": "dns-glue-record",
      "sbd_payout": "0.029 SBD",
      "steem_payout": "0.000 STEEM",
      "vesting_payout": "62.004165 VESTS"
    }
  ]
}
hqfzonereceived 0.033 SBD, 0.042 SP author reward for @hqfzone / http-csp
2017/07/19 10:22:45
authorhqfzone
permlinkhttp-csp
sbd payout0.033 SBD
steem payout0.000 STEEM
vesting payout68.204598 VESTS
Transaction InfoBlock #13817075/Virtual Operation #3
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 13817075,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 3,
  "timestamp": "2017-07-19T10:22:45",
  "op": [
    "author_reward",
    {
      "author": "hqfzone",
      "permlink": "http-csp",
      "sbd_payout": "0.033 SBD",
      "steem_payout": "0.000 STEEM",
      "vesting_payout": "68.204598 VESTS"
    }
  ]
}
hqfzonereceived 0.030 SBD, 0.038 SP author reward for @hqfzone / dmarc
2017/07/19 10:17:30
authorhqfzone
permlinkdmarc
sbd payout0.030 SBD
steem payout0.000 STEEM
vesting payout62.004193 VESTS
Transaction InfoBlock #13816970/Virtual Operation #8
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 13816970,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 8,
  "timestamp": "2017-07-19T10:17:30",
  "op": [
    "author_reward",
    {
      "author": "hqfzone",
      "permlink": "dmarc",
      "sbd_payout": "0.030 SBD",
      "steem_payout": "0.000 STEEM",
      "vesting_payout": "62.004193 VESTS"
    }
  ]
}
hqfzoneupdated their account properties
2017/07/13 08:31:30
accounthqfzone
memo keySTM8kBbX3QTUiVhMCmGgvK6sFwo4DBtdq9Y1kdmXHQTYP6vDZCAV5
json metadata{"profile":{"website":"https://qifu.me/","name":"_"}}
Transaction InfoBlock #13642217/Trx fa3b5250de4c675d68f1cecaf65595c1575ed05e
View Raw JSON Data
{
  "trx_id": "fa3b5250de4c675d68f1cecaf65595c1575ed05e",
  "block": 13642217,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:31:30",
  "op": [
    "account_update",
    {
      "account": "hqfzone",
      "memo_key": "STM8kBbX3QTUiVhMCmGgvK6sFwo4DBtdq9Y1kdmXHQTYP6vDZCAV5",
      "json_metadata": "{\"profile\":{\"website\":\"https://qifu.me/\",\"name\":\"_\"}}"
    }
  ]
}
hqfzoneupdated their account properties
2017/07/13 08:31:18
accounthqfzone
memo keySTM8kBbX3QTUiVhMCmGgvK6sFwo4DBtdq9Y1kdmXHQTYP6vDZCAV5
json metadata{"profile":{"website":"https://qifu.me/","location":"Hefei","name":"_"}}
Transaction InfoBlock #13642213/Trx 13b01fa448481f0fead95fb4cc1f38782296b502
View Raw JSON Data
{
  "trx_id": "13b01fa448481f0fead95fb4cc1f38782296b502",
  "block": 13642213,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:31:18",
  "op": [
    "account_update",
    {
      "account": "hqfzone",
      "memo_key": "STM8kBbX3QTUiVhMCmGgvK6sFwo4DBtdq9Y1kdmXHQTYP6vDZCAV5",
      "json_metadata": "{\"profile\":{\"website\":\"https://qifu.me/\",\"location\":\"Hefei\",\"name\":\"_\"}}"
    }
  ]
}
hqfzoneupdated their account properties
2017/07/13 08:28:09
accounthqfzone
memo keySTM8kBbX3QTUiVhMCmGgvK6sFwo4DBtdq9Y1kdmXHQTYP6vDZCAV5
json metadata{"profile":{"profile_image":"http://www.gravatar.com/avatar/b62a214453c2836a7365803b19eef8c2?s=800","website":"https://qifu.me/","location":"Hefei"}}
Transaction InfoBlock #13642150/Trx ae931579a7ad83447466ce26b7a95ba0192d0f76
View Raw JSON Data
{
  "trx_id": "ae931579a7ad83447466ce26b7a95ba0192d0f76",
  "block": 13642150,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:28:09",
  "op": [
    "account_update",
    {
      "account": "hqfzone",
      "memo_key": "STM8kBbX3QTUiVhMCmGgvK6sFwo4DBtdq9Y1kdmXHQTYP6vDZCAV5",
      "json_metadata": "{\"profile\":{\"profile_image\":\"http://www.gravatar.com/avatar/b62a214453c2836a7365803b19eef8c2?s=800\",\"website\":\"https://qifu.me/\",\"location\":\"Hefei\"}}"
    }
  ]
}
enlilupvoted (0.30%) @hqfzone / dns-glue-record
2017/07/13 08:28:03
voterenlil
authorhqfzone
permlinkdns-glue-record
weight30 (0.30%)
Transaction InfoBlock #13642148/Trx e466a72613f494de017b8a5851e0d00c63cbd574
View Raw JSON Data
{
  "trx_id": "e466a72613f494de017b8a5851e0d00c63cbd574",
  "block": 13642148,
  "trx_in_block": 7,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:28:03",
  "op": [
    "vote",
    {
      "voter": "enlil",
      "author": "hqfzone",
      "permlink": "dns-glue-record",
      "weight": 30
    }
  ]
}
enlilupvoted (0.30%) @hqfzone / http-csp
2017/07/13 08:27:15
voterenlil
authorhqfzone
permlinkhttp-csp
weight30 (0.30%)
Transaction InfoBlock #13642132/Trx 60ef8f4d0e3bd7d96ea54dd52885fb4cc2c4ffbb
View Raw JSON Data
{
  "trx_id": "60ef8f4d0e3bd7d96ea54dd52885fb4cc2c4ffbb",
  "block": 13642132,
  "trx_in_block": 13,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:27:15",
  "op": [
    "vote",
    {
      "voter": "enlil",
      "author": "hqfzone",
      "permlink": "http-csp",
      "weight": 30
    }
  ]
}
alphacoreupvoted (0.10%) @hqfzone / dmarc
2017/07/13 08:27:12
voteralphacore
authorhqfzone
permlinkdmarc
weight10 (0.10%)
Transaction InfoBlock #13642131/Trx 09d42ce870d4ad8609340a63f0f88f1379a59f33
View Raw JSON Data
{
  "trx_id": "09d42ce870d4ad8609340a63f0f88f1379a59f33",
  "block": 13642131,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:27:12",
  "op": [
    "vote",
    {
      "voter": "alphacore",
      "author": "hqfzone",
      "permlink": "dmarc",
      "weight": 10
    }
  ]
}
enlilupvoted (0.30%) @hqfzone / dmarc
2017/07/13 08:27:09
voterenlil
authorhqfzone
permlinkdmarc
weight30 (0.30%)
Transaction InfoBlock #13642130/Trx 89a7f847609c66c131fb4c48231cecbd4750b64c
View Raw JSON Data
{
  "trx_id": "89a7f847609c66c131fb4c48231cecbd4750b64c",
  "block": 13642130,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:27:09",
  "op": [
    "vote",
    {
      "voter": "enlil",
      "author": "hqfzone",
      "permlink": "dmarc",
      "weight": 30
    }
  ]
}
hqfzonepublished a new post: css-calc-nth-of-type
2017/07/13 08:26:51
parent author
parent permlinkcss
authorhqfzone
permlinkcss-calc-nth-of-type
titleDeleted
body<html> <p>&nbsp;Deleted</p> </html>
json metadata{"tags":["deleted","css"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #13642124/Trx 93fa87f4eb1ee87300fbfc5e3e926bc0f31e6fd9
View Raw JSON Data
{
  "trx_id": "93fa87f4eb1ee87300fbfc5e3e926bc0f31e6fd9",
  "block": 13642124,
  "trx_in_block": 17,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:26:51",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "css",
      "author": "hqfzone",
      "permlink": "css-calc-nth-of-type",
      "title": "Deleted",
      "body": "<html>\n<p>&nbsp;Deleted</p>\n</html>",
      "json_metadata": "{\"tags\":[\"deleted\",\"css\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
alphacoreupvoted (0.10%) @hqfzone / manifest
2017/07/13 08:26:48
voteralphacore
authorhqfzone
permlinkmanifest
weight10 (0.10%)
Transaction InfoBlock #13642123/Trx 9c686f3ace94194e6a47285a602581bddb6f61c6
View Raw JSON Data
{
  "trx_id": "9c686f3ace94194e6a47285a602581bddb6f61c6",
  "block": 13642123,
  "trx_in_block": 19,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:26:48",
  "op": [
    "vote",
    {
      "voter": "alphacore",
      "author": "hqfzone",
      "permlink": "manifest",
      "weight": 10
    }
  ]
}
2017/07/13 08:26:48
voterproctologic
authorhqfzone
permlinkdns-glue-record
weight100 (1.00%)
Transaction InfoBlock #13642123/Trx ae72c01f74f015972cc5c1e655dbd011fe3461f3
View Raw JSON Data
{
  "trx_id": "ae72c01f74f015972cc5c1e655dbd011fe3461f3",
  "block": 13642123,
  "trx_in_block": 8,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:26:48",
  "op": [
    "vote",
    {
      "voter": "proctologic",
      "author": "hqfzone",
      "permlink": "dns-glue-record",
      "weight": 100
    }
  ]
}
proctologicupvoted (1.00%) @hqfzone / http-csp
2017/07/13 08:26:36
voterproctologic
authorhqfzone
permlinkhttp-csp
weight100 (1.00%)
Transaction InfoBlock #13642119/Trx a13e92ece0b141bc782e99a0e8f1eb0d1ce11bf2
View Raw JSON Data
{
  "trx_id": "a13e92ece0b141bc782e99a0e8f1eb0d1ce11bf2",
  "block": 13642119,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:26:36",
  "op": [
    "vote",
    {
      "voter": "proctologic",
      "author": "hqfzone",
      "permlink": "http-csp",
      "weight": 100
    }
  ]
}
proctologicupvoted (1.00%) @hqfzone / dmarc
2017/07/13 08:26:18
voterproctologic
authorhqfzone
permlinkdmarc
weight100 (1.00%)
Transaction InfoBlock #13642113/Trx edec89f303b979a0fb32ba9e8464175adb8265d2
View Raw JSON Data
{
  "trx_id": "edec89f303b979a0fb32ba9e8464175adb8265d2",
  "block": 13642113,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:26:18",
  "op": [
    "vote",
    {
      "voter": "proctologic",
      "author": "hqfzone",
      "permlink": "dmarc",
      "weight": 100
    }
  ]
}
proctologicupvoted (1.00%) @hqfzone / 2jshuk
2017/07/13 08:25:48
voterproctologic
authorhqfzone
permlink2jshuk
weight100 (1.00%)
Transaction InfoBlock #13642103/Trx d0d5ec2990750228575996d7531bcce1750a3a36
View Raw JSON Data
{
  "trx_id": "d0d5ec2990750228575996d7531bcce1750a3a36",
  "block": 13642103,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:25:48",
  "op": [
    "vote",
    {
      "voter": "proctologic",
      "author": "hqfzone",
      "permlink": "2jshuk",
      "weight": 100
    }
  ]
}
hqfzonepublished a new post: dns-glue-record
2017/07/13 08:25:48
parent author
parent permlinkdns
authorhqfzone
permlinkdns-glue-record
titleDeleted
bodyDeleted
json metadata{"tags":["deleted","dns"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #13642103/Trx d0ab1e9ce6ac797ed2ffa8c883365f2ebb49ae08
View Raw JSON Data
{
  "trx_id": "d0ab1e9ce6ac797ed2ffa8c883365f2ebb49ae08",
  "block": 13642103,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:25:48",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "dns",
      "author": "hqfzone",
      "permlink": "dns-glue-record",
      "title": "Deleted",
      "body": "Deleted",
      "json_metadata": "{\"tags\":[\"deleted\",\"dns\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2017/07/13 08:25:39
voterproctologic
authorhqfzone
permlinkservice-worker
weight100 (1.00%)
Transaction InfoBlock #13642100/Trx e99eb5ff9caed6013d42215854be9f16c22ec401
View Raw JSON Data
{
  "trx_id": "e99eb5ff9caed6013d42215854be9f16c22ec401",
  "block": 13642100,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:25:39",
  "op": [
    "vote",
    {
      "voter": "proctologic",
      "author": "hqfzone",
      "permlink": "service-worker",
      "weight": 100
    }
  ]
}
hqfzonepublished a new post: http-csp
2017/07/13 08:25:30
parent author
parent permlinkhttp
authorhqfzone
permlinkhttp-csp
titleDeleted
body<html> <p>&nbsp;&nbsp;Deleted&nbsp;</p> </html>
json metadata{"tags":["deleted","http"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #13642097/Trx 913a1dc215c73d86b1a879ed8f3d8562f6ddb4c4
View Raw JSON Data
{
  "trx_id": "913a1dc215c73d86b1a879ed8f3d8562f6ddb4c4",
  "block": 13642097,
  "trx_in_block": 13,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:25:30",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "http",
      "author": "hqfzone",
      "permlink": "http-csp",
      "title": "Deleted",
      "body": "<html>\n<p>&nbsp;&nbsp;Deleted&nbsp;</p>\n</html>",
      "json_metadata": "{\"tags\":[\"deleted\",\"http\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
proctologicupvoted (1.00%) @hqfzone / manifest
2017/07/13 08:25:18
voterproctologic
authorhqfzone
permlinkmanifest
weight100 (1.00%)
Transaction InfoBlock #13642093/Trx 7d1b40593936ecdb4ae4d8c3530cd0aeb20c9465
View Raw JSON Data
{
  "trx_id": "7d1b40593936ecdb4ae4d8c3530cd0aeb20c9465",
  "block": 13642093,
  "trx_in_block": 16,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:25:18",
  "op": [
    "vote",
    {
      "voter": "proctologic",
      "author": "hqfzone",
      "permlink": "manifest",
      "weight": 100
    }
  ]
}
hqfzonepublished a new post: dmarc
2017/07/13 08:25:18
parent author
parent permlinkweb
authorhqfzone
permlinkdmarc
titleDeleted
body<html> <p>&nbsp;&nbsp;Deleted&nbsp;</p> </html>
json metadata{"tags":["deleted","web"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #13642093/Trx 039d5d531c31df09f3f38a115706a6e7c6479f94
View Raw JSON Data
{
  "trx_id": "039d5d531c31df09f3f38a115706a6e7c6479f94",
  "block": 13642093,
  "trx_in_block": 6,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:25:18",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "web",
      "author": "hqfzone",
      "permlink": "dmarc",
      "title": "Deleted",
      "body": "<html>\n<p>&nbsp;&nbsp;Deleted&nbsp;</p>\n</html>",
      "json_metadata": "{\"tags\":[\"deleted\",\"web\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
hqfzonepublished a new post: 2jshuk
2017/07/13 08:24:54
parent author
parent permlinkparis
authorhqfzone
permlink2jshuk
titleDeleted
body<html> <p>&nbsp;&nbsp;Deleted&nbsp;</p> </html>
json metadata{"tags":["deleted","paris"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #13642085/Trx 98cb62acdc9c3f33d4b0c57ad11e736cbe10532c
View Raw JSON Data
{
  "trx_id": "98cb62acdc9c3f33d4b0c57ad11e736cbe10532c",
  "block": 13642085,
  "trx_in_block": 13,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:24:54",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "paris",
      "author": "hqfzone",
      "permlink": "2jshuk",
      "title": "Deleted",
      "body": "<html>\n<p>&nbsp;&nbsp;Deleted&nbsp;</p>\n</html>",
      "json_metadata": "{\"tags\":[\"deleted\",\"paris\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
hqfzonepublished a new post: service-worker
2017/07/13 08:24:36
parent author
parent permlinkserviceworker
authorhqfzone
permlinkservice-worker
titleDeleted
body<html> <p>&nbsp;&nbsp;Deleted&nbsp;</p> </html>
json metadata{"tags":["deleted","serviceworker"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #13642079/Trx 69e90244e09e163c3166796f8a19c573747650ba
View Raw JSON Data
{
  "trx_id": "69e90244e09e163c3166796f8a19c573747650ba",
  "block": 13642079,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:24:36",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "serviceworker",
      "author": "hqfzone",
      "permlink": "service-worker",
      "title": "Deleted",
      "body": "<html>\n<p>&nbsp;&nbsp;Deleted&nbsp;</p>\n</html>",
      "json_metadata": "{\"tags\":[\"deleted\",\"serviceworker\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
hqfzonepublished a new post: manifest
2017/07/13 08:24:15
parent author
parent permlinkmanifest
authorhqfzone
permlinkmanifest
titleDeleted
body<html> <p>&nbsp;&nbsp;Deleted&nbsp;</p> </html>
json metadata{"tags":["deleted","manifest"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #13642072/Trx 3f047e44be4be7690408ac57dd50e049344af936
View Raw JSON Data
{
  "trx_id": "3f047e44be4be7690408ac57dd50e049344af936",
  "block": 13642072,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:24:15",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "manifest",
      "author": "hqfzone",
      "permlink": "manifest",
      "title": "Deleted",
      "body": "<html>\n<p>&nbsp;&nbsp;Deleted&nbsp;</p>\n</html>",
      "json_metadata": "{\"tags\":[\"deleted\",\"manifest\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
2017/07/13 08:23:42
voterenlil
authorhqfzone
permlinkcss-calc-nth-of-type
weight30 (0.30%)
Transaction InfoBlock #13642061/Trx fdc22217dbf98a3f4d69b601b02de28f071287b4
View Raw JSON Data
{
  "trx_id": "fdc22217dbf98a3f4d69b601b02de28f071287b4",
  "block": 13642061,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:23:42",
  "op": [
    "vote",
    {
      "voter": "enlil",
      "author": "hqfzone",
      "permlink": "css-calc-nth-of-type",
      "weight": 30
    }
  ]
}
proctologicupvoted (1.00%) @hqfzone / 2uzytm
2017/07/13 08:23:36
voterproctologic
authorhqfzone
permlink2uzytm
weight100 (1.00%)
Transaction InfoBlock #13642059/Trx 244dbb4a47a0360c84d9717b2407b87e3f1ea83d
View Raw JSON Data
{
  "trx_id": "244dbb4a47a0360c84d9717b2407b87e3f1ea83d",
  "block": 13642059,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:23:36",
  "op": [
    "vote",
    {
      "voter": "proctologic",
      "author": "hqfzone",
      "permlink": "2uzytm",
      "weight": 100
    }
  ]
}
2017/07/13 08:23:33
voterproctologic
authorhqfzone
permlinkmbsubstr-mbstrimwidth
weight100 (1.00%)
Transaction InfoBlock #13642058/Trx 096cc78c28edff2d12e21cec5f19ca7afa5772cc
View Raw JSON Data
{
  "trx_id": "096cc78c28edff2d12e21cec5f19ca7afa5772cc",
  "block": 13642058,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:23:33",
  "op": [
    "vote",
    {
      "voter": "proctologic",
      "author": "hqfzone",
      "permlink": "mbsubstr-mbstrimwidth",
      "weight": 100
    }
  ]
}
2017/07/13 08:22:45
voterproctologic
authorhqfzone
permlinkcss-calc-nth-of-type
weight100 (1.00%)
Transaction InfoBlock #13642042/Trx 5efcbcaa25b4fe88103c99b2d5357d1cd07238f5
View Raw JSON Data
{
  "trx_id": "5efcbcaa25b4fe88103c99b2d5357d1cd07238f5",
  "block": 13642042,
  "trx_in_block": 11,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:22:45",
  "op": [
    "vote",
    {
      "voter": "proctologic",
      "author": "hqfzone",
      "permlink": "css-calc-nth-of-type",
      "weight": 100
    }
  ]
}
hqfzonepublished a new post: 2uzytm
2017/07/13 08:22:36
parent author
parent permlinkencoding
authorhqfzone
permlink2uzytm
titleDeleted
bodyDeleted
json metadata{"tags":["deleted","encoding"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #13642039/Trx e7bf1989a7110cd7907b66cd7794153b1dc09ba7
View Raw JSON Data
{
  "trx_id": "e7bf1989a7110cd7907b66cd7794153b1dc09ba7",
  "block": 13642039,
  "trx_in_block": 7,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:22:36",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "encoding",
      "author": "hqfzone",
      "permlink": "2uzytm",
      "title": "Deleted",
      "body": "Deleted",
      "json_metadata": "{\"tags\":[\"deleted\",\"encoding\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
hqfzonepublished a new post: mbsubstr-mbstrimwidth
2017/07/13 08:22:18
parent author
parent permlinkphp
authorhqfzone
permlinkmbsubstr-mbstrimwidth
titleDeleted
body<html> <p>&nbsp;&nbsp;Deleted</p> </html>
json metadata{"tags":["deleted","php"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #13642033/Trx 5ded95ec58db76856a6158f2906d41c4d629c641
View Raw JSON Data
{
  "trx_id": "5ded95ec58db76856a6158f2906d41c4d629c641",
  "block": 13642033,
  "trx_in_block": 10,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:22:18",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "php",
      "author": "hqfzone",
      "permlink": "mbsubstr-mbstrimwidth",
      "title": "Deleted",
      "body": "<html>\n<p>&nbsp;&nbsp;Deleted</p>\n</html>",
      "json_metadata": "{\"tags\":[\"deleted\",\"php\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
hqfzonepublished a new post: css-calc-nth-of-type
2017/07/13 08:21:51
parent author
parent permlinkcss
authorhqfzone
permlinkcss-calc-nth-of-type
titleDeleted
body<html> <p>&nbsp;Deleted</p> </html>
json metadata{"tags":["deleted","css"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #13642024/Trx aaaa371880b8389e8a4c117f620f7e27863920fb
View Raw JSON Data
{
  "trx_id": "aaaa371880b8389e8a4c117f620f7e27863920fb",
  "block": 13642024,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-13T08:21:51",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "css",
      "author": "hqfzone",
      "permlink": "css-calc-nth-of-type",
      "title": "Deleted",
      "body": "<html>\n<p>&nbsp;Deleted</p>\n</html>",
      "json_metadata": "{\"tags\":[\"deleted\",\"css\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
2017/07/12 22:35:48
parent authorhqfzone
parent permlinkcss-calc-nth-of-type
authorsteemitboard
permlinksteemitboard-notify-hqfzone-20170712t223550000z
title
bodyCongratulations @hqfzone! You have completed some achievement on Steemit and have been rewarded with new badge(s) : [![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/votes.png)](http://steemitboard.com/@hqfzone) Award for the number of upvotes [![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/voted.png)](http://steemitboard.com/@hqfzone) Award for the number of upvotes received Click on any badge to view your own Board of Honor on SteemitBoard. For more information about SteemitBoard, click [here](https://steemit.com/@steemitboard) If you no longer want to receive notifications, reply to this comment with the word `STOP` > By upvoting this notification, you can help all Steemit users. Learn how [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)!
json metadata{"image":["https://steemitboard.com/img/notifications.png"]}
Transaction InfoBlock #13630321/Trx ceb9225c6effd7f659aa44c5ebc440117af597ce
View Raw JSON Data
{
  "trx_id": "ceb9225c6effd7f659aa44c5ebc440117af597ce",
  "block": 13630321,
  "trx_in_block": 22,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T22:35:48",
  "op": [
    "comment",
    {
      "parent_author": "hqfzone",
      "parent_permlink": "css-calc-nth-of-type",
      "author": "steemitboard",
      "permlink": "steemitboard-notify-hqfzone-20170712t223550000z",
      "title": "",
      "body": "Congratulations @hqfzone! You have completed some achievement on Steemit and have been rewarded with new badge(s) :\n\n[![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/votes.png)](http://steemitboard.com/@hqfzone) Award for the number of upvotes\n[![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/voted.png)](http://steemitboard.com/@hqfzone) Award for the number of upvotes received\n\nClick on any badge to view your own Board of Honor on SteemitBoard.\nFor more information about SteemitBoard, click [here](https://steemit.com/@steemitboard)\n\nIf you no longer want to receive notifications, reply to this comment with the word `STOP`\n\n> By upvoting this notification, you can help all Steemit users. Learn how [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)!",
      "json_metadata": "{\"image\":[\"https://steemitboard.com/img/notifications.png\"]}"
    }
  ]
}
hqfzoneupvoted (100.00%) @laiseec / steemit
2017/07/12 11:31:27
voterhqfzone
authorlaiseec
permlinksteemit
weight10000 (100.00%)
Transaction InfoBlock #13617038/Trx a6ddec44b3a7bc79f1ad05e7d6fb1f5d735da591
View Raw JSON Data
{
  "trx_id": "a6ddec44b3a7bc79f1ad05e7d6fb1f5d735da591",
  "block": 13617038,
  "trx_in_block": 13,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:31:27",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "laiseec",
      "permlink": "steemit",
      "weight": 10000
    }
  ]
}
2017/07/12 11:31:12
required auths[]
required posting auths["hqfzone"]
idfollow
json["follow",{"follower":"hqfzone","following":"laiseec","what":["blog"]}]
Transaction InfoBlock #13617033/Trx 5b4e3924c2a0591f4348c61a8a3e4963169f89a2
View Raw JSON Data
{
  "trx_id": "5b4e3924c2a0591f4348c61a8a3e4963169f89a2",
  "block": 13617033,
  "trx_in_block": 7,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:31:12",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "hqfzone"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"hqfzone\",\"following\":\"laiseec\",\"what\":[\"blog\"]}]"
    }
  ]
}
2017/07/12 11:30:54
required auths[]
required posting auths["hqfzone"]
idfollow
json["follow",{"follower":"hqfzone","following":"sweetsssj","what":["blog"]}]
Transaction InfoBlock #13617027/Trx ad2261812ff9889b83d0c93fb61202460e69fff3
View Raw JSON Data
{
  "trx_id": "ad2261812ff9889b83d0c93fb61202460e69fff3",
  "block": 13617027,
  "trx_in_block": 17,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:30:54",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "hqfzone"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"hqfzone\",\"following\":\"sweetsssj\",\"what\":[\"blog\"]}]"
    }
  ]
}
2017/07/12 11:25:18
required auths[]
required posting auths["hqfzone"]
idfollow
json["follow",{"follower":"hqfzone","following":"justyy","what":["blog"]}]
Transaction InfoBlock #13616915/Trx 5630de5433edb05a3e05b1f78b70d4ae458225bc
View Raw JSON Data
{
  "trx_id": "5630de5433edb05a3e05b1f78b70d4ae458225bc",
  "block": 13616915,
  "trx_in_block": 14,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:25:18",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "hqfzone"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"hqfzone\",\"following\":\"justyy\",\"what\":[\"blog\"]}]"
    }
  ]
}
2017/07/12 11:16:21
voterhqfzone
authormorquai
permlinkfukuoka-night-view
weight10000 (100.00%)
Transaction InfoBlock #13616736/Trx 12457ee395ea596bcaf5a07309ff1ea8ed5b1cb4
View Raw JSON Data
{
  "trx_id": "12457ee395ea596bcaf5a07309ff1ea8ed5b1cb4",
  "block": 13616736,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:16:21",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "morquai",
      "permlink": "fukuoka-night-view",
      "weight": 10000
    }
  ]
}
2017/07/12 11:16:06
voterhqfzone
authormabre
permlinkdas-bekannteste-symbol-fuer-die-sehnsucht-ist-die-blaue-blume
weight10000 (100.00%)
Transaction InfoBlock #13616731/Trx e5e37b04678cc233901814f9ee7e75f15e6cfa7f
View Raw JSON Data
{
  "trx_id": "e5e37b04678cc233901814f9ee7e75f15e6cfa7f",
  "block": 13616731,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:16:06",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "mabre",
      "permlink": "das-bekannteste-symbol-fuer-die-sehnsucht-ist-die-blaue-blume",
      "weight": 10000
    }
  ]
}
hqfzoneupdated their account properties
2017/07/12 11:13:48
accounthqfzone
memo keySTM8kBbX3QTUiVhMCmGgvK6sFwo4DBtdq9Y1kdmXHQTYP6vDZCAV5
json metadata{"profile":{"profile_image":"http://www.gravatar.com/avatar/b62a214453c2836a7365803b19eef8c2?s=800","name":"启福","website":"https://qifu.me/","location":"Hefei","about":"寥寥数语,皆我心之所慨……"}}
Transaction InfoBlock #13616685/Trx 74e1345a80f773c278a60c5aacd52a5a75b505d4
View Raw JSON Data
{
  "trx_id": "74e1345a80f773c278a60c5aacd52a5a75b505d4",
  "block": 13616685,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:13:48",
  "op": [
    "account_update",
    {
      "account": "hqfzone",
      "memo_key": "STM8kBbX3QTUiVhMCmGgvK6sFwo4DBtdq9Y1kdmXHQTYP6vDZCAV5",
      "json_metadata": "{\"profile\":{\"profile_image\":\"http://www.gravatar.com/avatar/b62a214453c2836a7365803b19eef8c2?s=800\",\"name\":\"启福\",\"website\":\"https://qifu.me/\",\"location\":\"Hefei\",\"about\":\"寥寥数语,皆我心之所慨……\"}}"
    }
  ]
}
hqfzoneupvoted (100.00%) @hannahwu / 4w18oy
2017/07/12 11:09:00
voterhqfzone
authorhannahwu
permlink4w18oy
weight10000 (100.00%)
Transaction InfoBlock #13616589/Trx 102ee0d8b0f3bfe13f16eb99ab827c9a212a6190
View Raw JSON Data
{
  "trx_id": "102ee0d8b0f3bfe13f16eb99ab827c9a212a6190",
  "block": 13616589,
  "trx_in_block": 21,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:09:00",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "hannahwu",
      "permlink": "4w18oy",
      "weight": 10000
    }
  ]
}
2017/07/12 11:08:51
required auths[]
required posting auths["hqfzone"]
idfollow
json["follow",{"follower":"hqfzone","following":"hannahwu","what":["blog"]}]
Transaction InfoBlock #13616586/Trx 19185ae07c0da0e797884b152fe1180770ab592d
View Raw JSON Data
{
  "trx_id": "19185ae07c0da0e797884b152fe1180770ab592d",
  "block": 13616586,
  "trx_in_block": 10,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:08:51",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "hqfzone"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"hqfzone\",\"following\":\"hannahwu\",\"what\":[\"blog\"]}]"
    }
  ]
}
hqfzonepublished a new post: 2jshuk
2017/07/12 11:07:33
parent author
parent permlinkparis
authorhqfzone
permlink2jshuk
title巴黎之行
body@@ -1,15 +1,128 @@ %3Chtml%3E%0A +%3Cp%3E%3Cimg src=%22https://ww4.sinaimg.cn/large/694c610ejw1f9ta16fv52j22uo3tc4qs.jpg%22 width=%223696%22 height=%224944%22/%3E%3C/p%3E%0A %3Cp%3E%E6%AD%A3%E5%A6%82%E8%80%81%E6%9D%BF%E6%89%80
json metadata{"tags":["travel","paris","france"],"app":"steemit/0.1","format":"html","image":["https://ww4.sinaimg.cn/large/694c610ejw1f9ta16fv52j22uo3tc4qs.jpg"]}
Transaction InfoBlock #13616560/Trx c9f4b00245cd068b855a033ff3fe9c8db1e0225f
View Raw JSON Data
{
  "trx_id": "c9f4b00245cd068b855a033ff3fe9c8db1e0225f",
  "block": 13616560,
  "trx_in_block": 7,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:07:33",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "paris",
      "author": "hqfzone",
      "permlink": "2jshuk",
      "title": "巴黎之行",
      "body": "@@ -1,15 +1,128 @@\n %3Chtml%3E%0A\n+%3Cp%3E%3Cimg src=%22https://ww4.sinaimg.cn/large/694c610ejw1f9ta16fv52j22uo3tc4qs.jpg%22 width=%223696%22 height=%224944%22/%3E%3C/p%3E%0A\n %3Cp%3E%E6%AD%A3%E5%A6%82%E8%80%81%E6%9D%BF%E6%89%80\n",
      "json_metadata": "{\"tags\":[\"travel\",\"paris\",\"france\"],\"app\":\"steemit/0.1\",\"format\":\"html\",\"image\":[\"https://ww4.sinaimg.cn/large/694c610ejw1f9ta16fv52j22uo3tc4qs.jpg\"]}"
    }
  ]
}
hqfzoneupvoted (100.00%) @hannahwu / 5wprmx
2017/07/12 11:05:03
voterhqfzone
authorhannahwu
permlink5wprmx
weight10000 (100.00%)
Transaction InfoBlock #13616510/Trx f1008bd3dfea171128e5cd3ac04c412aa46d4e15
View Raw JSON Data
{
  "trx_id": "f1008bd3dfea171128e5cd3ac04c412aa46d4e15",
  "block": 13616510,
  "trx_in_block": 19,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:05:03",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "hannahwu",
      "permlink": "5wprmx",
      "weight": 10000
    }
  ]
}
2017/07/12 11:04:51
voterhqfzone
authorarielthemermaid
permlinkself-introducing-the-reincarnation-of-ariel-the-mermaid-hehe
weight10000 (100.00%)
Transaction InfoBlock #13616506/Trx 22782d0e48aa11d02672c16ee923fde5fa0f396f
View Raw JSON Data
{
  "trx_id": "22782d0e48aa11d02672c16ee923fde5fa0f396f",
  "block": 13616506,
  "trx_in_block": 13,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:04:51",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "arielthemermaid",
      "permlink": "self-introducing-the-reincarnation-of-ariel-the-mermaid-hehe",
      "weight": 10000
    }
  ]
}
2017/07/12 11:04:00
required auths[]
required posting auths["hqfzone"]
idfollow
json["follow",{"follower":"hqfzone","following":"arielthemermaid","what":["blog"]}]
Transaction InfoBlock #13616489/Trx a48413f50f81366482d50889a3efbd1620f69f42
View Raw JSON Data
{
  "trx_id": "a48413f50f81366482d50889a3efbd1620f69f42",
  "block": 13616489,
  "trx_in_block": 16,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:04:00",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "hqfzone"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"hqfzone\",\"following\":\"arielthemermaid\",\"what\":[\"blog\"]}]"
    }
  ]
}
2017/07/12 11:03:42
required auths[]
required posting auths["hqfzone"]
idfollow
json["follow",{"follower":"hqfzone","following":"mustarzil","what":["blog"]}]
Transaction InfoBlock #13616483/Trx 63873919eb9aef2223251c8035ce95f06f37b5fd
View Raw JSON Data
{
  "trx_id": "63873919eb9aef2223251c8035ce95f06f37b5fd",
  "block": 13616483,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:03:42",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "hqfzone"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"hqfzone\",\"following\":\"mustarzil\",\"what\":[\"blog\"]}]"
    }
  ]
}
2017/07/12 11:03:00
voterhqfzone
authormustarzil
permlinkbeautiful-appearance-of-nature-plus-the-arrival-of-a-rainbow-that-is-so-charming-not-just-one-but-there-are-two-that-appear-2017712t174732483z
weight10000 (100.00%)
Transaction InfoBlock #13616469/Trx 3697dd8a9fb51526c4bd149e8f0c0dea6807dedf
View Raw JSON Data
{
  "trx_id": "3697dd8a9fb51526c4bd149e8f0c0dea6807dedf",
  "block": 13616469,
  "trx_in_block": 6,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:03:00",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "mustarzil",
      "permlink": "beautiful-appearance-of-nature-plus-the-arrival-of-a-rainbow-that-is-so-charming-not-just-one-but-there-are-two-that-appear-2017712t174732483z",
      "weight": 10000
    }
  ]
}
2017/07/12 11:02:45
voterhqfzone
authormustarzil
permlinkbeautiful-night-stars-in-the-sky-of-aceh-that-shines-on-a-beautiful-night-2017712t17821188z
weight10000 (100.00%)
Transaction InfoBlock #13616464/Trx f03a72a03aaf42fdbebb7d4e119a0929540695cf
View Raw JSON Data
{
  "trx_id": "f03a72a03aaf42fdbebb7d4e119a0929540695cf",
  "block": 13616464,
  "trx_in_block": 16,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T11:02:45",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "mustarzil",
      "permlink": "beautiful-night-stars-in-the-sky-of-aceh-that-shines-on-a-beautiful-night-2017712t17821188z",
      "weight": 10000
    }
  ]
}
2017/07/12 10:49:51
votermustarzil
authorhqfzone
permlinkcss-calc-nth-of-type
weight10000 (100.00%)
Transaction InfoBlock #13616207/Trx 30ab1accc3145522b4d6318986a5d4388c081f03
View Raw JSON Data
{
  "trx_id": "30ab1accc3145522b4d6318986a5d4388c081f03",
  "block": 13616207,
  "trx_in_block": 6,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:49:51",
  "op": [
    "vote",
    {
      "voter": "mustarzil",
      "author": "hqfzone",
      "permlink": "css-calc-nth-of-type",
      "weight": 10000
    }
  ]
}
2017/07/12 10:49:06
voterhqfzone
authorhqfzone
permlinkcss-calc-nth-of-type
weight10000 (100.00%)
Transaction InfoBlock #13616192/Trx 8a6874ae5e3e62daae9a34d3b6284e9b200efebe
View Raw JSON Data
{
  "trx_id": "8a6874ae5e3e62daae9a34d3b6284e9b200efebe",
  "block": 13616192,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:49:06",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "hqfzone",
      "permlink": "css-calc-nth-of-type",
      "weight": 10000
    }
  ]
}
hqfzonepublished a new post: css-calc-nth-of-type
2017/07/12 10:49:06
parent author
parent permlinkcss
authorhqfzone
permlinkcss-calc-nth-of-type
titleCSS中的calc()以及nth-of-type()
body<html> <p>&nbsp;昨天折腾某主题时发现,两列的相册和一列的相册,右端对不齐。我当然忍不了,于是看了一下它的css文件,发现原来是主题的原作者数学不好,最大宽度算错了,而且宽度width小于最大宽度max-width,他这逻辑也是可以了……</p> <p>不过在css文件中,还是学到了一点东西的,比如“calc()”,括号里面可以填写表达式,表达式里面允许使用“+、-、*、/、()”。</p> <p>在通常的css属性比如宽度中,指定百分比“%”或者像素“px”就够了,但是使用calc()可以更加灵活。比如,一行有三个div,它们的外边距margin都是固定的10px,那么每个div的宽度如何设置,才可以保证在响应式页面中,无论父元素宽度怎么变化,始终可以刚刚好填满呢?设置“width: 33.3%;”?由于外边距的存在,三个div的总宽度显然会超出父元素的宽度。设置小一点比如“width: 30%;”?那么当父级宽度大于600px时,则填不满;小于600px时,则超出。</p> <p>在这种情况下,就可以设置“width: calc(100% / 3 – 20px);”,完美解决以上问题。当然,为了兼容性,通常需要把带浏览器前缀的一并写上,如下:</p> <pre><code>.div-123{<br> &nbsp;&nbsp;&nbsp;margin:10px;<br> &nbsp;&nbsp;&nbsp;width:27%;<br> &nbsp;&nbsp;&nbsp;//向不支持calc()的浏览器妥协,该百分比保证父级最小宽度为320px时不超出;或者将margin修改为百分比形式!<br> &nbsp;&nbsp;&nbsp;width: &nbsp;&nbsp;&nbsp;-moz-calc(100% / 3 - 20px);<br> &nbsp;&nbsp;&nbsp;width: -webkit-calc(100% / 3 - 20px);<br> &nbsp;&nbsp;&nbsp;width: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calc(100% / 3 - 20px);<br> }</code></pre> <p>大部分浏览器都可以支持了,除非很老的,那就要尝试其它css属性值或者用js了。需要注意的是,表达式中的加减号,前后必须有空格,否则识别错误。</p> <p>还有一个css选择器“:nth-of-type(N)”,它可以用来选择【其父元素的特定类型的第N个子元素】,里面的N可以写数字,表示第几个;可以是关键词比如odd或even,表示所有的奇数或者偶数;还可以是表达式比如3n,表示所有3的倍数(n代表自增的整数)。还是以上述div举例,假如每行有三个div,有很多行,我希望给每行的最后一个div设置一个橙色的右边框,怎么办?如下:</p> <pre><code>.div-123:nth-of-type(3n){<br> &nbsp;&nbsp;&nbsp;border-right:1px solid orange;<br> }</code></pre> <p>当然,还有个与它类似的“:nth-child(N)”,用法大体相似,它可以用来选择【其父元素的第N个子元素,不论元素的类型】。简单总结一下就是N在计数时,“:nth-child(N)”把父元素的所有子元素全数一遍,而“:nth-of-type(N)”只数与“:”前面的标签相同的子元素。</p> <p>之前只用过“first-child”、“last-child”这些简单的选择器,所以今天简单分享一下哈。&nbsp;</p> </html>
json metadata{"tags":["css","calc"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #13616192/Trx 8a6874ae5e3e62daae9a34d3b6284e9b200efebe
View Raw JSON Data
{
  "trx_id": "8a6874ae5e3e62daae9a34d3b6284e9b200efebe",
  "block": 13616192,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:49:06",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "css",
      "author": "hqfzone",
      "permlink": "css-calc-nth-of-type",
      "title": "CSS中的calc()以及nth-of-type()",
      "body": "<html>\n<p>&nbsp;昨天折腾某主题时发现,两列的相册和一列的相册,右端对不齐。我当然忍不了,于是看了一下它的css文件,发现原来是主题的原作者数学不好,最大宽度算错了,而且宽度width小于最大宽度max-width,他这逻辑也是可以了……</p>\n<p>不过在css文件中,还是学到了一点东西的,比如“calc()”,括号里面可以填写表达式,表达式里面允许使用“+、-、*、/、()”。</p>\n<p>在通常的css属性比如宽度中,指定百分比“%”或者像素“px”就够了,但是使用calc()可以更加灵活。比如,一行有三个div,它们的外边距margin都是固定的10px,那么每个div的宽度如何设置,才可以保证在响应式页面中,无论父元素宽度怎么变化,始终可以刚刚好填满呢?设置“width: 33.3%;”?由于外边距的存在,三个div的总宽度显然会超出父元素的宽度。设置小一点比如“width: 30%;”?那么当父级宽度大于600px时,则填不满;小于600px时,则超出。</p>\n<p>在这种情况下,就可以设置“width: calc(100% / 3 – 20px);”,完美解决以上问题。当然,为了兼容性,通常需要把带浏览器前缀的一并写上,如下:</p>\n<pre><code>.div-123{<br>\n &nbsp;&nbsp;&nbsp;margin:10px;<br>\n &nbsp;&nbsp;&nbsp;width:27%;<br>\n &nbsp;&nbsp;&nbsp;//向不支持calc()的浏览器妥协,该百分比保证父级最小宽度为320px时不超出;或者将margin修改为百分比形式!<br>\n &nbsp;&nbsp;&nbsp;width: &nbsp;&nbsp;&nbsp;-moz-calc(100% / 3 - 20px);<br>\n &nbsp;&nbsp;&nbsp;width: -webkit-calc(100% / 3 - 20px);<br>\n &nbsp;&nbsp;&nbsp;width: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calc(100% / 3 - 20px);<br>\n}</code></pre>\n<p>大部分浏览器都可以支持了,除非很老的,那就要尝试其它css属性值或者用js了。需要注意的是,表达式中的加减号,前后必须有空格,否则识别错误。</p>\n<p>还有一个css选择器“:nth-of-type(N)”,它可以用来选择【其父元素的特定类型的第N个子元素】,里面的N可以写数字,表示第几个;可以是关键词比如odd或even,表示所有的奇数或者偶数;还可以是表达式比如3n,表示所有3的倍数(n代表自增的整数)。还是以上述div举例,假如每行有三个div,有很多行,我希望给每行的最后一个div设置一个橙色的右边框,怎么办?如下:</p>\n<pre><code>.div-123:nth-of-type(3n){<br>\n &nbsp;&nbsp;&nbsp;border-right:1px solid orange;<br>\n}</code></pre>\n<p>当然,还有个与它类似的“:nth-child(N)”,用法大体相似,它可以用来选择【其父元素的第N个子元素,不论元素的类型】。简单总结一下就是N在计数时,“:nth-child(N)”把父元素的所有子元素全数一遍,而“:nth-of-type(N)”只数与“:”前面的标签相同的子元素。</p>\n<p>之前只用过“first-child”、“last-child”这些简单的选择器,所以今天简单分享一下哈。&nbsp;</p>\n</html>",
      "json_metadata": "{\"tags\":[\"css\",\"calc\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
hqfzonepublished a new post: service-worker
2017/07/12 10:44:12
parent author
parent permlinkserviceworker
authorhqfzone
permlinkservice-worker
titleService Worker实现离线缓存
body<html> <p>上一篇说过的<a href="https://qifu.me/at201612172057/">manifest离线缓存</a>方法虽然被所有主流浏览器的最新版本所支持,但终究还是在web标准中被废弃了,firefox在控制台会提醒使用Service Worker缓存替代。</p> <p>但其实Service Worker还远远没有被普遍支持,仅chrome、firefox和opera的新版本支持,Edge和safari的支持尚在开发中,而且Service Worker要求必须在https网站上使用。所以实际上,在相当长的时间内manifest缓存会一直被各大浏览器支持,不会被轻易删除。新标准的普及需要时间,旧标准的完全退出更需要时间,这个时间,可能长于大部分网站的生命周期……</p> <p>但我还是先试了一下Service Worker,方法同样很简单,第一步先注册Service Worker,类似于manifest方法中在html元素内添加清单文件,只不过这里是在页面注册一个js文件,引入以下js代码即可。</p> <pre><code>if ('serviceWorker' in navigator) {<br> &nbsp;window.addEventListener('load', function() {<br> &nbsp;&nbsp;&nbsp;navigator.serviceWorker.register('/qifu/sw.js').then(function(registration) {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('ServiceWorker registration successful with scope: ', registration.scope);<br> &nbsp;&nbsp;&nbsp;}).catch(function(err) {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('ServiceWorker registration failed: ', err);<br> &nbsp;&nbsp;&nbsp;});<br> &nbsp;});<br> }</code></pre> <p>注册的这个js文件所在的路径会影响Service Worker的作用域,它在哪个目录下,作用域就包含哪个目录。比如“/qifu/sw.js”就会导致作用域是/qifu/及其下属目录,而放在根目录的话,作用域就是全站。</p> <p>下面是注册的Service Worker文件内容(/qifu/sw.js)。</p> <pre><code>var CACHE_NAME = 'qifu';<br> //缓存名称<br> var urlsToCache = [<br> &nbsp;'/qifu/',<br> &nbsp;'style.css',<br> &nbsp;'script.js'<br> ];<br> //要缓存的资源url<br> self.addEventListener('install', function(event) {<br> &nbsp;event.waitUntil(<br> &nbsp;&nbsp;&nbsp;caches.open(CACHE_NAME)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.then(function(cache) {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Opened cache');<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return cache.addAll(urlsToCache);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br> &nbsp;);<br> });<br> //初始化安装,缓存上面列出的资源<br> self.addEventListener('fetch', function(event) {<br> &nbsp;event.respondWith(<br> &nbsp;&nbsp;&nbsp;caches.match(event.request)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.then(function(response) {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (response) {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return response;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return fetch(event.request);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br> &nbsp;&nbsp;&nbsp;)<br> &nbsp;);<br> });<br> //拦截所有请求,缓存过则直接返回</code></pre> <p>首先是安装Service Worker,也就是初始化,告诉浏览器先缓存好哪些内容;然后Service Worker就拦截所有请求,有缓存就直接返回缓存内容。初始化只有第一次以及Service Worker文件有更新后才会触发,否则会被自动跳过。</p> <p>Service Worker缓存之所以被推出用来替代manifest缓存,一个很重要的原因就是更灵活。比如即使初始化时没有缓存某些文件,也可以在后续用到时<a href="https://developers.google.com/web/fundamentals/getting-started/primers/service-workers">自动缓存</a>(具体代码本文不再列出,只比上述代码多几行),而不像manifest一样必须逐一列出要缓存的内容,还不允许通配符CACHE。</p> <p>由于目前浏览器对于Service Worker的支持尚不广泛,可以同时保留manifest缓存,如果支持的话,浏览器检测到两者并存会自动使用Service Worker。</p> <p>类似于manifest缓存,每次打开浏览器,会使用缓存的数据,然后浏览器默默查看Service Worker文件有没有更新,只要有哪怕一个字节的变化,就会重新缓存,新内容同样是下次访问生效。(大部分网站可能都为js文件设置了HTTP缓存,目前浏览器在检查Service Worker文件更新时会遵守http header里面设置的缓存时间,但最长24小时,如果超过了这一数值,浏览器会重新下载Service Worker的js文件。)</p> <p>如果更新后的Service Worker定义了新的缓存名称,通常希望删掉旧的缓存,可以用下面的代码:</p> <pre><code>self.addEventListener('activate', function(event) {<br> &nbsp; var cacheWhitelist = ['not-delete-cache-a', 'not-delete-cache-b'];<br> //上面是不要删除的缓存名,其余全部删除<br> &nbsp; event.waitUntil(<br> &nbsp; &nbsp; caches.keys().then(function(cacheNames) {<br> &nbsp; &nbsp; &nbsp; return Promise.all(<br> &nbsp; &nbsp; &nbsp; &nbsp; cacheNames.map(function(cacheName) {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (cacheWhitelist.indexOf(cacheName) === -1) {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return caches.delete(cacheName);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br> &nbsp; &nbsp; &nbsp; &nbsp; })<br> &nbsp; &nbsp; &nbsp; );<br> &nbsp; &nbsp; })<br> &nbsp; );<br> });</code></pre> <p>好了,就这么简单。</p> </html>
json metadata{"tags":["serviceworker","web","html"],"links":["https://qifu.me/at201612172057/","https://developers.google.com/web/fundamentals/getting-started/primers/service-workers"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #13616094/Trx 5dae4471e57ca5ae158d7329eb7d273de0beae6e
View Raw JSON Data
{
  "trx_id": "5dae4471e57ca5ae158d7329eb7d273de0beae6e",
  "block": 13616094,
  "trx_in_block": 8,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:44:12",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "serviceworker",
      "author": "hqfzone",
      "permlink": "service-worker",
      "title": "Service Worker实现离线缓存",
      "body": "<html>\n<p>上一篇说过的<a href=\"https://qifu.me/at201612172057/\">manifest离线缓存</a>方法虽然被所有主流浏览器的最新版本所支持,但终究还是在web标准中被废弃了,firefox在控制台会提醒使用Service Worker缓存替代。</p>\n<p>但其实Service Worker还远远没有被普遍支持,仅chrome、firefox和opera的新版本支持,Edge和safari的支持尚在开发中,而且Service Worker要求必须在https网站上使用。所以实际上,在相当长的时间内manifest缓存会一直被各大浏览器支持,不会被轻易删除。新标准的普及需要时间,旧标准的完全退出更需要时间,这个时间,可能长于大部分网站的生命周期……</p>\n<p>但我还是先试了一下Service Worker,方法同样很简单,第一步先注册Service Worker,类似于manifest方法中在html元素内添加清单文件,只不过这里是在页面注册一个js文件,引入以下js代码即可。</p>\n<pre><code>if ('serviceWorker' in navigator) {<br>\n &nbsp;window.addEventListener('load', function() {<br>\n &nbsp;&nbsp;&nbsp;navigator.serviceWorker.register('/qifu/sw.js').then(function(registration) {<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('ServiceWorker registration successful with scope: ', registration.scope);<br>\n &nbsp;&nbsp;&nbsp;}).catch(function(err) {<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('ServiceWorker registration failed: ', err);<br>\n &nbsp;&nbsp;&nbsp;});<br>\n &nbsp;});<br>\n}</code></pre>\n<p>注册的这个js文件所在的路径会影响Service Worker的作用域,它在哪个目录下,作用域就包含哪个目录。比如“/qifu/sw.js”就会导致作用域是/qifu/及其下属目录,而放在根目录的话,作用域就是全站。</p>\n<p>下面是注册的Service Worker文件内容(/qifu/sw.js)。</p>\n<pre><code>var CACHE_NAME = 'qifu';<br>\n//缓存名称<br>\nvar urlsToCache = [<br>\n &nbsp;'/qifu/',<br>\n &nbsp;'style.css',<br>\n &nbsp;'script.js'<br>\n];<br>\n//要缓存的资源url<br>\nself.addEventListener('install', function(event) {<br>\n &nbsp;event.waitUntil(<br>\n &nbsp;&nbsp;&nbsp;caches.open(CACHE_NAME)<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.then(function(cache) {<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Opened cache');<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return cache.addAll(urlsToCache);<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br>\n &nbsp;);<br>\n});<br>\n//初始化安装,缓存上面列出的资源<br>\nself.addEventListener('fetch', function(event) {<br>\n &nbsp;event.respondWith(<br>\n &nbsp;&nbsp;&nbsp;caches.match(event.request)<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.then(function(response) {<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (response) {<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return response;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return fetch(event.request);<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>\n &nbsp;&nbsp;&nbsp;)<br>\n &nbsp;);<br>\n});<br>\n//拦截所有请求,缓存过则直接返回</code></pre>\n<p>首先是安装Service Worker,也就是初始化,告诉浏览器先缓存好哪些内容;然后Service Worker就拦截所有请求,有缓存就直接返回缓存内容。初始化只有第一次以及Service Worker文件有更新后才会触发,否则会被自动跳过。</p>\n<p>Service Worker缓存之所以被推出用来替代manifest缓存,一个很重要的原因就是更灵活。比如即使初始化时没有缓存某些文件,也可以在后续用到时<a href=\"https://developers.google.com/web/fundamentals/getting-started/primers/service-workers\">自动缓存</a>(具体代码本文不再列出,只比上述代码多几行),而不像manifest一样必须逐一列出要缓存的内容,还不允许通配符CACHE。</p>\n<p>由于目前浏览器对于Service Worker的支持尚不广泛,可以同时保留manifest缓存,如果支持的话,浏览器检测到两者并存会自动使用Service Worker。</p>\n<p>类似于manifest缓存,每次打开浏览器,会使用缓存的数据,然后浏览器默默查看Service Worker文件有没有更新,只要有哪怕一个字节的变化,就会重新缓存,新内容同样是下次访问生效。(大部分网站可能都为js文件设置了HTTP缓存,目前浏览器在检查Service Worker文件更新时会遵守http header里面设置的缓存时间,但最长24小时,如果超过了这一数值,浏览器会重新下载Service Worker的js文件。)</p>\n<p>如果更新后的Service Worker定义了新的缓存名称,通常希望删掉旧的缓存,可以用下面的代码:</p>\n<pre><code>self.addEventListener('activate', function(event) {<br>\n&nbsp; var cacheWhitelist = ['not-delete-cache-a', 'not-delete-cache-b'];<br>\n//上面是不要删除的缓存名,其余全部删除<br>\n&nbsp; event.waitUntil(<br>\n&nbsp; &nbsp; caches.keys().then(function(cacheNames) {<br>\n&nbsp; &nbsp; &nbsp; return Promise.all(<br>\n&nbsp; &nbsp; &nbsp; &nbsp; cacheNames.map(function(cacheName) {<br>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (cacheWhitelist.indexOf(cacheName) === -1) {<br>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return caches.delete(cacheName);<br>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br>\n&nbsp; &nbsp; &nbsp; &nbsp; })<br>\n&nbsp; &nbsp; &nbsp; );<br>\n&nbsp; &nbsp; })<br>\n&nbsp; );<br>\n});</code></pre>\n<p>好了,就这么简单。</p>\n</html>",
      "json_metadata": "{\"tags\":[\"serviceworker\",\"web\",\"html\"],\"links\":[\"https://qifu.me/at201612172057/\",\"https://developers.google.com/web/fundamentals/getting-started/primers/service-workers\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
2017/07/12 10:42:21
voterhqfzone
authorhqfzone
permlinkmbsubstr-mbstrimwidth
weight10000 (100.00%)
Transaction InfoBlock #13616057/Trx e7e6863a6b43ea775efdeeb65c63fffae27ada2a
View Raw JSON Data
{
  "trx_id": "e7e6863a6b43ea775efdeeb65c63fffae27ada2a",
  "block": 13616057,
  "trx_in_block": 13,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:42:21",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "hqfzone",
      "permlink": "mbsubstr-mbstrimwidth",
      "weight": 10000
    }
  ]
}
hqfzonepublished a new post: mbsubstr-mbstrimwidth
2017/07/12 10:42:21
parent author
parent permlinkphp
authorhqfzone
permlinkmbsubstr-mbstrimwidth
titlemb_substr() 和 mb_strimwidth() 精确截取字符串
body<html> <p>&nbsp;估计很多人折腾博客时都有过截断字符串的需求,比如显示文章摘要、评论输出等。</p> <p>通常用到的是 mb_substr() 或 mb_strimwidth(),但是我发现,网上的很多代码并不严谨,比如很多没有加最后的编码参数,不加此参数则使用内部字符编码。</p> <p>因为通常我们的文件是 UTF-8 编码的,如果内部字符编码不是 UTF-8,就很可能出问题(内部字符编码可以用 mb_internal_encoding() 设置)。</p> <p>我在自己服务器(默认的内部字符编码为“ISO-8859-1”)上试了一下,详见下面的代码及结果(注释“//”后的内容为结果,其中“口”代表字符被截断后,无法正常显示的字节片段):</p> <pre><code>[ 本文假定 $str = 'qifu启福'; ]<br> mb_substr($str,0,4)<br> //qifu<br> mb_substr($str,0,5)<br> //qifu口<br> mb_substr($str,0,6)<br> //qifu口口<br> mb_substr($str,0,7)<br> //qifu启<br> <br> mb_substr($str,0,5,'utf-8')<br> //qifu启<br> mb_substr($str,0,6,'utf-8')<br> //qifu启福</code></pre> <p>很明显,不指定 UTF-8 编码时,由于中文字符占三个字节,截取时很容易被拆开,一个中文字符相当于三个英文字符。而指定编码以后,才真的是按字符个数,而不是按字节数截取,mb_strimwidth() 也是一样的。</p> <p>mb_substr() 截取的是字符个数,而 mb_strimwidth() 截取的是字符宽度,如下:</p> <pre><code>mb_strimwidth($str, 0, 4, '','utf-8')<br> //qifu<br> mb_strimwidth($str, 0, 5, '','utf-8')<br> //qifu<br> mb_strimwidth($str, 0, 6, '','utf-8')<br> //qifu启</code></pre> <p>可见 mb_strimwidth() 即不是按字节,也不是按字符截取,而是按照宽度。在 php.net 的说明中指出,多字节字符通常是单字节字符的两倍宽度,也就是说,英文字符占一个宽度,中文占两个,宽度不足以截取一个字符时则不取。</p> <p>当中英文混合时,这个其实比较适合保证截取后的字符串显示宽度一致。但是,如果网页的字体并不是等宽字体,效果也就体现不出来了,因为“m”和“i”所显示的宽度很可能不一样。</p> <p>另外,mb_strimwidth() 中如果指定截取后末尾添加字符串,则截取宽度包含该字符串,如下:</p> <pre><code>mb_strimwidth($str, 0, 3, '.','utf-8')<br> //qi.</code></pre> <p>如果使用这两个函数时,你仔细数一下输出结果,发现字符个数不太对劲,不妨根据本文所述修改代码试一下。&nbsp;</p> </html>
json metadata{"tags":["php","mbsubstr","mbstrimwidth"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #13616057/Trx e7e6863a6b43ea775efdeeb65c63fffae27ada2a
View Raw JSON Data
{
  "trx_id": "e7e6863a6b43ea775efdeeb65c63fffae27ada2a",
  "block": 13616057,
  "trx_in_block": 13,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:42:21",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "php",
      "author": "hqfzone",
      "permlink": "mbsubstr-mbstrimwidth",
      "title": "mb_substr() 和 mb_strimwidth() 精确截取字符串",
      "body": "<html>\n<p>&nbsp;估计很多人折腾博客时都有过截断字符串的需求,比如显示文章摘要、评论输出等。</p>\n<p>通常用到的是 mb_substr() 或 mb_strimwidth(),但是我发现,网上的很多代码并不严谨,比如很多没有加最后的编码参数,不加此参数则使用内部字符编码。</p>\n<p>因为通常我们的文件是 UTF-8 编码的,如果内部字符编码不是 UTF-8,就很可能出问题(内部字符编码可以用 mb_internal_encoding() 设置)。</p>\n<p>我在自己服务器(默认的内部字符编码为“ISO-8859-1”)上试了一下,详见下面的代码及结果(注释“//”后的内容为结果,其中“口”代表字符被截断后,无法正常显示的字节片段):</p>\n<pre><code>[ 本文假定 $str = 'qifu启福'; ]<br>\nmb_substr($str,0,4)<br>\n//qifu<br>\nmb_substr($str,0,5)<br>\n//qifu口<br>\nmb_substr($str,0,6)<br>\n//qifu口口<br>\nmb_substr($str,0,7)<br>\n//qifu启<br>\n<br>\nmb_substr($str,0,5,'utf-8')<br>\n//qifu启<br>\nmb_substr($str,0,6,'utf-8')<br>\n//qifu启福</code></pre>\n<p>很明显,不指定 UTF-8 编码时,由于中文字符占三个字节,截取时很容易被拆开,一个中文字符相当于三个英文字符。而指定编码以后,才真的是按字符个数,而不是按字节数截取,mb_strimwidth() 也是一样的。</p>\n<p>mb_substr() 截取的是字符个数,而 mb_strimwidth() 截取的是字符宽度,如下:</p>\n<pre><code>mb_strimwidth($str, 0, 4, '','utf-8')<br>\n//qifu<br>\nmb_strimwidth($str, 0, 5, '','utf-8')<br>\n//qifu<br>\nmb_strimwidth($str, 0, 6, '','utf-8')<br>\n//qifu启</code></pre>\n<p>可见 mb_strimwidth() 即不是按字节,也不是按字符截取,而是按照宽度。在 php.net 的说明中指出,多字节字符通常是单字节字符的两倍宽度,也就是说,英文字符占一个宽度,中文占两个,宽度不足以截取一个字符时则不取。</p>\n<p>当中英文混合时,这个其实比较适合保证截取后的字符串显示宽度一致。但是,如果网页的字体并不是等宽字体,效果也就体现不出来了,因为“m”和“i”所显示的宽度很可能不一样。</p>\n<p>另外,mb_strimwidth() 中如果指定截取后末尾添加字符串,则截取宽度包含该字符串,如下:</p>\n<pre><code>mb_strimwidth($str, 0, 3, '.','utf-8')<br>\n//qi.</code></pre>\n<p>如果使用这两个函数时,你仔细数一下输出结果,发现字符个数不太对劲,不妨根据本文所述修改代码试一下。&nbsp;</p>\n</html>",
      "json_metadata": "{\"tags\":[\"php\",\"mbsubstr\",\"mbstrimwidth\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
hqfzonepublished a new post: manifest
2017/07/12 10:42:15
parent author
parent permlinkmanifest
authorhqfzone
permlinkmanifest
titlemanifest让网页实现离线访问
body@@ -920,24 +920,40 @@ %E3%80%82%E6%AF%94%E5%A6%82%EF%BC%9A%3C/p%3E%0A%3Cp%3E +&nbsp;%3C/p%3E%0A%3Cpre%3E %3Ccode%3ECACHE @@ -965,16 +965,16 @@ EST%3Cbr%3E%0A - #version @@ -1077,16 +1077,21 @@ 1.0%3Cbr%3E%0A +%3Cbr%3E%0A FALLBACK @@ -1145,24 +1145,26 @@ %0A*%3C/code%3E%3C/p +re %3E%0A%3Cp%3E%E5%BC%95%E7%94%A8%E4%BA%86%E8%BF%99%E4%B8%AAma @@ -1440,24 +1440,40 @@ %E8%AF%A5%E9%A1%B5%E9%9D%A2%EF%BC%9A%3C/p%3E%0A%3Cp%3E +&nbsp;%3C/p%3E%0A%3Cpre%3E %3Ccode%3E// Che @@ -1517,36 +1517,20 @@ e load.%3C -/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E +br%3E%0A window.a @@ -1571,34 +1571,13 @@ ) %7B%3C -/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp; +br%3E%0A &nbs @@ -1652,34 +1652,13 @@ ) %7B%3C -/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp; +br%3E%0A &nbs @@ -1752,34 +1752,13 @@ ) %7B%3C -/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp; +br%3E%0A &nbs @@ -1826,34 +1826,13 @@ he.%3C -/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp; +br%3E%0A &nbs @@ -1919,34 +1919,13 @@ ss.%3C -/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp; +br%3E%0A &nbs @@ -1991,34 +1991,13 @@ ();%3C -/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp; +br%3E%0A &nbs @@ -2052,117 +2052,59 @@ ();%3C -/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp;&nbsp;&nbsp;&nbsp;%7D%3C/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp;&nbsp;%7D, false);%3C/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E +br%3E%0A &nbsp;&nbsp;&nbsp;%7D%3Cbr%3E%0A &nbsp;%7D, false);%3Cbr%3E%0A %7D, f @@ -2115,24 +2115,26 @@ );%3C/code%3E%3C/p +re %3E%0A%3Cp%3E%E4%B8%80%E6%97%A6%E8%A2%AB%E7%BC%93%E5%AD%98%EF%BC%8C%E4%BD%A0
json metadata{"tags":["manifest","web","html"],"links":["https://qifu.me/links/","https://qifu.me/hello/","https://www.html5rocks.com/zh/tutorials/appcache/beginner/"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #13616055/Trx fd6c0d4b32ab812a698af884034cf5f785e34d86
View Raw JSON Data
{
  "trx_id": "fd6c0d4b32ab812a698af884034cf5f785e34d86",
  "block": 13616055,
  "trx_in_block": 21,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:42:15",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "manifest",
      "author": "hqfzone",
      "permlink": "manifest",
      "title": "manifest让网页实现离线访问",
      "body": "@@ -920,24 +920,40 @@\n %E3%80%82%E6%AF%94%E5%A6%82%EF%BC%9A%3C/p%3E%0A%3Cp%3E\n+&nbsp;%3C/p%3E%0A%3Cpre%3E\n %3Ccode%3ECACHE \n@@ -965,16 +965,16 @@\n EST%3Cbr%3E%0A\n-\n #version\n@@ -1077,16 +1077,21 @@\n 1.0%3Cbr%3E%0A\n+%3Cbr%3E%0A\n FALLBACK\n@@ -1145,24 +1145,26 @@\n %0A*%3C/code%3E%3C/p\n+re\n %3E%0A%3Cp%3E%E5%BC%95%E7%94%A8%E4%BA%86%E8%BF%99%E4%B8%AAma\n@@ -1440,24 +1440,40 @@\n %E8%AF%A5%E9%A1%B5%E9%9D%A2%EF%BC%9A%3C/p%3E%0A%3Cp%3E\n+&nbsp;%3C/p%3E%0A%3Cpre%3E\n %3Ccode%3E// Che\n@@ -1517,36 +1517,20 @@\n e load.%3C\n-/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E\n+br%3E%0A\n window.a\n@@ -1571,34 +1571,13 @@\n ) %7B%3C\n-/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp;\n+br%3E%0A \n &nbs\n@@ -1652,34 +1652,13 @@\n ) %7B%3C\n-/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp;\n+br%3E%0A \n &nbs\n@@ -1752,34 +1752,13 @@\n ) %7B%3C\n-/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp;\n+br%3E%0A \n &nbs\n@@ -1826,34 +1826,13 @@\n he.%3C\n-/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp;\n+br%3E%0A \n &nbs\n@@ -1919,34 +1919,13 @@\n ss.%3C\n-/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp;\n+br%3E%0A \n &nbs\n@@ -1991,34 +1991,13 @@\n ();%3C\n-/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp;\n+br%3E%0A \n &nbs\n@@ -2052,117 +2052,59 @@\n ();%3C\n-/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp;&nbsp;&nbsp;&nbsp;%7D%3C/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E&nbsp;&nbsp;%7D, false);%3C/code%3E%3C/p%3E%0A%3Cp%3E%3Ccode%3E\n+br%3E%0A &nbsp;&nbsp;&nbsp;%7D%3Cbr%3E%0A &nbsp;%7D, false);%3Cbr%3E%0A\n %7D, f\n@@ -2115,24 +2115,26 @@\n );%3C/code%3E%3C/p\n+re\n %3E%0A%3Cp%3E%E4%B8%80%E6%97%A6%E8%A2%AB%E7%BC%93%E5%AD%98%EF%BC%8C%E4%BD%A0\n",
      "json_metadata": "{\"tags\":[\"manifest\",\"web\",\"html\"],\"links\":[\"https://qifu.me/links/\",\"https://qifu.me/hello/\",\"https://www.html5rocks.com/zh/tutorials/appcache/beginner/\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
hqfzoneupvoted (100.00%) @hqfzone / 2uzytm
2017/07/12 10:34:45
voterhqfzone
authorhqfzone
permlink2uzytm
weight10000 (100.00%)
Transaction InfoBlock #13615905/Trx 2fa0d28d7b833e41be2a747c4188df6c62bd7f3a
View Raw JSON Data
{
  "trx_id": "2fa0d28d7b833e41be2a747c4188df6c62bd7f3a",
  "block": 13615905,
  "trx_in_block": 10,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:34:45",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "hqfzone",
      "permlink": "2uzytm",
      "weight": 10000
    }
  ]
}
hqfzonepublished a new post: 2uzytm
2017/07/12 10:34:45
parent author
parent permlinkencoding
authorhqfzone
permlink2uzytm
title字符编码问题
body#稍微学习了下字符编码问题,总结下来: 最简单的应该是ASCII码了,其用一个字节(8比特)来编码128个字符,首位是0,即0xxxxxxx。 记事本中的ANSI编码方式,对于英文文件是ASCII编码,对于简体中文文件是GB2312编码,繁体中文文件是Big5编码。 然后是Unicode,其编码符范围可以涵盖世界上所有符号。 记事本中的Unicode是用两个字节存储,顺序方式为Big endian,反过来存就是Little endian,通过在每一个文件的最前面加入表示编码顺序的字符“FE FF”或“FF FE”(以十六进制表示)区别。 UTF-8是Unicode的一种实现方式,带有控制位,可变长度,解决了Unicode存储及识别的问题。规则为: ①单字节符号,字节的第一位设为0,后面7位为这个符号的Unicode码。因此,英语字母的UTF-8编码和ASCII码相同。 ②多(n)字节符号,第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10,其余的二进制位,全部为这个符号的Unicode码,从后往前填,剩余位补零。 上面的01串即通过此规则转换得出。 记事本中UTF-8文件的开头为“EF BB BF”,ANSI文件开头无这种标识。
json metadata{"tags":["encoding","character","utf8"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #13615905/Trx 2fa0d28d7b833e41be2a747c4188df6c62bd7f3a
View Raw JSON Data
{
  "trx_id": "2fa0d28d7b833e41be2a747c4188df6c62bd7f3a",
  "block": 13615905,
  "trx_in_block": 10,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:34:45",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "encoding",
      "author": "hqfzone",
      "permlink": "2uzytm",
      "title": "字符编码问题",
      "body": "#稍微学习了下字符编码问题,总结下来:\n\n最简单的应该是ASCII码了,其用一个字节(8比特)来编码128个字符,首位是0,即0xxxxxxx。\n记事本中的ANSI编码方式,对于英文文件是ASCII编码,对于简体中文文件是GB2312编码,繁体中文文件是Big5编码。\n\n然后是Unicode,其编码符范围可以涵盖世界上所有符号。\n记事本中的Unicode是用两个字节存储,顺序方式为Big endian,反过来存就是Little endian,通过在每一个文件的最前面加入表示编码顺序的字符“FE FF”或“FF FE”(以十六进制表示)区别。\n\nUTF-8是Unicode的一种实现方式,带有控制位,可变长度,解决了Unicode存储及识别的问题。规则为:\n①单字节符号,字节的第一位设为0,后面7位为这个符号的Unicode码。因此,英语字母的UTF-8编码和ASCII码相同。\n②多(n)字节符号,第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10,其余的二进制位,全部为这个符号的Unicode码,从后往前填,剩余位补零。\n上面的01串即通过此规则转换得出。\n记事本中UTF-8文件的开头为“EF BB BF”,ANSI文件开头无这种标识。",
      "json_metadata": "{\"tags\":[\"encoding\",\"character\",\"utf8\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2017/07/12 10:34:33
voterhqfzone
authorcheetah
permlinkcheetah-re-hqfzonehttp-csp
weight10000 (100.00%)
Transaction InfoBlock #13615901/Trx dc6ada9d7f57f85eea9ec009ba05184e52e89940
View Raw JSON Data
{
  "trx_id": "dc6ada9d7f57f85eea9ec009ba05184e52e89940",
  "block": 13615901,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:34:33",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "cheetah",
      "permlink": "cheetah-re-hqfzonehttp-csp",
      "weight": 10000
    }
  ]
}
hqfzoneupvoted (100.00%) @hqfzone / dns-glue-record
2017/07/12 10:29:33
voterhqfzone
authorhqfzone
permlinkdns-glue-record
weight10000 (100.00%)
Transaction InfoBlock #13615801/Trx 0225dabe1cc5f5792decbc03a6ac8328b34f7409
View Raw JSON Data
{
  "trx_id": "0225dabe1cc5f5792decbc03a6ac8328b34f7409",
  "block": 13615801,
  "trx_in_block": 16,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:29:33",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "hqfzone",
      "permlink": "dns-glue-record",
      "weight": 10000
    }
  ]
}
hqfzonepublished a new post: dns-glue-record
2017/07/12 10:29:33
parent author
parent permlinkdns
authorhqfzone
permlinkdns-glue-record
titleDNS解析及Glue Record
bodyDNS的查询过程大家都知道,从根域名服务器开始,以 huangqifu.com 为例,理论上要经过如下几步域名服务器得到结果: 1:[a-m].root-servers.net.(根域名服务器) 2:[a-m].gtld-servers.net.(顶级域名服务器) 3:f1g1ns[1-2].dnspod.net.(查询域名指定的NS服务器) 刚了解DNS时,我有过一个疑问,如果 qq.com 的域名NS是 ns1.qq.com ,那么上述查询不就陷入死循环了么?因为要知道 ns1.qq.com 对应的IP就需要到 qq.com 的NS服务器去查询,而这个服务器又是 ns1.qq.com ,如此周而复始下去…… 当然,解决方法很简单,上级DNS服务器(即负责.com的顶级域名服务器)中保存该NS的IP记录,查询时直接给出。前几天无意看到了这个记录的名称,叫“Glue Record”。所以实际上,我们用到的域名DNS都是需要到域名注册商那里去注册的,否则无法正常使用。在Godaddy中可以通过Host Names设置,万网也可以注册DNS。 在windows的命令提示符下,输入 nslookup qq.com a.gtld-servers.net. ,即可得到如下结果: 名称: qq.com Served by: - ns1.qq.com 101.226.68.138 14.17.19.139 qq.com - ns2.qq.com 101.227.169.106 222.73.76.225 qq.com - ns3.qq.com 182.140.167.157 182.140.177.149 qq.com - ns4.qq.com 111.161.48.230 125.39.202.108 203.205.144.156 qq.com 里面列出了 qq.com 的NS服务器,以及每个服务器的IP地址。 然后我发现,其实不光是域名的NS为其子域名的情况,只要该NS的域名与要解析的域名的上级DNS相同(即顶级域名服务器相同),都会同时返回NS的IP地址。比如 nslookup huangqifu.com a.gtld-servers.net. ,可以得到: 名称: huangqifu.com Served by: – f1g1ns1.dnspod.net 111.30.132.180 113.108.80.138 125.39.208.193 180.153.9.189 182.140.167.166 huangqifu.com – f1g1ns2.dnspod.net 101.226.30.224 112.90.82.194 115.236.137.40 115.236.151.191 182.140.167.188 huangqifu.com 虽然 huangqifu.com 与 f1g1ns1.dnspod.net 并无从属关系,但是因为.com与.net后缀的上级DNS服务器都是 a.gtld-servers.net. ,所以查询时直接给出了NS的IP。如果查询 nslookup qifu.me ns.nic.me. ,则无IP地址: 名称: qifu.me Served by: – f1g1ns1.dnspod.net qifu.me – f1g1ns2.dnspod.net qifu.me 更明显的,查询 nslookup ustc.edu.cn a.dns.cn ,结果如下: 名称: ustc.edu.cn Served by: – dns.edu.cn 202.112.0.35 edu.cn – ns2.cuhk.hk edu.cn – deneb.dfn.de edu.cn – ns2.cernet.net edu.cn – dns2.edu.cn 202.112.0.13 edu.cn 其中是.cn后缀的域名NS记录都直接有IP地址,其它则没有。 根域名服务器的IP地址是直接保存到系统中的,它在给出顶级域名服务器的记录时,会同时有对应的IP地址。 以上个人总结,写出来分享一下,如有纰漏请指出。
json metadata{"tags":["dns","gluerecord"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #13615801/Trx 0225dabe1cc5f5792decbc03a6ac8328b34f7409
View Raw JSON Data
{
  "trx_id": "0225dabe1cc5f5792decbc03a6ac8328b34f7409",
  "block": 13615801,
  "trx_in_block": 16,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:29:33",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "dns",
      "author": "hqfzone",
      "permlink": "dns-glue-record",
      "title": "DNS解析及Glue Record",
      "body": "DNS的查询过程大家都知道,从根域名服务器开始,以 huangqifu.com 为例,理论上要经过如下几步域名服务器得到结果:\n1:[a-m].root-servers.net.(根域名服务器)\n2:[a-m].gtld-servers.net.(顶级域名服务器)\n3:f1g1ns[1-2].dnspod.net.(查询域名指定的NS服务器)\n\n刚了解DNS时,我有过一个疑问,如果 qq.com 的域名NS是 ns1.qq.com ,那么上述查询不就陷入死循环了么?因为要知道 ns1.qq.com 对应的IP就需要到 qq.com 的NS服务器去查询,而这个服务器又是 ns1.qq.com ,如此周而复始下去……\n\n当然,解决方法很简单,上级DNS服务器(即负责.com的顶级域名服务器)中保存该NS的IP记录,查询时直接给出。前几天无意看到了这个记录的名称,叫“Glue Record”。所以实际上,我们用到的域名DNS都是需要到域名注册商那里去注册的,否则无法正常使用。在Godaddy中可以通过Host Names设置,万网也可以注册DNS。\n\n在windows的命令提示符下,输入 nslookup qq.com a.gtld-servers.net. ,即可得到如下结果:\n\n名称:    qq.com\nServed by:\n- ns1.qq.com\n          101.226.68.138\n          14.17.19.139\n          qq.com\n- ns2.qq.com\n          101.227.169.106\n          222.73.76.225\n          qq.com\n- ns3.qq.com\n          182.140.167.157\n          182.140.177.149\n          qq.com\n- ns4.qq.com\n          111.161.48.230\n          125.39.202.108\n          203.205.144.156\n          qq.com\n里面列出了 qq.com 的NS服务器,以及每个服务器的IP地址。\n\n然后我发现,其实不光是域名的NS为其子域名的情况,只要该NS的域名与要解析的域名的上级DNS相同(即顶级域名服务器相同),都会同时返回NS的IP地址。比如 nslookup huangqifu.com a.gtld-servers.net. ,可以得到:\n\n名称:    huangqifu.com\nServed by:\n– f1g1ns1.dnspod.net\n          111.30.132.180\n          113.108.80.138\n          125.39.208.193\n          180.153.9.189\n          182.140.167.166\n          huangqifu.com\n– f1g1ns2.dnspod.net\n          101.226.30.224\n          112.90.82.194\n          115.236.137.40\n          115.236.151.191\n          182.140.167.188\n          huangqifu.com\n虽然 huangqifu.com 与 f1g1ns1.dnspod.net 并无从属关系,但是因为.com与.net后缀的上级DNS服务器都是 a.gtld-servers.net. ,所以查询时直接给出了NS的IP。如果查询 nslookup qifu.me ns.nic.me. ,则无IP地址:\n\n名称:    qifu.me\nServed by:\n– f1g1ns1.dnspod.net\n\n          qifu.me\n– f1g1ns2.dnspod.net\n\n          qifu.me\n更明显的,查询 nslookup ustc.edu.cn a.dns.cn ,结果如下:\n\n名称:    ustc.edu.cn\nServed by:\n– dns.edu.cn\n          202.112.0.35\n          edu.cn\n– ns2.cuhk.hk\n\n          edu.cn\n– deneb.dfn.de\n\n          edu.cn\n– ns2.cernet.net\n\n          edu.cn\n– dns2.edu.cn\n          202.112.0.13\n          edu.cn\n其中是.cn后缀的域名NS记录都直接有IP地址,其它则没有。\n\n根域名服务器的IP地址是直接保存到系统中的,它在给出顶级域名服务器的记录时,会同时有对应的IP地址。\n\n以上个人总结,写出来分享一下,如有纰漏请指出。",
      "json_metadata": "{\"tags\":[\"dns\",\"gluerecord\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2017/07/12 10:24:21
parent authorhqfzone
parent permlinkhttp-csp
authorcheetah
permlinkcheetah-re-hqfzonehttp-csp
title
bodyHi! I am a robot. I just upvoted you! I found similar content that readers might be interested in: https://qifu.me/at201602211724/
json metadata
Transaction InfoBlock #13615697/Trx 11033c61b1f6ebbb3736cef95d2f532bf21e5ce7
View Raw JSON Data
{
  "trx_id": "11033c61b1f6ebbb3736cef95d2f532bf21e5ce7",
  "block": 13615697,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:24:21",
  "op": [
    "comment",
    {
      "parent_author": "hqfzone",
      "parent_permlink": "http-csp",
      "author": "cheetah",
      "permlink": "cheetah-re-hqfzonehttp-csp",
      "title": "",
      "body": "Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:\nhttps://qifu.me/at201602211724/",
      "json_metadata": ""
    }
  ]
}
cheetahupvoted (1.00%) @hqfzone / http-csp
2017/07/12 10:24:15
votercheetah
authorhqfzone
permlinkhttp-csp
weight100 (1.00%)
Transaction InfoBlock #13615695/Trx 767c50757566b773a58ec7ef0015c1e621d2a717
View Raw JSON Data
{
  "trx_id": "767c50757566b773a58ec7ef0015c1e621d2a717",
  "block": 13615695,
  "trx_in_block": 18,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:24:15",
  "op": [
    "vote",
    {
      "voter": "cheetah",
      "author": "hqfzone",
      "permlink": "http-csp",
      "weight": 100
    }
  ]
}
hqfzoneupvoted (100.00%) @hqfzone / http-csp
2017/07/12 10:22:45
voterhqfzone
authorhqfzone
permlinkhttp-csp
weight10000 (100.00%)
Transaction InfoBlock #13615665/Trx db392ac12fbf2349797e3077310023f8adc1f1c9
View Raw JSON Data
{
  "trx_id": "db392ac12fbf2349797e3077310023f8adc1f1c9",
  "block": 13615665,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:22:45",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "hqfzone",
      "permlink": "http-csp",
      "weight": 10000
    }
  ]
}
hqfzonepublished a new post: http-csp
2017/07/12 10:22:45
parent author
parent permlinkhttp
authorhqfzone
permlinkhttp-csp
titleHTTP传输中使用CSP防劫持插广告的方法
body<html> <p>&nbsp;万恶的运营商,不定期地在我们浏览的网页里插广告已经是公开的秘密了。最有效的防运营商劫持方法当然是HTTPS传输,但是受服务器限制,或者大量图片等内容需要使用HTTP传输,HTTPS有时候并不容易实现。</p> <p>今天发现了个有用的东西:Content Security Policy,简称CSP,它可以指定浏览器加载或执行哪些资源(包括css、js、图片、字体等),未指定的资源会被屏蔽。</p> <p>这样,如果运营商在我们的网页里面插入了广告代码,但其引用的js域名并未在CSP中列出,浏览器就不会让这个广告显示出来了。知乎就是用了这种方法。</p> <p>比如我只想允许自己的域名以及cdn.qifu.me中的css、js、图片资源被加载,就可以在HTTP头信息中加入以下规则:</p> <pre><code>Content-Security-Policy:default-src 'self' cdn.qifu.me</code></pre> <p>如果利用.htaccess配置的话,添加下面一行即可:</p> <pre><code>Header set Content-Security-Policy "default-src 'self' cdn.qifu.me"</code></pre> <p>如果你怕运营商劫持过程中替换掉你的http header导致上述信息被抹除,可以在html代码中的head标签内加入下面的内容:</p> <pre><code>&lt;meta http-equiv="Content-Security-Policy" content="default-src 'self' cdn.qifu.me" /&gt;</code></pre> <p>这里我用了最简单的默认指令default-src,其实后面还可以添加更多细化的指令,比如style-src、script-src、img-src、media-src、font-src等等,多个指令之间用分号隔开。每条指令后面跟空格,列出该指令允许的资源值,多个资源用空格隔开。’self’代表同源内容,也可以指定某个域名,甚至使用通配符,比如*.qifu.me,还可以包含协议和端口,或者用https:代表所有的HTTPS资源,当然,你也可以写’none’禁止所有。</p> <p>需要注意的是,上面这么写,所有的内联资源都失效了,也就是说标签内添加的style和js都不会被执行,如下所示,文字既不是红色,onclick代码也不会被执行。这样是最安全的,但是如果需要,可以加入’unsafe-inline’,类似于“default-src ‘self’ ‘unsafe-inline’ cdn.qifu.me”这样。</p> <pre><code>&lt;p style="color:#f00;" onclick="alert('Hello from Qifu');"&gt;我不是红色,点我也没有问候&lt;/p&gt;</code></pre> <p>与上述类似,不加’unsafe-eval’的话,所有的new Function、setTimeout、eval等动态js代码也不会被执行。但是,这些很少用到,建议不要加!</p> <p>这种方法,亲测Edge和Chrome48都是可以的,但是IE11不行,即使用“X-Content-Security-Policy”也不行,因为IE只是部分支持’sandbox’指令;老版的Safari和IE类似,使用非标准的“X-Webkit-CSP”,这俩非标都不建议使用,因为支持不完整或者有bug。所以强烈建议所有人升级最新版的浏览器,不要以能用就行的态度死守老版本,升级、试一下~</p> <p>感兴趣的可以试一下,一定要注意包含自己引用的所有资源,比如google字体、js、cdn之类的。&nbsp;</p> </html>
json metadata{"tags":["http","html","csp"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #13615665/Trx db392ac12fbf2349797e3077310023f8adc1f1c9
View Raw JSON Data
{
  "trx_id": "db392ac12fbf2349797e3077310023f8adc1f1c9",
  "block": 13615665,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:22:45",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "http",
      "author": "hqfzone",
      "permlink": "http-csp",
      "title": "HTTP传输中使用CSP防劫持插广告的方法",
      "body": "<html>\n<p>&nbsp;万恶的运营商,不定期地在我们浏览的网页里插广告已经是公开的秘密了。最有效的防运营商劫持方法当然是HTTPS传输,但是受服务器限制,或者大量图片等内容需要使用HTTP传输,HTTPS有时候并不容易实现。</p>\n<p>今天发现了个有用的东西:Content Security Policy,简称CSP,它可以指定浏览器加载或执行哪些资源(包括css、js、图片、字体等),未指定的资源会被屏蔽。</p>\n<p>这样,如果运营商在我们的网页里面插入了广告代码,但其引用的js域名并未在CSP中列出,浏览器就不会让这个广告显示出来了。知乎就是用了这种方法。</p>\n<p>比如我只想允许自己的域名以及cdn.qifu.me中的css、js、图片资源被加载,就可以在HTTP头信息中加入以下规则:</p>\n<pre><code>Content-Security-Policy:default-src 'self' cdn.qifu.me</code></pre>\n<p>如果利用.htaccess配置的话,添加下面一行即可:</p>\n<pre><code>Header set Content-Security-Policy \"default-src 'self' cdn.qifu.me\"</code></pre>\n<p>如果你怕运营商劫持过程中替换掉你的http header导致上述信息被抹除,可以在html代码中的head标签内加入下面的内容:</p>\n<pre><code>&lt;meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'self' cdn.qifu.me\" /&gt;</code></pre>\n<p>这里我用了最简单的默认指令default-src,其实后面还可以添加更多细化的指令,比如style-src、script-src、img-src、media-src、font-src等等,多个指令之间用分号隔开。每条指令后面跟空格,列出该指令允许的资源值,多个资源用空格隔开。’self’代表同源内容,也可以指定某个域名,甚至使用通配符,比如*.qifu.me,还可以包含协议和端口,或者用https:代表所有的HTTPS资源,当然,你也可以写’none’禁止所有。</p>\n<p>需要注意的是,上面这么写,所有的内联资源都失效了,也就是说标签内添加的style和js都不会被执行,如下所示,文字既不是红色,onclick代码也不会被执行。这样是最安全的,但是如果需要,可以加入’unsafe-inline’,类似于“default-src ‘self’ ‘unsafe-inline’ cdn.qifu.me”这样。</p>\n<pre><code>&lt;p style=\"color:#f00;\" onclick=\"alert('Hello from Qifu');\"&gt;我不是红色,点我也没有问候&lt;/p&gt;</code></pre>\n<p>与上述类似,不加’unsafe-eval’的话,所有的new Function、setTimeout、eval等动态js代码也不会被执行。但是,这些很少用到,建议不要加!</p>\n<p>这种方法,亲测Edge和Chrome48都是可以的,但是IE11不行,即使用“X-Content-Security-Policy”也不行,因为IE只是部分支持’sandbox’指令;老版的Safari和IE类似,使用非标准的“X-Webkit-CSP”,这俩非标都不建议使用,因为支持不完整或者有bug。所以强烈建议所有人升级最新版的浏览器,不要以能用就行的态度死守老版本,升级、试一下~</p>\n<p>感兴趣的可以试一下,一定要注意包含自己引用的所有资源,比如google字体、js、cdn之类的。&nbsp;</p>\n</html>",
      "json_metadata": "{\"tags\":[\"http\",\"html\",\"csp\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
hqfzoneupvoted (100.00%) @hqfzone / dmarc
2017/07/12 10:17:30
voterhqfzone
authorhqfzone
permlinkdmarc
weight10000 (100.00%)
Transaction InfoBlock #13615560/Trx ec8269640bbbb30e0488ceb1e15efd2dd9ff4cb9
View Raw JSON Data
{
  "trx_id": "ec8269640bbbb30e0488ceb1e15efd2dd9ff4cb9",
  "block": 13615560,
  "trx_in_block": 10,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:17:30",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "hqfzone",
      "permlink": "dmarc",
      "weight": 10000
    }
  ]
}
hqfzonepublished a new post: dmarc
2017/07/12 10:17:30
parent author
parent permlinkweb
authorhqfzone
permlinkdmarc
titleDMARC记录:谁在冒充你的域名发送邮件?
body<html> <p>&nbsp;用过独立域名邮箱的人大都应该知道,添加完MX记录以后,通常需要再加一条SPF(TXT)记录,为的就是告诉收件方服务器,哪些IP是权威的发信来源,这样当有人伪造你的域名发信时,由于IP不对,就可能被拒收或者归为垃圾邮件。比如我的域名(qifu.me)的SPF(TXT)记录如下:</p> <pre><code>v=spf1 include:spf.mail.qq.com a -all<br> #第一段的v是版本;<br> #后面是我指定的规则,第二段是说spf.mail.qq.com这个域名下的SPF记录里允许的IP,我这里同样也允许;<br> #第三段的a是说该域名(qifu.me)的A记录所对应的IP也是我允许的发信来源,注意这两个规则前面都默认省略了“+”,“+”代表接受;<br> #而最后一段的“-”则代表拒绝,也就是说,除了前面规则里提到的那些,其余所有都不允许,收件方服务器看到这个减号,就可以把非法的邮件拒收。当然,如果你改为“~”,则通常会把非法邮件放入垃圾箱。<br> #(还有其他一些规则,比如ip4、ip6、mx、ptr、exists,这里不再详述,但是除了ip4和ip6外,其余记录都要再进行一次DNS查询,所以数量最好不要太多)</code></pre> <p>那么问题来了,虽然仿冒我域名的邮件被拦截或者进入垃圾箱了,但到底都是谁在冒充我呢?正解就是DMARC记录,比如我在域名的子域“_dmarc”下添加了如下的一条TXT记录:</p> <pre><code>v=DMARC1; p=reject; ruf=mailto:[email protected]<br> #参数v指定版本;<br> #p代表规则,reject代表拒收伪造邮件,如果改为quarantine则标记为垃圾邮件,改为none则不处理;<br> #ruf则指定了一个邮箱地址,当收件方服务器检测到伪造邮件后,就会把伪造邮件的信息(比如时间、IP、主题等)发送到这个邮箱。<br> #(还有其它一些参数,不重要,此处亦不再详述)</code></pre> <p>收件方服务器首先根据你的SPF或者DKIM记录判定来信是否属于伪造邮件,然后再根据你的规则做相应处理和报告。目前据我测试,微软邮箱、Gmail、QQ邮箱、网易邮箱均支持该记录。</p> <p>设置了DMARC记录后,我收到过十几个伪造报告,大部分都是来自湖北、广东、福建的IP,主要发往了网易邮箱,主要是一些主题包含销售、产品、业务等关键词的垃圾信息。&nbsp;</p> </html>
json metadata{"tags":["web","mail","dns","dmarc"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #13615560/Trx ec8269640bbbb30e0488ceb1e15efd2dd9ff4cb9
View Raw JSON Data
{
  "trx_id": "ec8269640bbbb30e0488ceb1e15efd2dd9ff4cb9",
  "block": 13615560,
  "trx_in_block": 10,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:17:30",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "web",
      "author": "hqfzone",
      "permlink": "dmarc",
      "title": "DMARC记录:谁在冒充你的域名发送邮件?",
      "body": "<html>\n<p>&nbsp;用过独立域名邮箱的人大都应该知道,添加完MX记录以后,通常需要再加一条SPF(TXT)记录,为的就是告诉收件方服务器,哪些IP是权威的发信来源,这样当有人伪造你的域名发信时,由于IP不对,就可能被拒收或者归为垃圾邮件。比如我的域名(qifu.me)的SPF(TXT)记录如下:</p>\n<pre><code>v=spf1 include:spf.mail.qq.com a -all<br>\n#第一段的v是版本;<br>\n#后面是我指定的规则,第二段是说spf.mail.qq.com这个域名下的SPF记录里允许的IP,我这里同样也允许;<br>\n#第三段的a是说该域名(qifu.me)的A记录所对应的IP也是我允许的发信来源,注意这两个规则前面都默认省略了“+”,“+”代表接受;<br>\n#而最后一段的“-”则代表拒绝,也就是说,除了前面规则里提到的那些,其余所有都不允许,收件方服务器看到这个减号,就可以把非法的邮件拒收。当然,如果你改为“~”,则通常会把非法邮件放入垃圾箱。<br>\n#(还有其他一些规则,比如ip4、ip6、mx、ptr、exists,这里不再详述,但是除了ip4和ip6外,其余记录都要再进行一次DNS查询,所以数量最好不要太多)</code></pre>\n<p>那么问题来了,虽然仿冒我域名的邮件被拦截或者进入垃圾箱了,但到底都是谁在冒充我呢?正解就是DMARC记录,比如我在域名的子域“_dmarc”下添加了如下的一条TXT记录:</p>\n<pre><code>v=DMARC1; p=reject; ruf=mailto:[email protected]<br>\n#参数v指定版本;<br>\n#p代表规则,reject代表拒收伪造邮件,如果改为quarantine则标记为垃圾邮件,改为none则不处理;<br>\n#ruf则指定了一个邮箱地址,当收件方服务器检测到伪造邮件后,就会把伪造邮件的信息(比如时间、IP、主题等)发送到这个邮箱。<br>\n#(还有其它一些参数,不重要,此处亦不再详述)</code></pre>\n<p>收件方服务器首先根据你的SPF或者DKIM记录判定来信是否属于伪造邮件,然后再根据你的规则做相应处理和报告。目前据我测试,微软邮箱、Gmail、QQ邮箱、网易邮箱均支持该记录。</p>\n<p>设置了DMARC记录后,我收到过十几个伪造报告,大部分都是来自湖北、广东、福建的IP,主要发往了网易邮箱,主要是一些主题包含销售、产品、业务等关键词的垃圾信息。&nbsp;</p>\n</html>",
      "json_metadata": "{\"tags\":[\"web\",\"mail\",\"dns\",\"dmarc\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
2017/07/12 10:14:57
voterhqfzone
authorcheetah
permlinkcheetah-re-hqfzonemanifest
weight10000 (100.00%)
Transaction InfoBlock #13615509/Trx 8f477f7adc165979f6ef5477689fcb9961506550
View Raw JSON Data
{
  "trx_id": "8f477f7adc165979f6ef5477689fcb9961506550",
  "block": 13615509,
  "trx_in_block": 7,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:14:57",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "cheetah",
      "permlink": "cheetah-re-hqfzonemanifest",
      "weight": 10000
    }
  ]
}
2017/07/12 10:14:54
voterhqfzone
authorcheetah
permlinkcheetah-re-hqfzoneservice-worker
weight10000 (100.00%)
Transaction InfoBlock #13615508/Trx e59ebd4fddfaed9107502919c28da7b6570febe1
View Raw JSON Data
{
  "trx_id": "e59ebd4fddfaed9107502919c28da7b6570febe1",
  "block": 13615508,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:14:54",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "cheetah",
      "permlink": "cheetah-re-hqfzoneservice-worker",
      "weight": 10000
    }
  ]
}
2017/07/12 10:14:48
voterhqfzone
authorcheetah
permlinkcheetah-re-hqfzone2jshuk
weight10000 (100.00%)
Transaction InfoBlock #13615506/Trx daed46ce2a1f00a1305a46cc645ac9aeb2e57008
View Raw JSON Data
{
  "trx_id": "daed46ce2a1f00a1305a46cc645ac9aeb2e57008",
  "block": 13615506,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:14:48",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "cheetah",
      "permlink": "cheetah-re-hqfzone2jshuk",
      "weight": 10000
    }
  ]
}
2017/07/12 10:14:18
voterhqfzone
authorsteemitboard
permlinksteemitboard-notify-hqfzone-20170712t045641000z
weight10000 (100.00%)
Transaction InfoBlock #13615496/Trx e5e6a0531c216aa172779af6da23f07f6b35d69c
View Raw JSON Data
{
  "trx_id": "e5e6a0531c216aa172779af6da23f07f6b35d69c",
  "block": 13615496,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T10:14:18",
  "op": [
    "vote",
    {
      "voter": "hqfzone",
      "author": "steemitboard",
      "permlink": "steemitboard-notify-hqfzone-20170712t045641000z",
      "weight": 10000
    }
  ]
}
2017/07/12 04:56:39
parent authorhqfzone
parent permlink2jshuk
authorsteemitboard
permlinksteemitboard-notify-hqfzone-20170712t045641000z
title
bodyCongratulations @hqfzone! You have completed some achievement on Steemit and have been rewarded with new badge(s) : [![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/firstpost.png)](http://steemitboard.com/@hqfzone) You published your First Post [![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/firstvote.png)](http://steemitboard.com/@hqfzone) You made your First Vote [![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/firstvoted.png)](http://steemitboard.com/@hqfzone) You got a First Vote Click on any badge to view your own Board of Honor on SteemitBoard. For more information about SteemitBoard, click [here](https://steemit.com/@steemitboard) If you no longer want to receive notifications, reply to this comment with the word `STOP` > By upvoting this notification, you can help all Steemit users. Learn how [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)!
json metadata{"image":["https://steemitboard.com/img/notifications.png"]}
Transaction InfoBlock #13609144/Trx 7e551e9b81bf0c3fa6fc783ce93c7bdc26a59c3e
View Raw JSON Data
{
  "trx_id": "7e551e9b81bf0c3fa6fc783ce93c7bdc26a59c3e",
  "block": 13609144,
  "trx_in_block": 23,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T04:56:39",
  "op": [
    "comment",
    {
      "parent_author": "hqfzone",
      "parent_permlink": "2jshuk",
      "author": "steemitboard",
      "permlink": "steemitboard-notify-hqfzone-20170712t045641000z",
      "title": "",
      "body": "Congratulations @hqfzone! You have completed some achievement on Steemit and have been rewarded with new badge(s) :\n\n[![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/firstpost.png)](http://steemitboard.com/@hqfzone) You published your First Post\n[![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/firstvote.png)](http://steemitboard.com/@hqfzone) You made your First Vote\n[![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/firstvoted.png)](http://steemitboard.com/@hqfzone) You got a First Vote\n\nClick on any badge to view your own Board of Honor on SteemitBoard.\nFor more information about SteemitBoard, click [here](https://steemit.com/@steemitboard)\n\nIf you no longer want to receive notifications, reply to this comment with the word `STOP`\n\n> By upvoting this notification, you can help all Steemit users. Learn how [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)!",
      "json_metadata": "{\"image\":[\"https://steemitboard.com/img/notifications.png\"]}"
    }
  ]
}
2017/07/12 03:07:03
parent authorhqfzone
parent permlink2jshuk
authorcheetah
permlinkcheetah-re-hqfzone2jshuk
title
bodyHi! I am a robot. I just upvoted you! I found similar content that readers might be interested in: https://qifu.me/at201611221228/
json metadata
Transaction InfoBlock #13606952/Trx 885483342127145aa2b6bb49a2af10de102eac84
View Raw JSON Data
{
  "trx_id": "885483342127145aa2b6bb49a2af10de102eac84",
  "block": 13606952,
  "trx_in_block": 33,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T03:07:03",
  "op": [
    "comment",
    {
      "parent_author": "hqfzone",
      "parent_permlink": "2jshuk",
      "author": "cheetah",
      "permlink": "cheetah-re-hqfzone2jshuk",
      "title": "",
      "body": "Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:\nhttps://qifu.me/at201611221228/",
      "json_metadata": ""
    }
  ]
}
cheetahupvoted (1.00%) @hqfzone / 2jshuk
2017/07/12 03:07:00
votercheetah
authorhqfzone
permlink2jshuk
weight100 (1.00%)
Transaction InfoBlock #13606951/Trx 11a4a012288a25a57b8c79e4e6ca12c1db28dbf7
View Raw JSON Data
{
  "trx_id": "11a4a012288a25a57b8c79e4e6ca12c1db28dbf7",
  "block": 13606951,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-07-12T03:07:00",
  "op": [
    "vote",
    {
      "voter": "cheetah",
      "author": "hqfzone",
      "permlink": "2jshuk",
      "weight": 100
    }
  ]
}

Account Metadata

POSTING JSON METADATA
profile{"website":"https://qifu.me/","name":"_"}
JSON METADATA
profile{"website":"https://qifu.me/","name":"_"}
{
  "posting_json_metadata": {
    "profile": {
      "website": "https://qifu.me/",
      "name": "_"
    }
  },
  "json_metadata": {
    "profile": {
      "website": "https://qifu.me/",
      "name": "_"
    }
  }
}

Auth Keys

Owner
Single Signature
Public Keys
STM4yZph2Mr3Bi2KbS8P7esEykr591Wc3E8CcxKhrxWL6oCaJg5gp1/1
Active
Single Signature
Public Keys
STM7a5FYrzxiJkTBxcVLHqnGsA4XRVzQj7KXV31nHX9e6HE4QdwXA1/1
Posting
Single Signature
Public Keys
STM6ggrqWhhtoWrDmoUPpoE9cxmNM5TqAvP2pUTy4yXsBZ4TvLCTu1/1
Memo
STM8kBbX3QTUiVhMCmGgvK6sFwo4DBtdq9Y1kdmXHQTYP6vDZCAV5
{
  "owner": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM4yZph2Mr3Bi2KbS8P7esEykr591Wc3E8CcxKhrxWL6oCaJg5gp",
        1
      ]
    ]
  },
  "active": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM7a5FYrzxiJkTBxcVLHqnGsA4XRVzQj7KXV31nHX9e6HE4QdwXA",
        1
      ]
    ]
  },
  "posting": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM6ggrqWhhtoWrDmoUPpoE9cxmNM5TqAvP2pUTy4yXsBZ4TvLCTu",
        1
      ]
    ]
  },
  "memo": "STM8kBbX3QTUiVhMCmGgvK6sFwo4DBtdq9Y1kdmXHQTYP6vDZCAV5"
}

Witness Votes

0 / 30
No active witness votes.
[]