read.cash Log in

@wabinab

Joined 28 February 2022 · 122 posts

(looking for work) Jack of some trade (ML, software dev, and some others). Likes to learn. Visit wabinab.github.io where I publish my learnings, including thos…

120 KT

0 KT · $1.23 received · 0 KT · 48¢ given

Posts

w@wabinab

Why The Competition? Why Not Cooperate? Competition is never the norm. It's a heritage, lying deep in our gene, when we try to compete for shelter, mating, food, etc before the present days. Its when, if we don't compete, we'll die. While still carved within our gene, it's not the best way anymore; at least for those whom have abundant food, have a shelter, and perhaps a spouse (if you want one). Cooperation is the replacement. When we compete, we're trying to fight for something. Perhaps there's a point system to record who's high in the leaderboard, and rewards only the top N participants (where really, N is a small number, in most competition). How bout the rest? **They got nothing!** Where are their efforts? In the rubbish bin! But who cares? Competition only retain the top players; the rest? Sorry, you don't have a place here. Oh, you have no more money to pay for food? None of my business. To further evolve humanity as a whole, and not only the top 1% or even less (while leaving the rest starve to dead because they don't get anything), it's important to distribute rewards to each and every person whom put in their effort to participate (if they don't put in effort, sure, they don't get anything, and don't expect them to get anything). It's equity, it's fairness, it's a fair share between everyone, it's a prove that the organizer encourages and appreciate their effort and participation; it's an effort to not keep only the top players, but everyone involved. If you ever compete, have you heard people speaking "Haish, I should've gotten 2nd place, but now I got 5th because ____" (some external factors), or similar phrases. They repeat the phrases in the upcoming days, weeks, or even months! Competition raises happiness (temporary mostly, rarely long-term) to the top players whom got rewarded, and raises envy, jealousy, anger, unwillingness, and other negative emotions among the rest. Even those with price might feel these negative emtions if they thought they might get higher price (greed, and perhaps other emotions). Negative emotions in large aren't superb for moving the society forward, towards a higher evolutionized society. What says if the majority feels negative towards something. In the name of team-building game, it's the same reasoning. If these negative emotions build up, do you think we can build a good team? On the surface, people might be "Eh, congratulations for your 1st place!" but on the inside, they feel negative (if they participated). Supposed they don't feel negative, they feel satisfied with their price, and they still congratulate the person: "Congratulations for your 1st place!", what would the 1st place person feels after listening to that phrase a couple of times, or many times? He/she starts thinking that he/she should get 1st place in every other competitions! As if, "Of course I should get 1st, because I was 1st before!" goes without saying. The nose goes high, and negative emotion fills (pride, arrogance, vanity). It's difficult to be humble after you feel arrogance: that you're above everyone around you, that you stands higher than everyone around you. Consider Debate. Try, avoid as much as possible, from debating for something. **The only time you debate is when the topics concentrate on a fact**. For example, in Physics, we debate (without focusing on the person debating) for a particular fact, backed up with facts and formulas and equations, etc, to prove what we debate for is **not wrong** (we're not trying to prove the fact is correct, but that we don't have something to disprove the fact). **If you instead debate for personal matters, in social interactions, you're doomed**. Why do friends/spouse/parent-children fight each other? Because they debate. They talk over each other, and what they speak isn't listened by the others. What each party wants instead, is that people care about them, listens to them, irregardless of what they debate for is right or wrong. They could be wrong, they could apologize and accept their wrongness; but they need to be listened to, by someone whom care for them, care about them, and that they care about. Especially for people like me whom are emotional-based, if you speak with one, trying to convince via "logic-based/fact-based", it doesn't work. One won't agree with you irregardless of whether you're correct or wrong until you can listen to oneself emotionally. The emotion is not there, so everything is wrong (irregardless of the facts). And the benefits of cooperations? It benefits everyone! When everyone gets fairly treated, you expect positive emotions to spread, and people willing to come together to think of something better without worrying whether they will not be rewarded or not. People can stop worrying about rewards and focus on the problem at hand. People knows they're fairly treated (for the amount of effort they put in) and accept what they get, and continue to contribute as they could get more. (Of course, it's not perfect; people whom're greedy never gets satisfied, so don't bother about them: they're insatiable.) Conclusion Aims to cooperate, not compete. Aims to converse, not debate. Look out for situations and decide which solution is better. Usually, cooperation works. And usually, conversation ends up with both parties happier than debate. Extra note: conversation (a.k.a *discussion*) isn't the best, but it's good enough. According to "The 6 Secrets of a Lasting Relationship" by Mark Goulston, communication takes place at 4 different levels: Diatribe -- talking *over* each other. (talking to the air as if the other parties doesn't exist) Debate -- talking *at* each other (with **no one really listening**). (I'm right, you're wrong) Discussion -- talking *to* each other in a calm, pleasant manner. Usually more logical than emotional, and you don't necessary have to agree with the other party, just that they have their say that you listened to, and you have your say that they listened to. Both parties understand each other logically. Dialogue -- talking *with* each other. It's a communication of emotions plus logical. Unlike discussions which communicate logic mostly, here we communicate also emotions. We try to understand how the other person feels, and how we can embrace their feelings. **We care about how each other feels**. If can, aim for dialogue, avoid diatribe.

w@wabinab

NFTs Reimagined When NFTs are first created, they are just code that prove it's "non-fungibility", that it's unique, and nobody can copies it (those who copies the exact information is non-verifiable). It's a (unique) object containing some metadata. Most NFTs looks like cards, though, with an image, a title, and some other information. It makes sense to first sell art and photography with NFTs. This is the first step: "Can we prove its non-fungibility?" As NFT sphere matures, innovative usage emerges. People starts asking more questions: "how can I use this in ____ sector?" Fill in the blank with music, gaming, etc. Overall, it's still on-chain, everything is still inside the computer, but applied to other spheres. Then, people starts thinking, "how can we link NFTs to physical object?" Now, we start reimagining things. NFTs can't really link per se to a physical object. We need to make the link ourselves, via the linker (a person, usually), and ensures others to trust us that their NFT is linked to a physical object. In the future, though, this may be fulfilled via a smart contract, I don't know. An example is Raiz Vertical Farming. In the past, you buy a share of the company and earn when the company decide to pay share. Nowadays, you can buy a share of Raiz, by buying an NFT. Each NFT represents a slot in the Raiz. Buying an NFT represents that slot is yours. It's also a way to fund Raiz for its vertical farming mission. If Raiz doesn't have enough money to do so, aside from applying for funds and finding investors, you could buy a slot and take care of it. Many people buying a huge amount of NFT, even if each bought only one, results in lots of funds for Raiz. In the future, Raiz also use NFTs for subscription on vegetable deliveries. Open Forest Protocol (OFP), on the other hand, uses NFTs as representations of forestation projects. They use NFTs to store information on the blockchain, so anyone could view transparently what they're doing, when transparency is important. People could watch how many trees grow by watching the blockchain information. That's just a few. Imagine land estates and supermarkets and stores linking their objects to NFT. When you buy an object, it's a transfer of NFT from the store owner (or whoever previously owns it) to you. How the physical part will be fulfilled, though, is unknown. Do you send it? Do someone else come over, knock on your door, and say, "hey, you don't own that anymore, please transfer it to its new owner"? We don't know. Maybe not every single object will be minted as NFT. Land and property, it sounds right. It requires proof that it's owned by someone. Others, especially usable objects, requires "burning" of NFT each time it's being used, which just doesn't sounds right minting as NFTs. Furthermore, if every single object in your house has an NFT, it'll be similar to what you encounter in games: too much objects. (In games, OOP isn't the best way to design games, as there are too much objects to render; Data-Oriented Design is. Imagine you have a million NFTs on your wallet: you'd either flood your wallet, or you'd take up a lot of the space on the validator's hard disk). Conclusion Just because NFTs stay within the network doesn't mean it can't link to real-life objects. We just have to rethink what NFT represents, and what we're trying to achieve with blockchain and NFTs with our actual problem, hence NFT will find its way to how it can be used. Raiz and OFP are just two: we can do more! References https://near.org/blog/nfts-on-near-beyond-the-hype/ https://www.raiz.farm/ https://www.openforestprotocol.org/technology

w@wabinab

Interested in Selling Digital Products on Crypto to a Larger Audiences than One? This is a proposal, and comment below on your interest or just general feedback, whether you think it'll work or not, before one decide whether to try out an MVP or not. Goal: To create a (baby) platform like Gumroad but with two differences: Uses semi-fungible tokens (SFTs) to sell **knowledge and digital products**. Basically, there are lots of NFT marketplace to sell arts, musics, etc. But we intended to sell objects that share with more than a single person. (If you are to sell NFTs, please go to NFT marketplace instead). Payment in crypto (take advantage of barrierless payment to anywhere that have internet). Let's start. How it works With semi-fungible tokens or fractionalized NFTs (F-NFTs), we can create an artwork (a music, a book, an information) that shares with many people. Previously, this is selling for unlimited copies, as long as anyone have it, we print it. Here, we also consider selling unlimited copies (if the author wants); but they can choose to sell limited copies (multiple copies of the same object) either by cloning an NFT or a single NFT that can buyers buy a percentage of it. Percentage if fixed. The NFT is **only a key to access the information**. So the three tiers: NFTs (single copy only) (e.g. you create a wedding anniversary photo, and only hold by your spouse) SFTs (limited copies) (useful for knowledge, music, etc where you want to share it with small group of people) Usual stuff (unlimited copies. We have that nowadays, from amazon, etc. Anyone could buy it. Nothing related to web3 except payment in crypto: so it really becomes "anyone" and not only limited to 200+ countries. Why am one trying to make this? Lots of knowledge are free nowadays. We have the internet and people share stuffs online. But that should not restrict people from selling their expertise to others! After all, the saying "you should share your knowledge open to everyone" is stupid, especially if the author is on the verge of dying from hunger because he/she didn't earn anything to pay for food, shelter, etc. It takes away job positions. It's like telling: teachers don't need to get paid, they should instead share their knowledge for free. But we are not in empire age anymore. Knowledge should not be restricted for the few. It should be open to all. If you (the author) are scared of sharing your knowledge with everyone, but you still want to sell it, consider creating a limit to how many people can simultaneously hold your knowledge at the same time (ignoring that people whom read your book and re-sell the SFT or F-NFT share also holds your expertise). For other knowledge like books that targets everyone, selling it for an affordable price (like $1 or even $0.5) works (everyone including very poor countries where children needs textbooks. Imagine a fractionalized NFT where one classroom can just buy the NFT and "share" it with the whole class, each holding a fraction of the NFT, hence can access the whole book for all shareholders). Current Target Just books at the moment. Nothing else. ISBN? Who cares about that, man, as long as your knowledge is spreaded to whom you want to spread it to. No more ISBN: just (NFT/SFT's) token ID. Conclusion So, guys, anyone interested in this kind of stuffs? Do you think it's marketable? For content creators, can you give a reason why you prefer to sell to only one single person (except for art creators like Mona Lisa drawing which should be one and only one) rather than to more people? **Comments below and let me know!** **Remember to Like and Subscribe**. (this article might be updated from time to time, so consider re-reading if you notice something changes/something doesn't meet what you read earlier).

w@wabinab

The World is Unfair. Blockchain Makes it Fair. Previously, one read an article on Gumroad and decided to try it. Just after finishing one's previous competition/hackathon/whatever it's called ("Spring is NEAR challenge" is the name), one tries to see if one could sell on Gumroad. One thing to check, considering one lives in a country that's not strong with finance, is to check whether things can be paid to my country. https://read.cash/@Alesko/how-i-make-7000-under-4-months-by-doing-this-9054fe3e So Gumroad either pays via direct transfer or paypal. Unfortunately, where they can send direct transfer, one isn't located at. And Paypal, they refuse my country to receive payments (can only send money out, no in). Seriously? This only strengthens in one's heart what cryptocurrencies could do; and the need for cryptocurrencies to replace existing fiat currencies as the worldwide payment system. For fiat, what's seems to be fair isn't actually fair at all; they are for the countries aggregating more wealth; not for others. Despite coming a long way, ending slavery, abolishing racism, and lots of other stuffs and activities going on, striving for equity and fairness; most that receives attention seeks on whether the few could benefits from, if they accepts the activity. For example, paypal is available in 200+ countries; not every single countries. It means for the rest; whether your country isn't trustible; or isn't worth our attention. And like one's country: you're allowed to use paypal to aggregate more wealth to those countries that could receive money via paypal; so the wealthy gets more wealthy, the medium and the poor gets poorer. **Equity and Fairness is only considered after profits can be maximized**. And previously studying in the UK, one just closes the Paypal account and open one in one's country. From the dashboard, it's clear that it isn't equal. Let's skip receiving money. What's an extra tab that Paypal UK has? Crypto. **Sorry to say, Paypal, but you had it the wrong way**. Bitcoin isn't first invented for the rich to invest in and aggregate even more wealth. They're for those whom had enough with the old fiat currencies, the unfairness that it brought, that they starts loving cryptocurrencies with its trading openness and borderless. It's there to give the poor a chance to earn enough so they can stop being poor. It might not be a solution to end extreme poverty (because they might be too hungry that they needs support); but they're for those in poverty to rise to the average. Donations helps those in extreme poverty to rise out of "extreme", and they could, benefitting from cryptocurrencies, rise out of "poverty" to "average". **Crypto tab should not exist in rich countries, but in poor countries.** Things are happening quicker and quicker. The big countries are still developing much faster than those developing and underdeveloped countries. Whether or not developing and underdeveloped countries could ever catch up with developed (or even over-developed) countries is a question. **It's the inhabitants that are severely affected, because the world classifies people and how they are treated based on their residing country**. Albeit, we can't really complain too much. We have developed much faster than we expected to. Human evolutions haven't yet caught up, mother nature haven't updated our genes; and we can already manipulate genes. Little did mother nature knows, she created a species that grows so quickly whom created machineries that they cannot yet handle with their evolution state. **We shall strive to get internet to reach every single place where people wants to communicate with outside world**. If an individual or a tribe refuses to communicate with outside world, it's okay to not install internet; their choice. If they wants internet, but they're too poor to have internet; then... Without internet, cryptocurrencies cannot reach them. Cryptocurrencies currently is only equal for those that can access to the internet. Without internet, they're still not equally treated. Then, build more apps that relies on cryptocurrencies than fiat, be it dApps or cApps (centralized Apps). It doesn't matter; read.cash is a cApp that relies on cryptocurrencies. We need more apps that relies on cryptocurrencies, replacing Amazon, Cloud Services, Upwork and their equivalents, Gumroad and their equivalent, etc. An app that can accept cryptocurrencies could reach most people that have internet access. And with physical entities accepting cryptocurrencies for payment: to buy an apple from a shop with cryptocurrencies; to buy a stationary, etc. lies another layer for cryptocurrency mass adoption. When one could choose to buy an apple with fiat or crypto, then it doesn't matter anymore if one earns in fiat or crypto. Provided that crypto offers simplified signups and payment issues (no need to deal with banks, etc; except the unavoidable tax payment), things are much more simplified and people starts adopting cryptocurrencies if it makes their life easier. Tell me, do you love to fill in forms after forms after forms just to get a single thing done that actually doesn't need the information from the forms filled in? Do you enjoy the process of filling in forms, the annoyance of dealing with third parties and choicelessness of your country's not being accepted? Equity, fairness. Who knows how long before we reach there. (Ahem, **Remember to Like and Subscribe**)

w@wabinab

Been working on some projects lately every day. One "squeezes all creativity juices one have" to work on the project that there are none left to write articles. One will be back in a few days. :)

w@wabinab

