【感情にまかせてクレームを入れて、自分の取り分を減らす人】
毎度恒例の近況報告から始めさせていただきますが、現在、クラウドファンディング「SILKHT」内で募集をかけている『西野亮廣オンライン講演会 〜マーケティング講座【上級編】〜』の受講者が3300名を突破しました。
(※講演会の参加はコチラ↓)
https://silkhat.yoshimoto.co.jp/projects/2158
特筆すべきは「受講の応募の伸びが止まっていない」という点で、もしかすると、最終的に5000名ぐらいになるかもしれません。
コロナ真っ只中の時に、1万人規模のオンライン講演会を二回開催しましたが、そこに続く規模の講演会となりそうです。
僕自身の事例を元に、モノの届け方、人の巻き込み方についてのお話をしたいと思います。
興味がある方は『SILKHAT』のプロジェクトページから、飛んでみてください。
→https://silkhat.yoshimoto.co.jp/projects/2158
あと、先日おこなった、西野がプペルのガチ仮装をする「コスプレ撮影会」の評判がすこぶる良かったので、100組限定で、東京、大阪で再び開催することが決まりました。
参加はコチラ→https://silkhat.yoshimoto.co.jp/projects/2206
何卒、宜しくお願い致します。
というわけで本題に入りたいのですが、今日は、「感情にまかせてクレームを入れて、自分の取り分を減らす人」というテーマでお話ししたいと思います。
具体例を交えてお話した方が伝わると思うので、その角度からお話したいのですが、僕も完全には追えていないので、正確な情報は公式からの発表を待っていただきたいのですが、毎年、年末に5日間連続で『天才万博』という音楽フェスをおこなっているんですね。
僕は、出演者ではなくて、お客さんとして、フェスの立ち上げ当初から皆勤賞です。
毎年『天才万博』用のスケジュールは絶対に空けておいて、とにかく、この日の為に1年間頑張っています。
勿論、今年も。
とにかく楽しい空間で、このフェスが面白いのは、「出演者で集客をしていない」という点。
毎年、ほとんどのお客さんが、誰が出演するかも知らずに会場に足を運んでいる。
つまり、「フェス自体」に、もっと具体的に言うと、あの空間にファンが付いているわけです。
唯一わかっているのは「毎年、西野が客席で酔っ払っている」ということぐらいで、あとは誰が出るかも分からない音楽フェスのチケットは全日程完売。とにかく、僕が知る限り、一番楽しい音楽フェスです。音楽フェスというか、忘年会ですね。
「天才万博2019」で画像検索していただけると、会場の雰囲気が伝わると思います。
そんな『天才万博』ですが、この度のコロナで「今年の開催はどうなんだろう?」という心配が、僕たちファンの間でずっとあったんですね。
運営サイトの人たちが開催したくてしたくてたまらないのは百も承知だし、とはいえ、お客さんの安全を守ることも当然考えなきゃいけないので、僕としては、どういう判断がくだろうが、受け止める気でいたんですね。
誰も悪くないので。
で、一昨日かな、『天才万博』の主催者さんが、天才万博のファンに向けて、「まだ迷っていて、本決まりではありませんが、今のところ、この方向で行こうかと思っています」という配信をしてくれたんですね。
ファンに相談する形で。
その中で、「一階スタンド席を、全て、テーブル席にして、今年はディナーショー形式でやろうかと思っています」という発表があったんです。
これにより、会場に入れるお客さんは4分の1程度になって、新型コロナウイルス対策のガイドラインを守ることができて、密を避けることができる。
でもって、今持っている一階スタンド席のチケット(3500円)は「LIVE配信の閲覧チケット」に代わって、当日、「それでも会場のテーブル席(ディナー席)で観たい」という方は、追加で「ディナー席チケットを購入する」という形です。
「ディナー席チケット」が購入できるのは、「一階スタンド席のチケットを持っている人に限る」というのと、「LIVE配信には興味が無い人にはチケットの返金対応します」という条件付き。
僕個人的には、コロナの乗り越え方として、ほぼほぼ完璧な打ち手だと思ったのですが、配信のコメント欄を見ていると、この判断に不満を持っている人がチョコチョコいたんです。
「なんで、会場で観るのに、追加でお金を払わなきゃいけないんだ。テーブル席を売るにしても、一旦、全員払い戻しをしろ!」というのが彼らの言い分です。
おそらく第一希望が絶たれて、カーッとなっちゃったんだろ思うのですが、そんなこと言ったら、コロナ禍は全員、第一希望あ絶たれているわけで、その中で、最高の代替案を探っているわけです。
僕は、彼らのクレームが不思議で仕方がなくて、「とにかく、チケットは一旦全て払い戻しをして、あらためてテーブル席を売れ」って、運営からすると、「別にいいけど、それをしたら、損をするのは、テーブル席を買えなくなるかもしれない貴方ですよ」ということだと思うんですね。
いやだって、ディナーショーとなると、自分用のテーブルがあって、椅子があって、食事があるわけで、当然、スタンディング席からは値段は上がるわけじゃないですか?
でも、今回の判断だと、「すでにスタンディングチケットを持っている人」を対象にディナー席を販売するわけで、これは二重課金でも何でもなくて、本来のディナー席の値段からスタンディングチケット料金分は削られるわけじゃないですか?
言ってること、伝わってます?
……つまり、今回の運営の判断で、すでにチケットを買っていたお客さんが損をすることなんて一つもないんです。
納得がいかない点があるとするのであれば、「LIVE配信の閲覧権」の値段が、一階スタンディングチケットの3500円という点ぐらい?
でも、そこに納得が行かなければ「返金対応」もしてくれるというのです。
僕は見事な判断だと思ったのですが、感情にまかせて、ここにクレームを入れる人がいる。
でね、運営がそのクレームを受け入れて、「じゃあ、分かりました。お望み通り、チケットは全員一旦払い戻し」としてしまうと、フラットに戻るわけだから、たとえばディナー席の値段があのままだと「6500円」だったところが、「1万円」になり、加えて、その「ディナー席」が手に入るかどうかも分からない。
前までなら、「スタンディングチケットを持っている人」だけが、「ディナー席」の購入権利を持っていたんだけど、今度はそうではなくなって、「ディナー席」の購入対象者が全員になるので、より、チケットは手に入りづらくなる。
で、チケットが手に入らなくて、「それでも見たいから」となったら、結局、「LIVE配信のチケット」を購入することになるわけで…そもそも、誰が得をする為のクレームだったの?という話じゃないですか。
少なくとも、クレームを入れた本人は損をしている。
勿論、これは一昨日の時点での、まだ本決まりになる前のやりとりなので、その後、どうなったかは知りませんし、運営からの判断を待っているところですが……こういった感じで、「感情にまかせてクレームを入れたけれども、そのクレームが採用されたら、自分が損をする」ということって、往々にあると思っています。
僕は自分もエンタメサービスを提供する側なので分かるのですが、サービス提供者は「お客さんから長く愛される」ということが一番最初にあるので、そうなってくると、何かトラブルがあった場合は、「どうすれば、お客さんの損を減らせるか?」を皆、結構本気で考えています。
お客さんから搾取するようなサービスが、短命であることを皆、知っているので。
今回の「なんで追加でお金を払わなアカンねん」のクレームの根底には、「ちょっとズルしようとしているに違いない」という思い込みがあると思うのですが、お客さんに愛される前提で動いている人は、そんなことはしません。
そんなことをしたら、長期的に見て、自分が損するんだもん。
なので、今後、カーッとなっちゃって、「クレームを入れてやろう!」と思った時は、一旦、今日の話を思い返してください。
そのクレームが採用されたら、自分が損をする確率って、メチャクチャ高いので、気をつけてみてください。
▼西野亮廣の最新のエンタメビジネスに関する記事(1記事=2000~3000文字)が毎朝読めるのはオンラインサロン(ほぼメルマガ)はコチラ↓
https://salon.jp/nishino
▼Instagram版はコチラ↓
https://nishino73.thebase.in/items/25497065
━━━
2020年12月25日公開!
映画『えんとつ町のプペル』
▼オンラインムビチケ(特典付き)の購入はこちら↓
https://mvtk.jp/Film/070395
[people who leave their emotions and complain and reduce their own share]
We will start with our annual update report, but currently, we are looking for a crowdfunding ′′ Silkht ′′ in the crowdfunding ′′ Silkht ′′ and the participants of the ′′ Nishino Ryo Online Lecture ~ Marketing course [Advanced Edition]~" are 3300 I've breached my name.
(※ the participation of the lecture is here ↓)
https://silkhat.yoshimoto.co.jp/projects/2158
The remarkable thing is that ′′ the growth of the application of the enrollment is not stopping maybe it will finally be about 5000 people.
When I was in the middle of Corona, I held a 1 million online lecture twice, but it looks like it's going to be a scale lecture that will continue there.
I would like to talk about how to deliver things and how to get involved in people based on my own case.
If you are interested, please fly from the ′′ Silkhat ′′ project page.
→https://silkhat.yoshimoto.co.jp/projects/2158
Later, the other day, the reputation of the ′′ Cosplay Photoshoot ′′ that nishino did the freaking costume of was very good, so it was decided to be held again in Tokyo and Osaka for only 100 pairs.
Join us here → https://silkhat.yoshimoto.co.jp/projects/2206
Thank you for your kind support.
So I want to enter the chase, but today I would like to talk to you with the theme of ′′ people who leave it to emotions and put a complaint and reduce their share,"
I think it's better to talk to you with a specific example, so i want to talk to you from the angle, but I'm not completely following it, so I'd like to wait for the official announcement of the accurate information, but every year, 5 days in a row at the end of the year, we are having a music festival called ′′ Genius Expo ′′
I'm not a performer, but as a customer, I'm going to have a attendance award from the beginning of the festival.
Every year, I will definitely save the schedule for the ′′ Genius Expo ′′ and anyway, I've been working hard for 1 years for this day.
Of course, this year too.
Anyway, it's a fun space, and this festival is interesting," it's not attracting with performers,"
Every year, most customers carry their feet to the venue without knowing who will be performing.
In other words, in the ′′ festival itself," more specifically, there is a fan in that space.
The only thing I know is ′′ every year, nishino is drunk at the audience and the tickets for the music festival that I don't know who's going to be out are sold out all dates. Anyway, as far as I know, it's the most fun music festival. Music Festival or year-end party, isn't it?
If you can search for the image at ′′ Genius Expo 2019 ′′ I think the atmosphere of the venue will be transmitted.
It's a ′′ Genius Expo ′′ but it's been a long time since I've been in the middle of a long time since I've been in the middle of a long time since I've been in the middle of
I know a hundred things that people on the management site want to be held, but I have to think about protecting the safety of the customer, so I wonder what I'm going to do. I was thinking of catching it.
Because no one is bad.
So, the day before yesterday," the organizers of the ′′ Genius Expo ′′ are towards the fans of the genius expo," I'm still lost, and it's not a done, but at the moment, I'm thinking about going in this direction ′′ That's what I'm talking about.
In the form of consulting a fan.
In it, there was an announcement that ′′ I'm thinking about doing the first floor stand seat, all of them in the table seat, and this year I'm thinking about doing it in the dinner show format,"
This is how customers in the venue are about 4 minutes, and they can protect the guidelines for the new corona virus countermeasures, and they can avoid secretly.
So, the ticket for the first floor stand seat I have now (3500 yen) is on behalf of ′′ live broadcast viewing ticket ′′ on the day of the day," still, I want to watch it at the table seat (dinner seat) at the venue ′′ Is the form of ′′ Buy dinner seat tickets ′′ in addition.
′′ dinner seat tickets ′′ can be purchased," limited to those who have tickets for the first floor stand seat," for those who are not interested in live streaming, we will respond to the refund of the ticket ′′ With the condition.
I personally thought that it was almost almost almost perfect as a way to get through Corona, but looking at the comments section of the distribution, the person who was dissatisfied with this judgement was chocolate chocolate.
′′ why do I have to pay extra to watch at the venue. Even if you sell a table seat, once you get a refund!" it's their side.
I think the first hope has been cut off, and it has become a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of That's what I'm talking about.
I can't help but wonder their complaint," anyway, the tickets are all refunded, and I'm going to sell the table seat again," it's good, but if you do it, I think it's you who may not be able to buy a table seat
No, when it comes to dinner show, there's a table for yourself, there's a chair, and there's a meal, and naturally, the price is going up from the standing seat?
But in this judgement, I'm selling dinner seats for ′′ people who already have a standing ticket," and this is not a double charge, and it's a standing ticket from the price of the original dinner seat. Isn't it going to be scraped?
What you're saying is transmitted?
...... in other words, in the judgement of the operation of this time, there is no one to lose the customer who has already bought the ticket.
If there is a point that is not convincing, the price of ′′ live broadcast viewing rights ′′ is about 3500 yen for the first floor standing ticket?
But if you don't agree there, you'll be able to ′′ refund ′′
I thought it was a stunning judgement, but there are people who leave it to emotions and complain here.
So, the operation accepts the complaint," well, I understand. As you want, all the tickets are refunded," and I'm going back to the flat, so for example, the price of the dinner seat is ′′ 6500 yen ′′ when it's ′′ 1 yen ′′ And in addition, I don't even know if I can get that ′′ dinner seat ′′
Until before, only ′′ people who have standing tickets ′′ had the right to buy ′′ dinner seats," but this time it's gone, and I'm going to have a ′′ dinner seat ′′ to all of them. It's going to be harder to get tickets.
So, I can't get tickets, and I still want to see it," after all, I'm going to buy ′′ tickets for live streaming... in the first place, who's going to get a deal. A complaint to get it Was it? Isn't that a story?
At least the person who complained is losing.
Of course, this is the interaction before the day before yesterday, so I don't know what happened after that, and I'm waiting for the judgement from the operation, but...... this is how it feels," I put a complaint in my emotions, but if the complaint is adopted, I think that I will lose myself
I know that I am also the side of providing entertainment services, but the service provider is the first to say ′′ I will be loved for a long time from a customer so if you have any trouble Ha," I'm pretty seriously thinking about how to reduce the loss of the customer?"
We all know that a service that is exploited from a customer is a short life.
I think that the base of the complaint of ′′ why don't you pay money in addition," I think I'm going to be a bit of a cheat," but I'm moving on the premise of being loved by the customer. People don't do that.
If you do that, you'll see it in a long term, and you'll lose yourself.
So, in the future, I'm going to be a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of a bit of
If the complaint is adopted, the probability of losing yourself is so messed up, so be careful.
▼ an article about the latest entertainment business of ryo nishino (1 articles = 2000 to 3000 characters) can be read every morning online salon (almost mail magazine) is here ↓
https://salon.jp/nishino
▼ Instagram version is here ↓
https://nishino73.thebase.in/items/25497065
━━━
Released on December 25, 2020!
The movie in a town ′′
▼ Buy Online Bangabandhu (with perks) here ↓
https://mvtk.jp/Film/070395Translated
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
「short story format」的推薦目錄:
- 關於short story format 在 鴨頭 嘉人 Facebook 的最佳貼文
- 關於short story format 在 黒瀬來華 Laica Chrose Facebook 的最佳貼文
- 關於short story format 在 Taipei Ethereum Meetup Facebook 的最讚貼文
- 關於short story format 在 コバにゃんチャンネル Youtube 的最讚貼文
- 關於short story format 在 大象中醫 Youtube 的最讚貼文
- 關於short story format 在 大象中醫 Youtube 的最佳貼文
- 關於short story format 在 How to Format a Short Story Manuscript | Scribophile - Pinterest 的評價
short story format 在 黒瀬來華 Laica Chrose Facebook 的最佳貼文
My new comic “Winged” will be submitted to LINE WEBTOON ‘s Short Story Contest which will start accepting works from 6:00 p.m. (PST) on the 30th of April✨Pls check back later✨
This is an experimental project as it’s my first time going 100% digital and trying out the vertical scrolling format✨
The original comic itself is being done in the traditional comic format, and I hope in the future I can print a physical book out of this✨
#WingedWebtoon #webtoon #manga #comic #clipstudiopaint #shortstory #cintiq27qhd #LaicaChroseArt
short story format 在 Taipei Ethereum Meetup Facebook 的最讚貼文
📜 [專欄新文章] Reason Why You Should Use EIP1167 Proxy Contract. (With Tutorial)
✍️ Ping Chen
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
EIP1167 minimal proxy contract is a standardized, gas-efficient way to deploy a bunch of contract clones from a factory.
1. Who may consider using EIP1167
For some DApp that are creating clones of a contract for its users, a “factory pattern” is usually introduced. Users simply interact with the factory to get a copy. For example, Gnosis Multisig Wallet has a factory. So, instead of copy-and-paste the source code to Remix, compile, key in some parameters, and deploy it by yourself, you can just ask the factory to create a wallet for you since the contract code has already been on-chain.
The problem is: we need standalone contract instances for each user, but then we’ll have many copies of the same bytecode on the blockchain, which seems redundant. Take multisig wallet as an example, different multisig wallet instances have separate addresses to receive assets and store the wallet’s owners’ addresses, but they can share the same program logic by referring to the same library. We call them ‘proxy contracts’.
One of the most famous proxy contract users is Uniswap. It also has a factory pattern to create exchanges for each ERC20 tokens. Different from Gnosis Multisig, Uniswap only has one exchange instance that contains full bytecode as the program logic, and the remainders are all proxies. So, when you go to Etherscan to check out the code, you’ll see a short bytecode, which is unlikely an implementation of an exchange.
0x3660006000376110006000366000732157a7894439191e520825fe9399ab8655e0f7085af41558576110006000f3
What it does is blindly relay every incoming transaction to the reference contract 0x2157a7894439191e520825fe9399ab8655e0f708by delegatecall.
Every proxy is a 100% replica of that contract but serving for different tokens.
The length of the creation code of Uniswap exchange implementation is 12468 bytes. A proxy contract, however, has only 46 bytes, which is much more gas efficient. So, if your DApp is in a scenario of creating copies of a contract, no matter for each user, each token, or what else, you may consider using proxy contracts to save gas.
2. Why use EIP1167
According to the proposal, EIP is a “minimal proxy contract”. It is currently the known shortest(in bytecode) and lowest gas consumption overhead implementation of proxy contract. Though most ERCs are protocols or interfaces, EIP1167 is the “best practice” of a proxy contract. It uses some EVM black magic to optimize performance.
EIP1167 not only minimizes length, but it is also literally a “minimal” proxy that does nothing but proxying. It minimizes trust. Unlike other upgradable proxy contracts that rely on the honesty of their administrator (who can change the implementation), address in EIP1167 is hardcoded in bytecode and remain unchangeable.
That brings convenience to the community.
Etherscan automatically displays code for EIP1167 proxies.
When you see an EIP1167 proxy, you can definitely regard it as the contract that it points to. For instance, if Etherscan finds a contract meets the format of EIP1167, and the reference implementation’s code has been published, it will automatically use that code for the proxy contract. Unfortunately, non-standard EIP1167 proxies like Uniswap will not benefit from this kind of network effect.
3. How to upgrade a contract to EIP1167 compatible
*Please read all the steps before use, otherwise there might have problems.
A. Build a clone factory
For Vyper, there’s a function create_with_code_of(address)that creates a proxy and returns its address. For Solidity, you may find a reference implementation here.
function createClone(address target) internal returns (address result){ bytes20 targetBytes = bytes20(target); assembly { let clone := mload(0x40) mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(clone, 0x14), targetBytes) mstore(add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) result := create(0, clone, 0x37) }}
You can either deploy the implementation contract first or deploy it with the factory’s constructor. I’ll suggest the former, so you can optimize it with higher runs.
contract WalletFactory is CloneFactory { address Template = "0xc0ffee"; function createWallet() external returns (address newWallet) { newWallet = createClone(Template); }}
B. Replace constructor with initializer
When it comes to a contract, there are two kinds of code: creation code and runtime code. Runtime code is the actual business logic stored in the contract’s code slot. Creation code, on the other hand, is runtime code plus an initialization process. When you compile a solidity source code, the output bytecode you get is creation code. And the permanent bytecode you can find on the blockchain is runtime code.
For EIP1167 proxies, we say it ‘clones’ a contract. It actually clones a contract’s runtime code. But if the contract that it is cloning has a constructor, the clone is not 100% precise. So, we need to slightly modify our implementation contract. Replace the constructor with an ‘initializer’, which is part of the permanent code but can only be called once.
// constructorconstructor(address _owner) external { owner = _owner;}// initializerfunction set(address _owner) external { require(owner == address(0)); owner = _owner;}
Mind that initializer is not a constructor, so theoretically it can be called multiple times. You need to maintain the edge case by yourself. Take the code above as an example, when the contract is initialized, the owner must never be set to 0, or anyone can modify it.
C. Don’t assign value outside a function
As mentioned, a creation code contains runtime code and initialization process. A so-called “initialization process” is not only a constructor but also all the variable assignments outside a function. If an EIP1167 proxy points to a contract that assigns value outside a function, it will again have different behavior. We need to remove them.
There are two approaches to solve this problem. The first one is to turn all the variables that need to be assigned to constant. By doing so, they are no longer a variable written in the contract’s storage, but a constant value that hardcoded everywhere it is used.
bytes32 public constant symbol = "4441490000000000000000000000000000000000000000000000000000000000";uint256 public constant decimals = 18;
Second, if you really want to assign a non-constant variable while initializing, then just add it to the initializer.
mapping(address => bool) public isOwner;uint public dailyWithdrawLimit;uint public signaturesRequired;
function set(address[] _owner, uint limit, uint required) external { require(dailyWithdrawLimit == 0 && signaturesRequired == 0); dailyWithdrawLimit = limit; signaturesRequired = required; //DO SOMETHING ELSE}
Our ultimate goal is to eliminate the difference between runtime code and creation code, so EIP1167 proxy can 100% imitate its implementation.
D. Put them all together
A proxy contract pattern splits the deployment process into two. But the factory can combine two steps into one, so users won’t feel different.
contract multisigWallet { //wallet interfaces function set(address[] owners, uint required, uint limit) external;}contract walletFactory is cloneFactory { address constant template = "0xdeadbeef"; function create(address[] owners, uint required, uint limit) external returns (address) { address wallet = createClone(template); multisigWallet(wallet).set(owners, required, limit); return wallet; }}
Since both the factory and the clone/proxy has exactly the same interface, no modification is required for all the existing DApp, webpage, and tools, just enjoy the benefit of proxy contracts!
4. Drawbacks
Though proxy contract can lower the storage fee of deploying multiple clones, it will slightly increase the gas cost of each operation in the future due to the usage of delegatecall. So, if the contract is not so long(in bytes), and you expect it’ll be called millions of times, it’ll eventually be more efficient to not use EIP1167 proxies.
In addition, proxy pattern also introduces a different attack vector to the system. For EIP1167 proxies, trust is minimized since the address they point to is hardcoded in bytecode. But, if the reference contract is not permanent, some problems may happen.
You might ever hear of parity multisig wallet hack. There are multiple proxies(not EIP1167) that refer to the same implementation. However, the wallet has a self-destruct function, which empties both the storage and the code of a contract. Unfortunately, there was a bug in Parity wallet’s access control and someone accidentally gained the ownership of the original implementation. That did not directly steal assets from other parity wallets, but then the hacker deleted the original implementation, making all the remaining wallets a shell without functionality, and lock assets in it forever.
https://cointelegraph.com/news/parity-multisig-wallet-hacked-or-how-come
Conclusion
In brief, the proxy factory pattern helps you to deploy a bunch of contract clones with a considerably lower gas cost. EIP1167 defines a bytecode format standard for minimal proxy and it is supported by Etherscan.
To upgrade a contract to EIP1167 compatible, you have to remove both constructor and variable assignment outside a function. So that runtime code will contain all business logic that proxies may need.
Here’s a use case of EIP1167 proxy contract: create adapters for ERC1155 tokens to support ERC20 interface.
pelith/erc-1155-adapter
References
https://eips.ethereum.org/EIPS/eip-1167
https://blog.openzeppelin.com/on-the-parity-wallet-multisig-hack-405a8c12e8f7/
Donation:
pingchen.eth
0xc1F9BB72216E5ecDc97e248F65E14df1fE46600a
Reason Why You Should Use EIP1167 Proxy Contract. (With Tutorial) was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
short story format 在 How to Format a Short Story Manuscript | Scribophile - Pinterest 的推薦與評價
Jun 2, 2019 - The first step to getting your short story read is to format it correctly. Learn the industry standard for short story manuscript formatting. ... <看更多>