From: Daniel Jr Date: Sat, 28 Sep 2024 15:52:08 +0000 (-0300) Subject: first version X-Git-Url: https://git.danielmrcl.dev/?a=commitdiff_plain;h=0325c0cf2faa61d4a701d89440c6dd4ff5fffac6;p=danielmrcl.dev.git first version Signed-off-by: Daniel Jr --- diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..346fa6f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "themes/cactus"] + path = themes/cactus + url = https://github.com/monkeyWzr/hugo-theme-cactus.git diff --git a/.hugo_build.lock b/.hugo_build.lock new file mode 100644 index 0000000..e69de29 diff --git a/content/posts/2021-05-08-solid-with-examples.md b/content/posts/2021-05-08-solid-with-examples.md new file mode 100644 index 0000000..dca7238 --- /dev/null +++ b/content/posts/2021-05-08-solid-with-examples.md @@ -0,0 +1,211 @@ +--- +title: S.O.L.I.D. with examples +date: 2021-05-08 16:56:54 +categories: kotlin, design-pattern +keywords: +--- + +### S)ingle Responsibility Principle +*A class should have one, and only one, reason to change.* +A class should have a single responsibility within the software. + +Bad Example: +```kotlin +class User { + fun save() { + // Logic to save user to the database + } + + fun sendEmail() { + // Logic to send email to the user + } +} +``` +Good Example: +```kotlin +class User { + fun save() { + // Logic to save user to the database + } +} + +class EmailService { + fun sendEmail(user: User) { + // Logic to send email to the user + } +} +``` + +### O)pen Closed Principle +*You should be able to extend a class's behavior without modifying it.* +Objects should be open for extension but closed for modification. + +Bad Example: +```kotlin +class Rectangle(val width: Double, val height: Double) { + fun area(): Double { + return width * height + } +} + +class Circle(val radius: Double) { + fun area(): Double { + return Math.PI * radius * radius + } +} +``` +Good Example: +```kotlin +interface Shape { + fun area(): Double +} + +class Rectangle(val width: Double, val height: Double) : Shape { + override fun area(): Double { + return width * height + } +} + +class Circle(val radius: Double) : Shape { + override fun area(): Double { + return Math.PI * radius * radius + } +} +``` + +### L)iskov Substitution Principle +*Derived classes should be substitutable for their base classes.* +The Liskov Substitution Principle was introduced by Barbara Liskov in 1987: +"If for every object o1 of type S there is an object o2 of type T such that for all programs P, the behavior of P is unchanged when o1 is substituted by o2, then S is a subtype of T." + +Bad Example: +```kotlin +open class Bird { + open fun fly() { + println("Flying") + } +} + +class Ostrich : Bird() { + override fun fly() { + throw Exception("Ostriches can't fly") + } +} +``` +Good Example: +```kotlin +open class Bird { + open fun makeSound() { + println("Chirp") + } +} + +class Sparrow : Bird() { + override fun makeSound() { + println("Chirp chirp") + } +} + +class Ostrich : Bird() { + override fun makeSound() { + println("Hiss") + } +} +``` + +### I)nterface Segregation Principle +*Make interfaces that are client-specific.* +A class should not be forced to implement interfaces and methods that will not be used. + +Bad Example: +```kotlin +interface Machine { + fun print() + fun scan() + fun fax() +} + +class Printer : Machine { + override fun print() { + // Logic to print + } + + override fun scan() { + throw UnsupportedOperationException("Printer cannot scan") + } + + override fun fax() { + throw UnsupportedOperationException("Printer cannot fax") + } +} +``` +Good Example: +```kotlin +interface Printer { + fun print() +} + +interface Scanner { + fun scan() +} + +class SimplePrinter : Printer { + override fun print() { + // Logic to print + } +} + +class MultiFunctionPrinter : Printer, Scanner { + override fun print() { + // Logic to print + } + + override fun scan() { + // Logic to scan + } +} +``` + +### D)ependency Inversion Principle +*Depend on abstractions, not on concretions.* +A high-level module should not depend on low-level modules; both should depend on abstractions. + +Bad Example: +```kotlin +class EmailService { + fun sendEmail(message: String) { + // Logic to send email + } +} + +class Notification { + private val emailService = EmailService() + + fun notify(message: String) { + emailService.sendEmail(message) + } +} +``` +Good Example: +```kotlin +interface MessageSender { + fun send(message: String) +} + +class EmailService : MessageSender { + override fun send(message: String) { + // Logic to send email + } +} + +class Notification(private val sender: MessageSender) { + fun notify(message: String) { + sender.send(message) + } +} + +// Usage +val emailService = EmailService() +val notification = Notification(emailService) +notification.notify("Hello, World!") +``` diff --git a/content/posts/2023-11-10-solidity-web3-js.md b/content/posts/2023-11-10-solidity-web3-js.md new file mode 100644 index 0000000..aa1da35 --- /dev/null +++ b/content/posts/2023-11-10-solidity-web3-js.md @@ -0,0 +1,123 @@ +--- +title: Blockchain Basics +date: 2023-11-10 12:21:32 +categories: web3 +keywords: solidity, js +--- + +[From Here](https://github.com/smartcontractkit/full-blockchain-solidity-course-js) + +Smart contracts are an agreement, contract or set of instructions that executes in a decentralized way without the need for a centralized or third party intermediary. + +**Blockchain Oracle**: Any device that interacts with the off-chain world to provide external data or computation to smart contracts. +**Hybrid Smart Contracts**: On-Chain + Off-Chain Agreements. + +Smart Contracts do trust minimized agreements that cannot be broke. + +- Cannot be altered (immutable) +- Automatically executes +- Everyone sees the terms of agreement + +UNBREAKABLE AGREEMENTS +and much more. + +1. Decentralized +2. Transparency +3. Speed +4. Security +5. Remove counterpart risk +6. True trust minimized agreements + +DeFi → Decentralized Finances +DAO → Decentralized Autonomous Organizations +NFT → Not Fungible Token + +### Your First Transaction + +1. Set up a wallet with [Metamask](https://metamask.io) +2. We can see details with the [Etherscan](https://etherscan.io) +- Mnemonic → can access all of your accounts. +- Private Key → can access 1 of your accounts. +- Public Key → can access nothing. +3. Connect and get ETH for test in [Faucets](https://faucets.chain.link) + +### Gas I: Introduction to Gas + +When we make transactions, the miners or validators make a small fee related to the gas. +**Gas**: A unit of computational measurement. The more complex your transaction is the more gas you have to pay. + +Transaction Fee = Gas Price * How much Gas used. + +### How Blockchain Works + +**Block**: A block of data encrypted in some hash (e. g. Sha256) with code (named nonce) to validate the block and hash validated that must start with 4 zeros. +**Blockchain**: Each block has an prev hash that refer to previous block in the chain. +Genesis Block: The first block in a blockchain. + +When a block is edited, broke all the next blocks. Then all the blocks need to be mine again. +After mine all this blocks, this blockchain is different from all the others in the decentralized net so it is discarted. + +**Mining**: The process of finding the solution to the blockchain problem. +In our example, the problem was to find a hash that starts with four zeros. +Nodes get paid for mining blocks. + +**Private Key**: Key used to sign an transaction. +**Public Key**: Key used to validate an signed transaction. + +### Gas II: Block Rewards & EIP 1550 + +**Base Fee**: Minimum gas price to send your transaction. + +**EIP (Etherium Improvement Proposals)**: The comon way of requesting changes to etherium network. + +### High-level blockchain fundamentals. + +**Node**: A single instance in a decentralized network. + +Anybody can run an Etherium node easily. +Blockchain nodes keep lists the transactions that ocur. + +**Consensus** is the mechanism used to agree on the state of a blockchain. And it can be broke in two parts: +1. Chain Selection Algorithm: using Nakamoto Consensus, the longest chain is selected. +2. Sybil Resistance Mechanism: is a blockchain ability to defend against users creating a large number of pseudo anonymous identities to gain a disproportionately advantageous influence over the set system. + - Proof of Work: the problem that need to be solved. It can be more hard and expensive depending to block time need to be. The gas fee is paid to the miner that resolve the transaction. + - Proof of Stake: it randomly choose and validator in the network. the gas fee is paid for validator, not miners. + +**Block Confirmations**: the number of confirmations is the number of blocks added on after our transaction. + +Sharding: sharded blockchain is an blockchain of blockchains. Is a main chain that is going to coordinate everything. Can be an solutions to scalability problem when an chain has to much transactions. +Layer 1: Base layer implementation. +Layer 2: Any application build on top of a layer 1. +Roll Ups: chains in the layer 2 that send (roll up) their transactions to layer 1. + +Attacks: +- **Sybil Attack**: when a user creates a whole bunch of pseudo anonymous account to try to influence the network. +- **51% Attack**: when a user, or a group of users, creates an chain that is longer of all others. + +### Welcome to Remix! Simple Storage + +Solidity is the primary smart contract coding language. + +Contract is an keyword to define the start of an contract in code. + +Coding an contract: +1. Goto [Remix Etherium IDE](remix.etherium.org) +2. Init an project with an Solidity (`.sol`) file. +3. Set solidity version. Ex.: + - `pragma solidity 0.8.7;` to set 0.8.7 version. + - `pragma solidity ^0.8.7;` to set an version above 0.8.7. + - `pragma solidity >=0.8.7 < 0.9.0;` to set an version between 0.8.7 and 0.9. +4. Put spdx licence on top of code. +5. Define an contract with the keyword `contract` in the code. Contract in solidity is similar with +Classes like in any other object-oriented languages. Ex.: + - `contract SimpleStorage {}`. create an contract named SimpleStorage with no one content. + +Solidity Types: + +The concept of “undefined” or “null” values does not exist in Solidity, but newly declared +variables always have a default value dependent on its type. + +> Any time you change something on-chain, including making a new contract, it happens in a +> transaction. + + diff --git a/data/projects.json b/data/projects.json new file mode 100644 index 0000000..f416650 --- /dev/null +++ b/data/projects.json @@ -0,0 +1,19 @@ +{ + "list": [ + { + "name": "ArtDigital", + "url": "https://github.com/danielmrcl/art-digital", + "desc": "ArtDigital is an e-commerce that aims to simplify the dissemination and sale of products in the craft sector. #JavaEE #JSP #WebServlets" + }, + { + "name": "Meeting Rooms", + "url": "https://github.com/danielmrcl/meeting-rooms", + "desc": "SPA written in Angular to manage meeting rooms access. #Angular #SpringBoot" + }, + { + "name": "EncURL", + "url": "https://gitlab.com/danielmrcl/encurl-web", + "desc": "Link shortener with some extra features. #VueJS #CSharp" + } + ] +} diff --git a/hugo.toml b/hugo.toml index 7e568b8..489563c 100644 --- a/hugo.toml +++ b/hugo.toml @@ -1,3 +1,72 @@ -baseURL = 'https://example.org/' -languageCode = 'en-us' -title = 'My New Hugo Site' +baseURL = "https://danielmrcl.dev" +languageCode = "en-us" +title = "Daniel Jr | Backend Developer" +theme = "cactus" +copyright = "Me" + +# summaryLength = 2 + +# Main menu which appears below site header. +[[menu.main]] +name = "Home" +url = "/" +weight = 1 + +[[menu.main]] +name = "Writings" +url = "/posts" +weight = 2 +# +#[[menu.main]] +#name = "Tags" +#url = "/tags" +#weight = 3 + +#[[menu.main]] +#name = "About" +#url = "/about" +#weight = 4 + +[markup] + [markup.tableOfContents] + endLevel = 4 + ordered = false + startLevel = 2 + [markup.highlight] + codeFences = true + guessSyntax = false + hl_Lines = "" + lineNoStart = 1 + lineNos = true + lineNumbersInTable = false + noClasses = true + style = "gruvbox" + tabWidth = 4 + +[params] + colortheme = "dark" + rss = false + tocInline = true + logo = "image.jpg" + description = "Since 2021, I've been developing Java 8+ applications using Spring and PostgreSQL in a microservices architecture for critical, efficient and scalable systems. With a focus on code quality, architecture and scalability, I have strong foundation of programming, design and architecture. I am passionate about programming and constantly learn new technologies and paradigms." + mainSection = "posts" + postsOnHomePage = 5 + tagsOverview = true + showProjectsList = true + + # Post page settings + show_updated = true + showReadTime = false + + [params.comments] + enabled = false + + [[params.social]] + name = "github" + link = "https://github.com/danielmrcl" + [[params.social]] + name = "linkedin" + link = "https://www.linkedin.com/in/danielmrcl/" + [[params.social]] + name = "email" + link = "dan@danielmrcl.dev" diff --git a/public/categories/index.html b/public/categories/index.html new file mode 100644 index 0000000..4e03e60 --- /dev/null +++ b/public/categories/index.html @@ -0,0 +1,130 @@ + + + + + + + + + + + Daniel Jr | Backend Developer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + +
+ + +
+ + + + + + diff --git a/public/categories/index.xml b/public/categories/index.xml new file mode 100644 index 0000000..f711978 --- /dev/null +++ b/public/categories/index.xml @@ -0,0 +1,27 @@ + + + + Categories on Daniel Jr | Backend Developer + http://localhost:1313/categories/ + Recent content in Categories on Daniel Jr | Backend Developer + Hugo + en-us + Me + Fri, 10 Nov 2023 12:21:32 +0000 + + + Web3 + http://localhost:1313/categories/web3/ + Fri, 10 Nov 2023 12:21:32 +0000 + http://localhost:1313/categories/web3/ + + + + Kotlin, Design-Pattern + http://localhost:1313/categories/kotlin-design-pattern/ + Sat, 08 May 2021 16:56:54 +0000 + http://localhost:1313/categories/kotlin-design-pattern/ + + + + diff --git a/public/categories/kotlin-design-pattern/index.html b/public/categories/kotlin-design-pattern/index.html new file mode 100644 index 0000000..d1d329f --- /dev/null +++ b/public/categories/kotlin-design-pattern/index.html @@ -0,0 +1,130 @@ + + + + + + + + + + + Daniel Jr | Backend Developer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + +
+ + +
+ + +
+ + + + + + diff --git a/public/categories/kotlin-design-pattern/index.xml b/public/categories/kotlin-design-pattern/index.xml new file mode 100644 index 0000000..09af845 --- /dev/null +++ b/public/categories/kotlin-design-pattern/index.xml @@ -0,0 +1,20 @@ + + + + Kotlin, Design-Pattern on Daniel Jr | Backend Developer + http://localhost:1313/categories/kotlin-design-pattern/ + Recent content in Kotlin, Design-Pattern on Daniel Jr | Backend Developer + Hugo + en-us + Me + Sat, 08 May 2021 16:56:54 +0000 + + + S.O.L.I.D. with examples + http://localhost:1313/posts/2021-05-08-solid-with-examples/ + Sat, 08 May 2021 16:56:54 +0000 + http://localhost:1313/posts/2021-05-08-solid-with-examples/ + <h3 id="single-responsibility-principle">S)ingle Responsibility Principle</h3> <p><em>A class should have one, and only one, reason to change.</em> A class should have a single responsibility within the software.</p> <p>Bad Example:</p> <div class="highlight"><pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-kotlin" data-lang="kotlin"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1</span><span><span style="color:#fe8019">class</span> User { </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2</span><span> <span style="color:#fe8019">fun</span> <span style="color:#fabd2f">save</span>() { </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">3</span><span> <span style="color:#928374;font-style:italic">// Logic to save user to the database </span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">4</span><span><span style="color:#928374;font-style:italic"></span> } </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">5</span><span> </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">6</span><span> <span style="color:#fe8019">fun</span> <span style="color:#fabd2f">sendEmail</span>() { </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">7</span><span> <span style="color:#928374;font-style:italic">// Logic to send email to the user </span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">8</span><span><span style="color:#928374;font-style:italic"></span> } </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">9</span><span>} </span></span></code></pre></div><p>Good Example:</p> + + + diff --git a/public/categories/kotlin-design-pattern/page/1/index.html b/public/categories/kotlin-design-pattern/page/1/index.html new file mode 100644 index 0000000..efb791e --- /dev/null +++ b/public/categories/kotlin-design-pattern/page/1/index.html @@ -0,0 +1,10 @@ + + + + http://localhost:1313/categories/kotlin-design-pattern/ + + + + + + diff --git a/public/categories/web3/index.html b/public/categories/web3/index.html new file mode 100644 index 0000000..f2bd8d3 --- /dev/null +++ b/public/categories/web3/index.html @@ -0,0 +1,130 @@ + + + + + + + + + + + Daniel Jr | Backend Developer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + +
+ + +
+ + +
+ + + + + + diff --git a/public/categories/web3/index.xml b/public/categories/web3/index.xml new file mode 100644 index 0000000..cf51dda --- /dev/null +++ b/public/categories/web3/index.xml @@ -0,0 +1,20 @@ + + + + Web3 on Daniel Jr | Backend Developer + http://localhost:1313/categories/web3/ + Recent content in Web3 on Daniel Jr | Backend Developer + Hugo + en-us + Me + Fri, 10 Nov 2023 12:21:32 +0000 + + + Blockchain Basics + http://localhost:1313/posts/2023-11-10-solidity-web3-js/ + Fri, 10 Nov 2023 12:21:32 +0000 + http://localhost:1313/posts/2023-11-10-solidity-web3-js/ + <p><a href="https://github.com/smartcontractkit/full-blockchain-solidity-course-js">From Here</a></p> <p>Smart contracts are an agreement, contract or set of instructions that executes in a decentralized way without the need for a centralized or third party intermediary.</p> <p><strong>Blockchain Oracle</strong>: Any device that interacts with the off-chain world to provide external data or computation to smart contracts. <strong>Hybrid Smart Contracts</strong>: On-Chain + Off-Chain Agreements.</p> <p>Smart Contracts do trust minimized agreements that cannot be broke.</p> <ul> <li>Cannot be altered (immutable)</li> <li>Automatically executes</li> <li>Everyone sees the terms of agreement</li> </ul> <p>UNBREAKABLE AGREEMENTS and much more.</p> + + + diff --git a/public/categories/web3/page/1/index.html b/public/categories/web3/page/1/index.html new file mode 100644 index 0000000..0b28dab --- /dev/null +++ b/public/categories/web3/page/1/index.html @@ -0,0 +1,10 @@ + + + + http://localhost:1313/categories/web3/ + + + + + + diff --git a/public/css/styles.94f653e9e151e28067a7c5dbbc4600cbd5a3c721e79faaf971e523c40f3b249b8e4f20bb57810dfffa8d559ca5c140fd56eb4cd9c0853113ad08e66afdb08bdd.css b/public/css/styles.94f653e9e151e28067a7c5dbbc4600cbd5a3c721e79faaf971e523c40f3b249b8e4f20bb57810dfffa8d559ca5c140fd56eb4cd9c0853113ad08e66afdb08bdd.css new file mode 100644 index 0000000..2324144 --- /dev/null +++ b/public/css/styles.94f653e9e151e28067a7c5dbbc4600cbd5a3c721e79faaf971e523c40f3b249b8e4f20bb57810dfffa8d559ca5c140fd56eb4cd9c0853113ad08e66afdb08bdd.css @@ -0,0 +1,3 @@ +.inline{display:inline}.block{display:block}.inline-block{display:inline-block}.table{display:table}.table-cell{display:table-cell}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-auto{overflow:auto}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}.left{float:left}.right{float:right}.fit{max-width:100%}.truncate{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.max-width-1{max-width:24rem}.max-width-2{max-width:32rem}.max-width-3{max-width:48rem}.max-width-4{max-width:64rem}.border-box{box-sizing:border-box}.m0{margin:0}.mt0{margin-top:0}.mr0{margin-right:0}.mb0{margin-bottom:0}.ml0{margin-left:0}.mx0{margin-right:0;margin-left:0}.my0{margin-top:0;margin-bottom:0}.m1{margin:.5rem}.mt1{margin-top:.5rem}.mr1{margin-right:.5rem}.mb1{margin-bottom:.5rem}.ml1{margin-left:.5rem}.mx1{margin-right:.5rem;margin-left:.5rem}.my1{margin-top:.5rem;margin-bottom:.5rem}.m2{margin:1rem}.mt2{margin-top:1rem}.mr2{margin-right:1rem}.mb2{margin-bottom:1rem}.ml2{margin-left:1rem}.mx2{margin-right:1rem;margin-left:1rem}.my2{margin-top:1rem;margin-bottom:1rem}.m3{margin:2rem}.mt3{margin-top:2rem}.mr3{margin-right:2rem}.mb3{margin-bottom:2rem}.ml3{margin-left:2rem}.mx3{margin-right:2rem;margin-left:2rem}.my3{margin-top:2rem;margin-bottom:2rem}.m4{margin:4rem}.mt4{margin-top:4rem}.mr4{margin-right:4rem}.mb4{margin-bottom:4rem}.ml4{margin-left:4rem}.mx4{margin-right:4rem;margin-left:4rem}.my4{margin-top:4rem;margin-bottom:4rem}.mxn1{margin-right:-.5rem;margin-left:-.5rem}.mxn2{margin-right:-1rem;margin-left:-1rem}.mxn3{margin-right:-2rem;margin-left:-2rem}.mxn4{margin-right:-4rem;margin-left:-4rem}.ml-auto{margin-left:auto}.mr-auto{margin-right:auto}.mx-auto{margin-right:auto;margin-left:auto}.p0{padding:0}.pt0{padding-top:0}.pr0{padding-right:0}.pb0{padding-bottom:0}.pl0{padding-left:0}.px0{padding-right:0;padding-left:0}.py0{padding-top:0;padding-bottom:0}.p1{padding:.5rem}.pt1{padding-top:.5rem}.pr1{padding-right:.5rem}.pb1{padding-bottom:.5rem}.pl1{padding-left:.5rem}.py1{padding-top:.5rem;padding-bottom:.5rem}.px1{padding-right:.5rem;padding-left:.5rem}.p2{padding:1rem}.pt2{padding-top:1rem}.pr2{padding-right:1rem}.pb2{padding-bottom:1rem}.pl2{padding-left:1rem}.py2{padding-top:1rem;padding-bottom:1rem}.px2{padding-right:1rem;padding-left:1rem}.p3{padding:2rem}.pt3{padding-top:2rem}.pr3{padding-right:2rem}.pb3{padding-bottom:2rem}.pl3{padding-left:2rem}.py3{padding-top:2rem;padding-bottom:2rem}.px3{padding-right:2rem;padding-left:2rem}.p4{padding:4rem}.pt4{padding-top:4rem}.pr4{padding-right:4rem}.pb4{padding-bottom:4rem}.pl4{padding-left:4rem}.py4{padding-top:4rem;padding-bottom:4rem}.px4{padding-right:4rem;padding-left:4rem}h1,.h1{display:block;margin-top:3rem;margin-bottom:1rem;color:#2bbc8a;letter-spacing:.01em;font-weight:700;font-style:normal;font-size:1.5em;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}h2,.h2{position:relative;display:block;margin-top:2rem;margin-bottom:.5rem;color:#383838;text-transform:none;letter-spacing:normal;font-weight:bold;font-size:1rem}h3{color:#383838;text-decoration:underline;font-weight:bold;font-size:.9rem}h4 h5 h6{display:inline;text-decoration:none;color:#8c8c8c;font-weight:bold;font-size:.9rem}h3 h4 h5 h6{margin-top:.9rem;margin-bottom:.5rem}hr{border:0.5px dashed #8c8c8c;opacity:.5;margin:0;margin-top:20px;margin-bottom:20px}strong{font-weight:bold}em cite{font-style:italic}sup sub{position:relative;vertical-align:baseline;font-size:.75em;line-height:0}sup{top:-.5em}sub{bottom:-.2em}small{font-size:.85em}acronym abbr{border-bottom:1px dotted}ul ol dl{line-height:1.725}ul ul,ol ul,ul ol,ol ol{margin-top:0;margin-bottom:0}ol{list-style:decimal}dt{font-weight:bold}table{width:100%;border-collapse:collapse;text-align:left;font-size:12px;overflow:auto;display:block}th{padding:8px;border-bottom:1px dashed #666;color:#383838;font-weight:bold;font-size:13px}td{padding:0 8px;border-bottom:none}@font-face{font-style:normal;font-family:"JetBrains Mono";font-display:swap;src:local("JetBrains Mono"),local("JetBrains-Mono"),url("../lib/JetBrainsMono/web/woff2/JetBrainsMono-Regular.woff2") format("woff2"),url("../lib/JetBrainsMono/web/woff/JetBrainsMono-Regular.woff") format("woff"),url("../lib/JetBrainsMono/web/eot/JetBrainsMono-Regular.eot") format("embedded-opentype"),url("../lib/JetBrainsMono/ttf/JetBrainsMono-Regular.ttf") format("truetype")}*,*:before,*:after{box-sizing:border-box}html{margin:0;padding:0;height:100%;border-top:2px solid #383838;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0;height:100%;background-color:#fff;color:#383838;font-display:swap;font-weight:400;font-size:14px;font-family:"JetBrains Mono",monospace;line-height:1.725;text-rendering:geometricPrecision;flex:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.content{position:relative;display:flex;flex-direction:column;min-height:100%;overflow-wrap:break-word}.content p{hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;-webkit-hyphens:auto}.content code{hyphens:manual;-moz-hyphens:manual;-ms-hyphens:manual;-webkit-hyphens:manual}.content a{color:#383838;text-decoration:none;background-image:linear-gradient(transparent, transparent 5px, #383838 5px, #383838);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}.content a:hover{background-image:linear-gradient(transparent, transparent 4px, #d480aa 4px, #d480aa)}.content a.icon{background:none}.content a.icon:hover{color:#d480aa}.content h1 a,.content .h1 a,.content h2 a,.content h3 a,.content h4 a,.content h5 a,.content h6 a{background:none;color:inherit;text-decoration:none}.content h1 a:hover,.content .h1 a:hover,.content h2 a:hover,.content h3 a:hover,.content h4 a:hover,.content h5 a:hover,.content h6 a:hover{background-image:linear-gradient(transparent, transparent 6px, #d480aa 6px, #d480aa);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}.content h6 a{background:none;color:inherit;text-decoration:none}.content h6 a:hover{background-image:linear-gradient(transparent, transparent 6px, #d480aa 6px, #d480aa);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}@media (min-width: 540px){.image-wrap{flex-direction:row;margin-bottom:2rem}.image-wrap .image-block{flex:1 0 35%;margin-right:2rem}.image-wrap p{flex:1 0 65%}}.max-width{max-width:48rem}@media (max-width: 480px){.px3{padding-right:1rem;padding-left:1rem}.my4{margin-top:2rem;margin-bottom:2rem}}@media (min-width: 480px){p{text-align:justify}}#header{margin:0 auto 2rem;width:100%}#header h1,#header .h1{margin-top:0;margin-bottom:0;color:#383838;letter-spacing:.01em;font-weight:700;font-style:normal;font-size:1.5rem;line-height:2rem;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}#header a{background:none;color:inherit;text-decoration:none}#header #logo{display:inline-block;float:left;margin-right:20px;width:50px;height:50px;border-radius:5px;background-size:50px 50px;background-repeat:no-repeat;filter:grayscale(100%);-webkit-filter:grayscale(100%)}#header #nav{color:#2bbc8a;letter-spacing:.01em;font-weight:200;font-style:normal;font-size:.8rem}#header #nav ul{margin:0;padding:0;list-style-type:none;line-height:15px}#header #nav ul a{margin-right:15px;color:#2bbc8a}#header #nav ul a:hover{background-image:linear-gradient(transparent, transparent 5px, #2bbc8a 5px, #2bbc8a);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}#header #nav ul li{display:inline-block;margin-right:15px;border-right:1px dotted;border-color:#2bbc8a;vertical-align:middle}#header #nav ul .icon{display:none}#header #nav ul li:last-child{margin-right:0;border-right:0}#header #nav ul li:last-child a{margin-right:0}#header:hover #logo{filter:none;-webkit-filter:none}@media screen and (max-width: 480px){#header #title{display:table;margin-right:5rem;min-height:50px}#header #title h1{display:table-cell;vertical-align:middle}#header #nav ul a:hover{background:none}#header #nav ul li{display:none;border-right:0}#header #nav ul li.icon{position:absolute;top:77px;right:1rem;display:inline-block}#header #nav ul.responsive li{display:block}#header #nav li:not(:first-child){padding-top:1rem;padding-left:70px;font-size:1rem}}#header-post{position:fixed;top:2rem;right:0;display:inline-block;float:right;z-index:100}#header-post a{background:none;color:inherit;text-decoration:none}#header-post a.icon{background:none}#header-post a.icon:hover{color:#d480aa}#header-post nav ul{display:block;list-style-image:none;list-style-position:outside;list-style-type:none;padding-inline-start:40px}#header-post nav ul li{display:list-item;margin-right:0px}#header-post nav>ul{margin-block-end:1em;margin-block-start:1em}#header-post ul{display:inline-block;margin:0;padding:0;list-style-type:none}#header-post ul li{display:inline-block;margin-right:15px;vertical-align:middle}#header-post ul li:last-child{margin-right:0}#header-post #menu-icon{float:right;margin-right:2rem;margin-left:15px}#header-post #menu-icon:hover{color:#2bbc8a}#header-post #menu-icon-tablet{float:right;margin-right:2rem;margin-left:15px}#header-post #menu-icon-tablet:hover{color:#2bbc8a}#header-post #top-icon-tablet{position:fixed;right:2rem;bottom:2rem;margin-right:2rem;margin-left:15px}#header-post #top-icon-tablet:hover{color:#2bbc8a}#header-post .active{color:#2bbc8a}#header-post #menu{visibility:hidden;margin-right:2rem}#header-post #nav{color:#2bbc8a;letter-spacing:.01em;font-weight:200;font-style:normal;font-size:.8rem}#header-post #nav ul{line-height:15px}#header-post #nav ul a{margin-right:15px;color:#2bbc8a}#header-post #nav ul a:hover{background-image:linear-gradient(transparent, transparent 5px, #2bbc8a 5px, #2bbc8a);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}#header-post #nav ul li{border-right:1px dotted #2bbc8a}#header-post #nav ul li:last-child{margin-right:0;border-right:0}#header-post #nav ul li:last-child a{margin-right:0}#header-post #actions{float:right;margin-top:2rem;margin-right:2rem;width:100%;text-align:right}#header-post #actions ul{display:block}#header-post #actions .info{display:block;font-style:italic}#header-post #share{clear:both;padding-top:1rem;padding-right:2rem;text-align:right}#header-post #share li{display:block;margin:0}#header-post #toc{float:right;clear:both;overflow:auto;margin-top:1rem;padding-right:2rem;max-width:20em;max-height:calc(95vh - 7rem);text-align:right}#header-post #toc a:hover{color:#d480aa}#header-post #toc nav>ul>li{color:#383838;font-size:.8rem}#header-post #toc nav>ul>li:before{color:#2bbc8a;content:"#";margin-right:8px}#header-post #toc nav>ul>li>ul>li{color:#666;font-size:.7rem}#header-post #toc nav>ul>li>ul>li:before{color:#2bbc8a;content:"·";font-weight:bold;margin-right:3px}#header-post #toc nav>ul>li>ul>li>ul>li{color:#333;font-size:.4rem}#header-post #toc .toc-level-5{display:none}#header-post #toc .toc-level-6{display:none}#header-post #toc .toc-number{display:none}@media screen and (max-width: 500px){#header-post{display:none}}@media screen and (max-width: 900px){#header-post #menu-icon{display:none}#header-post #actions{display:none}}@media screen and (max-width: 1199px){#header-post #toc{display:none}}@media screen and (min-width: 900px){#header-post #menu-icon-tablet{display:none !important}#header-post #top-icon-tablet{display:none !important}}@media screen and (min-width: 1199px){#header-post #actions{width:auto}#header-post #actions ul{display:inline-block;float:right}#header-post #actions .info{display:inline;float:left;margin-right:2rem;font-style:italic}}#footer-post{position:fixed;right:0;bottom:0;left:0;z-index:5000000;width:100%;border-top:1px solid #666;background:#fafafa;transition:opacity .2s}#footer-post a{background:none;color:inherit;text-decoration:none}#footer-post a.icon{background:none}#footer-post a.icon:hover{color:#d480aa}#footer-post #nav-footer{padding-right:1rem;padding-left:1rem;background:#e6e6e6;text-align:center}#footer-post #nav-footer a{color:#2bbc8a;font-size:1em}#footer-post #nav-footer a:hover{background-image:linear-gradient(transparent, transparent 5px, #2bbc8a 5px, #2bbc8a);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}#footer-post #nav-footer ul{display:table;margin:0;padding:0;width:100%;list-style-type:none}#footer-post #nav-footer ul li{display:inline-table;padding:10px;width:20%;vertical-align:middle}#footer-post #actions-footer{overflow:auto;margin-top:1rem;margin-bottom:1rem;padding-right:1rem;padding-left:1rem;width:100%;text-align:center;white-space:nowrap}#footer-post #actions-footer a{display:inline-block;padding-left:1rem;color:#2bbc8a}#footer-post #share-footer{padding-right:1rem;padding-left:1rem;background:#e6e6e6;text-align:center}#footer-post #share-footer ul{display:table;margin:0;padding:0;width:100%;list-style-type:none}#footer-post #share-footer ul li{display:inline-table;padding:10px;width:20%;vertical-align:middle}#footer-post #toc-footer{clear:both;padding-top:1rem;padding-bottom:1rem;background:#e6e6e6;text-align:left}#footer-post #toc-footer #TableOfContents ul{margin:0;padding-left:20px;list-style-type:none}#footer-post #toc-footer #TableOfContents ul li{line-height:30px}#footer-post #toc-footer a:hover{color:#d480aa}#footer-post #toc-footer #TableOfContents>ul>li{color:#383838;font-size:.8rem}#footer-post #toc-footer #TableOfContents>ul>li:before{color:#2bbc8a;content:"#";margin-right:8px}#footer-post #toc-footer #TableOfContents>ul>li>ul>li{color:#666;font-size:.7rem;line-height:15px}#footer-post #toc-footer #TableOfContents>ul>li>ul>li:before{color:#2bbc8a;content:"·";font-weight:bold;margin-right:3px}#footer-post #toc-footer #TableOfContents>ul>li>ul>li>ul>li{display:none}@media screen and (min-width: 500px){#footer-post-container{display:none}}.post-list{padding:0}.post-list .post-item{margin-bottom:1rem;margin-left:0;list-style-type:none}.post-list .post-item .meta{display:block;margin-right:16px;min-width:100px;color:#666;font-size:14px}@media (min-width: 480px){.post-list .post-item{display:flex;margin-bottom:5px}.post-list .post-item .meta{text-align:left}}.project-list{padding:0;list-style:none}.project-list .project-item{margin-bottom:5px}.project-list .project-item p{display:inline}article header .posttitle{margin-top:0;margin-bottom:0;text-transform:none;font-size:1.5em;line-height:1.25}article header .meta{margin-top:0;margin-bottom:1rem}article header .meta *{color:#8c8c8c;font-size:.85rem}article header .author{text-transform:uppercase;letter-spacing:.01em;font-weight:700}article header .postdate{display:inline}article .content h2:before{position:absolute;top:-4px;left:-1rem;color:#2bbc8a;content:"#";font-weight:bold;font-size:1.2rem}article .content img,article .content video{display:block;margin:auto;max-width:100%;height:auto}article .content img .video-container,article .content video .video-container{position:relative;overflow:hidden;padding-top:56.25% e;height:0}article .content img .video-container iframe,article .content img .video-container object,article .content img .video-container embed,article .content video .video-container iframe,article .content video .video-container object,article .content video .video-container embed{position:absolute;top:0;left:0;margin-top:0;width:100%;height:100%}article .content img blockquote,article .content video blockquote{margin:1rem 10px;padding:.5em 10px;background:inherit;color:#2bbc8a;quotes:"\201C" "\201D" "\2018" "\2019";font-weight:bold}article .content img blockquote p,article .content video blockquote p{margin:0}article .content img blockquote:before,article .content video blockquote:before{margin-right:.25em;color:#2bbc8a;content:"\201C";vertical-align:-.4em;font-size:2em;line-height:.1em}article .content img blockquote footer,article .content video blockquote footer{margin:line-height 0;color:#666;font-size:11px}article .content img blockquote footer a,article .content video blockquote footer a{background-image:linear-gradient(transparent, transparent 5px, #666 5px, #666);color:#666}article .content img blockquote footer a:hover,article .content video blockquote footer a:hover{background-image:linear-gradient(transparent, transparent 4px, #999 4px, #999);color:#999}article .content img blockquote footer cite:before,article .content video blockquote footer cite:before{padding:0 .5em;content:"—"}article .content img .pullquote,article .content video .pullquote{margin:0;width:45%;text-align:left}article .content img .pullquote.left,article .content video .pullquote.left{margin-right:1em;margin-left:.5em}article .content img .pullquote.right,article .content video .pullquote.right{margin-right:.5em;margin-left:1em}article .content img .caption,article .content video .caption{position:relative;display:block;margin-top:.5em;color:#666;text-align:center;font-size:.9em}.posttitle{text-transform:none;font-size:1.5em;line-height:1.25}.article-tag .tag-link:before{content:"#";background-image:linear-gradient(transparent, transparent 10px, #d480aa 10px, #d480aa);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}.article-category .category-link{background-image:linear-gradient(transparent, transparent 10px, #d480aa 10px, #d480aa);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}@media (min-width: 480px){.article-read-time,.article-tag,.article-category{display:inline}.article-read-time:before,.article-tag:before,.article-category:before{content:"|"}}#archive .post-list{padding:0}#archive .post-list .post-item{margin-bottom:1rem;margin-left:0;list-style-type:none}#archive .post-list .post-item .meta{display:block;margin-right:16px;min-width:100px;color:#666;font-size:14px}@media (min-width: 480px){#archive .post-list .post-item{display:flex;margin-bottom:5px;margin-left:1rem}#archive .post-list .post-item .meta{text-align:left}}.blog-post-comments{margin-top:4rem}#footer{position:absolute;bottom:0;margin-bottom:10px;width:100%;color:#666;vertical-align:top;text-align:center;font-size:11px}#footer ul{margin:0;padding:0;list-style:none}#footer li{display:inline-block;margin-right:15px;border-right:1px solid;border-color:#666;vertical-align:middle}#footer li a{margin-right:15px}#footer li:last-child{margin-right:0;border-right:0}#footer li:last-child a{margin-right:0}#footer a{color:#666;text-decoration:underline;background-image:none}#footer a:hover{color:#999}#footer .footer-left{height:20px;vertical-align:middle;line-height:20px}@media (min-width: 39rem){#footer{display:flex;flex-flow:row wrap;justify-content:space-between;align-items:center;align-content:center;margin-bottom:20px}#footer .footer-left{align-self:flex-start;margin-right:20px}#footer .footer-right{align-self:flex-end}}.pagination{display:inline-block;margin-top:2rem;width:100%;text-align:center}.pagination .page-number{color:#383838;font-size:.8rem}.pagination a{padding:4px 6px;border-radius:5px;background-image:none;color:#383838;text-decoration:none}.pagination a:hover{background-image:none}.pagination a:hover:not(.active){color:#383838}.search-input{padding:4px 7px;width:100%;outline:none;border:solid 1px #8c8c8c;border-radius:5px;background-color:#fff;color:#383838;font-size:1.2rem;-webkit-border-radius:5px;-moz-border-radius:5px}.search-input:focus{border:solid 1px #2bbc8a}#search-result ul.search-result-list{padding:0;list-style-type:none}#search-result li{margin:2em auto}#search-result a.search-result-title{background-image:none;color:#383838;text-transform:capitalize;font-weight:bold;line-height:1.2}#search-result p.search-result{overflow:hidden;margin:.4em auto;max-height:13em;text-align:justify;font-size:.8em}#search-result em.search-keyword{border-bottom:1px dashed #d480aa;color:#d480aa;font-weight:bold}.search-no-result{display:none;padding-bottom:.5em;color:#383838}#tag-cloud .tag-cloud-title{color:#666}#tag-cloud .tag-cloud-tags{clear:both;text-align:center}#tag-cloud .tag-cloud-tags a{display:inline-block;margin:10px}.tooltipped{position:relative}.tooltipped::after{position:absolute;z-index:1000000;display:none;padding:.2em .5em;-webkit-font-smoothing:subpixel-antialiased;color:#fff;font-display:swap;font-weight:400;font-size:11.2px;font-family:"JetBrains Mono",monospace;line-height:1.725;text-rendering:geometricPrecision;text-align:center;word-wrap:break-word;white-space:pre;content:attr(aria-label);background:#383838;border-radius:3px;opacity:0}.tooltipped::before{position:absolute;z-index:1000001;display:none;width:0;height:0;color:#383838;pointer-events:none;content:'';border:6px solid transparent;opacity:0}@keyframes tooltip-appear{from{opacity:0}to{opacity:1}}.tooltipped:hover::before,.tooltipped:hover::after,.tooltipped:active::before,.tooltipped:active::after,.tooltipped:focus::before,.tooltipped:focus::after{display:inline-block;text-decoration:none;animation-name:tooltip-appear;animation-duration:0.1s;animation-fill-mode:forwards;animation-timing-function:ease-in}.tooltipped-s::after,.tooltipped-sw::after{top:100%;right:50%;margin-top:6px}.tooltipped-s::before,.tooltipped-sw::before{top:auto;right:50%;bottom:-7px;margin-right:-6px;border-bottom-color:#383838}.tooltipped-sw::after{margin-right:-16px}.tooltipped-s::after{transform:translateX(50%)}#categories .category-list-title{color:#666}#categories .category-list .category-list-item .category-list-count{color:#666}#categories .category-list .category-list-item .category-list-count:before{content:" ("}#categories .category-list .category-list-item .category-list-count:after{content:")"}pre{overflow-x:auto;padding:15px 15px 10px 15px;border:1px dotted #666;border-radius:2px;-webkit-border-radius:2px;font-size:13px;font-family:"JetBrains Mono",monospace;line-height:22px;position:relative}pre .code-copy-btn{position:absolute;top:0;right:0;border:0;border-radius:0 2px;padding:0;font-family:"JetBrains Mono", monospace;font-weight:800;font-size:0.9em;line-height:1.7;color:#fff;background-color:#8c8c8c;min-width:60px;text-align:center;cursor:pointer;letter-spacing:0em}pre .code-copy-btn:hover{background-color:#666;color:#2bbc8a}pre code{display:block;padding:0;border:none}code{font-family:"JetBrains Mono",monospace;padding:0 5px;border:1px dotted #666;border-radius:2px;-webkit-border-radius:2px}.highlight>div{border-radius:2px;-webkit-border-radius:2px}.highlight pre{border:none;background:none}.highlight table pre{margin-top:0}.highlight table td:first-child pre{padding-right:0}.highlight table td:last-child pre{padding-left:0} + +/*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/public/css/styles.c05d68261bf086a9d7713c4f8a6215a3601608e267a816a7ee58f139b3d1aae51222aae2081c8e0c6bd35e1334773b7a16283022f31f92afd93bb37e5e822e66.css b/public/css/styles.c05d68261bf086a9d7713c4f8a6215a3601608e267a816a7ee58f139b3d1aae51222aae2081c8e0c6bd35e1334773b7a16283022f31f92afd93bb37e5e822e66.css new file mode 100644 index 0000000..b2a653d --- /dev/null +++ b/public/css/styles.c05d68261bf086a9d7713c4f8a6215a3601608e267a816a7ee58f139b3d1aae51222aae2081c8e0c6bd35e1334773b7a16283022f31f92afd93bb37e5e822e66.css @@ -0,0 +1,3 @@ +.inline{display:inline}.block{display:block}.inline-block{display:inline-block}.table{display:table}.table-cell{display:table-cell}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-auto{overflow:auto}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}.left{float:left}.right{float:right}.fit{max-width:100%}.truncate{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.max-width-1{max-width:24rem}.max-width-2{max-width:32rem}.max-width-3{max-width:48rem}.max-width-4{max-width:64rem}.border-box{box-sizing:border-box}.m0{margin:0}.mt0{margin-top:0}.mr0{margin-right:0}.mb0{margin-bottom:0}.ml0{margin-left:0}.mx0{margin-right:0;margin-left:0}.my0{margin-top:0;margin-bottom:0}.m1{margin:.5rem}.mt1{margin-top:.5rem}.mr1{margin-right:.5rem}.mb1{margin-bottom:.5rem}.ml1{margin-left:.5rem}.mx1{margin-right:.5rem;margin-left:.5rem}.my1{margin-top:.5rem;margin-bottom:.5rem}.m2{margin:1rem}.mt2{margin-top:1rem}.mr2{margin-right:1rem}.mb2{margin-bottom:1rem}.ml2{margin-left:1rem}.mx2{margin-right:1rem;margin-left:1rem}.my2{margin-top:1rem;margin-bottom:1rem}.m3{margin:2rem}.mt3{margin-top:2rem}.mr3{margin-right:2rem}.mb3{margin-bottom:2rem}.ml3{margin-left:2rem}.mx3{margin-right:2rem;margin-left:2rem}.my3{margin-top:2rem;margin-bottom:2rem}.m4{margin:4rem}.mt4{margin-top:4rem}.mr4{margin-right:4rem}.mb4{margin-bottom:4rem}.ml4{margin-left:4rem}.mx4{margin-right:4rem;margin-left:4rem}.my4{margin-top:4rem;margin-bottom:4rem}.mxn1{margin-right:-.5rem;margin-left:-.5rem}.mxn2{margin-right:-1rem;margin-left:-1rem}.mxn3{margin-right:-2rem;margin-left:-2rem}.mxn4{margin-right:-4rem;margin-left:-4rem}.ml-auto{margin-left:auto}.mr-auto{margin-right:auto}.mx-auto{margin-right:auto;margin-left:auto}.p0{padding:0}.pt0{padding-top:0}.pr0{padding-right:0}.pb0{padding-bottom:0}.pl0{padding-left:0}.px0{padding-right:0;padding-left:0}.py0{padding-top:0;padding-bottom:0}.p1{padding:.5rem}.pt1{padding-top:.5rem}.pr1{padding-right:.5rem}.pb1{padding-bottom:.5rem}.pl1{padding-left:.5rem}.py1{padding-top:.5rem;padding-bottom:.5rem}.px1{padding-right:.5rem;padding-left:.5rem}.p2{padding:1rem}.pt2{padding-top:1rem}.pr2{padding-right:1rem}.pb2{padding-bottom:1rem}.pl2{padding-left:1rem}.py2{padding-top:1rem;padding-bottom:1rem}.px2{padding-right:1rem;padding-left:1rem}.p3{padding:2rem}.pt3{padding-top:2rem}.pr3{padding-right:2rem}.pb3{padding-bottom:2rem}.pl3{padding-left:2rem}.py3{padding-top:2rem;padding-bottom:2rem}.px3{padding-right:2rem;padding-left:2rem}.p4{padding:4rem}.pt4{padding-top:4rem}.pr4{padding-right:4rem}.pb4{padding-bottom:4rem}.pl4{padding-left:4rem}.py4{padding-top:4rem;padding-bottom:4rem}.px4{padding-right:4rem;padding-left:4rem}h1,.h1{display:block;margin-top:3rem;margin-bottom:1rem;color:#2bbc8a;letter-spacing:.01em;font-weight:700;font-style:normal;font-size:1.5em;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}h2,.h2{position:relative;display:block;margin-top:2rem;margin-bottom:.5rem;color:#eee;text-transform:none;letter-spacing:normal;font-weight:bold;font-size:1rem}h3{color:#eee;text-decoration:underline;font-weight:bold;font-size:.9rem}h4 h5 h6{display:inline;text-decoration:none;color:#ccc;font-weight:bold;font-size:.9rem}h3 h4 h5 h6{margin-top:.9rem;margin-bottom:.5rem}hr{border:0.5px dashed #ccc;opacity:.5;margin:0;margin-top:20px;margin-bottom:20px}strong{font-weight:bold}em cite{font-style:italic}sup sub{position:relative;vertical-align:baseline;font-size:.75em;line-height:0}sup{top:-.5em}sub{bottom:-.2em}small{font-size:.85em}acronym abbr{border-bottom:1px dotted}ul ol dl{line-height:1.725}ul ul,ol ul,ul ol,ol ol{margin-top:0;margin-bottom:0}ol{list-style:decimal}dt{font-weight:bold}table{width:100%;border-collapse:collapse;text-align:left;font-size:12px;overflow:auto;display:block}th{padding:8px;border-bottom:1px dashed #666;color:#eee;font-weight:bold;font-size:13px}td{padding:0 8px;border-bottom:none}@font-face{font-style:normal;font-family:"JetBrains Mono";font-display:swap;src:local("JetBrains Mono"),local("JetBrains-Mono"),url("../lib/JetBrainsMono/web/woff2/JetBrainsMono-Regular.woff2") format("woff2"),url("../lib/JetBrainsMono/web/woff/JetBrainsMono-Regular.woff") format("woff"),url("../lib/JetBrainsMono/web/eot/JetBrainsMono-Regular.eot") format("embedded-opentype"),url("../lib/JetBrainsMono/ttf/JetBrainsMono-Regular.ttf") format("truetype")}*,*:before,*:after{box-sizing:border-box}html{margin:0;padding:0;height:100%;border-top:2px solid #c9cacc;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0;height:100%;background-color:#1d1f21;color:#c9cacc;font-display:swap;font-weight:400;font-size:14px;font-family:"JetBrains Mono",monospace;line-height:1.725;text-rendering:geometricPrecision;flex:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.content{position:relative;display:flex;flex-direction:column;min-height:100%;overflow-wrap:break-word}.content p{hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;-webkit-hyphens:auto}.content code{hyphens:manual;-moz-hyphens:manual;-ms-hyphens:manual;-webkit-hyphens:manual}.content a{color:#c9cacc;text-decoration:none;background-image:linear-gradient(transparent, transparent 5px, #c9cacc 5px, #c9cacc);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}.content a:hover{background-image:linear-gradient(transparent, transparent 4px, #d480aa 4px, #d480aa)}.content a.icon{background:none}.content a.icon:hover{color:#d480aa}.content h1 a,.content .h1 a,.content h2 a,.content h3 a,.content h4 a,.content h5 a,.content h6 a{background:none;color:inherit;text-decoration:none}.content h1 a:hover,.content .h1 a:hover,.content h2 a:hover,.content h3 a:hover,.content h4 a:hover,.content h5 a:hover,.content h6 a:hover{background-image:linear-gradient(transparent, transparent 6px, #d480aa 6px, #d480aa);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}.content h6 a{background:none;color:inherit;text-decoration:none}.content h6 a:hover{background-image:linear-gradient(transparent, transparent 6px, #d480aa 6px, #d480aa);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}@media (min-width: 540px){.image-wrap{flex-direction:row;margin-bottom:2rem}.image-wrap .image-block{flex:1 0 35%;margin-right:2rem}.image-wrap p{flex:1 0 65%}}.max-width{max-width:48rem}@media (max-width: 480px){.px3{padding-right:1rem;padding-left:1rem}.my4{margin-top:2rem;margin-bottom:2rem}}@media (min-width: 480px){p{text-align:justify}}#header{margin:0 auto 2rem;width:100%}#header h1,#header .h1{margin-top:0;margin-bottom:0;color:#c9cacc;letter-spacing:.01em;font-weight:700;font-style:normal;font-size:1.5rem;line-height:2rem;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}#header a{background:none;color:inherit;text-decoration:none}#header #logo{display:inline-block;float:left;margin-right:20px;width:50px;height:50px;border-radius:5px;background-size:50px 50px;background-repeat:no-repeat;filter:grayscale(100%);-webkit-filter:grayscale(100%)}#header #nav{color:#2bbc8a;letter-spacing:.01em;font-weight:200;font-style:normal;font-size:.8rem}#header #nav ul{margin:0;padding:0;list-style-type:none;line-height:15px}#header #nav ul a{margin-right:15px;color:#2bbc8a}#header #nav ul a:hover{background-image:linear-gradient(transparent, transparent 5px, #2bbc8a 5px, #2bbc8a);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}#header #nav ul li{display:inline-block;margin-right:15px;border-right:1px dotted;border-color:#2bbc8a;vertical-align:middle}#header #nav ul .icon{display:none}#header #nav ul li:last-child{margin-right:0;border-right:0}#header #nav ul li:last-child a{margin-right:0}#header:hover #logo{filter:none;-webkit-filter:none}@media screen and (max-width: 480px){#header #title{display:table;margin-right:5rem;min-height:50px}#header #title h1{display:table-cell;vertical-align:middle}#header #nav ul a:hover{background:none}#header #nav ul li{display:none;border-right:0}#header #nav ul li.icon{position:absolute;top:77px;right:1rem;display:inline-block}#header #nav ul.responsive li{display:block}#header #nav li:not(:first-child){padding-top:1rem;padding-left:70px;font-size:1rem}}#header-post{position:fixed;top:2rem;right:0;display:inline-block;float:right;z-index:100}#header-post a{background:none;color:inherit;text-decoration:none}#header-post a.icon{background:none}#header-post a.icon:hover{color:#d480aa}#header-post nav ul{display:block;list-style-image:none;list-style-position:outside;list-style-type:none;padding-inline-start:40px}#header-post nav ul li{display:list-item;margin-right:0px}#header-post nav>ul{margin-block-end:1em;margin-block-start:1em}#header-post ul{display:inline-block;margin:0;padding:0;list-style-type:none}#header-post ul li{display:inline-block;margin-right:15px;vertical-align:middle}#header-post ul li:last-child{margin-right:0}#header-post #menu-icon{float:right;margin-right:2rem;margin-left:15px}#header-post #menu-icon:hover{color:#2bbc8a}#header-post #menu-icon-tablet{float:right;margin-right:2rem;margin-left:15px}#header-post #menu-icon-tablet:hover{color:#2bbc8a}#header-post #top-icon-tablet{position:fixed;right:2rem;bottom:2rem;margin-right:2rem;margin-left:15px}#header-post #top-icon-tablet:hover{color:#2bbc8a}#header-post .active{color:#2bbc8a}#header-post #menu{visibility:hidden;margin-right:2rem}#header-post #nav{color:#2bbc8a;letter-spacing:.01em;font-weight:200;font-style:normal;font-size:.8rem}#header-post #nav ul{line-height:15px}#header-post #nav ul a{margin-right:15px;color:#2bbc8a}#header-post #nav ul a:hover{background-image:linear-gradient(transparent, transparent 5px, #2bbc8a 5px, #2bbc8a);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}#header-post #nav ul li{border-right:1px dotted #2bbc8a}#header-post #nav ul li:last-child{margin-right:0;border-right:0}#header-post #nav ul li:last-child a{margin-right:0}#header-post #actions{float:right;margin-top:2rem;margin-right:2rem;width:100%;text-align:right}#header-post #actions ul{display:block}#header-post #actions .info{display:block;font-style:italic}#header-post #share{clear:both;padding-top:1rem;padding-right:2rem;text-align:right}#header-post #share li{display:block;margin:0}#header-post #toc{float:right;clear:both;overflow:auto;margin-top:1rem;padding-right:2rem;max-width:20em;max-height:calc(95vh - 7rem);text-align:right}#header-post #toc a:hover{color:#d480aa}#header-post #toc nav>ul>li{color:#c9cacc;font-size:.8rem}#header-post #toc nav>ul>li:before{color:#2bbc8a;content:"#";margin-right:8px}#header-post #toc nav>ul>li>ul>li{color:#666;font-size:.7rem}#header-post #toc nav>ul>li>ul>li:before{color:#2bbc8a;content:"·";font-weight:bold;margin-right:3px}#header-post #toc nav>ul>li>ul>li>ul>li{color:#333;font-size:.4rem}#header-post #toc .toc-level-5{display:none}#header-post #toc .toc-level-6{display:none}#header-post #toc .toc-number{display:none}@media screen and (max-width: 500px){#header-post{display:none}}@media screen and (max-width: 900px){#header-post #menu-icon{display:none}#header-post #actions{display:none}}@media screen and (max-width: 1199px){#header-post #toc{display:none}}@media screen and (min-width: 900px){#header-post #menu-icon-tablet{display:none !important}#header-post #top-icon-tablet{display:none !important}}@media screen and (min-width: 1199px){#header-post #actions{width:auto}#header-post #actions ul{display:inline-block;float:right}#header-post #actions .info{display:inline;float:left;margin-right:2rem;font-style:italic}}#footer-post{position:fixed;right:0;bottom:0;left:0;z-index:5000000;width:100%;border-top:1px solid #666;background:#222426;transition:opacity .2s}#footer-post a{background:none;color:inherit;text-decoration:none}#footer-post a.icon{background:none}#footer-post a.icon:hover{color:#d480aa}#footer-post #nav-footer{padding-right:1rem;padding-left:1rem;background:#35393c;text-align:center}#footer-post #nav-footer a{color:#2bbc8a;font-size:1em}#footer-post #nav-footer a:hover{background-image:linear-gradient(transparent, transparent 5px, #2bbc8a 5px, #2bbc8a);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}#footer-post #nav-footer ul{display:table;margin:0;padding:0;width:100%;list-style-type:none}#footer-post #nav-footer ul li{display:inline-table;padding:10px;width:20%;vertical-align:middle}#footer-post #actions-footer{overflow:auto;margin-top:1rem;margin-bottom:1rem;padding-right:1rem;padding-left:1rem;width:100%;text-align:center;white-space:nowrap}#footer-post #actions-footer a{display:inline-block;padding-left:1rem;color:#2bbc8a}#footer-post #share-footer{padding-right:1rem;padding-left:1rem;background:#35393c;text-align:center}#footer-post #share-footer ul{display:table;margin:0;padding:0;width:100%;list-style-type:none}#footer-post #share-footer ul li{display:inline-table;padding:10px;width:20%;vertical-align:middle}#footer-post #toc-footer{clear:both;padding-top:1rem;padding-bottom:1rem;background:#35393c;text-align:left}#footer-post #toc-footer #TableOfContents ul{margin:0;padding-left:20px;list-style-type:none}#footer-post #toc-footer #TableOfContents ul li{line-height:30px}#footer-post #toc-footer a:hover{color:#d480aa}#footer-post #toc-footer #TableOfContents>ul>li{color:#c9cacc;font-size:.8rem}#footer-post #toc-footer #TableOfContents>ul>li:before{color:#2bbc8a;content:"#";margin-right:8px}#footer-post #toc-footer #TableOfContents>ul>li>ul>li{color:#666;font-size:.7rem;line-height:15px}#footer-post #toc-footer #TableOfContents>ul>li>ul>li:before{color:#2bbc8a;content:"·";font-weight:bold;margin-right:3px}#footer-post #toc-footer #TableOfContents>ul>li>ul>li>ul>li{display:none}@media screen and (min-width: 500px){#footer-post-container{display:none}}.post-list{padding:0}.post-list .post-item{margin-bottom:1rem;margin-left:0;list-style-type:none}.post-list .post-item .meta{display:block;margin-right:16px;min-width:100px;color:#666;font-size:14px}@media (min-width: 480px){.post-list .post-item{display:flex;margin-bottom:5px}.post-list .post-item .meta{text-align:left}}.project-list{padding:0;list-style:none}.project-list .project-item{margin-bottom:5px}.project-list .project-item p{display:inline}article header .posttitle{margin-top:0;margin-bottom:0;text-transform:none;font-size:1.5em;line-height:1.25}article header .meta{margin-top:0;margin-bottom:1rem}article header .meta *{color:#ccc;font-size:.85rem}article header .author{text-transform:uppercase;letter-spacing:.01em;font-weight:700}article header .postdate{display:inline}article .content h2:before{position:absolute;top:-4px;left:-1rem;color:#2bbc8a;content:"#";font-weight:bold;font-size:1.2rem}article .content img,article .content video{display:block;margin:auto;max-width:100%;height:auto}article .content img .video-container,article .content video .video-container{position:relative;overflow:hidden;padding-top:56.25% e;height:0}article .content img .video-container iframe,article .content img .video-container object,article .content img .video-container embed,article .content video .video-container iframe,article .content video .video-container object,article .content video .video-container embed{position:absolute;top:0;left:0;margin-top:0;width:100%;height:100%}article .content img blockquote,article .content video blockquote{margin:1rem 10px;padding:.5em 10px;background:inherit;color:#ccffb6;quotes:"\201C" "\201D" "\2018" "\2019";font-weight:bold}article .content img blockquote p,article .content video blockquote p{margin:0}article .content img blockquote:before,article .content video blockquote:before{margin-right:.25em;color:#ccffb6;content:"\201C";vertical-align:-.4em;font-size:2em;line-height:.1em}article .content img blockquote footer,article .content video blockquote footer{margin:line-height 0;color:#666;font-size:11px}article .content img blockquote footer a,article .content video blockquote footer a{background-image:linear-gradient(transparent, transparent 5px, #666 5px, #666);color:#666}article .content img blockquote footer a:hover,article .content video blockquote footer a:hover{background-image:linear-gradient(transparent, transparent 4px, #999 4px, #999);color:#999}article .content img blockquote footer cite:before,article .content video blockquote footer cite:before{padding:0 .5em;content:"—"}article .content img .pullquote,article .content video .pullquote{margin:0;width:45%;text-align:left}article .content img .pullquote.left,article .content video .pullquote.left{margin-right:1em;margin-left:.5em}article .content img .pullquote.right,article .content video .pullquote.right{margin-right:.5em;margin-left:1em}article .content img .caption,article .content video .caption{position:relative;display:block;margin-top:.5em;color:#666;text-align:center;font-size:.9em}.posttitle{text-transform:none;font-size:1.5em;line-height:1.25}.article-tag .tag-link:before{content:"#";background-image:linear-gradient(transparent, transparent 10px, #d480aa 10px, #d480aa);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}.article-category .category-link{background-image:linear-gradient(transparent, transparent 10px, #d480aa 10px, #d480aa);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}@media (min-width: 480px){.article-read-time,.article-tag,.article-category{display:inline}.article-read-time:before,.article-tag:before,.article-category:before{content:"|"}}#archive .post-list{padding:0}#archive .post-list .post-item{margin-bottom:1rem;margin-left:0;list-style-type:none}#archive .post-list .post-item .meta{display:block;margin-right:16px;min-width:100px;color:#666;font-size:14px}@media (min-width: 480px){#archive .post-list .post-item{display:flex;margin-bottom:5px;margin-left:1rem}#archive .post-list .post-item .meta{text-align:left}}.blog-post-comments{margin-top:4rem}#footer{position:absolute;bottom:0;margin-bottom:10px;width:100%;color:#666;vertical-align:top;text-align:center;font-size:11px}#footer ul{margin:0;padding:0;list-style:none}#footer li{display:inline-block;margin-right:15px;border-right:1px solid;border-color:#666;vertical-align:middle}#footer li a{margin-right:15px}#footer li:last-child{margin-right:0;border-right:0}#footer li:last-child a{margin-right:0}#footer a{color:#666;text-decoration:underline;background-image:none}#footer a:hover{color:#999}#footer .footer-left{height:20px;vertical-align:middle;line-height:20px}@media (min-width: 39rem){#footer{display:flex;flex-flow:row wrap;justify-content:space-between;align-items:center;align-content:center;margin-bottom:20px}#footer .footer-left{align-self:flex-start;margin-right:20px}#footer .footer-right{align-self:flex-end}}.pagination{display:inline-block;margin-top:2rem;width:100%;text-align:center}.pagination .page-number{color:#c9cacc;font-size:.8rem}.pagination a{padding:4px 6px;border-radius:5px;background-image:none;color:#c9cacc;text-decoration:none}.pagination a:hover{background-image:none}.pagination a:hover:not(.active){color:#eee}.search-input{padding:4px 7px;width:100%;outline:none;border:solid 1px #ccc;border-radius:5px;background-color:#1d1f21;color:#c9cacc;font-size:1.2rem;-webkit-border-radius:5px;-moz-border-radius:5px}.search-input:focus{border:solid 1px #2bbc8a}#search-result ul.search-result-list{padding:0;list-style-type:none}#search-result li{margin:2em auto}#search-result a.search-result-title{background-image:none;color:#c9cacc;text-transform:capitalize;font-weight:bold;line-height:1.2}#search-result p.search-result{overflow:hidden;margin:.4em auto;max-height:13em;text-align:justify;font-size:.8em}#search-result em.search-keyword{border-bottom:1px dashed #d480aa;color:#d480aa;font-weight:bold}.search-no-result{display:none;padding-bottom:.5em;color:#c9cacc}#tag-cloud .tag-cloud-title{color:#666}#tag-cloud .tag-cloud-tags{clear:both;text-align:center}#tag-cloud .tag-cloud-tags a{display:inline-block;margin:10px}.tooltipped{position:relative}.tooltipped::after{position:absolute;z-index:1000000;display:none;padding:.2em .5em;-webkit-font-smoothing:subpixel-antialiased;color:#1d1f21;font-display:swap;font-weight:400;font-size:11.2px;font-family:"JetBrains Mono",monospace;line-height:1.725;text-rendering:geometricPrecision;text-align:center;word-wrap:break-word;white-space:pre;content:attr(aria-label);background:#c9cacc;border-radius:3px;opacity:0}.tooltipped::before{position:absolute;z-index:1000001;display:none;width:0;height:0;color:#c9cacc;pointer-events:none;content:'';border:6px solid transparent;opacity:0}@keyframes tooltip-appear{from{opacity:0}to{opacity:1}}.tooltipped:hover::before,.tooltipped:hover::after,.tooltipped:active::before,.tooltipped:active::after,.tooltipped:focus::before,.tooltipped:focus::after{display:inline-block;text-decoration:none;animation-name:tooltip-appear;animation-duration:0.1s;animation-fill-mode:forwards;animation-timing-function:ease-in}.tooltipped-s::after,.tooltipped-sw::after{top:100%;right:50%;margin-top:6px}.tooltipped-s::before,.tooltipped-sw::before{top:auto;right:50%;bottom:-7px;margin-right:-6px;border-bottom-color:#c9cacc}.tooltipped-sw::after{margin-right:-16px}.tooltipped-s::after{transform:translateX(50%)}#categories .category-list-title{color:#666}#categories .category-list .category-list-item .category-list-count{color:#666}#categories .category-list .category-list-item .category-list-count:before{content:" ("}#categories .category-list .category-list-item .category-list-count:after{content:")"}pre{overflow-x:auto;padding:15px 15px 10px 15px;border:1px dotted #666;border-radius:2px;-webkit-border-radius:2px;font-size:13px;font-family:"JetBrains Mono",monospace;line-height:22px;position:relative}pre .code-copy-btn{position:absolute;top:0;right:0;border:0;border-radius:0 2px;padding:0;font-family:"JetBrains Mono", monospace;font-weight:800;font-size:0.9em;line-height:1.7;color:#fff;background-color:#8c8c8c;min-width:60px;text-align:center;cursor:pointer;letter-spacing:0em}pre .code-copy-btn:hover{background-color:#666;color:#2bbc8a}pre code{display:block;padding:0;border:none}code{font-family:"JetBrains Mono",monospace;padding:0 5px;border:1px dotted #666;border-radius:2px;-webkit-border-radius:2px}.highlight>div{border-radius:2px;-webkit-border-radius:2px}.highlight pre{border:none;background:none}.highlight table pre{margin-top:0}.highlight table td:first-child pre{padding-right:0}.highlight table td:last-child pre{padding-left:0} + +/*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/public/css/styles.css.map b/public/css/styles.css.map new file mode 100644 index 0000000..0f25efb --- /dev/null +++ b/public/css/styles.css.map @@ -0,0 +1,51 @@ +{ + "version": 3, + "file": "styles.css", + "sourceRoot": "/home/daniel/Code/danielmrcl.dev", + "sources": [ + "themes/cactus/assets/scss/style.scss", + "themes/cactus/assets/scss/_variables.scss", + "themes/cactus/assets/scss/colors/dark.scss", + "themes/cactus/assets/scss/_util.scss", + "themes/cactus/assets/scss/_mixins.scss", + "themes/cactus/assets/scss/_extend.scss", + "themes/cactus/assets/scss/_fonts.scss", + "themes/cactus/assets/scss/partial/header.scss", + "themes/cactus/assets/scss/partial/post/actions_desktop.scss", + "themes/cactus/assets/scss/partial/post/actions_mobile.scss", + "themes/cactus/assets/scss/partial/index.scss", + "themes/cactus/assets/scss/partial/article.scss", + "themes/cactus/assets/scss/partial/archive.scss", + "themes/cactus/assets/scss/partial/comments.scss", + "themes/cactus/assets/scss/partial/footer.scss", + "themes/cactus/assets/scss/partial/pagination.scss", + "themes/cactus/assets/scss/partial/search.scss", + "themes/cactus/assets/scss/partial/tags.scss", + "themes/cactus/assets/scss/partial/tooltip.scss", + "themes/cactus/assets/scss/partial/categories.scss" + ], + "sourcesContent": [ + "@import \"variables\";\n@import \"colors/dark\";\n@import \"util\";\n@import \"mixins\";\n@import \"extend\";\n@import \"fonts\";\n\n// global-reset()\n\n*,\n*:before,\n*:after {\n box-sizing: border-box;\n}\nhtml {\n margin: 0;\n padding: 0;\n height: 100%;\n border-top: 2px solid $color-text;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n height: 100%;\n background-color: $color-background;\n color: $color-text;\n font-display: swap;\n font-weight: 400;\n font-size: $font-size;\n font-family: $font-family-body;\n line-height: $line-height;\n text-rendering: geometricPrecision;\n flex: 1;\n\n @include antialias();\n\n @extend $base-style !optional;\n}\n.content {\n position: relative;\n display: flex;\n flex-direction: column;\n min-height: 100%;\n overflow-wrap: break-word;\n\n p {\n @include hyphens(auto);\n }\n code {\n @include hyphens(manual);\n }\n a {\n color: $color-text;\n text-decoration: none;\n\n @include underline(5px, $color-text);\n\n &:hover {\n background-image: linear-gradient(transparent, transparent 4px, $color-link 4px, $color-link);\n }\n }\n a.icon {\n background: none;\n\n &:hover {\n color: $color-link;\n }\n }\n h1 a,\n .h1 a,\n h2 a,\n h3 a,\n h4 a,\n h5 a,\n h6 a {\n background: none;\n color: inherit;\n text-decoration: none;\n }\n h1 a:hover,\n .h1 a:hover,\n h2 a:hover,\n h3 a:hover,\n h4 a:hover,\n h5 a:hover,\n h6 a:hover {\n @include underline(6px, $color-link);\n }\n h6 {\n a {\n background: none;\n color: inherit;\n text-decoration: none;\n }\n }\n h6 {\n a:hover {\n @include underline(6px, $color-link);\n }\n }\n}\n@media (min-width: 540px) {\n .image-wrap {\n flex-direction: row;\n margin-bottom: 2rem;\n\n .image-block {\n flex: 1 0 35%;\n margin-right: 2rem;\n }\n p {\n flex: 1 0 65%;\n }\n }\n}\n.max-width {\n max-width: $page-width;\n}\n@media (max-width: 480px) { // smaller margins at smaller screen widths\n .px3 {\n padding-right: 1rem;\n padding-left: 1rem;\n }\n .my4 {\n margin-top: 2rem;\n margin-bottom: 2rem;\n }\n}\n\n@media (min-width: 480px) {\n p {\n text-align: justify;\n }\n}\n\n@import \"partial/header\";\n@import \"partial/post/actions_desktop\";\n@import \"partial/post/actions_mobile\";\n@import \"partial/index\";\n@import \"partial/article\";\n@import \"partial/archive\";\n@import \"partial/comments\";\n@import \"partial/footer\";\n@import \"partial/pagination\";\n@import \"partial/search\";\n@import \"partial/tags\";\n@import \"partial/tooltip\";\n@import \"partial/categories\";\n\npre {\n overflow-x: auto;\n padding: 15px 15px 10px 15px;\n border: 1px dotted $color-border;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n font-size: 13px;\n font-family: $font-family-mono;\n line-height: 22px;\n position: relative;\n\n .code-copy-btn {\n position: absolute;\n top: 0;\n right: 0;\n border: 0;\n border-radius: 0 2px;\n padding: 0;\n font-family: \"JetBrains Mono\", monospace;\n font-weight: 800;\n font-size: 0.9em;\n line-height: 1.7;\n color: #fff;\n background-color: #8c8c8c;\n min-width: 60px;\n text-align: center;\n cursor: pointer;\n letter-spacing: 0em;\n }\n\n .code-copy-btn:hover {\n background-color: #666;\n color: #2bbc8a;\n }\n\n code {\n display: block;\n padding: 0;\n border: none;\n }\n}\n\ncode {\n font-family: $font-family-mono;\n padding: 0 5px;\n border: 1px dotted $color-border;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n}\n\n.highlight {\n\n & > div {\n border-radius: 2px;\n -webkit-border-radius: 2px;\n }\n\n pre {\n border: none;\n background: none;\n }\n\n table {\n\n pre {\n margin-top: 0;\n }\n\n td:first-child {\n pre {\n padding-right: 0;\n }\n }\n\n td:last-child {\n pre {\n padding-left: 0;\n }\n }\n }\n}", + "// Fonts\n$font-family-body: \"JetBrains Mono\", monospace;\n$font-family-mono: \"JetBrains Mono\", monospace;\n$font-family-tt: \"Inconsolata\", monospace;\n$font-size: 14px;\n$line-height: 1.725;\n$page-width: 48rem;\n// Logo\n$logo-width: 50px;\n$logo-height: 50px;\n$logo-grayout: true;\n// Colors\n$colors: \"dark\" // white dark light classic", + "$color-background: #1d1f21;\n$color-footer-mobile-1: lighten($color-background, 2%);\n$color-footer-mobile-2: lighten($color-background, 10%);\n$color-background-code: lighten($color-background, 2%);\n$color-border: #666;\n$color-meta: #666;\n$color-meta-code: #666;\n$color-link: rgba(212, 128, 170, 1);\n$color-text: #c9cacc;\n$color-accent-3: #cccccc;\n$color-accent-2: #eeeeee;\n$color-accent-1: #2bbc8a;\n$color-quote: #ccffb6;", + "/* Basscss */\n.inline {\n display: inline;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.table {\n display: table;\n}\n.table-cell {\n display: table-cell;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-scroll {\n overflow: scroll;\n}\n.overflow-auto {\n overflow: auto;\n}\n.clearfix:before,\n.clearfix:after {\n display: table;\n content: \" \";\n}\n.clearfix:after {\n clear: both;\n}\n.left {\n float: left;\n}\n.right {\n float: right;\n}\n.fit {\n max-width: 100%;\n}\n.truncate {\n display: inline-block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.max-width-1 {\n max-width: 24rem;\n}\n.max-width-2 {\n max-width: 32rem;\n}\n.max-width-3 {\n max-width: 48rem;\n}\n.max-width-4 {\n max-width: 64rem;\n}\n.border-box {\n box-sizing: border-box;\n}\n.m0 {\n margin: 0;\n}\n.mt0 {\n margin-top: 0;\n}\n.mr0 {\n margin-right: 0;\n}\n.mb0 {\n margin-bottom: 0;\n}\n.ml0 {\n margin-left: 0;\n}\n.mx0 {\n margin-right: 0;\n margin-left: 0;\n}\n.my0 {\n margin-top: 0;\n margin-bottom: 0;\n}\n.m1 {\n margin: .5rem;\n}\n.mt1 {\n margin-top: .5rem;\n}\n.mr1 {\n margin-right: .5rem;\n}\n.mb1 {\n margin-bottom: .5rem;\n}\n.ml1 {\n margin-left: .5rem;\n}\n.mx1 {\n margin-right: .5rem;\n margin-left: .5rem;\n}\n.my1 {\n margin-top: .5rem;\n margin-bottom: .5rem;\n}\n.m2 {\n margin: 1rem;\n}\n.mt2 {\n margin-top: 1rem;\n}\n.mr2 {\n margin-right: 1rem;\n}\n.mb2 {\n margin-bottom: 1rem;\n}\n.ml2 {\n margin-left: 1rem;\n}\n.mx2 {\n margin-right: 1rem;\n margin-left: 1rem;\n}\n.my2 {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.m3 {\n margin: 2rem;\n}\n.mt3 {\n margin-top: 2rem;\n}\n.mr3 {\n margin-right: 2rem;\n}\n.mb3 {\n margin-bottom: 2rem;\n}\n.ml3 {\n margin-left: 2rem;\n}\n.mx3 {\n margin-right: 2rem;\n margin-left: 2rem;\n}\n.my3 {\n margin-top: 2rem;\n margin-bottom: 2rem;\n}\n.m4 {\n margin: 4rem;\n}\n.mt4 {\n margin-top: 4rem;\n}\n.mr4 {\n margin-right: 4rem;\n}\n.mb4 {\n margin-bottom: 4rem;\n}\n.ml4 {\n margin-left: 4rem;\n}\n.mx4 {\n margin-right: 4rem;\n margin-left: 4rem;\n}\n.my4 {\n margin-top: 4rem;\n margin-bottom: 4rem;\n}\n.mxn1 {\n margin-right: -.5rem;\n margin-left: -.5rem;\n}\n.mxn2 {\n margin-right: -1rem;\n margin-left: -1rem;\n}\n.mxn3 {\n margin-right: -2rem;\n margin-left: -2rem;\n}\n.mxn4 {\n margin-right: -4rem;\n margin-left: -4rem;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mr-auto {\n margin-right: auto;\n}\n.mx-auto {\n margin-right: auto;\n margin-left: auto;\n}\n.p0 {\n padding: 0;\n}\n.pt0 {\n padding-top: 0;\n}\n.pr0 {\n padding-right: 0;\n}\n.pb0 {\n padding-bottom: 0;\n}\n.pl0 {\n padding-left: 0;\n}\n.px0 {\n padding-right: 0;\n padding-left: 0;\n}\n.py0 {\n padding-top: 0;\n padding-bottom: 0;\n}\n.p1 {\n padding: .5rem;\n}\n.pt1 {\n padding-top: .5rem;\n}\n.pr1 {\n padding-right: .5rem;\n}\n.pb1 {\n padding-bottom: .5rem;\n}\n.pl1 {\n padding-left: .5rem;\n}\n.py1 {\n padding-top: .5rem;\n padding-bottom: .5rem;\n}\n.px1 {\n padding-right: .5rem;\n padding-left: .5rem;\n}\n.p2 {\n padding: 1rem;\n}\n.pt2 {\n padding-top: 1rem;\n}\n.pr2 {\n padding-right: 1rem;\n}\n.pb2 {\n padding-bottom: 1rem;\n}\n.pl2 {\n padding-left: 1rem;\n}\n.py2 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.px2 {\n padding-right: 1rem;\n padding-left: 1rem;\n}\n.p3 {\n padding: 2rem;\n}\n.pt3 {\n padding-top: 2rem;\n}\n.pr3 {\n padding-right: 2rem;\n}\n.pb3 {\n padding-bottom: 2rem;\n}\n.pl3 {\n padding-left: 2rem;\n}\n.py3 {\n padding-top: 2rem;\n padding-bottom: 2rem;\n}\n.px3 {\n padding-right: 2rem;\n padding-left: 2rem;\n}\n.p4 {\n padding: 4rem;\n}\n.pt4 {\n padding-top: 4rem;\n}\n.pr4 {\n padding-right: 4rem;\n}\n.pb4 {\n padding-bottom: 4rem;\n}\n.pl4 {\n padding-left: 4rem;\n}\n.py4 {\n padding-top: 4rem;\n padding-bottom: 4rem;\n}\n.px4 {\n padding-right: 4rem;\n padding-left: 4rem;\n}", + "@mixin antialias() {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n}\n@mixin hyphens($value) {\n hyphens: $value;\n -moz-hyphens: $value;\n -ms-hyphens: $value;\n -webkit-hyphens: $value;\n}\n@mixin underline($size, $color) {\n background-image: linear-gradient(transparent, transparent $size, $color $size, $color);\n background-position: bottom;\n background-size: 100% 6px;\n background-repeat: repeat-x;\n}\n@mixin no-select() {\n user-select: none;\n -khtml-user-select: none;\n}", + "// $base-style\nh1,\n.h1 {\n display: block;\n margin-top: 3rem;\n margin-bottom: 1rem;\n color: $color-accent-1;\n letter-spacing: .01em;\n font-weight: 700;\n font-style: normal;\n font-size: 1.5em;\n\n @include antialias();\n}\nh2,\n.h2 {\n position: relative;\n display: block;\n margin-top: 2rem;\n margin-bottom: .5rem;\n color: $color-accent-2;\n text-transform: none;\n letter-spacing: normal;\n font-weight: bold;\n font-size: 1rem;\n}\nh3 {\n color: $color-accent-2;\n text-decoration: underline;\n font-weight: bold;\n font-size: .9rem;\n}\nh4\nh5\nh6 {\n display: inline;\n text-decoration: none;\n color: $color-accent-3;\n font-weight: bold;\n font-size: .9rem;\n}\nh3\nh4\nh5\nh6 {\n margin-top: .9rem;\n margin-bottom: .5rem;\n}\nhr {\n border: .5px dashed $color-accent-3;\n opacity: .5;\n margin: 0;\n margin-top: 20px;\n margin-bottom: 20px;\n}\nstrong {\n font-weight: bold;\n}\nem\ncite {\n font-style: italic;\n}\nsup\nsub {\n position: relative;\n vertical-align: baseline;\n font-size: .75em;\n line-height: 0;\n}\nsup {\n top: -.5em;\n}\nsub {\n bottom: -.2em;\n}\nsmall {\n font-size: .85em;\n}\nacronym\nabbr {\n border-bottom: 1px dotted;\n}\nul\nol\ndl {\n line-height: $line-height;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-top: 0;\n margin-bottom: 0;\n}\nol {\n list-style: decimal;\n}\ndt {\n font-weight: bold;\n}\ntable {\n width: 100%;\n border-collapse: collapse;\n text-align: left;\n font-size: $font-size - 2px;\n overflow: auto;\n display: block;\n}\nth {\n padding: 8px;\n border-bottom: 1px dashed $color-border;\n color: $color-accent-2;\n font-weight: bold;\n font-size: $font-size - 1px;\n}\ntd {\n padding: 0 8px;\n border-bottom: none;\n}", + "@font-face {\n font-style: normal;\n font-family: \"JetBrains Mono\";\n font-display: swap;\n src: local(\"JetBrains Mono\"), local(\"JetBrains-Mono\"), url(\"../lib/JetBrainsMono/web/woff2/JetBrainsMono-Regular.woff2\") format(\"woff2\"), url(\"../lib/JetBrainsMono/web/woff/JetBrainsMono-Regular.woff\") format(\"woff\"), url(\"../lib/JetBrainsMono/web/eot/JetBrainsMono-Regular.eot\") format(\"embedded-opentype\"), url(\"../lib/JetBrainsMono/ttf/JetBrainsMono-Regular.ttf\") format(\"truetype\");\n};", + "#header {\n margin: 0 auto 2rem;\n width: 100%;\n\n h1,\n .h1 {\n margin-top: 0;\n margin-bottom: 0;\n color: $color-text;\n letter-spacing: .01em;\n font-weight: 700;\n font-style: normal;\n font-size: 1.5rem;\n line-height: 2rem;\n\n @include antialias();\n }\n a {\n background: none;\n color: inherit;\n text-decoration: none;\n }\n #logo {\n display: inline-block;\n float: left;\n margin-right: 20px;\n width: $logo-width;\n height: $logo-height;\n border-radius: 5px;\n background-size: $logo-width $logo-height;\n background-repeat: no-repeat;\n @if $logo-grayout {\n filter: grayscale(100%);\n -webkit-filter: grayscale(100%);\n }\n }\n #nav {\n color: $color-accent-1;\n letter-spacing: .01em;\n font-weight: 200;\n font-style: normal;\n font-size: .8rem;\n\n ul {\n margin: 0;\n padding: 0;\n list-style-type: none;\n line-height: 15px;\n\n a {\n margin-right: 15px;\n color: $color-accent-1;\n }\n a:hover {\n @include underline(5px, $color-accent-1);\n }\n li {\n display: inline-block;\n margin-right: 15px;\n border-right: 1px dotted;\n border-color: $color-accent-1;\n vertical-align: middle;\n }\n .icon {\n display: none;\n }\n li:last-child {\n margin-right: 0;\n border-right: 0;\n\n a {\n margin-right: 0;\n }\n }\n }\n }\n}\n@if $logo-grayout {\n #header:hover {\n #logo {\n filter: none;\n -webkit-filter: none;\n }\n }\n}\n@media screen and (max-width: 480px) {\n #header #title {\n display: table;\n margin-right: 5rem;\n min-height: $logo-height;\n h1 {\n display: table-cell;\n vertical-align: middle;\n }\n }\n #header #nav {\n ul {\n a:hover {\n background: none;\n }\n li {\n display: none;\n border-right: 0;\n }\n li.icon {\n position: absolute;\n top: 77px;\n right: 1rem;\n display: inline-block;\n }\n }\n ul.responsive {\n li {\n display: block;\n }\n }\n li:not(:first-child) {\n padding-top: 1rem;\n padding-left: $logo-width + 20px;\n font-size: 1rem;\n }\n }\n};", + "#header-post {\n position: fixed;\n top: 2rem;\n right: 0;\n display: inline-block;\n float: right;\n z-index: 100;\n\n a {\n background: none;\n color: inherit;\n text-decoration: none;\n }\n a.icon {\n background: none;\n\n &:hover {\n color: $color-link;\n }\n }\n nav {\n ul {\n display: block;\n\n list-style-image: none;\n\n list-style-position: outside;\n\n list-style-type: none;\n\n padding-inline-start: 40px;\n\n li {\n display: list-item;\n\n margin-right: 0px;\n }\n }\n }\n nav > ul {\n margin-block-end: 1em;\n\n margin-block-start: 1em;\n }\n\n ul {\n display: inline-block;\n margin: 0;\n padding: 0;\n list-style-type: none;\n\n li {\n display: inline-block;\n margin-right: 15px;\n vertical-align: middle;\n }\n li:last-child {\n margin-right: 0;\n }\n }\n #menu-icon {\n float: right;\n margin-right: 2rem;\n margin-left: 15px;\n\n &:hover {\n color: $color-accent-1;\n }\n }\n #menu-icon-tablet {\n float: right;\n margin-right: 2rem;\n margin-left: 15px;\n\n &:hover {\n color: $color-accent-1;\n }\n }\n #top-icon-tablet {\n position: fixed;\n right: 2rem;\n bottom: 2rem;\n margin-right: 2rem;\n margin-left: 15px;\n\n &:hover {\n color: $color-accent-1;\n }\n }\n .active {\n color: $color-accent-1;\n }\n #menu {\n visibility: hidden;\n margin-right: 2rem;\n }\n #nav {\n color: $color-accent-1;\n letter-spacing: .01em;\n font-weight: 200;\n font-style: normal;\n font-size: .8rem;\n\n ul {\n line-height: 15px;\n\n a {\n margin-right: 15px;\n color: $color-accent-1;\n }\n a:hover {\n @include underline(5px, $color-accent-1);\n }\n li {\n border-right: 1px dotted $color-accent-1;\n }\n li:last-child {\n margin-right: 0;\n border-right: 0;\n\n a {\n margin-right: 0;\n }\n }\n }\n }\n #actions {\n float: right;\n margin-top: 2rem;\n margin-right: 2rem;\n width: 100%;\n text-align: right;\n\n ul {\n display: block;\n }\n .info {\n display: block;\n font-style: italic;\n }\n }\n #share {\n clear: both;\n padding-top: 1rem;\n padding-right: 2rem;\n text-align: right;\n\n li {\n display: block;\n margin: 0;\n }\n }\n #toc {\n float: right;\n clear: both;\n overflow: auto;\n margin-top: 1rem;\n padding-right: 2rem;\n max-width: 20em;\n max-height: calc(95vh - 7rem);\n text-align: right;\n\n a:hover {\n color: $color-link;\n }\n // .toc-level-1 > .toc-link\n // display: none\n\n nav > ul > li {\n color: $color-text;\n font-size: .8rem;\n\n &:before {\n color: $color-accent-1;\n content: \"#\";\n margin-right: 8px;\n }\n }\n nav > ul > li > ul > li {\n color: $color-meta;\n font-size: .7rem;\n\n &:before {\n color: $color-accent-1;\n content: \"·\";\n font-weight: bold;\n margin-right: 3px;\n }\n }\n nav > ul > li > ul > li > ul > li {\n color: darken($color-meta, 20%);\n font-size: .4rem;\n }\n .toc-level-5 {\n display: none;\n }\n .toc-level-6 {\n display: none;\n }\n .toc-number {\n display: none;\n }\n// smartphone + phapblet\n }\n}\n@media screen and (max-width: 500px) {\n #header-post {\n display: none;\n }\n}\n\n@media screen and (max-width: 900px) {\n #header-post {\n #menu-icon {\n display: none;\n }\n #actions {\n display: none;\n }\n }\n}\n@media screen and (max-width: 1199px) {\n #header-post {\n #toc {\n display: none;\n }\n }\n}\n@media screen and (min-width: 900px) {\n #header-post {\n #menu-icon-tablet {\n display: none !important;\n }\n #top-icon-tablet {\n display: none !important;\n }\n }\n}\n@media screen and (min-width: 1199px) {\n #header-post {\n #actions {\n width: auto;\n\n ul {\n display: inline-block;\n float: right;\n }\n .info {\n display: inline;\n float: left;\n margin-right: 2rem;\n font-style: italic;\n }\n }\n }\n};", + "#footer-post {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 5000000;\n width: 100%;\n border-top: 1px solid $color-border;\n background: $color-footer-mobile-1;\n transition: opacity .2s;\n\n a {\n background: none;\n color: inherit;\n text-decoration: none;\n }\n a.icon {\n background: none;\n\n &:hover {\n color: $color-link;\n }\n }\n #nav-footer {\n padding-right: 1rem;\n padding-left: 1rem;\n background: $color-footer-mobile-2;\n text-align: center;\n\n a {\n color: $color-accent-1;\n font-size: 1em;\n }\n a:hover {\n @include underline(5px, $color-accent-1);\n }\n ul {\n display: table;\n margin: 0;\n padding: 0;\n width: 100%;\n list-style-type: none;\n\n li {\n display: inline-table;\n padding: 10px;\n width: 20%;\n vertical-align: middle;\n }\n }\n }\n #actions-footer {\n overflow: auto;\n margin-top: 1rem;\n margin-bottom: 1rem;\n padding-right: 1rem;\n padding-left: 1rem;\n width: 100%;\n text-align: center;\n white-space: nowrap;\n\n a {\n display: inline-block;\n padding-left: 1rem;\n color: $color-accent-1;\n }\n }\n #share-footer {\n padding-right: 1rem;\n padding-left: 1rem;\n background: $color-footer-mobile-2;\n text-align: center;\n\n ul {\n display: table;\n margin: 0;\n padding: 0;\n width: 100%;\n list-style-type: none;\n\n li {\n display: inline-table;\n padding: 10px;\n width: 20%;\n vertical-align: middle;\n }\n }\n }\n #toc-footer {\n clear: both;\n padding-top: 1rem;\n padding-bottom: 1rem;\n background: $color-footer-mobile-2;\n text-align: left;\n\n #TableOfContents {\n ul {\n margin: 0;\n padding-left: 20px;\n list-style-type: none;\n\n li {\n line-height: 30px;\n }\n }\n }\n a:hover {\n color: $color-link;\n }\n // .toc-level-1 > .toc-link\n // display: none\n\n #TableOfContents > ul > li {\n color: $color-text;\n font-size: .8rem;\n\n &:before {\n color: $color-accent-1;\n content: \"#\";\n margin-right: 8px;\n }\n }\n #TableOfContents > ul > li > ul > li {\n color: $color-meta;\n font-size: .7rem;\n line-height: 15px;\n\n &:before {\n color: $color-accent-1;\n content: \"·\";\n\n font-weight: bold;\n\n margin-right: 3px;\n }\n }\n #TableOfContents > ul > li > ul > li > ul > li {\n display: none;\n }\n // .toc-level-5\n // display: none\n\n // .toc-level-6\n // display: none\n\n // .toc-number\n // display: none\n }\n}\n@media screen and (min-width: 500px) {\n #footer-post-container {\n display: none;\n }\n};", + ".post-list {\n padding: 0;\n\n .post-item {\n margin-bottom: 1rem;\n margin-left: 0;\n list-style-type: none;\n\n .meta {\n display: block;\n margin-right: 16px;\n min-width: 100px;\n color: $color-meta;\n font-size: 14px;\n }\n }\n}\n@media (min-width: 480px) {\n .post-list {\n .post-item {\n display: flex;\n margin-bottom: 5px;\n\n .meta {\n text-align: left;\n }\n }\n }\n}\n.project-list {\n padding: 0;\n list-style: none;\n\n .project-item {\n margin-bottom: 5px;\n p {\n display: inline;\n }\n }\n}", + "article {\n header {\n .posttitle {\n margin-top: 0;\n margin-bottom: 0;\n text-transform: none;\n font-size: 1.5em;\n line-height: 1.25;\n }\n .meta {\n margin-top: 0;\n margin-bottom: 1rem;\n }\n .meta * {\n color: $color-accent-3;\n font-size: .85rem;\n }\n .author {\n text-transform: uppercase;\n letter-spacing: .01em;\n font-weight: 700;\n }\n .postdate {\n display: inline;\n }\n }\n .content {\n h2 {\n &:before {\n position: absolute;\n top: -4px;\n left: -1rem;\n color: $color-accent-1;\n content: \"#\";\n font-weight: bold;\n font-size: 1.2rem;\n }\n }\n }\n .content img,\n .content video {\n display: block;\n margin: auto;\n max-width: 100%;\n height: auto;\n\n /* http://webdesignerwall.com/tutorials/css-elastic-videos */\n .video-container {\n position: relative;\n overflow: hidden;\n padding-top: 56.25% e;\n // (9/16 * 100)% // 16:9 ratio\n height: 0;\n\n iframe,\n object,\n embed {\n position: absolute;\n top: 0;\n left: 0;\n margin-top: 0;\n width: 100%;\n height: 100%;\n }\n }\n blockquote {\n margin: 1rem 10px;\n padding: .5em 10px;\n background: inherit;\n color: $color-quote;\n quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n font-weight: bold;\n\n p {\n margin: 0;\n }\n &:before {\n margin-right: .25em;\n color: $color-quote;\n content: \"\\201C\";\n vertical-align: -.4em;\n font-size: 2em;\n line-height: .1em;\n }\n footer {\n margin: line-height 0;\n color: $color-meta;\n font-size: 11px;\n\n a {\n background-image: linear-gradient(transparent, transparent 5px, $color-meta 5px, $color-meta);\n color: $color-meta;\n }\n a:hover {\n background-image: linear-gradient(transparent, transparent 4px, lighten($color-meta, 20%) 4px, lighten($color-meta, 20%));\n color: lighten($color-meta, 20%);\n }\n cite {\n &:before {\n padding: 0 .5em;\n content: \"—\";\n }\n }\n }\n }\n .pullquote {\n margin: 0;\n width: 45%;\n text-align: left;\n\n &.left {\n margin-right: 1em;\n margin-left: .5em;\n }\n &.right {\n margin-right: .5em;\n margin-left: 1em;\n }\n }\n .caption {\n position: relative;\n display: block;\n margin-top: .5em;\n color: $color-meta;\n text-align: center;\n font-size: .9em;\n }\n }\n}\n.posttitle {\n text-transform: none;\n font-size: 1.5em;\n line-height: 1.25;\n}\n.article-tag {\n .tag-link {\n &:before {\n content: \"#\";\n @include underline(10px, $color-link);\n }\n }\n}\n.article-category {\n .category-link {\n @include underline(10px, $color-link);\n }\n}\n@media (min-width: 480px) {\n .article-read-time,\n .article-tag,\n .article-category {\n display: inline;\n\n &:before {\n content: \"|\";\n }\n }\n};", + "#archive {\n .post-list {\n padding: 0;\n\n .post-item {\n margin-bottom: 1rem;\n margin-left: 0;\n list-style-type: none;\n\n .meta {\n display: block;\n margin-right: 16px;\n min-width: 100px;\n color: $color-meta;\n font-size: 14px;\n }\n }\n }\n @media (min-width: 480px) {\n .post-list {\n .post-item {\n display: flex;\n margin-bottom: 5px;\n margin-left: 1rem;\n\n .meta {\n text-align: left;\n }\n }\n }\n }\n}", + ".blog-post-comments {\n margin-top: 4rem;\n}", + "#footer {\n position: absolute;\n bottom: 0;\n margin-bottom: 10px;\n width: 100%;\n color: $color-meta;\n vertical-align: top;\n text-align: center;\n font-size: 11px;\n\n ul {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n li {\n display: inline-block;\n margin-right: 15px;\n border-right: 1px solid;\n border-color: $color-border;\n vertical-align: middle;\n\n a {\n margin-right: 15px;\n }\n }\n li:last-child {\n margin-right: 0;\n border-right: 0;\n\n a {\n margin-right: 0;\n }\n }\n a {\n color: $color-meta;\n text-decoration: underline;\n background-image: none;\n }\n a:hover {\n color: lighten($color-meta, 20%);\n }\n .footer-left {\n height: 20px;\n vertical-align: middle;\n line-height: 20px;\n }\n}\n@media (min-width: 39rem) {\n #footer {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n align-items: center;\n align-content: center;\n margin-bottom: 20px;\n\n .footer-left {\n align-self: flex-start;\n margin-right: 20px;\n }\n .footer-right {\n align-self: flex-end;\n }\n }\n};", + ".pagination {\n display: inline-block;\n margin-top: 2rem;\n width: 100%;\n text-align: center;\n\n .page-number {\n color: $color-text;\n font-size: .8rem;\n }\n a {\n padding: 4px 6px;\n border-radius: 5px;\n // background-color: $color-accent-1\n background-image: none;\n color: $color-text;\n text-decoration: none;\n }\n a:hover {\n background-image: none;\n }\n a:hover:not(.active) {\n color: $color-accent-2;\n }\n}", + ".search-input {\n padding: 4px 7px;\n width: 100%;\n outline: none;\n border: solid 1px $color-accent-3;\n border-radius: 5px;\n background-color: $color-background;\n color: $color-text;\n font-size: 1.2rem;\n -webkit-border-radius: 5px;\n -moz-border-radius: 5px;\n\n &:focus {\n border: solid 1px $color-accent-1;\n }\n}\n#search-result {\n ul.search-result-list {\n padding: 0;\n list-style-type: none;\n }\n li {\n margin: 2em auto;\n }\n a.search-result-title {\n background-image: none;\n color: $color-text;\n text-transform: capitalize;\n font-weight: bold;\n line-height: 1.2;\n }\n p.search-result {\n overflow: hidden;\n margin: .4em auto;\n max-height: 13em;\n text-align: justify;\n font-size: .8em;\n }\n em.search-keyword {\n border-bottom: 1px dashed $color-link;\n color: $color-link;\n font-weight: bold;\n }\n}\n.search-no-result {\n display: none;\n padding-bottom: .5em;\n color: $color-text;\n}", + "#tag-cloud {\n .tag-cloud-title {\n color: $color-meta;\n }\n .tag-cloud-tags {\n clear: both;\n text-align: center;\n a {\n display: inline-block;\n margin: 10px;\n }\n }\n}", + "// ref: https://github.com/primer/primer/blob/master/modules/primer-tooltips/lib/tooltips.scss\n.tooltipped {\n position: relative;\n} \n// This is the tooltip bubble\n.tooltipped::after {\n position: absolute;\n z-index: 1000000;\n display: none;\n padding: .2em .5em;\n -webkit-font-smoothing: subpixel-antialiased;\n color: $color-background;\n font-display: swap;\n font-weight: 400;\n font-size: $font-size * 0.8;\n font-family: $font-family-body;\n line-height: $line-height;\n text-rendering: geometricPrecision;\n text-align: center;\n word-wrap: break-word;\n white-space: pre;\n content: attr(aria-label);\n background: $color-text;\n border-radius: 3px;\n opacity: 0;\n} \n// This is the tooltip arrow\n.tooltipped::before {\n position: absolute;\n z-index: 1000001;\n display: none;\n width: 0;\n height: 0;\n color: $color-text;\n pointer-events: none;\n content: '';\n border: 6px solid transparent;\n opacity: 0;\n} \n// delay animation for tooltip\n@keyframes tooltip-appear {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n};\n \n// This will indicate when we'll activate the tooltip\n.tooltipped:hover,\n.tooltipped:active,\n.tooltipped:focus {\n &::before,\n &::after {\n display: inline-block;\n text-decoration: none;\n animation-name: tooltip-appear;\n animation-duration: 0.1s;\n animation-fill-mode: forwards;\n animation-timing-function: ease-in;\n } \n// Tooltipped south\n}\n.tooltipped-s,\n.tooltipped-sw {\n &::after {\n top: 100%;\n right: 50%;\n margin-top: 6px;\n }\n &::before {\n top: auto;\n right: 50%;\n bottom: -7px;\n margin-right: -6px;\n border-bottom-color: $color-text;\n }\n}\n.tooltipped-sw::after {\n margin-right: -16px;\n} \n// Move the tooltip body to the center of the object.\n.tooltipped-s::after {\n transform: translateX(50%);\n}", + "#categories {\n .category-list-title {\n color: $color-meta;\n }\n .category-list {\n .category-list-item {\n .category-list-count {\n color: $color-meta;\n }\n .category-list-count:before {\n content: \" (\";\n }\n .category-list-count:after {\n content: \")\";\n }\n }\n }\n}" + ], + "names": [], + "mappings": "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" +} \ No newline at end of file diff --git a/public/drafts/2021-05-08-solid-with-examples/index.html b/public/drafts/2021-05-08-solid-with-examples/index.html new file mode 100644 index 0000000..9a82a0f --- /dev/null +++ b/public/drafts/2021-05-08-solid-with-examples/index.html @@ -0,0 +1,297 @@ + + + + + + + + + + + S.O.L.I.D. with examples | Daniel Jr | Backend Developer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ +
+ +

