From b1aa77c877516c80a5f0e32fe7049f990b1be209 Mon Sep 17 00:00:00 2001 From: Elias Batek Date: Mon, 22 Jul 2024 02:13:47 +0200 Subject: [PATCH 01/10] Add "Oceandrift D-Man collection" to project structure --- README.md | 6 + index.html | 1 + oceandrift/COPYING.txt | 396 +++++++++++++++++++++++++++++++++++++++++ oceandrift/index.md | 20 +++ 4 files changed, 423 insertions(+) create mode 100644 oceandrift/COPYING.txt create mode 100644 oceandrift/index.md diff --git a/README.md b/README.md index 15086d4..3956611 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,12 @@ By [@meiz_sandwich](https://twitter.com/meiz_sandwich). License: can be used for any promotion of the D language. +### Oceandrift D-Man collection + +By Elias A. Batek ([@0xEAB](https://github.com/0xEAB)). + +License: [CC-BY-4.0](./oceandrift/COPYING.txt). + ## Other D-Man resources - [dlang comic strips](https://twitter.com/DlangGuy): A collection of comics D-Man comics (made with love) diff --git a/index.html b/index.html index 7d4797e..bc96009 100644 --- a/index.html +++ b/index.html @@ -15,6 +15,7 @@

Available collections

diff --git a/oceandrift/COPYING.txt b/oceandrift/COPYING.txt new file mode 100644 index 0000000..da6ab6c --- /dev/null +++ b/oceandrift/COPYING.txt @@ -0,0 +1,396 @@ +Attribution 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution 4.0 International Public License ("Public License"). To the +extent this Public License may be interpreted as a contract, You are +granted the Licensed Rights in consideration of Your acceptance of +these terms and conditions, and the Licensor grants You such rights in +consideration of benefits the Licensor receives from making the +Licensed Material available under these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. + diff --git a/oceandrift/index.md b/oceandrift/index.md new file mode 100644 index 0000000..9801335 --- /dev/null +++ b/oceandrift/index.md @@ -0,0 +1,20 @@ +--- +layout: default +title: Oceandrift +--- + +# Oceandrift D-Man collection + +by Elias A. Batek ([@0xEAB](https://github.com/0xEAB)). +License: [CC-BY-4.0](./COPYING.txt). + +
+{% for file in site.static_files -%} + {%- assign pageurl = page.url | replace: 'index.html', '' -%} + {%- if file.path contains pageurl -%} + {%- if file.extname == '.svg' or file.extname == '.png' %} +{{ file.basename }} + {%- endif -%} + {%- endif -%} +{% endfor -%} +
From 80a0109d5bf83d4b6ca3a74222fdd037e291be3f Mon Sep 17 00:00:00 2001 From: Elias Batek Date: Mon, 22 Jul 2024 02:21:21 +0200 Subject: [PATCH 02/10] Add "D-Man Ship" to the "Oceandrift" collection --- oceandrift/2024-07-21_ship/d-man_ship-draft.svg | 1 + oceandrift/2024-07-21_ship/d-man_ship-sketch.svg | 1 + oceandrift/index.md | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 oceandrift/2024-07-21_ship/d-man_ship-draft.svg create mode 100644 oceandrift/2024-07-21_ship/d-man_ship-sketch.svg diff --git a/oceandrift/2024-07-21_ship/d-man_ship-draft.svg b/oceandrift/2024-07-21_ship/d-man_ship-draft.svg new file mode 100644 index 0000000..3b8d1f7 --- /dev/null +++ b/oceandrift/2024-07-21_ship/d-man_ship-draft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/oceandrift/2024-07-21_ship/d-man_ship-sketch.svg b/oceandrift/2024-07-21_ship/d-man_ship-sketch.svg new file mode 100644 index 0000000..be3b55c --- /dev/null +++ b/oceandrift/2024-07-21_ship/d-man_ship-sketch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/oceandrift/index.md b/oceandrift/index.md index 9801335..5a40784 100644 --- a/oceandrift/index.md +++ b/oceandrift/index.md @@ -9,7 +9,8 @@ by Elias A. Batek ([@0xEAB](https://github.com/0xEAB)). License: [CC-BY-4.0](./COPYING.txt).
-{% for file in site.static_files -%} +{% assign sorted_files = site.static_files | sort: 'path' -%} +{% for file in sorted_files -%} {%- assign pageurl = page.url | replace: 'index.html', '' -%} {%- if file.path contains pageurl -%} {%- if file.extname == '.svg' or file.extname == '.png' %} From 3010d030f86c20748d820aa8aa6ed0b403dc75b0 Mon Sep 17 00:00:00 2001 From: Elias Batek Date: Mon, 22 Jul 2024 03:47:21 +0200 Subject: [PATCH 03/10] Add "Cargo Ship" to the "Oceandrift" collection --- .../2024-07-21_ship/d-man_cargo-ship.svg | 623 ++++++++++++++++++ oceandrift/2024-07-21_ship/info.txt | 7 + oceandrift/index.md | 2 +- 3 files changed, 631 insertions(+), 1 deletion(-) create mode 100644 oceandrift/2024-07-21_ship/d-man_cargo-ship.svg create mode 100644 oceandrift/2024-07-21_ship/info.txt diff --git a/oceandrift/2024-07-21_ship/d-man_cargo-ship.svg b/oceandrift/2024-07-21_ship/d-man_cargo-ship.svg new file mode 100644 index 0000000..6edbb35 --- /dev/null +++ b/oceandrift/2024-07-21_ship/d-man_cargo-ship.svg @@ -0,0 +1,623 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/oceandrift/2024-07-21_ship/info.txt b/oceandrift/2024-07-21_ship/info.txt new file mode 100644 index 0000000..fc25213 --- /dev/null +++ b/oceandrift/2024-07-21_ship/info.txt @@ -0,0 +1,7 @@ +Created for the “dlang-dockerized” project to be used as its avatar. + +Note: `d-man_cargo-ship.svg` is an Inkscape-SVG file. +You might want to reduce it to plain SVG for further use. + +The original sketch was drawn using the “Simple Draw” app on my phone. +It’s included here as bonus (`d-man_ship-sketch.svg`). diff --git a/oceandrift/index.md b/oceandrift/index.md index 5a40784..8c7a5eb 100644 --- a/oceandrift/index.md +++ b/oceandrift/index.md @@ -14,7 +14,7 @@ License: [CC-BY-4.0](./COPYING.txt). {%- assign pageurl = page.url | replace: 'index.html', '' -%} {%- if file.path contains pageurl -%} {%- if file.extname == '.svg' or file.extname == '.png' %} -{{ file.basename }} +{{ file.basename }} {%- endif -%} {%- endif -%} {% endfor -%} From b0c042d136ef20155d9548f47924bbbe3e5cbc56 Mon Sep 17 00:00:00 2001 From: Elias Batek Date: Mon, 26 Aug 2024 05:55:52 +0200 Subject: [PATCH 04/10] Add "contract programming" comic strip --- .../d-man_contract-programming.inkscape.svg | 1851 +++++++++++++++++ 1 file changed, 1851 insertions(+) create mode 100644 oceandrift/2024-08-25_contract-programming/d-man_contract-programming.inkscape.svg diff --git a/oceandrift/2024-08-25_contract-programming/d-man_contract-programming.inkscape.svg b/oceandrift/2024-08-25_contract-programming/d-man_contract-programming.inkscape.svg new file mode 100644 index 0000000..cbdf028 --- /dev/null +++ b/oceandrift/2024-08-25_contract-programming/d-man_contract-programming.inkscape.svg @@ -0,0 +1,1851 @@ + + + +Continu-ously.And keep them in sync.You just have to copy +over the checks from our contracts and handle vio-lations gracefully.Which +can get tedious quickly. Be- +cause…Um… In our particular case it means adding a bit of input validation.Well, how would one fix a bug +in such a situation?Sounds pretty helpful to me!The program prints a stack trace that helps with debugging and then it crashes for safety reasons.Actually, this part is quite nice…Nothing per se.So, what’s wrong with that?Oh, contracts are essentially self-tests that can detect bugs in your code.What’s that?The library team wants to do contract programming!What’s +going on!?Recently in the office… From 43457102596587eb0d8263fd2f54b7c03be667c2 Mon Sep 17 00:00:00 2001 From: Elias Batek Date: Mon, 26 Aug 2024 06:03:48 +0200 Subject: [PATCH 05/10] Add sketch of panel 1 of "contract programming" as bonus content --- .../d-man_contract-programming_sketch.png | Bin 0 -> 18792 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 oceandrift/2024-08-25_contract-programming/d-man_contract-programming_sketch.png diff --git a/oceandrift/2024-08-25_contract-programming/d-man_contract-programming_sketch.png b/oceandrift/2024-08-25_contract-programming/d-man_contract-programming_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b5d0353cbf3dee6f6786fac17c441c6f9e52e2 GIT binary patch literal 18792 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 Date: Wed, 4 Sep 2024 01:11:07 +0200 Subject: [PATCH 06/10] Add dist version of "contract programming" comic with text converted to paths --- .../d-man_contract-programming.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 oceandrift/2024-08-25_contract-programming/d-man_contract-programming.svg diff --git a/oceandrift/2024-08-25_contract-programming/d-man_contract-programming.svg b/oceandrift/2024-08-25_contract-programming/d-man_contract-programming.svg new file mode 100644 index 0000000..44a5049 --- /dev/null +++ b/oceandrift/2024-08-25_contract-programming/d-man_contract-programming.svg @@ -0,0 +1 @@ + \ No newline at end of file From 1294c91773c9af154e9d1d2290635be52a0ab449 Mon Sep 17 00:00:00 2001 From: Elias Batek Date: Wed, 4 Sep 2024 01:19:31 +0200 Subject: [PATCH 07/10] Fix indentation --- css/main.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/main.css b/css/main.css index cce682b..09c4e23 100644 --- a/css/main.css +++ b/css/main.css @@ -17,5 +17,5 @@ } .site-nav { - display: inline-block; + display: inline-block; } From 81e2aec4750f5aaf75af2385695358cb2e37146e Mon Sep 17 00:00:00 2001 From: Elias Batek Date: Wed, 4 Sep 2024 01:20:29 +0200 Subject: [PATCH 08/10] Replace inline-style with container+class --- css/main.css | 4 ++++ meiz/index.html | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/css/main.css b/css/main.css index 09c4e23..b321f94 100644 --- a/css/main.css +++ b/css/main.css @@ -19,3 +19,7 @@ .site-nav { display: inline-block; } + +.gallery img { + max-width: 30%; +} diff --git a/meiz/index.html b/meiz/index.html index e8e7d6c..1ed8e36 100644 --- a/meiz/index.html +++ b/meiz/index.html @@ -3,11 +3,13 @@ title: Meiz --- + From 759436e1a5e4a4d20de366de474c4efb8320e361 Mon Sep 17 00:00:00 2001 From: Elias Batek Date: Wed, 4 Sep 2024 01:53:41 +0200 Subject: [PATCH 09/10] Replace automatic listing with a manual one for the "Oceandrift D-Man collection" --- css/main.css | 10 ++++ oceandrift/2024-07-21_ship/info.txt | 7 --- oceandrift/index.md | 72 +++++++++++++++++++++++++---- 3 files changed, 72 insertions(+), 17 deletions(-) delete mode 100644 oceandrift/2024-07-21_ship/info.txt diff --git a/css/main.css b/css/main.css index b321f94..1edd5fd 100644 --- a/css/main.css +++ b/css/main.css @@ -23,3 +23,13 @@ .gallery img { max-width: 30%; } + +.gallery.big img { + max-width: 90%; +} + +@media (min-width: 1200px) { + .gallery.big img { + max-width: 60%; + } +} diff --git a/oceandrift/2024-07-21_ship/info.txt b/oceandrift/2024-07-21_ship/info.txt deleted file mode 100644 index fc25213..0000000 --- a/oceandrift/2024-07-21_ship/info.txt +++ /dev/null @@ -1,7 +0,0 @@ -Created for the “dlang-dockerized” project to be used as its avatar. - -Note: `d-man_cargo-ship.svg` is an Inkscape-SVG file. -You might want to reduce it to plain SVG for further use. - -The original sketch was drawn using the “Simple Draw” app on my phone. -It’s included here as bonus (`d-man_ship-sketch.svg`). diff --git a/oceandrift/index.md b/oceandrift/index.md index 8c7a5eb..6097ee1 100644 --- a/oceandrift/index.md +++ b/oceandrift/index.md @@ -8,14 +8,66 @@ title: Oceandrift by Elias A. Batek ([@0xEAB](https://github.com/0xEAB)). License: [CC-BY-4.0](./COPYING.txt). -
-{% assign sorted_files = site.static_files | sort: 'path' -%} -{% for file in sorted_files -%} - {%- assign pageurl = page.url | replace: 'index.html', '' -%} - {%- if file.path contains pageurl -%} - {%- if file.extname == '.svg' or file.extname == '.png' %} -{{ file.basename }} - {%- endif -%} - {%- endif -%} -{% endfor -%} + +## Contract Programming + +*2024-08-25* + +[Contract programming](https://dlang.org/spec/contracts.html) is a nice and powerful feature. + + + +But like with every tool it’s important to use it for the right job. +If one finds themselves in a situation where contracts verify whether input has been properly validated, +it might be better to replace those contracts with input validation. +This can not only save maintenance time spent keeping validation in sync with the contracts +but also prevent those application crashes that go hand in hand with failed contract assertions. +As crashes are bad for availability, they can end up becoming denial-of-service security vulnerabilities. +Keep in mind that availability is a security criterion similar to confidentiality and integrity. + +[→ Source file](./2024-08-25_contract-programming/d-man_contract-programming.inkscape.svg) + +### Sketch of panel 1 (Bonus) + + + + +## Ship + +*2024-07-21* + +Created for the “dlang-dockerized” project to be used as its avatar. + +Note: `d-man_cargo-ship.svg` is an Inkscape-SVG file. +You might want to reduce it to plain SVG for further use. + +The original sketch was drawn using the “Simple Draw” app on my phone. +It’s included here as a bonus (`d-man_ship-sketch.svg`). + + From 74e8bc34672d8f3afe23d06a164814e044771491 Mon Sep 17 00:00:00 2001 From: Elias Batek Date: Wed, 4 Sep 2024 02:28:14 +0200 Subject: [PATCH 10/10] Fix nav entry separator --- _includes/header.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_includes/header.html b/_includes/header.html index 56af968..1f2c0b7 100644 --- a/_includes/header.html +++ b/_includes/header.html @@ -7,7 +7,7 @@