Blog

Insights and articles about Web3 development, software engineering, and the latest in technology.

Unlocking Offline Experiences with Service Workers

Unlocking Offline Experiences with Service Workers

<h4>This article will include the following:</h4> <ol> <li>Overview. What are service workers</li> <li>Capabilities</li> <li>Benefits</li> <li>Scope</li> <li>How to register one</li> <li>Service worker Life cycle</li> <li>Use cases</li> </ol> <h4>Overview</h4> <p>Nowadays users expect web apps to start on slow or flaky network connections, or even offline. Google did a <a href="https://www.marketingdive.com/news/google-53-of-mobile-users-abandon-sites-that-take-over-3-seconds-to-load/426070/">study</a> about the percentage of users that will abandon a website if it loads for more than 3 seconds.</p> <p>As developers, our job is to make the user journey as smooth and straight forward as possible. This requires from us to use different tools and techniques to make that possible. One of these tools are service workers.</p> <p>Service workers are a fundamental part of PWAs (Progressive Web Apps) They are background scripts that run independently of the web page, intercepting network requests and caching resources, providing offline capabilities (even when a user has no internet connection a progressive web app can still load and function correctly, as the service worker will serve cached assets). Also, a PWA can load quickly and efficiently, as it doesn’t have to wait for network requests to complete.</p> <figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*z83FJ-X0OAFN8boeX2IURQ.png"></figure><p>However, while service workers provide many benefits, they do require careful planning and implementation; service worker implementation requires special functions and methods. Developers need to ensure that service workers do not interfere with the functionality of the PWA and that they handle updates and errors correctly.</p> <h4>Service worker Capabilities</h4> <p>Service Workers offer a wide range of capabilities that can supercharge your web applications. We’ll delve into key features like caching strategies, background sync, and push notifications. You’ll discover how to leverage these capabilities to create blazing-fast, reliable, and engaging web experiences.</p> <p>Some of the most used capabilities are:</p> <ol> <li> <strong>Offline Support</strong>: Service Workers enable web applications to work offline or in low-network conditions by intercepting and caching network requests and responses. This allows users to access content and functionality even when they are not connected to the internet.</li> <li> <strong>Caching</strong>: Developers can control the caching of assets such as HTML, CSS, JavaScript, images, and other resources. This helps in improving the performance of web apps by serving cached content from the local storage instead of making repeated network requests.</li> <li> <strong>Background Sync:</strong> Service Workers can schedule background sync tasks. This feature is particularly useful for apps that require periodic data synchronization, like email clients or social media apps. It ensures that data is updated in the background, even if the app is not currently open.</li> <li> <strong>Data Background Fetch</strong>: This feature allows web apps to request and process data in the background, enabling scenarios like pre-fetching data to improve user experience.</li> </ol> <h4>Benefits of using service workers</h4> <p>Service workers are easy and straight forward optimization of your web app that we often underestimate. They make it possible to:</p> <ul> <li>Decrease your page load time</li> <li>Implement better caching</li> <li>Give a mobile application like feel to your application, providing functionalities such as home screen icons for mobile browsers, sending push notifications to the user, etc.</li> </ul> <h4>How to register a service worker</h4> <p>The code snippet bellow is checking if service worker property exists on the navigator object, then register the service worker that will be defined in the sw.js file. This tells the browser to register a service worker for the domain the file is being served from and whatever logic exists in the sw.js file is the worker for it.</p> <pre>// your main JavaScript file<br><br>if ('serviceWorker' in navigator) {<br> window.addEventListener('load', function() {<br> navigator.serviceWorker.register('/sw.js').then(function(registration) {<br> // Registration successful<br> console.log('ServiceWorker registration was successful in scope: ', registration.scope);<br> }, function(err) {<br> // Registration failed<br> console.log('ServiceWorker registration failed: ', err);<br> });<br> });<br>}</pre> <h4>Verify if a service worker is registered</h4> <p>We need to open the developer tools in order to verify if a service worker is registered correctly.</p> <p>In Firefox and Chromium-based browsers the process looks like this:</p> <ol> <li>Open developer tools and click the <strong>Application</strong> tab.</li> <li>In the left pane, select <strong>Service Workers</strong>.</li> <li>Check that the service worker’s script URL appears with the status “Activated”. On Firefox the status can be “Running” or “Stopped”.</li> </ol> <p>Once registered the service worker should look something like this:</p> <figure><img alt="Service worker — developer tools on Chrome" src="https://cdn-images-1.medium.com/max/1024/1*sBOqRAaIEeznq2Hyn3aoXg.png"><figcaption>Service worker — developer tools on Chrome</figcaption></figure><h4>Scope</h4> <p>Scope refers to the folder of your service worker. A service worker that lives at example.com/pwa/sw.js can control any navigation at the /<em>pwa</em> path or below, such as example.com/pwa/demo. Service workers can only control items such as pages and workers (collectively "clients") in their scope. Scope applies to browser tabs and PWA windows.</p> <p>Only <em>one</em> service worker per scope is allowed. When active and running, only one instance is typically available no matter how many clients are in memory (such as PWA windows or browser tabs).</p> <p><em>The most common implementation of the service worker intercept all the requests related to your PWA. You should set the scope of your service worker as close to the root of the app as possible. You should not put it inside, for instance, a JavaScript folder or have it loaded from a CDN.</em></p> <h4>Life cycle</h4> <ol> <li>Registration: The first step is to register a Service Worker in your web application. This typically happens in your main JavaScript file or a dedicated service worker file. You use the navigator.serviceWorker.register() method to register a service worker script. The Service Worker script is then downloaded and installed in the background.</li> <li>Installation: After registration, the browser downloads and installs the Service Worker script. During the installation phase, you can specify which resources (e.g., HTML, CSS, JavaScript files) the Service Worker should cache for offline use. This is often done in the install event handler.</li> <li>Activation: Once the Service Worker is successfully installed, it enters the activation phase. During activation, the new Service Worker takes control of any open tabs or windows that are under its scope. This is where you can remove old caches and perform cleanup tasks from previous Service Worker versions. The activate event handler is commonly used for this purpose.</li> <li>Fetch and Intercept: After activation, the Service Worker is active and can intercept network requests made by the web application. This allows you to implement various caching strategies, including cache-first, network-first, or stale-while-revalidate. You handle fetch events in the fetch event listener.</li> <li>Update: If there’s a new version of the Service Worker available (detected during the registration phase), it goes through the installation and activation phases again. However, the new version won’t take control until all tabs using the old Service Worker are closed.</li> <li>Termination: Service Workers can be terminated by the browser when they’re not in use or when the browser is under memory pressure. They can also be manually unregistered.</li> </ol> <h4>Use cases</h4> <p>We could not finish the article without mentioning a couple of use cases:</p> <ol> <li> <strong>Offline analytics</strong> — Capturing telemetry related to users in the web app is highly useful when it comes to user behavior analytics. Typical analytic frameworks require an active connection to send these data to a server. However, with service workers, you can capture user behavior in client side and send it to an analytics engine with background sync. Implementing this by yourself might be a cumbersome task. Google has come up with a tool to support offline analytics named Workbox Google Analytics.</li> <li> <strong>Automatic failovers — </strong>Imagine you have multiple servers to fetch data, and one of your servers is starting to fail. Using service workers, we can quickly implement a fallback mechanism to get data/resources from another server.</li> <li> <strong>Synchronizing data in background — </strong>Service workers can be customized so that when the user performs a post request like edit or update in an app with an unstable connection, it can defer that request and only send it to the server when the connection is stable. The way it does it is in the background through caching and doesn’t affect the offline user experience.</li> </ol> <h4>Conclusion</h4> <p>Service workers are a great way for enhancing the performance, reliability, and engagement of web applications with little effort. By intercepting network requests, caching resources, and providing real-time updates, service workers enable developers to create progressive web apps that can function like native apps.</p> <p>The main concepts that we need to keep in mind when developing a service worker are: <strong>Scope</strong>, <strong>Lifecycle</strong>,<strong> Life span</strong>.</p> <h4>Further reading:</h4> <ol> <li><a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API">https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API</a></li> <li><a href="https://blog.openreplay.com/a-practical-guide-to-service-workers/">https://blog.openreplay.com/a-practical-guide-to-service-workers/</a></li> <li><a href="https://blog.bitsrc.io/using-service-workers-with-react-27a4c5e2d1a9">https://blog.bitsrc.io/using-service-workers-with-react-27a4c5e2d1a9</a></li> </ol> <img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=5613c6772585" width="1" height="1" alt="">

