<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[No Title]]></title><description><![CDATA[đđđđđ'đ đ±đđđ]]></description><link>https://brightshine.io/</link><image><url>https://brightshine.io/</url><title>No Title</title><link>https://brightshine.io/</link></image><generator>Ghost 2.9</generator><lastBuildDate>Wed, 03 Aug 2022 22:07:12 GMT</lastBuildDate><atom:link href="https://brightshine.io/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Can DAOs replace corporations?]]></title><description><![CDATA[DAOs enable people to form organizations with decentralized leaders, run on top of a cryptocurrency where the community and believers have a decentralized voting power as tokens instead of shares. They're often described]]></description><link>https://brightshine.io/can-daos-replace-corporations/</link><guid isPermaLink="false">Ghost__Post__628eb9171bf535001eb961ba</guid><category><![CDATA[blockchain]]></category><dc:creator><![CDATA[Ihssane Hatim]]></dc:creator><pubDate>Wed, 25 May 2022 23:44:26 GMT</pubDate><media:content url="https://res-3.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/canDaos.png" medium="image"/><content:encoded><![CDATA[<img src="https://res-3.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/canDaos.png" alt="Can DAOs replace corporations?"/><p>DAOs enable people to form organizations with decentralized leaders, run on top of a cryptocurrency where the community and believers have a decentralized voting power as tokens instead of shares. They're often described as a way for people to avoid the hierarchical centralized systems in corporations.<br/></p><p>As DEFi came to build a new internet-native financial system, DAOs are here to decentralize the governance layer in legacy business structures and offer the promise of enabling a focus on community, rather than just profit.</p><hr><h2 id="-what-is-a-dao">#What is a DAO ?<br/></h2><p>In 2013, co-founder of Bitshares, Steem, and EOS blockchain Dan Larimer described Bitcoin as a type of DAO, using the metaphor of cryptocurrencies as shares in a âDecentralized Autonomous Corporationâ (DAC) with the goal of earning profit for shareholders by providing services on the free market. Five days later, then author at Bitcoin Magazine Vitalik Buterin (now co-founder of the Ethereum blockchain), pointed out that corporations are ânothing more than people and contracts all the way downâ.<br/></p><p>The concept of DAOs has since been popularized by blockchain communities, especially in the Ethereum ecosystem. The software language of the Ethereum protocol allows automated, smart contracts for the enactment of composable governance processes and mechanisms, and DAOs are proliferating as an open field of experimentation in automation, governance, and autonomy. DAOs have been referred to as a site of algorithmic governance for further ethnographic enquiry.</p><hr><h2 id="-dao-lifecycle">#DAO lifecycle<br/></h2><p>DAOs are undertaking different ways towards becoming a DAO. The majority takes a transition through a progressive route to decentralization.<br/></p><p>The typical growth of a DAO consists of Idea stage, getting believers, early contributors, token raise, governance setup, treasury setup, development program, sustainable revenue and full decentralization.</p><figure class="kg-card kg-image-card"><img src="https://lh3.googleusercontent.com/bL67qcpX_frLVWw0zUIhxu4DfKLKVHAiSxNWHrkjTTrOjmAyraiDka7a8TEuoHO5OLuxVoZXLJ8ZWrKeLikfJ--MASqRGad0tQiwAKk1mZbYr2Ao1wvXqRG2Q718M4wyPm6oX-Ai88fl6CiYOw" class="kg-image" alt="Can DAOs replace corporations?"/></figure><p>According to Yury Lifshits the founder of SuperDAO we can define each stage as following :</p><p><strong>*Idea stage</strong></p><p><em>Leader + purpose + name</em></p><p>To get started, one needs a name for the DAO (can be a working title), a leader, and the purpose of the organization. The purpose needs to be stated from the perspective of members and supporters (why we want this DAO to exist) and not from the perspective of the creator. In other words, articulate what kind of good things the DAO will make for its members and the general public.<br/></p><p><strong>*Believers</strong></p><p><em>Founding members + written roadmap + public profile</em></p><p>Manually invite most ideologically motivated people and draft together a plan of action. How do you want the DAO to work and what are you planning to make? The decisions on tokens, NFTs, and governance systems can wait, focusing primarily on value creation at this point. With founding members and a draft roadmap, an âupcoming DAOâ profile can be created to attract more members.<br/></p><p><strong>*Early contributors</strong></p><p><em>Contributor loop + reward system</em></p><p>Figure out the most common and repeatable tasks the early members can do to help your DAO. Then, propose rewards for those actions. Rewards can include special achievements NFTs (designed for status, not speculation), whitelist membership for future NFT minting and token airdrops, and options to buy future NFTs/tokens at an exceptionally low price. <br/></p><p><strong>*Initial capitalization</strong></p><p><em>Token raise or primary NFT sale</em></p><p>Introduce DAOâs main token or its primary NFT collection representing membership. By this stage you will have two types of members â the ones who earn their membership via labor contributions and the one acquired through primary sale. In other words, you are now mixing âwork to joinâ with âbuy to joinâ models. You still can be pre-screening buyers and limiting the secondary market for memberships if it's important for your specific DAO. <br/></p><p><strong>*Governance setup</strong></p><p><em>Partial decentralization + voting</em></p><p>Transferring some governance rights from creator to community. Typical decisions to delegate include financial parameters (âtax rateâ), curation, investing, featuring, budget and grant approval, token allocations, and elected roles.<br/></p><p><strong>*Treasury setup</strong></p><p><em>Treasury composition + liquidity + spend management</em></p><p>Diversifying DAOs treasury to include its native token, unminted primary NFTs, major coins, stable coins, tokens from related DAOs (e.g. from the blockchain of choice) and fiat. Partnering with liquidity providers and lenders for loans, guaranteed exchange rates, and yield programs to generate more interest and currencies needed for contributor compensation.<br/></p><p><strong>*Development program</strong></p><p><em>Payroll + grants + project-based hiring + bounty program + programmatic incentives</em></p><p>Recruiting contributors, including engineering, business roles, influencers, customers, and ecosystem partners. Using fiat, token and NFT-based compensation models. Automating rule-based compensation, including giveaways and airdrops.<br/></p><p><strong>*Sustainable revenue</strong></p><p><em>Member dues + secondary royalties + service review + licensing</em></p><p>Long term revenue models for DAOs include annual fees for holding membership NFTs (aka âproperty taxâ), royalties from secondary NFT trading, paid services and gas fees, DAO-owned IP licensing.<br/></p><p><strong>*Full decentralization</strong></p><p><em>Governance layer + operating layer</em></p><p>Separating governance activities (policy, budgeting) and operating layer (an ecosystem of âlabsâ providing development and operation services. The main token may be split into a governance token (voting powers) and a utility token (ecosystem currency) at this point.<br/></p><hr><p>To be more accurate, there is no 100% correct framework for starting a DAO and each DAO one has its own and unique journey.</p><hr><p><em><strong>#Why DAOs fail ?</strong></em><br/></p><p>Because they are vulnerable to both social and technical attacks, DAOs are likely to fail.</p><p>Based on the ethereum blog: DAOs are vulnerable to collusion attacks ⊠In a democracy, for example, the whole point is that a plurality of members choose what they like best and that solution gets executed; in Bitcoin on the other hand, the âdefaultâ behavior that happens when everyone acts according to individual interest without any desire for a specific outcome is the intent, and a 51% attack to favor a specific blockchain is an aberration.</p><p>Technical attacks can be software code bugs creating security errors.</p><p>Alyssa Hertig also stated that unstoppable code can pose a problem: Itâs difficult to change the rules of the DAO once itâs deployed to the Ethereum blockchain. The same framework that prevents a person or entity from altering the organization without consensus from the community can also cause problems, the main one being that any gaps in the framework arenât easily closed. That can lead to potential theft, money loss or other disastrous consequences.<br/></p><h2 id="conclusion">Conclusion<br/></h2><p>I believe DAOs potentially have the ability to transform the legacy business structure despite the absence of a clear framework for DAOs including the legal part. Wyoming passed a law earlier the year of 2021 that recognized DAOs and gave them the same legal power as LLCs. However they are still unrecognized. Until that happens, they're likely to be widely adopted.<br/></p><hr><h3 id="-bonus">#Bonus</h3><p>To obtain legal status as a registered corporate entity (in the US), a DAO must:</p><ul><li>be deployed on a public blockchain</li><li>provide a unique public address so anyone can view their operations</li><li>software code must be open-source, software code must be audited, laypeople able to read smart contract variables and token restrictions</li><li>governance must be decentralized in the technical architecture of the DAO</li><li>at least one DAO member</li><li>a contact point</li><li>a binding dispute resolution mechanism for participants</li><li>a dispute resolution mechanism for interacting with third parties, outside of the DAO.</li></ul><hr><p>I hope you enjoyed reading about this topic, if you would like to explore more here are the resources :</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.coindesk.com/learn/what-is-a-dao/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">What Is a DAO?</div><div class="kg-bookmark-description">A decentralized autonomous organization, or DAO, is an organization thatâs governed by code instead of leaders.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.coindesk.com/pf/resources/favicons/production/android-chrome-512x512.png?d=166" alt="Can DAOs replace corporations?"><span class="kg-bookmark-author">Alyssa Hertig</span><span class="kg-bookmark-publisher">CoinDesk</span></img></div></div><div class="kg-bookmark-thumbnail"><img src="https://www.coindesk.com/resizer/HR3q5yT3jkyjr0EZ5Ya33vJW418=/1200x628/center/middle/cloudfront-us-east-1.images.arcpublishing.com/coindesk/WXLJZUNETNCXLIV3YTP3RX43TI.jpg" alt="Can DAOs replace corporations?"/></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://blog.ethereum.org/2014/05/06/daos-dacs-das-and-more-an-incomplete-terminology-guide/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">DAOs, DACs, DAs and More: An Incomplete Terminology Guide</div><div class="kg-bookmark-description">One of the most popular topics in the digital consensus space (a new term for cryptocurrency 2.0 that Iâm beta-testing) is the concept of decentralized autonomous entities. There are now a number of groups rapidly getting involved in the space, including Bitshares (also known as Invictus InnovationsâŠ</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.ethereum.org/favicon.png" alt="Can DAOs replace corporations?"><span class="kg-bookmark-author">Ethereum Foundation</span><span class="kg-bookmark-publisher">Ethereum Foundation Blog</span></img></div></div><div class="kg-bookmark-thumbnail"><img src="https://blog.ethereum.org/img/ethereum-blog-og-image.png" alt="Can DAOs replace corporations?"/></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://kelsienabben.substack.com/p/experiments-in-algorithmic-governance"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Experiments in algorithmic governance continue</div><div class="kg-bookmark-description">Trying not to fail at Decentralised Autonomous Organisations (DAOs)</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ee112b5d-70ef-4b95-b0de-b2f15e6d9dbe/apple-touch-icon-1024x1024.png" alt="Can DAOs replace corporations?"><span class="kg-bookmark-author">Kelsie Nabben</span><span class="kg-bookmark-publisher">Kelsie - on the cataclysmia of digital infrastructure</span></img></div></div><div class="kg-bookmark-thumbnail"><img src="https://substackcdn.com/image/fetch/w_1200,h_600,c_limit,f_jpg,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fececdfe4-8e46-413f-91e6-58848a9d37a9_904x380.jpeg" alt="Can DAOs replace corporations?"/></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://docs.google.com/document/d/1CMVPUomG2SS4ITMQ8283VJlC74_p-55Cz7gqy2V9FSo/edit?usp=embed_facebook"><div class="kg-bookmark-content"><div class="kg-bookmark-title">The DAO Playbook from Superdao & friends</div><div class="kg-bookmark-description">The DAO Playbook đ Intro This is a step-by-step guide on how to start, manage, and grow a decentralized autonomous organization (DAO). The initial version is written by Yury Lifshits (CEO Superdao) and is heavily based on insights from Roadmap club, an informal community of DAO operators and inf...</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://ssl.gstatic.com/docs/documents/images/kix-favicon7.ico" alt="Can DAOs replace corporations?"><span class="kg-bookmark-publisher">Google Docs</span></img></div></div><div class="kg-bookmark-thumbnail"><img src="https://lh6.googleusercontent.com/GTjcG-DrJpCzYig5Dnq3_XZNbLh67J7vXoyZ2ER9YkTPjVx8HWDHxcY4Ml_hJrDRCnrkcANANQvwSA=w1200-h630-p" alt="Can DAOs replace corporations?"/></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.weforum.org/agenda/2022/02/re-envisioning-corporations-how-daos-and-blockchain-can-improve-the-way-we-organize/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">How DAOs and blockchain can improve the way we organize</div><div class="kg-bookmark-description">Decentralized autonomous organizations, or DAOs, are changing the way we think about how corporations work, and how they might work in the future.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.weforum.org/favicons/apple-touch-icon.png?v=lk270KxwRj" alt="Can DAOs replace corporations?"><span class="kg-bookmark-author">Brynly Llyr</span><span class="kg-bookmark-publisher">World Economic Forum</span></img></div></div><div class="kg-bookmark-thumbnail"><img src="https://assets.weforum.org/article/image/responsive_medium_KLzOhB0YwEeWJ6QbHEZrmepohfj0hJPaZZaCMECJX8o.jpg" alt="Can DAOs replace corporations?"/></div></a></figure></hr></hr></hr></hr></hr></hr>]]></content:encoded></item><item><title><![CDATA[Aspen: the Markup language for creating graph data (Neo4j)]]></title><description><![CDATA[Aspen was made in 2020 and itâs a simple and friendly markup language that translates what you write on your text editor, to a Cypher query, by running a single command line.]]></description><link>https://brightshine.io/aspen-the-markup-language-for-creating-graph-data-neo4j/</link><guid isPermaLink="false">Ghost__Post__61637184ecd715001eca488d</guid><category><![CDATA[web_development]]></category><dc:creator><![CDATA[Ihssane Hatim]]></dc:creator><pubDate>Fri, 05 Nov 2021 21:49:00 GMT</pubDate><media:content url="https://res-3.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Design-failure-mode.png" medium="image"/><content:encoded><![CDATA[<img src="https://res-3.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Design-failure-mode.png" alt="Aspen: the Markup language for creating graph data (Neo4j)"/><p/><p>As I was looking for new projects built using the Neo4j graph database, and especially the interesting use cases, I came across this markup language called Aspen, read more about it on the Neo4j community and told myself : âWOW, this is a fascinating work that deserves to be shared and celebrated !â.</p><p>In this article, we will discover together this project built by <em>Quadri Sheriff </em>and <em>Matt</em> ( Iâm not sure about their real names but those are on Github :p ) using Ruby.</p><hr><p><strong>Sections:</strong></p><ol><li>What is Aspen?</li><li>Run some examples</li><li>Limitations</li></ol><hr><h2 id="-1-what-is-aspen">#1# What is Aspen?</h2><figure class="kg-card kg-image-card"><img src="https://res-3.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Design-failure-mode--1-.png" class="kg-image" alt="Aspen: the Markup language for creating graph data (Neo4j)"/></figure><p>Aspen was made in 2020 and itâs a simple and friendly markup language that translates what you write on your text editor, to a Cypher query, by running a single command line.</p><p>What I liked the most about Aspen is the easy to remember syntax. </p><p>If you are new to Cypher and donât have time to learn it, Aspen may be your awesome tool (and you have a simple data model).</p><hr><h2 id="-2-run-some-examples">#2# Run some examples</h2><figure class="kg-card kg-image-card"><img src="https://res-1.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Design-failure-mode--2-.png" class="kg-image" alt="Aspen: the Markup language for creating graph data (Neo4j)"/></figure><h2 id="-example-1"># Example 1</h2><p>If we want to model a relationship between cats and dogs saying :</p><!--kg-card-begin: markdown--><pre><code>cats like dogs ; </code></pre> <!--kg-card-end: markdown--><p>In Aspen would be:</p><!--kg-card-begin: markdown--><pre><code>default: label: Animal ----- (cats) [like] (dogs) </code></pre> <!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://res-1.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Screen-Shot-2021-11-05-at-01.31.46.png" class="kg-image" alt="Aspen: the Markup language for creating graph data (Neo4j)"/></figure><p>In the Neo4j browser (graph view) :</p><figure class="kg-card kg-image-card"><img src="https://res-3.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Screen-Shot-2021-11-05-at-01.51.18.png" class="kg-image" alt="Aspen: the Markup language for creating graph data (Neo4j)"/></figure><p/><h2 id="-example-2"># Example 2</h2><p>If we want to model a relationship between cats and dogs saying : </p><!--kg-card-begin: markdown--><pre><code>cats like dogs and also dogs do like cats </code></pre> <!--kg-card-end: markdown--><p>We are discussing here a <strong>reciprocal</strong> (undirected) relationship, and this is a quite different syntax, to let Aspen know about it:</p><figure class="kg-card kg-image-card"><img src="https://res-4.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Screen-Shot-2021-11-05-at-02.45.45.png" class="kg-image" alt="Aspen: the Markup language for creating graph data (Neo4j)"/></figure><p>In an Aspen file, we have the <strong>discourse</strong> written at the top, and the <strong>narrative</strong> written at the bottom, always split by a line of just four dashes: ----</p><p><strong><em> *Discourse:</em></strong> </p><blockquote>By default, if you donât put any name inside the <strong>label,</strong> Aspen will name it Entity and assume the text inside the parentheses is the name of that entity. Aspen can't automatically know that (dogs) and (cats) are <strong>Animal </strong>nodes, so we have to tell it using the discourse, following a YAML structure. </blockquote><p><strong><em> * Narrative:</em></strong> </p><blockquote>This is the section where we write our description and observations in a narrative way with the use of () for names and [] for relationships.</blockquote><p>Here is a minimal version for the same example:</p><!--kg-card-begin: markdown--><pre><code>reciprocal: like ---- (cats) [like] (dogs) </code></pre> <!--kg-card-end: markdown--><p>Output:</p><!--kg-card-begin: markdown--><pre><code>MERGE (entity_cats:Entity { name: "cats" }) MERGE (entity_dogs:Entity { name: "dogs" }) MERGE (entity_cats)-[:LIKE]-(entity_dogs) ; </code></pre> <!--kg-card-end: markdown--><p/><h2 id="-example-3"># Example 3</h2><p>Now letâs take a complex example (not that complex but fine):</p><p> *We have three points A, B and C, each point has its own latitude and longitude.</p><p> *We have two insects ( bug and ladybug ) moving from A to C passing by B.<br/></p><p>I did it this way (you can find your own):</p><figure class="kg-card kg-image-card"><img src="https://res-1.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Screen-Shot-2021-11-05-at-21.00.14.png" class="kg-image" alt="Aspen: the Markup language for creating graph data (Neo4j)"/></figure><p><strong><strong>Aspen</strong> file<strong>:</strong></strong></p><!--kg-card-begin: markdown--><pre><code>allow_only: edges: - Located at - Moved to default: label: Point label: Insect attributes: Latitude: latitude Longitude: longitude ---- (Point: A) [Located at] (Latitude: 3.33) (Point: A) [Located at] (Longitude: -4.44) (Point: B) [Located at] (Latitude: 5.33) (Point: B) [Located at] (Longitude: -5.44) (Point: C) [Located at] (Latitude: 6.33) (Point: C) [Located at] (Longitude: -6.44) (Insect: bug) [Moved to] (Point: A) (Insect: bug) [Moved to] (Point: B) (Insect: bug) [Moved to] (Point: C) (Insect: ladybug) [Moved to] (Point: A) (Insect: ladybug) [Moved to] (Point: B) (Insect: ladybug) [Moved to] (Point: C) </code></pre> <!--kg-card-end: markdown--><p><strong>Cypher output:</strong></p><!--kg-card-begin: markdown--><pre><code>MERGE (point_a:Point { name: "A" }) MERGE (latitude_3_33:Latitude { latitude: 3.33 }) MERGE (longitude_4_44:Longitude { longitude: "-4.44" }) MERGE (point_b:Point { name: "B" }) MERGE (latitude_5_33:Latitude { latitude: 5.33 }) MERGE (longitude_5_44:Longitude { longitude: "-5.44" }) MERGE (point_c:Point { name: "C" }) MERGE (latitude_6_33:Latitude { latitude: 6.33 }) MERGE (longitude_6_44:Longitude { longitude: "-6.44" }) MERGE (insect_bug:Insect { name: "bug" }) MERGE (insect_ladybug:Insect { name: "ladybug" }) MERGE (point_a)-[:LOCATED_AT]->(latitude_3_33) MERGE (point_a)-[:LOCATED_AT]->(longitude_4_44) MERGE (point_b)-[:LOCATED_AT]->(latitude_5_33) MERGE (point_b)-[:LOCATED_AT]->(longitude_5_44) MERGE (point_c)-[:LOCATED_AT]->(latitude_6_33) MERGE (point_c)-[:LOCATED_AT]->(longitude_6_44) MERGE (insect_bug)-[:MOVED_TO]->(point_a) MERGE (insect_bug)-[:MOVED_TO]->(point_b) MERGE (insect_bug)-[:MOVED_TO]->(point_c) MERGE (insect_ladybug)-[:MOVED_TO]->(point_a) MERGE (insect_ladybug)-[:MOVED_TO]->(point_b) MERGE (insect_ladybug)-[:MOVED_TO]->(point_c) ; </code></pre> <!--kg-card-end: markdown--><p>Back to the Aspen syntax used in this example:</p><ul><li>The <strong>allow_only</strong> provides protections that catch typos in node labels and edge names</li><li>In the example we have two types of nodes : Insect and Point, how could be the best way to let Aspen know about it? Here comes (Point: C) and (Insect: ladybug) to distinguish between both types</li><li>Aspen automatically translate <strong>Moved to</strong> into <strong>MOVED_TO</strong> in cypher</li></ul><p>In the Neo4j browser (graph view) :</p><figure class="kg-card kg-image-card"><img src="https://res-1.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Screen-Shot-2021-11-05-at-21.09.22.png" class="kg-image" alt="Aspen: the Markup language for creating graph data (Neo4j)"/></figure><hr><h2 id="-3-limitations">#3# Limitations</h2><p/><p>Every software has its limitations and Aspen also does. I have tested many cases but unfortunately, the more complex your use case is, the more text you should write, and many use cases donât seem to be covered yet.<br/></p><p>Given that underscores are not allowed, and nodeâs name is not customizable, also as you mentioned in the last example, I couldn't put many labels in one statement.<br/></p><p>I think these problems are due to the lack of sponsor and contribution to this project as itâs new and only two developers are involved in its roadmap.</p><hr><h2 id="conclusion-">Conclusion:</h2><p/><p>To sum up, Aspen is interesting and its contributors are looking to improve it by adding schema and attribute protections, building a connector to communicate directly with a development/test/production Neo4j instance to publish data, also developing a UI so you donât have to run code locally or walk through your directory looking for the generated file.</p><hr><p><strong>Resources: </strong></p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/thepeergroup/aspen"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - thepeergroup/aspen: Aspen is a markup language for turning text into graph data (via Cypher for Neo4j).</div><div class="kg-bookmark-description">Aspen is a markup language for turning text into graph data (via Cypher for Neo4j). - GitHub - thepeergroup/aspen: Aspen is a markup language for turning text into graph data (via Cypher for Neo4j).</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/favicons/favicon.svg" alt="Aspen: the Markup language for creating graph data (Neo4j)"><span class="kg-bookmark-author">thepeergroup</span><span class="kg-bookmark-publisher">GitHub</span></img></div></div><div class="kg-bookmark-thumbnail"><img src="https://repository-images.githubusercontent.com/244499006/cb59d400-6b7c-11ea-8947-34b1447cab33" alt="Aspen: the Markup language for creating graph data (Neo4j)"/></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://aspen-lang.org"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Aspen - Simple graph data</div><div class="kg-bookmark-description">Aspen - Simple graph data</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://aspen-lang.org/assets/images/favicon/android-icon-192x192.png" alt="Aspen: the Markup language for creating graph data (Neo4j)"><span class="kg-bookmark-author">CJ Patoilo</span><span class="kg-bookmark-publisher">Aspen - Simple graph data</span></img></div></div><div class="kg-bookmark-thumbnail"><img src="https://aspen-lang.org/images/thumbnail.png" alt="Aspen: the Markup language for creating graph data (Neo4j)"/></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://neo4j.com/blog/2020-graphs4good-graphhack-projects"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Check Out Some of This Yearâs Graphs4Good GraphHack Projects</div><div class="kg-bookmark-description">Discover with that Neo4j Community created for our Graphs4Good GraphHack event, which includes a number of amazing COVID-19 projects.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://neo4j.com/favicon-194x194.png?v=bOXynyJWa6a" alt="Aspen: the Markup language for creating graph data (Neo4j)"><span class="kg-bookmark-author">Karin Wolok</span><span class="kg-bookmark-publisher">Neo4j Graph Database Platform</span></img></div></div><div class="kg-bookmark-thumbnail"><img src="https://dist.neo4j.com/wp-content/uploads/20200416060439/covid-19-check-featured.png" alt="Aspen: the Markup language for creating graph data (Neo4j)"/></div></a></figure></hr></hr></hr></hr></hr></hr>]]></content:encoded></item><item><title><![CDATA[Design patterns for MongoDB]]></title><description><![CDATA[The key challenge in data modeling is balancing the needs of the application, the performance characteristics of the database engine, and the data retrieval patterns.]]></description><link>https://brightshine.io/design-patterns-for-mongodb/</link><guid isPermaLink="false">Ghost__Post__602b174bc9973b001e349e5e</guid><category><![CDATA[web_development]]></category><dc:creator><![CDATA[Ihssane Hatim]]></dc:creator><pubDate>Tue, 16 Mar 2021 23:21:00 GMT</pubDate><media:content url="https://res-3.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Design-patterns-for-mongodb.png" medium="image"/><content:encoded><![CDATA[<blockquote>The key challenge in data modeling is balancing the needs of the application, the performance characteristics of the database engine, and the data retrieval patterns. When designing data models, always consider the application usage of the data (i.e. queries, updates, and processing of the data) as well as the inherent structure of the data itself.</blockquote><img src="https://res-3.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Design-patterns-for-mongodb.png" alt="Design patterns for MongoDB"/><p>A design pattern in general is an abstract, reusable solution to a commonly occurring problem within a given context or use case. As a mongoDB modeler you should know those modeling concepts and make use of them , each design for a specific use case .</p><p>In this article I will introduce the common problems handled by each pattern , then - inside each concept - explore examples and use cases to show the benefits behind each modeling solution.</p><hr><p>Sections :</p><!--kg-card-begin: markdown--><ol> <li>Attribute pattern</li> <li>Extended reference pattern</li> <li>Subset pattern</li> <li>Computed pattern</li> </ol> <!--kg-card-end: markdown--><hr><h3 id="-1-attribute-pattern-">#1# Attribute pattern :</h3><p/><p><em><strong>#Problem :</strong></em></p><p>Imagine you have many products, where each one has its own specifications , given the following two products :</p><!--kg-card-begin: markdown--><pre><code class="language-json">product1 : { "_id": ObjectId("5c5348f5be09bedd4f196f18"), "title": "", "date_acquisition": ISODate("2021-12-25T00:00:00.000Z"), "description": "", âbrandâ : ââ, color :ââ, size:ââ, âcontainerâ:ââ, âsweetenerâ:ââ } product2 : { "_id": ObjectId("5c5348f5be09bedd4f196f18"), "title": "", "date_acquisition": ISODate("2021-12-25T00:00:00.000Z"), "description": "", âbrandâ : ââ, capacity:ââ, âinputâ:ââ, âoutputâ:ââ } </code></pre> <!--kg-card-end: markdown--><p>On the application , we want to have all products where :</p><ul><li>the capacity is lower than 3000 and the output equals to 5V</li><li>or the color is red</li><li>or the size is â100 x 70 x 50â</li></ul><p>To make it faster , we should create an index on the color , size , capacity , and output ; more fields, more indexes, in this way a repetitive task may lead to a mess when scaling the database .</p><p><em><strong>#Solution :</strong></em></p><p>For this reason , the âattribute patternâ suggests grouping those fields in a single array of key-value pairs .</p><p>As an example Letâs apply this pattern on the product2 :</p><!--kg-card-begin: markdown--><pre><code class="language-json">product2 : { "_id": ObjectId("5c5348f5be09bedd4f196f18"), "title": "", "date_acquisition": ISODate("2021-12-25T00:00:00.000Z"), "description": "", âbrandâ : ââ, âspecsâ : [ { âkâ : âcapacityâ , âvâ: â1000â }, { âkâ : âoutputâ , âvâ: â5Vâ}, { âkâ : âinputâ , âvâ : â...â } ] } </code></pre> <!--kg-card-end: markdown--><p>For now , the only indexes to create are on âspecs.kâ and âspecs.vâ .</p><p><em><strong>#Common use cases :</strong></em></p><ul><li>The Attribute Pattern is well suited for schemas with sets of fields having the same value type, such as lists of dates.</li><li>It also works well when it comes to the characteristics of products (the above example). Some products, such as clothing, may have sizes that are expressed in small, medium, or large. Other products in the same collection may be expressed in volume etc..</li></ul><p><em><strong>#Conclusion :</strong></em></p><p>The Attribute Pattern provides easier indexing and targeting many similar fields per document .</p><hr><h3 id="-2-extended-reference-pattern-">#2# Extended reference pattern :</h3><p/><p><em><strong>#Problem :</strong></em></p><p>Do you have nightmares about long and complex SQL queries performing too many joins ?</p><p>Even if you migrated from a 10 tables relational model in the tabular database to a 3 collections model in MongoDB, you might still find yourself doing a lot of queries that need to join data from different collections.</p><p>For sure, your MongoDB queries are nowhere going to be as complicated as in SQL.</p><p>In the world of big data anything you do too often can become a liability for your performance.</p><p><em><strong>#Solution :</strong></em></p><p>Now , time to introduce<em> <strong>no physical joins pattern</strong></em> .</p><p>The idea behind this pattern is to embed a One-to-Many relationship on the one side or the Many-to-One on the many side .</p><p>To decide which collection should be inside the other you should consider the focus of your application when querying your database , if the focus is on the Many side , you must bring the one side to the Many .</p><blockquote><em>Hint : you can extend only the part you need to join often .</em></blockquote><p>Well , letâs take an example of an e-commerce application where we need to join the customers and their orders to get the shipping address .</p><p>Applying the <strong>extended reference pattern</strong> , we have to duplicate the following attributes inside the orders collection :</p><ul><li><strong><strong><strong>country</strong></strong></strong></li><li><strong><strong><strong>city</strong></strong></strong></li><li><strong><strong><strong>postal code</strong></strong></strong></li><li><strong><strong><strong>street</strong></strong></strong></li><li><strong><strong><strong>House number</strong></strong></strong></li></ul><p>As a result, orders collection now will have an <strong>Order_location</strong> object with above fields :</p><figure class="kg-card kg-image-card"><img src="https://res-2.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/orders.png" class="kg-image" alt="Design patterns for MongoDB"/></figure><p><em><strong>#Common use cases :</strong></em></p><ul><li>The extended reference pattern is used on real time applications where a single physical join matters .</li><li>Used also on analytic and catalog applications .</li></ul><p><em><strong>#Conclusion :</strong></em></p><p>Deciding to minimize joins and lookups on your application increases its performance especially when duplicated fields are not mutable .</p><blockquote><em>Hint : if duplicated fields mutate you should handle updates and this pattern may not be the best fit .</em></blockquote><hr><h3 id="-3-subset-pattern-">#3# Subset pattern :</h3><p/><p><em><strong>#Problem :</strong></em></p><p>MongoDB tries to optimize the use of RAM by pulling in memory only the needed documents from the disk through the RAM.</p><p>When there is no more memory available, it evicts pages that contain the document it doesn't need anymore to make room for more needed documents to process at the moment.</p><figure class="kg-card kg-image-card"><img src="https://res-5.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/pastedimg.png" class="kg-image" alt="Design patterns for MongoDB"/></figure><p>This mechanism allows a hardware configuration that does less RAM than the total size of the data on disk.</p><p>As long as the size of your working set fits in RAM, you get good performance.</p><p>The working set refers to the amount of space taken by the documents and the portions of indexes that are frequently accessed.</p><p>Either if you get into a situation where the working set is larger than RAM, documents that are needed all the time, may not fit in memory , so the server finds itself often dropping documents and fetching back from disk .</p><p>This process of constantly ejecting documents that should stay in memory is bad , pretty bad.</p><p><em><strong>#Solution :</strong></em></p><p>To handle this problem you must either add more RAM , scale with sharding or <em><strong>reduce the size of your working set </strong></em>.</p><p>The last solution can be achieved by considering the <strong>subset pattern </strong>which focuses on splitting a collection in 2 collections : most and least used part of the document .</p><p>We can reduce the size of the working set while processing joins on the Many-to-Many or one-to-Many relationships by duplicating the often used attributes on the most used side (<strong>extended reference pattern</strong>)</p><p>A simple example can be the following document from a movies collection :</p><figure class="kg-card kg-image-card"><img src="https://res-3.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/pastedcollection1.png" class="kg-image" alt="Design patterns for MongoDB"/></figure><p>Most of the time users want to see the top actors and the top reviews, rather than all of them. The ideal solution is to keep only the most used fields and move others to a separate collection :</p><figure class="kg-card kg-image-card"><img src="https://res-2.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/pastedcollection2.png" class="kg-image" alt="Design patterns for MongoDB"/></figure><p><em><strong>#Common use cases :</strong></em></p><ul><li>List of reviews or comments on an article .</li><li>List of actors in a movie .</li></ul><p><em><strong>#Conclusion :</strong></em></p><p>As a result of applying the subset pattern, our working set will retrieve additional documents faster since they will be smaller , but the fact that you break documents in two and duplicate some info means that the database will require a little bit more space on disk.</p><p>However, this is not a big issue as this space is much cheaper than RAM.</p><hr><h3 id="-4-computed-pattern-">#4# Computed pattern :</h3><p/><p><em><strong>#Problem :</strong></em></p><p>You may find yourself redoing the same mathematical , roll-up or fan-out operations which are all a kind of computations/transformations, if repeated can lead to a very poor performance.</p><p>On big data systems, doing the same computation over and over is very expensive and ends up using a lot of CPU .</p><p><em><strong>#Solution :</strong></em></p><p>The solution is to perform the computation and store the result in the appropriate document and collection. If you need to redo the computations or want to be able to redo them, just keep their sources .</p><p>As an example , we want to calculate the total of payments done on our store from the very beginning , if you think the $sum aggregation is enough for you , then you should consider this pattern to avoid computations each time a new payment is processed .</p><p>To handle this , we will add a new computation collection (for example : total_amount_payments ), once we have a new payment we should update the sum inside .</p><p>In this case the write operation is better than reading all documents over and over .</p><p><em><strong>#Common use cases :</strong></em></p><ul><li>Frequent aggregation framework queries .</li><li>IOT ( Internet Of Things ).</li><li>Event sourcing .</li></ul><p><em><strong>#Conclusion :</strong></em></p><p>The computed pattern allows for a reduction in CPU workload when the data needs to be repeatedly computed by the application .</p><hr><p>If you make it till the end , I hope you liked this introduction to the world of design patterns for MongoDB .</p><p>Still want to explore more ?</p><p>Here are some useful resources [ linked below :) ]</p><hr><p>Resources :</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://university.mongodb.com/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Free MongoDB Official Courses | MongoDB University</div><div class="kg-bookmark-description">Learn MongoDB directly from MongoDB University. Free online training courses and tutorials. Register today!</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://d1izfjx1xfihx4.cloudfront.net/images/web-app-icons/apple-touch-icon.png" alt="Design patterns for MongoDB"><span class="kg-bookmark-publisher">MongoDB Uni</span></img></div></div><div class="kg-bookmark-thumbnail"><img src="https://university.mongodb.com/static/images/testimonials/rachelle.png" alt="Design patterns for MongoDB"/></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.mongodb.com/blog/post/building-with-patterns-a-summary"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Building with Patterns: A Summary | MongoDB Blog</div><div class="kg-bookmark-description">A summary of all the patterns weâve looked at in this series</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.mongodb.com/blog/assets/favicon.ico" alt="Design patterns for MongoDB"><span class="kg-bookmark-author">Daniel Coupal</span><span class="kg-bookmark-publisher">MongoDB</span></img></div></div><div class="kg-bookmark-thumbnail"><img src="https://webassets.mongodb.com/_com_assets/cms/lucas-gallone-804402-unsplash-hero-slice-csldvq4uwc.jpg" alt="Design patterns for MongoDB"/></div></a></figure></hr></hr></hr></hr></hr></hr></hr>]]></content:encoded></item><item><title><![CDATA[Johari Window]]></title><description><![CDATA[Say that we have just met and I like you , how do I find out more about you ? And how do I let you know more about me ? This is the process of self-disclosure on both of our parts , we ask questions to know more about each other , we give our feedback , exchange ideas and situations , etc ...]]></description><link>https://brightshine.io/johari-window/</link><guid isPermaLink="false">Ghost__Post__5fad9bf74a0f85001e718490</guid><category><![CDATA[general]]></category><dc:creator><![CDATA[Ihssane Hatim]]></dc:creator><pubDate>Fri, 13 Nov 2020 22:56:01 GMT</pubDate><media:content url="https://res-2.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/pasted.png" medium="image"/><content:encoded><![CDATA[<img src="https://res-2.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/pasted.png" alt="Johari Window"/><p/><p>Say that we have just met and I like you , how do I find out more about you ? And how do I let you know more about me ? This is the process of self-disclosure on both of our parts , we ask questions to know more about each other , we give our feedback , exchange ideas and situations , etc ... Each one reveals information about "self" to "other" , whereas , when we interact with others we might find out things we didnât know about ourselves too , those new things never told to us before or we had never thought about .</p><p>Through analytical eyes , all of that information can be figured out using something called âJoHari Windowâ which is a tool for understanding and training self-awareness, personal development, interpersonal relationships, group dynamics, team development and inter-group relationships .</p><p>JoHari comes from Joseph and Harry, both american psychologists (Joseph Luft and Harry Ingham) who developed this model of communication in the 1950âs representing the level of self-disclosure and receptivity to feedback in one relationship ( may apply to teams ) .</p><figure class="kg-card kg-image-card"><img src="https://lh6.googleusercontent.com/WaDb39v6b81iuiLga_ksvjtUX-PfhfbTASUk7vkZ2LkvvqjOhdFlXHgsTTR7xRByrPYKpkgZMxOOBPFGAdHb_A7bmqBkZaSKa2PXDb5QRo1q1h8CiGCtYvO2WcskApr5YqBKx-oZ" class="kg-image" alt="Johari Window"/></figure><p>JoHari Window can be also defined as a method of plotting disclosive behaviors in a relationship , this window contains 4 panes , areas or regions when each side is a figure of what is known and unknown .</p><p>Everyone has known and unknown things about âselfâ which can be represented by the following window :</p><figure class="kg-card kg-image-card"><img src="https://lh5.googleusercontent.com/ENsXvIEBT6i2dEHG60aRn7DnhUk8RXkHMNYPmwKmx5qilV7cNYP9_R0on3nCw1-B3GMUn3KAV1e9J5Oj972nqohltcmABjgaYpt2OhQYsBE9mGx1yozIZI089XN9rUh2E9HeCs6X" class="kg-image" alt="Johari Window"/></figure><p>And because JoHari cares also about otherâs thoughts , it represents what the others know and ignore about me as âYOU KNOWâ and âYOU DONâT KNOWâ :</p><figure class="kg-card kg-image-card"><img src="https://lh5.googleusercontent.com/dYg2xz4WE_YufkCHjmE2qDGBr-E7GDd4QGtfODQ8e4O-6fKnOkalCpEmT8_u_LWO28NI9k-9p63b6QqY7fUPD8Ael_-YYoulo_e9un6NPk60lDy4RStDdZ2q29ZkkOBBz5_XFQqX" class="kg-image" alt="Johari Window"/></figure><p>When we superimpose both representations what âI â and âYouâ know or ignore , we end up with a window with 4 distinct window panes :</p><figure class="kg-card kg-image-card"><img src="https://lh6.googleusercontent.com/PeNjKddvKPs4fCpyqc0WtA-V-HaDnfFWfer5YoOexY9pkZJuno0nCWQL7pvsTL7u9hTzDlSWsyYU6xCZTh4V4-xYbZwb-uNmWMT-2nShZR21zjHTxK3ydUjqx4OLB3TladAoj9I0" class="kg-image" alt="Johari Window"/></figure><ul><li>Open area, open self, free area, free self, or 'the arenaâ : what is known by the person about him/herself and is also known by others .</li><li>Blind area, blind self, or ' blindspot ' : what is unknown by the person about him/herself but which others know .</li><li>Hidden area, hidden self, avoided area, avoided self or ' façade ' : what the person knows about him/herself that others do not know .</li><li>Unknown area or unknown self : what is unknown by the person about him/herself and is also unknown by others .</li></ul><h2 id="how-to-increase-open-area-to-find-more-about-yourself"><em>How to increase Open Area to find more about yourself ?</em></h2><figure class="kg-card kg-image-card"><img src="https://lh6.googleusercontent.com/lgqn2eYDOiW_LL5YiFA0Eb5HVc3Wp4IeB5PLmGB9y0cq46K5PZ8bEw_uxAqbBlDzWRgIx9fQ37QzQfSDHVTjw0PONiQmY2_GjUQ6lI40VqSGZzado-LUFniMMMFtX5C2bZm68O2c" class="kg-image" alt="Johari Window"/></figure><p>Increasing Arena can be done through asking for and receiving feedback which decreases what the person doesnât know about you and gives you the ability to explore more about the unknown part , by others' observation (which increases the blind area) , by self-discovery (which increases the hidden area) , or by mutual enlightenment via group experiences and discussion .</p><h2 id="criticism-"><em>Criticism :</em></h2><p>The main criticism of the JoHari Window is not a structural problem (what the model is) but a practical concern (how the model is used). The model explicitly invites the sharing of personal information which can be seen as a red flag by some persons , whatever their ideology is , thus may affect what others see about them and conduct to a misunderstanding .</p><p>On the other hand , sharing too much sensitive information might lead to a negative judgment , for example , someone might talk about a past failure to mention the learned values ; however, the description of the failure could potentially backfire and cause a loss of trust. The success of the JoHari Window exercise depends on the maturity of the receiver and the ability of the facilitator to match the level of trust to an appropriate quality of disclosure . Consideration must also be given to cultures and age , which will have different degrees of sensitivity to feedback.</p>]]></content:encoded></item><item><title><![CDATA[Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour]]></title><description><![CDATA[In this tutorial you will be able to launch your online store in under an hour using the latest technologies : React.js , Strapi and SnipCart.]]></description><link>https://brightshine.io/create-your-ecommerce-website-using-react-js-strapi-snipcart-in-under-an-hour/</link><guid isPermaLink="false">Ghost__Post__5f7b9ac09fa30c001ef096da</guid><category><![CDATA[web_development]]></category><dc:creator><![CDATA[Ihssane Hatim]]></dc:creator><pubDate>Wed, 28 Oct 2020 15:54:00 GMT</pubDate><media:content url="https://res-4.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/snipcart.png" medium="image"/><content:encoded><![CDATA[<img src="https://res-4.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/snipcart.png" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/><p/><p>In this tutorial you will be able to launch your online store in under an hour using the latest technologies : React.js , Strapi and SnipCart .</p><hr><p>Here is the main sections of this tutorial :</p><p>Sections :</p><ol><li><a href="#section1">Build your Backend using Strapi</a></li><li><a href="#section2">Create a React.js app to display products</a></li><li><a href="#section3">Create a SnipCart account & integrate it in your React.js app</a></li></ol><hr><h2 id="-1-build-your-backend-using-strapi-"><em><strong><a href="#section1">#1# Build your Backend using Strapi :</a></strong></em></h2><p/><ol><li><strong>What is Strapi ?</strong></li></ol><p>Strapi is an open source Headless CMS that gives you the ability to create your models quickly and generate the admin panel in a few clicks where you get your whole CMS setup in a few minutes.</p><p>Strapi offers you the possibility to fetch any data you might need via a REST API or GraphQL endpoint. Thatâs Why Strapi !</p><ol><li><strong>Setup Strapi :</strong></li></ol><p>Using Strapi you have the possibility to use MySql , Postgresql , Sqlite or mongodb . In this tutorial I will setup Strapi with a postgresql database .</p><p>So letâs get started !</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://strapi.io/documentation/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Strapi Documentation</div><div class="kg-bookmark-description">The headless CMS developers love.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://strapi.io/assets/favicon-32x32.png" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></div></div><div class="kg-bookmark-thumbnail"><img src="https://strapi.io/documentation/assets/meta.png" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></div></a></figure><p>To install strapi make sure you meet these requirements :</p><blockquote>Node.js : only LTS versions are supported (v12 and v14)</blockquote><blockquote>npm 6.x</blockquote><hr><ol><li>create strapi project and choose postgresql</li></ol><!--kg-card-begin: markdown--><pre><code class="language-bash">npx create-strapi-app my-project </code></pre> <!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://lh4.googleusercontent.com/0-3PdfqGXQm37FScf2mP1p-1qaWVxwaluVXLOvYx6jmM0qiX2ldXPPfp3-CrVPsVOMnOOjfBieqChn70wEs4-OOAMpo6vOfzgNVamtKLKy72ocnxBnrXlnb6uHMe1fzPGeRuPoN0" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><p>At this stage , donât panic , we are going to create our postgresql database , all what you have to do is to create a new heroku app + add a postgresql addon (start free ) :</p><figure class="kg-card kg-image-card"><img src="https://lh4.googleusercontent.com/mNPhxC8tlodZkLyORG6S-GqTXU5VmDZXZip0UQDC-mXsd_zxdvfPCq4dzbatQymIg_c7uHMyCKmTI03IcJDtAM7a3Ej-L2e0DfpBCi6Polvb_C7L4FMTolgr5cF_Jn5vUV7gSwIS" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><p/><p>Now you can go and get your database credentials</p><figure class="kg-card kg-image-card"><img src="https://lh6.googleusercontent.com/Rv9lRISKCUg8s-d3OR-dAymqK0-IAbA6tyagGltBud5mImH-WfPdyPtH1u9WiHVPHJdPjw07D3wHMp_zT8qWxY9nWJJWyUHy9lZXvQADdyFp7wyY7ktRhIDXfbPsCeE3UCTDXqSy" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><p>Then , go back to your terminal and add what you have got :</p><figure class="kg-card kg-image-card"><img src="https://lh4.googleusercontent.com/8dlMYGWWSJMpqWxJoixtEXFoj9fLZ2UJoKbjWIP_5KVS1C4cnlU-NthsoKpHTP9WkxdjqQdHS8YLwaSpDcqZN5znn7_4RXKc7hGGvObXmJoMADatFca068aPdlBMMYU_lZE0L0Da" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><p>If you run into an issue , you can try creating a quickstart strapi project and then replace your database config file (config/database.js) with this :</p><!--kg-card-begin: markdown--><pre><code class="language-js">module.exports = ({ env }) => ({ "defaultConnection": "default", "connections": { "default": { "connector": "bookshelf", "settings": { "client": "postgres", "host": "YOUR_HOST", "port": "5432", "database": "YOUR_DATABASE_NAME", "username": "YOUR_USERNAME", "password": "************************************", "ssl": { "rejectUnauthorized": false } }, "options":{ "pool":{ "min":0, "max":20, "idleTimeoutMillis":30000, "createTimeoutMillis":30000, "acquireTimeoutMillis":30000 } } } } } ); </code></pre> <!--kg-card-end: markdown--><p>additionally run this command to install postgresql package :</p><!--kg-card-begin: markdown--><pre><code class="language-bash">npm install pg --save </code></pre> <!--kg-card-end: markdown--><p>2 . Now , go to your admin dashboard :<a href=" localhost:1337/admin"> localhost:1337/admin</a></p><figure class="kg-card kg-image-card"><img src="https://res-2.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Screenshot-2022-02-23-200547.png" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><p>3 . The next step is to create a content-type which is our product model , in this example I will define a product by : title , description , image , price and quantity .</p><figure class="kg-card kg-image-card"><img src="https://res-4.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/image_2022-02-23_200827.png" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><p>4 . Then , go and add your products :</p><figure class="kg-card kg-image-card"><img src="https://res-4.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Screenshot-2022-02-23-200610.png" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><figure class="kg-card kg-image-card"><img src="https://lh3.googleusercontent.com/rSXw2lF7qMrZ_HtNcmoO3e8exZlAuyJWFTb7aJYhETO2Xb-hN0cViyvivvEdSs6WcCzTyEACc_R75sTWKgMpBuxjocfKZHt0rsDKncTrqO_DVi9Q10wAsNZi2fGgInuBIUrPgnKF" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><p>Everything is settled , the last thing we must do is to turn the productâs route permissions to public : ( count , find , findOne )</p><figure class="kg-card kg-image-card"><img src="https://res-4.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Screenshot-2022-02-23-200618.png" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><figure class="kg-card kg-image-card"><img src="https://res-1.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Screenshot-2022-02-23-200625.png" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><p>5 . Testing our API :</p><figure class="kg-card kg-image-card"><img src="https://res-1.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/Screenshot-2022-02-23-200633.png" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><p>Congrats ! now time to create our react.js app .</p><hr><h2 id="-2-create-a-react-js-app-to-display-products-"><strong><em><a href="#section2">#2# Create a React.js app to display products :</a></em></strong></h2><p/><p>I will be using this project of AlexSegen :</p><p><a href="https://github.com/AlexSegen/react-shopping-cart">https://github.com/AlexSegen/react-shopping-cart</a></p><p>You can create your own design , but if you are going to use the same project as mine , you have to modify some files , to simplify the job I will leave you my own version <a href="https://github.com/ihssanehatim/ecommerce-reactjs">here</a> .</p><p>[change the react_app_host environment variable to your strapi url ]</p><p>Otherwise , all you have to do is to fetch over your API .</p><ol><li><strong>Product context :</strong></li></ol><!--kg-card-begin: markdown--><pre><code class="language-JSX"> import React, { createContext, useState , useEffect } from 'react'; export const ProductsContext = createContext() const ProductsContextProvider = ({children}) => { const [hasError, setErrors] = useState(false); const [products, setProducts] = useState(null); const fetchData = async () => { const res = await fetch(`${process.env.REACT_APP_HOST}/products`); res .json() .then((res) =>{ setProducts(res) console.log("success",res) }) .catch((err) => setErrors("error :",err)); } useEffect(() => { fetchData(); }, []); return ( <> { products && <ProductsContext.Provider value={{products}} > { children } </ProductsContext.Provider> } </> ); } export default ProductsContextProvider; </code></pre> <!--kg-card-end: markdown--><p>2. <strong>Cart Item :</strong></p><!--kg-card-begin: markdown--><pre><code class="language-JSX">import React, { useContext } from 'react'; import { PlusCircleIcon, MinusCircleIcon, TrashIcon } from '../../components/icons' import { CartContext } from '../../contexts/CartContext'; import { formatNumber } from '../../helpers/utils'; const CartItem = ({product}) => { const { increase, decrease, removeProduct } = useContext(CartContext); return ( <div className="row no-gutters py-2"> <div className="col-sm-2 p-2"> <img alt={product.title} src={`${process.env.REACT_APP_HOST}${product.image.url}`} className="img-fluid d-block"/> </div> <div className="col-sm-4 p-2"> <h5 className="mb-1">{product.name}</h5> <p className="mb-1">Price: {formatNumber(product.price)} </p> </div> <div className="col-sm-2 p-2 text-center "> <p className="mb-0">Qty: {product.Qte}</p> </div> <div className="col-sm-4 p-2 text-right"> <button onClick={() => increase(product)} className="btn btn-primary btn-sm mr-2 mb-1"> <PlusCircleIcon width={"20px"}/> </button> { product.quantity > 1 && <button onClick={() => decrease(product)} className="btn btn-danger btn-sm mb-1"> <MinusCircleIcon width={"20px"}/> </button> } { product.quantity === 1 && <button onClick={() => removeProduct(product)} className="btn btn-danger btn-sm mb-1"> <TrashIcon width={"20px"}/> </button> } </div> </div> ); } export default CartItem; </code></pre> <!--kg-card-end: markdown--><p><strong>3. Product item</strong></p><!--kg-card-begin: markdown--><pre><code class="language-JSX"> import React, { useContext } from 'react'; import { Link } from 'react-router-dom'; import { CartContext } from '../../contexts/CartContext'; import { formatNumber } from '../../helpers/utils'; const ProductItem = ({product}) => { const { addProduct, cartItems, increase } = useContext(CartContext); const isInCart = product => { return !!cartItems.find(item => item.id === product.id); } return ( <div className="card card-body"> <img style={{display: "block", margin: "0 auto 10px", maxHeight: "200px"}} className="img-fluid" src={`${process.env.REACT_APP_HOST}${product.image.url}`} alt=""/> <p>{product.title}</p> <h3 className="text-left">{formatNumber(product.price)}</h3> <div className="text-right"> <Link to="/" className="btn btn-link btn-sm mr-2">Details</Link> { isInCart(product) && <button onClick={() => increase(product)} className="btn btn-outline-primary btn-sm">Add more</button> } { !isInCart(product) && <button onClick={() => addProduct(product)} className="btn btn-primary btn-sm">Add to cart</button> } </div> </div> ); } export default ProductItem; </code></pre> <!--kg-card-end: markdown--><p><strong>4. Final View :</strong></p><p>Here is the final view of the website :</p><figure class="kg-card kg-image-card"><img src="https://lh4.googleusercontent.com/cjT7kl1gY6GDmQXUPc0HKc7pen_Wte0YqG4EkbFElpt01lz5yif95FALVqxLGHpWr7-JX3v70q7HlXXZukuVNzyVUy3uBu-YstTrGJW3ZHQI36BDRh9ZnzSZKXpXApcoSjZNWwr4" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><figure class="kg-card kg-image-card"><img src="https://lh6.googleusercontent.com/krMpROwxNZEDA5vcp_C02fueeIGiiLG2R5ooIPHmbazc7Jcj6HZTWxrde8Ug261BkcrhGSd47y_ddwB1eicrKLY8gqTxDD0rd6p3KwiqFzOUesGrzCdFEg7HZhHmWstJXo7E9VKG" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><p>The last step is adding the checkout configurations , but before , you must deploy the strapi project to heroku using the app created in section 1 .</p><hr><h2 id="-3-create-a-snipcart-account-integrate-it-in-your-react-js-app-"><a href="#section3"><strong><em>#3# Create a SnipCart account & integrate it in your React.js app :</em></strong></a></h2><p/><p><em><strong>1.What is Snipcart ?</strong></em></p><p>Snipcart is a third party shopping cart which can be integrated easily with any framework or CMS .</p><p><em><strong>2.Why Snipcart ?</strong></em></p><p>When you want to build a fast e-commerce solution to save time and focus on other features I highly recommend you to use snipcart , you can see the main differences and compare it with other existing third parties in this <a href="https://snipcart.com/compare">link</a> .</p><p><em><strong>3.How to integrate Snipcart in this project ?</strong></em></p><p><strong>#Step 1 :</strong></p><p>First you need to create a snipcart account and turn on the test mode .</p><figure class="kg-card kg-image-card"><img src="https://lh4.googleusercontent.com/uI8zCqeGWuKz7ktKdSfFmXL_DmQAVe6ZYJb___08i66H2QmwkedtgWBYMRaUPRh3UuriU0cXlJ5OgIhXIwgCu4sRb2LuTaf4YjwPpOC2xHw8Ox-e79NxXqcI6DxTTrC7vUVw6EBs" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><p/><p><strong>#Step 2 (Optional) :</strong></p><p>Let snipcart know your allowed domain name so it can be shown while sending invoices âŠ</p><figure class="kg-card kg-image-card"><img src="https://lh5.googleusercontent.com/0O-wIDwK497yuymaCB9QaN4aiwZoaVhlQXJpvUWD80yBNL6IwjmE97GcFGykUleTaS2875-8oSvyserw6CiNQR9FWPc57j9yi2We1rWfILdhLjTM0lUO8n2AnHj07Ga5F43-gpc-" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><p><strong>#Step 3 :</strong></p><p>Check the features you need on snipcart :</p><figure class="kg-card kg-image-card"><img src="https://lh5.googleusercontent.com/HXdKfrAP26vCbBnVHDTB3bhh_9nxGpi0x7_tA93uUdwcC-GVMuSk4QXnvYKFTCsIf5VUX748rJOZ-ViPe-8DpaeKF4_vA9IVQDTY4fV68rtIaSiyp0o0oFQ9qmSWlSAAZvz5zcJB" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><p><strong>#Step 4 :</strong></p><p>We need to get our API key to add it on our index.html page , you can find it on API keys section as shown below :</p><figure class="kg-card kg-image-card"><img src="https://lh3.googleusercontent.com/pdsaum7UllkU9QUud3CTpXo-uFoTkS5f6lq2gw5tOxMmGUhEarv3ngr_bh3v3XC801WIdFuqtjNa5VToJE1rTrMrPYZCzqpY-I1v1vRbBadwQpDKwEvtiUu280yRtXA0euX1PtaD" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><p/><p>After , add this lines into public/index.html in your react app :</p><!--kg-card-begin: markdown--><pre><code class="language-HTML"><script async src="https://cdn.snipcart.com/themes/v3.0.22/default/snipcart.js"></script> <div id="snipcart" data-api-key="YOUR_PUBLIC_KEY" hidden></div> </code></pre> <!--kg-card-end: markdown--><p>to use snipcartâs style :</p><!--kg-card-begin: markdown--><pre><code class="language-HTML"><link rel="preconnect" href="https://app.snipcart.com"> <link rel="preconnect" href="https://cdn.snipcart.com"> <link rel="manifest" href="%PUBLIC_URL%/manifest.json" /> <link rel="stylesheet" href="https://cdn.snipcart.com/themes/v3.0.22/default/snipcart.css" /> <link rel="stylesheet" href="https://cdn.snipcart.com/themes/v3.0.22/default/snipcart.css" /> </code></pre> <!--kg-card-end: markdown--><p><strong>#Step 5 :</strong></p><p>Now back to our react components , all we need is to add snipcart-* classNames and some tags to our product item component so snipcart can process them :</p><!--kg-card-begin: markdown--><pre><code class="language-JS"> import React, { useContext } from 'react'; import { Link } from 'react-router-dom'; import { CartContext } from '../../contexts/CartContext'; import { formatNumber } from '../../helpers/utils'; const ProductItem = ({product}) => { const { addProduct, cartItems, increase } = useContext(CartContext); const isInCart = product => { return !!cartItems.find(item => item.id === product.id); } return ( <div className="card card-body"> <img style={{display: "block", margin: "0 auto 10px", maxHeight: "200px"}} className="img-fluid" src={`${process.env.REACT_APP_HOST}${product.image.url}`} alt=""/> <p>{product.title}</p> <h3 className="text-left">{formatNumber(product.price)}</h3> <div className="text-right"> <Link to="/" className="btn btn-link btn-sm mr-2">Details</Link> { isInCart(product) && <button onClick={() => increase(product)} className="btn btn-outline-primary btn-sm">Add more</button> } { !isInCart(product) && <button type="button" className="snipcart-add-item btn btn-outline-danger btn-sm" data-item-name={product.title} data-item-price={product.price.toFixed(2)} data-item-description={product.description} data-item-min-quantity="0" data-item-max-quantity={product.Qte} data-item-id={product.id} data-item-url="/"> Add to cart </button> } </div> </div> ); } export default ProductItem; </code></pre> <!--kg-card-end: markdown--><p/><p>As you have seen , the changed lines are fewer than you might do when using other solutions .</p><ul><li>className="snipcart-add-itemâ => to add the current item to the shopping cart .</li><li>data-item-price={product.price.toFixed(2)} => set the price .</li><li>data-item-description={product.description} => set the description .</li><li>data-item-min-quantity="0" => set the minimum quantity someone can select while decreasing the number of items (optional) .</li><li>data-item-max-quantity={product.Qte} => the number of items we have on our store (optional) .</li><li>data-item-id={product.id} => we must set the id of each product .</li><li>data-item-url="/" => we must provide the url where the product is displayed .</li></ul><p><strong>#Step 6 :</strong></p><p>Final step is to test our shopping cart using a test payment form before going to live mode :</p><figure class="kg-card kg-image-card"><img src="https://lh4.googleusercontent.com/Sdp13RHUVW7nXUBgyBFjPjFb0wOCpxhvkI1MlNkGe040SZVvTAdvuU00MZ1pBpR8Lhbt4VRg_3R9PsZh1aJO-f-y1NbCYkZNu_xqovRhC8he2pAL1MQ6eTnZH953OAmeudUdkHGf" class="kg-image" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></figure><p/><p>If you made it till the end I want to tell you that you have done a great job and if you need any help or advice you can comment below or contact me . Hope you enjoyed this tutorial and find it helpful !</p><p>Live demo :</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://mystore.caldo.digital"><div class="kg-bookmark-content"><div class="kg-bookmark-title">My Store</div><div class="kg-bookmark-description">Web site created using create-react-app</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://mystore.caldo.digital/logo192.png" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></div></div></a></figure><p>Github repo :</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/ihssanehatim/ecommerce-reactjs"><div class="kg-bookmark-content"><div class="kg-bookmark-title">ihssanehatim/ecommerce-reactjs</div><div class="kg-bookmark-description">In this tutorial you will be able to launch your online store in under an hour using the latest technologies : React.js , Strapi and SnipCart . - ihssanehatim/ecommerce-reactjs</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/favicons/favicon.svg" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"><span class="kg-bookmark-author">ihssanehatim</span><span class="kg-bookmark-publisher">GitHub</span></img></div></div><div class="kg-bookmark-thumbnail"><img src="https://avatars3.githubusercontent.com/u/52088496?s=400&v=4" alt="Create your ecommerce Website using React.js + Strapi + SnipCart in under an hour"/></div></a></figure></hr></hr></hr></hr></hr>]]></content:encoded></item><item><title><![CDATA[How to start painting as a hobby?]]></title><description><![CDATA[Painting and drawing have many benefits such as, improving creativity and imagination, improving memory, releasing stress, it also has a positive effect on the soul and helps to get rid of negative energy. ]]></description><link>https://brightshine.io/how-to-start-painting-as-a-hobby/</link><guid isPermaLink="false">Ghost__Post__5f95f072675f2e001ee5cc02</guid><category><![CDATA[arts]]></category><dc:creator><![CDATA[Majda Abouelhassan]]></dc:creator><pubDate>Sun, 25 Oct 2020 21:43:38 GMT</pubDate><media:content url="https://res-1.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/image2majda.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://res-1.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/image2majda.jpg" alt="How to start painting as a hobby?"/><p/><p>Painting is considered one of the most prestigious fine arts in the world be it from the 17 th century until modern time it gave us paintings like Leonardo Da Vinci's Mona Lisa and renowned figures like Picasso and so on. It involves expressing oneâs inner thoughts and feelings, and itâs also a skill that anyone can learn with practice and training and thus become creative in it.</p><figure class="kg-card kg-image-card"><img src="https://lh4.googleusercontent.com/vv6uWPoaTFyFF07rAL_YhkshzSh1i8i0h7QmlYE48y4RAMbyb7N5jmU4sFznoIyAIpJmydgBz8xdY3nZJrLKdyx7MURY9P2IROe3DONNoFKV6fmbaQnUIApm5EewBjvEh68L5tM" class="kg-image" alt="How to start painting as a hobby?"/></figure><p>Painting and drawing have many benefits such as, improving creativity and imagination, improving memory, releasing stress, it also has a positive effect on the soul and helps to get rid of negative energy. You become more observant of the details, changing your perspective and the way you analyze things .</p><figure class="kg-card kg-image-card"><img src="https://lh3.googleusercontent.com/CPaVj-csIT9imB0AfRtYJBsRO9615VgFCoKEojDb1-XVX7IbWwYelgQu0Ih8-2hie97yZ-DEPJVaSusNvFNTT2Lo2BOs5T-GZ25jSPMJS2gvalzP_uaMN9XSuiKVF-2u6Y92fDg" class="kg-image" alt="How to start painting as a hobby?"/></figure><p>To start drawing, it is better to learn with the least means and tools, with focusing on skill development. For example, you begin by drawing simple shapes, outlines and silhouette, drawing things upside down, then learning the basics of shadow and light because it helps to form objects in a realistic way, and with this you will need to learn the coloring techniques ; dark areas with dark colors to determine the shade and light. And to discover colors, create a color wheel or color palette and learn color theory: combine colors and write the concentration of each color . This will help you in coloring and know the color tones to represent the shapes in a good way .</p><figure class="kg-card kg-image-card"><img src="https://lh3.googleusercontent.com/YHbjmJRS6OKHbz6xLXb3SOHYhsxSPCfhordF2nTLqUO4E4i6GN1VGspHV61py3dcwjW-JNtEsAyCAsxmaKImU4vU-Qn3xpNqPY72H7z-MBiRLN_kPQ1wD0LgsrNwFcnmHasPdZ0" class="kg-image" alt="How to start painting as a hobby?"/></figure><p>Here are some tips to improve your drawing skills:</p><ul><li>You must allocate time for training and drawing a lot to get impressive results. It is not important to draw for long hours, but it is good to draw 10 to 15 minutes every day to acquire a new skill.</li><li>Read about art schools and drawing styles</li><li>Visual feeding is one of the most important tools of the painter and designer to develop ideas through saturation with visual arts and their perception, analyzing them and then drawing inspiration for new ideas by watching and following the work of professional artists and those with great specialization in any field, inspiring some new ideas from their work, or similar ideas to them, but in a different way.</li></ul><p>Finally, you should always stay motivated about what you are doing and if you donât succeed at the first time or even twice try again !</p><figure class="kg-card kg-image-card"><img src="https://lh6.googleusercontent.com/60wGKlu4GNcZ7gBQHLzhUFQd7lQl7LAcYhaoLW0RswSCdC0ykUXjsUYVQnFfcCXTc9IbwmHymopit2K3Rb6GQg-DmASV_mVNulUYlEiZHHICZ7XIEGaPmdsteAwryQ" class="kg-image" alt="How to start painting as a hobby?"/></figure>]]></content:encoded></item><item><title><![CDATA[Whatâs in the box?]]></title><description><![CDATA[Thatâs not the title of the movie that we are going to review, but rather the memorable ending line and the unsolved question from the infamous movie âSevenâ .]]></description><link>https://brightshine.io/whats-in-the-box/</link><guid isPermaLink="false">Ghost__Post__5f85d355d9fb5f001e11d336</guid><category><![CDATA[movie_reviews]]></category><dc:creator><![CDATA[Hiba Ennamiri]]></dc:creator><pubDate>Tue, 13 Oct 2020 16:21:22 GMT</pubDate><media:content url="https://res-2.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/imagefilm.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://res-2.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/imagefilm.jpg" alt="Whatâs in the box?"/><p/><p>Thatâs not the title of the movie that we are going to review, but rather the memorable ending line and the unsolved question from the infamous movie âSevenâ .</p><p>Seven is a thriller movie that was released 1995 directed by David Fincher and stars Morgan Freeman, Kevin Spacey, Brad Pitt and Gwenth Paltrow, and if you arenât familiar with âthe divine comedy:Infernoâ of Dante Alligiri before the movie, you will be after watching it.</p><p>While inferno âhellâ to Dante is a dark hot place,hell to Fincher is a cloudy rainy unknown american city, where we first see ,soon to retire, detective William Somerset(Morgan Freeman), than we met his young, new to job partner, detective David Mills(Brad Pitt), William is old, wise fellow who have seen it all and wants a way out, while David is young, reckless and wants a way in this new city to him and his new office.</p><p>In their investigation of several murders, the two detectives discovered a pattern, that doesnât only shows that they are dealing with a serial killer but a one whose murders are inspired by the seven deadly sins, meanwhile Davidâs wife Tracy forms a good friendship with William and trust him with decisions she canât yet make especially that she hates the city that they are all living in now, by the end of the movie David, Tracy and William has completed the seven sins puzzle that John Doe(Kevin Spacey)has started.</p><p>Though the movie was just the second experience of David Fincher as a director, it was well perceived by both the audience and the crowd and got four awards out of nine nominations.</p>]]></content:encoded></item><item><title><![CDATA[Answering top 5 most googled question about cats]]></title><description><![CDATA[At some point and if you're a cat owner, youâve already had a thought wondering about some facts that concern your pet . We hope you can find the answer to one of your questions.]]></description><link>https://brightshine.io/answered_questions/</link><guid isPermaLink="false">Ghost__Post__5f3c01024780d9001e8afe64</guid><category><![CDATA[cats]]></category><dc:creator><![CDATA[Oumaima Baantar]]></dc:creator><pubDate>Thu, 20 Aug 2020 18:24:00 GMT</pubDate><media:content url="https://res-5.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/image2.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://res-5.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/image2.jpg" alt="Answering top 5 most googled question about cats"/><p/><p>At some point and if you're a cat owner, youâve already had a thought wondering about some facts that concern your pet . We hope you can find the answer to one of your questions.</p><p><strong>1.<strong><strong>How long do cats live ?</strong></strong></strong></p><p>The average lifespan of a cat depends on its environment , health conditions , maintenance and if the cat is spayed or neutered . for an indoor cat the average is 14 years meanwhile for outdoor cats itâs only 7-10 years .</p><figure class="kg-card kg-image-card"><img src="https://lh5.googleusercontent.com/L2Vc6bR7OhaNBgwD7lYSEN7f3wlJMEjAM2y8umYDrq3fl1s9bvFjuiHP1Q0iYXUZ8Ug5KPnj0HfgWfaKcFT9nRIbq6_zChX5qMbkeMNI7yNHlxLJkOGw6MNQkyykVTX58cyWFug27Of82l9zVQ" class="kg-image" alt="Answering top 5 most googled question about cats"/></figure><p/><p><strong>2.<strong><strong>Why do cats knead ?</strong></strong></strong></p><p>When I first got my first cat , it was kneading every time it wanted to sleep or just lay down. Apparently, Kneading is a common behavior seen in cats, where the feline pushes in and out with its front paws or even all its paws, alternating between left and right.</p><p>This behavior is a leftover from the kitten hood , when the kitten will knead around the motherâs teat to promote the flow of milk .</p><figure class="kg-card kg-image-card"><img src="https://res-4.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/4fff1bacaf3a4d03c7ef12e51cd68595.gif" class="kg-image" alt="Answering top 5 most googled question about cats"/></figure><p><strong>3.<strong><strong>Why do cats sleep so much?</strong></strong></strong></p><p>Cats sleep 15 hours per day , which seems a lot for us . Cats are more active around twilight ( duck and down period ) because that is the perfect time for them to hunt as felines . hunting require energy as well as he can be the hunter or the prey , and this instinct is stays even if theyâre domestic cats .</p><figure class="kg-card kg-image-card"><img src="https://lh6.googleusercontent.com/ijo-0edxoJxdZPiASjvnjZZJ4TGSUb2xDNp5fLRtQEW-gjT9wi0xVA8M22wbqF4XZVOfBkdkbY1sUnPDLzdZXe1DNRqoOaYi0yUAiP0ot6F5o4lUlYdlmYtGQUY8qtg5N_zpjj1OXc8aVTsu8w" class="kg-image" alt="Answering top 5 most googled question about cats"/></figure><p><strong>4.Why do cats have whiskers?</strong></p><p>Whiskers are rougher and thicker than regular hair and have roots that are deeper .they are in fact more sensitive than regular hair , because the follicles from which they originate are jam packed with blood vessels and nerves. So these whiskers are the equivalent of fingers for human , so the cat can feel around it by its face .</p><p>Although whiskers are called âtactile hairsâ,they donât actually feel anything."</p><p><strong>5.H<strong><strong>ow long is a cat stays pregnant ?</strong></strong></strong></p><p>Just like human cats have periods of peak fertility , which is called being in a season or the heat . cats pregnancy normally last between 58-67 days .</p>]]></content:encoded></item><item><title><![CDATA[Why should you use the JAMStack ?]]></title><description><![CDATA[The Jamstack is not about specific technologies. Itâs a new way of building websites and apps that delivers better performance, higher security, lower cost of scaling, and a better developer experience.]]></description><link>https://brightshine.io/why-should-you-use-the-jamstack/</link><guid isPermaLink="false">Ghost__Post__5f3c3c3f0e4553001e6f0829</guid><category><![CDATA[web_development]]></category><dc:creator><![CDATA[Ihssane Hatim]]></dc:creator><pubDate>Wed, 19 Aug 2020 16:21:25 GMT</pubDate><media:content url="https://res-2.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/pasted-image-0.png" medium="image"/><content:encoded><![CDATA[<blockquote>The Jamstack is not about specific technologies. Itâs a new way of building websites and apps that delivers better performance, higher security, lower cost of scaling, and a better developer experience.</blockquote><figure class="kg-card kg-image-card"><img src="https://res-3.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/1-dzhT92LXV-X99dDRi5vzOg.jpg" class="kg-image" alt="Why should you use the JAMStack ?"/></figure><img src="https://res-2.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/pasted-image-0.png" alt="Why should you use the JAMStack ?"/><p>When I wanted to start my own blog , I was looking for a quick and fast solution to adopt , because my point was to publish and spread the information not to build a new from scratch website as a Web developer , and to make use of the existing microservices and APIs , suddenly I found out one world that changed my mindset about web programming : the "JAMSTACK" .</p><p>As a fan of new ideas I liked the way JAMSTACK works and to be more clear here are some of the reasons why I adopted JAMSTACK : (according to the <a href="https://jamstack.org/">officia</a>l website and my own experience )</p><h2 id="let-s-remove-the-backend-"><em><strong>Letâs remove the backend !</strong></em></h2><p/><p>When your website has a backend , it becomes slower because it needs to load your data from somewhere without forgetting the 5xx errors , this could also mean hours of debugging and the cost behind , when the JAMSTACK has another philosophy .</p><figure class="kg-card kg-image-card"><img src="https://lh3.googleusercontent.com/yAoBaxIZwl0L315aHKvw6OIhJebz3nhD2znOGMrCD2h2mnQxvOTBM58DyfLOSTKjxM_04qF8ooEQSiISrtYu_kpt381OlgQI0ODf--EwJ3jD4TF91ya4UzUgLYQGH-n5N0gcMRKO" class="kg-image" alt="Why should you use the JAMStack ?"/></figure><p>The philosophy is : instead of rendering the HTML on a backend on every request, you can build the HTML once and then serve it statically by :</p><h3 id="1-decoupling-the-frontend-from-the-backend"><strong>1.Decoupling the frontend from the backend</strong></h3><p>Unlike the large legacy apps, Jamstack projects neatly separate the frontend pages and UI from the backend apps and databases. Freed from backend servers, the frontend can then be deployed globally, directly to a CDN.</p><figure class="kg-card kg-image-card"><img src="https://lh6.googleusercontent.com/EQfUrrpVzu88IjExQcBSvMT4hShhNXzTfAgr2O7Zw-X4j4g1y-esJ3OHF48-9CM4nGG0-f6Vm2aqMD_JL8duwikfLf0FlC50hFz98JX2x9AQ-YPaoOebuICPAdqAQ1iEXYm_-2P5" class="kg-image" alt="Why should you use the JAMStack ?"/></figure><h3 id="2-prebuilding-all-pages-for-speed">2.Prebuilding all pages for speed</h3><p>Before deployment, the entire front end is prebuilt into highly optimized static pages and assets. This happens in a build process (before being deployed / hosted).</p><h3 id="3-dynamic-content-via-apis"><strong>3.Dynamic content via APIs</strong></h3><p>The global front end uses Javascript and APIs to talk to backend services, allowing pages to be enhanced and personalized.</p><figure class="kg-card kg-image-card"><img src="https://lh5.googleusercontent.com/addHQpMaiV3oq8XfucTxON79ChWi3_MWDKWSVogCVRJ_2Ct3pJ4rHkhbJH_W51kGK_zj-DUlXXzo2zc7o0Dodde28JcDJQf4DyHWbGKmU7MK_anwnC0sjivM8XwueuPUfPk-1_wG" class="kg-image" alt="Why should you use the JAMStack ?"/></figure><p/><p><strong>To sum up ,with JAMSTACK the websites are Deployed globally , Webpages prerendered for speed , and the APIs & microservices take place to allow for more modular development where we can take advantage of the huge ecosystem of third party tools to provide website functionality.</strong></p><p><strong>If you want to explore more about JAMSTACK I highly recommend watching this JAMSTACK virtual conference (27 mai 2020) :</strong></p><figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/w9yrrQBBKos?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""/></figure><p><strong>Hope you enjoyed my mindset though !</strong></p>]]></content:encoded></item><item><title><![CDATA[The Godfather]]></title><description><![CDATA[That old gold movie, that you canât help but watch over and over in order to memorize some wise, cool lines such as âIâll make him an offer he canât refuseâ.]]></description><link>https://brightshine.io/the-godfather/</link><guid isPermaLink="false">Ghost__Post__5f3ae3b1ffa8cb001eb6dfad</guid><category><![CDATA[movie_reviews]]></category><dc:creator><![CDATA[Hiba Ennamiri]]></dc:creator><pubDate>Mon, 17 Aug 2020 20:12:41 GMT</pubDate><media:content url="https://res-3.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/1-deOcH6lCTN3KSXZOFcEITw.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://res-3.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/1-deOcH6lCTN3KSXZOFcEITw.jpg" alt="The Godfather"/><p/><p>That old gold movie, that you canât help but watch over and over in order to memorize some wise, cool lines such as âIâll make him an offer he canât refuseâ.</p><p>The movie was released in 1972 and was based on a crime novel with the same title written by Mario Brazu and directed by Francis Ford Coppola and stars Marlon Brando,Al Pacino among many others.</p><p>Weddings are the triumphal end of many dramas, yet this three hours drama starts with a wedding, where we met the family Corleone a sicilian family that rules New York, we met the head of the family Don Vito(Marlon Brando) Corleone also known as the âGodfatherâ and we met his just come back from the second world war youngest son Michael Corleone, Michael who hates his family business, exploit his sister reception ceremony to introduce his girlfriend to the rest of the family.</p><p>After many complications with the other four ruling families, Don Vito sends Micheal to Sicily in order to keep him alive and safe. In Sicily Michael loved and married Appolonia and when she died in a bomb explosion planted by Michealâs trusted bodyguard, the high values Micheal died too, and new Micheal come back to New York, precede in taking his and his family vengeance ,took Don Vitoâs place after his death and became, Don Micheal, the new âGodfatherâ.</p><p>After being nominated for eleven Oscars awards, the movie won three of them; best picture, best adapted screenplay and best actor, which Marlon Brando refused.</p>]]></content:encoded></item><item><title><![CDATA[How having a cat improves your life]]></title><description><![CDATA[Owning a cat contributes to making your life better. They can distract the negative thoughts at the end of a bad day by focusing on them, playing, feeding, petting and cuddling with these furry creatures. ]]></description><link>https://brightshine.io/cats/</link><guid isPermaLink="false">Ghost__Post__5f3ae082ffa8cb001eb6df9c</guid><category><![CDATA[cats]]></category><dc:creator><![CDATA[Oumaima Baantar]]></dc:creator><pubDate>Mon, 17 Aug 2020 20:02:58 GMT</pubDate><media:content url="https://res-1.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/image1.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://res-1.cloudinary.com/hwblav7k6/image/upload/q_auto/v1/ghost-blog-images/image1.jpg" alt="How having a cat improves your life"/><p><strong>1.Good for your mental health</strong></p><p>Owning a cat contributes to making your life better. They can distract the negative thoughts at the end of a bad day by focusing on them, playing, feeding, petting and cuddling with these furry creatures. Cats also give unconditional love. Theyâre routine is a source of establishing yourself somehow. Having a cat around lowers your anxiety, eases the feeling of loneliness, helps you relax and sleep at night.</p><figure class="kg-card kg-image-card"><img src="https://lh5.googleusercontent.com/vmzoDEuYFtZH6jLXLPg9v7MVj6rcGoffVQtLg1u0CXAMTN7OGolINo3WeUtbKwhXfEJBoe9czu19-j2ksisgYSauri9hGrYitPRkE2JBqEsifPJtz5nmRxmTOZwPJC_6ZtnH64A" class="kg-image" alt="How having a cat improves your life"/></figure><p><strong>2.Theyâll make you develop new habits :</strong></p><p>As a cat owner, I can tell the difference of habits I have grown. You will develop a cat attitude such as being alerted, chance seeker, attentive and sense of observation. However, you may also become needy, sassy and hungry most of the time.</p><p><strong>3.Pest free house :</strong></p><p>Cats are gifted with the hunting instinct, even if they are domestic. Feeding your cat wonât stop it from catching a prey that they may or may not eat. They can even bring it to the owner as a gift. I hope you appreciate it!</p><p><strong>4.Perfect pet for an apartment:</strong></p><p>Cats are allowed in apartments because they are quiet. These cute creatures are the most intelligent house pets, they learn quickly and take care of themselves most of the time by grooming, and that saves you time and energy.</p><p><strong>5.They are the cutest creatures :</strong></p><p>Just look at this!</p><figure class="kg-card kg-image-card"><img src="https://lh3.googleusercontent.com/NScWPi3GAX2WVgYSJ_ypdl2TAIR_XHHRM-SGumXP1UVIvKy1y1LsgK7Q5ad9IbsH4nIRFfGlu5VNtoF0ZitIMLTNPa_2A6zjSLuc3UZX2czel_W7cYLe69KIN64CXmK42f-HEGU" class="kg-image" alt="How having a cat improves your life"/></figure>]]></content:encoded></item></channel></rss>