S.O.L.I.D. with examples

+

S)ingle Responsibility Principle

+

A class should have one, and only one, reason to change. +A class should have a single responsibility within the software.

+

Bad Example:

+
1class User {
+2    fun save() {
+3        // Logic to save user to the database
+4    }
+5
+6    fun sendEmail() {
+7        // Logic to send email to the user
+8    }
+9}
+

Good Example:

+
 1class User {
+ 2    fun save() {
+ 3        // Logic to save user to the database
+ 4    }
+ 5}
+ 6
+ 7class EmailService {
+ 8    fun sendEmail(user: User) {
+ 9        // Logic to send email to the user
+10    }
+11}
+

O)pen Closed Principle

+

You should be able to extend a class’s behavior without modifying it. +Objects should be open for extension but closed for modification.

+

Bad Example:

+
 1class Rectangle(val width: Double, val height: Double) {
+ 2    fun area(): Double {
+ 3        return width * height
+ 4    }
+ 5}
+ 6
+ 7class Circle(val radius: Double) {
+ 8    fun area(): Double {
+ 9        return Math.PI * radius * radius
+10    }
+11}
+

Good Example:

+
 1interface Shape {
+ 2    fun area(): Double
+ 3}
+ 4
+ 5class Rectangle(val width: Double, val height: Double) : Shape {
+ 6    override fun area(): Double {
+ 7        return width * height
+ 8    }
+ 9}
+10
+11class Circle(val radius: Double) : Shape {
+12    override fun area(): Double {
+13        return Math.PI * radius * radius
+14    }
+15}
+