7 min read
Efficient React Web Apps: 5 Optimization Tricks

Efficient React Web Apps: 5 Optimization Tricks

<p>Are you looking to take your React web application to the next level in terms of performance and efficiency? Look no further!</p> <p>In this article, we will explore a short list of React optimization techniques that can help transform your web application into a high-performing powerhouse.</p> <p><em>Did you know that the average user’s patience for a web page to load before they leave out of frustration is about 3 seconds (according to a </em><a href="https://www.marketingdive.com/news/google-53-of-mobile-users-abandon-sites-that-take-over-3-seconds-to-load/426070/"><em>study that Google performed</em></a><em>)</em></p> <p><strong>So here are some ways to handle it:</strong></p> <ol> <li> <strong>Code Splitting</strong>— Code splitting allows you to divide your React application into smaller chunks, loading only the necessary code for each specific page or feature. Repetitive logic in the code should be extracted and reused. This will improve the initial loading time and reduces the overall bundle size.</li> <li> <strong>Lazy loading </strong>— This ties back to the previous point. Lazy loading is a technique that allows us to defer the loading of non-critical resources or content until they are actually needed. Implementing Lazy loading could significantly improve the performance and the user experience. It will be particularly beneficial for large media files, such as images or videos, which are not immediately visible to the user.</li> <li> <strong>Remove redundant imports / Bundle cost optimization</strong> — We know that the bigger the bundle that we serve to the user, the more time and resources it will require. This is something to keep in mind while writing code (sometimes we don’t need to import the whole library if we are using only one specific method of it). A great tool that could help with this one is the <em>“</em><strong><em>Import Cost</em></strong><em>”</em> extension for VSCode. It will automatically show you in real-time the size of the package that you are importing (marking with a different color scheme for the bigger packages and urging you for optimizing your imports). Another set of great tools which could help with this are <strong><em>BundlePhobia.com</em></strong> (which helps you find an npm package and its alternatives) and <strong><em>source-map-explorer</em></strong> (which will show you a treemap visualization of the packages in use)</li> <li> <strong>Avoid unnecessary re-renders</strong> — Re-renders are quite costly and will slow down our application or cause a bad user experience. A component gets re-rendered in React by changing its <strong><em>props</em></strong> or <strong><em>state. </em></strong>This hints us that we have to make sure we are properly handling a component’s props and state. One of the most common ways that could be overlooked is the misuse of the <strong>useEffect</strong> hook and its dependencies. We have to make sure that only relevant dependencies are added to the dependency array for every useEffect.</li> <li> <strong><em>Take advantage of useMemo and useCallback </em></strong><em>— </em><strong>useCallback</strong> and <strong>useMemo</strong> are both React Hooks that help optimize the performance of a React application by memoizing values. They both accept a function as an argument and return a memoized version of the function. The difference between them is the type of value they return. <strong>useCallback</strong> returns a memoized callback function, while <strong>useMemo</strong> returns a memoized value. Both hooks can be used to optimize the performance of your React components by avoiding unnecessary re-creations of functions or values.</li> </ol> <h4><strong>Bonus tip:</strong></h4> <p>While performing any of the mentioned optimization methods we would need to have a way to measure if we are improving things and how much. One tool that I have found extremely useful is <a href="https://developer.chrome.com/docs/lighthouse/overview/"><strong>Lighthouse</strong></a><strong>. </strong>Generating Lighthouse reports is a great way to track your progress and get some custom tips. <br>Some of the indicators that you might want to improve are —<strong> First Contentful Pain (FCP), Largest Contentful Pain (LCP), Speed Index (SI),</strong> etc.</p> <h4><strong>Conclusion</strong></h4> <p>The adoption of the techniques mentioned above is crucial for improving the performance of your React application. There might be also other approaches that needs to be done in order to reach peak performance and this is why the usage of tools that will analyze the performance of your application is crucial. <br><em>Performance optimization is not a sprint, but rather a marathon</em>. All of the principles should be kept in mind while writing code and it is wise to make regular revisions in order to deliver high-quality code and avoid introducing technical debt in the future.</p> <h4><em>PS: Here is the list of tools mentioned:</em></h4> <ol> <li><a href="https://bundlephobia.com/"><strong><em>BundlePhobia.com</em></strong></a></li> <li><a href="https://www.npmjs.com/package/source-map-explorer"><strong><em>source-map-explorer</em></strong></a></li> <li><a href="https://marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost"><strong><em>Import Cost extension</em></strong></a></li> <li><a href="https://developer.chrome.com/docs/lighthouse/overview/"><strong><em>Lighthouse</em></strong></a></li> </ol> <img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=d47c6cae0fc3" width="1" height="1" alt="">

