tag:blogger.com,1999:blog-195423622024-03-14T08:32:07.979+08:00闲来无事 三心二意
linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.comBlogger117125tag:blogger.com,1999:blog-19542362.post-39045268026931971822022-03-06T10:49:00.003+08:002022-03-06T10:49:39.115+08:00BlockChain 相关电子书<complete id="goog_101468799">@copyright of </complete><a class="jive-username-link jiveTT-hover-user " data-userid="35935" data-username="8018557" href="https://thehub.thomsonreuters.com/people/8018557">Sam Chadwick</a> - https://thehub.thomsonreuters.com/groups/bitcoin/blog/2017/09/10/blockchain-paper<br />
<br />
<br />
<h1 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 2em; font-weight: 600; padding-bottom: 0.3em;">
Blockchain Papers</h1>
<div style="color: #24292e; margin-bottom: 16px;">
A <a class="jive-link-external-small" href="https://github.com/decrypto-org/blockchain-papers" rel="nofollow">curated list</a> of blockchain-related academic papers.</div>
<hr style="background: rgb(225, 228, 232); border-image: none; border: 0px currentColor; color: #24292e; margin: 24px 0px;" />
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
General</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><span style="font-weight: 600;"><strong><a class="jive-link-external-small" href="https://bitcoin.com/bitcoin.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Bitcoin: A Peer-to-Peer Electronic Cash System</a></strong></span>. Nakamoto S. '08.</li>
<li style="margin-top: 0.25em;"><span style="font-weight: 600;"><strong><a class="jive-link-external-small" href="http://www.jbonneau.com/doc/BMCNKF15-IEEESP-bitcoin.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">SoK: Research Perspectives and Challenges for Bitcoin and Cryptocurrencies</a></strong></span>. Bonneau J, Miller A, Clark J, Narayanan A, Kroll JA, Felten EW. S&P '15.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Consensus</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><span style="font-weight: 600;"><strong><a class="jive-link-external-small" href="https://eprint.iacr.org/2014/765.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">The Bitcoin Backbone Protocol: Analysis and Applications</a></strong></span>. Garay J, Kiayias A, Leonardos N. EUROCRYPT '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://eprint.iacr.org/2016/1048.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">The Bitcoin Backbone Protocol with Chains of Variable Difficulty</a>. Garay J. Kiayias A, Leonardos N. '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://eprint.iacr.org/2016/454.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Analysis of the Blockchain Protocol in Asynchronous Networks</a>. Pass R, Seeman L, shelat a. EUROCRYPT '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://eprint.iacr.org/2016/545.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">On Trees, Chains and Fast Transactions in the Blockchain</a>. Kiayias A, Panagiotakos G. '16.</li>
<li style="margin-top: 0.25em;">"RSCoin":<span> </span><a class="jive-link-external-small" href="https://arxiv.org/pdf/1505.06895.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Centrally banked cryptocurrencies</a>. Danezis G, Meiklejohn S. '15.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Cryptography</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><a class="jive-link-external-small" href="https://pdfs.semanticscholar.org/ebae/9c7d91ea8b6a987642040a2142cc5ea67f7d.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">On Bitcoin as a public randomness source</a>. Bonneau J, Clark J, Goldfeder S. '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://eprint.iacr.org/2014/796" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Distributed Cryptography Based on the Proofs of Work</a>. Andrychowicz M, and Dziembowski S. '14.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Block generation parameters</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><a class="jive-link-external-small" href="https://eprint.iacr.org/2016/991.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Bootstrapping the Blockchain - Directly</a>. Garay JA, Kiayias A, Leonardos N, Panagiotakos G. '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://pdfs.semanticscholar.org/7de8/ff6bb85a020aa96f62dd86233fe9416550f3.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Speed-Security Tradeoffs in Blockchain Protocols</a>. Kiayias A, Panagiotakos G. '15.</li>
<li style="margin-top: 0.25em;">"GHOST":<span> </span><a class="jive-link-external-small" href="http://www.cs.huji.ac.il/~avivz/pubs/15/btc_ghost_full.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Secure High-Rate Transaction Processing in Bitcoin</a>. Sompolinsky Y, Zohar A. FC '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc15.ifca.ai/preproceedings/paper_101.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Inclusive Block Chain Protocols</a>. Lewenberg Y, Sompolinsky Y, Zohar A. FC '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://eprint.iacr.org/2016/555.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">On the Security and Performance of Proof of Work Blockchains</a>. Gervais A, Karame GO, Wüst K, Glykantzis V, Ritzdorf H, Capkun S. CCS '16.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Stake</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><a class="jive-link-external-small" href="https://pdfs.semanticscholar.org/1c14/549f7ba7d6a000d79a7d12255eb11113e6fa.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Ouroboros: A provably secure proof-of-stake blockchain protocol</a>. Kiayias A, Russell A, David B, Oliynykov R. '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://arxiv.org/pdf/1607.01341.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">ALGORAND: The Efficient and Democratic Ledger</a>. Micali S. '16.</li>
<li style="margin-top: 0.25em;">"ByzCoin":<span> </span><a class="jive-link-external-small" href="https://www.usenix.org/system/files/conference/usenixsecurity16/sec16_paper_kokoris-kogias.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Enhancing Bitcoin Security and Performance with Strong Consistency via Collective Signing</a>. Kogias EK, Jovanovic P, Gailly N, Khoffi I, Gasser L, Ford B. USENIX '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc16.ifca.ai/bitcoin/papers/BGM16.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Cryptocurrencies without Proof of Work</a>. Bentov I, Gabizon A, Mizrahi A. FC '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://eprint.iacr.org/2017/573.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Ouroboros Praos: An adaptively-secure, semi-synchronous proof-of-stake protocol</a>. Bernardo D, Gazi P, Kiayias A, Russell A. Crypto '17.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Attacks</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><span style="font-weight: 600;"><strong>"Selfish Mining":<span> </span><a class="jive-link-external-small" href="https://arxiv.org/pdf/1311.0243" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Majority Is Not Enough: Bitcoin Mining Is Vulnerable</a></strong></span>. Eyal I, Sirer EG. FC '14.</li>
<li style="margin-top: 0.25em;"><span style="font-weight: 600;"><strong><a class="jive-link-external-small" href="https://arxiv.org/pdf/1312.7013.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Theoretical Bitcoin Attacks with less than Half of the Computational Power</a></strong></span>. Bahack L. '13.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc16.ifca.ai/preproceedings/30_Sapirshtein.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Optimal Selfish Mining Strategies in Bitcoin</a>. Sapirshtein A, Sompolinsky Y, Zohar A. FC '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc16.ifca.ai/preproceedings/34_McCorry.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Refund attacks on Bitcoin’s Payment Protocol</a>. McCorry P, Shahandashti S, Hao F. FC '16.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Wallets</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><a class="jive-link-external-small" href="http://fc16.ifca.ai/bitcoin/papers/MES16.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Bitcoin Covenants</a>. Möser M, Eyal I, Sirer EG. FC '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/bitcoin/papers/bitcoin17-final28.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Enhancing Bitcoin Transactions with Covenants</a>. O’Connor R, Piekarska M. FC '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc15.ifca.ai/preproceedings/paper_15.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Hierarchical deterministic Bitcoin wallets that tolerate key leakage</a>. Gutoski G, Stebila D. FC '15.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Crime</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><a class="jive-link-external-small" href="http://fc15.ifca.ai/preproceedings/bitcoin/paper_15.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">ZombieCoin: Powering Next-Generation Botnets with Bitcoin</a>. Ali ST, McCorry P, Lee PH, Hao F. FC '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc16.ifca.ai/preproceedings/36_Vasek.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">The Bitcoin Brain Drain: A Short Paper on the Use and Abuse of Bitcoin Brain Wallets</a>. Vasek M, Bonneau J, Castellucci R, Keith C, Moore T. FC '16.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Economics</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><span style="font-weight: 600;"><strong><a class="jive-link-external-small" href="https://arxiv.org/pdf/1111.2626.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">On Bitcoin and Red Balloons</a></strong></span>. Babaioff M, Dobzinski S, Oren S, Zohar A. EC '12.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://www.cs.princeton.edu/~smattw/CKWN-CCS16.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">On the instability of Bitcoin without the block reward</a>. Carlsten M, Kalodner H, Weinberg SM, Narayanan A. CCS '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc15.ifca.ai/preproceedings/bitcoin/paper_8.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Trends, Tips, Tolls: A Longitudinal Study of Bitcoin Transaction Fees</a>. Möser M, Böhme R. FC '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc16.ifca.ai/bitcoin/papers/Bon16b.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Why buy when you can rent? Bribery attacks on Bitcoin-style consensus</a>. Bonneau J. FC '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc14.ifca.ai/bitcoin/papers/bitcoin14_submission_16.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Game-Theoretic Analysis of DDoS Attacks Against Bitcoin Mining Pools</a>. Johnson B, Laszka A, Grossklags J, Vasek M, Moore T. FC '14.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc15.ifca.ai/preproceedings/bitcoin/paper_13.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">When Bitcoin Mining Pools Run Dry A Game-Theoretic Analysis of the Long-Term Impact of Attacks Between Mining Pools</a>. Laszka A, Johnson B, Grossklags J. FC '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc16.ifca.ai/preproceedings/28_Schrijvers.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Incentive Compatibility of Bitcoin Mining Pool Reward Functions</a>. Schrijvers O, Bonneau J, Boneh D, Roughgarden T. FC '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc16.ifca.ai/preproceedings/29_Teutsch.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">When cryptocurrencies mine their own business</a>. Teutsch J, Jain S, Saxena P. FC '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/bitcoin/papers/bitcoin17-final26.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Incentivizing Blockchain Forks via Whale Transactions</a>. Liao K, Katz J. FC '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/bitcoin/papers/bitcoin17-final38.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Smart Contracts Make Bitcoin Mining Pools Vulnerable</a>. Velner Y, Teutsch J, Luu L. FC '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/bitcoin/papers/bitcoin17-final40.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Mixing Coins of Different Quality: A Game-Theoretic Approach</a>. Abramova S, Schöttle P, Böhme R. FC '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/bitcoin/papers/bitcoin17-final29.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Decentralized Prediction Market without Arbiter</a>. Bentov I, Mizrahi A, Rosenfeld M. FC '17.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Marketplaces and Trust</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><a class="jive-link-external-small" href="https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-soska-updated.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Measuring the Longitudinal Evolution of the Online Anonymous Marketplace Ecosystem</a>. Soska K, Christin N. USENIX '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://www.jbonneau.com/doc/GBGN17-FC-physical_escrow.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Escrow protocols for cryptocurrencies: How to buy physical goods using Bitcoin</a>. Goldfeder S, Bonneau J, Gennaro R, Narayanan A. FC '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/preproceedings/paper_37.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Trust Is Risk: A Decentralized Financial Trust Platform</a>. Thyfronitis Litos OS, Zindros D. FC '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://dspace.lib.ntua.gr/bitstream/handle/123456789/43147/pseudonymous-trust-2.pdf?sequence=1" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Trust in decentralized anonymous marketplaces</a>. Zindros D. '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://library.uniteddiversity.coop/Money_and_Economics/decentralizedcurrency.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Money as IOUs in social trust networks & a proposal for a decentralized currency network protocol</a>. Fugger R. '04.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://www.the-blockchain.com/docs/Ripple%20Consensus%20Whitepaper.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">The Ripple protocol consensus algorithm</a>. Schwartz D, Youngs N, Britto A. '14.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.696.93&amp=&rep=rep1&amp=&type=pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">The stellar consensus protocol: A federated model for internet-level consensus</a>. Mazières D. '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc15.ifca.ai/preproceedings/paper_75.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">There’s No Free Lunch, Even Using Bitcoin: Tracking the Popularity and Profits of Virtual Currency Scams</a>. Vasek M, Moore T. FC '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc14.ifca.ai/bitcoin/papers/bitcoin14_submission_5.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Challenges and Opportunities Associated with a Bitcoin-based Transaction Rating System</a>. Vandervort D. FC '14.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Privacy</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><a class="jive-link-external-small" href="http://ieeexplore.ieee.org/iel7/6547086/6547088/06547123.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Zerocoin: Anonymous distributed e-cash from bitcoin</a>. Miers I, Garman C, Green M, Rubin AD. S&P '13.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://ieeexplore.ieee.org/iel7/6954656/6956545/06956581.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Zerocash: Decentralized anonymous payments from bitcoin</a>. Sasson EB, Chiesa A, Garman C, Green M, Miers I, Tromer E, Virza M. S&P '14.</li>
<li style="margin-top: 0.25em;">"Monero":<span> </span><a class="jive-link-external-small" href="https://cryptonote.org/whitepaper.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">CryptoNote v2.0</a>. Saberhagen N. '13?</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc14.ifca.ai/bitcoin/papers/bitcoin14_submission_12.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Rational Zero: Economic Security for Zerocoin with Everlasting Anonymity</a>. Garman C, Green M, Miers I, Rubin A. FC '14.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://eprint.iacr.org/2014/077.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Mixcoin: Anonymity for bitcoin with accountable mixes</a>. Bonneau J, Narayanan A, Miller A, Clark J, Kroll JA, Felten EW. '14.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://pdfs.semanticscholar.org/a4ce/62a44770a33d1a19b5553f080d4f12e9e55d.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">TumbleBit: An untrusted Bitcoin-compatible anonymous payment hub</a>. Heilman E, Alshenibr L, Baldimtsi F, Scafuro A, Goldberg S. '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc16.ifca.ai/bitcoin/papers/HBG16.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Blindly Signed Contracts: Anonymous On-Blockchain and Off-Blockchain Bitcoin Transactions</a>. Heilman E, Baldimtsi F, Goldberg S. FC '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://crypsys.mmci.uni-saarland.de/projects/CoinShuffle/coinshuffle.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Coinshuffle: Practical decentralized coin mixing for bitcoin</a>. Ruffing T, Moreno-Sanchez P, Kate A. ESORICS '14.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://eprint.iacr.org/2012/584.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Quantitative analysis of the full bitcoin transaction graph</a>. Ron D, Shamir A. FC '13.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc14.ifca.ai/bitcoin/papers/bitcoin14_submission_2.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">How Did Dread Pirate Roberts Acquire and Protect His Bitcoin Wealth?</a>. Ron D, Shamir A. FC '14.</li>
<li style="margin-top: 0.25em;">"MoneroLink":<span> </span><a class="jive-link-external-small" href="http://monerolink.com/monerolink.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">An Empirical Analysis of Linkability in the Monero Blockchain</a>. Miller A, Möser M, Lee K, Narayanan A. '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://eprint.iacr.org/2015/1008.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Provisions: Privacy-preserving proofs of solvency for Bitcoin exchanges</a>. Dagher GG, Bünz B, Bonneau J, Clark J, Boneh D. CCS '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc14.ifca.ai/bitcoin/papers/bitcoin14_submission_19.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Increasing Anonymity in Bitcoin</a>. Saxena A, Misra J, Dhar A. FC '14.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc15.ifca.ai/preproceedings/bitcoin/paper_3.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Blindcoin Blinded, Accountable Mixes for Bitcoin</a>. Valenta L, Rowan B. FC '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://eprint.iacr.org/2015/675.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Hawk: The Blockchain Model of Cryptography and Privacy-Preserving Smart Contracts</a>. Kosba A, Miller A, Shi E, Wen Z, Papamanthou C. SP '16</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/bitcoin/papers/bitcoin17-final11.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Could Network Information Facilitate Address Clustering in Bitcoin?</a>. Neudecker T, Hartenstein H. FC '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://blog.koehntopp.de/uploads/Chaum.BlindSigForPayment.1982.PDF" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Blind signatures for untraceable payments</a>. Chaum D. CRYPTO '83.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/bitcoin/papers/bitcoin17-final17.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Exchange Pattern Mining in the Bitcoin Transaction Directed Hypergraph</a>. Ranshous S, Joslyn A, Kreyling S, Nowak K, Samatova N, West C, Winters C. FC '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/bitcoin/papers/bitcoin17-final41.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Confidential Assets</a>. Poelstra A, Back A, Friedenbach M, Maxwell G, Wuille P. FC '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/bitcoin/papers/bitcoin17-final6.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Mixing Confidential Transactions: Comprehensive Transaction Privacy for Bitcoin</a>. Ruffing T, Moreno-Sanchez P. FC '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/bitcoin/papers/bitcoin17-final23.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Switch Commitments: A Safety Switch for Confidential Transactions</a>. Ruffing T, Malavolta G. FC '17.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Sidechains, Higher layer and Scalability</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><a class="jive-link-external-small" href="http://newspaper23.com/ripped/2014/11/http-_____-___-_www___-blockstream___-com__-_sidechains.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Enabling Blockchain Innovations with Pegged Sidechains</a>. Back A, Corallo M, Dashjr L, Friedenbach M, Maxwell G, Miller A, Poelstra A, Timón J, Wuille P. '14.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc16.ifca.ai/bitcoin/papers/KLS16.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Proofs of Proofs of Work with Sublinear Complexity</a>. Kiayias A, Lamprou N, Stouka AP. FC '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://pdfs.semanticscholar.org/c8d2/b0c1f9b1ca739c340e9dc4a2ff71b5bfbb2e.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">A Fast and Scalable Payment Network with Bitcoin Duplex Micropayment Channels</a>. Decker C, Wattenhofer R. SSS '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://www.weusecoins.com/assets/pdf/library/Lightning%20Network%20Whitepaper.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">The bitcoin lightning network: Scalable off-chain instant payments</a>. Poon J, Dryja T. '15.</li>
<li style="margin-top: 0.25em;">"Deployable Lightning":<span> </span><a class="jive-link-external-small" href="https://github.com/ElementsProject/lightning/raw/master/doc/deployable-lightning.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Reaching The Ground With Lightning</a>. Russell R. '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://www.usenix.org/system/files/conference/nsdi16/nsdi16-paper-eyal.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Bitcoin-NG: A Scalable Blockchain Protocol</a>. Eyal I, Gencer AE, Sirer EG, Van Renesse R. USENIX '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc15.ifca.ai/preproceedings/bitcoin/paper_9.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">On the Malleability of Bitcoin Transactions</a>. Andrychowicz M, Dziembowski S, Malinowski D, Mazurek Ł. FC '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://arxiv.org/pdf/1612.07766" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Teechan: Payment Channels Using Trusted Execution Environments</a>. Lind J, Eyal I, Pietzuch P, Sirer EG. FC '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc16.ifca.ai/bitcoin/papers/CDE+16.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">On Scaling Decentralized Blockchains</a>. Croman K, Decker C, Eyal I, Gencer AE, Juels A, Kosba A, Miller A, Saxena P, Shi E, Sirer EG, Song D. FC '16.</li>
<li style="margin-top: 0.25em;">"Elastico":<span> </span><a class="jive-link-external-small" href="https://pdfs.semanticscholar.org/4ab6/b28bb3342cb4f65555a37418b6a25297425e.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">A secure sharding protocol for open blockchains</a>. Luu L, Narayanan V, Zheng C, Baweja K, Gilbert S, Saxena P. CCS '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/preproceedings/paper_34.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Improving Authenticated Dynamic Dictionaries, with Applications to Cryptocurrencies</a>. Reyzin L, Meshkov D, Chepurnoy A, Ivanov S. FC '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/preproceedings/paper_73.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Service-Oriented Sharding for Blockchains</a>. Gencer AE, Van Renesse R, Sirer EG. FC '17.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Fungibility</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><a class="jive-link-external-small" href="http://fc14.ifca.ai/bitcoin/papers/bitcoin14_submission_15.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Towards Risk Scoring of Bitcoin Transactions</a>. Möser M, Böhme R, Breuker D. FC '14.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Network</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><a class="jive-link-external-small" href="http://fc14.ifca.ai/bitcoin/papers/bitcoin14_submission_3.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">The Bitcoin P2P network</a>. Donet Donet JA, Perez-Sola C, Herrera-Joancomart J. FC '14.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc14.ifca.ai/bitcoin/papers/bitcoin14_submission_17.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Empirical Analysis of Denial-of-Service Attacks in the Bitcoin Ecosystem</a>. Vasek M, Thornton M, Moore T. FC '14.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-heilman.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Eclipse Attacks on Bitcoin's Peer-to-Peer Network</a>. Heilman E, Kendler A, Zohar A, Goldberg S. USENIX '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://arxiv.org/pdf/1605.07524v2" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Hijacking Bitcoin: Routing Attacks on Cryptocurrencies</a>. Apostolaki M, Zohar A, Vanbever L. S&P '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc16.ifca.ai/bitcoin/papers/BHMW16.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Stressing Out: Bitcoin “Stress Testing”</a>. Baqer K, Yuxing Huang D, McCoy D, Weaver N. FC '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="https://infoscience.epfl.ch/record/222858/files/199.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">The Honey Badger of BFT Protocols</a>. Miller A, Xia Y, Croman K, Shi E, Song D. CCS '16.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Smart Contracts</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li>"Ethereum":<span> </span><a class="jive-link-external-small" href="https://www.weusecoins.com/assets/pdf/library/Ethereum_white_paper-a_next_generation_smart_contract_and_decentralized_application_platform-vitalik-buterin.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">A next-generation smart contract and decentralized application platform</a>. Vitalik Buterin. '14.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://gavwood.com/paper.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Ethereum: A secure decentralised generalised transaction ledger</a>. Wood G. '14.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc14.ifca.ai/bitcoin/papers/bitcoin14_submission_10.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Fair Two-Party Computations via Bitcoin Deposits</a>. Andrychowicz M, Dziembowski S, Malinowski D, Mazurek Ł. FC '14.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc16.ifca.ai/bitcoin/papers/DAKMS16.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Step by Step Towards Creating a Safe Smart Contract: Lessons and Insights from a Cryptocurrency Lab</a>. Delmolino K, Arnett M, Kosba A, Miller A, Shi E. FC '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc16.ifca.ai/bitcoin/papers/Bon16a.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">EthIKS: Using Ethereum to audit a CONIKS key transparency log</a>. Bonneau J. FC '16.</li>
<li style="margin-top: 0.25em;">"Oyente":<span> </span><a class="jive-link-external-small" href="https://www.comp.nus.edu.sg/~loiluu/papers/oyente.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Making Smart Contracts Smarter</a>. Luu L, Chu DH, Olickel H, Saxena P, Hobor A. CCS '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://www.initc3.org/files/Gyges.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">The Ring of Gyges: Investigating the Future of Criminal Smart Contracts</a>. Juels A, Kosba A, Shi E. CCS '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://delivery.acm.org/10.1145/2980000/2978326/p270-zhang.pdf?ip=46.176.188.9&id=2978326&acc=OA&key=4D4702B0C3E38B35%2E4D4702B0C3E38B35%2E4D4702B0C3E38B35%2E594C525CFFA2AFAF&CFID=923932938&CFTOKEN=56121949&__acm__=1492299159_38039f3afa858f241818fdcf190e0200" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Town crier: An authenticated data feed for smart contracts</a>. Zhang F, Cecchetti E, Croman K, Juels A, Shi E. CCS '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/preproceedings/paper_80.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">A Smart Contract for Boardroom Voting with Maximum Voter Privacy</a>. McCorry P, Shahandashti SF, Hao F. FC '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/bitcoin/papers/bitcoin17-final39.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Constant-deposit multiparty lotteries on Bitcoin</a>. Bartoletti M, Zunino R. FC '17.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Formal Methods</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><a class="jive-link-external-small" href="http://fc16.ifca.ai/bitcoin/papers/TVR16.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Automated Verification of Electrum Wallet</a>. Turuani M, Voegtlin T, Rusinowitch M. FC '16.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Proof of work</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li>"Proof-of-work":<span> </span><a class="jive-link-external-small" href="https://web.cs.dal.ca/~abrodsky/7301/readings/DwNa93.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Pricing via processing or combatting junk mail</a>. Dwork C, Naor M. '92.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://www.hashcash.org/papers/hashcash.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Hashcash - A Denial of Service Counter-Measure</a>. Back A. '02.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc15.ifca.ai/preproceedings/bitcoin/paper_12.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Cuckoo Cycle: a memory bound graph-theoretic proof-of-work</a>. Tromp J. FC '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/bitcoin/papers/bitcoin17-final24.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">PieceWork: Generalized Outsourcing Control for Proofs of Work</a>. Daian P, Eyal I, Juels A, Sirer EG. FC '17.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://ieeexplore.ieee.org/iel7/6954656/6956545/06956582.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Permacoin: Repurposing bitcoin work for data preservation</a>. Miller A, Juels A, Shi E, Parno B, Katz J. Permacoin. S&P '14.</li>
</ul>
<h2 style="border-bottom-color: rgb(234, 236, 239); border-bottom-style: solid; border-bottom-width: 1px; color: #24292e; font-size: 1.5em; font-weight: 600; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Survey, Sociological & Anthropological</h2>
<ul style="color: #24292e; margin-bottom: 16px; padding-left: 2em;">
<li><a class="jive-link-external-small" href="http://fc15.ifca.ai/preproceedings/bitcoin/paper_2.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Issues in Designing a Bitcoin-Like Community Currency</a>. Vandervort D, Gaucas D, St Jacques R. FC '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc15.ifca.ai/preproceedings/bitcoin/paper_14.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">The Bitcoin Market Potential Index</a>. Hileman G. FC '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc15.ifca.ai/preproceedings/bitcoin/paper_16.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">Cryptographic Currencies from a Tech-Policy Perspective: Policy Issues and Technical Direction</a>. McReynolds E, Lerner A, Scott W, Roesner F, Kohno T. FC '15.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc16.ifca.ai/preproceedings/33_Krombholz.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">The Other Side of the Coin: User Experiences with Bitcoin Security and Privacy</a>. Krombholz K, Judmayer A, Gusenbauer M, Weippl E. FC '16.</li>
<li style="margin-top: 0.25em;"><a class="jive-link-external-small" href="http://fc17.ifca.ai/bitcoin/papers/bitcoin17-final32.pdf" rel="nofollow" style="background-color: transparent; color: #0366d6; text-decoration: none;">An analysis of Bitcoin OP_RETURN metadata</a>. Bartoletti M, Pompianu L. FC '17.</li>
</ul>
linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-82470921551737869572020-05-05T15:06:00.023+08:002022-03-06T10:08:08.360+08:00用 Visual C++ Build Tool 编译 Lua 5.3 源代码Windows 下用 Microsoft Visual C++ Build Tool 来编译 Lua 5.3 源代码 其实很简单。
<ol>
<li>打开一个编译命令行窗口</li>
<li>解开 Lua 5.3.x 的源代码到 C:\Lua53 </li>
<li>进入src目录, 执行下面的命令</li>
</ol>
<blockquote><span style="font-family: courier;">
REM cd src<br />
del *.o *.obj *.res<br />
cl /MD /O2 /c /DLUA_BUILD_AS_DLL *.c<br />
ren lua.obj lua.o<br />
ren luac.obj luac.o<br />
IF EXIST wmain.obj ren wmain.obj wmain.o<br />
link /DLL /OUT:lua53.dll *.obj<br />
link /OUT:lua53.exe lua.o lua53.lib<br />
lib /OUT:lua53a.lib *.obj<br />
link /OUT:luac.exe luac.o lua53a.lib<br />
IF NOT EXIST wlua.rc goto DEPLOY<br />
rc wlua.rc<br />
link /subsystem:windows /OUT:lua53w.exe wmain.o lua.o wlua.res lua53.lib<br />
del /y *.o *.obj *.res<br />
:DEPLOY<br />
move /y *.exe ..<br />
mkdir /y ..\lib<br />
move /y *.lib ..\lib\<br />
</blockquote>
linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-68411819704270344122020-01-28T22:22:00.003+08:002020-05-05T16:57:15.400+08:00利用 socat 搭建一个简易 VPN 的服务端脚本<h1>Server Side - Bash</h1>
<pre><code class="lang-bash">#!/bin/bash
[[ $# -lt 3 ]] && echo "Usage: $0 tunID udp-port remote.lan.ip/net" && exit 255
TUN_ID=$(echo $1 | tr -d '[a-zA-Z]+')
[[ "$TUN_ID" != "$(( $TUN_ID / 1 ))" ]] && echo "tunID:\"$1\" must suffix with a number!" && exit 254
## Debug
TUN_DEV=$1
LOCAL_INT="192.168.2.$(( $TUN_ID % 64 * 4 + 1 ))/30"
REMOTE_INT="192.168.2.$(( $TUN_ID % 64 * 4 + 2 ))"
UDP_PORT=$2
REMOTE_LAN=$3
# kill exists
pkill -f "tun-name=$TUN_DEV"
socat tun:$LOCAL_INT,tun-name=$TUN_DEV,up udp4-listen:$UDP_PORT,fork &
sleep 3
# tunX options
ip link set $TUN_DEV mtu 1452
shift 2
# Add all the given subnet to SNAT
for net in $*;do
ip route add $net dev $TUN_DEV
iptables -t nat -I POSTROUTING -s $net -j SNAT --to-source $(hostname -i)
done
</code>
</pre>
<h1>Client Side - BusyBox</h1>
<pre><code class="lang-bash">#!/bin/sh
[[ $# -lt 2 ]] && echo "Usage: $0 tunID remote.ip.udp:port" && exit 255
TUN_ID=$(echo $1 | tr -d '[A-Za-z]+')
[[ "$TUN_ID" != "$(( $TUN_ID / 1 ))" ]] && echo "tunID:\"$1\" must suffix with a number!" && exit 254
TUN_DEV=$1
LOCAL_INT="192.168.2.$(( $TUN_ID % 64 * 4 + 2 ))/30"
REMOTE_INT="192.168.2.$(( $TUN_ID % 64 * 4 + 1 ))"
REMOTE_UDP=$2
kill $(ps | grep tun-name=$TUN_DEV | cut -d ' ' -f 1) 2>/dev/null
socat tun:$LOCAL_INT,tun-name=$TUN_DEV,up udp4-connect:$REMOTE_UDP &
sleep 3
# MTU
ip link set $TUN_DEV mtu 1452
# IP Route2
ip route add default via $REMOTE_INT table $TUN_DEV
ip rule add from $REMOTE_INT table $TUN_DEV
</code>
</pre>
linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-18506006687818640002019-12-28T08:27:00.003+08:002020-05-05T16:03:43.940+08:00<p>如何在 OpenWRT 下产生随机数:</p>
<pre><code class="bash">MY_RANDOM=$(head /dev/urandom | tr -dc "0123456789" | head -c4)
</code></pre>
<p>如果是的Bash, Zsh, 或者BusyBox启用了RANDOM, 是可以直接使用内置的 $RANDOM 变量</p>
<pre><code class="bash">MY_RANDOM=$RANDOM</code></pre>
<p>如果需要限定数字的大小,可以使用 Shell 内置的运算表达式 <b>$(( expr ))</b>:</p>
<pre><code class="bash">MY_VAL=$(( MY_RANDOM % 200 + 1 ))</code></pre>
linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-56181132812555012062019-03-07T14:45:00.004+08:002019-03-07T14:48:32.442+08:00拼音加加双拼输入方案为Windows 10 添加<b>拼音加加双拼</b>输入方案<br />
<br />
把下面的内容保存为 ppp.reg, 然后双击导入注册表,Pinyin PlusPlus双拼输入方案就有了。 <br />
<br />
<blockquote class="tr_bq">
Windows Registry Editor Version 5.00<br />
<br />
[HKEY_CURRENT_USER\Software\Microsoft\InputMethod\Settings\CHS]<br />
"UserDefinedDoublePinyinScheme0"="Pinyin PlusPlus*1*^*uivsfgdwrtqbjhkmlqynypbxchxvzovx"<br />
<br /></blockquote>
linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-84425828535654088242019-01-16T14:14:00.000+08:002019-01-16T14:15:42.151+08:00Compare of Streaming Processing Engines<h2>
<span style="font-weight: normal;">Compare between
</span></h2>
<div>
<ul>
<li>Apache Spark Streaming</li>
<li>Apache Flink</li>
<li>Apache Storm</li>
<li>Intel GearPump</li>
</ul>
<div>
<a href="https://drive.google.com/open?id=1wXje-bn5nk4vIq65kHM5eI-EMErU2wX2">Google Drive Link</a> </div>
</div>
linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-26146833993364672632018-09-03T23:19:00.001+08:002018-09-03T23:19:48.801+08:00vimrc 备份<style type="text/css">
<!--
#vimCodeElement { white-space: pre-wrap; font-family: monospace; color: #ffffff; background-color: #000000; }
body { font-family: monospace; color: #ffffff; background-color: #000000; }
* { font-size: 1em; }
.LineNr { color: #ffff00; }
.Comment { color: #80a0ff; }
.Constant { color: #ffa0a0; }
.Special { color: #ffa500; }
.Identifier { color: #40ffff; }
.Statement { color: #ffff60; font-weight: bold; }
.PreProc { color: #ff80ff; }
.Type { color: #60ff60; font-weight: bold; }
-->
</style>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="Comment">"" Let's start VIM journey</span>
<span id="L2" class="LineNr"> 2 </span><span class="Statement">set</span> <span class="PreProc">nocompatible</span>
<span id="L3" class="LineNr"> 3 </span>
<span id="L4" class="LineNr"> 4 </span><span class="Comment">"" Include default settings</span>
<span id="L5" class="LineNr"> 5 </span><span class="Comment">"source $VIMRUNTIME/vimrc_example.vim</span>
<span id="L6" class="LineNr"> 6 </span><span class="Comment">"source $VIMRUNTIME/gvimrc_example.vim</span>
<span id="L7" class="LineNr"> 7 </span>
<span id="L8" class="LineNr"> 8 </span><span class="Comment">"" shell settings</span>
<span id="L9" class="LineNr"> 9 </span><span class="Statement">let</span> <span class="PreProc">$PATH</span><span class="Statement">=</span><span class="Constant">"$HOME/bin;C:/msys64/usr/bin;C:/msys64/mingw64/bin;C:/Windows;C:/Windows/System32"</span>
<span id="L10" class="LineNr"> 10 </span><span class="Statement">set</span> <span class="PreProc">shell</span>=bash.exe
<span id="L11" class="LineNr"> 11 </span><span class="Statement">set</span> <span class="PreProc">shellslash</span>
<span id="L12" class="LineNr"> 12 </span>
<span id="L13" class="LineNr"> 13 </span><span class="Comment">"" Don't need ugly files</span>
<span id="L14" class="LineNr"> 14 </span><span class="Statement">set</span> <span class="PreProc">backupdir</span>=c<span class="Statement">:</span>/temp/vim/backup
<span id="L15" class="LineNr"> 15 </span><span class="Statement">set</span> <span class="PreProc">directory</span>=c<span class="Statement">:</span>/temp/vim/swap
<span id="L16" class="LineNr"> 16 </span><span class="Statement">set</span> <span class="PreProc">nobackup</span>
<span id="L17" class="LineNr"> 17 </span><span class="Statement">set</span> <span class="PreProc">swapfile</span>
<span id="L18" class="LineNr"> 18 </span><span class="Statement">set</span> <span class="PreProc">undodir</span>=c<span class="Statement">:</span>/temp/vim/undo
<span id="L19" class="LineNr"> 19 </span><span class="Statement">set</span> <span class="PreProc">undofile</span>
<span id="L20" class="LineNr"> 20 </span><span class="Statement">set</span> <span class="PreProc">writebackup</span>
<span id="L21" class="LineNr"> 21 </span>
<span id="L22" class="LineNr"> 22 </span><span class="Comment">"" UI settings</span>
<span id="L23" class="LineNr"> 23 </span><span class="Statement">set</span> <span class="PreProc">cmdheight</span>=2
<span id="L24" class="LineNr"> 24 </span><span class="Comment">"set guioptions-=t</span>
<span id="L25" class="LineNr"> 25 </span><span class="Statement">set</span> <span class="PreProc">laststatus</span>=2
<span id="L26" class="LineNr"> 26 </span><span class="Statement">set</span> <span class="PreProc">lazyredraw</span>
<span id="L27" class="LineNr"> 27 </span><span class="Statement">set</span> <span class="PreProc">lines</span>=35 <span class="PreProc">columns</span>=160
<span id="L28" class="LineNr"> 28 </span><span class="Statement">set</span> <span class="PreProc">number</span>
<span id="L29" class="LineNr"> 29 </span><span class="Statement">set</span> <span class="PreProc">renderoptions</span>=type<span class="Statement">:</span>directx
<span id="L30" class="LineNr"> 30 </span><span class="Statement">set</span> <span class="PreProc">ruler</span>
<span id="L31" class="LineNr"> 31 </span><span class="Statement">set</span> <span class="PreProc">showcmd</span>
<span id="L32" class="LineNr"> 32 </span><span class="Statement">set</span> <span class="PreProc">wildmenu</span>
<span id="L33" class="LineNr"> 33 </span>
<span id="L34" class="LineNr"> 34 </span><span class="Comment">"colorscheme torte</span>
<span id="L35" class="LineNr"> 35 </span><span class="Statement">colorscheme</span> koehler
<span id="L36" class="LineNr"> 36 </span>
<span id="L37" class="LineNr"> 37 </span><span class="Comment">"" Tab/Space related</span>
<span id="L38" class="LineNr"> 38 </span><span class="Statement">set</span> <span class="PreProc">expandtab</span>
<span id="L39" class="LineNr"> 39 </span><span class="Statement">set</span> <span class="PreProc">shiftwidth</span>=4
<span id="L40" class="LineNr"> 40 </span><span class="Statement">set</span> <span class="PreProc">softtabstop</span>=4
<span id="L41" class="LineNr"> 41 </span><span class="Statement">set</span> <span class="PreProc">tabstop</span>=4
<span id="L42" class="LineNr"> 42 </span>
<span id="L43" class="LineNr"> 43 </span><span class="Comment">"" IME settings</span>
<span id="L44" class="LineNr"> 44 </span><span class="Statement">if</span> <span class="Identifier">has</span><span class="Special">(</span><span class="Constant">"multi_byte"</span><span class="Special">)</span>
<span id="L45" class="LineNr"> 45 </span> <span class="Statement">set</span> <span class="PreProc">encoding</span>=utf-8
<span id="L46" class="LineNr"> 46 </span><span class="Comment"> "let &termencoding = &encoding</span>
<span id="L47" class="LineNr"> 47 </span> <span class="Statement">set</span> <span class="PreProc">termencoding</span>=unicode
<span id="L48" class="LineNr"> 48 </span><span class="Comment"> " Set default encoding as UTF-8 with BOM</span>
<span id="L49" class="LineNr"> 49 </span> <span class="Statement">setglobal</span> <span class="PreProc">fileencoding</span>=utf-8 <span class="Comment">"bomb "bomb introduce problem for *nix</span>
<span id="L50" class="LineNr"> 50 </span> <span class="Statement">set</span> <span class="PreProc">fileencodings</span>=ucs-bom<span class="Statement">,</span>utf-8<span class="Statement">,</span>gb18030<span class="Statement">,</span>cp936<span class="Statement">,</span>cp950<span class="Statement">,</span>latin1
<span id="L51" class="LineNr"> 51 </span><span class="Comment"> " Walkaround the encoding problem for fenc=utf-8 && enc=ucs-2</span>
<span id="L52" class="LineNr"> 52 </span> <span class="Statement">augroup</span> i18n
<span id="L53" class="LineNr"> 53 </span> <span class="Statement">autocmd</span>!
<span id="L54" class="LineNr"> 54 </span> <span class="Statement">autocmd</span> <span class="Type">BufReadPost</span> * <span class="Statement">if</span> &<span class="PreProc">fileencoding</span> == <span class="Constant">"utf-8"</span> | <span class="Statement">let</span> &<span class="PreProc">encoding</span> = &<span class="PreProc">fileencoding</span> | <span class="Statement">endif</span>
<span id="L55" class="LineNr"> 55 </span> <span class="Statement">augroup</span> END
<span id="L56" class="LineNr"> 56 </span><span class="Statement">endif</span>
<span id="L57" class="LineNr"> 57 </span>
<span id="L58" class="LineNr"> 58 </span><span class="Comment">"" Enable the Chinese characters</span>
<span id="L59" class="LineNr"> 59 </span><span class="Comment">"set guifont=Fira_Code:h11:cANSI,NSimSun:h12:cGB2312</span>
<span id="L60" class="LineNr"> 60 </span><span class="Statement">set</span> <span class="PreProc">guifont</span>=Iosevka<span class="Statement">:</span>h12<span class="Statement">:</span>cANSI<span class="Statement">:</span>qDRAFT <span class="Comment">",SimHei:h12:cGB2312:qDRAFT</span>
<span id="L61" class="LineNr"> 61 </span><span class="Comment">"set guifontwide=SimHei:h12:cGB2312</span>
<span id="L62" class="LineNr"> 62 </span><span class="Comment">"set guifontwide=Microsoft_YaHei:h12:cGB2312</span>
<span id="L63" class="LineNr"> 63 </span><span class="Statement">set</span> <span class="PreProc">guifontwide</span>=Noto_Mono<span class="Statement">:</span>h12<span class="Statement">:</span>cGB2312
<span id="L64" class="LineNr"> 64 </span>
<span id="L65" class="LineNr"> 65 </span><span class="Comment">"" IME</span>
<span id="L66" class="LineNr"> 66 </span><span class="Statement">if</span> <span class="Identifier">has</span><span class="Special">(</span><span class="Constant">'multi_byte_ime'</span><span class="Special">)</span>
<span id="L67" class="LineNr"> 67 </span><span class="Comment"> "未开启IME时光标背景色</span>
<span id="L68" class="LineNr"> 68 </span> <span class="Statement">hi</span> <span class="Type">Cursor</span> <span class="Type">guifg</span>=<span class="PreProc">bg</span> <span class="Type">guibg</span>=<span class="Type">Orange</span> <span class="Type">gui</span>=<span class="PreProc">NONE</span>
<span id="L69" class="LineNr"> 69 </span><span class="Comment"> "开启IME时光标背景色</span>
<span id="L70" class="LineNr"> 70 </span> <span class="Statement">hi</span> <span class="Type">CursorIM</span> <span class="Type">guifg</span>=<span class="PreProc">NONE</span> <span class="Type">guibg</span>=<span class="Type">Skyblue</span> <span class="Type">gui</span>=<span class="PreProc">NONE</span>
<span id="L71" class="LineNr"> 71 </span><span class="Comment"> " 关闭Vim的自动切换IME输入法(插入模式和检索模式)</span>
<span id="L72" class="LineNr"> 72 </span> <span class="Statement">set</span> <span class="PreProc">iminsert</span>=0 <span class="PreProc">imsearch</span>=0
<span id="L73" class="LineNr"> 73 </span><span class="Comment"> " 插入模式输入法状态未被记录时,默认关闭IME</span>
<span id="L74" class="LineNr"> 74 </span> <span class="Statement">inoremap</span> <span class="Special"><</span><span class="Special">silent</span><span class="Special">></span> <span class="Special"><</span><span class="Special">ESC</span><span class="Special">></span> <span class="Special"><</span><span class="Special">ESC</span><span class="Special">></span>:set iminsert=0<span class="Special"><</span><span class="Special">CR</span><span class="Special">></span>
<span id="L75" class="LineNr"> 75 </span><span class="Statement">endif</span>
<span id="L76" class="LineNr"> 76 </span>
<span id="L77" class="LineNr"> 77 </span><span class="Comment">"" Useful Plugins</span>
<span id="L78" class="LineNr"> 78 </span><span class="Statement">packadd</span> <span class="Statement">vim</span><span class="Statement">-</span>fugitive
<span id="L79" class="LineNr"> 79 </span><span class="Comment">"" Plugin - airline</span>
<span id="L80" class="LineNr"> 80 </span><span class="Statement">let</span> <span class="Identifier">g:airline_theme</span><span class="Statement">=</span><span class="Constant">'solarized'</span>
<span id="L81" class="LineNr"> 81 </span><span class="Statement">let</span> <span class="Identifier">g:airline_detect_iminsert</span><span class="Statement">=</span><span class="Constant">1</span>
<span id="L82" class="LineNr"> 82 </span><span class="Statement">let</span> <span class="Identifier">g:airline_highlighting_cache</span> <span class="Statement">=</span> <span class="Constant">1</span>
<span id="L83" class="LineNr"> 83 </span><span class="Statement">let</span> <span class="Identifier">g:airline_powerline_fonts</span> <span class="Statement">=</span> <span class="Constant">1</span>
<span id="L84" class="LineNr"> 84 </span><span class="Statement">let</span> <span class="Identifier">g:airline#extensions#tabline#enabled</span> <span class="Statement">=</span> <span class="Constant">1</span>
<span id="L85" class="LineNr"> 85 </span><span class="Statement">packadd</span> <span class="Statement">vim</span><span class="Statement">-</span>airline
<span id="L86" class="LineNr"> 86 </span><span class="Statement">packadd</span> <span class="Statement">vim</span><span class="Statement">-</span>airline<span class="Statement">-</span>themes
<span id="L87" class="LineNr"> 87 </span>
<span id="L88" class="LineNr"> 88 </span><span class="Comment">"" Plugins</span>
<span id="L89" class="LineNr"> 89 </span><span class="Statement">packadd</span>! emmet<span class="Statement">-</span><span class="Statement">vim</span>
<span id="L90" class="LineNr"> 90 </span><span class="Statement">packadd</span>! ctrlp<span class="Statement">.</span><span class="Statement">vim</span>
<span id="L91" class="LineNr"> 91 </span><span class="Statement">packadd</span>! nerdtree
<span id="L92" class="LineNr"> 92 </span>
<span id="L93" class="LineNr"> 93 </span><span class="Comment">"" Key Maps</span>
<span id="L94" class="LineNr"> 94 </span><span class="Comment">"" display the syntax name under the cursor</span>
<span id="L95" class="LineNr"> 95 </span><span class="Statement">map</span> <span class="Special"><</span><span class="Special">F12</span><span class="Special">></span> :echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "name")<span class="Special"><</span><span class="Special">CR</span><span class="Special">></span>
<span id="L96" class="LineNr"> 96 </span><span class="Comment">"" We can navigate the list by using the <F3> and <S-F3></span>
<span id="L97" class="LineNr"> 97 </span><span class="Statement">map</span> <span class="Special"><</span><span class="Special">F3</span><span class="Special">></span> :cnext<span class="Special"><</span><span class="Special">CR</span><span class="Special">></span>
<span id="L98" class="LineNr"> 98 </span><span class="Statement">map</span> <span class="Special"><</span><span class="Special">S-F3</span><span class="Special">></span> :cprevious<span class="Special"><</span><span class="Special">CR</span><span class="Special">></span>
<span id="L99" class="LineNr"> 99 </span><span class="Comment">"" Let's help the tab navigation a little</span>
<span id="L100" class="LineNr">100 </span><span class="Statement">map</span> <span class="Special"><</span><span class="Special">F4</span><span class="Special">></span> :try\|:next\|finish\|catch\|:tabnext\|endtry<span class="Special"><</span><span class="Special">CR</span><span class="Special">></span>
<span id="L101" class="LineNr">101 </span><span class="Statement">map</span> <span class="Special"><</span><span class="Special">S-F4</span><span class="Special">></span> :bdelete<span class="Special"><</span><span class="Special">CR</span><span class="Special">></span>
<span id="L102" class="LineNr">102 </span><span class="Comment">"" Tlist and NERDTree</span>
<span id="L103" class="LineNr">103 </span><span class="Statement">map</span> <span class="Special"><</span><span class="Special">F5</span><span class="Special">></span> :NERDTreeToggle<span class="Special"><</span><span class="Special">CR</span><span class="Special">></span>
<span id="L104" class="LineNr">104 </span><span class="Statement">map</span> <span class="Special"><</span><span class="Special">S-F5</span><span class="Special">></span> :Tlist<span class="Special"><</span><span class="Special">CR</span><span class="Special">></span>
<span id="L105" class="LineNr">105 </span><span class="Statement">set</span> <span class="PreProc">tags</span>=./tags<span class="Statement">,</span>../tags<span class="Statement">,</span>../../tags<span class="Statement">,</span>../../../tags
<span id="L106" class="LineNr">106 </span><span class="Comment">"" open Terminal</span>
<span id="L107" class="LineNr">107 </span><span class="Statement">tmap</span> <span class="Special"><</span><span class="Special">F9</span><span class="Special">></span> <span class="Special"><</span><span class="Special">C-W</span><span class="Special">></span>:<span class="PreProc">$tabnew</span> <span class="Statement">+</span>:<span class="Statement">term</span><span class="Special"><</span><span class="Special">CR</span><span class="Special">><</span><span class="Special">C-W</span><span class="Special">></span><span class="Statement">o</span>
<span id="L108" class="LineNr">108 </span><span class="Statement">map</span> <span class="Special"><</span><span class="Special">F9</span><span class="Special">></span> :$tabnew +:term<span class="Special"><</span><span class="Special">CR</span><span class="Special">><</span><span class="Special">C-W</span><span class="Special">></span>o
<span id="L109" class="LineNr">109 </span>
<span id="L110" class="LineNr">110 </span>
</pre>
linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-86681711454833985902017-11-10T17:56:00.003+08:002017-11-10T17:56:42.375+08:00https://juejin.im/entry/590c2538a22b9d0058e90f58<h1 data-v-3f216172="" data-v-41d33d72="">
<span style="font-weight: normal;">收藏安卓开发中非常实用优秀的库</span></h1>
linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-51818286022592949682017-09-10T10:00:00.003+08:002017-09-10T10:20:03.755+08:00LeEco Le Pro3 三方ROM不完全集合<h2>
= 国外大神团队制作的 Android N v7.1.x 的 ROM = </h2>
<h4>
LineagoOS v13.0, v14.1 - <a href="http://www.lineagoos.org/">http://www.lineagoos.org</a> </h4>
三方ROM的鼻祖,历史最有旧,传承自CyanogenMod;各方面都挺完善。文档最完备。
但是WIFI EAP-TLS密钥模式无法工作<br />
download: <a href="https://download.lineageos.org/zl1">https://download.lineageos.org/zl1</a><br />
<br />
<h4>
Paranoid Android - <a href="http://www.aospa.co/">http://www.aospa.co</a> </h4>
很优雅,WIFI EAP-TLS密钥模式可以工作。
但是对App的管控不严,而且没法手动调整,耗电比较快<br />
download: <a href="http://get.aospa.co/official/zl1">http://get.aospa.co/official/zl1</a><br />
<br />
<h4>
OmniRom v7.1.2 - <a href="https://omnirom.org/">https://omnirom.org/</a> </h4>
总体来说是一个非常严谨的ROM, 所有功能都可用包括NFC卡模拟, 耗电控制很好, 可以通过 Security --> App Ops 来控制自启动; OmniSwitch 让人很有控制感,虽然界面有些粗糙<br />
download: <a href="http://dl.omnirom.org/zl1/">http://dl.omnirom.org/zl1/</a><br />
<br />
<h4>
AICP v12.1 - <a href="http://www.aicp-rom.com/">http://www.aicp-rom.com/</a> </h4>
定制内核, 这个还没来得及尝试!<br />
download: <a href="http://dwnld.aicp-rom.com/?device=zl1">http://dwnld.aicp-rom.com/?device=zl1</a><br />
<br />
<h4>
AospExtended v4.2 - <a href="http://www.aospextended.com/">http://www.aospextended.com/</a> </h4>
基于AOSP开发的, https://forum.xda-developers.com/le-pro3/development/rom-aospextended-rom-v4-2-t3609490
还没有尝试过<br />
download: <a href="http://downloads.aospextended.com/zl1/">http://downloads.aospextended.com/zl1/</a><br />
<br />
<h4>
ResurrectionRemix v5.8.4 - <a href="http://www.resurrectionremix.com/">http://www.resurrectionremix.com/</a> </h4>
基于 LineageOS, 没有尝试过!<br />
download: <a href="https://sourceforge.net/projects/resurrectionremix/files/zl1/">https://sourceforge.net/projects/resurrectionremix/files/zl1/</a><br />
<br />
<h2>
= 提示 = </h2>
NFC 卡模拟功能在大多数的ROM上都不行, 貌似是缺少 Smartcard Service
可以尝试这个: <a href="https://www.androidfilehost.com/?fid=673368273298973070">https://www.androidfilehost.com/?fid=673368273298973070</a><br />
<br />
<h2>
= 其他 = </h2>
<h4>
MoKee - <a href="http://www.mokeedev.com/">http://www.mokeedev.com/</a> </h4>
基于 LineageOS 添加了 XposedInstaller, 宙斯盾防启动, 自带ROOT; 中规中矩。主要是中国开发者,生存状态让人比较纠结,特别是下载 //sigh<br />
<br />
<h4>
MANOSP - MIUI and EMUI mod - <a href="http://www.manosp.com/">http://www.manosp.com</a> </h4>
微博 mandfx 小神之作, 内置了 ROOT 和 Xposed Framework。 适合那些超级爱折腾的用户<br />
download <a href="http://www.manosp.com/archives/category/letv/x720/">http://www.manosp.com/archives/category/letv/x720/</a>
linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-77666352454372169762017-06-03T09:23:00.000+08:002020-05-05T15:59:58.394+08:00在 MinTTY 内运行为 windows cmd 准备的程序<a href="https://git-scm.com/">Git for Windows </a>自带的 MinTTY 是一个非常不错的命令行终端模拟器, 它是从PuTTY的代码里派生的,在MinGW32/W64 和 MSYS1/2 都有使用。 但是MinTTY对于那些为Windows Console (CMD) 定制的程序就有些行为异常。 在这种情况下 就要用到 WinPty.exe 了。<br />
<br />
比如我在 MSYS 里面创建了一个脚本:/usr/bin/perl6 它来调用 perl6 MoarVM, 但是MoarVM 是用VC编译的,需要执行在 Windows CMD里面,脚本内容如下: <br />
<br />
<pre><code class="bash">
#!/bin/bash
/bin/winpty.exe /c/rakudo/bin/moar.exe --execname='C:\rakudo\bin\perl6.bat' --libpath="C:/rakudo/share/nqp/lib" --libpath="C:/rakudo/share/nqp/lib" --libpath="C:/rakudo/share/perl6/lib" --libpath="C:/rakudo/share/perl6/runtime" C:/rakudo/share/perl6/runtime/perl6.moarvm $*<br /><br />
</code></pre>
没有 winpty.exe的话, moar.exe 和MinTTY 的交互行为就比较奇怪。<br />
<br />
关于WinPty的更多信息: https://github.com/rprichard/winpty<br />
Windows 上 Unix PTY 模拟程序的一些介绍: https://blog.toonormal.com/2012/11/17/gcc-msys-mintty-pdcurses-winpty-and-good-times-in-the-shell/ linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-49943178475016808752017-05-13T09:44:00.001+08:002017-05-13T09:44:20.719+08:00如何发现Google的所有 IP地址 / howto discover all the IP addresses of GoogleGoogle 其实自己告诉你了, 只不过你需要掌握正确的方法来获取。<br />
<br />
<ol>
<li>nslookup <br />使用DNS 查询工具 </li>
<li>set server 8.8.8.8<br />设置 使用google的 Public DNS 服务器</li>
<li>set type=txt<br />查询 TXT 字段 </li>
<li>google.com<br />查询 google.com</li>
<li> _spf.google.com<br />查询 网段信息</li>
<li>_netblocks.google.com</li>
</ol>
<br />
<img alt="" src="data:image/png;base64,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" /> linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-83377864038374021102017-04-13T10:41:00.000+08:002017-04-13T10:45:24.622+08:00Emmet for Vim<a href="http://mattn.github.io/emmet-vim/">Emmet for Vim</a> - 用 Vim 开发 HTML CSS 前端的必备工具。 大幅度提高生产效率。<br />
缺省的展开键是:<br />
<div style="text-align: center;">
<span style="font-size: x-large;"></span></div>
<div style="text-align: center;">
先按 <span style="font-size: x-large;"><span style="background-color: #b6d7a8;"><span style="color: yellow;"> CTRL-y </span></span></span> 再按 <span style="font-size: x-large;"><span style="background-color: #9fc5e8;"><span style="color: yellow;"> , </span></span></span>
</div>
当然也可以通过修改: <br />
<blockquote class="tr_bq">
<pre>let g:user_emmet_expandabbr_key = '<c-e><c-e>'
</c-e></c-e></pre>
</blockquote>
自行修改为 CTRL-e 或者 指定其他按键!linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-35899818366103657272017-04-05T21:59:00.002+08:002022-03-06T10:09:49.121+08:00<p>我的最新的 VIMRC 文件, 备份自用! </p>
<pre>
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/gvimrc_example.vim
filetype off " required before add more bundles
set rtp+=$VIM/rust.vim
filetype plugin indent on " required
" Don't need ugly files
set nobackup
set noundofile
" Other settings
set ruler
set number
set wildmenu
set showcmd
set laststatus=2
set cmdheight=1
" Tab/Space related
set expandtab
set tabstop=4
set shiftwidth=4
set softtabstop=4
"colorscheme oceandeep
colorscheme evening
if has("multi_byte")
set encoding=utf-8
"let &termencoding = &encoding
set termencoding=unicode
" Set default encoding as UTF-8 with BOM
setglobal fileencoding=utf-8 "bomb "bomb introduce problem for *nix
set fileencodings=ucs-bom,utf-8,gb18030,cp936,cp950,latin1
" Walkaround the encoding problem for fenc=utf-8 && enc=ucs-2
augroup i18n
autocmd!
autocmd BufReadPost * if &fileencoding == "utf-8" | let &encoding = &fileencoding | endif
augroup END
endif
" Enable the Chinese characters
set guifont=Consolas:h11:cANSI,NSimSun:h12:cGB2312
set guifontwide=NSimSun:h12:cGB2312
" IME
if has('multi_byte_ime')
"未开启IME时光标背景色
hi Cursor guifg=bg guibg=Orange gui=NONE
"开启IME时光标背景色
hi CursorIM guifg=NONE guibg=Skyblue gui=NONE
" 关闭Vim的自动切换IME输入法(插入模式和检索模式)
set iminsert=0 imsearch=0
" 插入模式输入法状态未被记录时,默认关闭IME
inoremap <silent> <ESC> <ESC>:set iminsert=0<CR>
endif
" Set the swap file location
set dir=c:\\temp
" display the syntax name under the cursor
map <F12> :echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "name")<CR>
" We can navigate the list by using the <F3> and <S-F3>
map <F3> :cnext<CR>
map <S-F3> :cprevious<CR>
" Let's help the tab navigation a little
map <F9> :tabprevious<CR>
map <S-F9> :tabnext<CR>
" Tlist
map <F5> :Tlist<CR>
set tags=./tags,../tags,../../tags,../../../tags
set path+=./,../,../../,../../../
" 设定 windows 下 gvim 启动时最大化
"if has("gui_running")
" if has("win32")
" autocmd GUIEnter * simalt ~x
" endif
"endif
</pre>
linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-44836688247235512962017-02-21T22:56:00.002+08:002017-02-21T23:10:02.723+08:00Add syntax highlight for your code in blogspot.comThere a lots of JavaScript syntax highlight library available, I chose <a href="https://highlightjs.org/">highlight.js</a> which is quite simple and straight forward in my view; and easy enough to put into your blogspot.com.<br />
Here is the steps:<br />
Edit your blog's template HTML by paste following codes before the </head> <br />
<pre><code class="html">
<link href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/styles/railscasts.min.css" rel="stylesheet"></link>
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
</code></pre>
<br />
For your blog poster, use <br />
<pre><code class="html">
<pre><code class="lang">code in lang ...</code></pre>
</code></pre>
<br />
This is using the default language packs of highlight.js which support most common languages:<br />
<ul>
<li>Apache </li>
<li>Bash </li>
<li>C# </li>
<li>C++ </li>
<li>CSS </li>
<li>CoffeeScript </li>
<li>Diff </li>
<li>HTML</li>
<li>XML </li>
<li>HTTP </li>
<li>Ini </li>
<li>JSON </li>
<li>Java </li>
<li>JavaScript </li>
<li>Makefile </li>
<li>Markdown </li>
<li>Nginx </li>
<li>Objective-C </li>
<li>PHP </li>
<li>Perl </li>
<li>Python </li>
<li>Ruby </li>
<li>SQL</li>
</ul>
<p>and railscasts color scheme. you can goto https://highlighjs.org to find more language and color scheme. </p>
<hr />
It is pretty simple, isn't it?linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-40850248584250392262017-02-21T09:56:00.001+08:002017-02-21T10:53:11.743+08:00$5 VPS 对比英文原文: <a href="https://joshtronic.com/2017/02/14/five-dollar-showdown-linode-vs-digitalocean-vs-lightsaild-vs-vultr/">https://joshtronic.com/2017/02/14/five-dollar-showdown-linode-vs-digitalocean-vs-lightsaild-vs-vultr/</a> <br />
中文摘要: <a href="http://www.appinn.com/compare-linode-vs-digitalocean-vs-lightsail-vs-vultr/">http://www.appinn.com/compare-linode-vs-digitalocean-vs-lightsail-vs-vultr/</a><br />
<br />
<h2>
对比了四家大牌 VPS 服务商</h2>
这四家服务器分别是:<br />
<ul>
<li><a href="https://www.linode.com/?r=818460bd97493fbd65a7d08d2904ff92dc88ac62">Linode</a></li>
<li><a href="https://m.do.co/c/973bc576ffef">DigitalOcean</a></li>
<li><a href="https://amazonlightsail.com/">Amazon Lightsail</a></li>
<li><a href="http://www.vultr.com/?ref=7112193">Vultr</a></li>
</ul>
对比了8个方面的性能; 最后, 推荐度为 Linode > DigitalOcean / Vultr > Amazon Lightsail。 现在 buyvm 的VPS也用了好几年了,是不是要考虑换换呢?<br />
<br />
<h2>
补充 </h2>
看了原文下面的评论, 提到了 <a href="https://www.ovh.com/us/vps/">https://www.ovh.com/us/vps/</a> OVH VPN 看起来也不错。linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-67510752153186327102017-02-13T18:57:00.002+08:002020-05-05T17:01:53.051+08:00Google Chrome 必将统治桌面应用微软的桌面版 Power BI 也是基于CEF开发的! <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwImhPu3960Wf4-VXX3i-io4KU_ketHcimRb7sYhKqF5ZO7ah6StcMdQTCrpaDKMX_TdjFEjFddguDifGWj7E02DUmZeFEJ0RHv6TercOZu2jzp6nlTWlMYg-Lqd12OplMdqqV/s1600/Capture-PowerBI.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="193" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwImhPu3960Wf4-VXX3i-io4KU_ketHcimRb7sYhKqF5ZO7ah6StcMdQTCrpaDKMX_TdjFEjFddguDifGWj7E02DUmZeFEJ0RHv6TercOZu2jzp6nlTWlMYg-Lqd12OplMdqqV/s640/Capture-PowerBI.PNG" width="640" /></a></div>
Windows统治客户端的年代 在Web大潮涌动近20年之后 几近结束。linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-15023895985992244722017-01-07T23:34:00.001+08:002017-01-07T23:34:28.811+08:00中国教育网 DNS 服务器列表http://www.dnsdizhi.com/edudns.html<br />
<br />
好网站,值得收藏!linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-66402979764233260622017-01-02T10:16:00.004+08:002017-02-21T11:35:30.482+08:00Perl script to convert to x Based String<pre><code class="perl">
#/usr/bin/perl
use strict;
use warnings;
use constant DIV => 24;
my $v = shift or die "Usage: $0 ";
my $d = 0;
my $str = '';
do {
my $c = chr(ord('A') + ($v % DIV));
$str = $c . $str;
$v = int($v / DIV)
} while ($v > 0);
print $str;
0;
</code></pre>
linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-59995246497746981272015-12-19T22:48:00.004+08:002015-12-19T22:48:56.115+08:00Easy way to prevent from GFW DNS abusing The easiest way to distinguish the GFW DNS abusing result from real DNS responses is using iptables to block the dummy DNS response by GFW<br />
<br />
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace;"># iptables -t mangle -I PREROUTING -s 8.8.8.8/16 -m ttl --ttl-gt 63 -j DROP</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace;"># ip6tables -t mangle -I PREROUTING -s 2001:4860:4860::8844/112 -m hl --hl-gt 52 -j DROP</span></blockquote>
<div>
<br /></div>
linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com2tag:blogger.com,1999:blog-19542362.post-31985040085838932532013-10-31T23:23:00.001+08:002013-10-31T23:33:09.832+08:00第一次在iPad上写blog<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpaqck_RpuilSkzl9GkBR05tTvgu-tqwqqAuqA57B8RafoNdowsEAtQMGEJd5r2KHG8X_Wep-7ZdXrJrDCbormL7ftyagQ2Yh44jfnCEp53XeyiKxOfymcJ1aGXX5wIIwgEiKL/s640/blogger-image--815154528.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpaqck_RpuilSkzl9GkBR05tTvgu-tqwqqAuqA57B8RafoNdowsEAtQMGEJd5r2KHG8X_Wep-7ZdXrJrDCbormL7ftyagQ2Yh44jfnCEp53XeyiKxOfymcJ1aGXX5wIIwgEiKL/s640/blogger-image--815154528.jpg"></a></div><div class="separator" style="clear: both;">我儿子的读物</div>linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-24219019038128183482013-09-04T18:39:00.001+08:002013-09-04T18:39:59.630+08:00VS2013 值得期待!VS2013 值得期待! C++ 开发性能进一步提高!linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-41039783283916198582013-03-18T11:55:00.001+08:002013-03-18T11:55:28.417+08:00Lenovo LePad A1 and A1107 Unbrick fix/full factory restore<a href="http://forums.lenovo.com/t5/IdeaPad-Slate-Tablets-Knowledge/A1-and-A1107-Unbrick-fix-full-factory-restore/ta-p/841499#.UUaQEXMrjzI.blogger">A1 and A1107 Unbrick fix/full factory restore</a>linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-20720998142613888742013-01-26T14:33:00.002+08:002017-02-21T12:09:04.390+08:00PHP5 FastCGI init.d scriipt for Debian/UbuntuRecently, I am using Nginx + PHP5 FastCGI as the new web platform. I really need a init.d script for PHP5 FastCGI. It is not so difficult according to the skeleton.<br />
<br />
First of all, make sure to install php5-cgi and spawn-fcgi.<br />
<pre><code class="bash">
sudo apt-get install php5-cgi spawn-fcgi
</code></pre>
Second, create the /etc/init.d/php-fastcgi script, as below:<br />
<br />
<pre><code class="bash">#!/bin/sh
### BEGIN INIT INFO
# Provides: php-fastcgi
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: PHP5 FastCGI mode
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO
# Author: Yi Zhao
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="PHP5 FastCGI Service"
NAME=php5-cgi
FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
SOCKET=/var/run/php-fastcgi.sock
PHP5=/usr/bin/php5-cgi
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
CHILDREN=2
DAEMON=/usr/bin/spawn-fcgi
DAEMON_ARGS="-s $SOCKET -C $CHILDREN -P $PIDFILE -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5"
# Exit if the package is not installed
[ -x "$DAEMON" -a -x "$PHP5" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
#. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions
#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
$DAEMON_ARGS \
|| return 2
# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one. As a last resort, sleep for some time.
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --name $NAME
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
#
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
return 0
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
#reload|force-reload)
#
# If do_reload() is not implemented then leave this commented out
# and leave 'force-reload' as an alias for 'restart'.
#
#log_daemon_msg "Reloading $DESC" "$NAME"
#do_reload
#log_end_msg $?
#;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac
:
</code></pre>
Add php-fastcgi into the start list<br />
<pre><code class="bash">
sudo update-rc.d php-fastcgi default
</code></pre>
this will start for init level 2,3,4,5linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-85046684583210569032012-04-12T16:59:00.000+08:002012-04-12T16:59:16.576+08:00Firefox 免插件 发 新浪 weibo 大法<br />
Firefox 具有 Smart Keywords这个功能。她让我们可以 定义一个关键字 并用这个关键字来标示一个特定的网址。 利用这个功能,我们实际上可以做很多有趣的事情,比如发Sina围脖。 具体步骤如下:<br />
<br />
<ol>
<li>使用 Firefox</li>
<li>打开 baidu.com 在搜索框上点右键<br /></li>
<li>点 "Add Keyword for this Search..."</li>
<li>这时会弹出一个对话框, 在 "Name" 项输入 "sina weibo" 其实输入什么都可以, “keyword" 可以选 wb</li>
<li>然后保存</li>
<li>用 bookmark manager 打开这个新建的 Smart Keyword, 打开 properties 属性 对话框。然后在 “Location” 里面输入 下面的代码:</li>
</ol>
<blockquote class="tr_bq">
javascript:(function(){f='http://v.t.sina.com.cn/share/share.php?url='+encodeURIComponent(window.location.href)+'&title=%s';a=function(){if(!window.open(f,'location=yes,links=no,scrollbars=no,toolbar=no,width=550,height=550'))location.href=f};if(/Firefox/.test(navigator.userAgent)){setTimeout(a,0)}else{a()}})() </blockquote>
<br />
这就全部搞定了! 今后 在任何一个网页, 你只要切换到Address Bar。 可以用Ctrl+D/Ctrl+L 快速切换。 然后输入: wb 任何你想输入的文字。 回车, 这就会打开一个新的窗口/tab 提示你 围脖的内容。Over!linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0tag:blogger.com,1999:blog-19542362.post-77172973897068207172011-05-06T11:47:00.002+08:002011-05-06T11:53:21.089+08:00How to create a MS Windows local account by programThere are several ways to make it happen:<br /><ol><li>PowerShell solution: <a href="http://stackoverflow.com/questions/383390/create-local-user-with-powershell-windows-vista">http://stackoverflow.com/questions/383390/create-local-user-with-powershell-windows-vista</a></li><li>.Net solution: <a href="http://msdn.microsoft.com/en-us/library/bb384369.aspx#Y200">http://msdn.microsoft.com/en-us/library/bb384369.aspx#Y200</a></li><li>Using Active Directory Service Interfaces (ADSI) COM: <a href="http://msdn.microsoft.com/en-us/library/aa705985%28v=vs.85%29.aspx">http://msdn.microsoft.com/en-us/library/aa705985(v=vs.85).aspx</a><br /></li></ol>linuxyzhttp://www.blogger.com/profile/08556969651719245935noreply@blogger.com0