L)iskov Substitution Principle

+

Derived classes should be substitutable for their base classes. +The Liskov Substitution Principle was introduced by Barbara Liskov in 1987: +“If for every object o1 of type S there is an object o2 of type T such that for all programs P, the behavior of P is unchanged when o1 is substituted by o2, then S is a subtype of T.”

+

Bad Example:

+
 1open class Bird {
+ 2    open fun fly() {
+ 3        println("Flying")
+ 4    }
+ 5}
+ 6
+ 7class Ostrich : Bird() {
+ 8    override fun fly() {
+ 9        throw Exception("Ostriches can't fly")
+10    }
+11}
+

Good Example:

+
 1open class Bird {
+ 2    open fun makeSound() {
+ 3        println("Chirp")
+ 4    }
+ 5}
+ 6
+ 7class Sparrow : Bird() {
+ 8    override fun makeSound() {
+ 9        println("Chirp chirp")
+10    }
+11}
+12
+13class Ostrich : Bird() {
+14    override fun makeSound() {
+15        println("Hiss")
+16    }
+17}
+

I)nterface Segregation Principle

+

Make interfaces that are client-specific. +A class should not be forced to implement interfaces and methods that will not be used.

+

Bad Example:

+
 1interface Machine {
+ 2    fun print()
+ 3    fun scan()
+ 4    fun fax()
+ 5}
+ 6
+ 7class Printer : Machine {
+ 8    override fun print() {
+ 9        // Logic to print
+10    }
+11
+12    override fun scan() {
+13        throw UnsupportedOperationException("Printer cannot scan")
+14    }
+15
+16    override fun fax() {
+17        throw UnsupportedOperationException("Printer cannot fax")
+18    }
+19}
+