How To Earn Passive Income on NEAR Blockchain No introduction, let's start. CryptoHeroes https://ecosystem.pixeldapps.co/cryptoheroes Well, any of PixeldApps game might work; but one only plays crypto heroes so... Initially, you need to put in some money to buy some equipments. Most easy equipments are cheap, selling for only 1 PXT (currently, PXT to NEAR is about 250:1). Then, you can participate in easy raid with others to earn some PXT every week. However, the more harder the raid, the more you can earn. People tend to abuse the easy raid, reaching the state where you pay more (for gas fee) than you earn. Only from medium onwards you can really earn a bit every week. You could also sell equipments; but only rare equipments onwards with better stats for a cheaper price are worth; seldom do people buy rare equipments, but compared to common equipments, they're still sellable. To join harder raid though, you need better equipments, at least (for knights) a sword and an armor rare (not sure what stats for others). (my current stats and heros) Farming on Ref.Finance https://app.ref.finance/farms You could earn some passive income farming on Ref.Finance. Farming requires you first provide liquidity on the farming pair. For example, USDT-wNEAR. If one is willing to spend 1 NEAR on the farm, one first converts 1 NEAR to 1 wNEAR. Then, one will convert 0.5 wNEAR to the equivalent USDT, because providing liquidity requires you have about equal values on both tokens to stake. This way, we could maximize the tokens staked. Finally, return to the farm and stake your LP (liquidity pair) share and starts earning. The exact APR for each pair are seen on the farming page. https://app.ref.finance/ https://app.ref.finance/farms Please, before you continue, check out the risks. It's mentioned that holding might earn you more than providing liquidity, so it's encouraged that you play small: small enough that even if you lose everything, you can accept the loss. Furthermore, don't just look at APR; choose the coins which doesn't continue degrading and provide liquidity, otherwise when you solidize the liquids (tokens), they might have lost their values. Even though you seems to earn a lot from the farm, each unit of the coin might worth much much less now, and you lose more than earned. https://app.ref.finance/risks (currently ongoing USDT-wNEAR and USDC-wNEAR pair on Ref.Finance) Learn Near Club https://learnnear.club/ Believe it or not, LNC provides redeem period every 15th of the month, if you're eligible (user for at least 1 month, earn 64 nLearns since the last redeem period, and earn at least 1 nLearn per week). The exact ratio of nLearn to NEAR changes every month, depending on the price of NEAR; and how much you can redeem each month is fixed. Think of it as a sponsorship to continual learning. Because it's a sponsorship, the prize pool is fixed every month, and only this much people can redeem. Last month, they increased redeem wallets from 250 to 500, 1 NEAR each, at 32 nLearns. Note to redeem, it's a fight, and the website crashes frequently; so ensure you're lucky (to click the correct buttons, load the correct webpage, when the traffic is slightly lower than peak during the day), for "slightly smoother" redeem experience. A better way to earn is participating in feedback. Just today, a new beta testing came out. If you are a good feedback giver, getting out top 20 allows you to earn some NEAR for each feedback. These projects are offered by participants of (LNC's) NEAR Fortified Developer course (which they also called "projects brewing in the LNC Barrel"). Unfortunately, one isn't a fortified developer (yet?), so one don't know how it works. Nevertheless, just participating in beta testing other's projects and get into top 20 (or sometimes top 10) earn you some NEAR. https://learnnear.club/dwork-beta-test-phase-2/ https://learnnear.club/courses/near-fortified-developer/ https://learnnear.club/lnc-barrel/ (a snippet of current campaign on LNC website) NEAR Campaigns Yes, this post is for wedNEARsday, one of NEAR campaigns to onboard more users to NEAR. Participating in one of NEAR campaigns can earn some NEAR if you win. It has a range of ways you can earn, and participate on those you are strong with. For example, Tuesday's "invite a friend" is for anyone, to onboard 3 new friends that week, with 2 sets of winners (8 people) on Telegram (the image below says telegram, discord, reddit; it isn't really true, it's announced and held on telegram, and perhaps you can onboard to other channels, I don't know; but that's where you take the challenge and submit) sharing a prize pool of 40 NEAR (so 40/8 = 5 NEAR each person). You could participate in Meme Monday if you're strong at making funny memes. If you're a content creator, you could participate in NFT Fridays (if you're good at making NFTs, not sure if it must be drawings or could be music, etc) and writer (like myself, an amateur writer), on wedNEARsday. And if you're very familiar with a topic, try out Sat NEAR poll! (P.S. it isn't really announced explicitly, and one **isn't really sure whether it's true**; but it seems like you cannot win twice in a row. That is, if you win this week, you can only win 2 weeks later, so more people can win rather than same person always) Conclusion NEAR offers lots of opportunity to earn. One isn't very sure about other protocol like Bitcoin Cash or Ethereum; but NEAR surely is very generous with earnings. As one of slightly above average participant + developer in the protocol (ahem ahem after top performers found work and I'm still struggling with questioning whether my skills pass to apply for a job, without any previous working experiences except for hobby projects), it's easier to earn some NEAR in some fields (of lots of fields). Do try it out! Start small and check your progress with detailed records on Excel, if it's extremely risky, to ensure you're earning albeit slowly; otherwise go and try something you're strong with and see if you're lucky (plus effort) for the week! **Remember to Like and Subscribe! .** (you could skip the story below, this is the end, if you don't have time to read) Again, some unrelated story Its very funny. Previously, one went to study abroad and register with a bank there. First, the APY is 0.01% with the bank's saving account. After studying for a year, the bank reduces APY to 0.0075% for one's account. Very little eh! Just this year (perhaps a few months back? One can't remember exactly when), perhaps cryptocurrencies's APY have put such a burden on local banks, that when people realizes they could earn much much more on crypto safely (ignoring the greediness of human wanting to pursue every fake airdrops, and the human greediness of taking more and more risk until they lost everything) (in chinese, 苟着), my bank announces: (rephrased) After surveying local banks in (the country's name goes here), we decided that our APY is lower than most banks and will now raise your interest (from previous 0.0075%) to 0.1%! You bet! I go Ha Ha Ha... (Hey! Are you really competing with other banks or cryptocurrency?)

+1 more

w@wabinab

Curiosity: Sharpness and Blunt Previously, we wrote about "Constraints Innovate", about how constraints help encourages creativity and innovation. Today, we will talk about similar topic, in the field of "life", where you might not want to limit yourself. It's not exactly related to constraints, but the opposite of limitations. https://read.cash/@wabinab/constraints-innovate-100f3ff5 In life, we faces lots of opportunities. Some we pursue, some we let go. It's worth noting, **don't always let go when someone stops you**. Most probably that "someone" are your parents; but it could be your guardians or others too! For example, you might want to try bungee jumping, but considering the danger that lies ahead, your parents strongly encourages you not to, for the sake of your life. As a benevolent child, you might stop. Once or twice, it isn't a problem. Many times, or almost all, you lose your "sharpness". When you're young, you're born with "sharpness". You're curious with everything. Just sit there and look at how a child acts: does he/she feels yucky standing in muddy water? No. He/she might not know that it's muddy and dirty; their parents impose their thoughts on the child that it's dirty and yucky. Not a big deal: muddy water might made the (young) child fell sick, and preventing him/her from entering before he/she have sufficiently strong antibodies is a reasonable act. But as parents impose more and more of their "blunted" thoughts on the child, it's like hitting the "sharpness" with a hammer and blunt their child's curiosity, etc. The result, a timid child that's scared of everything, and one literally means, EVERYTHING! The first reaction to a new event/object? Rejection rather than curious of "what if I accept?" Psychologically, even without external intervention, the older we get, the blunter we get. Blunter in the good sense, is being more mature. Blunter in the bad sense? Scared of everything, loses curiosity. For example, in the good sense: when you're young and dating, or a young couple, married or not, they're crazy, they're hot, they're lively. As they get older, their metabolism slows, and a more mature, long-living but slow, love, falls in. No more being crazy: their gradually degrading bodies (you don't think humans live forever, eh) can't maintain that rate of metabolism anymore if they were to live longer. It's also true, that extreme excitement cannot last long. Even if it lasts, you probably get bored after a while; and to get excited again, you need something that's more extreme than extreme excitement, which probably isn't achievable. Hence, something slow but long lasting works better. Note: one (of many) reason(s) reptile live longer is reduced mating rate. (linked research paper, check it out!) https://www.sciencedaily.com/releases/2014/11/141117111654.htm And blunter in the bad sense? Regret! For one with sufficient sharpness and you apply your bluntness on him/her, you deprive him/her from being sharp for the rest of their lives. After a person loses his/her curiosity, you cannot except him/her to really go out again; it takes more effort to sharpen a blade than to blunt it. Furthermore, a degraded body cannot supports the sharpness compared to a still growing/optimal body. You expect to go parachuting after you're 90 years old? Or even after you retired? Check with the doctor whether you still can do so... Not all activities are suitable for old ages; and without trying it while you're young... Ok, enough about families. Let's talk about friends. If a friend ever stop you ***without good will***, it's probably due to their jealousy. For you're "sharp" enough to pursue something that their "sharpness" don't allow them; or you have the opportunity to pursue something, and they don't feel fair, as they also would like to do so, but get limited by whoever or whatever reason(s). If you read that emotion communicated invisibly, go ahead and do it. Don't let your friends stop you from doing something unless they're really for your good (like stopping you to kill yourself is for your good, but stopping you to participate in a competition, where the worse case is you came out last in the competition, is not (for your good)). (rephrased). In general, one vice should not be cured by another. But **envy** **is such a malignant state of mind that the dominance of almost any other quality is to be preferred**. He replaces envy with pride, as envy admit one's inferiority, and pride, superiority. -- The Road to Character, Chapter "self-examination", pg 226, on Samuel Johnson. https://archive.org/details/roadtocharacter00broo/page/226/mode/2up Conclusion While still young, do the things that you can't do while you're old. While you're older and more mature, you lose your sharpness, and things starts to slow down, hence doing something more mellow and slow it is. Pursue while you can; don't let anyone restricts you from doing anything (unless it really hurts yourself, mentally and/or physically, and there's "no way"/very difficult to recover). Other times, you need to fail to success; so go ahead! (P.S. Talking about failure, perhaps one will talk about it next time) **Remember to Like and Subscribe!**

w@wabinab

Why one wrote "Constraints Innovate" Earlier, one wrote an article "Constraints Innovate", it's for a short project that one is working on. One would like to talk a bit about this project: Spring is NEAR Challenge 5. Spring is NEAR is a competition (maybe more like hackathon?) that gives 8 challenges across 4 weeks, hosted by NEAR Protocol, to complete. Participants chose to invest time to finish the project, and this week (as of writing, it's Sunday my time, and Monday is "next week"), it's Challenge 5 and 6. https://read.cash/@wabinab/constraints-innovate-100f3ff5 Earlier this week, usually one would utilize ones' afternoon (still "looking for work" passively, duh) to work on the challenge; but one got a little burnt out, so one took 1.5 days off and started only on Wednesday afternoon. Shorten a day plus this week's is much much more challenging than the first 2 weeks, it seems impossible to complete the project. In fact, one started out with challenge 6, because challenge 5 is open-ended (that is, little constraints), and one isn't sure what to do without sufficient constraints. Challenge 6 is more straightforward with sufficient constraints to start working on. One estimated it takes 2-3 days to complete (actually, 2 days, otherwise one wouldn't have much time for the other challenge). It was a bad estimation. One finishes Challenge 6 partially on Friday and submit a partial MVP. By throwing away lots of unnecessary optional functions and focusing only on the core functions, one manages to share a demonstration of the project. You can check the deployed app here on Heroku (as long as one haven't deleted the app in the future due to limited apps one can have without a credit card; otherwise check github here). The backend is a hassle, taking 2 days; and one as a backend developer trying to make the frontend in one day, hahahah! You'll know when you see it. One shall appreciate that Bootstrap makes my life easier without writing all the CSS myself; and Rails for building a website MUCH MUCH more faster than React (as complication increases; for simple ones, React can actually build faster than Rails sometimes). https://near-zoo.herokuapp.com/ https://github.com/Wabinab/SiNEAR_2022_Zoo_NFT Then, 2 days left: Saturday and Sunday. Submission is my local time, Monday 15h; but one do not like to do things last minute, so let it stay till Sunday, and Monday morning the submission, perhaps writeup the README file (if you don't know what's a README, it's like a documentation for readers to know where to start), additional stuff like recording a video (that gains +50 points on the hackathon), and some basic testing on the website. For Challenge 6, one even have to give up (the holy) unit and simulation testing (and make my life more difficult in the future if one were to clone it as the first thing will be writing tests). For frontend, one is still extremely uncertain how to write tests. That's it for Challenge 6. Let's talk about Challenge 5. One only have 2 days for an open-ended project, so one needs to dive in real quick: 15 minutes to knock the hammer on what project to work on. On Saturday morning, after writing README and record down ones' learning (before one forget about it) on my personal blog, we start with knowing "do something for a good cause". Ok, one ever learns about Effective Altruism, so let's just stop thinking about anything better than that. Then one ever donates to GiveWell (related to EA), so donation is a good topic. Then, why not just port Web2 to Web3 and make something similar to GiveWell while also advertise GiveWell? Sounds good. 15 minutes, done! We landed on a topic. https://wabinab.github.io https://www.effectivealtruism.org/ Now, NFT is very popular, so we'll make "NFT receipts" for every donations. Ok, we add a field for "donate amount" to NFT to record how much you donate. Then, to not fill up your wallet with receipts (ahem, NFTs) like you got a shoe-box-full of receipts (if you kept your receipts from supermarket, etc, in a shoebox like oneself, for a whole year, you'll know what one means), we'll only handle one receipt per donation field. By donation field, one means to "which sector" we're donating. GiveWell classify donations to sector, like Against Malaria for Children, Deworming for Children, GiveDirectly to poor people, and they handle the "backend" by redirecting your money to whom donate the most effective to these people in need (that is, you saves or improves the most life per dollar donated). We shall ignore the backend here, it's not important to end-users anyways, and one did not write the logic for it too! In fact, we don't have the time to do so. Then, each NFT requires "donate and mint" or "donate and update NFT" (since we're reusing NFTs). Now, we need to add ourselves as approved to make changes to the NFT without permission from owner. In fact, we couldn't let them transfer the NFT around, or deny our approvals; otherwise, the syncing will fail. In real life, a receipt isn't worth anything to others, only yourself, like a badge of honor. Unfortunately, one did not delete the code to revoke approvals nor transfer, just to not disturb the "semi-fragile" state of the smart contract. However, that's something to work on in the future. We do deny users from minting an NFT directly though. The only way to mint? Donate and mint. Otherwise, think of someone can assign receipt to themselves in a supermarket without buying something and said they bought something. Whether or not they steal the object or just make a fake receipt, it's having some inconsistencies with the product plus and minus from their database. In the same sense, we can't allow users to mint an NFT as they like; they pay and mint. The "donate and update" just uses the approval we grant ourselves to the receipt, and make changes to the "donate amount", simple. Overall, the thought process when we start thinking is simple, but it's actually not. One think one kills quite a number of brain cells and reached "brain dead" state (when one thinking starts to slow and can't work effectively on something requiring problem solving) trying to solve the issues that are non-predictable as we work on the program. The end result, check this website or this github (as mentioned, one'll pull down the deployment in the future). One finishes this Sunday morning, quick! https://near-donate.herokuapp.com/ https://github.com/Wabinab/SiNEAR_2022_EA_Good Actually, one might have some time to write some tests, but one got pulled into working on something else during Sunday afternoon just now, so we'll also skip that for now and work on it when we require it in the future. The frontend is much easier than first time development. In fact, each project is a feedback to the template that one builds for faster development. Believe me, setting up everything, even with step by step instruction from scratch, will run into quite a number of problem; what says one didn't record down the step by step and forget about it some time later. A template is easier to work with. https://github.com/Wabinab/near_rails_template It's a hassle this week, and one appreciate your time for reading this article with oneself. There may be unclear stuffs when one write this article, since this IS the first draft (no rewrite), immediately published. If there is, you're welcome to ask in the comments below and one'll answer when one found the time to do so. Thanks again. **Remember to Like and Subscribe!**

w@wabinab

Update on Near API JS with Rails Just an update on the previous article on Rails with NEAR-API-JS; we didn't manage to make the frontend and backend works fine. In fact, we have two buttons for login and logout existing concurrently, and a third button to click and check whether you have logged in or not. Then, a fourth button to first login, and click on that fourth button to save user to database. With something on the database, then user can only direct to the page. If user not on database, they don't have a page. Sounds bad with so many buttons? https://read.cash/@wabinab/near-api-js-with-rails-7-f6473580 One thought, we could use js.erb files, just like html.erb files, to work with rendering on the backend, and redirect to js.erb to do the javascript work. It fails; not because one did it wrong, but because one uses Rails 7. After there are some issues (security issues or something, one isn't sure) found on Rails 6 with js.erb, it's deprecated, and Rails 7 locked it so if you did what you did in Rails 6, it won't redirect to the js.erb file; in fact, nothing would happen. It only responds to the others html.erb (if you have one). As a replacement, Rails 7 have Hotwire Stimulus (which one chose to ignore for the earlier part when one is studying Rails) for js.erb. This locates in the `app/javascript/controller` folder, which one chose to ignore till now. And checking this article, experimenting with it, one finally found out how to use it. With Hotwire Stimulus, we could do frontend design while calling frontend javascript (on near-api-js functions) at the same time, without having to go back to backend. The controllers does its job on the frontend (seemingly). (How exactly it works, one don't know, and one don't really care unless there's security issues like sending unencrypted private keys, etc). https://dev.to/bhumi/stimulus-rails-7-tutorial-5a6a Let's take a short look on the technical side. (this is for oneself future reference, feel free to skip, sorry @DrPsycho ) Technical Side The important thing (and most easiest to understand) in that article is this pieces of code: // Taken from https://dev.to/bhumi/stimulus-rails-7-tutorial-5a6a <div data-controller="slideshow" data-slideshow-index-value="1"> <button data-action="slideshow#previous"> ← </button> <button data-action="slideshow#next"> → </button> <div data-slideshow-target="slide">🐵</div> <div data-slideshow-target="slide">🙈</div> <div data-slideshow-target="slide">🙉</div> <div data-slideshow-target="slide">🙊</div> </div> and this: // Taken from https://dev.to/bhumi/stimulus-rails-7-tutorial-5a6a import { Controller } from "@hotwired/stimulus" export default class extends Controller { static targets = [ "slide" ] static values = {index: Number} initialize() { this.showCurrentSlide() } next() { this.indexValue++ this.showCurrentSlide() } previous() { this.indexValue-- this.showCurrentSlide() } showCurrentSlide() { this.slideTargets.forEach((element, index) => { element.hidden = index != this.indexValue }) } } It's difficult to understand without experimenting with it. Basically, there are 2 arrow buttons, upon clicking, called `next()` or `previous()` to change to the four monkey face depending on the `this.indexValue`. Talking first about the html.erb code, we note that to connect to a controller, we need a `div` defining the `data-controller` (must be same name). Here, it's `slideshow` so the controller name must be `slideshow_controller.js` under the `app/javascript/controller` folder. Then, we can (or choose not to) define an init value via `data-slideshow-index-value`. This correspond to: static values = { index: Number } that "index". If you have another thing like this: static values = { current: String } We could set the `data-slideshow-current-value=some_string` on the `div`. Then we have the `data-action="slideshow#next"` which calls the `next()` function inside the javascript, if this button is clicked. It could also be an `a href` tag. Next, is `data-slideshow-target="slide"`. This means we call `slideshow` controller (if it's a login controller, it's `data-login-target`), and we put these elements enclosed within this `div` into the array called `slide`. WE can see the array here: static targets = [ "slide" ] We could add other values and assign them other values, if we need to separately control them. Let's look at the javascript controller: The `initialize()` will be called whenever the website load, so anything that needs a value immediately could put here. If we didn't specify a value in `data-slideshow-current-value` because we need some value from frontend which we can't determine with backend, we could also mix `.js` output here, by putting it into the `window` argument (`window` is a universal argument that makes your variable assigned to it be discoverable anywhere within the browser, hence global variable). Notice that for the `values`, we have the singular `this.indexValue`. In fact, for each variable inside, like the `current: String` we spoke about, it will have `this.currentValue`. These are not discoverable explicitly, but implicit rules. It's the same for the `targets`, here we have `slide` so its `this.slideTargets` (plural because there is a list of targets). If we have other name, we'll have `this.<name>Targets` too! That's it for today! Conclusion Well, there's not really a conclusion. This is indeed quite technical. One is happy we found a way to control frontend without relying on backend after a few weeks of searching and pain. **Like and Subscribe?**

