shiohime
Oh well, I just hope that when I release my project next month that I can prove that it's an incredibly unique experience that some group of people find it to be an exciting product.
Although it is fascinating to see more parts of the webstack increasingly decentralized, I also do not fully buy into the "decentralize everything" ideology that some people in the space have. Some people may not call projects "web3" if they run on traditional infra like AWS, but there is absolutely value in a hybrid model in my mind that leverages a decentralized ledger for proof of digital ownership on top of more traditional infra. I don't think for instance that making a platform to replace existing web2 websites like twitter / FB / your favorite website is the way to look at it, but rather to figure out new ideas and products, maybe fully decentralized, maybe not. To me it doesn't matter, I just want unique, streamlined user experiences that provide value to users who want to participate in the ecosystem. Even if it is just a small community, it's fun.
If you're curious and want to try out the flow, you can download a web3 wallet like MetaMask - https://metamask.io/ - this is a popular web wallet extension for Ethereum and EVM platforms. If you want to try out Solana, I recommend https://phantom.app/
I personally like Solana more than EVM chains at the moment but it doesn't cost anything for you to try either.
Once you have the extension and create your wallet, you can navigate to an NFT marketplace, and connect your wallet.
Ethereum: https://opensea.io/ - The most popular Ethereum NFT marketplace
Solana: https://solanart.io/ - One of the most popular Solana NFT marketplaces
You can then click on the connect / select wallet button, and it will allow for you to connect your wallet to the website. This will authenticate you into their website, there's some additional steps on Opensea IIRC if you want to construct a full profile, but the base authentication only requires this. And like I mentioned, you can authenticate in this manner without owning a single dollar worth of crypto.
For the projects that allow for you to interface with chains / wallets, I've used these:
For ethereum: https://github.com/ChainSafe/web3.js
For solana: https://github.com/solana-labs/solana-web3.js
Essentially what it comes down to is a user has a wallet, that is typically a web wallet via extension, but you can of course use hardware wallets if you'd like, however those do require you to own one, so if you just want to play around with the ecosystem, these extensions are the easiest to use. These above projects are javascript APIs that allow for interacting with wallets and onchain programs.
Note that both of these are frontend solutions. There are backend solutions for both chains.
EDIT - also there is this provided from solana labs as an adapter for many different wallet types: https://github.com/solana-labs/wallet-adapter
As a solo developer making applications in the ecosystem, it's a breath of fresh air to not deal with Oauth+OIDC workflows and utilize wallet connectivity + token authorization to very elegantly handle these scenarios on smaller projects. End user experiences are pretty great too, I quite enjoy being able to authenticate into a website without needing to associate everything with my email address and/or rely on 3rd parties to provide trust solutions such as SSO via Google/FB/Okta/whatever.
And yes, the risk is higher in a decentralized model because if my private keys are compromised on most wallet types, then I can lose my funds / identity. There are solutions to help lower this risk however.
Frontend hosting, I decided to go with a traditional hosting solution (vercel). Nothing changing here.
Backend APIs - Was able to replace the need for dedicated backend APIs by using RPCs and GraphQL queries using a project that allows for indexing smart contract event data in a GraphQL queryable format (https://thegraph.com/en/). I also created a smart contract which lives on the Ethereum chain and allows for users to achieve the interactivity that I desired for my app (which was essentially an escrow for a scheduling application). The events are indexed by the graph, so I could efficiently query this subgraph to retrieve relevant data to display on my frontend.
Authentication - Just use web3 packages to connect users wallets to the website. No need to use OAuth+OIDC or similar approaches for authentication, just connecting wallets on the frontend works.
If I wanted to take it a step further, I could have hosted my app on permaweb (https://www.arweave.org/) which will host the content in a distributed fashion with a one time charge.
For a different example, I'm creating an NFT project that uses the NFT ownership to grant access to specialized services (launching the user's NFT in a specialized application I created in an open source gaming engine). I use similar techniques as above, still hosting on vercel, but I use the innate ability to use NFTs as proof of ownership to act as an auth token into my service. This allows for me to distribute the interactive art I've created in a way that fully grants users ownership over the art, and also allows for them to access these specialized services only available to owners. Furthermore it's trivial to detect forgeries so even if someone does the horrible act of right click saving the art, they won't actually get any of the actual value from doing so. And if someone attempts to forge the token by minting an exact copy, it still will not grant access as it's easy to detect forgeries.
It's pretty exciting imo and has been a very fun project to work on. So by leveraging the similar approach for authentication (connect wallet), and NFT proof of ownership for authorization, I've been able to create a unique project with a lot less complicated of a stack tbh.
I personally think there's value in mixing centralized services (like traditional hosting of applications) with decentralized services (like using blockchains as a database of ownership, such as with NFTs).
- Familiarizing yourself with vim is great and one of the best timesaving skills I decided to pick up randomly. You can install vim plugins for most IDEs
- Pick a small feature that you are curious how it works, and focus entirely on how it was implemented. The simpler the better really. Use git history to see the commit that the feature was introduced, and look how that engineer implemented it. It's quite easier for me to learn how something works by just focusing on seeing the Pull Request for the implementation. Just focus on looking how various things were implemented, and you'll (hopefully) see a pattern in code practices & design patterns.
- If you have questions, you should feel free to ask other engineers that work on the project. I was in a pretty senior position at my last job and we had quite a large codebase, and I personally never minded helping out junior and new engineers ever when they were coming up to speed on a new codebase. I always took the viewpoint that it's always in my best interests to help out the newer team members get up to speed quicker and have a better understanding of the product so they are able to effectively contribute. Hopefully engineers on the project you are working on think similarly.
- Absolutely learn how to perform proper debugging if you are not familiar already. Learn how to hook the browser to your IDE, how to troubleshoot things on the backend if you get to the point where you're doing fullstack work. Effective debugging is an incredibly important skill to pick up.
- Learn how to use IDE / other editor tooling such as jump to definition, refactor, inspect, find all occurrences. If this is a react project learn how to use browser extensions like devtools to help with debugging and understanding document structure.
I don't think it's necessarily like this at all large companies. I had worked at a much, much, much larger company before and never had to deal with anything like that. It really comes down to the company that acquires the smaller one.
I mean look at Blizzard, who inevitably just became Activision despite years of claiming they would not. The process / culture of the company that acquires the smaller one almost inevitably wins out.
You have to realize that the company you worked for no longer exists. It was acquired and is something else entirely. If you're unhappy, I would suggest to consider looking around for different opportunities.
In this example I'm sure it wouldn't cost $800k to rebuild the house, but it'd certainly be more than $40k, so it would definitely be a loss.
What pretty much happens when you are minting an NFT is:
1. The owner of the collection uses a program that controls everything around the NFT sales, like the start date, the price, the order of art that is distributed, the owners of the collection where the funds get transferred, and other settings.
This happens before users can mint.
2. User wants to buy art, they launch a webpage that interacts with the above program. They pay the amount of money that the art is configured to sale for, and the program will process these payments in the order they are received and distribute art based off of the order the art is to be distributed. The above program also has safeguards that prevent users from being charged in the case that the art is out of stock at the time the user attempts to pay for it.
3. The 'minting' process is taking the art that was configured from this program, creating (minting) a token for it, and creating any underlying token accounts that are needed to store the art in the user's wallet, and transferring ownership.
NOTE - there are definitely other ways to distribute NFTs, such as generative art that is created at the time of the transaction based off of the block hash. The above example is how this particular NFT collection was to be distributed, it's a common model used by probably the majority of NFT projects. The actual 'minting' step (#3) is pretty much the same though, the process of creating the token and associating the metadata and transferring ownership.
1. Blockchains can essentially serve as a decentralized database, and for some chains decentralized computations, such as Ethereum chains. It is possible to build web applications using data from the chain efficiently using a variety of technologies, and you can build some pretty slick applications effectively replacing a traditional backend with these kinds of technologies. Also it gets a lot of heat in general, because Ethereum is absurdly expensive and it's financially impossible to use, and the current scaling solution is quite complex and they have a lot of work to mask the complexities before it has any hope of achieving widescale longterm adoption. In short you literally cannot use Ethereum if you only have $20 because it's impossible to move due to fees, unless you are using one of their sidechains or layer 2 solutions. It's quite convoluted.
However you can use other chains like Solana, which gets a lot of hate from people on HN because it's more centralized than ETH. However, if you use both it's quite clear which is working better right now as an end user - SOL costs a fraction of a cent to transact and finishes within seconds, ETH costs $50 to multiple hundreds of dollars for a transaction and takes like 45 seconds to even multiple hours if you paid just slightly too little gas. I strongly recommend checking out other chains than ETH, Solana has a growing ecosystem and a lot of exciting projects being worked on in the space. (disclaimer - I own almost no SOL, about $20, but am developing projects in the SOL ecosystem because of the above end user experiences I have had using both ETH chains and SOL)
2. I don't know if it's the future of money, but it is a cool emerging field. It gets a lot of heat because it is ripe for scamming as it's nearly impossible to regulate, and also for reasons mentioned above. I've seen a bunch of people upset because they tried out web3 apps and buying NFTs and the like, but on ETH only to realize it cost them hundreds of dollars in gas.
There's a lot of value imo especially if you look past the get rich quick types and try out more financially practical chains. But back on whether it's the future of money - I think we'll have to see how countries that are adopting crypto play out by example. I wouldn't be surprised if we have more official government fiat tokenized on some of these platforms in the coming years.
3. From my viewpoint, Web3 focuses on technologies that allow for decentralization and verified ownership of content. It's possible right now to create apps that are hosted on decentralized permaweb hosting solutions such as Arweave. Whether or not this is going to be a successful model, it is a very interesting field to work in and there are some really slick things that you can do that may not be obvious at first glance. I think that there is a lot of value in a hybridized model myself of centralized services that leverage a decentralized database to verify identity / authorize access. There's quite a lot of possibilities that I can think of in such a model and think that some people get hung up on things like "how can we replace twitter/facebook/youtube/your favorite silicon valley company web site in a decentralized model" instead of trying to create completely different experiences (of who knows whether they will be successful). Web3 relates to the above 2 since the underlying idea is using a blockchain as a decentralized database, as well as having decentralized computation as well. Currently the computations allowed on chains like ETH are quite simple but there are projects that could allow for off-chain computations whose results get published back to the chain to allow for more complex applications.
That being said, it depends on my burnout. My burnout rate seems to be 3-4 years at a company. I worked hard at one of my previous jobs and climbed actually pretty high up the engineering ladder from a normal non junior engineering position, but got too burnt out with all of the additional responsibility. At that point, I noticed I stopped being as busy, taking more time away from doing basically nonwork things outside of meetings, and becoming a bit apathetic, too much that I was uncomfortable with it and quit because I needed to move on. During that time sometimes I was much less busy than I appeared but it made me feel bad over time.
I've been doing independent ventures lately and got a bit of that fire back but lately feel like I'm falling into the same trap and not being as productive as I'd like, wasting too much time on social media or other timesinks. I really need to kick myself out of this slump, I think I can but really I guess my productivity is linked directly to deadlines which I've been lax on setting for myself lately.
Anyways, long story short I usually don't pretend to be busy unless I'm burnt out, then I quit and do something else.
The way I look at it is that this is a tool. The way it is used is up to the creativity of the engineer(s) working with it. I think that using NFTs in this manner is a lot easier for me to manage than other approaches, and it's pretty fun. Practical use? Idk it's a fun art project that I hope people enjoy, but yeah I do think it was easier for me to implement in this method than a traditional web app.
But I do think there are plenty of practical use cases that you could leverage this technology for in terms of access based on ownership of the digital assets.
However, I want to focus on the other possibilities for NFTs - I am making an NFT project that does have the art aspect, however the tokens also provide access to unique services like hooking into a video game engine to allow users to interact with their art. Since it's trivial to detect forgeries and ownership, even if someone was to create an NFT pointing to even the exact same piece of art, they would be denied access to the service as it is a forgery.
Right now proof of ownership is usually in the form of discord bots allowing access to servers, but there's much more you can actually do with this concept than we are seeing now, like the example above.
You can literally make a project that has tokenized assets in the form of NFTs, and provide services based on ownership of that collection. It's trivial to detect whether an NFT is a forgery, and also trivial to detect if a user actually owns the NFT they claim to own. So when you are making claims that this is a lie, I have no idea where you are even coming from. It's literally proof of digital ownership for essentially a ticket/token into a service.
It's also quite easy to integrate with webapps.
I left my job of 5 years earlier this year because I was purely burnt out, with only around a year of savings but don't regret it at all. I've had the opportunity to explore spaces I'd never have the chance to do while working at a traditional job, and even if my individual entrepreneurial efforts don't work out, the skills I've picked up while technically unemployed are very attractive to the field that I'm actually working in. Think of it as a full stop pivot in my professional career.
But really, working a job you hate only gets worse and worse. Your productivity will start dropping and you'll start to increasingly feel like crap. Burnout is really rough, and you are almost certainly more valuable than you are being treated at a company like that.
That's what I'd do at least, but yeah your call of course.