4 min read
Useful Web3 materials — DEXes[2/5]

Useful Web3 materials — DEXes[2/5]

<p>Today, I will write about a little more advanced topic — DEXes. The term DEX comes from Decentralized exchange and it is the equivalent of a digital marketplace which allows users to trade (swap) cryptocurrencies and other digital assets without a central authority or intermediary.</p> <p>DEXes are build on decentralized blockchain networks, such as Ethereum or Binance Smart Chain and they use smart contracts to automate the trading process. This also means that unlike centralize exchanges which require a third party which facilitates the trade, DEXes are more secure and censorship-resistant. DEXes also allow the users to be in control of their own assets which are traded directly from a user’s wallet without the need to deposit them to the exchange.</p> <p>The algorithms that the DEXes use differ from one another — some rely on automated market makers (AMMs) to set prices based on supply and demand, others use order book-based systems that match buyers and sellers based on their desired prices and quantities.</p> <p>DEXes become more and more popular because of their trustless and decentralized nature. Some of them also offer liquidity pools that allow users to earn from providing liquidity to them.</p> <p>This new exciting technology is here to stay so here is the list of the 5 most popular DEXes at current date:</p> <ol> <li>UniSwap (<strong>UNI</strong>) is a decentralized exchange built on the Ethereum blockchain that uses an automated market maker (AMM) model for liquidity provision and token swaps.</li> <li>PancakeSwap (<strong>CAKE</strong>) is a decentralized exchange on the Binance Smart Chain that allows users to trade cryptocurrencies and tokens using a liquidity provider (LP) model similar to UniSwap. In addition to trading, users can earn CAKE rewards through liquidity provision, staking, and other yield farming activities.</li> <li>SushiSwap (<strong>SUSHI</strong>) is a decentralized exchange and automated market maker protocol that was created as a fork of UniSwap in 2020. It features a governance token called SUSHI, which allows holders to vote on protocol upgrades and other proposals.</li> <li>Balancer (<strong>BAL</strong>) is a decentralized exchange and automated market maker protocol that allows users to create and trade in custom liquidity pools. It uses a smart order routing system to optimize trades and maximize returns for liquidity providers.</li> <li>Curve (<strong>CRV</strong>) is a decentralized exchange that is designed to provide low-slippage trades between stablecoins like USDT, USDC, and DAI. It uses a unique AMM model that is optimized for trading stablecoins and features a governance token called CRV.</li> </ol> <p><em>PS: If you find the topic interesting, you could also check out more information on Automated Market Makers and Liquidity pools.</em></p> <img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=c71d3e7ddb9e" width="1" height="1" alt="">