Good Example:

+
 1interface Printer {
+ 2    fun print()
+ 3}
+ 4
+ 5interface Scanner {
+ 6    fun scan()
+ 7}
+ 8
+ 9class SimplePrinter : Printer {
+10    override fun print() {
+11        // Logic to print
+12    }
+13}
+14
+15class MultiFunctionPrinter : Printer, Scanner {
+16    override fun print() {
+17        // Logic to print
+18    }
+19
+20    override fun scan() {
+21        // Logic to scan
+22    }
+23}
+

D)ependency Inversion Principle

+

Depend on abstractions, not on concretions. +A high-level module should not depend on low-level modules; both should depend on abstractions.

+

Bad Example:

+
 1class EmailService {
+ 2    fun sendEmail(message: String) {
+ 3        // Logic to send email
+ 4    }
+ 5}
+ 6
+ 7class Notification {
+ 8    private val emailService = EmailService()
+ 9
+10    fun notify(message: String) {
+11        emailService.sendEmail(message)
+12    }
+13}
+

Good Example:

+
 1interface MessageSender {
+ 2    fun send(message: String)
+ 3}
+ 4
+ 5class EmailService : MessageSender {
+ 6    override fun send(message: String) {
+ 7        // Logic to send email
+ 8    }
+ 9}
+10
+11class Notification(private val sender: MessageSender) {
+12    fun notify(message: String) {
+13        sender.send(message)
+14    }
+15}
+16
+17// Usage
+18val emailService = EmailService()
+19val notification = Notification(emailService)
+20notification.notify("Hello, World!")
+
+ +
+
+ + +
+ + +
+ + +
+ + + + + + diff --git a/public/drafts/2023-11-10-solidity-web3-js/index.html b/public/drafts/2023-11-10-solidity-web3-js/index.html new file mode 100644 index 0000000..439072d --- /dev/null +++ b/public/drafts/2023-11-10-solidity-web3-js/index.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Blockchain Basics | Daniel Jr | Backend Developer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ +
+ +