w@wabinab

Short Article: How USN can be a game-changer for NEAR Ecosystem? USN, aka NEAR Stablecoin, is out! It brings lots of opportunities to the ecosystem. First, is widespread. Previously, we speak about stablecoin allows widespread of an ecosystem; but that's related to the stablecoin ecosystem. For USDT or USDC aren't related to NEAR directly, people might adapt them but not necessarily relate them to NEAR Ecosystem. With NEAR Stablecoin, mass adoption of USN also means mass adoption of NEAR, directly or indirectly. Next, is ease. Previously, we speak about paying for products in stablecoin rather than worry about volatile coins; now that NEAR stablecoin is out, swapping of USN and NEAR could be done directly in NEAR wallet without a DEX or CEX, users could directly swap a small amount, enough to pay for what they need, into USN just to pay immediately, if they were to buy a bread in the future. Integration within the web wallet makes easy compared to going through another platform for swapping, plus worry about price impact, slippage, tolerance, and all those crazy factors that would take normal people much attention to care about. Talking about slippage, this article mentions swapping between USN and NEAR has zero slippage, and you only pay for commission fee. Slippage has something to do with rapid changes in bid/ask price, according to this article, and native stablecoin pegging means this slippage is eliminated? One don't really understand what slippage is, so.... https://medium.com/nearprotocol/decentral-bank-launches-usn-a-near-native-stablecoin-cafe1ec0c5af https://www.investopedia.com/terms/s/slippage.asp Really, with NEAR stablecoin, holding USN or holding NEAR isn't too much difference anymore, since they're soft-pegged to each other. For investors trying to earn price difference (buy the dip, sell the dunk), exchanging to other non-native stablecoin reduces the price benefit of the coin as less people holds it. Now with USN, people could hold USN when high (sell the dunk) and hold NEAR when low (buy the dip), and it's still considered holding NEAR Ecosystem's coin. Ultimately, more people holding a coin means it's more popular, more use cases, and more adopted. USN allows that without swapping to other stablecoins. Conclusions Despite the shortness of this article, native stablecoin might bring lots of benefits that one cannot see to NEAR Ecosystem! The points mentioned are clearer benefits to NEAR Ecosystem, while there may be other blinder benefits difficult to spot. Hopefully, as people realizes the head-aching bank procedures just to open a bank, make some transfer, and even **entering a password**, people might start adopting cryptocurrencies, and NEAR would attract more users by then. **Like and Subscribe!** References https://medium.com/nearprotocol/decentral-bank-launches-usn-a-near-native-stablecoin-cafe1ec0c5af Unrelated Side Story on "Entering a Password" Previously one was at a place where internet connection was quite cranky, and one tries to log into my bank. However, it says "the digital security pin you entered is wrong. If you continue entering for more than 3 attempts, we would lock your account". One thought, what the f$$$ are you speaking about? Then one tried to "Forget your digital pin" and it brings me to password page. Believe me, one had entered these passwords for a long time before, until recently the bank asks for (forces you to create a) digital security pin only one create a pin for that. But entering a password, one got "the password you entered is incorrect. If you continue for more than 3 attempts..." Ok that just sounds stupid, you just put one to bathe inside a pot of boiling water! Luckily after regaining strong internet connection, the pin one entered (correctly previously) does not get the error message because of stupid internet connection. So, be grateful for cryptocurrencies replacing these entities that makes our life more miserable as if they aren't miserable enough.

w@wabinab

Constraints Innovate One isn't very clever, nor is one creative. The only reason one could do lots of things, is sensible constraints. To brainstorm ideas from nothingness, almost all of one's idea are crazy, if not impossible. Minimum Viable Product (MVP)? Nah, **Maximum** Viable Product, without constraints. It's therefore important to set sufficient constraints on a project, but not more. By "project", one do not just means working project, but other things as well. It could just be an activity, brainstorming for a solution; or it could do with life problems, and how to solve them. Let's look from work perspective. When you participate in hackathons or competitions, they asks for "do anything related to this topic." That's it! That's the only constraint. It's really difficult to build upon a single topic for oneself, as brainstorming without a solid base means creating something totally new from scratch, or with lots of researches, integrating various ideas into a single perspective. It's not doable, just it requires more time to trigger a light bulb and start working on the project. With a more constraint project, specifying what you should work on and what shouldn't, it narrows where you could search, and directs you towards a direction that the outcome wants. For the former you could do anything you want, and what you did might not be solving others' problem... while the latter, it's more probable it relates to whatever the competition organizer wants. **An existing constraint directs the outcome of the project, to solve a single issue**. You might think, constraint limits the sky, limits our creativity, and limits what we can do. Nope, you're wrong! **Constraint innovates!** When a plane crashes and sunk beneath the sea, why can rescue forces locate the debris and black boxes within weeks? Because of constraint. They calculated within which boundaries the plane most likely sunk, and do a thorough search in that area. If they cannot find, either because their search aren't inch by inch (searches too quickly and sparsely that it misses) or the waves might wash the debris away (which they'll expand their circles of search). No search party says, "it might be anywhere on Earth" and send out everyone to search through the whole world, do they? The question is: **What can we do given these constraints? How can we make things happen given these limits?** You'll be surprised by the creativity when sufficient constraint is enforced, how people will go around here and there, finding loopholes between constraints, to solve certain problems. Such creativity might lead to even better solution that without a constraint! Furthermore, participants could stay focused with the task at hand rather than trying to innovate something from nothingness. It's not to say innovate from nothingness is not good. It's just that, groundbreaking innovation mostly happens with constraints than without. Those without constraints mostly leaves their name on history; but how many of these person are there, compared to how many people are alive on the world when they're still alive (or now if they're currently alive)? If only 1 out of a billion people could make such groundbreaking innovation, from nothingness, how do most others make innovation and help the world? Via constraints. Albeit, innovations with constraints are easier to happen. We see it everyday, from large companies that might lack certain materials to produce certain components re-think how they can use other methods or materials to produce the same effect; to individuals facing an issue, which constraints them from doing certain things, and trying to solve that issue via another way. **Innovation with constraints happen more often,** and it's not a menu only for the top guys, the cleverest, most genius of them all. Almost anyone with an average mind could innovate with constraints; who says someone never meet a problem (constraint) in their live and solve it somehow? Constraints to a certain point innovates, but not afterwards. Too narrow a constraint and creativity starts dropping exponentially. It's especially true if the constraint is "this is how much you can do" rather than "this is what you cannot do"; the former restricts you to a few pathways, while the latter only block some paths out of a lot more paths to the destination. Lay out your constraints to lay out your directions, not to act as gatekeepers! Conclusion So starting today, provide some constraints on whatever you're working on, your life, etc. If others don't provide you the constraint, giving yourself too much freedom, you starts to feel overwhelmed, that's the time for constraining yourself and what you want to do. Epilogue Ok, it's not a perfect ending. It's only 2 sentences, anyhow. **Beware that constraints are not restrictions.** There are things that aren't constraint, but restrictions. Restrictions prevent you from doing something, either because you're scared to do, or because you're scared of the truth after doing so, or because your parents are scared (like going parachuting, you might die, so your parents are scared) hence laying restrictions, and these scareness spreads easily, blunt the sharpness in your curiosity to expand your circles of comfort, rather than innovate. Beware of these differences! **Remember to Like and Subscribe!**

w@wabinab

Simplicity When there are lots of ways to do something, choose simplicity. When you can make an existing "thing" simpler, choose so. If you ever aim for something less than simplicity, it's because you're experimenting with something, or it relates to self-improvement (which we may talk about another time). In most other cases, simplicity thrives. Say, writing a story. A story consisting of difficult words, that in the eyes of the writer are mundane words, or perhaps slightly challenging but not too difficult for native speakers of that language, yet extremely difficult to the rest. A story aims to convey something, a message, an idea, something. If you write something and asks the reader to check the dictionary or access the translator every 3 words, or even every sentences, it's inaccessible. The reader finds it hard to read, annoying to switch between a dictionary/translator and the content, if they expect the story to be easy, fun, and relaxing to read. Therefore, choose simplicity. It's not always the case though. You may want to add some difficult words to challenge the readers. If things come too easily, they might find it bored. Occasional hard requirements challenges the reader to think instead of to absorb, to act instead of to react, to be active instead of to be passive. Without boredom, your reader wants more! Say, programming. Programming isn't just about the code you write; it's also the programming language that you choose to write. A lively programming language like Python and Ruby serves easier understanding, for yourself, for your readers, and for your future self (when you look back at your own code). An ugly programming language however, doesn't motivate your readers reading them. Even if they need it, they force themselves into it, and come out sad. It's difficult to write in an ugly language and expect beautiful code. Yes, it could get beautiful; for the programmer must be really expressive and understand how to make it easily understandable despite the ugly code! Don't expect an average person to write a beautiful code in an ugly language. A beautiful language however, unless abused, easily produce beautiful code. Even so, it's up to the programmer to make it beautiful, readable, clean, and appreciate the spaces between codes. The best, someone whom can write beautiful code with beautiful language; something so easy even a layman (whom at least know that code executes in these manners) understand the flow. Say, in life. If you chose to buy bread from one store, stay with it. When visiting another country, though, you might want to try out various stores' flavors; at your home town however, choosing something and stop thinking about it, fares better in the longer term. If you have to choose every single little thing every time, you'd be out of attention very quickly. By fixing the little things to simplicity, to your instinct, you could spend your limited attention somewhere more important, somewhere which worth more than the little things. Simplicity freed up your attention from making decisions every single time. Perhaps the "life" example is easier to encounter; the other two on "writing" and "programming" doesn't, though. For you, readers, might not be familiar with programming, but at least familiar with writing, which you do in school, either long time ago, or still writing now (in or outside school). We shall skip the various ugliness that amateur programmers do and speak about writing. On Writing Every single word matters. Do not waste words. It doesn't mean you can't use long sentences, though. If you use longer sentences, ensure that every phrase in that sentence is expressing something, not a waste. An example is "**to be able to**". Some articles one read previously uses this phrase. It's fine if it occurs only once or twice, but not more. Replace this: "The phone needs a charger ***to be able to*** charge." with this: "The phone needs a charger ***to*** charge." Simple, right? We cannot totally omit waste of words, unless you read what you write over and over again, give it to several editors to do the checking before publishing. We can, however, aims to reduce unnecessary words. For further references, check "Omit Needless Words" of this book. https://archive.org/details/cu31924014450716/page/n25/mode/2up Conclusion Simplicity is necessity. By including only necessary words, your end-product is more understandable to its readers. By dealing with only necessary stuffs in life, you live a simpler life. A simpler life is not a bored life, though; you just focus your attention on whatever matters! When you aim for easier understandability when others read your work (or other stuffs), you aim for simplicity indirectly. Let's keep it simple. **Remember to Like and Subscribe!** References The Elements of Style

w@wabinab

DeFi on the NEAR Ecosystem Decentralized Finance (DeFi) make up the base of NEAR Protocol. For other components like dApps to thrive, it needs DeFi. Most end users don't directly needs DeFi apps; they need it indirectly when using dApps. For example, playing a game that have a different currency, player will trade for their native tokens on Ref.Finance. Or perhaps a dApp like sweatcoin awards their users with SWEAT, but other apps don't use SWEAT, so users swap their tokens on Ref.Finance (DEX) to other native tokens. Perhaps except for investors, DeFi ease life when using the higher level dApps rather than being enticing themselves. Let's look at their use cases. Replacement for Banks and other Entities Today, we have various services like banks, money lenders, etc. that helps serve other purposes. Perhaps we want to buy a house, we shall lend some money from money lenders. Maybe we have lots of money, saving them in banks makes life easier. Going to the supermarket, swiping cards are easier than paying in cash and wait for changes; which if someone counted the changes wrong, a dispute arises to be resolved. These just makes our life so much easier! What's its equivalent in crypto? As you guessed, it's DeFi. It's the first thing that an ecosystem needs to build before other stuffs like dApps could thrive. Without it, token exchanges would be impossible. If token can't be exchanged for another token, it would have limited use cases, and its value will start dropping. In fact, every single coin that independent of one another would start dropping, if it can't be exchanged for other assets. For inter-chain exchanges, we have DEX (Decentralized Exchanges) like Ref.Finance or Skyward Finance, where we could swap NEP-141 tokens (i.e. tokens building on NEAR Protocol). To swap cross-chain, such as to Ethereum, we use the Rainbow Bridge. As for borrowing assets, markets like Aurigami and Burrow does the same. Albeit, it makes life even easier without requiring going to the banks and go through painful steps before money is borrowed. Everything is defined by the smart contract, that is most probably open source, and you just follow the rules defined! Violà! https://app.aurigami.finance/ https://app.burrow.cash/#/deposit Use Cases Boca Chica is an Initial DEX Offering (IDO) Platform. Traditionally, a project requiring funds borrow money, pitch for investment, etc. Now, people whom support your project could buy native tokens, which initially have no values, with a token that have values. For example, buying DEIP with NEAR tokens. The startup defines how many NEAR tokens they need to successfully startup the project; hence they sell a small portion of their native tokens to true believers to give them a head start. Providers the project have sufficient true believers, it's much much easier than asking for investment from specific people. The crowd now fund you, not a specific company/investor. The startup is dependent on many sources, albeit true believers, than a single investor's will that most probably change over time and affect the direction of the project. https://bocachica.io/ Conclusion Seriously speaking, this article does not fully discuss the potential of DeFi. Other stuffs like stablecoins with TrueUSD or the currently rumored USN is also considered DeFi. In conclusion, most end-users (non investors) benefits from DeFi to get what they want, indirectly (including myself). Investors could use DeFi to get what they want: trading to earn money despite the risks, etc. DeFi isn't facing end-users most of the time; dApps are. DeFi is more of a backbone, a base, for other dApps to thrive in a healthy Ecosystem. I don't really care about DeFi, but one enjoys the benefits it brings (and one believes others too)! https://trueusd.com/ https://awesomenear.com/decentral-bank **Like and Subscribe if you like my articles**. (As one isn't a fan of DeFi, we shall have a partial article, unlike a full blown ones that you might have read before. Visit my home page for more!) https://read.cash/r/wabinab References https://www.coinbase.com/learn/crypto-basics/what-is-defi https://near.org/defi/ https://awesomenear.com/categories/defi https://nomicon.io/Standards/Tokens/FungibleToken/Core https://coinmarketcap.com/alexandria/article/what-is-an-initial-dex-offering-ido-and-why-do-we-need-them

w@wabinab

The Genesis *For the first light that breaks through dawn, penetrates through the gaps between the clouds, and shines upon the marred land: a new era begins. We call it "The Genesis".* "**Hmm, what shall I do today?**" Do you ask that question when you wake up everyday? Or perhaps the day before or even days before if you plan ahead of time? Do you have your own time, that you can choose what to do for the day? Or do you think it's even a luxury to ask that question? Your days are filled with errands that others has assigned you, that you don't even have hours for yourself? That to do something you like or to meet with your friends, you "squeeze" time out of your schedule? Time is a luxury. My days are numbered; yours are numbered too; all of us have numbered days. Face it, we will die one day, no matter you agree or run away from the thought; whether you feel okay or intense distress at the sign of thinking you'll die one day. With numbered days comes appreciation: appreciate that you still have another day to live, appreciate that you have another day to do something that you like (or don't like), and appreciate that you still have what is with you: your possessions, your health, your self. Time is a luxury, whether we waste it or not, invest it or not, do something or not; it still walk its way, undisturbed by any actions we perform. "**Did we do something that makes a difference in others' life?**" How about this question? The world is getting better; and there are many people whom wants to work in something that makes a difference. Perhaps a startup or project that makes a difference in others' life, perhaps joining a community like Effective Altruism (EA) that strives to solve some of the worlds' most challenging problems emerging from different cause areas, or just trying to make a difference in someone's life around you. Does it matter anyway? Well, depends. Earth will still rotate with or without your presence; it seems like your difference can't be big. A group of people striving for the same cause might make a larger difference, significant enough to be visible. Even if you don't do it, someone will take your place and do it. And if you do it, others might or might not join you. Generally, someone will try to solve others' problems, or larger problems like Climate Change: perhaps working in these areas might motivate you to continue working on. Perhaps, the thought that you can make a difference, keeps you moving on. It's an irony. For someone dedicated his/her entire lifetime towards a larger cause, he/she would not have time for people around him/her. It's a sacrifice; a sacrifice that sees from others' perspective, worth a million Pounds. Because of his/her sacrifice, we don't have to sacrifice; and with our reluctance to sacrifice pushes a God-like feature to make the sacrifice. It doesn't matter if he/she does not have a life of his/her own; we made the figure God-like: and a God-like feature doesn't need his/her life, at least from our perspective. If he/she does, then who shall serve us? It's not always the way though. Someone certainly will join the movement and sacrifice themselves too. In a group, the God-like feature suddenly feels what he/she did is worthwhile after all; he/she had started the movement of mass sacrificial, whether to make the world a better place or not. It's a comparison: when there are others whom are in as bad a situation as yours, how will you dare to make your situation better than others, and leave the others below yourself? It's a choice. For one is selfish, and would want ensurity of one's life and the ecosystem around oneself; **then only** ensuring those of the larger population, of the whole world. It's what give ones' life meaning. If someone shall change my mind to care about those in the larger population at the expense of oneself, perhaps there's no point of continue living on, at least in one's perspective. Enough of oneself, others don't have to think the same. Everyone have their meaning in life, what define things as worth or not compared to the sacrifices made, and what they want to achieve in lifetime. The direction pushes them forward, and happily, continue on with what they strives to do. When a person of selfishness meets a person of selflessness, it's difficult to become friends. The latter has dedicated so much time into selflessness that, only those whom stays with them, have longer interaction time together. During activities, they enjoy time together during breaks. To have a deeper relationship that demands from each other outside of activities? It's miracle. Tell me, if you're a selfless person, how do you maintain this relationship? No answers like: "find new friends whom fit" nor "it's not gonna happen" and its equivalent allowed: these are evading tactics, my way or the highway; not a solution to solve this problem. The former leaves at least one party in desolation; the latter, not sure until tried out. Human is too complicated, anyways, to simulate. It can be worse: when you live for others. For you yourself whom can't decide what to do, others shall decide for you. For others can create things for you to do and serve their needs. For others can create lots of things for you to do, so you have no time for yourself. For others can create lots and lots of things for you to do, to ensure that you shall continue working for them, **by ensuring that you do not have time to even stop and think for yourself**. The numbness of continue on and on ensures that their profits are maximized. You want to find a more relax job? Sorry, I'll assign you these and these stuffs and pile up your work so you don't have time to find another job, nor even think about getting another more relax job. You want to go on a holiday? Remember to keep your phones on so we can keep on updating you with jobs and ensure that you shorten your holiday, get back as quick as possible, and ping you every hour so you won't have time to think about changing job: we won't give you real holidays, that's not profitable. Conclusion In conclusion, we don't have that much time as we think we have. We're not immortals, and days counts. The next day you wake up, appreciate for what you have, and that you have another day. We don't know when we might die: the world are full of accidents, and we can't say we're lucky enough to not be the focus in an accident. Anyone can be the focus of an accident, including oneself, yourself, and others. While you don't regret, appreciate, for the first light that breaks through dawn, penetrates through the gaps between the clouds, and shines upon the marred land; a new day begins! The Genesis. https://dictionary.cambridge.org/us/dictionary/english/genesis **Like and Subscribe if you like my post**. Word (that gets highlighted red, perhaps not in English Dictionary): **Ensurity:** From "Ensure", assurance of something. "ensurity of one's life" means "to ensure that one's life is (first) fulfilled (the needs/wants)".