3 min read
Lessons learned: My top 5 insights from working with startups

Lessons learned: My top 5 insights from working with startups

<p>Working in a startup can teach you valuable lessons and it could be an exciting and rewarding experience. However, it doesn’t come without some painful truths and lessons. I’ve had the privilege of working with a number of startups over the years, and in this article, I would like to share five of the most important lessons that I’ve learned through the years.</p> <p>I want to share my experience as I hope that by sharing, I can help other entrepreneurs and intrapreneurs avoid some of the pitfalls that I encountered along the way. So whether you’re just starting out with your first startup or you’re just working in one, I hope that these lessons will be helpful to you on your journey.</p> <p>To say that speed is important is an absolute understatement.<br>Speed is crucial and it is one of the most important factors in business, as it can help companies to be more competitive and responsive in the marketplace. When a company is able to respond quickly to changes in the market or to customer needs, it can gain a competitive advantage over its rivals and stay relevant longer. This can be especially important in fast-moving industries or in times of economic uncertainty, when the ability to adapt and respond quickly can make a significant difference. In addition, speed can help companies to improve their efficiency and reduce costs, as it allows them to complete tasks and processes more quickly and with fewer resources. This can help businesses to save time and money, which can be reinvested in growth and innovation. Overall, speed is an important element of success in business, and companies that are able to move quickly and efficiently are more likely to thrive in today’s fast-paced and competitive environment.<br><br>Even if you do “only the right things”, but you do them slowly — you are going to lose in business because others will be way ahead of you.<br><br><em>“Speed is a byproduct of efficiency.” — Jason Fried, Rework.</em></p> <h3><strong>The right environment</strong></h3> <p>The right environment is also crucial for success in business. Just as a plant needs the right soil, water, and sunlight to thrive, a business needs the right surroundings to grow and flourish. The right environment can provide the resources, support, and opportunities that businesses need to succeed. On the other hand, the wrong environment can stifle growth and hinder success.</p> <p>As business leaders, it’s important to carefully consider the environment in which we operate and to create or seek out the conditions that will enable our businesses to thrive. This might involve choosing the right location for our offices, cultivating a supportive and empowering culture within our organizations, or positioning ourselves to take advantage of favorable economic and political conditions. Whatever the specifics, the right environment is essential for success.</p> <p>But creating the right environment is not just about external factors. It’s also about fostering the right mindset and culture within our businesses. This means cultivating a culture of innovation, collaboration, and continuous learning, and creating the conditions that will allow our teams to thrive. It’s about setting the stage for our businesses to grow and evolve over time, and building the foundations that will allow us to adapt to changing circumstances and stay ahead of the curve. By paying close attention to the environment in which we operate and creating the conditions that will allow us to thrive, we can set the stage for lasting success.</p> <p>If your conditions are unfavorable or you are in the wrong environment and have no influence over it — my advice is leave. With time it will only get worse. Don’t become a victim of the <a href="https://en.wikipedia.org/wiki/Sunk_cost">sunk cost fallacy</a> and find or create the conditions that best suit you.<br><br><em>“A positive and supportive environment can help individuals reach their full potential.” — Tony Robbins</em></p> <h3><strong>Timing</strong></h3> <p>Timing is another factor in business, that makes the difference between success and failure. A well-timed move can take advantage of market opportunities, while a poorly timed one can lead to missed opportunities and/or a financial loss. In business, timing can play a crucial role in the success of a new product launch, entering a new market, or making strategic decisions. For example, introducing a new product at the right time can capitalize on a trend or unmet consumer needs, while launching it too early or too late can result in a lack of interest or saturated market.</p> <p>Similarly, making a strategic acquisition or investment at the right time can lead to significant growth, while waiting too long can result in missed opportunities. Having a good understanding of the market trends and timing the launch accordingly can help to attract and retain customers, which will lead to profitability. <br><br><em>“Timing is a crucial element in the successful operation of any business.” — J. Paul Getty</em></p> <h3>Taking Ownership</h3> <p>Taking ownership in business refers to the mindset and behaviors of individuals who are fully responsible and accountable for their actions, decisions, and results — It is up to you to get the job done (even if it is not “written in your job description”).</p> <p>You need to constantly keep in mind tasks and priorities and I don’t mean this in a micro-managerial way but more in a proactive and taking initiative one. Also, being accountable for one’s mistakes and failures, and being willing to learn and improve are big part of it.</p> <p>Taking ownership also involves being a good team player and contributing to the overall success of the company. Businesses that encourage and cultivate a culture of ownership is destined to be successful, as employees who feel a sense of ownership and responsibility are more likely to be engaged and motivated to contribute to the company’s success. On the other hand, a lack of ownership can lead to a culture of passivity and blame, which can be detrimental to a company’s early stages.<br><br><em>“The power of ownership is the power to control one’s own life.” — Milton Friedman</em></p> <h3>Validate before you build</h3> <p>“Validate before you build” is a principle that suggests that it is important to test and validate an idea or concept before investing significant time and resources into building it. This principle can apply to a wide range of contexts, from product development to business strategy.</p> <p>The method of “Build it and they will come” almost never works, especially in this day and age. Your clients/users have more choices than ever and if you are starting out with this mindset — you are building something for the “average user” and usually there are bigger teams which are better prepared, better financed or more popular than you that are already working on a solution. And this is how you lose your competitive edge.</p> <p>The idea behind “validate before you build” is that it is much more efficient and cost-effective to validate an idea early in the development process, rather than building out a full product or solution only to discover that it doesn’t meet the needs or expectations of the market. By validating an idea through methods such as market research, customer feedback, or prototypes, it is possible to determine whether an idea has the potential to succeed before investing significant amount of time and resources into building it.</p> <p>This principle can be particularly important in the fast-paced and rapidly changing world of technology, where new ideas and innovations can quickly become obsolete or outmoded. By validating an idea before building it, it is possible to avoid wasting time and resources on projects that are not likely to succeed, and to focus on developing ideas that have the greatest potential for success. Validate your ideas as soon as possible. Try not to invest or invest as little as possible during this early stage of your startup. You need to understand where your value proposition lyes.<br><br><em>“The biggest mistake a new company can make is to solve a problem no one has.” — Peter Thiel, Zero to One</em></p> <h3><strong>Bonus Lesson:</strong></h3> <p>Something that I have learned really late was to celebrate victories (even the small ones). For some people this looks obvious, but for me it was something often overlooked. I was usually so focused on the finish line that I forget to enjoy the moment and then I lose track how far I went. My final lesson that I want to share with you is that you should practice gratitude and enjoy every step along the way. You will get further…<br><br><em>"Gratitude is the healthiest of all human emotions. The more you express gratitude for what you have, the more likely you will have even more to express gratitude for.” — Zig Ziglar</em></p> <h4><strong>TL;DR:</strong></h4> <ol> <li>The importance of Speed</li> <li>The right environment</li> <li>Timing</li> <li>Taking Ownership</li> <li>Validate before you build</li> </ol> <p><em>PS: There are tons of amazing books that I could recommend on this topic. One of my favorite is Zero to One by Peter Thiel. Definitely worth checking out.</em></p> <p><em>PS: If you would like to share which one resonated with you the most, you could do it in the comment section.</em></p> <img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=9e63d9b06973" width="1" height="1" alt="">