Blockchain Basics

+

From Here

+

Smart contracts are an agreement, contract or set of instructions that executes in a decentralized way without the need for a centralized or third party intermediary.

+

Blockchain Oracle: Any device that interacts with the off-chain world to provide external data or computation to smart contracts. +Hybrid Smart Contracts: On-Chain + Off-Chain Agreements.

+

Smart Contracts do trust minimized agreements that cannot be broke.

+
    +
  • Cannot be altered (immutable)
  • +
  • Automatically executes
  • +
  • Everyone sees the terms of agreement
  • +
+

UNBREAKABLE AGREEMENTS +and much more.

+
    +
  1. Decentralized
  2. +
  3. Transparency
  4. +
  5. Speed
  6. +
  7. Security
  8. +
  9. Remove counterpart risk
  10. +
  11. True trust minimized agreements
  12. +
+

DeFi → Decentralized Finances +DAO → Decentralized Autonomous Organizations +NFT → Not Fungible Token

+

Your First Transaction

+
    +
  1. Set up a wallet with Metamask
  2. +
  3. We can see details with the Etherscan
  4. +
+
    +
  • Mnemonic → can access all of your accounts.
  • +
  • Private Key → can access 1 of your accounts.
  • +
  • Public Key → can access nothing.
  • +
+
    +
  1. Connect and get ETH for test in Faucets
  2. +
+

Gas I: Introduction to Gas

+

When we make transactions, the miners or validators make a small fee related to the gas. +Gas: A unit of computational measurement. The more complex your transaction is the more gas you have to pay.

+

Transaction Fee = Gas Price * How much Gas used.

+

How Blockchain Works

+

Block: A block of data encrypted in some hash (e. g. Sha256) with code (named nonce) to validate the block and hash validated that must start with 4 zeros. +Blockchain: Each block has an prev hash that refer to previous block in the chain. +Genesis Block: The first block in a blockchain.

+

When a block is edited, broke all the next blocks. Then all the blocks need to be mine again. +After mine all this blocks, this blockchain is different from all the others in the decentralized net so it is discarted.

+

Mining: The process of finding the solution to the blockchain problem. +In our example, the problem was to find a hash that starts with four zeros. +Nodes get paid for mining blocks.

+

Private Key: Key used to sign an transaction. +Public Key: Key used to validate an signed transaction.

+

Gas II: Block Rewards & EIP 1550

+

Base Fee: Minimum gas price to send your transaction.

+

EIP (Etherium Improvement Proposals): The comon way of requesting changes to etherium network.

+

High-level blockchain fundamentals.

+

Node: A single instance in a decentralized network.

+

Anybody can run an Etherium node easily. +Blockchain nodes keep lists the transactions that ocur.

+

Consensus is the mechanism used to agree on the state of a blockchain. And it can be broke in two parts:

+
    +
  1. Chain Selection Algorithm: using Nakamoto Consensus, the longest chain is selected.
  2. +
  3. Sybil Resistance Mechanism: is a blockchain ability to defend against users creating a large number of pseudo anonymous identities to gain a disproportionately advantageous influence over the set system.
  4. +
+
    +
  • Proof of Work: the problem that need to be solved. It can be more hard and expensive depending to block time need to be. The gas fee is paid to the miner that resolve the transaction.
  • +
  • Proof of Stake: it randomly choose and validator in the network. the gas fee is paid for validator, not miners.
  • +
+

Block Confirmations: the number of confirmations is the number of blocks added on after our transaction.

+

Sharding: sharded blockchain is an blockchain of blockchains. Is a main chain that is going to coordinate everything. Can be an solutions to scalability problem when an chain has to much transactions. +Layer 1: Base layer implementation. +Layer 2: Any application build on top of a layer 1. +Roll Ups: chains in the layer 2 that send (roll up) their transactions to layer 1.

+

Attacks:

+
    +
  • Sybil Attack: when a user creates a whole bunch of pseudo anonymous account to try to influence the network.
  • +
  • 51% Attack: when a user, or a group of users, creates an chain that is longer of all others.
  • +
+

Welcome to Remix! Simple Storage

+

Solidity is the primary smart contract coding language.

+

Contract is an keyword to define the start of an contract in code.

+

Coding an contract:

+
    +
  1. Goto Remix Etherium IDE
  2. +
  3. Init an project with an Solidity (.sol) file.
  4. +
  5. Set solidity version. Ex.:
  6. +
+
    +
  • pragma solidity 0.8.7; to set 0.8.7 version.
  • +
  • pragma solidity ^0.8.7; to set an version above 0.8.7.
  • +
  • pragma solidity >=0.8.7 < 0.9.0; to set an version between 0.8.7 and 0.9.
  • +
+
    +
  1. Put spdx licence on top of code.
  2. +
  3. Define an contract with the keyword contract in the code. Contract in solidity is similar with +Classes like in any other object-oriented languages. Ex.:
  4. +
+
    +
  • contract SimpleStorage {}. create an contract named SimpleStorage with no one content.
  • +
+

Solidity Types:

+

The concept of “undefined” or “null” values does not exist in Solidity, but newly declared +variables always have a default value dependent on its type.

+
+

Any time you change something on-chain, including making a new contract, it happens in a +transaction.

+
+ + +
+
+ + +
+ + +
+ + +
+ + + + + + diff --git a/public/drafts/explaining-solid/index.html b/public/drafts/explaining-solid/index.html new file mode 100644 index 0000000..6c5fe25 --- /dev/null +++ b/public/drafts/explaining-solid/index.html @@ -0,0 +1,297 @@ + + + + + + + + + + + S.O.L.I.D. with examples | Daniel Jr | Backend Developer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ +
+ +

S.O.L.I.D. with examples

+

S)ingle Responsibility Principle

+

A class should have one, and only one, reason to change. +A class should have a single responsibility within the software.

+

Bad Example:

+
1class User {
+2    fun save() {
+3        // Logic to save user to the database
+4    }
+5
+6    fun sendEmail() {
+7        // Logic to send email to the user
+8    }
+9}
+

Good Example:

+
 1class User {
+ 2    fun save() {
+ 3        // Logic to save user to the database
+ 4    }
+ 5}
+ 6
+ 7class EmailService {
+ 8    fun sendEmail(user: User) {
+ 9        // Logic to send email to the user
+10    }
+11}
+

O)pen Closed Principle

+

You should be able to extend a class’s behavior without modifying it. +Objects should be open for extension but closed for modification.

+

Bad Example:

+
 1class Rectangle(val width: Double, val height: Double) {
+ 2    fun area(): Double {
+ 3        return width * height
+ 4    }
+ 5}
+ 6
+ 7class Circle(val radius: Double) {
+ 8    fun area(): Double {
+ 9        return Math.PI * radius * radius
+10    }
+11}
+

Good Example:

+
 1interface Shape {
+ 2    fun area(): Double
+ 3}
+ 4
+ 5class Rectangle(val width: Double, val height: Double) : Shape {
+ 6    override fun area(): Double {
+ 7        return width * height
+ 8    }
+ 9}
+10
+11class Circle(val radius: Double) : Shape {
+12    override fun area(): Double {
+13        return Math.PI * radius * radius
+14    }
+15}
+

L)iskov Substitution Principle

+

Derived classes should be substitutable for their base classes. +The Liskov Substitution Principle was introduced by Barbara Liskov in 1987: +“If for every object o1 of type S there is an object o2 of type T such that for all programs P, the behavior of P is unchanged when o1 is substituted by o2, then S is a subtype of T.”

+

Bad Example:

+
 1open class Bird {
+ 2    open fun fly() {
+ 3        println("Flying")
+ 4    }
+ 5}
+ 6
+ 7class Ostrich : Bird() {
+ 8    override fun fly() {
+ 9        throw Exception("Ostriches can't fly")
+10    }
+11}
+

Good Example:

+
 1open class Bird {
+ 2    open fun makeSound() {
+ 3        println("Chirp")
+ 4    }
+ 5}
+ 6
+ 7class Sparrow : Bird() {
+ 8    override fun makeSound() {
+ 9        println("Chirp chirp")
+10    }
+11}
+12
+13class Ostrich : Bird() {
+14    override fun makeSound() {
+15        println("Hiss")
+16    }
+17}
+

I)nterface Segregation Principle

+

Make interfaces that are client-specific. +A class should not be forced to implement interfaces and methods that will not be used.

+

Bad Example:

+
 1interface Machine {
+ 2    fun print()
+ 3    fun scan()
+ 4    fun fax()
+ 5}
+ 6
+ 7class Printer : Machine {
+ 8    override fun print() {
+ 9        // Logic to print
+10    }
+11
+12    override fun scan() {
+13        throw UnsupportedOperationException("Printer cannot scan")
+14    }
+15
+16    override fun fax() {
+17        throw UnsupportedOperationException("Printer cannot fax")
+18    }
+19}
+

Good Example:

+
 1interface Printer {
+ 2    fun print()
+ 3}
+ 4
+ 5interface Scanner {
+ 6    fun scan()
+ 7}
+ 8
+ 9class SimplePrinter : Printer {
+10    override fun print() {
+11        // Logic to print
+12    }
+13}
+14
+15class MultiFunctionPrinter : Printer, Scanner {
+16    override fun print() {
+17        // Logic to print
+18    }
+19
+20    override fun scan() {
+21        // Logic to scan
+22    }
+23}
+

D)ependency Inversion Principle

+

Depend on abstractions, not on concretions. +A high-level module should not depend on low-level modules; both should depend on abstractions.

+

Bad Example:

+
 1class EmailService {
+ 2    fun sendEmail(message: String) {
+ 3        // Logic to send email
+ 4    }
+ 5}
+ 6
+ 7class Notification {
+ 8    private val emailService = EmailService()
+ 9
+10    fun notify(message: String) {
+11        emailService.sendEmail(message)
+12    }
+13}
+

Good Example:

+
 1interface MessageSender {
+ 2    fun send(message: String)
+ 3}
+ 4
+ 5class EmailService : MessageSender {
+ 6    override fun send(message: String) {
+ 7        // Logic to send email
+ 8    }
+ 9}
+10
+11class Notification(private val sender: MessageSender) {
+12    fun notify(message: String) {
+13        sender.send(message)
+14    }
+15}
+16
+17// Usage
+18val emailService = EmailService()
+19val notification = Notification(emailService)
+20notification.notify("Hello, World!")
+
+ +
+
+ + +
+ + +
+ + +
+ + + + + + diff --git a/public/drafts/index.html b/public/drafts/index.html new file mode 100644 index 0000000..d2d3411 --- /dev/null +++ b/public/drafts/index.html @@ -0,0 +1,144 @@ + + + + + + + + + + + Daniel Jr | Backend Developer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + +
+ + +
+ + +
+ + + + + + diff --git a/public/drafts/index.xml b/public/drafts/index.xml new file mode 100644 index 0000000..baba233 --- /dev/null +++ b/public/drafts/index.xml @@ -0,0 +1,27 @@ + + + + Drafts on Daniel Jr | Backend Developer + http://localhost:1313/drafts/ + Recent content in Drafts on Daniel Jr | Backend Developer + Hugo + en-us + Me + Fri, 10 Nov 2023 12:21:32 +0000 + + + Blockchain Basics + http://localhost:1313/drafts/2023-11-10-solidity-web3-js/ + Fri, 10 Nov 2023 12:21:32 +0000 + http://localhost:1313/drafts/2023-11-10-solidity-web3-js/ + <h1 id="blockchain-basics">Blockchain Basics</h1> <p><a href="https://github.com/smartcontractkit/full-blockchain-solidity-course-js">From Here</a></p> <p>Smart contracts are an agreement, contract or set of instructions that executes in a decentralized way without the need for a centralized or third party intermediary.</p> <p><strong>Blockchain Oracle</strong>: Any device that interacts with the off-chain world to provide external data or computation to smart contracts. <strong>Hybrid Smart Contracts</strong>: On-Chain + Off-Chain Agreements.</p> <p>Smart Contracts do trust minimized agreements that cannot be broke.</p> <ul> <li>Cannot be altered (immutable)</li> <li>Automatically executes</li> <li>Everyone sees the terms of agreement</li> </ul> <p>UNBREAKABLE AGREEMENTS and much more.</p> + + + S.O.L.I.D. with examples + http://localhost:1313/drafts/2021-05-08-solid-with-examples/ + Sat, 08 May 2021 16:56:54 +0000 + http://localhost:1313/drafts/2021-05-08-solid-with-examples/ + <h1 id="solid-with-examples">S.O.L.I.D. with examples</h1> <h3 id="single-responsibility-principle">S)ingle Responsibility Principle</h3> <p><em>A class should have one, and only one, reason to change.</em> A class should have a single responsibility within the software.</p> <p>Bad Example:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-kotlin" data-lang="kotlin"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span><span style="color:#ff79c6">class</span> <span style="color:#50fa7b">User</span> { </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span> <span style="color:#ff79c6">fun</span> <span style="color:#50fa7b">save</span>() { </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span> <span style="color:#6272a4">// Logic to save user to the database </span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span><span style="color:#6272a4"></span> } </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5</span><span> </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6</span><span> <span style="color:#ff79c6">fun</span> <span style="color:#50fa7b">sendEmail</span>() { </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7</span><span> <span style="color:#6272a4">// Logic to send email to the user </span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">8</span><span><span style="color:#6272a4"></span> } </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">9</span><span>} </span></span></code></pre></div><p>Good Example:</p> + + + diff --git a/public/drafts/page/1/index.html b/public/drafts/page/1/index.html new file mode 100644 index 0000000..e614ccf --- /dev/null +++ b/public/drafts/page/1/index.html @@ -0,0 +1,10 @@ + + + + http://localhost:1313/drafts/ + + + + + + diff --git a/public/image.jpg b/public/image.jpg new file mode 100644 index 0000000..edb912f Binary files /dev/null and b/public/image.jpg differ diff --git a/public/images/favicon.ico b/public/images/favicon.ico new file mode 100644 index 0000000..84a85d3 Binary files /dev/null and b/public/images/favicon.ico differ diff --git a/public/images/logo.png b/public/images/logo.png new file mode 100644 index 0000000..43a6ef0 Binary files /dev/null and b/public/images/logo.png differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..979ffbd --- /dev/null +++ b/public/index.html @@ -0,0 +1,196 @@ + + + + + + + + + + + + Daniel Jr | Backend Developer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + Since 2021, I’ve been developing Java 8+ applications using Spring and PostgreSQL in a microservices architecture for critical, efficient and scalable systems. With a focus on code quality, architecture and scalability, I have strong foundation of programming, design and architecture. I am passionate about programming and constantly learn new technologies and paradigms. + + +