w@wabinab

NEAR API with Ruby on Rails: An update, A summary Previously one wrote about NEAR API JS with Rails 7. After first written, one made several edits to the article here and there to the point it's not smooth anymore. Reason is, it fails. Yeah... https://read.cash/@wabinab/near-api-js-with-rails-7-f6473580 Let's talk a bit about its failure and what we did instead. (This includes some terminology that may be difficult to understand. Overall, one include a final section containing some terms, non-exhaustively, for explanation). "View Functions" on the Backend View Functions are functions that read some data from the contract. These methods are free: you don't have to pay gas fee when calling them. The NEAR API Ruby Gem contains just the function for this. As view functions can be called by anyone, even one whom don't have a wallet (hence no private keys required), it's safe to call it from the server-side. The built-in function makes it easier to call it from the server side and send (POST) the information back to the end user to view the information. https://github.com/near-rails-guide/near_api/tree/master/lib/near_api In contrast, if we did this with Javascript, there are some difficulty trying to get things displayed in front; unlike a pure frontend approach, Rails generate the page from the server before sending the content to the user for viewing. Javascript is on the client-side, hence if we need to read data, it requires to first send back to server, processed, and send it back to client-side for rendering, which is just redundant. "Change Functions" on the Frontend Unfortunately, the NEAR API Ruby Gem aren't capable of doing change functions yet, as far as one is concerned. Hence, the easiest is NOT to write your own stuff, but just re-use near-api-js. It's also not easy to re-write what's already written in near-api-js to backend though. There are a few concerns to consider: If we store the function keys on the server side; In case of a breach, funds might be stolen. Even though function keys have restrictions on how much funds to withdraw from users, it's still funds stolen. It makes better sense to store it on the client-side. Javascript don't communicate well with Embedded Ruby (ERb): information sending to ERb requires Ajax, and that's just difficult for Rails student like me. Hence, the max one could do after executing a function is to have a pop-up saying it's successful. Professionals could do more than that, though. Login and Logout This is the worse thing one ever made. Because one haven't learnt until how to cache on the browser (it's in Chapter 9 of Michael Harts Ruby on Rails Tutorial Book, but one barely finishes Chapter 7), one send wallet information back to server, currently including the function keys (which really don't need to, as it's not needed by the view functions, but one is too lazy to remove it for now). https://www.railstutorial.org/book To initiate a request back to server, we need to click a button to send the request. This button is different from the Login button. This means we can't do everything in one click, but requires login first, then send some information back to server in a second click. One have no good idea of solving this, though. Even if we can cache, we also need to send some information back to a database. With Rails, the easiest way to create dynamic pages is with a database entry. One entry, one page. Therefore, sending at least the wallet address back to the server, just like signing up, is required, to create a dedicated page. The equal program in React (originally) is NOT to create dedicated page; however, one found that difficult to execute in Rails a dynamic page. Professionals might have different viewpoints, but one don't. Therefore, specific pages it is. Conclusion There are just so much stuffs learnt during these few days, so much head cracked, so much blood burns (it seems like there's a heat wave here currently, it gets very hot to the point ones' sweat pores refuses to sweat, hence heat energy gets trapped inside ones' body and burns oneself.) before an MVP is completed. Hopefully with this MVP, one can go forward to make other MVP's easier. With experiences, one will update the technical blog linked to this non-technical explanation article as we move forward. For the website, visit https://near-greeter.herokuapp.com/ to play with it! You need a NEAR testnet account, though. You can make one at https://wallet.testnet.near.org/ (make sure you memorize this http address; there are lots of scam website out there so it's better to type the address than to go to google and search for "near wallet" and click on a link that's may or may not be legit.) **Update:** One pull down the website, so please visit the github page here and set up your own localhost if you know how. For more thorough instruction, refer to this more detailed README. https://github.com/Wabinab/spring_is_near_2022_greeter https://github.com/Wabinab/near_rails_template Terminology View Functions: Functions that can be called by anyone, even one without a wallet, for free (no gas fee paid). It's a READ-ONLY operation. Change Function(s): Functions that make modification on contract's state. It's a WRITE operation. Hence, it requires paying gas fee to make the change, and someone needs to sign the operation. Requires to hold function keys. Full Access keys: The ultimate private key to your wallet. This key can be generate from the 12-words seed phrase for accessing your account in full. (Some wallet like Fantom use 24-words seed phrase, but it doesn't matter how many words there are). Function keys: A limited-access private keys with limited functions. Usually, it is dedicated to only have certain access to your account, usually function calls. This key is held by someone else other than yourself so they can make the call with your consent. These keys have a limitation to how much money it can withdraw. (On NEAR, it's 0.25 NEAR by default, unless contract request for more). Upon exhausted, they need to asks for consent from you again to create a new function key so they can access more funds. Client-side: End-user endpoint. Storing something here means it's "cache" on your browser. Server-side: Server endpoint. Something that requires computing power to process are send here to process before sending back to client. For sensitive information like password, a "password digest" is generated before sending here, to protect from hackers. (Many more things it do, one could even write an article on it). References For the technical article, check NEAR Protocol and Rails. Though in the future, one did not plan this article inclusive of this small activity only but continually updating it. Also note that one did not share everything, as it's more of a diary than a teaching material. https://wabinab.github.io/2022/04/14/NEAR-Protocol-and-Rails.html

w@wabinab

Ecosystem Growth with Stablecoin In a previous article, one explained about how blockchain is not crypto investment. In fact, crypto investment, including cryptocurrency per se, is a subset of blockchain. The majority public is unwilling to take the risks of investment, but they could accept blockchain (if they even understand what "blockchain" means) without accepting the risks that comes with crypto investment. Introduce stablecoin, a (semi-)stable currency that does not oscillate with non-stable currency's ups and downs. https://read.cash/@wabinab/blockchain-is-not-crypto-investment-f84ac019 While non-stablecoin offers an investing opportunity for investors, the majority public favors security, stability, and assurance of a currency over volatility. With a stablecoin, the value does not change much, making their lives easier. One do not have to wait for the currency to go up before visiting the supermarket to buy a loaf of bread that cost 0.3 NEAR when cryptocurrency is down and 0.1 NEAR when it's up. Two parties can agree on trading at a certain value without worrying about coin value changes. One can easily sell an asset without changing its price automatically/ manually as the value of the selling currency changes. Stablecoin just makes life much much easier for trading. P.S. One refrain from using crypto investors term like bullish and bearish, "wen" "moon???" etc that the majority public, including myself, don't understand. This article is for majority public to read, not limited to crypto investors. Additionally, stablecoin provides the security assurances the majority public wants. Someone retiring knows that they have enough to pay for their rest of their lives if their currency is stable. Someone working for a job knows they're paid with a fixed value rather than a depreciation of their work as the currency value drops. Someone (well, most people) without sufficient attention to care about the currency volatility requires its stability so they can stop worrying about currency value and fulfill their roles with full attention. Stablecoin is a security anchor that assures its value do not change (much) over time. Furthermore, holding stablecoin do not need KYC. While you might need to explain to the banks, money-issuers, or the authority where your money source from if they are in the banks (especially if the trading is a large sum of money); stablecoin hides identity. KYC means authority trying to control and invade others' privacy so those in control remains in control and those not in control never topples those in control; cryptocurrency allows identity-free trading, free forever! Of course, detectors could track down who owns which crypto wallet based on someone's behavior, hacking, or other means; but at least your assets aren't in someone else's control. What's your is yours. Of course, illegal traders may abuse cryptocurrency for trading drugs, weapons, any objects that brings harm to the general public; but it isn't a problem with cryptocurrency -- even fiat have these problems. Stablecoin allows holding a currency without verification and worrying about getting ban by authority from accessing their assets, for whatever reasons. Conclusion In conclusion, non-stablecoin isn't suitable for the majority. Trading is more viable with stablecoin and security and stability is more assured with stablecoin. Blockchain is never a privilege to crypto investors; it's for the general public. We cannot achieve mass adoption if what the majority wants: stability and security, is not assured. Having a stablecoin for easy trading with its linked non-stablecoin, people could accept the blockchain more. The majority public could enjoy the advantages the blockchain brings without worrying too much about risks. If you still worry about stablecoin collapsing, why not worry about fiat currency also collapsing one day, for whatever reason(s)? References https://www.coindesk.com/learn/whats-the-point-of-stablecoins-understanding-why-they-exist/ https://qz.com/2069413/what-is-the-point-of-a-stablecoin/ https://cryptolocally.medium.com/why-do-we-need-stablecoins-38590dac2942

w@wabinab

Blockchain is NOT Crypto Investment There are two possibilities when someone first thought about crypto: either it's too risky to go into, or it's a chance to earn big. Most people go for the former, relying on something stable; while some adventurous people go for the latter, hoping they could multiply their assets. But we want to speak about blockchain and mass adoption in this article; so the problem is: **when people first see blockchain, they relate it to crypto, which they relate to being risky, which prevents them from adopting blockchain when blockchain has nothing to do with crypto investment.** Per end-user marketing perspective, the word "blockchain" does not trigger much in others' mind. Before one enters blockchain 4 months ago, one don't even know there exist the word "blockchain"; and most probably one filters it out when one sees it; until it reaches me via word of mouth by a friend. However, when you see an app on the brave browser, like "use Bybit to earn up to $500 in return" and these, it just sounds like scam, or **risky**. No risk, no return. Then you see another brave ads "Introducing NEAR Protocol"; somehow people will associate these two non-associative ads and the latter become *risky* too! The message "blockchain is crypto, and crypto is risky" carves deep into people's mind. Therefore, when marketing for blockchain, it's useful to explain how they differs from crypto investment ***after user agrees to listen***. First impression is important; "blockchain is crypto, and crypto is risky" is not a good first impression. Neither is the word "blockchain" itself explains. Therefore, how do we explain "blockchain" itself and what it's trying to do, separate from "crypto investment"? One don't know! Exact marketing strategies and wordings requires experimentation, failing several hundreds of thousands of times before conclusion; here, we will just make some ****naïve strategies that might or might not work****. A marketing ads need to quickly catches attention; it couldn't be too wordy, but it couldn't be meaningless. "Blockchain: The future of the world." just means nothing. End-user would think: we're already in a good world, either or not blockchain exists. Perhaps Blockchain: users should get paid for their contributions/actions. might gives better impression and arouse user's curiosity. Or something like: Tired of Twitter/Instagram/Snapchap/Facebook not paying you for your time? Blockchain aims to change that. Check out Bwitter/noise.cash/myriad/whatever... also might works. Try experiment with the wordings and see how many users it attracted for reflective answers. Currently, blockchain attracts quite a majority of crypto investors; as they can easily accept any risks in blockchain. To spread the news to the majority of human beings, though, blockchain should not be associated with crypto investment during marketing. Don't give end-users the impression that, to adopt in crypto, they need to get into the risk. Mass adoption would meet resistance otherwise. Conclusion It's extremely important to distinguish between blockchain and crypto investors. Blockchain aims to change the world from centralization and data control by a few authority, to something that is decentralized and cannot be controlled by any single party (or even multiple parties teaming up); "crypto", referring to crypto investors, are a bunch of adventurous guys whom put in lots and lots of their money hoping it would give back a lot more in return. Blockchain builds their token with cryptocurrencies, but they're solving a different problem than crypto investors. Crypto investors burn fiat and mint crypto tokens, hence giving it value; while blockchain builders are making a whole new different thing that has nothing to do with investment. Share this article to your friends whom don't differentiate between blockchain and crypto investments! Of course, if they're hard headed and refuse to change their point of view, there's nothing much you can do about it so don't bother. **Like and Subscribe if you like my posts**.

w@wabinab