8 min read
Ethereum addresses demystified

Ethereum addresses demystified

<p>Ethereum addresses are a fundamental part of the Ethereum blockchain, serving as the public identifier for Ethereum wallets. These addresses are used to receive and send transactions, store and manage smart contracts, and interact with decentralized applications (dApps).</p> <p>There are two main types of Ethereum addresses: externally owned addresses (EOAs) and contract addresses. EOAs are used to represent the wallets of Ethereum users, and they are controlled by private keys. These addresses are used to send and receive transactions and participate in the Ethereum network. (An address represents your identity on the blockchain) The second type — contract addresses represent smart contracts on the Ethereum blockchain. They are created when a smart contract is deployed and can be used to interact with and execute the functions of the contract. If the data sent to a contract cause an error, any actions taken by the contract to that point are reversed, although the gas fee is still collected.</p> <p>Ethereum addresses are generated using a cryptographic hashing function called Keccak-256, which takes in a user’s public key and produces a unique, fixed-length output. This output is then shortened to create a more user-friendly address, which typically starts with “0x” and consists of a string of 40 hexadecimal characters.</p> <p>Ethereum addresses are essential for the security and privacy of Ethereum users. They serve as the public identifier for a user’s wallet, allowing other users to send transactions to them. However, the address itself does not contain any sensitive information, such as the private key, which is used to control the wallet and sign transactions. This separation of the public address and private key allows users to share their address without compromising the security of their wallet.</p> <p>One way to obtain information about Ethereum addresses is by using <a href="https://etherscan.io/">EtherScan</a>.</p> <p><em>In summary, Ethereum addresses are a crucial aspect of the Ethereum blockchain. They provide a unique and secure way to identify and interact with Ethereum wallets and smart contracts. Whether you are a developer creating a dApp or a user participating in the Ethereum network, understanding Ethereum addresses is essential for navigating the Ethereum ecosystem.</em></p> <img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=2cd19f3560b0" width="1" height="1" alt="">