Find me on + + + + + + + + , + + + + + + + and + + + + + + + . + +

+ + +
+ +
+ Writings + + + + + + + + + +
+ + + + + + + + +
+ Projects +
    + +
  • + ArtDigital: ArtDigital is an e-commerce that aims to simplify the dissemination and sale of products in the craft sector. #JavaEE #JSP #WebServlets +
  • + +
  • + Meeting Rooms: SPA written in Angular to manage meeting rooms access. #Angular #SpringBoot +
  • + +
  • + EncURL: Link shortener with some extra features. #VueJS #CSharp +
  • + +
+
+ + + +
+ + +
+ + +
+ + + + + + diff --git a/public/index.xml b/public/index.xml new file mode 100644 index 0000000..7ac5773 --- /dev/null +++ b/public/index.xml @@ -0,0 +1,27 @@ + + + + Daniel Jr | Backend Developer + http://localhost:1313/ + Recent content on Daniel Jr | Backend Developer + Hugo + en-us + Me + Fri, 10 Nov 2023 12:21:32 +0000 + + + Blockchain Basics + http://localhost:1313/posts/2023-11-10-solidity-web3-js/ + Fri, 10 Nov 2023 12:21:32 +0000 + http://localhost:1313/posts/2023-11-10-solidity-web3-js/ + <p><a href="https://github.com/smartcontractkit/full-blockchain-solidity-course-js">From Here</a></p> <p>Smart contracts are an agreement, contract or set of instructions that executes in a decentralized way without the need for a centralized or third party intermediary.</p> <p><strong>Blockchain Oracle</strong>: Any device that interacts with the off-chain world to provide external data or computation to smart contracts. <strong>Hybrid Smart Contracts</strong>: On-Chain + Off-Chain Agreements.</p> <p>Smart Contracts do trust minimized agreements that cannot be broke.</p> <ul> <li>Cannot be altered (immutable)</li> <li>Automatically executes</li> <li>Everyone sees the terms of agreement</li> </ul> <p>UNBREAKABLE AGREEMENTS and much more.</p> + + + S.O.L.I.D. with examples + http://localhost:1313/posts/2021-05-08-solid-with-examples/ + Sat, 08 May 2021 16:56:54 +0000 + http://localhost:1313/posts/2021-05-08-solid-with-examples/ + <h3 id="single-responsibility-principle">S)ingle Responsibility Principle</h3> <p><em>A class should have one, and only one, reason to change.</em> A class should have a single responsibility within the software.</p> <p>Bad Example:</p> <div class="highlight"><pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-kotlin" data-lang="kotlin"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1</span><span><span style="color:#fe8019">class</span> User { </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2</span><span> <span style="color:#fe8019">fun</span> <span style="color:#fabd2f">save</span>() { </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">3</span><span> <span style="color:#928374;font-style:italic">// Logic to save user to the database </span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">4</span><span><span style="color:#928374;font-style:italic"></span> } </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">5</span><span> </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">6</span><span> <span style="color:#fe8019">fun</span> <span style="color:#fabd2f">sendEmail</span>() { </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">7</span><span> <span style="color:#928374;font-style:italic">// Logic to send email to the user </span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">8</span><span><span style="color:#928374;font-style:italic"></span> } </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">9</span><span>} </span></span></code></pre></div><p>Good Example:</p> + + + diff --git a/public/js/code-copy.js b/public/js/code-copy.js new file mode 100644 index 0000000..5a07bf8 --- /dev/null +++ b/public/js/code-copy.js @@ -0,0 +1,36 @@ +(() => { + + function createCopyButton(codeNode) { + const copyBtn = document.createElement('button') + copyBtn.className = 'code-copy-btn' + copyBtn.type = 'button' + copyBtn.innerText = 'copy' + + let resetTimer + copyBtn.addEventListener('click', () => { + navigator.clipboard.writeText(codeNode.innerText).then(() => { + copyBtn.innerText = 'copied!' + }).then(() => { + clearTimeout(resetTimer) + resetTimer = setTimeout(() => { + copyBtn.innerText = 'copy' + }, 1000) + }) + }) + + return copyBtn + } + + document.querySelectorAll('pre > code') + .forEach((codeNode) => { + const copyBtn = createCopyButton(codeNode); + const preNode = codeNode.parentNode + codeNode.parentNode.insertBefore(copyBtn, codeNode) + }) + + document.querySelectorAll('.highlight table > tbody > tr > td:first-child .code-copy-btn') + .forEach((btn) => { + btn.remove() + }) + +})() \ No newline at end of file diff --git a/public/js/feather.min.js b/public/js/feather.min.js new file mode 100644 index 0000000..156cd61 --- /dev/null +++ b/public/js/feather.min.js @@ -0,0 +1,13 @@ +!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.feather=n():e.feather=n()}("undefined"!=typeof self?self:this,function(){return function(e){var n={};function i(t){if(n[t])return n[t].exports;var l=n[t]={i:t,l:!1,exports:{}};return e[t].call(l.exports,l,l.exports,i),l.l=!0,l.exports}return i.m=e,i.c=n,i.d=function(e,n,t){i.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},i.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},i.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(n,"a",n),n},i.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},i.p="",i(i.s=80)}([function(e,n,i){(function(n){var i="object",t=function(e){return e&&e.Math==Math&&e};e.exports=t(typeof globalThis==i&&globalThis)||t(typeof window==i&&window)||t(typeof self==i&&self)||t(typeof n==i&&n)||Function("return this")()}).call(this,i(75))},function(e,n){var i={}.hasOwnProperty;e.exports=function(e,n){return i.call(e,n)}},function(e,n,i){var t=i(0),l=i(11),r=i(33),o=i(62),a=t.Symbol,c=l("wks");e.exports=function(e){return c[e]||(c[e]=o&&a[e]||(o?a:r)("Symbol."+e))}},function(e,n,i){var t=i(6);e.exports=function(e){if(!t(e))throw TypeError(String(e)+" is not an object");return e}},function(e,n){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,n,i){var t=i(8),l=i(7),r=i(10);e.exports=t?function(e,n,i){return l.f(e,n,r(1,i))}:function(e,n,i){return e[n]=i,e}},function(e,n){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,n,i){var t=i(8),l=i(35),r=i(3),o=i(18),a=Object.defineProperty;n.f=t?a:function(e,n,i){if(r(e),n=o(n,!0),r(i),l)try{return a(e,n,i)}catch(e){}if("get"in i||"set"in i)throw TypeError("Accessors not supported");return"value"in i&&(e[n]=i.value),e}},function(e,n,i){var t=i(4);e.exports=!t(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,n){e.exports={}},function(e,n){e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},function(e,n,i){var t=i(0),l=i(19),r=i(17),o=t["__core-js_shared__"]||l("__core-js_shared__",{});(e.exports=function(e,n){return o[e]||(o[e]=void 0!==n?n:{})})("versions",[]).push({version:"3.1.3",mode:r?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var t=o(i(43)),l=o(i(41)),r=o(i(40));function o(e){return e&&e.__esModule?e:{default:e}}n.default=Object.keys(l.default).map(function(e){return new t.default(e,l.default[e],r.default[e])}).reduce(function(e,n){return e[n.name]=n,e},{})},function(e,n){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(e,n,i){var t=i(72),l=i(20);e.exports=function(e){return t(l(e))}},function(e,n){e.exports={}},function(e,n,i){var t=i(11),l=i(33),r=t("keys");e.exports=function(e){return r[e]||(r[e]=l(e))}},function(e,n){e.exports=!1},function(e,n,i){var t=i(6);e.exports=function(e,n){if(!t(e))return e;var i,l;if(n&&"function"==typeof(i=e.toString)&&!t(l=i.call(e)))return l;if("function"==typeof(i=e.valueOf)&&!t(l=i.call(e)))return l;if(!n&&"function"==typeof(i=e.toString)&&!t(l=i.call(e)))return l;throw TypeError("Can't convert object to primitive value")}},function(e,n,i){var t=i(0),l=i(5);e.exports=function(e,n){try{l(t,e,n)}catch(i){t[e]=n}return n}},function(e,n){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,n){var i=Math.ceil,t=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?t:i)(e)}},function(e,n,i){var t; +/*! + Copyright (c) 2016 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/ +/*! + Copyright (c) 2016 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/ +!function(){"use strict";var i=function(){function e(){}function n(e,n){for(var i=n.length,t=0;t0?l(t(e),9007199254740991):0}},function(e,n,i){var t=i(1),l=i(14),r=i(68),o=i(15),a=r(!1);e.exports=function(e,n){var i,r=l(e),c=0,p=[];for(i in r)!t(o,i)&&t(r,i)&&p.push(i);for(;n.length>c;)t(r,i=n[c++])&&(~a(p,i)||p.push(i));return p}},function(e,n,i){var t=i(0),l=i(11),r=i(5),o=i(1),a=i(19),c=i(36),p=i(37),y=p.get,h=p.enforce,x=String(c).split("toString");l("inspectSource",function(e){return c.call(e)}),(e.exports=function(e,n,i,l){var c=!!l&&!!l.unsafe,p=!!l&&!!l.enumerable,y=!!l&&!!l.noTargetGet;"function"==typeof i&&("string"!=typeof n||o(i,"name")||r(i,"name",n),h(i).source=x.join("string"==typeof n?n:"")),e!==t?(c?!y&&e[n]&&(p=!0):delete e[n],p?e[n]=i:r(e,n,i)):p?e[n]=i:a(n,i)})(Function.prototype,"toString",function(){return"function"==typeof this&&y(this).source||c.call(this)})},function(e,n){var i={}.toString;e.exports=function(e){return i.call(e).slice(8,-1)}},function(e,n,i){var t=i(8),l=i(73),r=i(10),o=i(14),a=i(18),c=i(1),p=i(35),y=Object.getOwnPropertyDescriptor;n.f=t?y:function(e,n){if(e=o(e),n=a(n,!0),p)try{return y(e,n)}catch(e){}if(c(e,n))return r(!l.f.call(e,n),e[n])}},function(e,n,i){var t=i(0),l=i(31).f,r=i(5),o=i(29),a=i(19),c=i(71),p=i(65);e.exports=function(e,n){var i,y,h,x,s,u=e.target,d=e.global,f=e.stat;if(i=d?t:f?t[u]||a(u,{}):(t[u]||{}).prototype)for(y in n){if(x=n[y],h=e.noTargetGet?(s=l(i,y))&&s.value:i[y],!p(d?y:u+(f?".":"#")+y,e.forced)&&void 0!==h){if(typeof x==typeof h)continue;c(x,h)}(e.sham||h&&h.sham)&&r(x,"sham",!0),o(i,y,x,e)}}},function(e,n){var i=0,t=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++i+t).toString(36))}},function(e,n,i){var t=i(0),l=i(6),r=t.document,o=l(r)&&l(r.createElement);e.exports=function(e){return o?r.createElement(e):{}}},function(e,n,i){var t=i(8),l=i(4),r=i(34);e.exports=!t&&!l(function(){return 7!=Object.defineProperty(r("div"),"a",{get:function(){return 7}}).a})},function(e,n,i){var t=i(11);e.exports=t("native-function-to-string",Function.toString)},function(e,n,i){var t,l,r,o=i(76),a=i(0),c=i(6),p=i(5),y=i(1),h=i(16),x=i(15),s=a.WeakMap;if(o){var u=new s,d=u.get,f=u.has,g=u.set;t=function(e,n){return g.call(u,e,n),n},l=function(e){return d.call(u,e)||{}},r=function(e){return f.call(u,e)}}else{var v=h("state");x[v]=!0,t=function(e,n){return p(e,v,n),n},l=function(e){return y(e,v)?e[v]:{}},r=function(e){return y(e,v)}}e.exports={set:t,get:l,has:r,enforce:function(e){return r(e)?l(e):t(e,{})},getterFor:function(e){return function(n){var i;if(!c(n)||(i=l(n)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return i}}}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var t=Object.assign||function(e){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{};if("undefined"==typeof document)throw new Error("`feather.replace()` only works in a browser environment.");var n=document.querySelectorAll("[data-feather]");Array.from(n).forEach(function(n){return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=function(e){return Array.from(e.attributes).reduce(function(e,n){return e[n.name]=n.value,e},{})}(e),o=i["data-feather"];delete i["data-feather"];var a=r.default[o].toSvg(t({},n,i,{class:(0,l.default)(n.class,i.class)})),c=(new DOMParser).parseFromString(a,"image/svg+xml").querySelector("svg");e.parentNode.replaceChild(c,e)}(n,e)})}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var t,l=i(12),r=(t=l)&&t.__esModule?t:{default:t};n.default=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(console.warn("feather.toSvg() is deprecated. Please use feather.icons[name].toSvg() instead."),!e)throw new Error("The required `key` (icon name) parameter is missing.");if(!r.default[e])throw new Error("No icon matching '"+e+"'. See the complete list of icons at https://feathericons.com");return r.default[e].toSvg(n)}},function(e){e.exports={activity:["pulse","health","action","motion"],airplay:["stream","cast","mirroring"],"alert-circle":["warning","alert","danger"],"alert-octagon":["warning","alert","danger"],"alert-triangle":["warning","alert","danger"],"align-center":["text alignment","center"],"align-justify":["text alignment","justified"],"align-left":["text alignment","left"],"align-right":["text alignment","right"],anchor:[],archive:["index","box"],"at-sign":["mention","at","email","message"],award:["achievement","badge"],aperture:["camera","photo"],"bar-chart":["statistics","diagram","graph"],"bar-chart-2":["statistics","diagram","graph"],battery:["power","electricity"],"battery-charging":["power","electricity"],bell:["alarm","notification","sound"],"bell-off":["alarm","notification","silent"],bluetooth:["wireless"],"book-open":["read","library"],book:["read","dictionary","booklet","magazine","library"],bookmark:["read","clip","marker","tag"],box:["cube"],briefcase:["work","bag","baggage","folder"],calendar:["date"],camera:["photo"],cast:["chromecast","airplay"],circle:["off","zero","record"],clipboard:["copy"],clock:["time","watch","alarm"],"cloud-drizzle":["weather","shower"],"cloud-lightning":["weather","bolt"],"cloud-rain":["weather"],"cloud-snow":["weather","blizzard"],cloud:["weather"],codepen:["logo"],codesandbox:["logo"],code:["source","programming"],coffee:["drink","cup","mug","tea","cafe","hot","beverage"],columns:["layout"],command:["keyboard","cmd","terminal","prompt"],compass:["navigation","safari","travel","direction"],copy:["clone","duplicate"],"corner-down-left":["arrow","return"],"corner-down-right":["arrow"],"corner-left-down":["arrow"],"corner-left-up":["arrow"],"corner-right-down":["arrow"],"corner-right-up":["arrow"],"corner-up-left":["arrow"],"corner-up-right":["arrow"],cpu:["processor","technology"],"credit-card":["purchase","payment","cc"],crop:["photo","image"],crosshair:["aim","target"],database:["storage","memory"],delete:["remove"],disc:["album","cd","dvd","music"],"dollar-sign":["currency","money","payment"],droplet:["water"],edit:["pencil","change"],"edit-2":["pencil","change"],"edit-3":["pencil","change"],eye:["view","watch"],"eye-off":["view","watch","hide","hidden"],"external-link":["outbound"],facebook:["logo","social"],"fast-forward":["music"],figma:["logo","design","tool"],"file-minus":["delete","remove","erase"],"file-plus":["add","create","new"],"file-text":["data","txt","pdf"],film:["movie","video"],filter:["funnel","hopper"],flag:["report"],"folder-minus":["directory"],"folder-plus":["directory"],folder:["directory"],framer:["logo","design","tool"],frown:["emoji","face","bad","sad","emotion"],gift:["present","box","birthday","party"],"git-branch":["code","version control"],"git-commit":["code","version control"],"git-merge":["code","version control"],"git-pull-request":["code","version control"],github:["logo","version control"],gitlab:["logo","version control"],globe:["world","browser","language","translate"],"hard-drive":["computer","server","memory","data"],hash:["hashtag","number","pound"],headphones:["music","audio","sound"],heart:["like","love","emotion"],"help-circle":["question mark"],hexagon:["shape","node.js","logo"],home:["house","living"],image:["picture"],inbox:["email"],instagram:["logo","camera"],key:["password","login","authentication","secure"],layers:["stack"],layout:["window","webpage"],"life-bouy":["help","life ring","support"],link:["chain","url"],"link-2":["chain","url"],linkedin:["logo","social media"],list:["options"],lock:["security","password","secure"],"log-in":["sign in","arrow","enter"],"log-out":["sign out","arrow","exit"],mail:["email","message"],"map-pin":["location","navigation","travel","marker"],map:["location","navigation","travel"],maximize:["fullscreen"],"maximize-2":["fullscreen","arrows","expand"],meh:["emoji","face","neutral","emotion"],menu:["bars","navigation","hamburger"],"message-circle":["comment","chat"],"message-square":["comment","chat"],"mic-off":["record","sound","mute"],mic:["record","sound","listen"],minimize:["exit fullscreen","close"],"minimize-2":["exit fullscreen","arrows","close"],minus:["subtract"],monitor:["tv","screen","display"],moon:["dark","night"],"more-horizontal":["ellipsis"],"more-vertical":["ellipsis"],"mouse-pointer":["arrow","cursor"],move:["arrows"],music:["note"],navigation:["location","travel"],"navigation-2":["location","travel"],octagon:["stop"],package:["box","container"],paperclip:["attachment"],pause:["music","stop"],"pause-circle":["music","audio","stop"],"pen-tool":["vector","drawing"],percent:["discount"],"phone-call":["ring"],"phone-forwarded":["call"],"phone-incoming":["call"],"phone-missed":["call"],"phone-off":["call","mute"],"phone-outgoing":["call"],phone:["call"],play:["music","start"],"pie-chart":["statistics","diagram"],"play-circle":["music","start"],plus:["add","new"],"plus-circle":["add","new"],"plus-square":["add","new"],pocket:["logo","save"],power:["on","off"],printer:["fax","office","device"],radio:["signal"],"refresh-cw":["synchronise","arrows"],"refresh-ccw":["arrows"],repeat:["loop","arrows"],rewind:["music"],"rotate-ccw":["arrow"],"rotate-cw":["arrow"],rss:["feed","subscribe"],save:["floppy disk"],scissors:["cut"],search:["find","magnifier","magnifying glass"],send:["message","mail","email","paper airplane","paper aeroplane"],settings:["cog","edit","gear","preferences"],"share-2":["network","connections"],shield:["security","secure"],"shield-off":["security","insecure"],"shopping-bag":["ecommerce","cart","purchase","store"],"shopping-cart":["ecommerce","cart","purchase","store"],shuffle:["music"],"skip-back":["music"],"skip-forward":["music"],slack:["logo"],slash:["ban","no"],sliders:["settings","controls"],smartphone:["cellphone","device"],smile:["emoji","face","happy","good","emotion"],speaker:["audio","music"],star:["bookmark","favorite","like"],"stop-circle":["media","music"],sun:["brightness","weather","light"],sunrise:["weather","time","morning","day"],sunset:["weather","time","evening","night"],tablet:["device"],tag:["label"],target:["logo","bullseye"],terminal:["code","command line","prompt"],thermometer:["temperature","celsius","fahrenheit","weather"],"thumbs-down":["dislike","bad","emotion"],"thumbs-up":["like","good","emotion"],"toggle-left":["on","off","switch"],"toggle-right":["on","off","switch"],tool:["settings","spanner"],trash:["garbage","delete","remove","bin"],"trash-2":["garbage","delete","remove","bin"],triangle:["delta"],truck:["delivery","van","shipping","transport","lorry"],tv:["television","stream"],twitch:["logo"],twitter:["logo","social"],type:["text"],umbrella:["rain","weather"],unlock:["security"],"user-check":["followed","subscribed"],"user-minus":["delete","remove","unfollow","unsubscribe"],"user-plus":["new","add","create","follow","subscribe"],"user-x":["delete","remove","unfollow","unsubscribe","unavailable"],user:["person","account"],users:["group"],"video-off":["camera","movie","film"],video:["camera","movie","film"],voicemail:["phone"],volume:["music","sound","mute"],"volume-1":["music","sound"],"volume-2":["music","sound"],"volume-x":["music","sound","mute"],watch:["clock","time"],"wifi-off":["disabled"],wifi:["connection","signal","wireless"],wind:["weather","air"],"x-circle":["cancel","close","delete","remove","times","clear"],"x-octagon":["delete","stop","alert","warning","times","clear"],"x-square":["cancel","close","delete","remove","times","clear"],x:["cancel","close","delete","remove","times","clear"],youtube:["logo","video","play"],"zap-off":["flash","camera","lightning"],zap:["flash","camera","lightning"],"zoom-in":["magnifying glass"],"zoom-out":["magnifying glass"]}},function(e){e.exports={activity:'',airplay:'',"alert-circle":'',"alert-octagon":'',"alert-triangle":'',"align-center":'',"align-justify":'',"align-left":'',"align-right":'',anchor:'',aperture:'',archive:'',"arrow-down-circle":'',"arrow-down-left":'',"arrow-down-right":'',"arrow-down":'',"arrow-left-circle":'',"arrow-left":'',"arrow-right-circle":'',"arrow-right":'',"arrow-up-circle":'',"arrow-up-left":'',"arrow-up-right":'',"arrow-up":'',"at-sign":'',award:'',"bar-chart-2":'',"bar-chart":'',"battery-charging":'',battery:'',"bell-off":'',bell:'',bluetooth:'',bold:'',"book-open":'',book:'',bookmark:'',box:'',briefcase:'',calendar:'',"camera-off":'',camera:'',cast:'',"check-circle":'',"check-square":'',check:'',"chevron-down":'',"chevron-left":'',"chevron-right":'',"chevron-up":'',"chevrons-down":'',"chevrons-left":'',"chevrons-right":'',"chevrons-up":'',chrome:'',circle:'',clipboard:'',clock:'',"cloud-drizzle":'',"cloud-lightning":'',"cloud-off":'',"cloud-rain":'',"cloud-snow":'',cloud:'',code:'',codepen:'',codesandbox:'',coffee:'',columns:'',command:'',compass:'',copy:'',"corner-down-left":'',"corner-down-right":'',"corner-left-down":'',"corner-left-up":'',"corner-right-down":'',"corner-right-up":'',"corner-up-left":'',"corner-up-right":'',cpu:'',"credit-card":'',crop:'',crosshair:'',database:'',delete:'',disc:'',"divide-circle":'',"divide-square":'',divide:'',"dollar-sign":'',"download-cloud":'',download:'',dribbble:'',droplet:'',"edit-2":'',"edit-3":'',edit:'',"external-link":'',"eye-off":'',eye:'',facebook:'',"fast-forward":'',feather:'',figma:'',"file-minus":'',"file-plus":'',"file-text":'',file:'',film:'',filter:'',flag:'',"folder-minus":'',"folder-plus":'',folder:'',framer:'',frown:'',gift:'',"git-branch":'',"git-commit":'',"git-merge":'',"git-pull-request":'',github:'',gitlab:'',globe:'',grid:'',"hard-drive":'',hash:'',headphones:'',heart:'',"help-circle":'',hexagon:'',home:'',image:'',inbox:'',info:'',instagram:'',italic:'',key:'',layers:'',layout:'',"life-buoy":'',"link-2":'',link:'',linkedin:'',list:'',loader:'',lock:'',"log-in":'',"log-out":'',mail:'',"map-pin":'',map:'',"maximize-2":'',maximize:'',meh:'',menu:'',"message-circle":'',"message-square":'',"mic-off":'',mic:'',"minimize-2":'',minimize:'',"minus-circle":'',"minus-square":'',minus:'',monitor:'',moon:'',"more-horizontal":'',"more-vertical":'',"mouse-pointer":'',move:'',music:'',"navigation-2":'',navigation:'',octagon:'',package:'',paperclip:'',"pause-circle":'',pause:'',"pen-tool":'',percent:'',"phone-call":'',"phone-forwarded":'',"phone-incoming":'',"phone-missed":'',"phone-off":'',"phone-outgoing":'',phone:'',"pie-chart":'',"play-circle":'',play:'',"plus-circle":'',"plus-square":'',plus:'',pocket:'',power:'',printer:'',radio:'',"refresh-ccw":'',"refresh-cw":'',repeat:'',rewind:'',"rotate-ccw":'',"rotate-cw":'',rss:'',save:'',scissors:'',search:'',send:'',server:'',settings:'',"share-2":'',share:'',"shield-off":'',shield:'',"shopping-bag":'',"shopping-cart":'',shuffle:'',sidebar:'',"skip-back":'',"skip-forward":'',slack:'',slash:'',sliders:'',smartphone:'',smile:'',speaker:'',square:'',star:'',"stop-circle":'',sun:'',sunrise:'',sunset:'',tablet:'',tag:'',target:'',terminal:'',thermometer:'',"thumbs-down":'',"thumbs-up":'',"toggle-left":'',"toggle-right":'',tool:'',"trash-2":'',trash:'',trello:'',"trending-down":'',"trending-up":'',triangle:'',truck:'',tv:'',twitch:'',twitter:'',type:'',umbrella:'',underline:'',unlock:'',"upload-cloud":'',upload:'',"user-check":'',"user-minus":'',"user-plus":'',"user-x":'',user:'',users:'',"video-off":'',video:'',voicemail:'',"volume-1":'',"volume-2":'',"volume-x":'',volume:'',watch:'',"wifi-off":'',wifi:'',wind:'',"x-circle":'',"x-octagon":'',"x-square":'',x:'',youtube:'',"zap-off":'',zap:'',"zoom-in":'',"zoom-out":''}},function(e){e.exports={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var t=Object.assign||function(e){for(var n=1;n2&&void 0!==arguments[2]?arguments[2]:[];!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),this.name=n,this.contents=i,this.tags=l,this.attrs=t({},o.default,{class:"feather feather-"+n})}return l(e,[{key:"toSvg",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return""+this.contents+""}},{key:"toString",value:function(){return this.contents}}]),e}();n.default=c},function(e,n,i){"use strict";var t=o(i(12)),l=o(i(39)),r=o(i(38));function o(e){return e&&e.__esModule?e:{default:e}}e.exports={icons:t.default,toSvg:l.default,replace:r.default}},function(e,n,i){e.exports=i(0)},function(e,n,i){var t=i(2)("iterator"),l=!1;try{var r=0,o={next:function(){return{done:!!r++}},return:function(){l=!0}};o[t]=function(){return this},Array.from(o,function(){throw 2})}catch(e){}e.exports=function(e,n){if(!n&&!l)return!1;var i=!1;try{var r={};r[t]=function(){return{next:function(){return{done:i=!0}}}},e(r)}catch(e){}return i}},function(e,n,i){var t=i(30),l=i(2)("toStringTag"),r="Arguments"==t(function(){return arguments}());e.exports=function(e){var n,i,o;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(i=function(e,n){try{return e[n]}catch(e){}}(n=Object(e),l))?i:r?t(n):"Object"==(o=t(n))&&"function"==typeof n.callee?"Arguments":o}},function(e,n,i){var t=i(47),l=i(9),r=i(2)("iterator");e.exports=function(e){if(void 0!=e)return e[r]||e["@@iterator"]||l[t(e)]}},function(e,n,i){"use strict";var t=i(18),l=i(7),r=i(10);e.exports=function(e,n,i){var o=t(n);o in e?l.f(e,o,r(0,i)):e[o]=i}},function(e,n,i){var t=i(2),l=i(9),r=t("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(l.Array===e||o[r]===e)}},function(e,n,i){var t=i(3);e.exports=function(e,n,i,l){try{return l?n(t(i)[0],i[1]):n(i)}catch(n){var r=e.return;throw void 0!==r&&t(r.call(e)),n}}},function(e,n){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},function(e,n,i){var t=i(52);e.exports=function(e,n,i){if(t(e),void 0===n)return e;switch(i){case 0:return function(){return e.call(n)};case 1:return function(i){return e.call(n,i)};case 2:return function(i,t){return e.call(n,i,t)};case 3:return function(i,t,l){return e.call(n,i,t,l)}}return function(){return e.apply(n,arguments)}}},function(e,n,i){"use strict";var t=i(53),l=i(24),r=i(51),o=i(50),a=i(27),c=i(49),p=i(48);e.exports=function(e){var n,i,y,h,x=l(e),s="function"==typeof this?this:Array,u=arguments.length,d=u>1?arguments[1]:void 0,f=void 0!==d,g=0,v=p(x);if(f&&(d=t(d,u>2?arguments[2]:void 0,2)),void 0==v||s==Array&&o(v))for(i=new s(n=a(x.length));n>g;g++)c(i,g,f?d(x[g],g):x[g]);else for(h=v.call(x),i=new s;!(y=h.next()).done;g++)c(i,g,f?r(h,d,[y.value,g],!0):y.value);return i.length=g,i}},function(e,n,i){var t=i(32),l=i(54);t({target:"Array",stat:!0,forced:!i(46)(function(e){Array.from(e)})},{from:l})},function(e,n,i){var t=i(6),l=i(3);e.exports=function(e,n){if(l(e),!t(n)&&null!==n)throw TypeError("Can't set "+String(n)+" as a prototype")}},function(e,n,i){var t=i(56);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,n=!1,i={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(i,[]),n=i instanceof Array}catch(e){}return function(i,l){return t(i,l),n?e.call(i,l):i.__proto__=l,i}}():void 0)},function(e,n,i){var t=i(0).document;e.exports=t&&t.documentElement},function(e,n,i){var t=i(28),l=i(13);e.exports=Object.keys||function(e){return t(e,l)}},function(e,n,i){var t=i(8),l=i(7),r=i(3),o=i(59);e.exports=t?Object.defineProperties:function(e,n){r(e);for(var i,t=o(n),a=t.length,c=0;a>c;)l.f(e,i=t[c++],n[i]);return e}},function(e,n,i){var t=i(3),l=i(60),r=i(13),o=i(15),a=i(58),c=i(34),p=i(16)("IE_PROTO"),y=function(){},h=function(){var e,n=c("iframe"),i=r.length;for(n.style.display="none",a.appendChild(n),n.src=String("javascript:"),(e=n.contentWindow.document).open(),e.write(" + + + + + + + + S.O.L.I.D. with examples | Daniel Jr | Backend Developer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + + + +
+ + +
+
+ + +
+
+