Where DAO Belongs in the NEAR Ecosystem Meet Decentralized Autonomous Organizations (DAO), a replacing mechanism to the traditional hierarchical organizations. Instead of a CEO at the top of the pyramid to give instructions, they are decided via voting process by the community, for the community. Instead of decisions behind closed doors, they're made in the open. Instead of trusting the organization for their promises made, DAO promotes trustlessness when everything is available in the open. The advantages are limitless! Let's see how these factors apply in existing DAOs: the Orange DAO, Unchain.fund DAO (on AstroDAO), Sail GP DAO, and Constitution DAO. DAO allows community activities coordination. SailGP, an international sailing competition, creates a DAO for their latest competition. Anyone could take initiatives introducing new activities that previously un-think before, either because of restrictions or no tools available to make it happen. Then, they submit proposals to the DAO for voting from the community; if it passes a certain percentage, they get their funds to run the activities. It's not just SailGP, but Unchain.fund uses this multiple-signature (multisig) component (voting process) to distribute their funds to Ukraine humanitarian aids too! Community decides where their donations go. Hence, DAO allow reimagining community-created activities that previously meet roadblocks from higher level hierarchies. DAO introduces old sports to new audiences. SailGP partnership with NEAR spreads the soul of sailing to a wider community that might never thought of sailing before. As a result, more audiences participate in the sport, or at least try it out. Even if they don't end up competing in SailGP, it could pique audiences' interest to sail casually wherever they are. In fact, one think that if combines with play-to-earn element, it could brings more people to join the sport. Web3 is no longer stuck "on the web" (nfts, crypto only); it had bring itself to the physical world, for people to participate physical activities, with real people whom they could make friends with, in real life (IRL). DAO also maximizes transparency by having transactions on the blockchain. Traditionally, the distribution of charity funds to desired end parties are done behind closed doors. How much percentage actually goes to the end party depends on what is reported by the organization; and the data requires community's trusting there are no misstatements in funds allocation. Thanks to triple-entry accounting, community can verify how the funds are transferred on the blockchain, including how much funds are left on the DAO. The community do not need to trust the organization; they just need to trust that the blockchain is giving them real result, based on inspecting the source code of the blockchain. In return, community are more willing to donate if they know where their donations go, hence speeding up the process of fundraising. To utilize their funds on the blockchain, Unchain.fund partners with Ukrainian banks to off-ramp them to fiat currency for distribution. After all, fiat is still a widely used currency, while crypto is gaining its traction to wider marketplace. DAO allows for emotional and cultural resonance. Any group of people sharing a common value can come together to start a new DAO; which people sharing the same value could join if they previously aren't in the group starting the DAO. The bonding between people sharing a common value demolishes literally all friction that prevents something from being put forward. In fact, the Constitution DAO is one of the fastest fundraising DAO, frictionless! This isn't just about holding appreciation token; a token only gains its value if people appreciate it, likes what they do, and find that they belongs in that community. Combining with tools from the NEAR Ecosystem and an agreed-upon deadline, the Constitution DAO motivates its contributors to accomplish something they care about. Finally, DAO onboard web2 builders on to web3. The Orange DAO, combined with NEAR Ecosystem web2-friendly tools, allows web2 builders to join the community as a Y Combinator (YC) builders (the term YC is confusing, perhaps it's just a name used internally). Anyone can form a team worldwide (the team does not need to be physically close together, members could be from anywhere around the world) to build. In return, NEAR achieves its goal for mass adoption by the community. Conclusion In conclusion, the above are just a few use cases of DAO. There are more use cases for the community to discover. These use cases might not be something already existing; new tools provided means new possibilities to what can be done. With more users onboarding to the NEAR Ecosystem and hence building more DAO, community finds a place where they belong in the ecosystem, where their voice matters in that community they joined. Join DAO, join NEAR. **Remember to Like and Subscribe if you like my posts!** References NEAR March Town Hall YouTube Video (final section on DAO discussion). https://www.youtube.com/watch?v=MZLYkQG0d38 Sail GP Wikipedia https://en.wikipedia.org/wiki/SailGP

w@wabinab

Feeling Guilt, Feeling Dazed Feeling weak, feeling helpless. A gut sense of sourness floods, your heart starts pumping faster, adrenaline rushes; your posture tucked in, breathe gets shorter, and the brain lacking of oxygen starts panicking. A sense of nervousness rushes down your body, urging you to stay away from danger, to dig down the source and solve the problem that leads you here in the first place; you feel guilty. Your guilt locks you from doing any work, to repetitively repeat the scenario again and again for a very long time, before it fades (and perhaps the cycle repeats again). Once in a while one experiences that. Yesterday one was struck with one's incapability of getting a proper job. The reason isn't always the same, sometimes it's about incapability of making friends, other times for various reasons. But one experiences it; and it's not a good feeling. It keeps stucking in one's head, rendering one incapable of problem solving, thinking, and sucks away motivation to work on stuffs. Fortunately, one found that writing it down or diving deep to solve the problem does solve the feeling from ghosting you longer; the latter solves it from the root, the former a temporary measure where the feeling most probably come back after some time. Though, it's not always solvable. One don't like text messaging; preferring for face to face or video call better, if not voice call is ok; but not via text. Nowadays more and more people however loves text messaging compared to other means of communication. A conflict in interest, an unsolvable situation. Other situations like finding a job -- before you find one the feeling haunts you to find one. Assuming one successfully landed on a job, who knows whether the feeling may haunt you for another reason, like as a regret to find a job requiring to work "dead dead", or perhaps other reasons? A dead cycle. The feeling is a corrective mechanism designed to correct the path you're walking down. The feeling of guiltiness now and then guides you down the path of growth. It always haunts, as humans aren't god: we are not perfect, so there will be a reason (in disguise) to haunt you. Consider it an alarm to asks you to reflect on yourself (especially for those whom are stuck with work without time to reflect); what had you done since the last time it haunts you? Are you walking down the correct path? Have you build your life's sense of direction to guide you, and did you follow it (while you agree with it)? Example oneself to find a job. A job gets you immediate income, and stability, someone defines a sense of direction for you to follow. With ones' work preference though (no working for more than 40 hours per week, as a recent graduate that doesn't have too much experiences but relies on skills of experimentation to do stuffs that certainly takes longer time with more failures on the way), it's not easy to find a job always. For someone new, giving in to get some experiences is an advice; and ones' haughtiness doesn't allow that until one could put it down. Either way, working for yourself, startups, don't give you stability nor a sense of direction: you're responsible for defining your own sense of direction in life, and you're responsible for lots of stuffs that you pass responsibility to when working for someone else. An uncertainty for the future leaves gap for some feelings to haunt. Another reason arises from greed, urges, wants, anger, and other negative emotions. When you want something and it doesn't follows your way, you feel the world is against you; or if you feel it too much, you start beating yourself up saying you can't even have control over something "so simple". Someone seeing himself/herself with the feeling may restrain from feeling so, but it's not easy. Seeing a greed feeling and acting / reacting to a greed feeling is two different things, two different levels of difficulty (one medium difficulty and one hell difficulty). After all, they're carved into our bloodlines from evolution. Likely the world does not revolve around oneself. "I think how this works is...", "Actually, (I believe) the thing...", "I thought...", "But then" Have you ever notice someone using these a lot, perhaps in almost every sentences? Have you ever notice yourself using these (try recording your conversation and play back to confirm) phrases, so equivalent/similar phrases? We speaks according to how we interpret things happening in our environment: not a big problem. The problem arises when you think what you interpreted are always true, because you see it, smell it, taste it, feel it, experienced it, sense it, etc. The world likely don't revolve around you; and your senses likely don't take in every single piece of information to come to a distorted conclusion. Conclusion Shall someone join me down the road to growth. I don't know what the future lies ahead. You would feel lucky to find someone striving for growth hand in hand with you when most are stuck, refusing to grow especially after finishing college. Learning new skills are also growing; though it's the easiest way to grow, and it not necessarily brings you the correct direction of growth. Upon reaching some unexplainable stage, growth lies deeper, and we find our core: to alter one's behavior and mentality, to admit one's mistake and one's flaw, to have the courage of publicly announce one's mistake from past behaviors, etc. May you find and take the road to be a better person. Best wishes. **Like and Subscribe!** (This is a free writing article. One realizes the introduction doesn't fits the conclusion, not even with the body? , BUT whatever...)

w@wabinab

Near Api JS with Rails 7 Introduction One mentioned before that React isn't happy to developed with. Rails is better. Hence, we want to port some functionalities to Rails. Particularly, the `near-api-js` is what we need to call functions from corresponding smart contract(s) deployed separately. You might ask, why not use Gem? Well, Gem requires separate development than keeping everything in one. If core team only updates the `near-api-js`, it would always have the latest functionality before the community updates the corresponding Gem. If you would like to look at gem, here it is. We will look at gem in another article, whenever one finishes experimentation on it; here, we focus on javascript. https://github.com/near-rails-guide/near_api Note before continuing: Beware that one have very limited experience with Ruby and Ruby on Rails (barely 30 hours maybe?), so set your expectations. Things that professionals find a habit doesn't apply here. Also, this is a ***technical blog!*** If you decided to use **bootstrap**, please jump to the bootstrap section immediately before coming back to here. Import near-api-js to Rails 7 Rails 7 introduces importmap. With importmap, you still can use `npm`, but not how you would do it like React does (`npm i near-api-js`). Instead, it integrates with importmap. After creating a new rails project, navigate into the project directory and call this function. ./bin/importmap pin near-api-js If that does not work for some reason, force it by copying these into `config/importmap.rb`: pin "near-api-js", to: "https://ga.jspm.io/npm:near-api-js@0.44.2/lib/browser-index.js" pin "base-x", to: "https://ga.jspm.io/npm:base-x@3.0.9/src/index.js" pin "bn.js", to: "https://ga.jspm.io/npm:bn.js@5.2.0/lib/bn.js" pin "borsh", to: "https://ga.jspm.io/npm:borsh@0.6.0/lib/index.js" pin "bs58", to: "https://ga.jspm.io/npm:bs58@4.0.1/index.js" pin "buffer", to: "https://ga.jspm.io/npm:@jspm/core@2.0.0-beta.19/nodelibs/browser/buffer.js" pin "capability", to: "https://ga.jspm.io/npm:capability@0.2.5/index.js" pin "capability/es5", to: "https://ga.jspm.io/npm:capability@0.2.5/es5.js" pin "crypto", to: "https://ga.jspm.io/npm:@jspm/core@2.0.0-beta.19/nodelibs/browser/crypto.js" pin "depd", to: "https://ga.jspm.io/npm:depd@2.0.0/lib/browser/index.js" pin "error-polyfill", to: "https://ga.jspm.io/npm:error-polyfill@0.1.3/index.js" pin "http-errors", to: "https://ga.jspm.io/npm:http-errors@1.8.1/index.js" pin "inherits", to: "https://ga.jspm.io/npm:inherits@2.0.4/inherits_browser.js" pin "js-sha256", to: "https://ga.jspm.io/npm:js-sha256@0.9.0/src/sha256.js" pin "mustache", to: "https://ga.jspm.io/npm:mustache@4.2.0/mustache.js" pin "o3", to: "https://ga.jspm.io/npm:o3@1.0.3/index.js" pin "process", to: "https://ga.jspm.io/npm:@jspm/core@2.0.0-beta.19/nodelibs/browser/process-production.js" pin "safe-buffer", to: "https://ga.jspm.io/npm:safe-buffer@5.2.1/index.js" pin "setprototypeof", to: "https://ga.jspm.io/npm:setprototypeof@1.2.0/index.js" pin "statuses", to: "https://ga.jspm.io/npm:statuses@1.5.0/index.js" pin "text-encoding-utf-8", to: "https://ga.jspm.io/npm:text-encoding-utf-8@1.0.2/lib/encoding.lib.js" pin "toidentifier", to: "https://ga.jspm.io/npm:toidentifier@1.0.1/index.js" pin "tweetnacl", to: "https://ga.jspm.io/npm:tweetnacl@1.0.3/nacl-fast.js" pin "u3", to: "https://ga.jspm.io/npm:u3@0.1.1/index.js" Add custom javascript to Rails Next, we want to add a custom javascript to Rails. Follow the second answer from this link. Particularly: https://stackoverflow.com/questions/70548841/how-to-add-custom-js-file-to-new-rails-7-project (This is a copy of the answer) Go to `config/importmap.rb` and add the following: `pin_all_from "app/javascript/custom", under: "custom"` Go to `app/javascript/application.js` file and add the following: `import "custom/main"` In `app/javascript` directory, add `custom` folder. In `app/javascript/custom` directory add your custom js file `main.js`. Run In your terminal: `rails assets:precompile` Start your rails server. Voilà 👍 Add config.js There are lots of React projects you can see online. Let's just take a look at the guest book example. In the config.js, we need to make some changes for it to work. In line 1, we need to manually define where our smart contract is deployed to: unlike react which saves the configuration in `process`, Rails cannot detect `process` keyword, as smart contract is deployed separately from it (React is deployed together). So for example: https://github.com/near-examples/guest-book/blob/master/src/config.js const contract_name = 'guest-book.testnet'; Second, change `function getConfig(env)` to `export default function getConfig(env)`. Lastly, since we already `export default`, we can remove the last line (**remove** `module.exports = getConfig`). Add contents from index.js to main.js We named it main.js, but you could name it index.js too (just because the answer uses main.js one is lazy to change it). So in main.js (or index.js): Copy this content and put it in: https://github.com/Wabinab/NCD_demo/blob/main/main_project/src/utils.js We surely could call an init function when starting Rails Server. What we do is make changes at `application.html.erb`. In the `<body>` tag, add a `javascript_tag` before `yield`. <!DOCTYPE html> <html> ... <body> <% javascript_tag "javascript:initContract(#{Rails.env})" %> <%= yield %> </body> </html> So we added an extra input to pass in `Rails.env` to `initContract`, let's also update our function: (This replaces the `process.env` that Rails cannot detect we mentioned before): export async function initContract(environment) { const nearConfig = getConfig(environment) const near = ... ... window.contract = ... } Remember to update the `viewMethods` and `changeMethods` with the function names deployed at your contract! Also, remember to update `config.js` accordingly to reflect the three environments from Rails (`production`, `test`, and `development`). (Actually, the original code one sees already have the three tags, so most probably you can ignore, just double check to make sure). There's a caveat though: if you're at the home page (i.e. `root_path`), you cannot discover those `window.something` while on it. Only if you move to other paths will it be discovered. The error isn't something solvable unless removing it outside function. Let's look at the `login` and `logout` function next. What every function needs For every function, exporting them to `window` is required, otherwise Rails cannot find them. function login() { window.walletConnection.requestSignIn(nearConfig.contractName) } window.login = login So for our original contract, we need to add extra two lines in `main.js`: At the end of the file, add: window.login = login window.logout = logout If you have more functions, do that for all of them. What works in ERb Not all ERb function works. As far as one experimented, only `link_to` works. One only experimented with `link_to` and `button_to`, but there are others that are known to work like `javascript_tag` that one didn't experiment with; but you can try yourself. Oh, `button_to` don't work. If you want to use a button, you can do two ways: Define the class on `link_to`. Example with bootstrap (we'll discuss bootstrap next and its issues) <%= link_to "Login", "javascript:login()", class: "btn btn-primary" %> (see the `class` tag, which is optional). Another would be to not use ERb, just use a normal HTML button will work: <button onClick="javascript:login()">Sign in</button> One didn't experiment with `javascript_tag`, so you shall experiment it yourself. Setup Bootstrap If you started off running `rails new project-name --css=bootstrap` for rails v7.0.2.3 (or before), you're doomed! As of v7.0.2.3, bootstrap does not initialize with importmap, but with turbolinks. What we've done so far exists on the basis of importmaps. Turbolinks might work, but you need to ask someone specialized with turbolinks to ask the equivalent; or if you're professional with turbolinks, go forward translating the instructions yourself. If you start off with `rails new project-name`, let's see how to migrate to bootstrap. Based on the `cssbundling-rails` github page, we run these commands: ./bin/bundle add cssbundling-rails ./bin/rails css:install:bootstrap If you jump immediately to here as one mentioned, then the next paragraph aren't applicable: "build:css" will be created for you automatically. If you already add other stuffs, it fails unfortunately, so you need manual adding. These aren't complete though. Try running `yarn build:css` and you'll encounter error, as `package.json` has missing `build:css`. This isn't the problem if you ran `rails new project-name --css=bootstrap`; so we can just copy the commands from that `package.json` and paste it here for it to work. For your convenience, one attached the command below for v7.0.2.3 (one do not promise other Rails versions uses the same command, do your own research (DYOR)): Add this under `scripts`: (which should just currently have a `test`) "build:css": "sass ./app/assets/stylesheets/application.bootstrap.scss ./app/assets/builds/application.css --no-source-map --load-path=node_modules" Compilation of CSS also have errors. Fortunately, solving them is easy; just run these commands **everytime you updated the** `application.bootstrap.scss` **file, including any custom scss and perhaps css files you've defined in the** `app/assets/stylesheets` **folder**. #!/bin/bash yarn build:css rails assets:precompile bin/dev `yarn build:css` might be optional. For those developing in AWS Cloud 9 (like one does), follow Michael Hartl tutorial to setup `rails server` properly (otherwise cannot preview). In fact, `bin/dev` **does not work** with the setup, so after the server run, press CTRL+C to exit, and run ... bin/dev # wait for it to boot up finish, the command line will stop updating if you don't # do anything to it. CTRL+C rails server As long as you don't update any stylesheets, you can retain `rails server`. Otherwise, run through this command from `yarn build:css` again. What you can do and can't do We can get value like this: (theoretically) <% @varname = "javascript:window.walletConnection.isSignedIn" %> <% link_to "Create Post", @varname %> But practically, one couldn't test the above code, because the returned value is a boolean, not a link to some page.However, if you have a function that returns a hyperlink, it certainly works, so we would assume it works. This works: <% @param = "javascript:getParameters()" %> where in Javascript: function getParameters() { return "message = hello_world"; } window.getParameters = getParameters But this doesn't work: "javascript:window.getParameters()" fails with Uncaught TypeError: window.getParameters is not a function When one tries to call the contract like this: <% @param = "javascript:window.contract.get_article_by_id({'article_id': 'some_id'})" %> **It works!** The result are in F12 browser console though, so open that up first before calling the function to see the results. And you certainly could pass in arguments just like how you usually append something to a string in Ruby: "Some variable in Ruby: #{variable_name}" This is useful if you have to take some input from users, or inputs from users' actions that lead to some choices to insert to the string. Turn it into a function `window.contract.get_article_by_id` is not fancy to use within ERb, so let's move it to Javascript. We want to reduce our action to something like this: "javascript:get_article_by_id('#{variable_name}')" (Note the single quote around `#{...}` if you want to make it a string; if you forget these, it will fail if it should be a string input; if float or integer, it might pass, one isn't sure). Inside `main.js`, add this: function get_article_by_id(article_id) { return window.contract.get_article_by_id({ "article_id": article_id }).then( value => alert(value), err => alert(err), ); } window.get_article_by_id = get_article_by_id So this function returns a promise, and the `.then()` will give a popup with the return values once the `Promise` is fulfilled or error. If fulfilled, it'll do whatever you ask in the `value` strand, while if it failed, it'll do whatever you tell in the `err` strand. Here, both are `alert`, so that makes no difference. Try to use `console.log` for one and `alert` for another and you could see the differences. We could repeat these for other contract functions also, depending on how you want to handle it. Conclusion Adapter to near-api-js works! It isn't as convenient as gem functions, though. Following Rails convention over configuration rule, you might prefer near api with Gems (which one can tell you, isn't mature yet). Until it becomes mature, resorting to adapter with Javascript is okay; we can migrate to gems later on when things got more mature. Additionally, developers also require programming in Javascript, which we try to reduce to as little as possible when using Rails. Though Rails support javascript, having to run functions wrapped in string quotes aren't convenient; and there may be lots of integration problem with fetching data from javascript too! Imagine writing getter functions just to get functions that doesn't work by calling `window.something` directly. It's gonna flood our javascript. One might continue on with building an application with Rails and NEAR Protocol so stay updated with future blogs. **Like and Subscribe!** References https://github.com/rails/importmap-rails https://blog.appsignal.com/2021/12/15/whats-new-in-rails7.html https://docs.near.org/docs/api/naj-quick-reference https://stackoverflow.com/questions/70548841/how-to-add-custom-js-file-to-new-rails-7-project https://github.com/rails/cssbundling-rails How to use near-api-js: https://github.com/near/near-api-js/blob/master/examples/quick-reference.md

w@wabinab

Immutability: Be careful saving on-chain One was working on a project, and someone gave me feedback; and one realizes something that one taken for granted on the blockchain: immutability. One thought of creating something immutable, but one still have some control over non-intrusive decisions. For example, a blog. The blog is published on IPFS, but one can choose to unlink it from the site if it contains offensive information. Thing is, the feedback strikes my thought: ***if it is mutable, and have control over it, why build it on the blockchain?*** But what strikes one most is: ***if everything becomes blockchain in the future, how do we decide what information to be mutable online, and what immutable?*** I.e. what information do you want to store on centralized cloud services, where you can control your information to be deleted anytime; and what information to store on the blockchain/IPFS? (Centralized doesn't need to be hosted by a corporation: even self-hosting is considered centralized if you use your own database, your own server, so you have full control over your data). Centralized Entity When speaking of centralization, here are some dangers that occur if you don't have full control of the databases and servers (i.e. not self-hosting). An entity can choose to betray your trust and leak what you store on their cloud. However, that doesn't occur very often, unless their central server got hacked. What's more often happens is **user request to delete their data but centralized entity isn't deleting their data**. In fact, they may just mark them as "deleted" and archive the data, without the user's knowledge; after all, you never know whether they actually delete your data or not when you request them to. They might choose to keep the data for future use, like training a Machine Learning model, or perhaps for data analysis; whatever brings them more profit. That's a drawback of centralized entity. Immutable vs Mutable With decentralized entities, user started to have full control of what they have. Additionally, **user also takes up more responsibility than they used to**. More power, more responsibility. Hence, more responsibility means more education required to facilitate users' decision; at least to let them know the consequences of their actions if they aren't aware of. For example, if they lost their passphrase to their wallet, nobody can help them recover; unlike centralized entity where you have a password-recovery system to reset your password. What we will discuss today on the immutability and mutability of user's data stored online. That is, ***how do we educate users so they take responsibility on whether their data stored online to make it mutable or immutable?*** Let's start off explaining what one means by mutable and immutable data, in case you got confused. In computer programming, a mutable data is something that could be edited after first created, so you can Create, Read, Update (aka edit), and Delete (CRUD) the data. In contrast, an *immutable* data can only Create, Read, and Delete (so write once read many). It cannot be edited after first written; to edit, you copy/clone it, then edit it offline, then create a new one and update it. You can't edit the created object directly. Here, we have a slightly different explanations on mutable and immutable data **storage**. **Mutable:** An uploaded data that you can Create, Read, Update, and Delete (CRUD). You have full control of these 4 operations. (irregardless of what actually happens to centralized entity problem we discuss before). **Immutable**: An uploaded data that you first Create offline, then after uploaded, you can only Read. ***You cannot edit the data, NOR DELETE THE DATA.*** The important thing lies in "unable to delete data". What's on there is on there forever; no regret! Consider why blockchain is created in the first place -- to have a decentralized entity so nobody can have monopoly on controlling what is stored/hosted online. Voting is required, and to pull it down entirely, all parties need to agree to pull it down. Even if one party left disagreed, it'll still be on. This expands to storing real history online, such as WikiLeaks, ensuring no one can alter real history to what they want, either via blackmailing the wiki creator, or via other forces. If the creator themselves can't update the data nor delete the data, it's solid. Sue-ing, going to court, blackmailing, or other means of forcing the creator will hurt the creator's heart, but he/she can't do anything to what is published, it lays rock solid, (hopefully) forever. https://en.wikipedia.org/wiki/WikiLeaks What to save on-chain? The choice of saving on-chain not only leaves to the users, but dApps developers too! For a dApp, developers are making the choice for users, hence taking partial responsibility from users to make the decisions for them. (The other partial responsibility lies in the users, *after the developer warns the users where the dApp saves its data and the user agrees on the agreement*.) Developers shall decide during development, what are to save on-chain and what nots. Some considerations includes: Would you like the data to be permanent? Would you like the data to be editable and/or deletable? How sensitive are the data (privacy)? and others. Remember, data saved on-chain cannot be overwrite. You can create a new copy and re-link to that new copy, but the old copy remains on-chain, and there's a permanent address to access that information if someone saves it (in IPFS, this is the CID; in NEAR, this is the NEAR Explorer; and Ethereum, BCH, etc have their own equivalent explorer to fetch information). Some other good practices It makes sense to **first save a local copy** of whatever you want to upload. Don't immediately upload to IPFS or on-chain. **Go to sleep**, make sure you have enough time to think through it. Sometimes, just forget about it temporarily and **in a few days**, if you keep coming back to it, your feelings tell you that you can **upload it** on-chain, and you **don't regret** at it (at least for now), then go ahead with it. If you think **you will regret it in the future**, **even the slightest**, then don't upload it as immutable; keep it mutable. As long as it's mutable, you can always make a choice to make it immutable when you need it to. Conclusion In conclusion, it's vital for professionals to create teaching materials to raise awareness among users, be it end-users or developers, to be responsible for their decisions. As users have more power hence responsibility for their own data, their actions are of serious considerations, as there are no regret medicines to eat (a Chinese proverb, lol)! If the user makes the wrong choice, that's it, GG! As for developers, they should announce clearly to end-users how their data will be stored and warn them multiple times, even if it's annoying, especially when actions are irreversible. If the developers are making the choice for end-users, they should be responsible for making it clear. Also, it makes sense to let the user choose whether or not to store their data immutably. Of course, for other users that just ignore developers' warning and later regret, developers are welcome to ignore their requests if most people have no problem seeing the warnings clearly; they're the ones that just want to find problems and refuse to take responsibility for their own acts and can be safely ignored. **Remember to Like and Subscribe if you like my posts.**

w@wabinab

4-days Work Week and its alternatives Recently one saw this article on my mail box: Ignore Your Boss After Work: Belgium Now on a 4-Day Work Week. One would like to write some opinions on this. Note that one is quite influenced by writings from Basecamp author Jason Friend and David Heinemeier Hansson, as well as some other writings earlier in my life by other writers that one can't remember now. https://hackernoon.com/ignore-your-boss-after-work-belgium-now-on-a-4-day-work-week Let's start by clearing some misconceptions. Someone used to argue against the four-day work week, mentioning fitting 40-hours into 4-days is more tiring than 5-days. The basis of the argument is wrong. By 4-days work week, it means to work 32-hours per week, not 40-hours per week. It means that, someone working for 32-hours per week could finish work (about) the same quality and quantity (or even better) than those working 40-hours per week. This is true! If someone working 40-hours per week is burnt out, and given time to rest by working less, they could concentrate more whenever they came back from rest. This means they could focus more, rather than feeling tired and slacking during work. More focus means more attention, hence better work outcome. Though, for those already working 40-hours per week and managed to stay fully focused during these times, it does means working less may or may not be useful. Full concentration means 32-hours can only achieve 4/5 of what is achieved in 40-hours (or at least almost full concentration, very little slacking). However, this is rare situation; and only the exceptional few can reach this stage. Most people slack off to do other things during work, and 32-hours intended to let them know, now they have less time, they could stop slacking during work and focus on work; then during the day they rest, they could do whatever they usually do when they slack. Reason for a 4-days work week Work-life balance (see this). When not working, put down your phones. Go and do something else! You had work enough, hence let's have some play, spend some time with your kids or wife, or friends, or take your dog for a walk perhaps; whatever activities that refreshes you. Ideally, set the free day for Wednesday. Hence, working isn't concurrent, which is tiring. https://www.euronews.com/next/2022/02/15/belgium-approves-four-day-week-and-gives-employees-the-right-to-ignore-their-bosses Another type of 4-days work week This is Google's '20% time' policy. For a 5-days work week, you have one day free to work on whatever you want. Workers can work on whatever they like, and Google benefits from new inventions worked out during these times. Though, this isn't really a 4-days work week, as Google still requires workers to work that day. Additionally, to fulfill a real 4-days work week, workers can not work during that day; be it going for gardening, fishing, play some games, spending time with families and friends, or other stuffs. They could also choose to catch up with what they can't during work times, or they could learn new stuffs that they think could benefit their work; as long as they don't continue on usual work itself. https://www.businessinsider.com/google-20-percent-time-policy-2015-4 Other strategies Working 4-days per week isn't the only solution: you could work for 5-days per week, but **6-hours per day**. Given that an average person can concentrate for about 4-5 hours per day (according to this post, although the number varies between people to people widely), it doesn't make sense working 8-hours per week when they start losing concentration. Without concentration, quantity and quality of work produced decreases exponentially. Working 5- or 6-hours per day reduces the time of slacking, maximizing the amount of concentration the workers can give to their tasks at hand, and pursue other activities that refresh their sloppiness at other hours. These could be taking 2 hours off in the morning to visit the park, or 2 in the afternoon to exercise, or 1 extra hour during lunch to replenish their brain power from work (and 1 other hour somewhere else they prefer). Whatever works! 6-hours per day maximizes their concentration on work, producing quality work and optimizes for workers' happiness (and work-life balance). https://www.washingtonpost.com/lifestyle/wellness/productivity-focus-work-tips/2021/05/31/07453934-bfd0-11eb-b26e-53663e6be6ff_story.html What actually to eliminate Ultimately, 40-hours per week isn't much affecting work-life balance. After all, they still have free time at night, and during the weekends to do whatever they want, right? **The actual problem arises when workers are working more than 40-hours per week.** Lo and behold, do not get proud of working more than 40-hours a week. Those that are doing so now are putting their health and work-life balance at potential risk. 40-hours per week is the maximum you can work, after which your body starts burning out. It's worse when employers asks employees to work more than 40-hours per week, either stated clearly, cheated them, or via indirect means. By cheating them, one means that, during the hiring process, the employees are told to work 40-hours per week, stated clearly in the hiring requirements. However, after the joined the company, things started changing, and 60-, 80-, or even 100-hours per week slowly faded in, and before long, the employees are stuck in the downward spiral. Even worse, employee lets employer works longer time so they don't have time to think about changing jobs, or reflecting how they got into this sickening environment in the first place. What employee wants is human machineries that have no emotion, ultimately executing what a usual machine can do (except that these requires human expertise and machine can't really be programmed to do such way, perhaps even stuffs that Machine Learning can't do) to work *efficiently*. But humans are... humans, they can't work efficiently, they can only work *effectively*. Effective means attention * how much time they can put in before their attention starts deteriorating. In the chapter "Benefits Who?" of "It Doesn't have to be Crazy at Work", companies may even offer enticing benefits to workers, ranging from game rooms, luxury rooms, a sleeping room, Friday beer time, free breakfast, lunch, tea-time, and dinner, etc. *The only thing they can't do is get out of the office*. Whatever luxuries are there to keep them long in the office, and work the rest of the time there; if can, 24-7, since they have a sleeping room anyways; for *efficiency*. Seriously? https://basecamp.com/books/calm Workaholics Workaholics can't stop working, with whatever laws to stop them from working. The first thing they finish work and got home, they may go and eat lunch, after which they continue working from home. Saturdays and Sundays are for remote work, not to do other stuffs. Burnt out? They don't care: because if they stop working, they have nothing else to do. In fact, they don't even know what else they can do if they don't work. Play with their kids? They're too boring. Go out with friends? It might be "time-wasting" (though it's not, unless you go out too much lol, like few hours every-day). And worse, this is not something law could stop from. Are you going to intrude others' personal life and check whether they are working non-stop? Not really, until the workaholics ended up in the hospital, then perhaps you might start to monitor them to prevent them from working themselves to death. If they never get too serious, but on the verge, a better alternative is ***establishing some communities to reform workaholics***. Conclusion The 4-Days work week is a good start to solve for work-life balance. However, the ultimate problem lies in those that asks employees to work more than 40-hours a week. If you're working 40-hours per week on normal days and have more holidays (real holidays, away from your phone and disallow boss to call you, and away from your laptop or even access to internet to prevent yourself from working remotely), it should be fine. Even if not, a shorter work-day also leave more time for employees to rest. What is not acceptable is working more than 40-hours per week, for whatever reasons, **at all cost**. All reasonings do not stand; after all, how would you know if you never try implement a true 40-hour work week for 1 whole year before making the conclusion, either at least for one single whole department or for the whole company? **Remember to Like and Subscribe if you like my posts.** (This article will be cross-post on HackerNoon in the future)

w@wabinab

Some thoughts on Token Values (Open for Suggestions) Something strikes me watching Token Economics series: one part of a video mentioned about "giving tokens to people for their contributions, like a park token to park keepers/cleaners, friendship token to your friends, etc". But how do we define the values related to monetary value? https://www.youtube.com/watch?v=xDntQtVULa0&list=PLsJWgOB5mIMCMxQVvWAP4xi19EOkHcBNN (Perhaps) Non-monetary Value Token Some tokens are especially difficult to convert to monetary value. To show your love to your friends, most likely you create your own friendship tokens and distribute them to your friends. These tokens have no monetary value (though they have your love) and most probably cannot be traded with others than the person distributing the token. Say Alice distribute token to Bob, so Bob hold ALICE token. Charlie would like to keep some ALICE token, so they could establish a trade scenario based on "barter trade" values (i.e. the monetary values are intrinsic, agreed upon by both party, but not globally). Now Charlie hold some ALICE token, but that doesn't mean Alice have a strong friendship for Charlie. Just because he hold the token doesn't mean he had strong relationship with Alice. The tokens might be misleading if Charlie decide to show off to his friends that he hold ALICE tokens and people start to imagine Alice and Charlie's relationship when there exists none. And what will Alice think of Bob when she finds out Bob trading ALICE token with Charlie without her consent? And even if Bob asks Alice whether they could trade ALICE tokens, what will go on inside Alice's mind? "Our friendship can be traded for stuffs! WTH!" Now think of Bob has an emergency, and he need some money. He could lend some money from Alice, in exchange Alice buyback some of ALICE tokens. In this situation, assuming if Alice is willing to lend him the money with ALICE token, does that mean that act damages their friendship? Perhaps so, or perhaps not. Even so, if Bob returns the money, will he and Alice get back to the equivalent-deep relationships? We don't know. (And there are lots of things that could happen in between the lending period that confiscate ALICE token value between them, including a friendship breakup.) Now, let's say Bob is **buying** some money from Alice using ALICE token (so Alice will never get paid back, since he's not lending it), how much will ALICE token now worth, if Alice feels betrayed by Bob? And finally, Alice might lend money to Bob without requiring a buyback of ALICE token, just like how you lend money to your friend or buy him/her a drink or something, so what's the use of ALICE token? Really, the only situation one thought of is shown mostly in some Chinese (some genre that one never seen in English, called 玄幻) novels. When a super strong guy (super strong as in he/she has the energy and capability of perhaps equivalent to destroying a planet, or destroy milky way, or even stronger) get beaten up by his/her enemy and suddenly get saved by the main character, he/she will award the main character with a "token" which, in the future, when the main character is in danger, can use it to ask for his/her help once, after which the token will be bought back. Of course this is fantasy story; in real life, these tokens might be useful in similar situations, plus worthy of keeping as a token of appreciation plus whatever you exchange with your friends to strengthen your friendships, but not really related to monetary value (exchanging for physical goods, for example). Monetary Work-value token? In the video, another situation described is the park keepers situation. People buy some PARK tokens and award to park keepers for the hard work. And the park keepers want some monetary value token: of course, they want to get paid to feed themselves, to pay rent, to earn money. Who will decide how much monetary value the tokens contain? After all, PARK tokens are useful only within the park. You can't use it to exchange for other goods, most probably. When exchanging for goods, most probably a monetary token (let's just use ETH here to make the example concrete) is required. Park visitors can buy PARK with ETH, but park keepers, how do they exchange from ETH to PARK? Who distributes the PARK tokens? And in the case a blockchain contract distribute it, how does it decide how much ETH can the park keepers earn? It depends on the park visitors! Park visitors decide how much they're willing to tip a park keeper by buying how much of PARK tokens with ETH. The ETH are stored within the contract, and park keepers can get ETH by exchanging it with the contract. Much like you buying some tokens when visiting the casino and return back the casino tokens which they return back your money. And this does have a flaw: if everyone take park visits for granted, not willing to award park keepers with PARK tokens, how will they earn? Ultimately, blockchain technology can only ease exchanges, not force people to make exchanges. In todays' world where people take EVERYTHing for granted (well, maybe not everyone, and maybe not everything, but you get it, many people and many things), it's difficult to change people's behavior to award others for their work. After all, the "greed gene" (if it exists) that carves deep into our bloodline hasn't disappear from evolution; and so, park keepers cannot earn much. Conclusion Blockchain technology aims to award value to lots of things that aren't included in monetary value, which are good. There are still lots of flaw though, like what tokens required integration with monetary value, and what nots, and how much value to assign to them which depends on what factors? Until these are clear, things have to decide and agree on consensus for their exchange with monetary values. **Don't forget to Like and Subscribe if you like my articles!** And lastly, one would like to thank my subscribers, likers, and tippers (https://read.cash/@DrPsycho and others) for the continuous support. Thank you.

w@wabinab

NEAR and Governance: Introduction and my opinions In the early days, NEAR have little adopters. To boost mass adoption, NEAR Governance acts as a hub for proposals, branching its reach to more users. We shall compare the similarity and differences of NEAR Governance with a traditional (country) government, and we include some personal opinions on the way. https://gov.near.org/ First note: One is not a fan of politics and governance, and consider it a total waste of one's time (you don't have to think the same way one did), so information will barely touch the surface. Comparisons A traditional government exist to represent its community, to unite a supposedly-fragmented small groups/villages of people (without it), and (hope to) make the best decisions that move the entity towards something better. Similarly, NEAR Governance listens for new proposals from the community, plot its path (to growth), and make decisions on whether a proposal goes forward, merge with another proposal (perhaps by joining an existing proposal or redirecting two or more intertwined proposals to work together), or rejected (for a variety of reasons). A group of core team will moderate the discussions, giving attention to proposals, read discussions, and provide comments. These discussions are split into various sectors, just like traditional government splitting into education sector, finance sector, (global) outreach sector, etc. Based on the NEAR Governance forum, one sees there exists the staking sector, the development sector, the education sector, the ecosystem sector, the community sector, and other sectors. Some sectors accept proposals, while others merely accept discussions or weekly reports from previously-accepted proposals. Nonetheless, the core team will browse through the sectors and provide attention to the threads. The Governance also acts as a hub for communication. There may be events posted in NEAR Community to invite people to join and support. One think this is different from a traditional Government. Traditional government gives one a sense of, the "political leaders" (or sub-leaders, or sub-sub-leaders) speak in front, you decide whether you like his/her idea(s), then support him/her (or his/her "opposers" if you hate his/her ideas). In contrast, NEAR Governance (Community sector) allow whoever DAO/Guild to post events and invitations, without any specific leaders from the Core team to intervene, and people can join multiple events/groups as they wish. Opinions In one's opinion, if there are too little moderators/core team providing attention to the forum, things will certainly be missed unless its sufficiently attractive. A governance is a little-to-many organization. A few moderators are dividing their attention to many people, whom propose various acts that might or might not add value to the ecosystem. This means, when proposal floods the forum, there are insufficient attention to attend to every single proposal, hence there will be proposals that are neglected, with or without being read. The neglection could have various meaning, ranging from it already exists and NEAR Foundation/Core doesn't want to fund similar projects anymore, to it doesn't add value to the ecosystem. Whatever the reason is, attention is scarce. In real world, we have government sector and private sector. The government only have enough funds to feed these many people/groups, and the rest requires starting up by themselves, without any funding from the government. Based on one's experience, most, or perhaps all, DAO, Guilds, and proposals, are dependent on NEAR Governance for paying their work. This is expected, as the world of cryptocurrency is new. Web2 is free: people take advantage and take for granted that "EVERYTHING" around them "should" be free. No, people should not be paid for their work or their resources. But "I" need to be paid for. "I" must be paid for my work, but I'm not willing to pay others for their work (ignoring volunteers). This makes starting up as a private sector difficult. As for now, NEAR Governance can still support a wide range of projects; but there will be a limit, when the money pool gets shallow and dry, alternatives should be seek. Conclusion Ultimately, the NEAR Governance serve its purpose to boost adoption rate, acts as a communication hub, and act as a discussion forum for the NEAR Community to propose an idea, communicate with other NEARians, and discuss about matters concerning individuals/the ecosystem. NEAR Governance is a DAO, sufficiently decentralized. For further decentralization, the "private sector" might need a head start so a Guild/DAO/team could source their own funding than being dependent on the Governance. **Be sure to like and subscribe if you like my posts.** (If there are any mistaken ideas one made, and you wish to change one's thought on them, feel free to comments below, and one will read and consider).

w@wabinab

Sign up Smart Contract continuation 2: CreateAccountNotAllowed This article continues from https://read.cash/@wabinab/sign-up-smart-contract-partial-solution-and-its-security-concerns-364b3361 Previously one wrote about the idea for signup creation, and here is an update. The original linkdrop contract is deployed on "testnet", which is a top-level contract. And linkdrop contract requires an account creation either be another top-level contract, or a sub-contract of a top-level contract. If you know about near protocol, "testnet" is the highest level, with lower level things like "wabinab.testnet", etc. Then lower level again "smart_contract.wabinab.testnet". Hence, one wants to deploy a linkdrop contract as the one deployed on testnet requires you to drop **at least 1 NEAR** to your friend. (On testnet, if you drop 2 NEAR to your friend, you friend only receives 1 NEAR, because there's a bug on linkdrop testnet that eats away 1 NEAR. Hence if you try to send only 1 NEAR, it will fail. However if you do this on mainnet, it's okay, the bug is fixed, and sending 1 NEAR to your friend, your friend will receives slightly less than 1 NEAR (due to GAS fee)). But one just wants to create a wallet, **not to send 1 NEAR**. One wants to send 0.1 NEAR (stingily). It won't work on the main contract, so we'll deploy our own contract, modified from the main contract. Then as the title said, `CreateAccountNotAllowed` is what one received. This is weird if you don't Google it, thinking that something's wrong with the contract written. Only when you google it, one found out this: https://nomicon.io/RuntimeSpec/Actions (And you CTRL+F yourself and type "CreateAccountNotAllowed") then that's one issue. One don't deploy it to the top level account... testnet: "wahahahah you don't have a top level account to deploy too." me: "But one wants to deploy the contract." testnet: "Wahahahaha who cares, one is occupied. Bye!" (One wants to create a meme here but one can't find a proper image on unsplash/pexels sorry...) Another trial We would redirect the person to create an account themselves. Upon creation, it'll ask for fund, and we'll ask for their address to send to us and we'll send the (minimal) fund for account creation. Too bad this can't be tried on testnet. In testnet, when you create an account, they allocate a fix funds for you to experiment. In mainnet, you require to send your own fund. So that's a difference. Conclusion After some pain and frustration, we understand the limitations of the NEAR linkdrop contract, and we try to find solutions that go around it, which did or did not work. We resolve to request customer creating their own wallet and we can fund their wallet with 0.1 NEAR upon creation. We also bear in mind there can be scam, fraudulent, farmers, etc that takes advantage of the system and it may take some time to find even partial solutions to them. (Alternatively, could use the NEAR DROP to generate large amount of link to supply to user. As usual, this is susceptible to farmers). https://gov.near.org/t/announcement-introducing-neardrop-1-0/9202 **Remember to Like and Subscribe if you like my posts.**

w@wabinab

Sign Up Smart Contract: Partial Solution and its Security Concerns One was trying to create an app (as a side project), and one of its feature is creating a wallet for free (one call it "sign up"). If you'd created an account on read.cash, you know that it creates the wallet for you, asks you to save its key, and violà the wallet is yours! One is trying to imitate the same functionality in NEAR Protocol: creating a NEAR wallet for the user. The thing is, a wallet in BCH, as far as one's concern, doesn't require fee for resources, like storage fee, which is required in NEAR Protocol. (Please correct me in the discussion below if one is wrong). NEAR wallet requires some NEAR during creation, with 0.05 **Ⓝ** reserved for transactions, and a minute amount for storage (less than 0.002 initially, but will increase as it stores more, perhaps via transaction, or access key if you login to other accounts using your wallet, or deploy a smart contract on your wallet, etc). So, the account where the contract is deployed to, which we'll call it contract.near, will be responsible to pay for the wallet creation. Of course you can use another account, but that increases complexity. Just like 10% of a tip goes to read.cash (ignoring other cases), royalties charged will go to contract.near, which wallet creation fund will withdrawn from. Hence this assumes we have enough fund for the creation. Then we'll use the linkdrop contract (there are many other code which you could google via "near linkdrop contract github") to create a link for the user to create an account. To sign a contract, some account needs to initiate a transaction. https://github.com/near/near-linkdrop Only an account can initiate a transaction. A user requesting to sign up doesn't have an account, so we require the contract to self-initiate. One haven't experimented with `near call` directly on-chain, though one doubt it'll work without installing near-cli on-chain. Anyways, until the contract could self-initiate, someone needs to perform the initiation. Anyone can perform the initialization without paying for the deposit (though they need to pay for gas fee). The smart contract will attach a deposit upon receiving an initialization, then perform cross-contract calls to a linkdrop contract deployed elsewhere. When finish, the link to create a new account will be made available. Meanwhile, the client will wait for the transaction to finish, we lock their screen (as a temporary measure) to prevent them from repeatedly (perhaps impatiently) clicking the sign up link. When finished, we will redirect the client to a new tab for wallet creation. That's the workaround for now. In the future, one thought of a `near ask` where the contract could `near call` itself so it could sign the initial contract itself. Currently, although the contract could sign itself, the initial call needs to be initiated, which requires an outside call. An outside call means someone needs to hold the private key to sign the contract, hence it can't be done in the client's side, again for security reasons. Next, let's look at some concerns with this approach. Concerns from client side Previously, we mentioned locking the client from repeatedly clicking the link. The repetition can cause re-entrancy attacks (or maybe other attacks that one don't know the name). Repeatedly clicking 100 times means 100 wallet creation, hence draining the funds for future wallet creation (you don't expect the funds to be unlimited, do you?) https://quantstamp.com/blog/what-is-a-re-entrancy-attack Concerns from server side And we have a server that sign the contract initially; hence the server is holding a private key. Until this is solved, it can't be decentralized. It's not trustless. Furthermore, the server is hosted somewhere else like Heroku or Microsoft Azure, so you still have to trust them to keep the private key safe. Another being hackers can hack into the server and retrieve the private key. Nothing is really safe here. That's why one wants a solution like `near ask`, and one might experiment it in the future and write another article on it if one found a solution. Concerns from funding side You are funding the wallet, it still comes out of your fund. Someone whom suddenly got excited and launch a DDOS attack on your "sign up" button will drain your pool. I.e. a person keeps signing up and create numerous accounts, with or without reasons. In such case, you can ask for the person's phone number (not email) if they're required to sign up. If they don't (immediately sign in because they have an address already), then you don't need the phone number. The phone number ensures that one phone can only sign up once, and it's only used for that purpose. But that's far from eliminating DDOS. One could still hold numerous phone numbers (like one could hold numerous emails) and this render the counteract useless. Another being if customer request deleting their account. **When you delete account, make sure to delete everything for real, don't just archive** (this statement is retrieved from Basecamp, one can't remember which book it is, but either Jason Fried or DHH mentioned it, and it's practiced by Basecamp too). So if we delete, we still delete the phone number, and they could re-create them, and we don't know if we helped the same phone number create twice or not. Of course we could say we'll delete the data only after 14 days or something, and they can't spam, though they still can do the same thing repeated every 14 days and the system won't notice. Also, since the contract is deployed public, we need to restrict who can call the contract. Usually, a linkdrop have someone pays for, and we don't want any random people to sign the contract, and we want to restrict to a list of account that can call the method. Here are two new concerns: If we restrict to only the contract can call itself, the server which initiate the contract can steal the funds. It has a full-access key, anyways. This is unsafe. If a random account save the private key, we don't worry about the above problem. Though, we need a method to constantly deposit some NEAR to that account, enough to cover GAS cost; otherwise it would run out of NEAR to pay GAS before you realize. Conclusion The idea is good, though there are lots more concerns. Perhaps it won't end up in mainnet, only in testnet. It might end up someone can create an account but without wallet, though one like the idea of linking wallet rather than linking account for signing up and signing in. Until the concerns are solved, this idea won't be deployed. **Remember to Like and Subscribe if you like my posts.**

w@wabinab

Learnings on using React I'm a backend developer. Frontend is quite new to me, though actually learning it, it doesn't seems all bad. Though some parts of designing is quite annoying, especially with the flexibility of HTML, CSS, Javascript, etc that specify "configuration over convention" (lots of choice for you to choose and it's up to you) when one works better with "convention over configuration" (predefined set of values where you can type-write quickly without worrying too much about small details). The past few days one was writing using React, and one want to share some learnings with React, and some of my opinions and how one feels using React. Few annoying things The most annoying thing you encounter when developing a React app is the white screen of death (WSoD). Thing is, one runs `npm run dev` on the console to start the localhost, but when this happens, it didn't display anything. No reaction means difficulty debugging. Of course, there are some online teachings on how to handle this here, but it's not what one wants. For professionals, they might already know this, but you can show the error using your browser console. In Chrome/Brave, this is F12 then click on the console tab. There, you can see your errors, hence finally debugging what's happening. https://medium.com/wix-engineering/white-screen-of-death-how-to-handle-errors-in-react-native-4d57ac82b6d8 Another annoying thing is how to design the app. When one uses the `create-near-app` by default (for creating a React frontend developing the NEAR Protocol), all the code are in one file. Everything, including the design, is in one file. For people with React experiences, this isn't difficult to change, to modularize. For me, it isn't. It takes me some time to figure out how to create partials and inserting to it. Particularly, creating constants (`const`) that take in some parameters and returning them by inserting them into the corresponding location, one can start to create layers of abstraction, factory methods, etc on designing the app. One made the mistake of designing directly with .html file but it requires .js file since it's not a static page. Third is the `react-render-dom` not working, because one doesn't understand how it works with the already-created app. `react-render-dom` seems to work if you have a `render()` component, and directing it to sub-pages is a common example online. What's difficult is the default app that comes for mine doesn't have a `render()`, but somehow it renders? One have totally no idea how it works, but one knows for hyperlinks, one requires to resort back to the old-style HTML `<a href="...">Some name</a>` and work out with some `windows` configuration pass in configuration like home page location, etc. It isn't too difficult because pages are relative, though one don't feel so comfortable as it hard-code quite a bit. For the future Although NEAR don't support Ruby on Rails as frontend, one plans to make an adapter for the RPC and plug it in. Of course, one doesn't know a lot of Rails, only started learning 2-3 months ago, and even so, only during the weekends. So that's another thing to look forward in the future. Besides, one really like how Rails program compared to React, because one is a Python developer, and Ruby looks more like Python compared to React code (using snake case instead of camel case [ouch my pinky hurts pressing shift all the time], and using no curly braces and no multiple brackets wrapping `(( { } ))` which one found super-duper-annoying. If one manage to port it to Rails, one will write another article about it, though one don't know when that will come. P.S. In case you ask why underscore one don't uses shift when it requires, because one uses the French AZERTY rather QWERTY keyboard. So, there are some difficulty with this keyboard but some advantage as well. Disadvantage is one's keyboard isn't designed for French AZERTY, so there's no key for `<` and `>`, and some other keys requires using the ALT+RIGHT key to activate. Advantage is less compared to disadvantage, including underscore don't require pressing Shift. Anyway, one used to AZERTY now and not planning to change back to QWERTY yet, and one don't recommend it for programming languages that requires lots of `->`, it's nightmarish. Conclusion One aren't very happy coding with React. The code is mostly understandable, including the logic and the flow. It's more about how the language is defined aren't my type. You're welcome to use it if you like how it works, though. [**This article might not be final, one might update it if one encounters further thoughts and conclusions**]. **Remember to like and subscribe if you like my articles**.

w@wabinab

The Importance of NEAR Guilds and NEAR Ecosystem Ultimately, crypto seeks for adoption. Without its ecosystem, NEAR tokens would be just a collection; you could collect NEAR tokens but they are not useful. The money we have nowadays are useful due to their many use cases; you can buy groceries with it, you can go online shopping with it, you can pay for learning courses with it, you can pay your child's school fee with it. People using today's money appreciate their presence (well, they most probably took it for granted), and their usefulness derives from their **wide adoption and admittance of their value**. That's the goal that NEAR tokens are aiming for. https://near.org/ Having a core team to create the NEAR token is insufficient. At most, that means you successfully proves that (NEAR) cryptocurrency is useful in trading, has its own value, and have a potential future use cases. Potential is potential. Without public adoption, potential will never become adoption. This is where NEAR Guilds and Projects comes in and give meaning to the token. This is where NEAR Guilds could offer a widespread use of the token, and where people could admit that holding (HODLing) the token is worth their value. End users don't care about how NEAR tokens are design, what Nightshade are, or how sharding works. *They care about ease-of-use, its value, widespread adoption, low gas-fee (without knowing the technical behind-the-scene), and whether they could get what they want with the token*. NEAR Guilds aims for that. Some Guilds/Projects, their use cases, and adoption When you are visiting another country, one thing you want to do is swapping your currency to their local currency. How wonderful if you don't need to swap your currency. However, if one country adopted Bitcoin Cash (well, read.cash uses Bitcoin cash, so let's speak BCH instead of BTC), another Ethereum, and your country NEAR, then Rainbow Bridge could help. It's just like a money exchange; you can swap your currency to another currency and use it there. People holding two different currencies could continue trading in their adopted currencies, and Rainbow Bridge will take care of currency conversion. https://near.org/bridge/ Then, you might create a startup (an application) that supports NEAR tokens, but people adopting Ethereum or Bitcoin Cash cannot buy from you. Users need to pay extra time and effort to swap their adopted currencies to your currency. It's best if you could build your startup that support their adopted currencies, and support multiple currencies. To solve this issue, we introduce Aurora. Aurora provides applications to reach out to more users adopting different currencies, like Ethereum and Bitcoin Cash. Just like you can use your Europe credit cards to buy stuff from America via PayPal, paying in your local currency via auto-conversions by PayPal for a small fee; here we even skip the conversions and accept payment in local currencies. https://aurora.dev/ To create startup in the first place, traditionally you might get a all-in-one platform like Google Cloud or AWS to build and deploy your solution. With everything in one place, integration makes easy. You don't need to search everywhere and use different products. However, things aren't so easy in the currently young Web3, what says NEAR is younger than most ecosystem like Ethereum? In the near future, you could get access to a similar product called Pagoda that works just like Cloud solution, but in the Web3 metaverse. https://www.pagoda.co/ So where do you store your NEAR tokens? In your NEAR wallet? But NEAR wallet creation requires paying for storage cost and reserved transaction cost at the time of creation. People like free of charge. Metamask don't need you to deposit an amount, WAX doesn't need either; and NEAR requires one? Sender Wallet is a browser extension wallet like Metamask, and it doesn't need you to pay upon creation. Free! https://chrome.google.com/webstore/detail/sender-wallet/epapihdplajcdnnkdeiahlgigofloibg Storing data on-chain is expensive. In fact, checking my testnet account, it costs 2.08545 NEAR (about USD 24.09) to store 209 kB of data on-chain. That's not feasible. You could use cloud storage nowadays for storing instead, but you never know if their servers would be down, their companies bankrupt, or other reasons that lets you lose your data because they don't have funds to continue supporting their server even for you to retrieve your data. Furthermore, it requires trusting your data to them. Therefore, you should store data off-chain if it's not that private (which you should store it with yourself, not even online!) Machina provides off-chain decentralizes storage, planning to be available by Q4 2022. Machina uses Proof-of-Stake and Nightshade mechanism, which is what NEAR Protocol is using; unlike Filecoin and Arweave using Proof-of-Work. https://machina.storage/ https://medium.com/nearprotocol/introducing-machina-the-worlds-first-proof-of-stake-storage-solution-built-on-near-fed2ed23dbfb Nothing beats joining a community in your local area when targeting local adoption. Many NEAR Guilds are related to countries, like NEAR UK, NEAR Vietnam, NEAR Phillippines, and many other countries. When locals started trading in NEAR tokens, other locals will be curious and try to get hold of the token itself, tried it, and if they feel it worth its value, they would adopt to it. https://t.me/joinchat/UuqVppNv2rLQC0Qq https://twitter.com/vietnamnear https://twitter.com/NEARPhilippines Conclusion And these are just some projects of many. Other projects like Debio Network focusing on medical and bioinformatics services, Play-to-Earn (P2E) games like Galaxy Online and CryptoHeroes, and Mintbase for creating NFTs. They target different audiences; Debio targeting medical stuffs and patients, P2E games targeting gamers, Mintbase targeting content creators that convert their contents to NFTs and sale online. End users adopting NEAR Guilds means adopting NEAR tokens. NEAR Guilds provide value and meaning to end-users to hold and trade NEAR tokens, which is what they really care about. Hopefully one day, people would appreciate NEAR tokens, just like they appreciate fiat currencies today. https://www.debio.network/ https://galaxyonline.io/ https://ecosystem.pixeldapps.co/cryptoheroes https://www.mintbase.io/ (For more info, check out NEAR Guilds) https://nearguilds.com/guilds/ **Remember to like and subscribe if you like my articles!**

w@wabinab

Writing well to engage your audience One graduates from Bachelor of Physics, and taking Physics in the first place, not only to pursue an interesting topic, but to escape the "life-and-death situation" of... writing essays. Writing has never been one's strength. In high school, A Level General Paper (GP) is a requirement, and one barely passed (50-60% to be more exact). O Level English though, one hits 80+%, and my GP teacher used to tell me, "I didn't know how you got that". Neither do I. Having proud of one's bad English (my stupidity) and never bother taking the effort to improves it, it never improves well. One chose Physics between a choice of Physics, Computer science, and Mathematics. During one's first year, there's a module called "Developing Effective Communication" (which we termed "DevCom"), which is a compulsory module that you need to pass to continue to next level of studies (Level 1 is first year, Level 2 usually second, and if you can't pass, you can't go to Level 2). That was a nightmare. As you might have guessed, my marks wasn't so good; though one passes the module, the result wasn't extraordinary; it was below average. One project, one was expected to write some learning materials for an audience that wasn't specified clearly, but they expected you to write for a reasonable audience (high school), and one wrote something that suits more for kids. Group presentations are better, other people tends to pull one's mark up "to the average line". Great! It wasn't until my last year in College, when one have nothing to do and started learning machine learning from Fast.ai, that one was asked to write a blog about. Writing a blog wasn't necessary. The course was self-taught anyways, and no one is going to monitor oneself if one ever wrote (or ever not write) a single blog post. One had a go for it, it wasn't the best post. In fact, one's first post about fastai was about how to do batch prediction with images, a really short blog that would take you 30 seconds to read. And the first ever post one had written was about setting up a VM on Datacrunch.io, and the only audience one can say is oneself, as one always delete the instance (to save money wasted on storage space) and re-setup when required. It wasn't the best English. https://www.fast.ai/ https://wabinab.medium.com/fastai-v2-batch-prediction-5a342a2f1e32 https://wabinab.github.io/2021/06/30/Setting-up-Datacrunch.io-from-scratch.html https://datacrunch.io/ As one started reading more and more, one found out that "writing well" wasn't a new concept. Jason Fried and DHH (David Heinemeier Hansson) shared in their book Remote: Office Not Required titled "On Writing Well" its importance. Some other books they wrote reflects similar viewpoint. They also share a myriad of books you could refer to on writing good English, be sure to check it out! One of the book is: https://basecamp.com/books/remote *The Elements of Style* by William Strunk J.R. Nowadays, one agrees that writing well means communicating important information smoothly. Bob might be a great programmer, but if he does not know how to express himself in words that could easily be understood by layman, most people wouldn't bother about what he said. Remember the last time you went to a lecture (provided you're not in the "good English" stream)? How did the professor explains the material to you? Write a bunch of equations on the board and say, "This is how it works. Try to understand it, and see how it relates to each other. That's all from me, thank you."? Do you fell asleep during such lectures? An Example Let's look at an example in computer programming. Each "Teacher <number>" means *a new viewpoint*. To contrast it, one might exaggerate somewhat; though you can de-exaggerate it within your head. a = 3; b = 2; a = b; What is `a`? **Teacher 1:** `a` is 2. If you don't believe, try running the program yourself. (End of story) Ok, that wasn't a good explanation. Let's try it again. **Teacher 2:** Let's explain it with *pointers*. (Here we add some technical explanations, but they aren't necessary). These are the original values. The value 3 and 2 are stored inside a memory location in your RAM, and `a` and `b` is just a pointer to point to that particular memory location that stores the real value. `a` and `b` doesn't store the value per se, they *refer* to the actual value you tell it to save somewhere else. When you performs `a = b`, you're basically changing where your pointer points at (some programming language makes it clearer with `a -> b`): So `a` now points to `b` which points to `2`, hence `a = 2`. But if `b` now points to `3`, then `a = b = 3`. a = 3; b = 2; a = b; b = 3; Perhaps one could simplify the explanation by excluding the "memory block" and "RAM" from the explanation. After writing this, one thought it's too simple to simplify, so let's try explaining something harder to show the strength of communicating well. Another More Complex Example Consider this block of code that converts a student's mark to grade. mark = 100; if mark >= 90: print("A"); else if mark >= 80: print("B"); else if mark >= 70: print("C"); else if mark >= 60: print("D"); else if mark >= 50: print("E"); else : print("F"); Easy to understand. Now one wants to change the mark. mark = 180; What would it print? **Teacher 1 and student who are new to computer science:** "Well, it would print 'A', since it's larger than 90. And if-else block code stops executing during the first block it encounters True." "No, the program would crash! No marks could be larger than 100. My teacher told us that 100 is the largest you can get. " "Your teacher is your teacher, not the computer. The computer don't think like your teacher. The computer of course will print 'A'. If you don't believe, try run the program." The student run the program, and he/she was shocked to found out that marks could be larger than 100. The same goes for negative marks: mark = -6; The dialog is similar, except on arguing computer now print 'F' or crash, and teacher told students that minimum you could get is 0, not negative numbers. That wasn't very explaining. All it does is leaves the student to experiment and learn himself/herself what is going on, rather than communicated by the teacher to the student. Perhaps the student might end up still not understanding what's going on, but just gives up. How could the teacher explains it in understanding terms? **Teacher 2:** "Well, it would print 'A'. The thing you need to understand is, computer doesn't have an idea of what 'mark' means, like you do. The computer doesn't know that marks should lie between 0-100, you do. If you want the computer to know what you know, you should code it in, like this: if mark <= 100 and mark >= 90: print("A"); else if mark < 90 and mark >= 80: print("B"); else if mark < 80 and mark >= 70: print("C"); else if mark < 70 and mark >= 60: print("D"); else if mark < 60 and mark >= 50: print("E"); else if mark < 50 and mark >= 0: print("F"); else: print("Mark is invalid."); "The computer now knows that marks should lie between 0-100. You told it explicitly. Remember that what you understand contains a meaning, but computer takes in meaningless explanations. If you don't tell the computer how it works, the computer won't know. After all, you derived the meaning based on your interaction with `marks`, the computer don't take exam like you do, so it doesn't know." Conclusion Do you find the latter easier to understand? Tell me more in the comments! In conclusion, writing is important in any field to express oneself. If you don't write well, nobody can understand what you're trying to convey, however great you are in your field. One am still learning, and writing more and more. Comments from readers are feedback to whether one explains it clearly or not, what can be changed, also helps. The speaker should make something clear for the listener to understand, not the listener try hard to understand what he/she expressed. The listener is not obliged to listen to you, and can choose to ignore, if he/she finds your work not in his/her interest; or worse, if he/she cannot understand easily/clearly what you're trying to convey. To sell your product, start with beautiful frontend; to sell your idea/teachings, start with good writing/communication skills. And to write well, start writing. Thank you. **Remember to like and subscribe if you like my posts**! (cover photos/thumbnail from Unsplash) https://unsplash.com/photos/y02jEX_B0O0?utm_source=unsplash&utm_medium=referral&utm_content=creditShareLink

w@wabinab

How decentralized would you want your app be? Blockchain aims for decentralization, and it's not a new topic per se. But have you considered how decentralized the dApps and blockchain are?  **Blockchain** Bitcoin, uses proof-of-work, allows anybody to pick up as a node validator to validate transactions. Anybody literally means anybody: as people start joining to earn passive income from validating transactions, they can have more than 10,000 nodes (See the exact number here); and this is because not everybody is into crypto yet. Imagine in the future when many joins crypto, how many nodes can it go? 100,000+? or 1,000,000+? https://www.bitrawr.com/bitcoin-node-map It's also equivalently true for Ethereum if people participated in node validation, but it has far less node than Bitcoin currently (the exact number here). Previously it has far more node, but this article uncover the lost of many Ethereum nodes, which you can read about yourself. As of writing, Ethereum have less than 3000 nodes; which is still a lot but not as much as Bitcoin. Similarly, less nodes most probably means less decentralized (though we still have to look at their distribution; Ethereum nodes being distributed heavily within certain countries compared to Bitcoin nodes being distributed worldwide, resulting in less decentralization for the former).  https://etherscan.io/nodetracker https://www.thestreet.com/crypto/ethereum/ethereum-is-still-missing-huge-amount-of-nodes-after-unintentional-hard-fork Now take a look at Proof-of-Stake (PoS). Since one is familiar (and a fan of) with NEAR Protocol, we shall use that as example. Proof of stake is much different from proof of work in which not any random person can become a node; which means it's less decentralized than proof of work. In fact, NEAR Protocol currently only have 100 nodes (the restriction they apply to how much node they could have now, but might increase in the future). Without considering where the nodes are located physically, 100 nodes is really little compared to Bitcoin total nodes count. To become a node, the validator needs to have a certain amount of wealth; hence nodes are limited only to the wealthy. To become a node, the validator also needs to wait for someone to stop being a validator for whatever reasonings, as the max number of nodes is 100.  Hence, if in the Bitcoin case authority wants control and destroy all nodes in their country, there are still nodes available in other countries. If multiple countries work together and destroy all nodes in, well, all their countries whom work together; anybody in any other country could still pick up and become a node validator. In contrast, NEAR Protocol requirement of wealth means it's only limited to wealthy people, but you could also say it's limited to more wealthy country. It's not just start their home computer and rent out their CPU/GPU and you can become a node validator. Until anyone could become a validator, NEAR Protocol will suffer from less decentralization.  (Of course, this article only talks about decentralization, ignoring other issues. Example, Ethereum is popular for its dApps, not its decentralization. NEAR Protocol is popular for its low gas fee [hence sharding technology], not decentralization. They have their own focus and trade-offs, so don't get confused about their different use cases).  **dApps** Next, let's look at how decentralized are dApps. One have to say, one isn't an expert in DeFi or dApps, so one will most probably look through one's rose-colored glasses. You, as the more expert, might not agree with what one says. That's okay, one is learning too. And you're welcome to have your say based on your experience.  In particular, one would look more at gaming dApps, since that's what one plays most with, at least to an extent. A game component can be classified as: decentralized component, and centralized component. What this means is, you have a part of the game focusing on the decentralized component, and other parts focusing on the centralized component. In fact, most gaming dApps are not really dApps; they're just focusing on "**letting the players Play to Earn**". Blockchain integration is not-as-much a decentralization feature, but rather a earning feature. Player earns money, great! How decentralized is the application isn't much of our concerns.  And that's true. The games aren't really decentralized, at least not of my knowledge (you are allowed to challenge and change my thought based on what you know, with proof). You have a game server, most probably held on a web-2 equivalent, so that's centralization. The game server at least handle some function calls, whatever you're dealing with. These function calls could be built on-chain, but that means paying gas fee with every single transaction (layer-1, one doesn't understand how layer-2 works yet except it's building a layer on top of layer 1). Where are the game data stored? Is it on IPFS, or also on the game server? And how much control over the game application does the team has?  It make sense to have full control when you're developing your game, and to kill all bugs that are out there. All in all, centralization means you don't need a consensus, hence you can do things as quickly as possible. But launching such app also means you still have much control of an entity. Imagine a game that had not thought about strategy to go against farmers, and the developers now want to implement strategy for such. In a decentralized manner, DAO needs to agree on deploying the strategy to implement, at which the farmers might have already siphon much funds out of the network (for a game that distribute funds to players when they play, taken advantaged by farmers). Centralization means acting as quickly and as bold as possible; funds are siphoned less than in the former case. Of course one is explaining the advantage from the view of centralization, but you can see how decentralized it is with their control over the application. Next time when you play a game or use a dApp, consider how much decentralization has the team made the application be.  **Conclusion** Not everything on the blockchain is much decentralized. If you aim for decentralization, you might want to consider which altcoins (or even Bitcoin) you want your app to built on and use. Of course, how much transaction per seconds can the network support, and other considerations like gas fee, are another story and another consideration. How much trade-offs you're willing to make on decentralization for other perspective? It's the choice of you and your team.