2 min read
Useful Web3 materials [1/5]

Useful Web3 materials [1/5]

<p>I have been recently asked to share some useful resources for someone who wants to get into the Web3 space.</p> <p>I know that the transition from Web2 might be overwhelming (it certainly was for me). So I think the best thing that I could do is listing 5 useful sources at a time. Also, I think it makes sense to add the categories/tags of [Beginner], [Advanced/Mid] and [Expert] to mark the difficulty.</p> <p>This idea come to me as I was learning new technologies. All the resources tend to be focused on beginner material and there is little to none of the more advanced concepts. This is why I want to build that system of marking different topics with the experience level that is related to them and the difficulty. This way people could skip to the part that they are most interested in — more junior people could skip the advanced concepts to learn the fundamentals and experts could skip the fundamentals in order to only look at the advanced topics.</p> <p>This article is for <em>[Beginners]</em>. However, soon enough there will be follow up articles that will target the more advanced audience.</p> <p>I want to also state which platforms/tools are free and which require you to pay.</p> <ol> <li> <a href="https://cryptozombies.io/">CryptoZombies</a> [Free] — CryptoZombies is an online platform that offers people with step-by-step lessons about Solidity. I have personally used it and I enjoyed the interface and the UX that it offers. The lessons are well explained and gamified. There are different levels and you pass them as you construct Solidity contracts. (There are also hints and lengthy descriptions that you could use to better understand the best practices and why you need a certain concepts)</li> <li> <a href="https://remix.ethereum.org/">Remi</a>x [Free] — Online IDE for Solidity contracts (I recently saw that there is an option for desktop, but honestly I haven’t tried it yet). Remix provides you with an interface to even deploy and test out your own contracts.</li> <li> <a href="https://www.udemy.com/">Udemy</a>/<a href="https://www.coursera.org/">Coursera</a> [Paid] — There are plenty of courses on the topic. Unfortunately, it is extremely hard to filter out the noise and find the best one for you. It also depends on your skills and previous experience in programming. For this reasons I prefer not to make recommendations. However, if you are a beginner and you are looking for structured information to get you started, those platforms are a great start.</li> <li> <a href="https://coinmarketcap.com/">CoinMarketCap</a> [Free/Paid] — CoinMarketCap is a website that provides data and analytics on the cryptocurrency market. The platform tracks the prices, market capitalizations, and trading volumes of various cryptocurrencies and provides real-time and historical data on their performance. CoinMarketCap also offers tools and resources for cryptocurrency investors, such as price charts, market analysis, and news updates.</li> <li> <a href="https://www.coingecko.com/">CoinGecko</a> — CoinGecko is a cryptocurrency market data and analytics platform that provides a range of information about different cryptocurrencies and their markets. The platform offers data on the prices, market capitalizations, and trading volumes of various cryptocurrencies, as well as information about their adoption, usage, and market trends.</li> </ol> <p><em>PS: There is one more platform that is worth checking out— </em><a href="https://sonar.studio/token-studio/bsc/0x5546600f77eda1dcf2e8817ef4d617382e7f71f5"><em>Sonar</em></a><em>. I am personally involved in the building process of the platform and I think the team is creating an awesome product allowing investors to follow different projects on different chains, make their own research using the platform and much more...</em></p> <img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=869edcd3be5c" width="1" height="1" alt="">

3 min read