+ S.O.L.I.D. with examples +

+
+ + + + + + +
+
+ + + + + +
+

S)ingle Responsibility Principle

+

A class should have one, and only one, reason to change. +A class should have a single responsibility within the software.

+

Bad Example:

+
1class User {
+2    fun save() {
+3        // Logic to save user to the database
+4    }
+5
+6    fun sendEmail() {
+7        // Logic to send email to the user
+8    }
+9}
+

Good Example:

+
 1class User {
+ 2    fun save() {
+ 3        // Logic to save user to the database
+ 4    }
+ 5}
+ 6
+ 7class EmailService {
+ 8    fun sendEmail(user: User) {
+ 9        // Logic to send email to the user
+10    }
+11}
+

O)pen Closed Principle

+

You should be able to extend a class’s behavior without modifying it. +Objects should be open for extension but closed for modification.

+

Bad Example:

+
 1class Rectangle(val width: Double, val height: Double) {
+ 2    fun area(): Double {
+ 3        return width * height
+ 4    }
+ 5}
+ 6
+ 7class Circle(val radius: Double) {
+ 8    fun area(): Double {
+ 9        return Math.PI * radius * radius
+10    }
+11}
+

Good Example:

+
 1interface Shape {
+ 2    fun area(): Double
+ 3}
+ 4
+ 5class Rectangle(val width: Double, val height: Double) : Shape {
+ 6    override fun area(): Double {
+ 7        return width * height
+ 8    }
+ 9}
+10
+11class Circle(val radius: Double) : Shape {
+12    override fun area(): Double {
+13        return Math.PI * radius * radius
+14    }
+15}
+

L)iskov Substitution Principle

+

Derived classes should be substitutable for their base classes. +The Liskov Substitution Principle was introduced by Barbara Liskov in 1987: +“If for every object o1 of type S there is an object o2 of type T such that for all programs P, the behavior of P is unchanged when o1 is substituted by o2, then S is a subtype of T.”

+

Bad Example:

+
 1open class Bird {
+ 2    open fun fly() {
+ 3        println("Flying")
+ 4    }
+ 5}
+ 6
+ 7class Ostrich : Bird() {
+ 8    override fun fly() {
+ 9        throw Exception("Ostriches can't fly")
+10    }
+11}
+

Good Example:

+
 1open class Bird {
+ 2    open fun makeSound() {
+ 3        println("Chirp")
+ 4    }
+ 5}
+ 6
+ 7class Sparrow : Bird() {
+ 8    override fun makeSound() {
+ 9        println("Chirp chirp")
+10    }
+11}
+12
+13class Ostrich : Bird() {
+14    override fun makeSound() {
+15        println("Hiss")
+16    }
+17}
+

I)nterface Segregation Principle

+

Make interfaces that are client-specific. +A class should not be forced to implement interfaces and methods that will not be used.

+

Bad Example:

+
 1interface Machine {
+ 2    fun print()
+ 3    fun scan()
+ 4    fun fax()
+ 5}
+ 6
+ 7class Printer : Machine {
+ 8    override fun print() {
+ 9        // Logic to print
+10    }
+11
+12    override fun scan() {
+13        throw UnsupportedOperationException("Printer cannot scan")
+14    }
+15
+16    override fun fax() {
+17        throw UnsupportedOperationException("Printer cannot fax")
+18    }
+19}
+

Good Example:

+
 1interface Printer {
+ 2    fun print()
+ 3}
+ 4
+ 5interface Scanner {
+ 6    fun scan()
+ 7}
+ 8
+ 9class SimplePrinter : Printer {
+10    override fun print() {
+11        // Logic to print
+12    }
+13}
+14
+15class MultiFunctionPrinter : Printer, Scanner {
+16    override fun print() {
+17        // Logic to print
+18    }
+19
+20    override fun scan() {
+21        // Logic to scan
+22    }
+23}
+

D)ependency Inversion Principle

+

Depend on abstractions, not on concretions. +A high-level module should not depend on low-level modules; both should depend on abstractions.

+

Bad Example:

+
 1class EmailService {
+ 2    fun sendEmail(message: String) {
+ 3        // Logic to send email
+ 4    }
+ 5}
+ 6
+ 7class Notification {
+ 8    private val emailService = EmailService()
+ 9
+10    fun notify(message: String) {
+11        emailService.sendEmail(message)
+12    }
+13}
+

Good Example:

+
 1interface MessageSender {
+ 2    fun send(message: String)
+ 3}
+ 4
+ 5class EmailService : MessageSender {
+ 6    override fun send(message: String) {
+ 7        // Logic to send email
+ 8    }
+ 9}
+10
+11class Notification(private val sender: MessageSender) {
+12    fun notify(message: String) {
+13        sender.send(message)
+14    }
+15}
+16
+17// Usage
+18val emailService = EmailService()
+19val notification = Notification(emailService)
+20notification.notify("Hello, World!")
+
+
+
+ + + + + + + + + +
+
+ + + + + + + + + +
+
+ + +
+ + +
+ + +
+ + + + + + + + + + + + diff --git a/public/posts/2023-11-10-solidity-web3-js/index.html b/public/posts/2023-11-10-solidity-web3-js/index.html new file mode 100644 index 0000000..d027e5e --- /dev/null +++ b/public/posts/2023-11-10-solidity-web3-js/index.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Blockchain Basics | Daniel Jr | Backend Developer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + + + + + +
+ + +
+
+ + +
+
+

+ Blockchain Basics +

+
+ + + + + + +
+
+ + + + + +
+

From Here

+

Smart contracts are an agreement, contract or set of instructions that executes in a decentralized way without the need for a centralized or third party intermediary.

+

Blockchain Oracle: Any device that interacts with the off-chain world to provide external data or computation to smart contracts. +Hybrid Smart Contracts: On-Chain + Off-Chain Agreements.

+

Smart Contracts do trust minimized agreements that cannot be broke.

+
    +
  • Cannot be altered (immutable)
  • +
  • Automatically executes
  • +
  • Everyone sees the terms of agreement
  • +
+

UNBREAKABLE AGREEMENTS +and much more.

+
    +
  1. Decentralized
  2. +
  3. Transparency
  4. +
  5. Speed
  6. +
  7. Security
  8. +
  9. Remove counterpart risk
  10. +
  11. True trust minimized agreements
  12. +
+

DeFi → Decentralized Finances +DAO → Decentralized Autonomous Organizations +NFT → Not Fungible Token

+

Your First Transaction

+
    +
  1. Set up a wallet with Metamask
  2. +
  3. We can see details with the Etherscan
  4. +
+
    +
  • Mnemonic → can access all of your accounts.
  • +
  • Private Key → can access 1 of your accounts.
  • +
  • Public Key → can access nothing.
  • +
+
    +
  1. Connect and get ETH for test in Faucets
  2. +
+

Gas I: Introduction to Gas

+

When we make transactions, the miners or validators make a small fee related to the gas. +Gas: A unit of computational measurement. The more complex your transaction is the more gas you have to pay.

+

Transaction Fee = Gas Price * How much Gas used.

+

How Blockchain Works

+

Block: A block of data encrypted in some hash (e. g. Sha256) with code (named nonce) to validate the block and hash validated that must start with 4 zeros. +Blockchain: Each block has an prev hash that refer to previous block in the chain. +Genesis Block: The first block in a blockchain.

+

When a block is edited, broke all the next blocks. Then all the blocks need to be mine again. +After mine all this blocks, this blockchain is different from all the others in the decentralized net so it is discarted.

+

Mining: The process of finding the solution to the blockchain problem. +In our example, the problem was to find a hash that starts with four zeros. +Nodes get paid for mining blocks.

+

Private Key: Key used to sign an transaction. +Public Key: Key used to validate an signed transaction.

+

Gas II: Block Rewards & EIP 1550

+

Base Fee: Minimum gas price to send your transaction.

+

EIP (Etherium Improvement Proposals): The comon way of requesting changes to etherium network.

+

High-level blockchain fundamentals.

+

Node: A single instance in a decentralized network.

+

Anybody can run an Etherium node easily. +Blockchain nodes keep lists the transactions that ocur.

+

Consensus is the mechanism used to agree on the state of a blockchain. And it can be broke in two parts:

+
    +
  1. Chain Selection Algorithm: using Nakamoto Consensus, the longest chain is selected.
  2. +
  3. Sybil Resistance Mechanism: is a blockchain ability to defend against users creating a large number of pseudo anonymous identities to gain a disproportionately advantageous influence over the set system.
  4. +
+
    +
  • Proof of Work: the problem that need to be solved. It can be more hard and expensive depending to block time need to be. The gas fee is paid to the miner that resolve the transaction.
  • +
  • Proof of Stake: it randomly choose and validator in the network. the gas fee is paid for validator, not miners.
  • +
+

Block Confirmations: the number of confirmations is the number of blocks added on after our transaction.

+

Sharding: sharded blockchain is an blockchain of blockchains. Is a main chain that is going to coordinate everything. Can be an solutions to scalability problem when an chain has to much transactions. +Layer 1: Base layer implementation. +Layer 2: Any application build on top of a layer 1. +Roll Ups: chains in the layer 2 that send (roll up) their transactions to layer 1.

+

Attacks:

+
    +
  • Sybil Attack: when a user creates a whole bunch of pseudo anonymous account to try to influence the network.
  • +
  • 51% Attack: when a user, or a group of users, creates an chain that is longer of all others.
  • +
+

Welcome to Remix! Simple Storage

+

Solidity is the primary smart contract coding language.

+

Contract is an keyword to define the start of an contract in code.

+

Coding an contract:

+
    +
  1. Goto Remix Etherium IDE
  2. +
  3. Init an project with an Solidity (.sol) file.
  4. +
  5. Set solidity version. Ex.:
  6. +
+
    +
  • pragma solidity 0.8.7; to set 0.8.7 version.
  • +
  • pragma solidity ^0.8.7; to set an version above 0.8.7.
  • +
  • pragma solidity >=0.8.7 < 0.9.0; to set an version between 0.8.7 and 0.9.
  • +
+
    +
  1. Put spdx licence on top of code.
  2. +
  3. Define an contract with the keyword contract in the code. Contract in solidity is similar with +Classes like in any other object-oriented languages. Ex.:
  4. +
+
    +
  • contract SimpleStorage {}. create an contract named SimpleStorage with no one content.
  • +
+

Solidity Types:

+

The concept of “undefined” or “null” values does not exist in Solidity, but newly declared +variables always have a default value dependent on its type.

+
+

Any time you change something on-chain, including making a new contract, it happens in a +transaction.

+
+ +
+
+ + + + + + + + + +
+
+ + + + + + + + + +
+
+ + +
+ + +
+ + +
+ + + + + + + + + + + + diff --git a/public/posts/index.html b/public/posts/index.html new file mode 100644 index 0000000..7f09c2d --- /dev/null +++ b/public/posts/index.html @@ -0,0 +1,144 @@ + + + + + + + + + + + Daniel Jr | Backend Developer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + +
+ + +
+ + +
+ + + + + + diff --git a/public/posts/index.xml b/public/posts/index.xml new file mode 100644 index 0000000..0d1a182 --- /dev/null +++ b/public/posts/index.xml @@ -0,0 +1,27 @@ + + + + Posts on Daniel Jr | Backend Developer + http://localhost:1313/posts/ + Recent content in Posts on Daniel Jr | Backend Developer + Hugo + en-us + Me + Fri, 10 Nov 2023 12:21:32 +0000 + + + Blockchain Basics + http://localhost:1313/posts/2023-11-10-solidity-web3-js/ + Fri, 10 Nov 2023 12:21:32 +0000 + http://localhost:1313/posts/2023-11-10-solidity-web3-js/ + <p><a href="https://github.com/smartcontractkit/full-blockchain-solidity-course-js">From Here</a></p> <p>Smart contracts are an agreement, contract or set of instructions that executes in a decentralized way without the need for a centralized or third party intermediary.</p> <p><strong>Blockchain Oracle</strong>: Any device that interacts with the off-chain world to provide external data or computation to smart contracts. <strong>Hybrid Smart Contracts</strong>: On-Chain + Off-Chain Agreements.</p> <p>Smart Contracts do trust minimized agreements that cannot be broke.</p> <ul> <li>Cannot be altered (immutable)</li> <li>Automatically executes</li> <li>Everyone sees the terms of agreement</li> </ul> <p>UNBREAKABLE AGREEMENTS and much more.</p> + + + S.O.L.I.D. with examples + http://localhost:1313/posts/2021-05-08-solid-with-examples/ + Sat, 08 May 2021 16:56:54 +0000 + http://localhost:1313/posts/2021-05-08-solid-with-examples/ + <h3 id="single-responsibility-principle">S)ingle Responsibility Principle</h3> <p><em>A class should have one, and only one, reason to change.</em> A class should have a single responsibility within the software.</p> <p>Bad Example:</p> <div class="highlight"><pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-kotlin" data-lang="kotlin"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1</span><span><span style="color:#fe8019">class</span> User { </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2</span><span> <span style="color:#fe8019">fun</span> <span style="color:#fabd2f">save</span>() { </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">3</span><span> <span style="color:#928374;font-style:italic">// Logic to save user to the database </span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">4</span><span><span style="color:#928374;font-style:italic"></span> } </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">5</span><span> </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">6</span><span> <span style="color:#fe8019">fun</span> <span style="color:#fabd2f">sendEmail</span>() { </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">7</span><span> <span style="color:#928374;font-style:italic">// Logic to send email to the user </span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">8</span><span><span style="color:#928374;font-style:italic"></span> } </span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">9</span><span>} </span></span></code></pre></div><p>Good Example:</p> + + + diff --git a/public/posts/page/1/index.html b/public/posts/page/1/index.html new file mode 100644 index 0000000..ac9cba2 --- /dev/null +++ b/public/posts/page/1/index.html @@ -0,0 +1,10 @@ + + + + http://localhost:1313/posts/ + + + + + + diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 0000000..2d9ad7e --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,28 @@ + + + + http://localhost:1313/posts/2023-11-10-solidity-web3-js/ + 2023-11-10T12:21:32+00:00 + + http://localhost:1313/categories/ + 2023-11-10T12:21:32+00:00 + + http://localhost:1313/ + 2023-11-10T12:21:32+00:00 + + http://localhost:1313/posts/ + 2023-11-10T12:21:32+00:00 + + http://localhost:1313/categories/web3/ + 2023-11-10T12:21:32+00:00 + + http://localhost:1313/categories/kotlin-design-pattern/ + 2021-05-08T16:56:54+00:00 + + http://localhost:1313/posts/2021-05-08-solid-with-examples/ + 2021-05-08T16:56:54+00:00 + + http://localhost:1313/tags/ + + diff --git a/public/tags/index.html b/public/tags/index.html new file mode 100644 index 0000000..3d4b031 --- /dev/null +++ b/public/tags/index.html @@ -0,0 +1,123 @@ + + + + + + + + + + + Daniel Jr | Backend Developer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+
+ +
+ +
+ No tags +
+ +
+ + +
+
+ +
+
+ + +
+ + +
+ + +
+ + + + + + diff --git a/public/tags/index.xml b/public/tags/index.xml new file mode 100644 index 0000000..611c6bb --- /dev/null +++ b/public/tags/index.xml @@ -0,0 +1,12 @@ + + + + Tags on Daniel Jr | Backend Developer + http://localhost:1313/tags/ + Recent content in Tags on Daniel Jr | Backend Developer + Hugo + en-us + Me + + + diff --git a/resources/_gen/assets/scss/style.scss_b4ac9c581169bbe215738ec274a3b4f2.content b/resources/_gen/assets/scss/style.scss_b4ac9c581169bbe215738ec274a3b4f2.content new file mode 100644 index 0000000..b2a653d --- /dev/null +++ b/resources/_gen/assets/scss/style.scss_b4ac9c581169bbe215738ec274a3b4f2.content @@ -0,0 +1,3 @@ +.inline{display:inline}.block{display:block}.inline-block{display:inline-block}.table{display:table}.table-cell{display:table-cell}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-auto{overflow:auto}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}.left{float:left}.right{float:right}.fit{max-width:100%}.truncate{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.max-width-1{max-width:24rem}.max-width-2{max-width:32rem}.max-width-3{max-width:48rem}.max-width-4{max-width:64rem}.border-box{box-sizing:border-box}.m0{margin:0}.mt0{margin-top:0}.mr0{margin-right:0}.mb0{margin-bottom:0}.ml0{margin-left:0}.mx0{margin-right:0;margin-left:0}.my0{margin-top:0;margin-bottom:0}.m1{margin:.5rem}.mt1{margin-top:.5rem}.mr1{margin-right:.5rem}.mb1{margin-bottom:.5rem}.ml1{margin-left:.5rem}.mx1{margin-right:.5rem;margin-left:.5rem}.my1{margin-top:.5rem;margin-bottom:.5rem}.m2{margin:1rem}.mt2{margin-top:1rem}.mr2{margin-right:1rem}.mb2{margin-bottom:1rem}.ml2{margin-left:1rem}.mx2{margin-right:1rem;margin-left:1rem}.my2{margin-top:1rem;margin-bottom:1rem}.m3{margin:2rem}.mt3{margin-top:2rem}.mr3{margin-right:2rem}.mb3{margin-bottom:2rem}.ml3{margin-left:2rem}.mx3{margin-right:2rem;margin-left:2rem}.my3{margin-top:2rem;margin-bottom:2rem}.m4{margin:4rem}.mt4{margin-top:4rem}.mr4{margin-right:4rem}.mb4{margin-bottom:4rem}.ml4{margin-left:4rem}.mx4{margin-right:4rem;margin-left:4rem}.my4{margin-top:4rem;margin-bottom:4rem}.mxn1{margin-right:-.5rem;margin-left:-.5rem}.mxn2{margin-right:-1rem;margin-left:-1rem}.mxn3{margin-right:-2rem;margin-left:-2rem}.mxn4{margin-right:-4rem;margin-left:-4rem}.ml-auto{margin-left:auto}.mr-auto{margin-right:auto}.mx-auto{margin-right:auto;margin-left:auto}.p0{padding:0}.pt0{padding-top:0}.pr0{padding-right:0}.pb0{padding-bottom:0}.pl0{padding-left:0}.px0{padding-right:0;padding-left:0}.py0{padding-top:0;padding-bottom:0}.p1{padding:.5rem}.pt1{padding-top:.5rem}.pr1{padding-right:.5rem}.pb1{padding-bottom:.5rem}.pl1{padding-left:.5rem}.py1{padding-top:.5rem;padding-bottom:.5rem}.px1{padding-right:.5rem;padding-left:.5rem}.p2{padding:1rem}.pt2{padding-top:1rem}.pr2{padding-right:1rem}.pb2{padding-bottom:1rem}.pl2{padding-left:1rem}.py2{padding-top:1rem;padding-bottom:1rem}.px2{padding-right:1rem;padding-left:1rem}.p3{padding:2rem}.pt3{padding-top:2rem}.pr3{padding-right:2rem}.pb3{padding-bottom:2rem}.pl3{padding-left:2rem}.py3{padding-top:2rem;padding-bottom:2rem}.px3{padding-right:2rem;padding-left:2rem}.p4{padding:4rem}.pt4{padding-top:4rem}.pr4{padding-right:4rem}.pb4{padding-bottom:4rem}.pl4{padding-left:4rem}.py4{padding-top:4rem;padding-bottom:4rem}.px4{padding-right:4rem;padding-left:4rem}h1,.h1{display:block;margin-top:3rem;margin-bottom:1rem;color:#2bbc8a;letter-spacing:.01em;font-weight:700;font-style:normal;font-size:1.5em;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}h2,.h2{position:relative;display:block;margin-top:2rem;margin-bottom:.5rem;color:#eee;text-transform:none;letter-spacing:normal;font-weight:bold;font-size:1rem}h3{color:#eee;text-decoration:underline;font-weight:bold;font-size:.9rem}h4 h5 h6{display:inline;text-decoration:none;color:#ccc;font-weight:bold;font-size:.9rem}h3 h4 h5 h6{margin-top:.9rem;margin-bottom:.5rem}hr{border:0.5px dashed #ccc;opacity:.5;margin:0;margin-top:20px;margin-bottom:20px}strong{font-weight:bold}em cite{font-style:italic}sup sub{position:relative;vertical-align:baseline;font-size:.75em;line-height:0}sup{top:-.5em}sub{bottom:-.2em}small{font-size:.85em}acronym abbr{border-bottom:1px dotted}ul ol dl{line-height:1.725}ul ul,ol ul,ul ol,ol ol{margin-top:0;margin-bottom:0}ol{list-style:decimal}dt{font-weight:bold}table{width:100%;border-collapse:collapse;text-align:left;font-size:12px;overflow:auto;display:block}th{padding:8px;border-bottom:1px dashed #666;color:#eee;font-weight:bold;font-size:13px}td{padding:0 8px;border-bottom:none}@font-face{font-style:normal;font-family:"JetBrains Mono";font-display:swap;src:local("JetBrains Mono"),local("JetBrains-Mono"),url("../lib/JetBrainsMono/web/woff2/JetBrainsMono-Regular.woff2") format("woff2"),url("../lib/JetBrainsMono/web/woff/JetBrainsMono-Regular.woff") format("woff"),url("../lib/JetBrainsMono/web/eot/JetBrainsMono-Regular.eot") format("embedded-opentype"),url("../lib/JetBrainsMono/ttf/JetBrainsMono-Regular.ttf") format("truetype")}*,*:before,*:after{box-sizing:border-box}html{margin:0;padding:0;height:100%;border-top:2px solid #c9cacc;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0;height:100%;background-color:#1d1f21;color:#c9cacc;font-display:swap;font-weight:400;font-size:14px;font-family:"JetBrains Mono",monospace;line-height:1.725;text-rendering:geometricPrecision;flex:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.content{position:relative;display:flex;flex-direction:column;min-height:100%;overflow-wrap:break-word}.content p{hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;-webkit-hyphens:auto}.content code{hyphens:manual;-moz-hyphens:manual;-ms-hyphens:manual;-webkit-hyphens:manual}.content a{color:#c9cacc;text-decoration:none;background-image:linear-gradient(transparent, transparent 5px, #c9cacc 5px, #c9cacc);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}.content a:hover{background-image:linear-gradient(transparent, transparent 4px, #d480aa 4px, #d480aa)}.content a.icon{background:none}.content a.icon:hover{color:#d480aa}.content h1 a,.content .h1 a,.content h2 a,.content h3 a,.content h4 a,.content h5 a,.content h6 a{background:none;color:inherit;text-decoration:none}.content h1 a:hover,.content .h1 a:hover,.content h2 a:hover,.content h3 a:hover,.content h4 a:hover,.content h5 a:hover,.content h6 a:hover{background-image:linear-gradient(transparent, transparent 6px, #d480aa 6px, #d480aa);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}.content h6 a{background:none;color:inherit;text-decoration:none}.content h6 a:hover{background-image:linear-gradient(transparent, transparent 6px, #d480aa 6px, #d480aa);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}@media (min-width: 540px){.image-wrap{flex-direction:row;margin-bottom:2rem}.image-wrap .image-block{flex:1 0 35%;margin-right:2rem}.image-wrap p{flex:1 0 65%}}.max-width{max-width:48rem}@media (max-width: 480px){.px3{padding-right:1rem;padding-left:1rem}.my4{margin-top:2rem;margin-bottom:2rem}}@media (min-width: 480px){p{text-align:justify}}#header{margin:0 auto 2rem;width:100%}#header h1,#header .h1{margin-top:0;margin-bottom:0;color:#c9cacc;letter-spacing:.01em;font-weight:700;font-style:normal;font-size:1.5rem;line-height:2rem;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}#header a{background:none;color:inherit;text-decoration:none}#header #logo{display:inline-block;float:left;margin-right:20px;width:50px;height:50px;border-radius:5px;background-size:50px 50px;background-repeat:no-repeat;filter:grayscale(100%);-webkit-filter:grayscale(100%)}#header #nav{color:#2bbc8a;letter-spacing:.01em;font-weight:200;font-style:normal;font-size:.8rem}#header #nav ul{margin:0;padding:0;list-style-type:none;line-height:15px}#header #nav ul a{margin-right:15px;color:#2bbc8a}#header #nav ul a:hover{background-image:linear-gradient(transparent, transparent 5px, #2bbc8a 5px, #2bbc8a);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}#header #nav ul li{display:inline-block;margin-right:15px;border-right:1px dotted;border-color:#2bbc8a;vertical-align:middle}#header #nav ul .icon{display:none}#header #nav ul li:last-child{margin-right:0;border-right:0}#header #nav ul li:last-child a{margin-right:0}#header:hover #logo{filter:none;-webkit-filter:none}@media screen and (max-width: 480px){#header #title{display:table;margin-right:5rem;min-height:50px}#header #title h1{display:table-cell;vertical-align:middle}#header #nav ul a:hover{background:none}#header #nav ul li{display:none;border-right:0}#header #nav ul li.icon{position:absolute;top:77px;right:1rem;display:inline-block}#header #nav ul.responsive li{display:block}#header #nav li:not(:first-child){padding-top:1rem;padding-left:70px;font-size:1rem}}#header-post{position:fixed;top:2rem;right:0;display:inline-block;float:right;z-index:100}#header-post a{background:none;color:inherit;text-decoration:none}#header-post a.icon{background:none}#header-post a.icon:hover{color:#d480aa}#header-post nav ul{display:block;list-style-image:none;list-style-position:outside;list-style-type:none;padding-inline-start:40px}#header-post nav ul li{display:list-item;margin-right:0px}#header-post nav>ul{margin-block-end:1em;margin-block-start:1em}#header-post ul{display:inline-block;margin:0;padding:0;list-style-type:none}#header-post ul li{display:inline-block;margin-right:15px;vertical-align:middle}#header-post ul li:last-child{margin-right:0}#header-post #menu-icon{float:right;margin-right:2rem;margin-left:15px}#header-post #menu-icon:hover{color:#2bbc8a}#header-post #menu-icon-tablet{float:right;margin-right:2rem;margin-left:15px}#header-post #menu-icon-tablet:hover{color:#2bbc8a}#header-post #top-icon-tablet{position:fixed;right:2rem;bottom:2rem;margin-right:2rem;margin-left:15px}#header-post #top-icon-tablet:hover{color:#2bbc8a}#header-post .active{color:#2bbc8a}#header-post #menu{visibility:hidden;margin-right:2rem}#header-post #nav{color:#2bbc8a;letter-spacing:.01em;font-weight:200;font-style:normal;font-size:.8rem}#header-post #nav ul{line-height:15px}#header-post #nav ul a{margin-right:15px;color:#2bbc8a}#header-post #nav ul a:hover{background-image:linear-gradient(transparent, transparent 5px, #2bbc8a 5px, #2bbc8a);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}#header-post #nav ul li{border-right:1px dotted #2bbc8a}#header-post #nav ul li:last-child{margin-right:0;border-right:0}#header-post #nav ul li:last-child a{margin-right:0}#header-post #actions{float:right;margin-top:2rem;margin-right:2rem;width:100%;text-align:right}#header-post #actions ul{display:block}#header-post #actions .info{display:block;font-style:italic}#header-post #share{clear:both;padding-top:1rem;padding-right:2rem;text-align:right}#header-post #share li{display:block;margin:0}#header-post #toc{float:right;clear:both;overflow:auto;margin-top:1rem;padding-right:2rem;max-width:20em;max-height:calc(95vh - 7rem);text-align:right}#header-post #toc a:hover{color:#d480aa}#header-post #toc nav>ul>li{color:#c9cacc;font-size:.8rem}#header-post #toc nav>ul>li:before{color:#2bbc8a;content:"#";margin-right:8px}#header-post #toc nav>ul>li>ul>li{color:#666;font-size:.7rem}#header-post #toc nav>ul>li>ul>li:before{color:#2bbc8a;content:"·";font-weight:bold;margin-right:3px}#header-post #toc nav>ul>li>ul>li>ul>li{color:#333;font-size:.4rem}#header-post #toc .toc-level-5{display:none}#header-post #toc .toc-level-6{display:none}#header-post #toc .toc-number{display:none}@media screen and (max-width: 500px){#header-post{display:none}}@media screen and (max-width: 900px){#header-post #menu-icon{display:none}#header-post #actions{display:none}}@media screen and (max-width: 1199px){#header-post #toc{display:none}}@media screen and (min-width: 900px){#header-post #menu-icon-tablet{display:none !important}#header-post #top-icon-tablet{display:none !important}}@media screen and (min-width: 1199px){#header-post #actions{width:auto}#header-post #actions ul{display:inline-block;float:right}#header-post #actions .info{display:inline;float:left;margin-right:2rem;font-style:italic}}#footer-post{position:fixed;right:0;bottom:0;left:0;z-index:5000000;width:100%;border-top:1px solid #666;background:#222426;transition:opacity .2s}#footer-post a{background:none;color:inherit;text-decoration:none}#footer-post a.icon{background:none}#footer-post a.icon:hover{color:#d480aa}#footer-post #nav-footer{padding-right:1rem;padding-left:1rem;background:#35393c;text-align:center}#footer-post #nav-footer a{color:#2bbc8a;font-size:1em}#footer-post #nav-footer a:hover{background-image:linear-gradient(transparent, transparent 5px, #2bbc8a 5px, #2bbc8a);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}#footer-post #nav-footer ul{display:table;margin:0;padding:0;width:100%;list-style-type:none}#footer-post #nav-footer ul li{display:inline-table;padding:10px;width:20%;vertical-align:middle}#footer-post #actions-footer{overflow:auto;margin-top:1rem;margin-bottom:1rem;padding-right:1rem;padding-left:1rem;width:100%;text-align:center;white-space:nowrap}#footer-post #actions-footer a{display:inline-block;padding-left:1rem;color:#2bbc8a}#footer-post #share-footer{padding-right:1rem;padding-left:1rem;background:#35393c;text-align:center}#footer-post #share-footer ul{display:table;margin:0;padding:0;width:100%;list-style-type:none}#footer-post #share-footer ul li{display:inline-table;padding:10px;width:20%;vertical-align:middle}#footer-post #toc-footer{clear:both;padding-top:1rem;padding-bottom:1rem;background:#35393c;text-align:left}#footer-post #toc-footer #TableOfContents ul{margin:0;padding-left:20px;list-style-type:none}#footer-post #toc-footer #TableOfContents ul li{line-height:30px}#footer-post #toc-footer a:hover{color:#d480aa}#footer-post #toc-footer #TableOfContents>ul>li{color:#c9cacc;font-size:.8rem}#footer-post #toc-footer #TableOfContents>ul>li:before{color:#2bbc8a;content:"#";margin-right:8px}#footer-post #toc-footer #TableOfContents>ul>li>ul>li{color:#666;font-size:.7rem;line-height:15px}#footer-post #toc-footer #TableOfContents>ul>li>ul>li:before{color:#2bbc8a;content:"·";font-weight:bold;margin-right:3px}#footer-post #toc-footer #TableOfContents>ul>li>ul>li>ul>li{display:none}@media screen and (min-width: 500px){#footer-post-container{display:none}}.post-list{padding:0}.post-list .post-item{margin-bottom:1rem;margin-left:0;list-style-type:none}.post-list .post-item .meta{display:block;margin-right:16px;min-width:100px;color:#666;font-size:14px}@media (min-width: 480px){.post-list .post-item{display:flex;margin-bottom:5px}.post-list .post-item .meta{text-align:left}}.project-list{padding:0;list-style:none}.project-list .project-item{margin-bottom:5px}.project-list .project-item p{display:inline}article header .posttitle{margin-top:0;margin-bottom:0;text-transform:none;font-size:1.5em;line-height:1.25}article header .meta{margin-top:0;margin-bottom:1rem}article header .meta *{color:#ccc;font-size:.85rem}article header .author{text-transform:uppercase;letter-spacing:.01em;font-weight:700}article header .postdate{display:inline}article .content h2:before{position:absolute;top:-4px;left:-1rem;color:#2bbc8a;content:"#";font-weight:bold;font-size:1.2rem}article .content img,article .content video{display:block;margin:auto;max-width:100%;height:auto}article .content img .video-container,article .content video .video-container{position:relative;overflow:hidden;padding-top:56.25% e;height:0}article .content img .video-container iframe,article .content img .video-container object,article .content img .video-container embed,article .content video .video-container iframe,article .content video .video-container object,article .content video .video-container embed{position:absolute;top:0;left:0;margin-top:0;width:100%;height:100%}article .content img blockquote,article .content video blockquote{margin:1rem 10px;padding:.5em 10px;background:inherit;color:#ccffb6;quotes:"\201C" "\201D" "\2018" "\2019";font-weight:bold}article .content img blockquote p,article .content video blockquote p{margin:0}article .content img blockquote:before,article .content video blockquote:before{margin-right:.25em;color:#ccffb6;content:"\201C";vertical-align:-.4em;font-size:2em;line-height:.1em}article .content img blockquote footer,article .content video blockquote footer{margin:line-height 0;color:#666;font-size:11px}article .content img blockquote footer a,article .content video blockquote footer a{background-image:linear-gradient(transparent, transparent 5px, #666 5px, #666);color:#666}article .content img blockquote footer a:hover,article .content video blockquote footer a:hover{background-image:linear-gradient(transparent, transparent 4px, #999 4px, #999);color:#999}article .content img blockquote footer cite:before,article .content video blockquote footer cite:before{padding:0 .5em;content:"—"}article .content img .pullquote,article .content video .pullquote{margin:0;width:45%;text-align:left}article .content img .pullquote.left,article .content video .pullquote.left{margin-right:1em;margin-left:.5em}article .content img .pullquote.right,article .content video .pullquote.right{margin-right:.5em;margin-left:1em}article .content img .caption,article .content video .caption{position:relative;display:block;margin-top:.5em;color:#666;text-align:center;font-size:.9em}.posttitle{text-transform:none;font-size:1.5em;line-height:1.25}.article-tag .tag-link:before{content:"#";background-image:linear-gradient(transparent, transparent 10px, #d480aa 10px, #d480aa);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}.article-category .category-link{background-image:linear-gradient(transparent, transparent 10px, #d480aa 10px, #d480aa);background-position:bottom;background-size:100% 6px;background-repeat:repeat-x}@media (min-width: 480px){.article-read-time,.article-tag,.article-category{display:inline}.article-read-time:before,.article-tag:before,.article-category:before{content:"|"}}#archive .post-list{padding:0}#archive .post-list .post-item{margin-bottom:1rem;margin-left:0;list-style-type:none}#archive .post-list .post-item .meta{display:block;margin-right:16px;min-width:100px;color:#666;font-size:14px}@media (min-width: 480px){#archive .post-list .post-item{display:flex;margin-bottom:5px;margin-left:1rem}#archive .post-list .post-item .meta{text-align:left}}.blog-post-comments{margin-top:4rem}#footer{position:absolute;bottom:0;margin-bottom:10px;width:100%;color:#666;vertical-align:top;text-align:center;font-size:11px}#footer ul{margin:0;padding:0;list-style:none}#footer li{display:inline-block;margin-right:15px;border-right:1px solid;border-color:#666;vertical-align:middle}#footer li a{margin-right:15px}#footer li:last-child{margin-right:0;border-right:0}#footer li:last-child a{margin-right:0}#footer a{color:#666;text-decoration:underline;background-image:none}#footer a:hover{color:#999}#footer .footer-left{height:20px;vertical-align:middle;line-height:20px}@media (min-width: 39rem){#footer{display:flex;flex-flow:row wrap;justify-content:space-between;align-items:center;align-content:center;margin-bottom:20px}#footer .footer-left{align-self:flex-start;margin-right:20px}#footer .footer-right{align-self:flex-end}}.pagination{display:inline-block;margin-top:2rem;width:100%;text-align:center}.pagination .page-number{color:#c9cacc;font-size:.8rem}.pagination a{padding:4px 6px;border-radius:5px;background-image:none;color:#c9cacc;text-decoration:none}.pagination a:hover{background-image:none}.pagination a:hover:not(.active){color:#eee}.search-input{padding:4px 7px;width:100%;outline:none;border:solid 1px #ccc;border-radius:5px;background-color:#1d1f21;color:#c9cacc;font-size:1.2rem;-webkit-border-radius:5px;-moz-border-radius:5px}.search-input:focus{border:solid 1px #2bbc8a}#search-result ul.search-result-list{padding:0;list-style-type:none}#search-result li{margin:2em auto}#search-result a.search-result-title{background-image:none;color:#c9cacc;text-transform:capitalize;font-weight:bold;line-height:1.2}#search-result p.search-result{overflow:hidden;margin:.4em auto;max-height:13em;text-align:justify;font-size:.8em}#search-result em.search-keyword{border-bottom:1px dashed #d480aa;color:#d480aa;font-weight:bold}.search-no-result{display:none;padding-bottom:.5em;color:#c9cacc}#tag-cloud .tag-cloud-title{color:#666}#tag-cloud .tag-cloud-tags{clear:both;text-align:center}#tag-cloud .tag-cloud-tags a{display:inline-block;margin:10px}.tooltipped{position:relative}.tooltipped::after{position:absolute;z-index:1000000;display:none;padding:.2em .5em;-webkit-font-smoothing:subpixel-antialiased;color:#1d1f21;font-display:swap;font-weight:400;font-size:11.2px;font-family:"JetBrains Mono",monospace;line-height:1.725;text-rendering:geometricPrecision;text-align:center;word-wrap:break-word;white-space:pre;content:attr(aria-label);background:#c9cacc;border-radius:3px;opacity:0}.tooltipped::before{position:absolute;z-index:1000001;display:none;width:0;height:0;color:#c9cacc;pointer-events:none;content:'';border:6px solid transparent;opacity:0}@keyframes tooltip-appear{from{opacity:0}to{opacity:1}}.tooltipped:hover::before,.tooltipped:hover::after,.tooltipped:active::before,.tooltipped:active::after,.tooltipped:focus::before,.tooltipped:focus::after{display:inline-block;text-decoration:none;animation-name:tooltip-appear;animation-duration:0.1s;animation-fill-mode:forwards;animation-timing-function:ease-in}.tooltipped-s::after,.tooltipped-sw::after{top:100%;right:50%;margin-top:6px}.tooltipped-s::before,.tooltipped-sw::before{top:auto;right:50%;bottom:-7px;margin-right:-6px;border-bottom-color:#c9cacc}.tooltipped-sw::after{margin-right:-16px}.tooltipped-s::after{transform:translateX(50%)}#categories .category-list-title{color:#666}#categories .category-list .category-list-item .category-list-count{color:#666}#categories .category-list .category-list-item .category-list-count:before{content:" ("}#categories .category-list .category-list-item .category-list-count:after{content:")"}pre{overflow-x:auto;padding:15px 15px 10px 15px;border:1px dotted #666;border-radius:2px;-webkit-border-radius:2px;font-size:13px;font-family:"JetBrains Mono",monospace;line-height:22px;position:relative}pre .code-copy-btn{position:absolute;top:0;right:0;border:0;border-radius:0 2px;padding:0;font-family:"JetBrains Mono", monospace;font-weight:800;font-size:0.9em;line-height:1.7;color:#fff;background-color:#8c8c8c;min-width:60px;text-align:center;cursor:pointer;letter-spacing:0em}pre .code-copy-btn:hover{background-color:#666;color:#2bbc8a}pre code{display:block;padding:0;border:none}code{font-family:"JetBrains Mono",monospace;padding:0 5px;border:1px dotted #666;border-radius:2px;-webkit-border-radius:2px}.highlight>div{border-radius:2px;-webkit-border-radius:2px}.highlight pre{border:none;background:none}.highlight table pre{margin-top:0}.highlight table td:first-child pre{padding-right:0}.highlight table td:last-child pre{padding-left:0} + +/*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/resources/_gen/assets/scss/style.scss_b4ac9c581169bbe215738ec274a3b4f2.json b/resources/_gen/assets/scss/style.scss_b4ac9c581169bbe215738ec274a3b4f2.json new file mode 100644 index 0000000..52bde97 --- /dev/null +++ b/resources/_gen/assets/scss/style.scss_b4ac9c581169bbe215738ec274a3b4f2.json @@ -0,0 +1 @@ +{"Target":"css/styles.c05d68261bf086a9d7713c4f8a6215a3601608e267a816a7ee58f139b3d1aae51222aae2081c8e0c6bd35e1334773b7a16283022f31f92afd93bb37e5e822e66.css","MediaType":"text/css","Data":{"Integrity":"sha512-wF1oJhvwhqnXcTxPimIVo2AWCOJnqBan7ljxObPRquUSIqriCByODGvTXhM0dzt6FigwIvMfkq/ZO7N+XoIuZg=="}} \ No newline at end of file diff --git a/static/image.jpg b/static/image.jpg new file mode 100644 index 0000000..edb912f Binary files /dev/null and b/static/image.jpg differ diff --git a/themes/cactus b/themes/cactus new file mode 160000 index 0000000..a5df1d6 --- /dev/null +++ b/themes/cactus @@ -0,0 +1 @@ +Subproject commit a5df1d6bed256689eea9ab3617e331484427e986