1
0
mirror of https://github.com/avinal/avinal.github.io.git synced 2026-07-03 23:30:09 +05:30

52 Commits

Author SHA1 Message Date
avinal de9debbb5d sorted json file
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2023-01-02 01:38:55 +05:30
avinal 4882b60bde move static files to ghpages
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2023-01-01 12:18:57 +05:30
avinal 9b27f45e00 Fix blog posting
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-16 19:20:48 +05:30
avinal eb0f825244 Fix blog posting
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-16 18:49:40 +05:30
avinal 398a09d301 add blog listing fucntions
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-16 17:42:47 +05:30
avinal fe325ca25a add favicon and html page handling
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-16 02:35:40 +05:30
avinal 3840e00bec fix text size and colors
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-15 21:56:35 +05:30
avinal e46f0dfbbe fix styling issue
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-15 21:27:32 +05:30
avinal 0a97668317 add font page design
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-15 21:16:02 +05:30
avinal cda5e8288d add font page design
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-15 20:59:16 +05:30
avinal c64a15fef5 add support for article image
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-15 02:04:33 +05:30
avinal 770e809bd2 remove unused
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-15 02:04:03 +05:30
avinal a68c0354d4 fix styling errors 2022-09-14 21:56:38 +05:30
avinal 2a66c43f5e fix markdown error and 404 2022-09-14 21:38:20 +05:30
avinal f15f4b825f add blogs 2022-09-14 19:51:10 +05:30
avinal a6e6a4a3ba for production 2022-09-14 19:50:47 +05:30
avinal c1570d2b7f modify workflow 2022-09-14 19:50:01 +05:30
avinal c954347451 fix some bugs 2022-09-14 17:33:27 +05:30
avinal f325dafde1 disable scrollonfragmnt 2022-09-14 17:03:22 +05:30
avinal 6e8570edb2 test prism highlighting 2022-09-14 16:50:05 +05:30
avinal 38febf8727 test without callback 2022-09-14 16:31:46 +05:30
avinal 9baef63a2e fix error reporting
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-14 16:15:36 +05:30
avinal b0bcd5794e fix parsing and add scroll
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-14 15:41:45 +05:30
avinal e6e5a939f3 reduce unused styling
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-14 15:34:45 +05:30
avinal 2ba5689a76 fix yaml parsing error
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-14 00:16:32 +05:30
avinal e41f2e4520 remove slug
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-13 23:26:19 +05:30
avinal abe8d6ee20 add metadata parsing
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-13 23:26:04 +05:30
avinal d71d020d85 fix url resolution error
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-13 02:59:39 +05:30
avinal 5fd42929ae add example pages
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-13 02:53:29 +05:30
avinal 65fe4eb7a1 update public pages
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-13 02:40:06 +05:30
avinal 0e331cd41f add blog parser
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-13 02:39:09 +05:30
avinal d30b69bac0 add markdown loader
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-10 20:01:45 +05:30
avinal 8ac581d3a0 fix some style issue
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 22:38:55 +05:30
avinal 914ec4c0b6 fix some style issue
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 22:25:20 +05:30
avinal f52ca5f7e4 fix some style issue
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 19:50:34 +05:30
avinal d949aab083 fix some style issue
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 19:46:02 +05:30
avinal bab11c32bd fix some style issue
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 19:37:53 +05:30
avinal 5e539dadaf fix some style issue
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 19:07:00 +05:30
avinal 80a054c8c0 fix some style issue
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 18:25:10 +05:30
avinal 291a44de09 try merging css
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 16:48:43 +05:30
avinal 68cbbdee1f add html parser and test blog
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 15:26:33 +05:30
avinal f19dba4ef8 add post styles and increase animation time
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 15:25:46 +05:30
avinal 038cc78441 add better error page
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 11:44:01 +05:30
avinal 42d6fed355 add background to blogs
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 11:33:18 +05:30
avinal e21a03d871 fix fonts
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 11:32:25 +05:30
avinal 7d6693ffbd fix links
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 00:26:14 +05:30
avinal 9b550b4eb9 Update build-deploy.yaml 2022-09-08 00:20:40 +05:30
avinal 47f946dde7 add workflow
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 00:19:11 +05:30
avinal 48f7b5907f add redirection mechanism
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 00:18:48 +05:30
avinal 00effc7c33 add html and styles
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 00:18:18 +05:30
avinal 5e2c452665 add basic project
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
2022-09-08 00:16:39 +05:30
avinal faa6d37ad9 Initial commit 2022-09-04 20:42:32 +05:30
205 changed files with 13158 additions and 28901 deletions
+60
View File
@@ -0,0 +1,60 @@
# Sample workflow for building and deploying a Hugo site to GitHub Pages
name: Deploy Elm site to Pages
on:
# Runs on pushes targeting the default branch
push:
branches: ["main"]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow one concurrent deployment
concurrency:
group: "pages"
cancel-in-progress: true
# Default to bash
defaults:
run:
shell: bash
jobs:
# Build job
build:
runs-on: ubuntu-latest
steps:
- name: Download and install elm
run: |
curl -L -o elm.gz https://github.com/elm/compiler/releases/download/0.19.1/binary-for-linux-64-bit.gz
gunzip elm.gz
sudo mv elm /usr/bin/elm
sudo chmod +x /usr/bin/elm
- name: checkout
uses: actions/checkout@v3
- name: build
run: elm make src/Main.elm --output public/app.js --optimize
- name: copy content for seving
run: cp -a content public/content
- name: Upload artifact
uses: actions/upload-pages-artifact@v1
with:
path: public/
# Deployment job
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v1
+4
View File
@@ -0,0 +1,4 @@
# elm-package generated files
elm-stuff
# elm-repl generated files
repl-temp-*
-38
View File
@@ -1,38 +0,0 @@
<!DOCTYPE html>
<html class="no-js">
<head>
<meta charset="utf-8">
<title>Lost in Space!</title>
<meta name="description" content="Somewhere out there beneath the pale moon light...">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="Avinal">
<link rel="stylesheet" href="https://avinal.space/custom/css/space404.css" />
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.2.0/css/font-awesome.min.css'>
</head>
<body>
<div class='description' align=center>
<h1>ME CHERCHEZ-VOUS?</h1>
<p class='links' align=center>
<a class='fa fa-github-alt icon' href='https://github.com/avinal' target='_blank'></a>
<a class='fa fa-mail-forward icon' href='mailto:avinal.xlvii@gmail.com' target='_blank'></a>
</p>
</div>
<div class='solar-syst'>
<div class='sun'></div>
<div class='mercury'></div>
<div class='venus'></div>
<div class='earth'></div>
<div class='mars'></div>
<div class='jupiter'></div>
<div class='saturn'></div>
<div class='uranus'></div>
<div class='neptune'></div>
<div class='pluto'></div>
<div class='asteroids-belt'></div>
</div>
</body>
</html>
-1
View File
@@ -1 +0,0 @@
avinal.space
+373
View File
@@ -0,0 +1,373 @@
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

-115
View File
@@ -1,115 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Archives | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/archives.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Archives
</h1>
<hr>
<dl class="row">
<dt class="col-sm-4">Sun 27 February 2022</dt>
<dd class="col-sm-8"><a href="https://avinal.space/posts/development/lovely-dangerous-things-redhat.html">Developing Minimal Tekton Server <a class="reference external image-reference" href="https://github.com/MiniTeks"><img alt="mks_logo" class="align-middle" src="/images/mks_logo.png" style="width: 1.5em;" /></a></a></dd>
<dt class="col-sm-4">Fri 25 February 2022</dt>
<dd class="col-sm-8"><a href="https://avinal.space/posts/development/i-am-loving-it-redhat.html">My internship at Red Hat <a class="reference external image-reference" href="https://redhat.com"><img alt="redhat_logo" class="align-middle" src="/images/redhat_logo.png" style="width: 1.5em;" /></a></a></dd>
<dt class="col-sm-4">Thu 19 August 2021</dt>
<dd class="col-sm-8"><a href="https://avinal.space/posts/report/final-evaluation.html">Google Summer of Code 2021</a></dd>
<dt class="col-sm-4">Sun 14 February 2021</dt>
<dd class="col-sm-8"><a href="https://avinal.space/posts/development/rst-guide.html">reStructuredText in GitHub</a></dd>
<dt class="col-sm-4">Tue 02 February 2021</dt>
<dd class="col-sm-8"><a href="https://avinal.space/posts/development/wakatime-readme.html">How I implemented WakaTime embeddable Coding Graph GHA?</a></dd>
<dt class="col-sm-4">Tue 26 January 2021</dt>
<dd class="col-sm-8"><a href="https://avinal.space/posts/development/twilight-blog.html">How I Created This Blog?</a></dd>
<dt class="col-sm-4">Sat 09 January 2021</dt>
<dd class="col-sm-8"><a href="https://avinal.space/posts/prime/prime1.html">Introduction to Prime Numbers</a></dd>
<dt class="col-sm-4">Mon 04 January 2021</dt>
<dd class="col-sm-8"><a href="https://avinal.space/posts/blog/hrt-interview-1.html"><abbr title="Hudson River Trading">HRT</abbr> Systems Internship Interview Experience</a></dd>
<dt class="col-sm-4">Thu 31 December 2020</dt>
<dd class="col-sm-8"><a href="https://avinal.space/posts/development/wsl1.html">Move WSL 2 Safely to another Drive</a></dd>
<dt class="col-sm-4">Tue 01 December 2020</dt>
<dd class="col-sm-8"><a href="https://avinal.space/posts/development/vlc-gsod-report.html">Create the VLC User Documentation for one Mobile Port(Android)</a></dd>
<dt class="col-sm-4">Mon 28 September 2020</dt>
<dd class="col-sm-8"><a href="https://avinal.space/posts/blog/this-is-for-you.html">The Interstellar Twilight</a></dd>
<dt class="col-sm-4">Sat 21 September 2019</dt>
<dd class="col-sm-8"><a href="https://avinal.space/posts/article/for-sunshine.html">प्रेम रतन धन पायो</a></dd>
<dt class="col-sm-4">Mon 27 February 2012</dt>
<dd class="col-sm-8"><a href="https://avinal.space/posts/article/red-big-ants.html">The Big Red Ants</a></dd>
</dl>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-214
View File
@@ -1,214 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Avinal Articles | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/author/avinal.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Avinal Articles
</h1>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2022-02-27T20:47:00+05:30">
<i class="fas fa-clock"></i>
Sun 27 February 2022
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/lovely-dangerous-things-redhat.html">Developing Minimal Tekton Server <a class="reference external image-reference" href="https://github.com/MiniTeks"><img alt="mks_logo" class="align-middle" src="/images/mks_logo.png" style="width: 1.5em;" /></a></a>
</h4>
<div class="content">
We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2022-02-25T20:47:00+05:30">
<i class="fas fa-clock"></i>
Fri 25 February 2022
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/i-am-loving-it-redhat.html">My internship at Red Hat <a class="reference external image-reference" href="https://redhat.com"><img alt="redhat_logo" class="align-middle" src="/images/redhat_logo.png" style="width: 1.5em;" /></a></a>
</h4>
<div class="content">
I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-08-19T23:07:00+05:30">
<i class="fas fa-clock"></i>
Thu 19 August 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/report.html">report</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/report/final-evaluation.html">Google Summer of Code 2021</a>
</h4>
<div class="content">
This is the final report of my Google Summer of Code 2021 at The FOSSology Project.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-02-14T22:47:00+05:30">
<i class="fas fa-clock"></i>
Sun 14 February 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/rst-guide.html">reStructuredText in GitHub</a>
</h4>
<div class="content">
reStructuredText syntax
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-02-02T21:47:00+05:30">
<i class="fas fa-clock"></i>
Tue 02 February 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/wakatime-readme.html">How I implemented WakaTime embeddable Coding Graph GHA?</a>
</h4>
<div class="content">
f you use WakaTime to track your coding activity. You can add that to your README as a bar graph or embed it in your blog/portfolio. Just add this action to any of your repositories and there you have it.
</div>
</div>
</article>
<hr>
<ul class="pagination">
<li class="page-item">
<span class="page-link">1 of 3</span>
</li>
<li class="page-item">
<a class="page-link" href="https://avinal.space/author/avinal2.html">
<span aria-hidden="true">&raquo;</span>
<span class="sr-only">Next</span>
</a>
</li>
</ul>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-220
View File
@@ -1,220 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Avinal Articles | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/author/avinal2.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Avinal Articles
</h1>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-01-26T16:47:00+05:30">
<i class="fas fa-clock"></i>
Tue 26 January 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/twilight-blog.html">How I Created This Blog?</a>
</h4>
<div class="content">
As you would have guessed by now, this blog is created using one such awesome SSG named Pelican. Pelican is simple, customizable and offers lots of themes and plugins. Pelican is python based SSG and is available through pip.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-01-09T22:29:00+05:30">
<i class="fas fa-clock"></i>
Sat 09 January 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/prime.html">prime</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/prime/prime1.html">Introduction to Prime Numbers</a>
</h4>
<div class="content">
A prime is a positive integer p having exactly two positive divisors, namely 1 and p. An integer n is composite if n > 1 and n is not prime. (The number 1 is considered neither prime nor composite.)
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-01-04T21:47:00+05:30">
<i class="fas fa-clock"></i>
Mon 04 January 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/blog.html">blog</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/blog/hrt-interview-1.html"><abbr title="Hudson River Trading">HRT</abbr> Systems Internship Interview Experience</a>
</h4>
<div class="content">
I applied for Systems Internship - Summer 2021 back in December 2020 at Hudson River Trading , New York.....Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2020-12-31T19:07:00+05:30">
<i class="fas fa-clock"></i>
Thu 31 December 2020
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/wsl1.html">Move WSL 2 Safely to another Drive</a>
</h4>
<div class="content">
It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2020-12-01T23:47:00+05:30">
<i class="fas fa-clock"></i>
Tue 01 December 2020
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/vlc-gsod-report.html">Create the VLC User Documentation for one Mobile Port(Android)</a>
</h4>
<div class="content">
The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLCs wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization.
</div>
</div>
</article>
<hr>
<ul class="pagination">
<li class="page-item">
<a class="page-link" href="https://avinal.space/author/avinal.html">
<span aria-hidden="true">&laquo;</span>
<span class="sr-only">Previous</span>
</a>
</li>
<li class="page-item">
<span class="page-link">2 of 3</span>
</li>
<li class="page-item">
<a class="page-link" href="https://avinal.space/author/avinal3.html">
<span aria-hidden="true">&raquo;</span>
<span class="sr-only">Next</span>
</a>
</li>
</ul>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-168
View File
@@ -1,168 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Avinal Articles | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/author/avinal3.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Avinal Articles
</h1>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2020-09-28T22:47:00+05:30">
<i class="fas fa-clock"></i>
Mon 28 September 2020
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/blog.html">blog</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/blog/this-is-for-you.html">The Interstellar Twilight</a>
</h4>
<div class="content">
If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2019-09-21T15:47:00+05:30">
<i class="fas fa-clock"></i>
Sat 21 September 2019
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/article.html">article</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/article/for-sunshine.html">प्रेम रतन धन पायो</a>
</h4>
<div class="content">
टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं ।
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2012-02-27T22:47:00+05:30">
<i class="fas fa-clock"></i>
Mon 27 February 2012
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/article.html">article</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/article/red-big-ants.html">The Big Red Ants</a>
</h4>
<div class="content">
In a birds eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagles beak.
</div>
</div>
</article>
<hr>
<ul class="pagination">
<li class="page-item">
<a class="page-link" href="https://avinal.space/author/avinal2.html">
<span aria-hidden="true">&laquo;</span>
<span class="sr-only">Previous</span>
</a>
</li>
<li class="page-item">
<span class="page-link">3 of 3</span>
</li>
</ul>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-109
View File
@@ -1,109 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Categories | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/categories.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Categories
</h1>
<hr>
<table class="table table-bordered table-striped">
<tr>
<td><a href="https://avinal.space/category/article.html">article</a></td>
<td>2</td>
</tr>
<tr>
<td><a href="https://avinal.space/category/blog.html">blog</a></td>
<td>2</td>
</tr>
<tr>
<td><a href="https://avinal.space/category/development.html">development</a></td>
<td>7</td>
</tr>
<tr>
<td><a href="https://avinal.space/category/prime.html">prime</a></td>
<td>1</td>
</tr>
<tr>
<td><a href="https://avinal.space/category/report.html">report</a></td>
<td>1</td>
</tr>
</table>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-134
View File
@@ -1,134 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>article Articles | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/category/article.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/article.atom.xml">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Category: article
</h1>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2019-09-21T15:47:00+05:30">
<i class="fas fa-clock"></i>
Sat 21 September 2019
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/article.html">article</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/article/for-sunshine.html">प्रेम रतन धन पायो</a>
</h4>
<div class="content">
टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं ।
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2012-02-27T22:47:00+05:30">
<i class="fas fa-clock"></i>
Mon 27 February 2012
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/article.html">article</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/article/red-big-ants.html">The Big Red Ants</a>
</h4>
<div class="content">
In a birds eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagles beak.
</div>
</div>
</article>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-134
View File
@@ -1,134 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>blog Articles | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/category/blog.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/blog.atom.xml">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Category: blog
</h1>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-01-04T21:47:00+05:30">
<i class="fas fa-clock"></i>
Mon 04 January 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/blog.html">blog</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/blog/hrt-interview-1.html"><abbr title="Hudson River Trading">HRT</abbr> Systems Internship Interview Experience</a>
</h4>
<div class="content">
I applied for Systems Internship - Summer 2021 back in December 2020 at Hudson River Trading , New York.....Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2020-09-28T22:47:00+05:30">
<i class="fas fa-clock"></i>
Mon 28 September 2020
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/blog.html">blog</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/blog/this-is-for-you.html">The Interstellar Twilight</a>
</h4>
<div class="content">
If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream.
</div>
</div>
</article>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-215
View File
@@ -1,215 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>development Articles | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/category/development.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/development.atom.xml">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Category: development
</h1>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2022-02-27T20:47:00+05:30">
<i class="fas fa-clock"></i>
Sun 27 February 2022
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/lovely-dangerous-things-redhat.html">Developing Minimal Tekton Server <a class="reference external image-reference" href="https://github.com/MiniTeks"><img alt="mks_logo" class="align-middle" src="/images/mks_logo.png" style="width: 1.5em;" /></a></a>
</h4>
<div class="content">
We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2022-02-25T20:47:00+05:30">
<i class="fas fa-clock"></i>
Fri 25 February 2022
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/i-am-loving-it-redhat.html">My internship at Red Hat <a class="reference external image-reference" href="https://redhat.com"><img alt="redhat_logo" class="align-middle" src="/images/redhat_logo.png" style="width: 1.5em;" /></a></a>
</h4>
<div class="content">
I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-02-14T22:47:00+05:30">
<i class="fas fa-clock"></i>
Sun 14 February 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/rst-guide.html">reStructuredText in GitHub</a>
</h4>
<div class="content">
reStructuredText syntax
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-02-02T21:47:00+05:30">
<i class="fas fa-clock"></i>
Tue 02 February 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/wakatime-readme.html">How I implemented WakaTime embeddable Coding Graph GHA?</a>
</h4>
<div class="content">
f you use WakaTime to track your coding activity. You can add that to your README as a bar graph or embed it in your blog/portfolio. Just add this action to any of your repositories and there you have it.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-01-26T16:47:00+05:30">
<i class="fas fa-clock"></i>
Tue 26 January 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/twilight-blog.html">How I Created This Blog?</a>
</h4>
<div class="content">
As you would have guessed by now, this blog is created using one such awesome SSG named Pelican. Pelican is simple, customizable and offers lots of themes and plugins. Pelican is python based SSG and is available through pip.
</div>
</div>
</article>
<hr>
<ul class="pagination">
<li class="page-item">
<span class="page-link">1 of 2</span>
</li>
<li class="page-item">
<a class="page-link" href="https://avinal.space/category/development2.html">
<span aria-hidden="true">&raquo;</span>
<span class="sr-only">Next</span>
</a>
</li>
</ul>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-146
View File
@@ -1,146 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>development Articles | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/category/development2.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/development.atom.xml">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Category: development
</h1>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2020-12-31T19:07:00+05:30">
<i class="fas fa-clock"></i>
Thu 31 December 2020
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/wsl1.html">Move WSL 2 Safely to another Drive</a>
</h4>
<div class="content">
It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2020-12-01T23:47:00+05:30">
<i class="fas fa-clock"></i>
Tue 01 December 2020
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/vlc-gsod-report.html">Create the VLC User Documentation for one Mobile Port(Android)</a>
</h4>
<div class="content">
The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLCs wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization.
</div>
</div>
</article>
<hr>
<ul class="pagination">
<li class="page-item">
<a class="page-link" href="https://avinal.space/category/development.html">
<span aria-hidden="true">&laquo;</span>
<span class="sr-only">Previous</span>
</a>
</li>
<li class="page-item">
<span class="page-link">2 of 2</span>
</li>
</ul>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-111
View File
@@ -1,111 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>prime Articles | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/category/prime.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/prime.atom.xml">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Category: prime
</h1>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-01-09T22:29:00+05:30">
<i class="fas fa-clock"></i>
Sat 09 January 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/prime.html">prime</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/prime/prime1.html">Introduction to Prime Numbers</a>
</h4>
<div class="content">
A prime is a positive integer p having exactly two positive divisors, namely 1 and p. An integer n is composite if n > 1 and n is not prime. (The number 1 is considered neither prime nor composite.)
</div>
</div>
</article>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-111
View File
@@ -1,111 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>report Articles | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/category/report.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/report.atom.xml">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Category: report
</h1>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-08-19T23:07:00+05:30">
<i class="fas fa-clock"></i>
Thu 19 August 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/report.html">report</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/report/final-evaluation.html">Google Summer of Code 2021</a>
</h4>
<div class="content">
This is the final report of my Google Summer of Code 2021 at The FOSSology Project.
</div>
</div>
</article>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
+60
View File
@@ -0,0 +1,60 @@
---
title: The Big Red Ants
date: 2012-02-27 22:47
tags: [ants, sav]
category: article
description: 'The Big Red Ants'
image: /images/ants.jpg
---
# The Big Red Ants
In a bird's eye view if we see around us, ants are the common and
tiniest living entitiy seen by naked eye. One of them are the big red
ants, in my view they are unique from others in two ways, first they
live on trees and second their anteenas are too long and bent in middle,
seems like their fore legs. Their mandible (mouth) seems like eagle's
beak.
As I observed them making and reparing their nests, I concluded that
they are very laborious and intellectual. They create their nests by
binding two or more leaves (maybe up to 500) together. They stich the
leaves using a stinky white substance either excreted by themselves or
from trees. This substance is like web of spider. At first builder ants
creates an array at the blade of two leaves. Then they make ant-cranes
or ant-chain like chain of monomer to form a polymer. They catch the
leaves and pull each other to stich. After some time, the parliament of
leaves transforms into a leaf-sac called their nest. They also weave
translucent cloth like structure to cover remainings of leaf. A nest
hangs by a branch of the trees.
A nest is skillfully divided into living rooms, barracks, storehouse,
egg room and queen's room. The eggroom, lies at the center of nest to
protect from outer attack until last time. Besides that, lies queen's
room. Living rooms are sequenncly joined with eggroom. There are
different rooms for workers, food searchers etc. The partition of the
room resembles atom's electron shell, one upon another. At last barracks
are the outermost rooms, just like outermost orbit of electron. The
defence system is strongest at the nest's opening. A nest may size as
2-3 footballs and have 50 to 10000 ants. There may be more openings.
Now about their attacking and protecting skills. A solider is unique
from other ants. It is equipped with many attacking and defending
skills. Normally they do not attack. They are social insects. If someone
attacks, all other ants go inside, and soldiers come out. They spread
allover the nest. They are very sensetive and have sharp vision. If any
one of them see their enemy the stand on their hind legs, swinging,
their forelegs and anteens in their air as scolding someone. Their spit
contains formic acid, present at the end of the abdomen below the
rectum. If their nest is broken and eggs fall on ground then the ants
make a dome, like the dome of Taj mahal to save the eggs till last their
breadth. This shows their caring skills.
The most amazing is their discipline. They can easily beat a human in
race of discipline. Humans must learn from it. When two ants meet, they
touch their anteena to communicate. When they walk in a queue, they seem
like twinkling dots and dashes. I want to conclude that **All tiny
things are not really tiny. It may be as a space having infinite
mysteries one has to explore it.**
Photo Attribution : Photo by Michael Willinger from Pexels:
@@ -1,6 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Be My SpaceTime - article</title><link href="https://avinal.space/" rel="alternate"></link><link href="https://avinal.space/feeds/article.atom.xml" rel="self"></link><id>https://avinal.space/</id><updated>2019-09-21T15:47:00+05:30</updated><subtitle>눈치</subtitle><entry><title>प्रेम रतन धन पायो</title><link href="https://avinal.space/posts/article/for-sunshine.html" rel="alternate"></link><published>2019-09-21T15:47:00+05:30</published><updated>2019-09-21T15:47:00+05:30</updated><author><name>Avinal</name></author><id>tag:avinal.space,2019-09-21:/posts/article/for-sunshine.html</id><summary type="html">&lt;p class="first last"&gt;टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं ।&lt;/p&gt;
</summary><content type="html">&lt;p style="border: 2px solid var(--cyan);border-radius: 7px;" align=center&gt;This article was published in 18th edition of SRIJAN, the official magazine of &lt;a href="https://nith.ac.in" style="text-decoration: none;"&gt;National Institute of Technology, Hamirpur&lt;/a&gt;, India. The magazine can be accessed &lt;a href="https://issuu.com/srijandesk/docs/srijan2020" style="text-decoration: none;"&gt;here&lt;/a&gt;.&lt;p&gt;&lt;p&gt;टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं ।
---
title: प्रेम रतन धन पायो
date: 2019-09-21 15:47
category: article
tags: [love, article, hindi]
---
# प्रेम रतन धन पायो
टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं ।
दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं । आजकल जब रोज़ क्लास
आते जाते दूर पहाड़ों की चोटियाँ देखता हूँ तो उनकी विशालता का अनुभव होता हैं । एक पल को अगर ये मान लिया जाए की हमारी सारी धार्मिक किताबें
वो कहानियाँ हैं जो पथिक लेखकों के द्वारा लिखी गयी हैं तो सारी बातें साफ हो जाती है कि क्यूँ देवी-देवताओं ने हिमालय को अपनाया है। टूटता
@@ -8,8 +15,9 @@
दैविक है। टूटते तारो के बारे में लोगों के बहुत सारे विश्वास हैं । कभी विभीषिका का पूर्वाभास माने जाने वाले इन टूटते तारे आज इच्छा पूरक के
प्रतीक हैं । कुछ लोगों का ये भी मानना है कि टूटते तारे दिवंगत लोगों का संकेत हैं । हिमालय की कन्दराओं में न जाने कितने ही ऋषि-मुनियों ने
तप करते हुए अपना जीवन अर्पित कर दिया । इसलिए हिमालय की पहाड़ों से टूटता तारा देखना दैविक हैं क्योंकि शायद वो तारे उन ऋषि-मुनियों की पवित्र
आत्माओं का संकेत हैं ।&lt;/p&gt;
&lt;p&gt;प्रकृति की सुंदरता और कलाकारी हिमालय की कण-कण में झलकती है। प्रकृति ने प्रेम को भी हिमालय के जितना ही विशाल और अलौकिक बनाया है । ये एक
आत्माओं का संकेत हैं ।
प्रकृति की सुंदरता और कलाकारी हिमालय की कण-कण में झलकती है। प्रकृति ने प्रेम को भी हिमालय के जितना ही विशाल और अलौकिक बनाया है । ये एक
अलग चर्चा का विषय है कि हिमालय पहले आया या प्रेम। मैं तो प्रेम के पक्ष में हूँ । वो हर अणु-परमाणु जिन्होंने इतने बड़ा पहाड़ खड़ा किया वो सब
आपस में प्रेम से बंधे हुए हैं। ये पृथ्वी, सूर्य, चंद्रमा, आकाश-गंगा इत्यादि सब प्रेम से बंधे हुए हैं । और हिमाद्रि के छत पर मैं इसी प्रेम
के आगोश में आकर भावशून्य होकर तारों को निहार रहा था । तभी मानो सदियों की मन्नत पूरी हुई और मुझे एक टूटता तारा दिखा । आप मेरी स्थिति की
@@ -20,8 +28,9 @@
क्या होता है। अब वो लोग जो ये सोच रहे की भाईसाब आप हर कहानी(सच्ची घटना का विवरण वाली कहानी 😊) में सो क्यूँ जाते हैं। सच बताऊँ तो इसका
कोई सटीक जबाव नहीं है मेरे पास, पर अध्यात्म ये कहता है की जब आप सो रहे होते हैं तो आपका मन चेतना के कई स्थिति से गुजरता है। जब आप परम
चैतन्य अवस्था में होते हैं तो रहस्य, प्रतिभज्ञान इत्यादि के रास्ते खुल जाते हैं। और विज्ञान ये भी कहता है कि निद्रा के माध्यम से इस
अवस्था में जाना उतना ही अनिश्चित है जितना किसी बाला का मेरे लिए प्रेम-प्रस्ताव । सरल शब्दों में – मैं कुछ समय के लिए सो गया।&lt;/p&gt;
&lt;p&gt;आज से ठीक 2 महीने पहले अगर ये मुझसे कोई पूछता की क्या चाहिए तुम्हें तो शायद मेरे पास जबाव होता। दोस्त तो बहुत हैं पर जब कोई ऐसा हो जो
अवस्था में जाना उतना ही अनिश्चित है जितना किसी बाला का मेरे लिए प्रेम-प्रस्ताव । सरल शब्दों में – मैं कुछ समय के लिए सो गया।
आज से ठीक 2 महीने पहले अगर ये मुझसे कोई पूछता की क्या चाहिए तुम्हें तो शायद मेरे पास जबाव होता। दोस्त तो बहुत हैं पर जब कोई ऐसा हो जो
आपके अधूरे वाक्य पूरे कर सके, कोई ऐसा जो आपकी भावनाओं को आपकी तरह समझ सके, कोई ऐसा जो आपको आपके असल रूप में पसंद करता हो । आपको लग रहा
होगा की मैं एक प्रेमिका का विवरण दे रहा हूँ, पर नहीं या शायद हाँ , मैं समझता हूँ की अधिकतर लोग प्रेमिका शब्द का प्रयोग अनुचित ढंग से करते
हैं। जहां प्रेम है वहाँ प्रेमी-प्रेमिका होंगे फिर वो भाई-बहन का रिश्ता हो या माँ-बेटे का । एक पल को सोचो तो ऊपर के विवरण के लिए कोई सबसे
@@ -33,22 +42,20 @@
भी हो। मैं ये नहीं कह सकता की मेरी खोज पूर्ण हो गयी पर हाँ एक पड़ाव तो जरूर आ गया है। उस पहली मुलाक़ात में एक पल को ऐसा लगा मानो किसी
चमत्कारी दर्जी ने कपड़े की जगह एक पूरा आदमी सिल कर दिया हो। सब कुछ एकदम नाप के अनुरूप। शायद कई सालों के बाद मैं खुशियों का बवंडर अपने अंदर
महसूस कर रहा था। आप पूछेंगे इसमें प्रेम कहाँ है? हिमालय जितना विशाल है उतना ही गहरा भी है , यहाँ भी प्रेम गहराई में है । प्रेम का होना
जरूरी है दिखावा तो हर कोई कर लेता है। कबीर ने अपने एक दोहे में कहा है :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;बूंद समानी समूंद में , जानत है सब कोई; समूंद समाना बूंद में , बूझे बिरला कोई।&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;मैं इस दोहे को प्रेम के संदर्भ में व्याख्या करना चाहूँगा। लोग बूंद हैं और प्रेम समुद्र, लोगों को प्रेम में पड़ते सबने देखा है या सुना है,
जरूरी है दिखावा तो हर कोई कर लेता है। कबीर ने अपने एक दोहे में कहा है :
**बूंद समानी समूंद में , जानत है सब कोई; समूंद समाना बूंद में , बूझे बिरला कोई।**
मैं इस दोहे को प्रेम के संदर्भ में व्याख्या करना चाहूँगा। लोग बूंद हैं और प्रेम समुद्र, लोगों को प्रेम में पड़ते सबने देखा है या सुना है,
पर जो प्रेम लोगों के अंदर व्याप्त है ये हर कोई नहीं समझता। मैं उस विशेष व्यक्ति का कृतज्ञ हूँ जिसने ने मुझे इस दोहे के मूल भाव का अहसास
करवाया।&lt;/p&gt;
&lt;p&gt;कभी-कभी डर लगता है, खोने का उसे। आजकल दुनिया में सब अनिश्चित है। कब-क्या हो जाए ये कोई नहीं बता सकता। पहले सिर्फ पृथ्वी थी फिर लोग हुए और
तब से पृथ्वी अस्थमा की मरीज है। किसी प्रसिद्ध कवि ने लिखा है :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;आज आदमी में विष इतना भर गया है,ी विषधरों का वंश उनसे डर गया है,&lt;/strong&gt;
&lt;strong&gt;कल को कहते सुनोगे , आदमी काटा और साँप मर गया है।&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ठंडी-ठंडी हवाओं ने मेरी सारी नींद उड़ा दी। प्रकृति शायद मुझे खुश करके मारना चाहती थी। आसमान ने एक बड़े काले पर्दे का रूप ले लिया था और उस
करवाया।
कभी-कभी डर लगता है, खोने का उसे। आजकल दुनिया में सब अनिश्चित है। कब-क्या हो जाए ये कोई नहीं बता सकता। पहले सिर्फ पृथ्वी थी फिर लोग हुए और
तब से पृथ्वी अस्थमा की मरीज हैिसी प्रसिद्ध कवि ने लिखा है :
**आज आदमी में विष इतना भर गया है, की विषधरों का वंश उनसे डर गया है,**
**कल को कहते सुनोगे , आदमी काटा और साँप मर गया है।**
ठंडी-ठंडी हवाओं ने मेरी सारी नींद उड़ा दी। प्रकृति शायद मुझे खुश करके मारना चाहती थी। आसमान ने एक बड़े काले पर्दे का रूप ले लिया था और उस
पर्दे पर दसियो उजले साँप रेंगते नज़र आ रहे थे। मानो दस सालो के टूटते तारे एक साथ दिख रहे हों और आसमान कह रहा हो – जो चाहिए, जितना चाहिए
माँग लो। और मैंने सच में माँग लिए , लगभग सब कुछ । और उसको हमेशा पास रखने की दुआ तो नहीं माँग सका , पर वो जहां रहे, खुश रहे, सलामत रहे।&lt;/p&gt;
</content><category term="article"></category><category term="love"></category><category term="article"></category><category term="hindi"></category></entry><entry><title>The Big Red Ants</title><link href="https://avinal.space/posts/article/red-big-ants.html" rel="alternate"></link><published>2012-02-27T22:47:00+05:30</published><updated>2012-02-27T22:47:00+05:30</updated><author><name>Avinal</name></author><id>tag:avinal.space,2012-02-27:/posts/article/red-big-ants.html</id><summary type="html">&lt;p class="first last"&gt;In a birds eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagles beak.&lt;/p&gt;
</summary><content type="html">&lt;p style="border: 2px solid var(--cyan);border-radius: 7px;" align=center&gt;This article was published in 3rd edition of नवांकुर , the official magazine of Simultala Awasiya Vidyalaya, Bihar, India.&lt;p&gt;&lt;p&gt;In a birds eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagles beak.&lt;/p&gt;
&lt;p&gt;As I observed them making and reparing their nests, I concluded that they are very laborious and intellectual. They create their nests by binding two or more leaves (maybe up to 500) together. They stich the leaves using a stinky white substance either excreted by themselves or from trees. This substance is like web of spider. At first builder ants creates an array at the blade of two leaves. Then they make ant-cranes or ant-chain like chain of monomer to form a polymer. They catch the leaves and pull each other to stich. After some time, the parliament of leaves transforms into a leaf-sac called their nest. They also weave translucent cloth like structure to cover remainings of leaf. A nest hangs by a branch of the trees.&lt;/p&gt;
&lt;p&gt;A nest is skillfully divided into living rooms, barracks, storehouse, egg room and queens room. The eggroom, lies at the center of nest to protect from outer attack until last time. Besides that, lies queens room. Living rooms are sequenncly joined with eggroom. There are different rooms for workers, food searchers etc. The partition of the room resembles atoms electron shell, one upon another. At last barracks are the outermost rooms, just like outermost orbit of electron. The defence system is strongest at the nests opening. A nest may size as 2-3 footballs and have 50 to 10000 ants. There may be more openings.&lt;/p&gt;
&lt;p&gt;Now about their attacking and protecting skills. A solider is unique from other ants. It is equipped with many attacking and defending skills. Normally they do not attack. They are social insects. If someone attacks, all other ants go inside, and soldiers come out. They spread allover the nest. They are very sensetive and have sharp vision. If any one of them see their enemy the stand on their hind legs, swinging, their forelegs and anteens in their air as scolding someone. Their spit contains formic acid, present at the end of the abdomen below the rectum. If their nest is broken and eggs fall on ground then the ants make a dome, like the dome of Taj mahal to save the eggs till last their breadth. This shows their caring skills.&lt;/p&gt;
&lt;p&gt;The most amazing is their discipline. They can easily beat a human in race of discipline. Humans must learn from it. When two ants meet, they touch their anteena to communicate. When they walk in a queue, they seem like twinkling dots and dashes. I want to conclude that &lt;strong&gt;All tiny things are not really tiny. It may be as a space having infinite mysteries one has to explore it.&lt;/strong&gt;&lt;/p&gt;
</content><category term="article"></category><category term="ants"></category><category term="sav"></category></entry></feed>
माँग लो। और मैंने सच में माँग लिए , लगभग सब कुछ । और उसको हमेशा पास रखने की दुआ तो नहीं माँग सका , पर वो जहां रहे, खुश रहे, सलामत रहे।
+275
View File
@@ -0,0 +1,275 @@
---
title: Create the VLC User Documentation for one Mobile Port(Android)
date: 2020-12-01 23:47
modified: 2020-12-31 23:19
category: development
tags: [vlc, gsod, gsod2020]
description: 'The project was to Create the VLC User Documentation for Android
Mobile Port which was previously hosted on VLC wiki pages. The major portion
of this was to start everything from scratch including chapter separation,
section organization.'
---
# Create the VLC User Documentation for one Mobile Port(Android)
VideoLAN is a non-profit organization that develops software for playing
video and other media formats. VLC media player (commonly known as just
VLC) is a free and Open Source cross-platform multimedia player and
framework that plays most multimedia files as well as DVDs, Audio CDs,
VCDs, and various streaming protocols built by the VideoLAN organization
and a team of volunteers. VLC for Android is a port of the VLC for
Android OS.
The project was to Create the VLC User Documentation for Android Mobile
Port which was previously hosted on VLC's wiki pages. The major portion
of this was to start everything from scratch including chapter
separation, section organization and an engaging and easy to follow for
both technical and non-technical users. The original proposal can be
found here.
## PROJECT GOALS
- Propose a new structure for documentation e.g. Chapter Separation,
Sections etc
- Proper balance between technical and non-technical descriptions to
serve all kinds of users.
- Adequate amount of screenshots in each section and other supporting
media to make documentation more appealing.
- Optimized for all Screen Sizes. Especially for Mobile Devices.
- Ease of navigation
## COMMUNITY BONDING
This period was mostly utilized for collecting more information and many
internal meetings to shape the projects and bonding with fellow writers,
developers(mentors). I got to know more about the VLC organization and
the project. We decided to create a skeleton of the project and then
follow a Issue-Merge Request-Review-Merge system to keep the commit
history clean and maintain the proper review of the work before it is
merged.
I initially proposed that the new documentation should also use the same
tools(Sphinx and GitLab Pages) because if in future we want to merge all
the documentation into a single one, it will be easier to migrate and
will provide a consistency across all documentations. Later I got to
know that this will be an independent project and may not be merged
since it solves a lot of problems. I was already familiar with the tools
so it took no time to get started.
Nicolas Pomepuy, who is the lead developer of VLC for Android was
assigned as my primary mentor and Simon Latapie as secondary mentor.
## DOCUMENTATION DEVELOPMENT PHASE
Initial Preparation I first moved my existing demo documentation to an
entirely new repository with only the skeleton at the suggestion of my
mentor. It was necessary to keep the commit history clean. The skeleton
contained the empty directories representing the chapter separation. I
got to learn “how to properly develop a project and contribute to open
source”. This was a major lesson that got me familiar with the Merge
Request and Review system.
The Development The next part was to frame the actual documentation
pages and push to the repository. Since there was a significant
time-zone difference we agreed to discuss by creating issues and
sometimes my emails. There was one meeting every fortnight to check the
process and discuss further development and blockers. Nicolas was really
helpful and patient, answering each of my big-small queries.
Work Done
<style>
table,td,th {
border-collapse:collapse;
border: 1px solid #000000;
}
</style>
<table>
<tr>
<td><strong>Documentation</strong></td>
<td><a href="https://avinal.videolan.me/vlc-android-user/">VLC for Android User Documentation </a>
</td>
</tr>
<tr>
<td><strong>Project Repository</strong>
</td>
<td><a href="https://code.videolan.org/avinal/vlc-android-user">Projects · Avinal Kumar / VLC for Android User Documentation</a>
</td>
</tr>
<tr>
<td><strong>Commits</strong>
</td>
<td><a href="https://code.videolan.org/avinal/vlc-android-user/-/commits/master">Commits · Avinal Kumar / VLC for Android User Documentation</a>
</td>
</tr>
<tr>
<td><strong>Issues/Discussions</strong>
</td>
<td><a href="https://code.videolan.org/avinal/vlc-android-user/-/issues">Issues · Avinal Kumar / VLC for Android User Documentation</a>
</td>
</tr>
<tr>
<td><strong>Merge Requests</strong>
</td>
<td><a href="https://code.videolan.org/avinal/vlc-android-user/-/merge_requests">Merge Requests · Avinal Kumar / VLC for Android User Documentation</a>
</td>
</tr>
</table>
Since the Android port of VLC can be installed on Android
Smartphones/Tablets, Android TVs, Amazon Fire Devices and Chromebooks
too, a full documentation will cover these all devices. Although these
are different form factors, the features provided on each of them is
exactly the same and the same documentation can be used for all these
devices. As of now only Smartphones/Tablets are covered. And later
additional pages will be added to reference different features/User
Interface. Regardless of this addition the current documentation can
serve a major part for all these form factors. Completed/Remaining
<table>
<tr>
<td><strong>Chapters</strong>
</td>
<td><strong>Sections</strong>
</td>
<td><strong>Status</strong>
</td>
</tr>
<tr>
<td><strong>Settings</strong>
</td>
<td>
<ul>
<li>General Settings
<li>Interface
<li>Video
<li>Subtitles
<li>Audio
<li>Casting
<li>Advanced
</li>
</ul>
</td>
<td><strong>ALL COMPLETED</strong>
<p>
<strong>FOR ALL FORM FACTORS</strong>
</td>
</tr>
<tr>
<td><strong>Video</strong>
</td>
<td>
<ul>
<li>Video Explorer
<li>Video Player
</li>
</ul>
</td>
<td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong>
</td>
</tr>
<tr>
<td><strong>Audio</strong>
</td>
<td>
<ul>
<li>Audio Explorer
<li>Audio Player
</li>
</ul>
</td>
<td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong>
</td>
</tr>
<tr>
<td><strong>Browse</strong>
</td>
<td>
<ul>
<li>Explorer
<li>Local Network
</li>
</ul>
</td>
<td><strong>ONLY SMB IN LOCAL NETWORK COMPLETED</strong>
</td>
</tr>
<tr>
<td><strong>Installation</strong>
</td>
<td>
<ul>
<li>Smartphones/Tablets
<li>Android TV
<li>Fire Devices
<li>Chromebooks
</li>
</ul>
</td>
<td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong>
</td>
</tr>
<tr>
<td><strong>User Interface</strong>
</td>
<td>
<ul>
<li>Smartphones/Tablets
<li>Android TV
<li>Fire Devices
<li>Chromebooks
</li>
</ul>
</td>
<td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong>
</td>
</tr>
<tr>
<td><strong>Support</strong>
</td>
<td>
<ul>
<li>FAQs
<li>Help
</li>
</ul>
</td>
<td><strong>IN PROGRESS</strong>
</td>
</tr>
<tr>
<td><strong>Guidelines</strong>
</td>
<td>
<ul>
<li>Contribution Guideline
<li>Screenshot Guidelines
<li>READMEs
</li>
</ul>
</td>
<td><strong>IN PROGRESS</strong>
</td>
</tr>
</table>
## CHALLENGES
The major obstacle was to get screenshots for all form factors. Since
screenshots were the major part of this documentation it was necessary
to provide proper screenshots in each chapter and with every step. For
Android TV and Smartphone this was solved by using emulators instead of
actual devices, but to emulate the actual scenario in an emulator was
sometimes very difficult. There were many occasions where I was not able
to gather the exact information about devices other than
smartphones/tables. Since all form factors share a common pool of
features, my mentor suggested that I focus on smartphones/tables. And to
create issues mentioning missing parts so that it could be solved later.
## THANKS
I want to thank my mentors for being supporting and helpful. I want to
thank every person at VLC and Google who were involved in this whole
process. Thanks and Congrats to my fellow writer Abhishek Pratap Singh.
This was a great opportunity to learn and meet awesome people. I learned
a lot about Sphinx, reStructured Text and many other things.
+89
View File
@@ -0,0 +1,89 @@
---
title: HRT (Hudson River Trading) Systems Internship Interview Experience
date: 2021-01-04 21:47
tags: [HRT, hudsonrivertrading, interview, internship]
category: blog
---
# `HRT (Hudson River Trading)` Systems Internship Interview Experience
I applied for **Systems Internship - Summer 2021** back in December 2020
at [Hudson River Trading](https://www.hudsonrivertrading.com) , New
York. The internship description was: -
> We are looking for highly motivated students who are eager to learn
> and excited about systems to join us for our summer internship
> program. As a systems intern, you may have the opportunity to work on
> projects in the following areas:
>
> - Programming/scripting (Golang, Python, C++, C)
> - FOSS development
> - HPC, Cluster computing
> - System Administration
> - Linux, Debian
> - Linux-based computer security
> - Data Storage
> - Large deployment or config management
The first step was a coding test on the Codility platform. If you have
used any of the online coding platforms, this is similar. It was a
`2.5 hrs (90 mins)` test consisting of 3 questions. They let you use
`online references (documentation, man pages, etc.)` but **do not copy
the code** as it will highly reduce your chances of qualifying for this
first stage. You can choose between **C/C++**, **Python** and **Golang**
(no Java 😪).
Questions were clear and of medium level. But they were designed in such
a way that you must know the basics before you could attempt. Also, they
expected a clear and concise approach. Two of the most important points
in their instructions were: -
> - While correctness and performance are the most important factors
> for evaluation, we will take test duration into account as well.
> - Please understand that this test is meant to be challenging. A
> perfect score is not necessary to move on to future interview
> rounds, so do the best you can!
So, you must be near perfect in your approach as well as on time. I did
them kind of quickly. They will show you a summary of your submission
but not the results. It will take almost 2 weeks to get back to you for
further steps.
Next, I received a mail invitation for a telephonic interview. **This
interview will last about 45 minutes and will be technical but will not
require coding. Interview topics may include your background,
programming languages, and Unix/Linux concepts**. Once you receive this
mail you can then decide a time slot for an interview.
I was not sure what they will ask if this is not a coding interview. The
interviewer was very polite, and he was explaining the questions too.
Questions were not so tricky but practical and real-life. Since it was
**not for SDE role**, the questions were mostly related to Linux/Unix,
C++ (mainly pointers and memory), Python/Bash scripting, automation,
knowledge of tools (IDEs, Editors, System Administration Tools) and
previous experiences. The interview would often explain why he is asking
this question, this was very nice. Then some common interview questions,
why do you want to work for this role? What makes you fit for this role?
etc.
One thing that I want to point out is that the interviewer was
repeatedly checking my resume, and for the most part he did not ask
anything that was not on my resume. So, my tip is to create a nice
resume with genuine work/tool experiences. And when you are applying for
such a role, it would be helpful if you mention mathematics or other
courses that you have taken. *Do not lie on your resume*. They will
easily catch that.
The other thing is to keep your words short and clear; I was not great
at communication, but you can be. If the interviewer allows then use
examples for the things you cannot explain. I used nice examples. At
last, he gave me short feedback on how well I performed.
At last, I want to point out things I should not have done. The first
is, I did not ask much about the role, you must do this at least once.
Second, I am talkative, I do not know if the interviewer was not faking
his expressions (because he would often discuss in-depth), but not all
interviewers will be the same. So, do not talk too much, nor too less.
At last work on your communication skill, mostly how you to present
things and how to answer technical as well as behavioral questions. I
was not fluent, but my way of presentation might have saved me.
@@ -0,0 +1,834 @@
---
title: Google Summer of Code 2021
date: 2021-08-19 23:07
tags: [gsoc, FOSSology]
category: development
description: This is the final report of my Google Summer of Code 2021 at The FOSSology Project.
---
# Google Summer of Code 2021
<style>
.rd {color:red;font-weight:bold}
.gr{color:green;font-weight:bold}
.or{color:orange;font-weight:medium}
ul{margin-bottom:0}
</style>
## The CMake Build system
FOSSology is quite an old and mature project. The project has been using
bare metal **Makefiles**. As the project is growing with new agents and
modernization it was required to have a modern build system.
The FOSSology is a suite of well-integrated and synchronized
sub-projects (called agents) written in C, C++, and PHP. Most of the
major agents are in C, C++ and that made CMake an obvious choice for a
new build system for FOSSology. CMake is a versatile set of build, test,
and packaging tools and is the most popular choice of C/C++ developers.
CMake can be extended to create a build system for other languages too
via custom scripts.
## GitHub Actions CI/CD
<img src="/images/ci.png"
class="float-md-right rounded border border-info ml-3 float-md-right rounded border border-info ml-3"
width="350" alt="A CI Meme" />
Since the FOSSology project moved on Github, it has used only the free
Travis CI service for OSS projects. At the time of writing Travis CI has
reduced its free tier CI services. GitHub Actions provides faster
builds. Since GitHub Actions is a fully managed service by GitHub, we
don't need to know how to scale and operate the infrastructure to run
it.
It is straightforward to use with GitHub because when we fork a
repository, the actions automatically get forked. This allows you to
test and build projects very efficiently and even run them closer to the
developer. Also, you have readily available access to the GitHub API,
making it more popular among developers.
## Improvements over previous build system and CI
The new build system and CI brings a lot of improvements and features.
The list below describes them.
- CMake enforces out-of-source builds. This was already possible with
the previous build system but not a strict requirement. This feature
keeps the source code clean and makes cleaning the build artifacts
easy. (Just remove the build folder :)
- One of the major improvements over the previous build system is faster
build times. CMake generates parallel build-enabled configurations for
all generators. In our tests, the new build system is at least twice
as fast as the previous one. With further improvement in
configuration, we will be able to further cut the build times.
- Previously FOSSology can only be built using *Unix Makefiles*. With
CMake, we can now use many other popular generators such as *Ninja*.
- Now it is also very flexible to choose different compilers. This will
help support more platforms and architecture in the future. As of now,
we are experimenting with Clang compilers.
- FOSSology is quite an old project and a lot of agent testing code was
written in the last decade. Initially, none of them were compatible
with the new build system, but we were able to hack most of the test
code using better-improved methods. Test times have also improved.
- Migrating from Travis CI to GitHub Actions was another big move and
for the most part, it removes the dependency on a third-party CI
service. Along with that GitHub Actions provides better build times,
tons of new features, and better integration with other GitHub
services.
## Deliverables
- Final Pull Request [#2075](https://github.com/fossology/fossology/pull/2075)
- Pull Request Branch [avinal/feat/buildsystem](https://github.com/avinal/fossology/tree/avinal/feat/buildsystem)
- Working Branch (individual commits)
- [avinal/feat/cmake-buildsystem](https://github.com/avinal/fossology/tree/avinal/feat/cmake-buildsystem)
- [avinal/feat/testing](https://github.com/avinal/fossology/tree/avinal/feat/testing)
- Project Issue [#1913](https://github.com/fossology/fossology/issues/1913)
- Project Discussion [#1931](https://github.com/fossology/fossology/discussions/1931)
- Weekly Reports
- [Personal Blog](https://gsoc.avinal.space)
- [FOSSology Official Blog](https://fossology.github.io/gsoc/docs/2021/buildsystem/)
### CMake Build System Tasks
<table>
<colgroup>
<col style="width: 7%" />
<col style="width: 23%" />
<col style="width: 15%" />
<col style="width: 15%" />
<col style="width: 30%" />
<col style="width: 23%" />
<col style="width: 38%" />
</colgroup>
<thead>
<tr class="header">
<th>#</th>
<th>Agents</th>
<th>Build</th>
<th>Install</th>
<th>Testing</th>
<th>Packaging</th>
<th>Remarks</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>1</td>
<td>adj2nest</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="even">
<td>2</td>
<td>buckets</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td></td>
<td><blockquote>
<p><span class="gr">YES</span></p>
</blockquote></td>
<td></td>
</tr>
<tr class="odd">
<td>3</td>
<td>cli</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="rd">Functional</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="even">
<td>4</td>
<td>copyright</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="odd">
<td>5</td>
<td>debug</td>
<td></td>
<td><span class="gr">YES</span></td>
<td></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="even">
<td>6</td>
<td>decider</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="odd">
<td>7</td>
<td>deciderjob</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Functional</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="even">
<td>8</td>
<td>delagent</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="rd">Functional</span></li>
<li><span class="rd">Unit</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="odd">
<td>9</td>
<td>demomod</td>
<td><span class="or">YES</span></td>
<td><span class="or">YES</span></td>
<td><ul>
<li><span class="or">Functional</span></li>
<li><span class="or">Unit</span></li>
</ul></td>
<td><span class="or">NO</span></td>
<td><em>(Not Used)</em></td>
</tr>
<tr class="even">
<td>10</td>
<td>example_wc_agent</td>
<td><span class="or">YES</span></td>
<td><span class="or">YES</span></td>
<td><ul>
<li><span class="or">Functional</span></li>
<li><span class="or">Unit</span></li>
</ul></td>
<td><blockquote>
<p><span class="or">NO</span></p>
</blockquote></td>
<td><em>(Not Used)</em></td>
</tr>
<tr class="odd">
<td>11</td>
<td>clib</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="even">
<td>12</td>
<td>cpplib</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Unit</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="odd">
<td>13</td>
<td>phplib</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td>1 functional test needs fix</td>
</tr>
<tr class="even">
<td>14</td>
<td>maintagent</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="odd">
<td>15</td>
<td>mimetype</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="even">
<td>16</td>
<td>monk</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="odd">
<td>17</td>
<td>ninka</td>
<td><span class="or">YES</span></td>
<td><span class="or">YES</span></td>
<td><ul>
<li><span class="or">Functional</span></li>
<li><span class="or">Unit</span></li>
</ul></td>
<td><span class="or">NO</span></td>
<td><em>(Deprecated)</em></td>
</tr>
<tr class="even">
<td>18</td>
<td>nomos</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="odd">
<td>19</td>
<td>ojo</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td>1 functional test needs fix</td>
</tr>
<tr class="even">
<td>20</td>
<td>pkgagent</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="odd">
<td>21</td>
<td>readmeoss</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="even">
<td>22</td>
<td>regexscan</td>
<td><span class="or">YES</span></td>
<td><span class="or">YES</span></td>
<td></td>
<td><blockquote>
<p><span class="or">NO</span></p>
</blockquote></td>
<td><em>(Deprecated)</em></td>
</tr>
<tr class="odd">
<td>23</td>
<td>reportImport</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="even">
<td>24</td>
<td>reuser</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Functional</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="odd">
<td>25</td>
<td>reso</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="even">
<td>26</td>
<td>scheduler</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="rd">Functional</span></li>
<li><span class="rd">Unit</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td>Tests needs fix</td>
</tr>
<tr class="odd">
<td>27</td>
<td>softwareHeritage</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="even">
<td>28</td>
<td>spasht</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="odd">
<td>29</td>
<td>spdx2</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td>1 Test failing in CI</td>
</tr>
<tr class="even">
<td>30</td>
<td>unifiedreport</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Functional</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="odd">
<td>31</td>
<td>ununpack</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Functional</span></li>
<li><span class="rd">Unit</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td>Unit tests needs fix</td>
</tr>
<tr class="even">
<td>32</td>
<td>wget_agent</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
<tr class="odd">
<td>32</td>
<td>www</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul>
<li><span class="rd">UI</span></li>
</ul></td>
<td><span class="gr">YES</span></td>
<td></td>
</tr>
</tbody>
</table>
### GitHub Actions CI Tasks
| # | CI Tasks | Status |
|-----|-----------------------------------------|----------------------------------------------------------|
| 1 | <span class="gr">build</span> | Added Ubuntu 20.04 GCC 8, 9 and Clang, GCC 7 not working |
| 2 | <span class="gr">c/cpp unit test</span> | Added, delagent, scheduler and ununpack not working |
| 3 | <span class="gr">phpunit tests</span> | Added, delagent and scheduler functional not working |
| 4 | <span class="rd">cahching</span> | Not implemented |
| 5 | <span class="rd">source install</span> | Not implemented |
(<span class="gr">GREEN</span>: COMPLETED, <span class="rd">RED</span>:
INCOMPLETE, <span class="or">ORANGE</span>: NOT NEEDED/DEPRECATED)
## How does it work and how to use it?
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="/images/second-build.webm" allowfullscreen></iframe>
</div>
The new build system retains the modular and hierarchical structure of
the previous build system. On the other hand, the new build system
provides several new flags to control the build. The new build system
forces out-of-source build instead of the previous in-source builds.
This keeps the source clutter-free and reduces the chance of
accidentally deleting source files. *Testing still needs some in-source
artifacts, this will be solved once all the tests are fixed according to
the new build system.*
Each agent is a complete CMake sub-project with its independent
configuration for building, installing, and testing. That means a single
agent can be built and installed separately and even removed from the
default build without breaking other builds. The directory structure is
as below.
```bash
.
├── build # temporary directory for build artifacts
├── cmake # CMake modules for FOSSology
│ ├── FoPackaging.cmake # CMake Packaging configurations
│ ├── FoUtilities.cmake # Custom CMake utilities
│ ├── FoVersionFile.cmake # VERSION version.php CMake template file
│ ├── SetDefaults.cmake # CMake defaults for this project
│ ├── TestInstall.make.in # Template makefile for install during tests
│ └── VERSION.in # VERSION file template
├── src
│ ├── agent-1 # Agent sub-project
│ │ ├── agent # Agent's source code directory
│ │ │ ├── agent-source-code
│ │ │ └── CMakeLists.txt
│ │ ├── agent_tests # Agent's test directory
│ │ │ ├── Unit
│ │ │ ├── Functional
│ │ │ └── CMakeLists.txt
│ │ ├── ui # Agent's UI source code
│ │ │ ├── templates
│ │ │ └── agent-ui-code
│ │ └── CMakeLists.txt # Agent's top-level CMake configuration
: :
│ ├── other agents
: :
│ └── CMakeLists.txt # Source intermediate CMake configuration
:
├── other directories and files
:
└── CMakeLists.txt # FOSSology Top-level CMake configuration
```
The `cmake` directory contains customized CMake modules and templates
for FOSSology. This directory is required for all the operations. The
general workflow of the new build system as well as how to use it is
described below.
1. Since the new build system is still in review. You must fork
FOSSology and pull the
[#2075](https://github.com/fossology/fossology/pull/2075) pull
request branch. Once you are in FOSSology root, run these commands.
```bash
git fetch https://github.com/avinal/fossology avinal/feat/buildsystem:buildsystem
git checkout buildsystem
```
2. The first step towards building is to create a temporary directory
for storing intermediate files and build artifacts. By convention we
use a directory named `build`, but you can use any name. (**NOTE:
For testing do not use other names**)
```bash
mkdir build
cd build
```
3. In the next steps, we will configure the CMake project and generate
the required configurations. You can use several flags to control
the build. Given below are the flags available for this project.
<table style="width:99%;">
<colgroup>
<col style="width: 34%" />
<col style="width: 43%" />
<col style="width: 20%" />
</colgroup>
<thead>
<tr class="header">
<th>CMake Flags</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>-DCMAKE_INSTALL_PREFIX=&lt;path&gt;</strong></td>
<td>Sets the install prefix.</td>
<td><code>/usr/local</code></td>
</tr>
<tr class="even">
<td><strong>-DAGENTS="agent1;agent2..."</strong></td>
<td>Only configure these agents.</td>
<td>ALL AGENTS</td>
</tr>
<tr class="odd">
<td><strong>-DOFFLINE=&lt;ON/OFF&gt;</strong></td>
<td>Controls vendor generation, ON=NO</td>
<td><strong>OFF</strong></td>
</tr>
<tr class="even">
<td><p><strong>-DCMAKE_BUILD_TYPE=&lt;type&gt;</strong></p>
<blockquote>
<ul>
<li>Controls build type aka level optimisation</li>
</ul>
</blockquote></td>
<td><ul>
<li><code>Debug</code></li>
<li><code>Release</code></li>
<li><code>RelWithDebInfo</code></li>
<li><code>MinSizeRel</code></li>
</ul></td>
<td><code>Debug</code></td>
</tr>
<tr class="odd">
<td><strong>-DTESTING=&lt;ON/OFF&gt;</strong></td>
<td>Controls testing config generation</td>
<td><blockquote>
<p><strong>OFF</strong></p>
</blockquote></td>
</tr>
<tr class="even">
<td><strong>-DMONOPACK=&lt;ON/OFF&gt;</strong></td>
<td>Package adj2nest and ununpack seperately</td>
<td><strong>OFF</strong></td>
</tr>
<tr class="odd">
<td><strong>-GNinja</strong></td>
<td>Use Ninja instead of Unix Makefiles</td>
<td><em>Unix MakeFiles</em></td>
</tr>
</tbody>
</table>
There are lots of inbuilt CMake command-line options you can see
them in the official
[documentation](https://cmake.org/cmake/help/v3.10/manual/cmake.1.html).
Once you have chosen your flags we can now configure the project
using the following commands.
```bash
# From build folder
cd <name-of-build-directory>
cmake <flags> ..
```
4. The next step is to build the project. You can use parallel jobs to
build faster. For more options you can type `cmake --help` or
`make --help` or `ninja --help`.
```bash
# Common build command for all generators,
# Default number of parallel builds depends on generator used
cmake --build . --parallel <no-of-processes>
# For Unix Makefiles, no parallel build by default
make -j <no-of-processes>
# For Ninja, 8+ parallel build by default (depends on system)
ninja -j <no-of-processes>
```
5. Installing is also as easy as building. You can choose to install
only certain components even if you have built the whole project. If
you directly invoke the install command without building the
project, it will automatically build the project first.
```bash
# For Unix Makefiles
make install
# For Ninja
ninja install
```
6. While testing has some issues, most of the testing is working fine.
For now, you must build and run any test from the FOSSology root
directory only. You can choose to configure a single agent if you
want to test one agent only. See `ctest --help` for controlling test
runs.
```bash
# Common testing command
ctest --parallel <no-of-processes>
# For Unix Makefiles
make test
# For Ninja
ninja test
```
7. You can package FOSSology, the packaging currently lacks copyright
and conf files. But for testing purposes, you can use the following
commands. Similar to installing, if you run the package command
without building the project, it will automatically build the
project first. See `cpack --help` for more packaging options.
```bash
# Common testing command
cpack
# For Unix Makefiles
make package
# For Ninja
ninja package
```
## Known Issues and Drawbacks
Although the transition from Makefiles to CMake and Travis CI to GitHub
Actions is almost complete and working as expected. But it is not free
of drawbacks and issues. This section outlines the known issues at the
time of writing.
![A Bug Meme](https://imgs.xkcd.com/comics/conference_question.png)
- Coverage builds may fail with linking errors.
- Packaging prefix is the same as the install prefix. This requires the
developer to set the install prefix manually before packaging to
produce packages with the correct directory structure.
- Testing and packaging must be used from the FOSSology root directory.
Not doing so may or may not configure the project as intended.
- Previously tests were written hardcoded for the Makefiles. But new
build system requires all artifacts to be generated in a separate
directory. This required me to add symbolic links wherever a generated
script or file is expected. Tests can still leave some artifacts
inside source folders.
- There is no easy way to install a particular agent from the FOSSology
root directory.
- Packages don't contain copyright, readme, and license files. CMake
doesn't provide a way to include these files. This is being tracked by
issue
[#21832](https://gitlab.kitware.com/cmake/cmake/-/issues/21832).
- While packaging the symbolic links may or may not be dereferenced and
hence results in copying the folder too in the target directory.
- Running tests locally may require switching to `fossy` user.
- While configured for testing, it may give permission errors.
- Scheduler, Ununpack, and Delagent unit and functional tests are not
working. I have added an issue
[#2084](https://github.com/fossology/fossology/issues/2084) to track
the progress on fixing these tests.
- CMake doesn't generate uninstall targets. The closest thing to
uninstall is [this snippet](https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake).
This will be later added to the FOSSology.
## Challenges Faced
While this whole project was challenging, some aspects of it were
unforeseen and more challenging. When I decided to go on with this
project I just had enough CMake knowledge to write a configuration for a
very small project. I had never used CMake on this big scale. On the
other side, the FOSSology community is largely unknown to CMake so for
all of us it was learned, practiced, and implement. With support from
mentors, I was able to overcome this challenge with flying colors.
The other challenge was to understand the old build system, how they are
all connected and what is the flow. The complexity can be imagined by
the fact that the most of code and configurations were written in the
decade before the last decade and haven't changed much since then.
The most challenging task was to make tests work with the new build
system. Since tests were mostly hardcoded and the new build system
refactored many of the files and directory, the tests were failing
initially. The testing part took me the most time. All thanks to my
mentor Gaurav, I was able to hack them to suit the
new build system.
## Related Resources and Links
- Fix FOSSology agent tests issue
[#2084](https://github.com/fossology/fossology/issues/2084)
- feat(CI): Migrate API docs generation and deployment to GitHub Actions
pull request
[#1917](https://github.com/fossology/fossology/pull/1917)
- feat(CI): Migrate Static Checks and Analysis to GitHub Actions from
Travis CI [#1919](https://github.com/fossology/fossology/pull/1919)
## Future Development Plans
There is a lot to do with the new build system and CI and it will
probably take a year or to reach a maturity point. I was able to meet
most of the goals but some of them are remaining.
- Fix the tests, probably renovate them from the ground up.
- Find a hack for packaging problems.
- Improve and optimize the build.
- Modernise the source code, remove old, bloated code and replace them
according to new standards.
## What did I learn from this project?
This Google Summer of Code was the busiest time of my life for all good
reasons. I learned a lot about license compliance and how it all works
in the software industry. The next big thing is CMake. As I mentioned I
was just a novice user of CMake. Now I am confident that given any other
large project I will be able to migrate it/improve it. I got to learn
PHP, of which I did not know a single word before GSoC. And finally, I
learned about packing and testing. I had these courses but implementing
them myself and fixing them was a wholesome experience.
Other than that I improved on my communication and presentation skills.
Collaborating with fellow participants was one of the great things that
happened during GSoC.
## Acknowledgments
Google Summer of Code is the best thing that has happened to me this
year so far. Although there are numerous people to say thanks to, I want
to mention key people who were my motivation and support during this
period.
First of all, I want to thank and appreciate my mentors [Gaurav
Mishra](https://github.com/GMishx), [Michael C.
Jaeger](https://github.com/mcjaeger), [Anupam
Ghosh](https://github.com/ag4ums), and [Shaheem Azmal M
MD](https://github.com/shaheemazmalmmd). Without the help and support
from them, all this would not have been possible. They are very polite,
knowledgeable, and helpful.
Finally, I want to thank, my family and friends. I got to meet many
awesome developers as my fellow participants from around the world, I
wish we will do more collaboration in the future.
@@ -0,0 +1,118 @@
---
title: I am loving it! RedHat
date: 2022-02-25 20:47
category: development
tags: [kubernetes, redhat, docker, golang, tekton, openshift, intern]
description: I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project.
---
# My internship at Red Hat
I have been contributing to open source for the last 3 years and Red Hat
was one of the companies that I was very fond of. I must say all my
contributions and consistency paid off, and I made it to the Red Hat as
a DevTools intern. This post is about onboarding and how I prepared
myself for working on the actual project.
On the first day of my internship, I met two amazing teammates
[Saytam](https://github.com/) and [Utkarsh](https://github.com/). We
were also introduced to a Senior Software Engineer [Piyush
Garg](https://github.com) who later mentored us. The initial few
meetings were more on the introduction and what to learn topics. Before
I jump into more details let me explain first what does a **DevTools
Developer/Engineer** do?
## What does a DevTools Developer/Engineer do?
From [MDN Web
Docs](https://developer.mozilla.org/en-US/docs/Glossary/Developer_Tools)
**Developer tools (or "development tools" or short "DevTools") are
programs that allow a developer to create, test, and debug software.**
At RedHat, a lot of open source developer tools of industry standards
are developed. There are many, OpenShift, Tekton, CodeReady containers,
and many more.
## Learning on the Go
There was a lot of learning and still a lot to learn. In a meeting with
my manager Pradeepto Bhattacharya, I was told that I will be working on
TektonCD or OpenShift Pipelines, and both of them require a sound
knowledge of Golang, CI/CD, Containers, Docker, and Kubernetes. I was
familiar with CI/CD, containers, and Docker but never used Golang and
Kubernetes. We were provided plenty of good resources and my teammates
also helped with many awesome resources. I am listing all the resources
with their category.
### Go Programming Language
One of Golang's biggest advantages is that it offers the clarity and
ease of use that other languages lack. Golang's advantages make it easy
for new programmers to quickly understand the language and for seasoned
veterans to easily read each other's code.
- [Official Go Documentation](https://go.dev/doc/) - *Start from here*
- [Go by Example](https://gobyexample.com/) - *bite-size examples for
most of the golang features*
- [Golang tutorial series -
GOLANGBOT.COM](https://golangbot.com/learn-golang-series/) - *in-depth
tutorial of golang*
- [Effective Go](https://go.dev/doc/effective_go) - *writing good golang
programs*
- [The Go Playground](https://go.dev/play/) - *official online golang
ide*
- [The Go Programming Language - Book](https://www.gopl.io/) *for
learning advanced level golang*
- [Golang Tutorial for Beginners | Full Go Course - TechWorld with
Nana](https://youtu.be/yyUHQIec83I) *if you prefer video tutorials, I
don't :)*
### Docker
Docker takes away repetitive, mundane configuration tasks and is used
throughout the development lifecycle for fast, easy, and portable
application development - desktop and cloud. Docker's comprehensive
end-to-end platform includes UIs, CLIs, APIs, and security that are
engineered to work together across the entire application delivery
lifecycle.
![The Docker Architecture](/images/docker-architecture.png)
- [Docker and Containers -
Katacoda](https://www.katacoda.com/courses/docker) *interactive
lessons on docker and containers*
- [Docker for beginners](https://docker-curriculum.com/)
- [Docker Tutorial for Beginners | TechWorld with
Nana](https://youtu.be/3c-iBn73dDE) *video tutorial*
### Kubernetes
![Kubernetes tech](/images/kubernetes-architecture.png)
**Kubernetes** is the Greek word for a ship's captain. We get the words
Cybernetic and Gubernatorial from it. The Kubernetes project focuses on
building a robust platform for running thousands of containers in
production.
- [Learn Kubernetes -
Katacoda](https://www.katacoda.com/courses/kubernetes) *interactive
lessons with kubernetes*
- [kube by example](https://kubebyexample.com/) *learn by doing*
- [Kubernetes Tutorial for Beginners](https://youtu.be/X48VuDVv0do)
*video tutorial*
## *Not so Minimal* Tekton Server
In late January, we were asked to implement our learnings and deep dive
into Kubernetes and TektonCD through an assignment project. Soon we
realized that whatever we were learning so far was not even close to
what we were going to implement. We were given a document containing the
requirements of the applications we were supposed to create along with
all the documentation and architectural diagrams.
The application was called **Minimal Tekton Server**. It is a set of
three different applications, i.e a server, a CLI, and a dashboard. In
short, this application is supposed to *listen to custom resources being
created and then transfer the request to Tekton API to create the
corresponding resource on the OpenShift/Kubernetes cluster.*
So are you interested in how it went? Please follow up with my [next
blog](https://avinal.space/posts/development/lovely-dangerous-things-redhat.html).
@@ -0,0 +1,209 @@
---
title: Developing Minimal Tekton Server
date: 2022-02-27 20:47
modified: 2022-03-07 22:47
category: development
tags: [tekton, go, kubernetes, openshift, redhat, intern, golang, openshift-pipelines]
description: 'This blog is a descreptive account of the development of Minimal Tekton Server. This is highly technical in nature, so please make sure that you have sufficient knowledge about Golang, Docker, Kubernetes and TektonCD. You can refer to my [previous blog]("https://avinal.space/posts/development/i-am-loving-it-redhat.html") to know about these topics.'
---
# Developing Minimal Tekton Server
This blog is a descreptive account of the development of Minimal Tekton Server.
This is highly technical in nature, so please make sure that you have sufficient
knowledge about Golang, Docker, Kubernetes and TektonCD. You can refer to my
[previous blog]("https://avinal.space/posts/development/i-am-loving-it-redhat.html")
to know about these topics.
As mentioned in my last blog, we were given to implement an application
named **Minimal Tekton Server**. The problem statement reads:
> We will be designing and implementing an application that will be
> talking to Tekton APIs to create resources on a Kubernetes/OpenShift
> Cluster. The application will expose some fields of the Tekton
> Resources which the user will provide and then this application will
> create Tekton resources by talking to Tekton APIs available on the
> cluster to create the resources based on the user-provided fields.
There are three parts in this project for the application and two more
parts for the CI/CD using TektonCD and Kubernetes/OpenShift. I will go
through each part descriptively and try to explain what we did.
## The Architecture of MKS
The first task in the development of the Minimal Tekton Server was
creating its architectural diagram. Our first diagram was trash compared
to the final diagram. Yeah, we learned. I will be explaining our
final(obviously) architectural diagram and try to make some sense out of
band-aids and duct tapes.
<img src="/images/mks-architecture.png"
class="img-fluid my-3 img-fluid my-3" alt="The MKS Arhitecture" />
Let me start with explaining **What are MKS Resources?**. I hope you
know at least tidbits about Kubernetes and by the definition: *A
resource is an endpoint in the Kubernetes API that stores a collection
of API objects of a certain kind; for example, the built-in
:code:\`pods\` resource contains a collection of Pod objects.* But
developers soon realized that these in-built resources were not enough
for the ever-growing applications of Kubernetes. Here [custom
resource](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/)
comes into the picture. *A custom resource is an extension of the
Kubernetes API that is not necessarily available in a default Kubernetes
installation.* To define a custom resource we use something called
[Custom Resource
Definition](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/).
So MKS Resources are such custom resources that correspond to the
TektonCD custom resources.
<img src="/images/venus-flytrap.gif"
class="float-md-right ml-3 float-md-right ml-3" width="250"
alt="A venus flytrap engulphing an insect." />
Let us now focus on the box containing `Controller` and `API server`.
The controller can be said as a stimulus-response mechanism. Take the
analogy of a Venus Flytrap plant. The trap is initially open. There are
`trigger` hairs on the inside of the trap. Once an insect is detected,
there is a change of state and the trap closes in a blick on the eye.
The controller works the same way. It listens for the change in the
state of the MKS resources and immediately transfers the request to the
Tekton API to reflect the change in the corresponding Tekton resources.
The changes can be creation, deletion, or updating. The API server
ensures that there is a working connection between our controller and
the Tekton API.
MKS Server also exposes APIs to introduce a change of state in the MKS
resources. In technical terms these are called `verbs`. There are five
such verbs that we have exposed: `create`, `update`, `get`, `delete`,
and `list`. They can be utilized by a REST client, or in our case **MKS
CLI** to introduce desired change. The MKS command-line interface
provides commands and subcommands to do the desired tasks.
Whenever there is a change in the state, there is a logic running inside
the controller to react on that and that also affects our database. We
store four datapoints in our database: `created`, `deleted`,
`completed`, and `failed`. They tell us about the current statistcs of
our MKS resource using a single-page web app called **MKS Dashboard**
(or UI).
This was about the architecture of the Minimal Tekton Server. Let us
jump into more technical stuff.
## How to implement a CRD controller?
During this assignment, something that took the most time and effort was
the implementation of a controller for our custom resources. This isn't
very hard if you go by the rules and do the things according to the
well-defined documents and blogs since this is a standard step in the
implementation of any custom resource controller. But did we follow the
rules? Hell no! But this time, let us go step-by-step.
1. The first step is to define a `CustomResourceDefinition` for our custom
resource. Let us define a CRD called `spacetime`. To do this you can write a
YAML file like below.
```yaml
# file: spacetime-crd.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
# name must match the spec fields below, and be in the form: <plural>.<group>
name: spacetimes.example.com
spec:
# group name to use for REST API: /apis/<group>/<version>
group: example.com
# list of versions supported by this CustomResourceDefinition
versions:
- name: v1alpha1
# Each version can be enabled/disabled by Served flag.
served: true
# One and only one version must be marked as the storage version.
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
message:
type: string
# either Namespaced or Cluster
scope: Namespaced
names:
# plural name to be used in the URL: /apis/<group>/<version>/<plural>
plural: spacetimes
# singular name to be used as an alias on the CLI and for display
singular: spacetime
# kind is normally the CamelCased singular type. Your resource manifests use this.
kind: SpaceTime
# shortNames allow shorter string to match your resource on the CLI
shortNames:
- st
```
You can learn more about the fields and options
[here](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/).
The CRD that we defined above corresponds to the `CustomResource` given
below. Once you apply the above file you will be able to see the
`spacetime` custom resource on your Kubernetes/OpenShift cluster.
```yaml
# file: spacetime-cr.yaml
apiVersion: spacetimes.example.com/v1alpha1
kind: SpaceTime
metadata:
name: spacetime-cr
spec:
message: "Hello from space!"
```
Apply them using the following commands:
```bash
kubectl apply -f spacetime-crd.yaml
kubectl apply -f spacetime-cr.yaml
```
1. Once we have defined our custom resources, we need to define the
types that will correspond to this custom resource definition. This
can be done using `k8s.io/apimachinery/pkg/apis/meta/v1` package
written in golang. Did I tell you that this is all in golang? Well,
now you know. Create a package structure for a golang project and
add the definition of the type as given below.
```bash
mkdir -p pkg/api/spacetime/v1alpha1
touch pkg/api/spacetime/v1alpha1/{spacetime_types,register,doc}.go pkg/api/spacetime/register.go
```
Add the following content to the corresponding files.
```go
// file: /pkg/api/spacetime/v1alpha1/spacetime_types.go
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
type SpaceTime struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec SpaceTimeSpec `json:"spec"`
}
type SpaceTimeSpec struct {
Message string `json:"message"`
}
type SpaceTimeList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata"`
Items []SpaceTime `json:"items"`
}
```
### To be Continued
+211
View File
@@ -0,0 +1,211 @@
---
title: How I implemented WakaTime embeddable Coding Graph GHA?
date: 2021-02-02 21:47
tags: [wakatime, github-action, coding]
category: development
image: https://raw.githubusercontent.com/avinal/Profile-Readme-WakaTime/b281d074ee75f9626b39d10e2e518c6a297208a3/waka.png
description: 'If you use WakaTime to track your coding activity. You can add that to
your README as a bar graph or embed it in your blog/portfolio. Just add this
action to any of your repositories and there you have it.'
---
# How I implemented WakaTime embeddable Coding Graph GHA?
If you use WakaTime to track your coding activity. You can add that to
your README as a bar graph or embed it in your blog/portfolio. Just add this
action to any of your repositories and there you have it.
## Implementation Details
This GitHub Action is divided into three parts. I didn't want to use
Docker but it seems it doesn't work well without it. Let dive a little
into technical details. Three parts are as below.
1. [main.py](https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py)
python script. This script contains many procedures.
- [Getting JSON data file via WakaTime
API](https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L52)
```python
def get_stats() -> list:
...
return data_list
```
This function parses the JSON file received and scraps out the useful
data as a list of lists. Data scraped are language list, time spent on
each language, percentage of the time, start date, and end date. For
this action, I have limited the number of languages to 5 however it
should be very easy to increase that number.
- [Setting the
Timeline](https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L13)
```python
def this_week(dates: list) -> str:
...
return f"Coding Activity During: {week_start.strftime('%d %B, %Y')} to {week_end.strftime('%d %B, %Y')}"
```
The start date and end date scraped in the last function are used here
to set the timeline. Because date in JSON is provided in UTC as below
:
```json
date: "YYYY-MM-DDTHH:MM:SSZ"
```
I striped it to simple dates only. We can set them manually by taking
the current time from the system. But that method is flawed. But this
method ensures that JSON was received latest and the request was
successful. Any anomaly will point to a failure in request.
- [Creating a bar
graph](https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L21)
```python
def make_graph(data: list):
...
savefig(...)
```
Lastly, it is time to generate the graph and save them as an image.
This function uses the data scraped in the first step. Creating a bar
graph using matplotlib is easy.
Decorating was a bit difficult. I wanted this graph to merge with
GitHub's look so I chose to color the bar as GitHub colors the
languages. That data is stored as colors.json. Many of the languages have
slightly different spelling in GitHub as compared to WakaTime. So some
languages are shown in default color. That can be improved if we
notice that language and change its color manually. Lastly, the graph
is saved both as SVG and PNG. SVGs are better to put on a responsive
page.
2. [entrypoint.py](https://github.com/avinal/Profile-Readme-WakaTime/blob/master/entrypoint.sh)
shell script. This shell script clones the repository copies the
image and pushes changes to the master. There were several problems.
First of all authentication. This was solved by using a remote
repository address using GitHub Token. And it seems that GitHub
doesn't allow to commit without a username and email. So I used
**github-actions** bot email.
```bash
remote_repo-"https://${GITHUB_ACTOR}:${INPUT_GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config user.name "GitHub Actions"
```
`41898282` is the id assigned to the github-actions bot. Don't ask
where I found them 🙂.
Another problem was to separate repository name from combined
*username/repository-name* provided by `${GITHUB_REPOSITORY}`. GitHub doesn't
provides a direct way to get just the repo name. We used *Internal
Field Separator*. It returns an array and works similar to `split()`
command in Python and Java.
```bash
# '/' is the seperator
IFS-'/' read -ra reponame <<< "${GITHUB_REPOSITORY}"
# returned {username, repository}
repository-"${reponame[1]}"
```
After that, all other commands are pretty straight. Commit the added
files and push them.
3. [Dockerfile](https://github.com/avinal/Profile-Readme-WakaTime/blob/master/Dockerfile)
**IMPORTANT** It took a lot of time to reach this state 🥱. This is
where all the magic happens. I am running <span
class="title-ref">ubuntu:latest</span> inside the container. I first
update the distribution. Then install the required python packages.
Lastly, I invoke the python script and shell script.
There was an almost impossible problem, I searched hundreds of posts
that *how can I access the generated files inside Docker container*, but
no luck. But at last, I found a workaround(obviously otherwise you
wouldn't be reading this by now 🤣) each command is run in a separate
virtual sub-container. As the command ends its output is also lost but
not when you club multiple commands together. At least not until every
command is finished. The generated files are available to the next
clubbed process. I did that by combining the python script run and shell
script run.
```dockerfile
CMD python3 /main.py && /entrypoint.sh
```
This part is the smallest yet took the most time and tries while
developing this action.
## How to use this GitHub Actions?
1. First get your WakaTime API Key. You can get it from your
[WakaTime](<https://wakatime.com>) account settings.
2. Save WakaTime API Key to Repository Secret. Find that by clicking
the Settings tab. Keep the name of the secret as
**WAKATIME_API_KEY**.
3. Add the following line in your README.md of your repo.
```html
<img src="https://github.com/<username>/<repository-name>/blob/<branch-name>/images/stat.svg" alt="Alternative Text"/>
Example: <img src="https://github.com/avinal/avinal/blob/main/images/stat.svg" alt="Avinal WakaTime Activity"/>
```
> You can use this method to embed in web pages too. **Do not use the
> markdown method of inserting images. It does not work sometimes.**
4. Click the **Action** tab and **choose to set up a workflow
yourself**.
5. Copy the following code into the opened file, you can search for
**WakaTime Stat** in the marketplace tab for assistance.
```yaml
name: WakaTime status update
on:
schedule:
# Runs at 12 am '0 0 * * *' UTC
- cron: "1 0 * * *"
jobs:
update-readme:
name: Update the WakaTime Stat
runs-on: ubuntu-latest
steps:
# Use avinal/Profile-Readme-WakaTime@<latest-release-tag> for latest stable release
# Do not change the line below except the word master with tag number maybe
# If you have forked this project you can use <username>/Profile-Readme-WakaTime@master instead
- uses: avinal/Profile-Readme-WakaTime@master
with:
# WakaTime API key stored in secrets, do not directly paste it here
WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }}
# Automatic github token
GITHUB_TOKEN: ${{ github.token }}
# Branch - newer GitHub repositories have "main" as default branch, change to main in that case, default is master
BRANCH: "master"
# Manual Commit messages - write your own messages here
COMMIT_MSG: "Automated Coding Activity Update :alien:"
```
6. Please wait till 12 AM UTC to run this workflow automatically. Or
you can force run it by going to the Actions tab. Or you can add the
following lines under `on:` to run with
every push. Search for 12 AM UTC to find the equivalent time in your
time zone.
```yaml
on:
push:
branches: [ master ]
schedule:
- cron: '1 0 * * *'
```
## My Coding Activity
![Avinal's GitHub stats](https://raw.githubusercontent.com/avinal/avinal/main/images/stat.svg)
+91
View File
@@ -0,0 +1,91 @@
---
title: Move WSL 2 Safely to another Drive
date: 2020-12-31 19:07
tags: [wsl, wsl2]
category: development
description: 'It is real pain when you have small SSD and Windows Subsystem for Linux
(WSL) is growing exponentially in size. There is no easy way to move the
WSL installation to another drive. Here in this blog I will discuss how
to tackle this problem with bite size steps.'
---
# Move WSL 2 Safely to another Drive
It is real pain when you have small SSD and Windows Subsystem for Linux
(WSL) is growing exponentially in size. There is no easy way to move the
WSL installation to another drive. Here in this blog I will discuss how
to tackle this problem with bite size steps.
1. Open a PowerShell or Command Prompt with *Admin* access. For this you can
use WinKey + X shortcut and select **Windows PowerShell(Admin)**.
2. Check if the WSL 2 installation you are planning to move is is
currently running/stopped.
```powershell
PS C:\\Users\\Avinal> wsl -l -v
PS C:\\Users\\Avinal>
NAME STATE VERSION
* Ubuntu Running 2
Kali Stopped 2
```
3. If its running then you must stop the particular WSL distribution.
(*Ubuntu* used as example)
```powershell
PS C:\\Users\\Avinal> wsl -t Ubuntu
```
4. Export to some folder. (Here exporting *Ubuntu* as *ubuntu-ex.tar*
to *Z:wsl2*)
```powershell
PS C:\\Users\\Avinal> wsl --export Ubuntu "Z:\\export\\ubuntu-ex.tar"
```
5. Unregister previous WSL installation
```powershell
PS C:\\Users\\Avinal> wsl --unregister Ubuntu
```
6. Create a new folder and import your WSL installation to that folder.
```powershell
PS C:\\Users\\Avinal> New-Item -Path "Z:\\wsl2" -ItemType Directory
Directory: Z:\\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 31-12-2020 21:03 wsl2
PS C:\\Users\\Avinal> wsl --import Ubuntu "Z:\\wsl2" "Z:\\export\\ubuntu-ex.tar"
```
7. Check after import is complete
```powershell
PS C:\\Users\\Avinal> wsl -l -v
PS C:\\Users\\Avinal>
NAME STATE VERSION
* Ubuntu Running 2
Kali Stopped 2
```
8. Mark one of your WSL distribution as *(default)*.
```powershell
PS C:\\Users\\Avinal> wsl -s Ubuntu
```
9. After exporting your default user will be set as
<i style="color:red">root</i> , to change it to your desired
username, run following command
```powershell
PS C:\\Users\\Avinal> ubuntu config --default-user user_name
```
10. Finally run `wsl` and you have successfully moved your WSL 2
installation to another drive.
+1
View File
@@ -0,0 +1 @@
# This page does not exists
+1
View File
@@ -0,0 +1 @@
[{"title":"Developing Minimal Tekton Server","date":"2022-02-27 20:47","category":"development","description":"This blog is a descreptive account of the development of Minimal Tekton Server. This is highly technical in nature, so please make sure that you have sufficient knowledge about Golang, Docker, Kubernetes and TektonCD. You can refer to my [previous blog](\"https://avinal.space/posts/development/i-am-loving-it-redhat.html\") to know about these topics.","slug":"lovely-dangerous-things-redhat"},{"title":"I am loving it! RedHat","date":"2022-02-25 20:47","category":"development","description":"I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project.","slug":"i-am-loving-it-redhat"},{"title":"Google Summer of Code 2021","date":"2021-08-19 23:07","category":"development","description":"This is the final report of my Google Summer of Code 2021 at The FOSSology Project. One of the major improvements over the previous build system is faster build times. CMake generates parallel build-enabled configurations for all generators.","slug":"final-evaluation"},{"title":"How I implemented WakaTime embeddable Coding Graph GHA?","date":"2021-02-02 21:47","category":"development","description":"If you use WakaTime to track your coding activity. You can add that to your README as a bar graph or embed it in your blog/portfolio. Just add this action to any of your repositories and there you have it.","slug":"wakatime"},{"title":"HRT (Hudson River Trading) Systems Internship Interview Experience","date":"2021-01-04 21:47","category":"blogs","slug":"hrt-interview-1","description":"uestions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt. Also, they expected a clear and concise approach."},{"title":"Move WSL 2 Safely to another Drive","date":"2020-12-31 19:07","category":"development","description":"It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps.","slug":"wsl2-move"},{"title":"Create the VLC User Documentation for one Mobile Port(Android)","date":"2020-12-01 23:47","category":"blogs","description":"The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLC wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization.","slug":"gsod2020-report"},{"title":"प्रेम रतन धन पायो","date":"2019-09-21 15:47","category":"articles","slug":"for-sunshine","description":"प्रकृति की सुंदरता और कलाकारी हिमालय की कण-कण में झलकती है। प्रकृति ने प्रेम को भी हिमालय के जितना ही विशाल और अलौकिक बनाया है । ये एक अलग चर्चा का विषय है कि हिमालय पहले आया या प्रेम। मैं तो प्रेम के पक्ष में हूँ । वो हर अणु-परमाणु जिन्होंने इतने बड़ा पहाड़ खड़ा किया वो सब आपस में प्रेम से बंधे हुए हैं। ये पृथ्वी, सूर्य, चंद्रमा, आकाश-गंगा इत्यादि सब प्रेम से बंधे हुए हैं"},{"title":"The Big Red Ants","date":"2012-02-27 22:47","category":"articles","description":"As I observed them making and reparing their nests, I concluded that they are laborious and intellectual. They create their nests bybinding two or more leaves (maybe up to 500) together. They stich the leaves using a stinky white substance either excreted by themselves or from trees.","slug":"big-red-ants"}]
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
-176
View File
@@ -1,176 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>My Checklist | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/drafts/checklist.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/development.atom.xml">
<meta name="description" content="">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>My Checklist
</h1>
<hr>
<article class="article">
<header>
<ul class="list-inline">
<li class="list-inline-item text-muted" title="2021-02-14T22:47:00+05:30">
<i class="fas fa-clock"></i>
Sun 14 February 2021
</li>
<li class="list-inline-item">
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
<li class="list-inline-item">
<i class="fas fa-tag"></i>
<a href="https://avinal.space/tag/rst.html">#rst</a>, <a href="https://avinal.space/tag/github.html">#github</a> </li>
</ul>
</header>
<div class="content">
<hr>
<p align=center>
This Blog is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer">Attribution-NonCommercial 4.0 International<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
</a>
</p>
</div>
</article>
<hr>
<div id="comment-form">
<div class="alert alert-info" role="alert">
Feel free to leave a feedback or question!
</div>
<form action="https://docs.google.com/forms/u/0/d/e/1FAIpQLSfL9T8WBRm-Ac2uyu74lJXSYOqAuF6lLIUAulRArCsuiI1ZRQ/formResponse" target="response" method="POST" id="valid-form">
<div class="form-row align-items-center">
<div class="form-group col-md-5">
<label class="sr-only" for="person-name">Name</label>
<input type="text" class="form-control form-control-sm" id="person-name" placeholder="Your Name (Optional)"
aria-describedby="nameHelp" name="entry.982725972">
<input type="text" id="page-link" name="entry.1641222305" hidden>
<small id="nameHelp" class="form-text text-muted">You may put your GitHub Username.</small>
</div>
<div class="form-group col-md-7">
<label class="sr-only" for="email-address">Email address</label>
<input type="email" class="form-control form-control-sm" id="email-address" aria-describedby="emailHelp"
placeholder="Your Email Address (Optional)" name="entry.1652853191">
<small id="emailHelp" class="form-text text-muted">I'll never share your email with anyone
else.</small>
</div>
</div>
<div class="form-group">
<label class="sr-only" for="comment-section">Your Message</label>
<textarea class="form-control form-control-sm" id="comment-section" rows="3"
placeholder="Please enter your message or feedback. (Required)" aria-describedby="emailHelp"
name="entry.1062656232" required></textarea>
<div class="invalid-feedback">
Please Enter something !
</div>
<small id="textHelp" class="form-text text-muted">Enter upto 200 characters.</small>
</div>
<button class="btn btn-outline-info" type="submit">Send</button>
</form>
<iframe name="response" hidden></iframe>
</div>
<div class="alert alert-info" role="alert" id="comment-message" style="display: none;">
<h4 class="alert-heading">Thanks You 🥳</h4>
<p>Thanks a lot for reading this blog and sending me a feedback. I hope you liked it. I will get back to you
soon if you have added an email.</p>
</div>
<script>
(function () {
'use strict';
window.addEventListener('load', function () {
var form = document.getElementById('valid-form');
form.addEventListener('submit', function (event) {
document.getElementById('page-link').value = window.location.href;
document.getElementById('comment-form').style.display = 'none';
document.getElementById('comment-message').style.display = '';
}, false);
}, false);
})();
</script>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-177
View File
@@ -1,177 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Google Summer of Code 2021 Selection | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/drafts/finally-gsoc.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/gsoc.atom.xml">
<meta name="description" content="Finally after three years I have been selected in Google Summer of Code program at The FOSSology Project. I will be working on New Buildsystem and CI/CD for the project.">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Google Summer of Code 2021 Selection
</h1>
<hr>
<article class="article">
<header>
<ul class="list-inline">
<li class="list-inline-item text-muted" title="2021-05-17T23:22:00+05:30">
<i class="fas fa-clock"></i>
Mon 17 May 2021
</li>
<li class="list-inline-item">
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/gsoc.html">gsoc</a>
</li>
<li class="list-inline-item">
<i class="fas fa-tag"></i>
<a href="https://avinal.space/tag/gsoc.html">#gsoc</a>, <a href="https://avinal.space/tag/gsoc21.html">#gsoc21</a>, <a href="https://avinal.space/tag/fossology.html">#fossology</a> </li>
</ul>
</header>
<div class="content">
<p>Finally after three years I have been selected in <strong>Google Summer of Code</strong> program at <strong>The FOSSology Project</strong>. I will be working on <em>New Buildsystem and CI/CD</em> for the project.</p>
<hr>
<p align=center>
This Blog is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer">Attribution-NonCommercial 4.0 International<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
</a>
</p>
</div>
</article>
<hr>
<div id="comment-form">
<div class="alert alert-info" role="alert">
Feel free to leave a feedback or question!
</div>
<form action="https://docs.google.com/forms/u/0/d/e/1FAIpQLSfL9T8WBRm-Ac2uyu74lJXSYOqAuF6lLIUAulRArCsuiI1ZRQ/formResponse" target="response" method="POST" id="valid-form">
<div class="form-row align-items-center">
<div class="form-group col-md-5">
<label class="sr-only" for="person-name">Name</label>
<input type="text" class="form-control form-control-sm" id="person-name" placeholder="Your Name (Optional)"
aria-describedby="nameHelp" name="entry.982725972">
<input type="text" id="page-link" name="entry.1641222305" hidden>
<small id="nameHelp" class="form-text text-muted">You may put your GitHub Username.</small>
</div>
<div class="form-group col-md-7">
<label class="sr-only" for="email-address">Email address</label>
<input type="email" class="form-control form-control-sm" id="email-address" aria-describedby="emailHelp"
placeholder="Your Email Address (Optional)" name="entry.1652853191">
<small id="emailHelp" class="form-text text-muted">I'll never share your email with anyone
else.</small>
</div>
</div>
<div class="form-group">
<label class="sr-only" for="comment-section">Your Message</label>
<textarea class="form-control form-control-sm" id="comment-section" rows="3"
placeholder="Please enter your message or feedback. (Required)" aria-describedby="emailHelp"
name="entry.1062656232" required></textarea>
<div class="invalid-feedback">
Please Enter something !
</div>
<small id="textHelp" class="form-text text-muted">Enter upto 200 characters.</small>
</div>
<button class="btn btn-outline-info" type="submit">Send</button>
</form>
<iframe name="response" hidden></iframe>
</div>
<div class="alert alert-info" role="alert" id="comment-message" style="display: none;">
<h4 class="alert-heading">Thanks You 🥳</h4>
<p>Thanks a lot for reading this blog and sending me a feedback. I hope you liked it. I will get back to you
soon if you have added an email.</p>
</div>
<script>
(function () {
'use strict';
window.addEventListener('load', function () {
var form = document.getElementById('valid-form');
form.addEventListener('submit', function (event) {
document.getElementById('page-link').value = window.location.href;
document.getElementById('comment-form').style.display = 'none';
document.getElementById('comment-message').style.display = '';
}, false);
}, false);
})();
</script>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
+32
View File
@@ -0,0 +1,32 @@
{
"type": "application",
"source-directories": [
"src"
],
"elm-version": "0.19.1",
"dependencies": {
"direct": {
"MaybeJustJames/yaml": "2.1.2",
"elm/browser": "1.0.2",
"elm/core": "1.0.5",
"elm/html": "1.0.0",
"elm/http": "2.0.0",
"elm/json": "1.1.3",
"elm/parser": "1.1.0",
"elm/url": "1.0.0"
},
"indirect": {
"elm/bytes": "1.0.8",
"elm/file": "1.0.5",
"elm/regex": "1.0.0",
"elm/time": "1.0.0",
"elm/virtual-dom": "1.0.3"
}
},
"test-dependencies": {
"direct": {},
"indirect": {
"rtfeldman/elm-hex": "1.0.0"
}
}
}
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 926 B

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

-1610
View File
File diff suppressed because it is too large Load Diff
-76
View File
@@ -1,76 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Be My SpaceTime - blog</title><link href="https://avinal.space/" rel="alternate"></link><link href="https://avinal.space/feeds/blog.atom.xml" rel="self"></link><id>https://avinal.space/</id><updated>2021-01-04T21:47:00+05:30</updated><subtitle>눈치</subtitle><entry><title>HRT Systems Internship Interview Experience</title><link href="https://avinal.space/posts/blog/hrt-interview-1.html" rel="alternate"></link><published>2021-01-04T21:47:00+05:30</published><updated>2021-01-04T21:47:00+05:30</updated><author><name>Avinal</name></author><id>tag:avinal.space,2021-01-04:/posts/blog/hrt-interview-1.html</id><summary type="html">&lt;p class="first last"&gt;I applied for &lt;strong&gt;Systems Internship - Summer 2021&lt;/strong&gt; back in December 2020 at &lt;a class="reference external" href="https://www.hudsonrivertrading.com"&gt;Hudson River Trading&lt;/a&gt; , New York.....Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;I applied for &lt;strong&gt;Systems Internship - Summer 2021&lt;/strong&gt; back in December 2020 at &lt;a class="reference external" href="https://www.hudsonrivertrading.com"&gt;Hudson River Trading&lt;/a&gt; , New York. The internship description was: -&lt;/p&gt;
&lt;blockquote class="epigraph"&gt;
&lt;p&gt;We are looking for highly motivated students who are eager to learn and excited about systems to join us for our summer internship
program. As a systems intern, you may have the opportunity to work on projects in the following areas:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Programming/scripting (Golang, Python, C++, C)&lt;/li&gt;
&lt;li&gt;FOSS development&lt;/li&gt;
&lt;li&gt;HPC, Cluster computing&lt;/li&gt;
&lt;li&gt;System Administration&lt;/li&gt;
&lt;li&gt;Linux, Debian&lt;/li&gt;
&lt;li&gt;Linux-based computer security&lt;/li&gt;
&lt;li&gt;Data Storage&lt;/li&gt;
&lt;li&gt;Large deployment or config management&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;The first step was a coding test on the Codility platform. If you have used any of the online coding platforms, this is similar. It was a &lt;abbr title="90 mins"&gt;2.5 hrs&lt;/abbr&gt; test consisting of 3 questions. They let you use &lt;abbr title="documentation, man pages, etc."&gt;online references&lt;/abbr&gt; but
&lt;strong&gt;do not copy the code&lt;/strong&gt; as it will highly reduce your chances of qualifying for this first stage. You can choose between &lt;strong&gt;C/C++&lt;/strong&gt;,
&lt;strong&gt;Python&lt;/strong&gt; and &lt;strong&gt;Golang&lt;/strong&gt; (no Java 😪).&lt;/p&gt;
&lt;p&gt;Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt.
Also, they expected a clear and concise approach. Two of the most important points in their instructions were: -&lt;/p&gt;
&lt;blockquote class="epigraph"&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;While correctness and performance are the most important factors for evaluation, we will take test duration into account as well.&lt;/li&gt;
&lt;li&gt;Please understand that this test is meant to be challenging. A perfect score is not necessary to move on to future interview rounds, so do the best you can!&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;So, you must be near perfect in your approach as well as on time. I did them kind of quickly. They will show you a summary of your
submission but not the results. It will take almost 2 weeks to get back to you for further steps.&lt;/p&gt;
&lt;p&gt;Next, I received a mail invitation for a telephonic interview. &lt;strong&gt;This interview will last about 45 minutes and will be technical but will not require coding. Interview topics may include your background, programming languages, and Unix/Linux concepts&lt;/strong&gt;. Once you receive this
mail you can then decide a time slot for an interview.&lt;/p&gt;
&lt;p&gt;I was not sure what they will ask if this is not a coding interview. The interviewer was very polite, and he was explaining the questions
too. Questions were not so tricky but practical and real-life. Since it was &lt;strong&gt;not for SDE role&lt;/strong&gt;, the questions were mostly related to
Linux/Unix, C++ (mainly pointers and memory), Python/Bash scripting, automation, knowledge of tools (IDEs, Editors, System Administration
Tools) and previous experiences. The interview would often explain why he is asking this question, this was very nice. Then some common
interview questions, why do you want to work for this role? What makes you fit for this role? etc.&lt;/p&gt;
&lt;p&gt;One thing that I want to point out is that the interviewer was repeatedly checking my resume, and for the most part he did not ask
anything that was not on my resume. So, my tip is to create a nice resume with genuine work/tool experiences. And when you are applying
for such a role, it would be helpful if you mention mathematics or other courses that you have taken. &lt;em&gt;Do not lie on your resume&lt;/em&gt;. They
will easily catch that.&lt;/p&gt;
&lt;p&gt;The other thing is to keep your words short and clear; I was not great at communication, but you can be. If the interviewer allows then
use examples for the things you cannot explain. I used nice examples. At last, he gave me short feedback on how well I performed.&lt;/p&gt;
&lt;p&gt;At last, I want to point out things I should not have done. The first is, I did not ask much about the role, you must do this at least
once. Second, I am talkative, I do not know if the interviewer was not faking his expressions (because he would often discuss in-depth),
but not all interviewers will be the same. So, do not talk too much, nor too less. At last work on your communication skill, mostly how
you to present things and how to answer technical as well as behavioral questions. I was not fluent, but my way of presentation might
have saved me.&lt;/p&gt;
</content><category term="blog"></category><category term="HRT"></category><category term="hudsonrivertrading"></category><category term="interview"></category><category term="internship"></category></entry><entry><title>The Interstellar Twilight</title><link href="https://avinal.space/posts/blog/this-is-for-you.html" rel="alternate"></link><published>2020-09-28T22:47:00+05:30</published><updated>2020-09-28T22:47:00+05:30</updated><author><name>Avinal</name></author><id>tag:avinal.space,2020-09-28:/posts/blog/this-is-for-you.html</id><summary type="html">&lt;p class="first last"&gt;If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Yeah, it was a dream someday. I never imagined you. But I do remember glimpses of a wonderful person
in my deep slumber. When I go back to last year about the same time, I find myself a manic who gets
carried away with every emotion. Becoming too happy about something and then becoming too sad was so
common that I never noticed what I was risking.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream.&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;But 1 year ago many things changed. A never seen dream came true. To be honest I was skeptical if all
this happening to me was true. Even until last December. Gradually things started falling into places.
And for the most part, the reality became more real. I can now easily see what is happening and why it
happened. Everything was so nice until we had a fight. Then another, and now it was every other day
story. It was a really hard time collecting everything together and act as nothing happened after every
single of those. Everything was plunging. I started imagining the end of something that I did not
imagine to happen in the first place.&lt;/p&gt;
&lt;p&gt;But during all those times, there was a continual intuition that maybe there is something that we both
are missing. And that was maybe the root of all chaos. I never came to know that what it was neither did
you. But I do realize many mistakes I have been doing since we met.&lt;/p&gt;
&lt;p&gt;I want to thank you for not losing hope in me. We both always tried to reduce tension as much as we could.
And thank you for many other ineffable things happened because of you.&lt;/p&gt;
&lt;p&gt;As of now I can see things making sense. Every message, every talk now seems to make sense. I am more
deeply into this friendship if I was not ever before. The ecstasy of having you is other-worldly. I don't
know if I could ever adore a person this much but I adore this ravishing friendship. Only you or only
this friendship may mean nothing to me. But I am delighted to say that I have both and I have you.&lt;/p&gt;
&lt;p&gt;Now, what is all with The Interstellar Twilight. Why this name ? Let me explain it for you. &lt;strong&gt;Interstellar&lt;/strong&gt;
means between stars and &lt;strong&gt;Twilight&lt;/strong&gt; means the soft glow when the sun is below the horizon.
&lt;strong&gt;The Interstellar Twilight&lt;/strong&gt; means the glow between the stars or simply glow of a cluster of stars. A
single star shines but the glow is too low to be noticed against its brightness. But a lot stars together
gets a glow. So my friend we are such two stars and our friendship is that glow.&lt;/p&gt;
</content><category term="blog"></category><category term="interstellar"></category><category term="twilight"></category></entry></feed>
-783
View File
@@ -1,783 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Be My SpaceTime - development</title><link href="https://avinal.space/" rel="alternate"></link><link href="https://avinal.space/feeds/development.atom.xml" rel="self"></link><id>https://avinal.space/</id><updated>2022-03-07T22:47:00+05:30</updated><subtitle>눈치</subtitle><entry><title>Developing Minimal Tekton Server</title><link href="https://avinal.space/posts/development/lovely-dangerous-things-redhat.html" rel="alternate"></link><published>2022-02-27T20:47:00+05:30</published><updated>2022-03-07T22:47:00+05:30</updated><author><name>Avinal</name></author><id>tag:avinal.space,2022-02-27:/posts/development/lovely-dangerous-things-redhat.html</id><summary type="html">&lt;p class="first last"&gt;We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster.&lt;/p&gt;
</summary><content type="html">&lt;p style="border: 2px solid var(--pink);border-radius: 7px;" align=center&gt;This blog is a descreptive account of the development of Minimal Tekton Server. This is highly technical in nature, so please make sure that you have sufficient knowledge about Golang, Docker, Kubernetes and TektonCD. You can refer to my &lt;a href="https://avinal.space/posts/development/i-am-loving-it-redhat.html"&gt;previous blog&lt;/a&gt; to know about these topics.&lt;p&gt;&lt;p&gt;As mentioned in my last blog, we were given to implement an application named &lt;strong&gt;Minimal Tekton Server&lt;/strong&gt;. The problem statement reads:&lt;/p&gt;
&lt;blockquote class="epigraph"&gt;
We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster. The application will expose some fields of the Tekton Resources which the user will provide and then this application will create Tekton resources by talking to Tekton APIs available on the cluster to create the resources based on the user-provided fields.&lt;/blockquote&gt;
&lt;p&gt;There are three parts in this project for the application and two more parts for the CI/CD using TektonCD and Kubernetes/OpenShift. I will go through each part descriptively and try to explain what we did.&lt;/p&gt;
&lt;div class="section" id="the-architecture-of-mks"&gt;
&lt;h2&gt;The Architecture of MKS&lt;/h2&gt;
&lt;p&gt;The first task in the development of the Minimal Tekton Server was creating its architectural diagram. Our first diagram was trash compared to the final diagram. Yeah, we learned. I will be explaining our final(obviously) architectural diagram and try to make some sense out of band-aids and duct tapes.&lt;/p&gt;
&lt;img alt="The MKS Arhitecture" class="img-fluid my-3" src="/images/mks-architecture.png" /&gt;
&lt;p&gt;Let me start with explaining &lt;strong&gt;What are MKS Resources?&lt;/strong&gt;. I hope you know at least tidbits about Kubernetes and by the definition: &lt;em&gt;A resource is an endpoint in the Kubernetes API that stores a collection of API objects of a certain kind; for example, the built-in :code:`pods` resource contains a collection of Pod objects.&lt;/em&gt; But developers soon realized that these in-built resources were not enough for the ever-growing applications of Kubernetes. Here &lt;a class="reference external" href="https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/"&gt;custom resource&lt;/a&gt; comes into the picture. &lt;em&gt;A custom resource is an extension of the Kubernetes API that is not necessarily available in a default Kubernetes installation.&lt;/em&gt; To define a custom resource we use something called &lt;a class="reference external" href="https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/"&gt;Custom Resource Definition&lt;/a&gt;. So MKS Resources are such custom resources that correspond to the TektonCD custom resources.&lt;/p&gt;
&lt;img alt="A venus flytrap engulphing an insect." class="float-md-right ml-3" src="/images/venus-flytrap.gif" style="width: 250px;" /&gt;
&lt;p&gt;Let us now focus on the box containing &lt;code&gt;Controller&lt;/code&gt; and &lt;code&gt;API server&lt;/code&gt;. The controller can be said as a stimulus-response mechanism. Take the analogy of a Venus Flytrap plant. The trap is initially open. There are &lt;code&gt;trigger&lt;/code&gt; hairs on the inside of the trap. Once an insect is detected, there is a change of state and the trap closes in a blick on the eye. The controller works the same way. It listens for the change in the state of the MKS resources and immediately transfers the request to the Tekton API to reflect the change in the corresponding Tekton resources. The changes can be creation, deletion, or updating. The API server ensures that there is a working connection between our controller and the Tekton API.&lt;/p&gt;
&lt;p&gt;MKS Server also exposes APIs to introduce a change of state in the MKS resources. In technical terms these are called &lt;code&gt;verbs&lt;/code&gt;. There are five such verbs that we have exposed: &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, and &lt;code&gt;list&lt;/code&gt;. They can be utilized by a REST client, or in our case &lt;strong&gt;MKS CLI&lt;/strong&gt; to introduce desired change. The MKS command-line interface provides commands and subcommands to do the desired tasks.&lt;/p&gt;
&lt;p&gt;Whenever there is a change in the state, there is a logic running inside the controller to react on that and that also affects our database. We store four datapoints in our database: &lt;code&gt;created&lt;/code&gt;, &lt;code&gt;deleted&lt;/code&gt;, &lt;code&gt;completed&lt;/code&gt;, and &lt;code&gt;failed&lt;/code&gt;. They tell us about the current statistcs of our MKS resource using a single-page web app called &lt;strong&gt;MKS Dashboard&lt;/strong&gt; (or UI).&lt;/p&gt;
&lt;p&gt;This was about the architecture of the Minimal Tekton Server. Let us jump into more technical stuff.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="how-to-implement-a-crd-controller"&gt;
&lt;h2&gt;How to implement a CRD controller?&lt;/h2&gt;
&lt;p&gt;During this assignment, something that took the most time and effort was the implementation of a controller for our custom resources. This isn't very hard if you go by the rules and do the things according to the well-defined documents and blogs since this is a standard step in the implementation of any custom resource controller. But did we follow the rules? Hell no! But this time, let us go step-by-step.&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;The first step is to define a &lt;code&gt;CustomResourceDefinition&lt;/code&gt; for our custom resource. Let us define a CRD called &lt;code&gt;spacetime&lt;/code&gt;. To do this you can write a YAML file like below.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# file: spacetime-crd.yaml&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;apiextensions.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;CustomResourceDefinition&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="c1"&gt;# name must match the spec fields below, and be in the form: &amp;lt;plural&amp;gt;.&amp;lt;group&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;spacetimes.example.com&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="c1"&gt;# group name to use for REST API: /apis/&amp;lt;group&amp;gt;/&amp;lt;version&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;example.com&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="c1"&gt;# list of versions supported by this CustomResourceDefinition&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;versions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;v1alpha1&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# Each version can be enabled/disabled by Served flag.&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;served&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# One and only one version must be marked as the storage version.&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;true&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;openAPIV3Schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;object&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;object&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;string&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="c1"&gt;# either Namespaced or Cluster&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;Namespaced&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;names&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# plural name to be used in the URL: /apis/&amp;lt;group&amp;gt;/&amp;lt;version&amp;gt;/&amp;lt;plural&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;plural&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;spacetimes&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# singular name to be used as an alias on the CLI and for display&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;singular&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;spacetime&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# kind is normally the CamelCased singular type. Your resource manifests use this.&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;SpaceTime&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# shortNames allow shorter string to match your resource on the CLI&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;shortNames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;st&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can learn more about the fields and options &lt;a class="reference external" href="https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/"&gt;here&lt;/a&gt;. The CRD that we defined above corresponds to the &lt;code&gt;CustomResource&lt;/code&gt; given below. Once you apply the above file you will be able to see the &lt;code&gt;spacetime&lt;/code&gt; custom resource on your Kubernetes/OpenShift cluster.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# file: spacetime-cr.yaml&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;spacetimes.example.com/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;SpaceTime&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;spacetime-cr&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Hello&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;from&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;space!&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Apply them using the following commands:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;kubectl apply -f spacetime-crd.yaml
kubectl apply -f spacetime-cr.yaml
&lt;/pre&gt;&lt;/div&gt;
&lt;ol class="arabic simple" start="2"&gt;
&lt;li&gt;Once we have defined our custom resources, we need to define the types that will correspond to this custom resource definition. This can be done using &lt;code&gt;k8s.io/apimachinery/pkg/apis/meta/v1&lt;/code&gt; package written in golang. Did I tell you that this is all in golang? Well, now you know. Create a package structure for a golang project and add the definition of the type as given below.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mkdir -p pkg/api/spacetime/v1alpha1
touch pkg/api/spacetime/v1alpha1/&lt;span class="o"&gt;{&lt;/span&gt;spacetime_types,register,doc&lt;span class="o"&gt;}&lt;/span&gt;.go pkg/api/spacetime/register.go
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Add the following content to the corresponding files.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;// file: /pkg/api/spacetime/v1alpha1/spacetime_types.go&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;v1alpha1&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;metav1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;k8s.io/apimachinery/pkg/apis/meta/v1&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SpaceTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;metav1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TypeMeta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;quot;,inline&amp;quot;`&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;metav1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ObjectMeta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;quot;metadata,omitempty&amp;quot;`&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Spec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SpaceTimeSpec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;quot;spec&amp;quot;`&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SpaceTimeSpec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;quot;message&amp;quot;`&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SpaceTimeList&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;metav1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TypeMeta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;quot;,inline&amp;quot;`&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;metav1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ListMeta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;quot;metadata&amp;quot;`&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Items&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="nx"&gt;SpaceTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;quot;items&amp;quot;`&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;To be Continued&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
</content><category term="development"></category><category term="kubernetes"></category><category term="redhat"></category><category term="docker"></category><category term="golang"></category><category term="tekton"></category><category term="openshift"></category><category term="intern"></category></entry><entry><title>My internship at Red Hat</title><link href="https://avinal.space/posts/development/i-am-loving-it-redhat.html" rel="alternate"></link><published>2022-02-25T20:47:00+05:30</published><updated>2022-02-25T20:47:00+05:30</updated><author><name>Avinal</name></author><id>tag:avinal.space,2022-02-25:/posts/development/i-am-loving-it-redhat.html</id><summary type="html">&lt;p class="first last"&gt;I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;I have been contributing to open source for the last 3 years and Red Hat was one of the companies that I was very fond of. I must say all my contributions and consistency paid off, and I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project.&lt;/p&gt;
&lt;p&gt;On the first day of my internship, I met two amazing teammates &lt;a class="reference external" href="https://github.com/"&gt;Saytam&lt;/a&gt; and &lt;a class="reference external" href="https://github.com/"&gt;Utkarsh&lt;/a&gt;. We were also introduced to a Senior Software Engineer &lt;a class="reference external" href="https://github.com"&gt;Piyush Garg&lt;/a&gt; who later mentored us. The initial few meetings were more on the introduction and what to learn topics. Before I jump into more details let me explain first what does a &lt;strong&gt;DevTools Developer/Engineer&lt;/strong&gt; do?&lt;/p&gt;
&lt;div class="section" id="what-does-a-devtools-developer-engineer-do"&gt;
&lt;h2&gt;What does a DevTools Developer/Engineer do?&lt;/h2&gt;
&lt;p&gt;From &lt;a class="reference external" href="https://developer.mozilla.org/en-US/docs/Glossary/Developer_Tools"&gt;MDN Web Docs&lt;/a&gt; &lt;strong&gt;Developer tools (or &amp;quot;development tools&amp;quot; or short &amp;quot;DevTools&amp;quot;) are programs that allow a developer to create, test, and debug software.&lt;/strong&gt; At RedHat, a lot of open source developer tools of industry standards are developed. There are many, OpenShift, Tekton, CodeReady containers, and many more.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="learning-on-the-golang-logo"&gt;
&lt;h2&gt;Learning on the &lt;img alt="golang_logo" class="align-top" src="/images/golang.png" style="width: 2.5em;" /&gt;&lt;/h2&gt;
&lt;p&gt;There was a lot of learning and still a lot to learn. In a meeting with my manager Pradeepto Bhattacharya, I was told that I will be working on TektonCD or OpenShift Pipelines, and both of them require a sound knowledge of Golang, CI/CD, Containers, Docker, and Kubernetes. I was familiar with CI/CD, containers, and Docker but never used Golang and Kubernetes. We were provided plenty of good resources and my teammates also helped with many awesome resources. I am listing all the resources with their category.&lt;/p&gt;
&lt;div class="section" id="golang-1"&gt;
&lt;h3&gt;&lt;a class="reference external" href="https://go.dev/"&gt;Golang&lt;/a&gt;&lt;/h3&gt;
&lt;img alt="Gopher on the ladder" class="float-md-right rounded ml-3" src="/images/goladder.png" style="height: 20em;" /&gt;
&lt;p&gt;One of Golangs biggest advantages is that it offers the clarity and ease of use that other languages lack. Golangs advantages make it easy for new programmers to quickly understand the language and for seasoned veterans to easily read each others code.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://go.dev/doc/"&gt;Official Go Documentation&lt;/a&gt; - &lt;em&gt;Start from here&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://gobyexample.com/"&gt;Go by Example&lt;/a&gt; - &lt;em&gt;bite-size examples for most of the golang features&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://golangbot.com/learn-golang-series/"&gt;Golang tutorial series - GOLANGBOT.COM&lt;/a&gt; - &lt;em&gt;in-depth tutorial of golang&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://go.dev/doc/effective_go"&gt;Effective Go&lt;/a&gt; - &lt;em&gt;writing good golang programs&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://go.dev/play/"&gt;The Go Playground&lt;/a&gt; - &lt;em&gt;official online golang ide&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://www.gopl.io/"&gt;The Go Programming Language - Book&lt;/a&gt; &lt;em&gt;for learning advanced level golang&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://youtu.be/yyUHQIec83I"&gt;Golang Tutorial for Beginners | Full Go Course - TechWorld with Nana&lt;/a&gt; &lt;em&gt;if you prefer video tutorials, I don't :)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="docker-1"&gt;
&lt;h3&gt;&lt;a class="reference external" href="https://www.docker.com/"&gt;Docker&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Docker takes away repetitive, mundane configuration tasks and is used throughout the development lifecycle for fast, easy, and portable application development - desktop and cloud. Dockers comprehensive end-to-end platform includes UIs, CLIs, APIs, and security that are engineered to work together across the entire application delivery lifecycle.&lt;/p&gt;
&lt;img alt="The Docker Architecture" class="float-md-right img-fluid my-3" src="/images/docker-architecture.png" /&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://www.katacoda.com/courses/docker"&gt;Docker and Containers - Katacoda&lt;/a&gt; &lt;em&gt;interactive lessons on docker and containers&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://docker-curriculum.com/"&gt;Docker for beginners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://youtu.be/3c-iBn73dDE"&gt;Docker Tutorial for Beginners | TechWorld with Nana&lt;/a&gt; &lt;em&gt;video tutorial&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="kubernetes-1"&gt;
&lt;h3&gt;&lt;a class="reference external" href="https://kubernetes.io/"&gt;Kubernetes&lt;/a&gt;&lt;/h3&gt;
&lt;img alt="Kubernetes tech" class="float-md-left border mr-3" src="/images/kubernetes-meme.png" style="width: 200px;" /&gt;
&lt;p&gt;&lt;strong&gt;Kubernetes&lt;/strong&gt; is the Greek word for a ships captain. We get the words Cybernetic and Gubernatorial from it. The Kubernetes project focuses on building a robust platform for running thousands of containers in production.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://www.katacoda.com/courses/kubernetes"&gt;Learn Kubernetes - Katacoda&lt;/a&gt; &lt;em&gt;interactive lessons with kubernetes&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://kubebyexample.com/"&gt;kube by example&lt;/a&gt; &lt;em&gt;learn by doing&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://youtu.be/X48VuDVv0do"&gt;Kubernetes Tutorial for Beginners&lt;/a&gt; &lt;em&gt;video tutorial&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="not-so-minimal-tekton-server"&gt;
&lt;h2&gt;&lt;em&gt;Not so Minimal&lt;/em&gt; Tekton Server&lt;/h2&gt;
&lt;p&gt;In late January, we were asked to implement our learnings and deep dive into Kubernetes and TektonCD through an assignment project. Soon we realized that whatever we were learning so far was not even close to what we were going to implement. We were given a document containing the requirements of the applications we were supposed to create along with all the documentation and architectural diagrams.&lt;/p&gt;
&lt;p&gt;The application was called &lt;strong&gt;Minimal Tekton Server&lt;/strong&gt;. It is a set of three different applications, i.e a server, a CLI, and a dashboard. In short, this application is supposed to &lt;em&gt;listen to custom resources being created and then transfer the request to Tekton API to create the corresponding resource on the OpenShift/Kubernetes cluster.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So are you interested in how it went? Please follow up with my &lt;a class="reference external" href="https://avinal.space/posts/development/lovely-dangerous-things-redhat.html"&gt;next blog&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
</content><category term="development"></category><category term="kubernetes"></category><category term="redhat"></category><category term="docker"></category><category term="golang"></category><category term="tekton"></category><category term="openshift"></category><category term="intern"></category></entry><entry><title>reStructuredText in GitHub</title><link href="https://avinal.space/posts/development/rst-guide.html" rel="alternate"></link><published>2021-02-14T22:47:00+05:30</published><updated>2021-02-14T22:47:00+05:30</updated><author><name>Avinal</name></author><id>tag:avinal.space,2021-02-14:/posts/development/rst-guide.html</id><summary type="html">&lt;p class="first last"&gt;reStructuredText syntax&lt;/p&gt;
</summary><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;Headers&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gh"&gt;Top Title&lt;/span&gt;
&lt;span class="gh"&gt;=========&lt;/span&gt;
&lt;span class="gh"&gt;Sub Title&lt;/span&gt;
&lt;span class="gh"&gt;---------&lt;/span&gt;
&lt;span class="gh"&gt;Sub Sub Title&lt;/span&gt;
&lt;span class="gh"&gt;^^^^^^^^^^^^^&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Images&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;Direct&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt; &lt;span class="ow"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt; image-path-or-url
&lt;span class="nc"&gt;:align:&lt;/span&gt; center
&lt;span class="nc"&gt;:target:&lt;/span&gt; link-to-go-when-image-is-clicked
&lt;span class="nc"&gt;:alt:&lt;/span&gt; alternative-text-if-any
&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Indirect&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt; &lt;span class="nt"&gt;|substitution|&lt;/span&gt; &lt;span class="ow"&gt;image&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt; image-path-or-url
&lt;span class="nc"&gt;:target:&lt;/span&gt; link-to-go-when-image-is-clicked
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can use &lt;code&gt;|substitution|&lt;/code&gt; where you want to put your image.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Links&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="s"&gt;`Link Text &lt;/span&gt;&lt;span class="si"&gt;&amp;lt;link-itself&amp;gt;&lt;/span&gt;&lt;span class="s"&gt;`__&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Lists&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="m"&gt;-&lt;/span&gt; item 1
&lt;span class="m"&gt;-&lt;/span&gt; item 2
&lt;span class="m"&gt;*&lt;/span&gt; item 1
&lt;span class="m"&gt;*&lt;/span&gt; itme 2
&lt;span class="m"&gt;#.&lt;/span&gt; item 1
&lt;span class="m"&gt;#.&lt;/span&gt; item 2
&lt;span class="m"&gt;1.&lt;/span&gt; item 1
&lt;span class="m"&gt;2.&lt;/span&gt; item 2
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;First two lists are unordered next two are ordered.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Code&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;Inline&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="na"&gt;:code:&lt;/span&gt;&lt;span class="nv"&gt;`your-code`&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Code block&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt; &lt;span class="ow"&gt;code-block&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt; &lt;span class="k"&gt;language(optional)&lt;/span&gt;
&lt;span class="s"&gt; Your code&lt;/span&gt;
&lt;span class="s"&gt; in multiple lines. You may enable line numbers too.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Tables&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;+----------------+----------------+
&lt;span class="o"&gt;|&lt;/span&gt; Header Cell | Header Cell |
+================+================+
&lt;span class="o"&gt;|&lt;/span&gt; Data cell | Data Cell |
+----------------+----------------+
&lt;span class="o"&gt;|&lt;/span&gt; Header Cell | Header Cell |
+----------------+----------------+
&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Raw HTML block&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt; &lt;span class="ow"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt; html
&amp;lt;put&amp;gt;
your html code here
&amp;lt;/put&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Notes, warnings&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt; &lt;span class="ow"&gt;note&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;
Put your note here.
&lt;span class="p"&gt;..&lt;/span&gt; &lt;span class="ow"&gt;warning&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;
Put your warning here.
&lt;span class="p"&gt;..&lt;/span&gt; &lt;span class="ow"&gt;important&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;
Put instructions here.
&lt;span class="p"&gt;..&lt;/span&gt; &lt;span class="ow"&gt;admonition&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt; custom-text
Custom description here.
&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These all are supported by GitHub very well. For more exhautive list specific to Sphinx see &lt;a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html"&gt;this&lt;/a&gt; link.&lt;/p&gt;
&lt;div class="section" id="tips"&gt;
&lt;h2&gt;Tips&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;There must be a blank line before and after any directive. Such as after title or code block, tables etc.&lt;/li&gt;
&lt;li&gt;The options and content of a directives must be 1 tab indented to the directives.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><category term="development"></category><category term="rst"></category><category term="github"></category></entry><entry><title>How I implemented WakaTime embeddable Coding Graph GHA?</title><link href="https://avinal.space/posts/development/wakatime-readme.html" rel="alternate"></link><published>2021-02-02T21:47:00+05:30</published><updated>2021-02-02T21:47:00+05:30</updated><author><name>Avinal</name></author><id>tag:avinal.space,2021-02-02:/posts/development/wakatime-readme.html</id><summary type="html">&lt;p class="first last"&gt;f you use WakaTime to track your coding activity. You can add that to your README as a bar graph or embed it in your blog/portfolio. Just add this action to any of your repositories and there you have it.&lt;/p&gt;
</summary><content type="html">&lt;a href="https://github.com/avinal/Profile-Readme-WakaTime"&gt;&lt;img src="https://raw.githubusercontent.com/avinal/Profile-Readme-WakaTime/b281d074ee75f9626b39d10e2e518c6a297208a3/waka.png" class="img-fluid"&gt;&lt;/a&gt;&lt;div class="section" id="implementation-details"&gt;
&lt;h2&gt;Implementation Details&lt;/h2&gt;
&lt;p&gt;This GitHub Action is divided into three parts. I didn't want to use Docker but it seems it doesn't work well without it. Let dive a little into technical details. Three parts are as below.&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py"&gt;main.py&lt;/a&gt; python script. This script contains many procedures.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;&lt;a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L52"&gt;Getting JSON data file via WakaTime API&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_stats&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data_list&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;This function parses the JSON file received and scraps out the useful data as a list of lists. Data scraped are language list, time spent on each language, percentage of the time, start date, and end date. For this action, I have limited the number of languages to 5 however it should be very easy to increase that number.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;&lt;a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L13"&gt;Setting the Timeline&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;this_week&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dates&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Coding Activity During: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;week_start&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s1"&gt; %B, %Y&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; to &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;week_end&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s1"&gt; %B, %Y&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;The start date and end date scraped in the last function are used here to set the timeline. Because date in JSON is provided in UTC as below :&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="err"&gt;da&lt;/span&gt;&lt;span class="kc"&gt;te&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;YYYY-MM-DDTHH:MM:SSZ&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;I striped it to simple dates only. We can set them manually by taking the current time from the system. But that method is flawed. But this method ensures that JSON was received latest and the request was successful. Any anomaly will point to a failure in request.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;&lt;a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L21"&gt;Creating a bar graph&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;make_graph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;savefig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;Lastly, it is time to generate the graph and save them as an image. This function uses the data scraped in the first step. Creating a bar graph using &lt;cite&gt;matplotlib&lt;/cite&gt; is easy. Decorating was a bit difficult. I wanted this graph to merge with GitHub's look so I chose to color the bar as GitHub colors the languages. That data is stored as &lt;cite&gt;colors.json&lt;/cite&gt;. Many of the languages have slightly different spelling in GitHub as compared to WakaTime. So some languages are shown in default color. That can be improved if we notice that language and change its color manually. Lastly, the graph is saved both as SVG and PNG. SVGs are better to put on a responsive page.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol class="arabic" start="2"&gt;
&lt;li&gt;&lt;p class="first"&gt;&lt;a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/entrypoint.sh"&gt;entrypoint.py&lt;/a&gt; shell script. This shell script clones the repository copies the image and pushes changes to the master. There were several problems. First of all authentication. This was solved by using a remote repository address using GitHub Token. And it seems that GitHub doesn't allow to commit without a username and email. So I used &lt;strong&gt;github-actions&lt;/strong&gt; bot email.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;remote_repo-&lt;span class="s2"&gt;&amp;quot;https://&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GITHUB_ACTOR&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;INPUT_GITHUB_TOKEN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;@github.com/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GITHUB_REPOSITORY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.git&amp;quot;&lt;/span&gt;
git config user.email &lt;span class="s2"&gt;&amp;quot;41898282+github-actions[bot]@users.noreply.github.com&amp;quot;&lt;/span&gt;
git config user.name &lt;span class="s2"&gt;&amp;quot;GitHub Actions&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;41898282&lt;/code&gt; is the id assigned to the github-actions bot. Don't ask where I found them 🙂.&lt;/p&gt;
&lt;p&gt;Another problem was to separate repository name from combined &lt;em&gt;username/repository-name&lt;/em&gt; provided by &lt;cite&gt;${GITHUB_REPOSITORY}&lt;/cite&gt;. GitHub doesn't provides a direct way to get just the repo name. We used &lt;em&gt;Internal Field Separator&lt;/em&gt;. It returns an array and works similar to &lt;code&gt;split()&lt;/code&gt; command in Python and Java.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# &amp;#39;/&amp;#39; is the seperator&lt;/span&gt;
IFS-&lt;span class="s1"&gt;&amp;#39;/&amp;#39;&lt;/span&gt; &lt;span class="nb"&gt;read&lt;/span&gt; -ra reponame &lt;span class="o"&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GITHUB_REPOSITORY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="c1"&gt;# returned {username, repository}&lt;/span&gt;
repository-&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;reponame&lt;/span&gt;&lt;span class="p"&gt;[1]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;After that, all other commands are pretty straight. Commit the added files and push them.&lt;/p&gt;
&lt;ol class="arabic simple" start="3"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/Dockerfile"&gt;Dockerfile&lt;/a&gt; &lt;strong&gt;IMPORTANT&lt;/strong&gt; It took a lot of time to reach this state 🥱. This is where all the magic happens. I am running &lt;cite&gt;ubuntu:latest&lt;/cite&gt; inside the container. I first update the distribution. Then install the required python packages. Lastly, I invoke the python script and shell script.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There was an almost impossible problem, I searched hundreds of posts that &lt;em&gt;how can I access the generated files inside Docker container&lt;/em&gt;, but no luck. But at last, I found a workaround(obviously otherwise you wouldn't be reading this by now 🤣) each command is run in a separate virtual sub-container. As the command ends its output is also lost but not when you club multiple commands together. At least not until every command is finished. The generated files are available to the next clubbed process. I did that by combining the python script run and shell script run.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;python3 /main.py &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; /entrypoint.sh
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This part is the smallest yet took the most time and tries while developing this action.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="how-to-use-this-github-actions"&gt;
&lt;h2&gt;How to use this GitHub Actions?&lt;/h2&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p class="first"&gt;First get your WakaTime API Key. You can get it from your [WakaTime](&lt;a class="reference external" href="https://wakatime.com"&gt;https://wakatime.com&lt;/a&gt;) account settings.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Save WakaTime API Key to Repository Secret. Find that by clicking the Settings tab. Keep the name of the secret as &lt;strong&gt;WAKATIME_API_KEY&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Add the following line in your README.md of your repo.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src-&lt;/span&gt;&lt;span class="err"&gt;&amp;quot;&lt;/span&gt;&lt;span class="na"&gt;https:&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="na"&gt;github&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt;&lt;span class="err"&gt;/&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;/&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;repository-name&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;/blob/&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;branch-name&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;/images/stat.svg&amp;quot; alt-&amp;quot;Alternative Text&amp;quot;/&amp;gt;
Example: &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src-&lt;/span&gt;&lt;span class="err"&gt;&amp;quot;&lt;/span&gt;&lt;span class="na"&gt;https:&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="na"&gt;github&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;avinal&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;avinal&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;blob&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;main&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;images&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;stat&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;svg&lt;/span&gt;&lt;span class="err"&gt;&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;alt-&lt;/span&gt;&lt;span class="err"&gt;&amp;quot;&lt;/span&gt;&lt;span class="na"&gt;Avinal&lt;/span&gt; &lt;span class="na"&gt;WakaTime&lt;/span&gt; &lt;span class="na"&gt;Activity&lt;/span&gt;&lt;span class="err"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
You can use this method to embed in web pages too. &lt;strong&gt;Do not use the markdown method of inserting images. It does not work sometimes.&lt;/strong&gt;&lt;/blockquote&gt;
&lt;ol class="arabic" start="4"&gt;
&lt;li&gt;&lt;p class="first"&gt;Click the &lt;strong&gt;Action&lt;/strong&gt; tab and &lt;strong&gt;choose to set up a workflow yourself&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Copy the following code into the opened file, you can search for &lt;strong&gt;WakaTime Stat&lt;/strong&gt; in the marketplace tab for assistance.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;WakaTime status update&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# Runs at 12 am &amp;#39;0 0 * * *&amp;#39; UTC&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cron&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;1&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;update-readme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;Update the WakaTime Stat&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runs-on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;ubuntu-latest&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# Use avinal/Profile-Readme-WakaTime@&amp;lt;latest-release-tag&amp;gt; for latest stable release&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# Do not change the line below except the word master with tag number maybe&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# If you have forked this project you can use &amp;lt;username&amp;gt;/Profile-Readme-WakaTime@master instead&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;avinal/Profile-Readme-WakaTime@master&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# WakaTime API key stored in secrets, do not directly paste it here&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;WAKATIME_API_KEY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;${{ secrets.WAKATIME_API_KEY }}&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# Automatic github token&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;${{ github.token }}&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# Branch - newer GitHub repositories have &amp;quot;main&amp;quot; as default branch, change to main in that case, default is master&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;BRANCH&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;master&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# Manual Commit messages - write your own messages here&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;COMMIT_MSG&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Automated&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Coding&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Activity&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Update&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;:alien:&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Please wait till 12 AM UTC to run this workflow automatically. Or you can force run it by going to the Actions tab. Or you can add the following lines under &lt;cite&gt;on:&lt;/cite&gt; to run with every push. Search for 12 AM UTC to find the equivalent time in your time zone.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;push&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;branches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;master&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;]&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cron&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;1&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class="section" id="my-coding-activity"&gt;
&lt;h2&gt;My Coding Activity&lt;/h2&gt;
&lt;img class="img-fluid" src="https://raw.githubusercontent.com/avinal/avinal/main/images/stat.svg"&gt;&lt;/div&gt;
</content><category term="development"></category><category term="wakatime"></category><category term="github-action"></category><category term="coding"></category></entry><entry><title>How I Created This Blog?</title><link href="https://avinal.space/posts/development/twilight-blog.html" rel="alternate"></link><published>2021-01-26T16:47:00+05:30</published><updated>2021-01-26T16:47:00+05:30</updated><author><name>Avinal</name></author><id>tag:avinal.space,2021-01-26:/posts/development/twilight-blog.html</id><summary type="html">&lt;p class="first last"&gt;As you would have guessed by now, this blog is created using one such awesome SSG named &lt;strong&gt;Pelican&lt;/strong&gt;. Pelican is simple, customizable and offers lots of themes and plugins. Pelican is python based SSG and is available through &lt;tt class="docutils literal"&gt;pip&lt;/tt&gt;.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;span class="html-raw"&gt;&lt;div class="alert alert-info" role="alert"&gt;This article may not be for you if you are a web developer. You already got better options. 😉&lt;/div&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;There are lots of ways to create a personal website or a blog. You can design your own user interface and write the backend code. But not everyone is a web developer. And here comes &lt;abbr title="Static Site Generator"&gt;SSGs&lt;/abbr&gt; to the rescue. &lt;strong&gt;Static Site Generators&lt;/strong&gt; are little more than just website generators. In general, if you are looking for a simple blog, its better to use SSG than writing a lot of html and css. They are simple and elegant. Easy to maintain and you can add lots of customizations to your site without breaking or bloating your blog. There are lots of SSGs, &lt;a class="reference external" href="https://jekyllrb.com/"&gt;Jekyll&lt;/a&gt;, &lt;a class="reference external" href="https://blog.getpelican.com/"&gt;Pelican&lt;/a&gt; and more complex ones like &lt;a class="reference external" href="https://www.gatsbyjs.com/"&gt;Gatsby&lt;/a&gt;, &lt;a class="reference external" href="https://gohugo.io/"&gt;Hugo&lt;/a&gt; .&lt;/p&gt;
&lt;p&gt;As you would have guessed by now, this blog is created using one such awesome SSG named &lt;strong&gt;Pelican&lt;/strong&gt;. Pelican is simple, customizable and offers lots of &lt;a class="reference external" href="http://www.pelicanthemes.com/"&gt;themes&lt;/a&gt; and &lt;a class="reference external" href="https://github.com/getpelican/pelican-plugins"&gt;plugins&lt;/a&gt;. Pelican is python based SSG and is available through &lt;code&gt;pip&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# for reStructuredText only (recommended)&lt;/span&gt;
python -m pip install pelican
&lt;span class="c1"&gt;# for markdown and reStructuredText both&lt;/span&gt;
python -m pip install &lt;span class="s2"&gt;&amp;quot;pelican[markdown]&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can start a pelican project by typing following command. It will create a basic template and build configurations.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pelican-quickstart
&lt;span class="c1"&gt;# output&lt;/span&gt;
yourproject/
├── content &lt;span class="c1"&gt;# Put your content here&lt;/span&gt;
│ └── &lt;span class="o"&gt;(&lt;/span&gt;pages&lt;span class="o"&gt;)&lt;/span&gt;
├── output &lt;span class="c1"&gt;# Output files&lt;/span&gt;
├── tasks.py
├── Makefile &lt;span class="c1"&gt;# Makefile to run build and publish command&lt;/span&gt;
├── pelicanconf.py &lt;span class="c1"&gt;# Main settings file&lt;/span&gt;
└── publishconf.py &lt;span class="c1"&gt;# Settings to use when ready to publish&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Next step is to choose themes. As I said earlier there are lots of &lt;a class="reference external" href="http://www.pelicanthemes.com/"&gt;themes&lt;/a&gt; . And it is easy to create your own theme. Check &lt;a class="reference external" href="https://docs.getpelican.com/en/latest/themes.html"&gt;here&lt;/a&gt; to create your own theme. My choice of theme was &lt;a class="reference external" href="https://nairobilug.github.io/pelican-alchemy/"&gt;pelican-alchemy&lt;/a&gt; . This is a simple and great theme. Installing and removing themes in pelican is very easy.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# list all installed themes&lt;/span&gt;
pelican-themes -l
&lt;span class="c1"&gt;# output&lt;/span&gt;
simple
alchemy
notmyidea
&lt;span class="c1"&gt;# install new theme&lt;/span&gt;
pelican-themes -i theme-path
&lt;span class="c1"&gt;# remove a theme&lt;/span&gt;
pelican-themes -r theme-name
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To use a particular theme, set the &lt;code&gt;THEME&lt;/code&gt; variable in the &lt;strong&gt;pelicanconf.py&lt;/strong&gt; file.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;THEME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;alchemy&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can also use a theme that is not installed if you have all the required theme files. Just set this variable to its path.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;THEME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;path-to-theme-directory&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Various themes will have different feature, choose according to your need, or you can always add a feature through plugin. The next step is to build and check your blog. Pelican got it all set up.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# build your website&lt;/span&gt;
make html
&lt;span class="c1"&gt;# output&lt;/span&gt;
&lt;span class="s2"&gt;&amp;quot;pelican&amp;quot;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/mnt/z/my_git/avinal.github.io/content&amp;quot;&lt;/span&gt; -o &lt;span class="s2"&gt;&amp;quot;/mnt/z/my_git/avinal.github.io/output&amp;quot;&lt;/span&gt; -s &lt;span class="s2"&gt;&amp;quot;/mnt/z/my_git/avinal.github.io/pelicanconf.py&amp;quot;&lt;/span&gt;
Done: Processed &lt;span class="m"&gt;6&lt;/span&gt; articles, &lt;span class="m"&gt;0&lt;/span&gt; drafts, &lt;span class="m"&gt;1&lt;/span&gt; page, &lt;span class="m"&gt;0&lt;/span&gt; hidden pages and &lt;span class="m"&gt;0&lt;/span&gt; draft pages &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;.43 seconds.
&lt;span class="c1"&gt;# build and test/serve on localhost&lt;/span&gt;
make serve
&lt;span class="c1"&gt;# output&lt;/span&gt;
&lt;span class="s2"&gt;&amp;quot;pelican&amp;quot;&lt;/span&gt; -l &lt;span class="s2"&gt;&amp;quot;/mnt/z/my_git/avinal.github.io/content&amp;quot;&lt;/span&gt; -o &lt;span class="s2"&gt;&amp;quot;/mnt/z/my_git/avinal.github.io/output&amp;quot;&lt;/span&gt; -s &lt;span class="s2"&gt;&amp;quot;/mnt/z/my_git/avinal.github.io/pelicanconf.py&amp;quot;&lt;/span&gt;
Serving site at: &lt;span class="m"&gt;127&lt;/span&gt;.0.0.1:8000 - Tap CTRL-C to stop
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now open your browser and open &lt;a class="reference external" href="127.0.0.1:8000"&gt;127.0.0.1:8000&lt;/a&gt; or &lt;a class="reference external" href="localhost:8000"&gt;localhost:8000&lt;/a&gt;. You should be able to see your new blog. Stop local server using &lt;code&gt;CTRL+C&lt;/code&gt;. Next step is to publish it to github pages. Pelican has tools for this too. But wait we can do something more interesting here. Why not let GitHub take care of both building and publishing? Just push this project to a GitHub repository and set up GitHub pages. See &lt;a class="reference external" href="https://pages.github.com/"&gt;this&lt;/a&gt; help for instructions on that. Before pushing to GitHub add this little script to your project.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#! /bin/bash&lt;/span&gt;
&lt;span class="c1"&gt;## file: publi.sh&lt;/span&gt;
&lt;span class="c1"&gt;# install tools&lt;/span&gt;
sudo apt-get install -y git make python3 python3-pip python3-setuptools python3-wheel
&lt;span class="c1"&gt;# setup github config&lt;/span&gt;
git config user.email &lt;span class="s2"&gt;&amp;quot;your-email&amp;quot;&lt;/span&gt;
git config user.name &lt;span class="s2"&gt;&amp;quot;your-username&amp;quot;&lt;/span&gt;
&lt;span class="c1"&gt;# install dependencies&lt;/span&gt;
sudo pip3 install -r requirements.txt
&lt;span class="c1"&gt;# pelican commands - install theme put your theme in themes directory&lt;/span&gt;
pelican-themes --install themes/theme-name
&lt;span class="c1"&gt;# publish to github pages&lt;/span&gt;
ghp-import -m &lt;span class="s2"&gt;&amp;quot;Generate Pelican site&amp;quot;&lt;/span&gt; -b gh-pages output
git push -f origin gh-pages
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now once your project is on GitHub, go to the &lt;strong&gt;Actions&lt;/strong&gt; tab and click on &lt;em&gt;set up a workflow yourself&lt;/em&gt; and paste the following code into the file and commit it.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# file: publish.yml&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;Publish Blog&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;push&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;branches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;main&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;]&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pull_request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;branches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;main&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;]&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runs-on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;ubuntu-latest&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;actions/checkout@v2&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;set up permissions&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;chmod +x publi.sh&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;Run a multi-line script&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;./publi.sh&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you have done everything correctly then go to &lt;em&gt;https://username.github.io&lt;/em&gt; and you should see your blog. From now on whenever you want to add an article, just write it, test locally and push. Yay your blog is ready.&lt;/p&gt;
&lt;p&gt;&lt;span class="html-raw"&gt;&lt;h2 style=font-family:Exodar;font-weight:lighter;"&gt;But My Blog is Special 🥰&lt;/h2&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;My blog looks different, that is because I customized this theme a lot, especially headers, footers, and link appearance. And sorry I won't be publish my theme any time sooner. But I am listing down all the resources I have used for finally getting this result. You can always get my help by sending me a &lt;span class="html-raw"&gt;&lt;a href="mailto:avinal.xlvii@gmail.com" class="fa fa-envelope" style="text-decoration: none;"&gt;&lt;/a&gt;&lt;/span&gt; or starting a discussion on &lt;span class="html-raw"&gt;&lt;a href="https://github.com/avinal/avinal/discussions/2" class="fab fa-github" style="text-decoration: none;"&gt;&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://blog.getpelican.com/"&gt;Pelican Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://docs.getpelican.com/en/latest/"&gt;Pelican Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="http://www.pelicanthemes.com/"&gt;Pelican Themes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/nairobilug/pelican-alchemy"&gt;Pelican Alchemy Theme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://codepen.io/saransh/pen/BKJun"&gt;Parallax Star background in CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://codepen.io/kowlor/pen/ZYYQoy"&gt;Solar System animation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="html-raw"&gt;&lt;a href="https://www.dafont.com/exodar.font" style="font-family: Exodar;font-weight: lighter;text-decoration: none;"&gt;EXODAR Font&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://fonts.google.com/specimen/Overpass+Mono"&gt;Overpass Mono&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://fontawesome.com/how-to-use/on-the-web/setup/hosting-font-awesome-yourself"&gt;Font Awesome&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class="html-raw"&gt;&lt;div class="alert alert-warning" role="alert"&gt;Some of the fonts I have used in my blog may not be available for commercial use. Please check if you intend to do so. Alternatively you may use fonts from this wonderful collection, &lt;a href="https://www.websiteplanet.com/blog/best-free-fonts/"&gt;70+ Best Free Fonts for Designers Free for Commercial Use in 2021&lt;/a&gt; &lt;i&gt;(Thanks Ritta Blens for this suggestion)&lt;/i&gt;&lt;/div&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="html-raw"&gt;&lt;p align=center&gt;Thanks!&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;
</content><category term="development"></category><category term="blog"></category><category term="pelican"></category><category term="ssg"></category></entry><entry><title>Move WSL 2 Safely to another Drive</title><link href="https://avinal.space/posts/development/wsl1.html" rel="alternate"></link><published>2020-12-31T19:07:00+05:30</published><updated>2020-12-31T19:07:00+05:30</updated><author><name>Avinal</name></author><id>tag:avinal.space,2020-12-31:/posts/development/wsl1.html</id><summary type="html">&lt;p class="first last"&gt;It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move
the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps.&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Open a PowerShell &lt;img alt="powershell" class="align-middle" src="/images/powershell.png" style="width: 5%;" /&gt; or Command Prompt &lt;img alt="command-line" class="align-middle" src="/images/command-line.png" style="width: 5%;" /&gt; with &lt;em&gt;Admin&lt;/em&gt; access. For this you can use &lt;img alt="WinKey" class="align-middle" src="/images/windows10.png" style="width: 5%;" /&gt; + X shortcut and select &lt;strong&gt;Windows PowerShell(Admin)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Check if the WSL 2 installation you are planning to move is is currently running/stopped.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:\&lt;/span&gt;&lt;span class="n"&gt;Users&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Avinal&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;wsl&lt;/span&gt; &lt;span class="n"&gt;-l&lt;/span&gt; &lt;span class="n"&gt;-v&lt;/span&gt;
&lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:\&lt;/span&gt;&lt;span class="n"&gt;Users&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Avinal&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;NAME&lt;/span&gt; &lt;span class="n"&gt;STATE&lt;/span&gt; &lt;span class="n"&gt;VERSION&lt;/span&gt;
&lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Ubuntu&lt;/span&gt; &lt;span class="n"&gt;Running&lt;/span&gt; &lt;span class="n"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;Kali&lt;/span&gt; &lt;span class="n"&gt;Stopped&lt;/span&gt; &lt;span class="n"&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;ol class="arabic simple" start="3"&gt;
&lt;li&gt;If its running then you must stop the particular WSL distribution. (&lt;em&gt;Ubuntu&lt;/em&gt; used as example)&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:\&lt;/span&gt;&lt;span class="n"&gt;Users&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Avinal&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;wsl&lt;/span&gt; &lt;span class="n"&gt;-t&lt;/span&gt; &lt;span class="n"&gt;Ubuntu&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;ol class="arabic simple" start="4"&gt;
&lt;li&gt;Export to some folder. (Here exporting &lt;em&gt;Ubuntu&lt;/em&gt; as &lt;em&gt;ubuntu-ex.tar&lt;/em&gt; to &lt;em&gt;Z:wsl2&lt;/em&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:\&lt;/span&gt;&lt;span class="n"&gt;Users&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Avinal&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;wsl&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-export&lt;/span&gt; &lt;span class="n"&gt;Ubuntu&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Z:\export\ubuntu-ex.tar&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;ol class="arabic simple" start="5"&gt;
&lt;li&gt;Unregister previous WSL installation&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:\&lt;/span&gt;&lt;span class="n"&gt;Users&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Avinal&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;wsl&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-unregister&lt;/span&gt; &lt;span class="n"&gt;Ubuntu&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;ol class="arabic simple" start="6"&gt;
&lt;li&gt;Create a new folder and import your WSL installation to that folder.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:\&lt;/span&gt;&lt;span class="n"&gt;Users&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Avinal&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;New-Item&lt;/span&gt; &lt;span class="n"&gt;-Path&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Z:\wsl2&amp;quot;&lt;/span&gt; &lt;span class="n"&gt;-ItemType&lt;/span&gt; &lt;span class="n"&gt;Directory&lt;/span&gt;
&lt;span class="n"&gt;Directory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;:\&lt;/span&gt;
&lt;span class="n"&gt;Mode&lt;/span&gt; &lt;span class="n"&gt;LastWriteTime&lt;/span&gt; &lt;span class="n"&gt;Length&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;
&lt;span class="p"&gt;----&lt;/span&gt; &lt;span class="p"&gt;-------------&lt;/span&gt; &lt;span class="p"&gt;------&lt;/span&gt; &lt;span class="p"&gt;----&lt;/span&gt;
&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;-----&lt;/span&gt; &lt;span class="n"&gt;31&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;12&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;2020&lt;/span&gt; &lt;span class="n"&gt;21&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;03&lt;/span&gt; &lt;span class="n"&gt;wsl2&lt;/span&gt;
&lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:\&lt;/span&gt;&lt;span class="n"&gt;Users&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Avinal&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;wsl&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-import&lt;/span&gt; &lt;span class="n"&gt;Ubuntu&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Z:\wsl2&amp;quot;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Z:\export\ubuntu-ex.tar&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;ol class="arabic simple" start="7"&gt;
&lt;li&gt;Check after import is complete&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:\&lt;/span&gt;&lt;span class="n"&gt;Users&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Avinal&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;wsl&lt;/span&gt; &lt;span class="n"&gt;-l&lt;/span&gt; &lt;span class="n"&gt;-v&lt;/span&gt;
&lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:\&lt;/span&gt;&lt;span class="n"&gt;Users&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Avinal&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;NAME&lt;/span&gt; &lt;span class="n"&gt;STATE&lt;/span&gt; &lt;span class="n"&gt;VERSION&lt;/span&gt;
&lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Ubuntu&lt;/span&gt; &lt;span class="n"&gt;Running&lt;/span&gt; &lt;span class="n"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;Kali&lt;/span&gt; &lt;span class="n"&gt;Stopped&lt;/span&gt; &lt;span class="n"&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;ol class="arabic simple" start="8"&gt;
&lt;li&gt;Mark one of your WSL distribution as &lt;em&gt;(default)&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:\&lt;/span&gt;&lt;span class="n"&gt;Users&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Avinal&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;wsl&lt;/span&gt; &lt;span class="n"&gt;-s&lt;/span&gt; &lt;span class="n"&gt;Ubuntu&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;ol class="arabic simple" start="9"&gt;
&lt;li&gt;After exporting your default user will be set as &lt;span class="html-raw"&gt;&lt;i style="color:red"&gt;root&lt;/i&gt;&lt;/span&gt; , to change it to your desired username, run following command&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:\&lt;/span&gt;&lt;span class="n"&gt;Users&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Avinal&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ubuntu&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-default-user&lt;/span&gt; &lt;span class="n"&gt;user_name&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;ol class="arabic simple" start="10"&gt;
&lt;li&gt;Finally run &lt;code&gt;wsl&lt;/code&gt; and you have successfully moved your WSL 2 installation to another drive.&lt;/li&gt;
&lt;/ol&gt;
</content><category term="development"></category><category term="wsl"></category><category term="wsl2"></category></entry><entry><title>Create the VLC User Documentation for one Mobile Port(Android)</title><link href="https://avinal.space/posts/development/vlc-gsod-report.html" rel="alternate"></link><published>2020-12-01T23:47:00+05:30</published><updated>2020-12-31T23:19:00+05:30</updated><author><name>Avinal</name></author><id>tag:avinal.space,2020-12-01:/posts/development/vlc-gsod-report.html</id><summary type="html">&lt;p class="first last"&gt;The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLCs wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization.&lt;/p&gt;
</summary><content type="html">&lt;div class="section" id="overview"&gt;
&lt;h2&gt;OVERVIEW&lt;/h2&gt;
&lt;p&gt;VideoLAN is a non-profit organization that develops software for playing video and other media formats. VLC media player (commonly known as just VLC) is a free and Open Source cross-platform multimedia player and framework that plays most multimedia files as well as DVDs, Audio CDs, VCDs, and various streaming protocols built by the VideoLAN organization and a team of volunteers. VLC for Android is a port of the VLC for Android OS.&lt;/p&gt;
&lt;p&gt;The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLCs wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization and an engaging and easy to follow for both technical and non-technical users. The original proposal can be found here.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="project-goals"&gt;
&lt;h2&gt;PROJECT GOALS&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Propose a new structure for documentation e.g. Chapter Separation, Sections etc&lt;/li&gt;
&lt;li&gt;Proper balance between technical and non-technical descriptions to serve all kinds of users.&lt;/li&gt;
&lt;li&gt;Adequate amount of screenshots in each section and other supporting media to make documentation more appealing.&lt;/li&gt;
&lt;li&gt;Optimized for all Screen Sizes. Especially for Mobile Devices.&lt;/li&gt;
&lt;li&gt;Ease of navigation&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="community-bonding"&gt;
&lt;h2&gt;COMMUNITY BONDING&lt;/h2&gt;
&lt;p&gt;This period was mostly utilized for collecting more information and many internal meetings to shape the projects and bonding with fellow writers, developers(mentors). I got to know more about the VLC organization and the project. We decided to create a skeleton of the project and then follow a Issue-Merge Request-Review-Merge system to keep the commit history clean and maintain the proper review of the work before it is merged.&lt;/p&gt;
&lt;p&gt;I initially proposed that the new documentation should also use the same tools(Sphinx and GitLab Pages) because if in future we want to merge all the documentation into a single one, it will be easier to migrate and will provide a consistency across all documentations. Later I got to know that this will be an independent project and may not be merged since it solves a lot of problems. I was already familiar with the tools so it took no time to get started.&lt;/p&gt;
&lt;p&gt;Nicolas Pomepuy, who is the lead developer of VLC for Android was assigned as my primary mentor and Simon Latapie as secondary mentor.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="documentation-development-phase"&gt;
&lt;h2&gt;DOCUMENTATION DEVELOPMENT PHASE&lt;/h2&gt;
&lt;p&gt;Initial Preparation
I first moved my existing demo documentation to an entirely new repository with only the skeleton at the suggestion of my mentor. It was necessary to keep the commit history clean. The skeleton contained the empty directories representing the chapter separation. I got to learn “how to properly develop a project and contribute to open source”. This was a major lesson that got me familiar with the Merge Request and Review system.&lt;/p&gt;
&lt;p&gt;The Development
The next part was to frame the actual documentation pages and push to the repository. Since there was a significant time-zone difference we agreed to discuss by creating issues and sometimes my emails. There was one meeting every fortnight to check the process and discuss further development and blockers. Nicolas was really helpful and patient, answering each of my big-small queries.&lt;/p&gt;
&lt;p&gt;Work Done&lt;/p&gt;
&lt;style&gt;
table,td,th {
border-collapse:collapse;
border: 1px solid #000000;
}
&lt;/style&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Documentation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://avinal.videolan.me/vlc-android-user/"&gt;VLC for Android User Documentation &lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Project Repository&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="https://code.videolan.org/avinal/vlc-android-user"&gt;Projects · Avinal Kumar / VLC for Android User Documentation&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Commits&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="https://code.videolan.org/avinal/vlc-android-user/-/commits/master"&gt;Commits · Avinal Kumar / VLC for Android User Documentation&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Issues/Discussions&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="https://code.videolan.org/avinal/vlc-android-user/-/issues"&gt;Issues · Avinal Kumar / VLC for Android User Documentation&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Merge Requests&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="https://code.videolan.org/avinal/vlc-android-user/-/merge_requests"&gt;Merge Requests · Avinal Kumar / VLC for Android User Documentation&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;p&gt;Since the Android port of VLC can be installed on Android Smartphones/Tablets, Android TVs, Amazon Fire Devices and Chromebooks too, a full documentation will cover these all devices. Although these are different form factors, the features provided on each of them is exactly the same and the same documentation can be used for all these devices. As of now only Smartphones/Tablets are covered. And later additional pages will be added to reference different features/User Interface. Regardless of this addition the current documentation can serve a major part for all these form factors.
Completed/Remaining&lt;/p&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chapters&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Sections&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Settings&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;ul&gt;
&lt;li&gt;General Settings
&lt;li&gt;Interface
&lt;li&gt;Video
&lt;li&gt;Subtitles
&lt;li&gt;Audio
&lt;li&gt;Casting
&lt;li&gt;Advanced
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ALL COMPLETED&lt;/strong&gt;
&lt;p&gt;
&lt;strong&gt;FOR ALL FORM FACTORS&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Video&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;ul&gt;
&lt;li&gt;Video Explorer
&lt;li&gt;Video Player
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;COMPLETED FOR SMARTPHONES/TABLETS&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audio&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;ul&gt;
&lt;li&gt;Audio Explorer
&lt;li&gt;Audio Player
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;COMPLETED FOR SMARTPHONES/TABLETS&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Browse&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;ul&gt;
&lt;li&gt;Explorer
&lt;li&gt;Local Network
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ONLY SMB IN LOCAL NETWORK COMPLETED&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Installation&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;ul&gt;
&lt;li&gt;Smartphones/Tablets
&lt;li&gt;Android TV
&lt;li&gt;Fire Devices
&lt;li&gt;Chromebooks
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;COMPLETED FOR SMARTPHONES/TABLETS&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;User Interface&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;ul&gt;
&lt;li&gt;Smartphones/Tablets
&lt;li&gt;Android TV
&lt;li&gt;Fire Devices
&lt;li&gt;Chromebooks
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;COMPLETED FOR SMARTPHONES/TABLETS&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Support&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;ul&gt;
&lt;li&gt;FAQs
&lt;li&gt;Help
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;IN PROGRESS&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Guidelines&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;ul&gt;
&lt;li&gt;Contribution Guideline
&lt;li&gt;Screenshot Guidelines
&lt;li&gt;READMEs
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;IN PROGRESS&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="section" id="challenges"&gt;
&lt;h2&gt;CHALLENGES&lt;/h2&gt;
&lt;p&gt;The major obstacle was to get screenshots for all form factors. Since screenshots were the major part of this documentation it was necessary to provide proper screenshots in each chapter and with every step. For Android TV and Smartphone this was solved by using emulators instead of actual devices, but to emulate the actual scenario in an emulator was sometimes very difficult.
There were many occasions where I was not able to gather the exact information about devices other than smartphones/tables. Since all form factors share a common pool of features, my mentor suggested that I focus on smartphones/tables. And to create issues mentioning missing parts so that it could be solved later.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="thanks"&gt;
&lt;h2&gt;THANKS&lt;/h2&gt;
&lt;p&gt;I want to thank my mentors for being supporting and helpful. I want to thank every person at VLC and Google who were involved in this whole process. Thanks and Congrats to my fellow writer Abhishek Pratap Singh. This was a great opportunity to learn and meet awesome people. I learned a lot about Sphinx, reStructured Text and many other things.&lt;/p&gt;
&lt;/div&gt;
</content><category term="development"></category><category term="vlc"></category><category term="gsod"></category><category term="gsod2020"></category></entry></feed>
-16
View File
@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Be My SpaceTime - prime</title><link href="https://avinal.space/" rel="alternate"></link><link href="https://avinal.space/feeds/prime.atom.xml" rel="self"></link><id>https://avinal.space/</id><updated>2021-01-09T22:29:00+05:30</updated><subtitle>눈치</subtitle><entry><title>Introduction to Prime Numbers</title><link href="https://avinal.space/posts/prime/prime1.html" rel="alternate"></link><published>2021-01-09T22:29:00+05:30</published><updated>2021-01-09T22:29:00+05:30</updated><author><name>Avinal</name></author><id>tag:avinal.space,2021-01-09:/posts/prime/prime1.html</id><summary type="html">&lt;p class="first last"&gt;A prime is a positive integer &lt;em&gt;p&lt;/em&gt; having exactly two positive divisors, namely &lt;em&gt;1&lt;/em&gt; and &lt;em&gt;p&lt;/em&gt;. An integer &lt;em&gt;n&lt;/em&gt; is composite if &lt;em&gt;n&lt;/em&gt; &amp;gt; &lt;em&gt;1&lt;/em&gt; and &lt;em&gt;n&lt;/em&gt; is not prime. (The number 1 is considered neither prime nor composite.)&lt;/p&gt;
</summary><content type="html">&lt;blockquote class="epigraph"&gt;
A prime is a positive integer &lt;em&gt;p&lt;/em&gt; having exactly two positive divisors, namely &lt;em&gt;1&lt;/em&gt; and &lt;em&gt;p&lt;/em&gt;. An integer &lt;em&gt;n&lt;/em&gt; is composite if &lt;em&gt;n&lt;/em&gt; &amp;gt; &lt;em&gt;1&lt;/em&gt; and &lt;em&gt;n&lt;/em&gt; is not prime. (The number 1 is considered neither prime nor composite.)&lt;/blockquote&gt;
&lt;p&gt;We can frame a brute force algorithm for checking primality of numbers using the above statement.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;is_prime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;factor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;factor&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;factor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
</content><category term="prime"></category><category term="prime"></category><category term="primenumbers"></category></entry></feed>
-689
View File
@@ -1,689 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Be My SpaceTime - report</title><link href="https://avinal.space/" rel="alternate"></link><link href="https://avinal.space/feeds/report.atom.xml" rel="self"></link><id>https://avinal.space/</id><updated>2021-08-19T23:07:00+05:30</updated><subtitle>눈치</subtitle><entry><title>Google Summer of Code 2021</title><link href="https://avinal.space/posts/report/final-evaluation.html" rel="alternate"></link><published>2021-08-19T23:07:00+05:30</published><updated>2021-08-19T23:07:00+05:30</updated><author><name>Avinal</name></author><id>tag:avinal.space,2021-08-19:/posts/report/final-evaluation.html</id><summary type="html">&lt;p class="first last"&gt;This is the final report of my Google Summer of Code 2021 at The FOSSology Project.&lt;/p&gt;
</summary><content type="html">&lt;style&gt;
.rd {color:red;font-weight:bold}
.gr{color:green;font-weight:bold}
.or{color:orange;font-weight:medium}
ul{margin-bottom:0}
&lt;/style&gt;&lt;div class="section" id="the-cmake-build-system"&gt;
&lt;h2&gt;The CMake Build system&lt;/h2&gt;
&lt;p&gt;FOSSology is quite an old and mature project. The project has been using bare metal &lt;strong&gt;Makefiles&lt;/strong&gt;. As the project is growing with new agents and modernization it was required to have a modern build system.&lt;/p&gt;
&lt;p&gt;The FOSSology is a suite of well-integrated and synchronized sub-projects (called agents) written in C, C++, and PHP. Most of the major agents are in C, C++ and that made CMake an obvious choice for a new build system for FOSSology. CMake is a versatile set of build, test, and packaging tools and is the most popular choice of C/C++ developers. CMake can be extended to create a build system for other languages too via custom scripts.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="github-actions-ci-cd"&gt;
&lt;h2&gt;GitHub Actions CI/CD&lt;/h2&gt;
&lt;img alt="A CI Meme" class="float-md-right rounded border border-info ml-3" src="/images/ci.png" style="width: 350px;" /&gt;
&lt;p&gt;Since the FOSSology project moved on Github, it has used only the free Travis CI service for OSS projects.
At the time of writing Travis CI has reduced its free tier CI services. GitHub Actions provides faster builds. Since GitHub Actions is a fully managed service by GitHub, we dont need to know how to scale and operate the infrastructure to run it.&lt;/p&gt;
&lt;p&gt;It is straightforward to use with GitHub because when we fork a repository, the actions automatically get forked. This allows you to test and build projects very efficiently and even run them closer to the developer. Also, you have readily available access to the GitHub API, making it more popular among developers.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="improvements-over-previous-build-system-and-ci"&gt;
&lt;h2&gt;Improvements over previous build system and CI&lt;/h2&gt;
&lt;p&gt;The new build system and CI brings a lot of improvements and features. The list below describes them.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;CMake enforces out-of-source builds. This was already possible with the previous build system but not a strict requirement. This feature keeps the source code clean and makes cleaning the build artifacts easy. (Just remove the build folder :)&lt;/li&gt;
&lt;li&gt;One of the major improvements over the previous build system is faster build times. CMake generates parallel build-enabled configurations for all generators. In our tests, the new build system is at least twice as fast as the previous one. With further improvement in configuration, we will be able to further cut the build times.&lt;/li&gt;
&lt;li&gt;Previously FOSSology can only be built using &lt;em&gt;Unix Makefiles&lt;/em&gt;. With CMake, we can now use many other popular generators such as &lt;em&gt;Ninja&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Now it is also very flexible to choose different compilers. This will help support more platforms and architecture in the future. As of now, we are experimenting with Clang compilers.&lt;/li&gt;
&lt;li&gt;FOSSology is quite an old project and a lot of agent testing code was written in the last decade. Initially, none of them were compatible with the new build system, but we were able to hack most of the test code using better-improved methods. Test times have also improved.&lt;/li&gt;
&lt;li&gt;Migrating from Travis CI to GitHub Actions was another big move and for the most part, it removes the dependency on a third-party CI service. Along with that GitHub Actions provides better build times, tons of new features, and better integration with other GitHub services.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="deliverables"&gt;
&lt;h2&gt;Deliverables&lt;/h2&gt;
&lt;div class="alert alert-info" role="alert"&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Final Pull Request &lt;a class="badge badge-info" href="https://github.com/fossology/fossology/pull/2075"&gt;#2075&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Pull Request Branch &lt;a class="badge badge-info" href="https://github.com/avinal/fossology/tree/avinal/feat/buildsystem"&gt;avinal/feat/buildsystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Working Branch (individual commits) &lt;ul&gt;
&lt;li&gt;&lt;a class="badge badge-info" href="https://github.com/avinal/fossology/tree/avinal/feat/cmake-buildsystem"&gt;avinal/feat/cmake-buildsystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="badge badge-info" href="https://github.com/avinal/fossology/tree/avinal/feat/testing"&gt;avinal/feat/testing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Project Issue &lt;a class="badge badge-info" href="https://github.com/fossology/fossology/issues/1913"&gt;#1913&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Project Discussion &lt;a class="badge badge-info" href="https://github.com/fossology/fossology/discussions/1931"&gt;#1931&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Weekly Reports&lt;ul&gt;
&lt;li&gt;&lt;a class="badge badge-info" href="https://gsoc.avinal.space"&gt;Personal Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="badge badge-info" href="https://fossology.github.io/gsoc/docs/2021/buildsystem/"&gt;FOSSology Official Blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;CMake Build System Tasks&lt;/strong&gt;&lt;/p&gt;
&lt;table border="1" class="table table-sm table-hover table-bordered table-responsive docutils align-center"&gt;
&lt;colgroup&gt;
&lt;col width="5%" /&gt;
&lt;col width="15%" /&gt;
&lt;col width="10%" /&gt;
&lt;col width="10%" /&gt;
&lt;col width="20%" /&gt;
&lt;col width="15%" /&gt;
&lt;col width="25%" /&gt;
&lt;/colgroup&gt;
&lt;thead valign="bottom"&gt;
&lt;tr&gt;&lt;th class="head"&gt;#&lt;/th&gt;
&lt;th class="head"&gt;Agents&lt;/th&gt;
&lt;th class="head"&gt;Build&lt;/th&gt;
&lt;th class="head"&gt;Install&lt;/th&gt;
&lt;th class="head"&gt;Testing&lt;/th&gt;
&lt;th class="head"&gt;Packaging&lt;/th&gt;
&lt;th class="head"&gt;Remarks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;adj2nest&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;buckets&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;cli&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="rd"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;copyright&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="gr"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;debug&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;decider&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="gr"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;deciderjob&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;delagent&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="rd"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="rd"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;demomod&lt;/td&gt;
&lt;td&gt;&lt;span class="or"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="or"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="or"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="or"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="or"&gt;NO&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;(Not Used)&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;example_wc_agent&lt;/td&gt;
&lt;td&gt;&lt;span class="or"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="or"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="or"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="or"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="or"&gt;NO&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;(Not Used)&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;clib&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="gr"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;cpplib&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;phplib&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="gr"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;1 functional
test needs fix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;maintagent&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;mimetype&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="gr"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;monk&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="gr"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;ninka&lt;/td&gt;
&lt;td&gt;&lt;span class="or"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="or"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="or"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="or"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="or"&gt;NO&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;(Deprecated)&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;nomos&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="gr"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;ojo&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="gr"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;1 functional
test needs fix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;pkgagent&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="gr"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;readmeoss&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;regexscan&lt;/td&gt;
&lt;td&gt;&lt;span class="or"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="or"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;span class="or"&gt;NO&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;(Deprecated)&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;reportImport&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;reuser&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;reso&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;scheduler&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="rd"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="rd"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Tests needs
fix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;softwareHeritage&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;spasht&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;spdx2&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="gr"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;1 Test failing
in CI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;unifiedreport&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;ununpack&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="rd"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Unit tests
needs fix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;wget_agent&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="gr"&gt;Functional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="gr"&gt;Unit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;www&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;span class="rd"&gt;UI&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;YES&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;GitHub Actions CI Tasks&lt;/strong&gt;&lt;/p&gt;
&lt;table border="1" class="table table-sm table-hover table-bordered table-responsive docutils align-center"&gt;
&lt;colgroup&gt;
&lt;col width="5%" /&gt;
&lt;col width="25%" /&gt;
&lt;col width="70%" /&gt;
&lt;/colgroup&gt;
&lt;thead valign="bottom"&gt;
&lt;tr&gt;&lt;th class="head"&gt;#&lt;/th&gt;
&lt;th class="head"&gt;CI Tasks&lt;/th&gt;
&lt;th class="head"&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;build&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Added Ubuntu 20.04 GCC 8, 9 and Clang, GCC 7 not working&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;c/cpp unit test&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Added, delagent, scheduler and ununpack not working&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;span class="gr"&gt;phpunit tests&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Added, delagent and scheduler functional not working&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;span class="rd"&gt;cahching&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Not implemented&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;span class="rd"&gt;source install&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Not implemented&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;(&lt;span class="gr"&gt;GREEN&lt;/span&gt;: COMPLETED, &lt;span class="rd"&gt;RED&lt;/span&gt;: INCOMPLETE, &lt;span class="or"&gt;ORANGE&lt;/span&gt;: NOT NEEDED/DEPRECATED)&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="how-does-it-work-and-how-to-use-it"&gt;
&lt;h2&gt;How does it work and how to use it?&lt;/h2&gt;
&lt;div class="embed-responsive embed-responsive-16by9"&gt;
&lt;iframe class="embed-responsive-item" src="/images/second-build.webm" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;p&gt;The new build system retains the modular and hierarchical structure of the previous build system. On the other hand, the new build system provides several new flags to control the build. The new build system forces out-of-source build instead of the previous in-source builds. This keeps the source clutter-free and reduces the chance of accidentally deleting source files. &lt;em&gt;Testing still needs some in-source artifacts, this will be solved once all the tests are fixed according to the new build system.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Each agent is a complete CMake sub-project with its independent configuration for building, installing, and testing. That means a single agent can be built and installed separately and even removed from the default build without breaking other builds. The directory structure is as below.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;.
├── build &lt;span class="c1"&gt;# temporary directory for build artifacts&lt;/span&gt;
├── cmake &lt;span class="c1"&gt;# CMake modules for FOSSology&lt;/span&gt;
│ ├── FoPackaging.cmake &lt;span class="c1"&gt;# CMake Packaging configurations&lt;/span&gt;
│ ├── FoUtilities.cmake &lt;span class="c1"&gt;# Custom CMake utilities&lt;/span&gt;
│ ├── FoVersionFile.cmake &lt;span class="c1"&gt;# VERSION version.php CMake template file&lt;/span&gt;
│ ├── SetDefaults.cmake &lt;span class="c1"&gt;# CMake defaults for this project&lt;/span&gt;
│ ├── TestInstall.make.in &lt;span class="c1"&gt;# Template makefile for install during tests&lt;/span&gt;
│ └── VERSION.in &lt;span class="c1"&gt;# VERSION file template&lt;/span&gt;
├── src
│ ├── agent-1 &lt;span class="c1"&gt;# Agent sub-project&lt;/span&gt;
│ │ ├── agent &lt;span class="c1"&gt;# Agent&amp;#39;s source code directory&lt;/span&gt;
│ │ │ ├── agent-source-code
│ │ │ └── CMakeLists.txt
│ │ ├── agent_tests &lt;span class="c1"&gt;# Agent&amp;#39;s test directory&lt;/span&gt;
│ │ │ ├── Unit
│ │ │ ├── Functional
│ │ │ └── CMakeLists.txt
│ │ ├── ui &lt;span class="c1"&gt;# Agent&amp;#39;s UI source code&lt;/span&gt;
│ │ │ ├── templates
│ │ │ └── agent-ui-code
│ │ └── CMakeLists.txt &lt;span class="c1"&gt;# Agent&amp;#39;s top-level CMake configuration&lt;/span&gt;
: :
│ ├── other agents
: :
│ └── CMakeLists.txt &lt;span class="c1"&gt;# Source intermediate CMake configuration&lt;/span&gt;
:
├── other directories and files
:
└── CMakeLists.txt &lt;span class="c1"&gt;# FOSSology Top-level CMake configuration&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;cmake&lt;/code&gt; directory contains customized CMake modules and templates for FOSSology. This directory is required for all the operations. The general workflow of the new build system as well as how to use it is described below.&lt;/p&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p class="first"&gt;Since the new build system is still in review. You must fork FOSSology and pull the &lt;a class="reference external" href="https://github.com/fossology/fossology/pull/2075"&gt;#2075&lt;/a&gt; pull request branch. Once you are in FOSSology root, run these commands.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;git fetch https://github.com/avinal/fossology avinal/feat/buildsystem:buildsystem
git checkout buildsystem
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;The first step towards building is to create a temporary directory for storing intermediate files and build artifacts. By convention we use a directory named &lt;code&gt;build&lt;/code&gt;, but you can use any name. (&lt;strong&gt;NOTE: For testing do not use other names&lt;/strong&gt;)&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mkdir build
&lt;span class="nb"&gt;cd&lt;/span&gt; build
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;In the next steps, we will configure the CMake project and generate the required configurations. You can use several flags to control the build. Given below are the flags available for this project.&lt;/p&gt;
&lt;blockquote&gt;
&lt;table border="1" class="table table-sm table-hover table-bordered table-responsive docutils"&gt;
&lt;colgroup&gt;
&lt;col width="35%" /&gt;
&lt;col width="44%" /&gt;
&lt;col width="20%" /&gt;
&lt;/colgroup&gt;
&lt;thead valign="bottom"&gt;
&lt;tr&gt;&lt;th class="head"&gt;CMake Flags&lt;/th&gt;
&lt;th class="head"&gt;Description&lt;/th&gt;
&lt;th class="head"&gt;Default&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;-DCMAKE_INSTALL_PREFIX=&amp;lt;path&amp;gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sets the install prefix.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/usr/local&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;-DAGENTS=&amp;quot;agent1;agent2...&amp;quot;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Only configure these agents.&lt;/td&gt;
&lt;td&gt;ALL AGENTS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;-DOFFLINE=&amp;lt;ON/OFF&amp;gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Controls vendor generation, ON=NO&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;OFF&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;p class="first"&gt;&lt;strong&gt;-DCMAKE_BUILD_TYPE=&amp;lt;type&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote class="last"&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Controls build type aka
level optimisation&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/td&gt;
&lt;td&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;&lt;code&gt;Debug&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Release&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RelWithDebInfo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MinSizeRel&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Debug&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;-DTESTING=&amp;lt;ON/OFF&amp;gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Controls testing config generation&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;OFF&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;-DMONOPACK=&amp;lt;ON/OFF&amp;gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Package adj2nest and ununpack seperately&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;OFF&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;-GNinja&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use Ninja instead of Unix Makefiles&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Unix MakeFiles&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;There are lots of inbuilt CMake command-line options you can see them in the official &lt;a class="reference external" href="https://cmake.org/cmake/help/v3.10/manual/cmake.1.html"&gt;documentation&lt;/a&gt;. Once you have chosen your flags we can now configure the project using the following commands.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# From build folder&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; &amp;lt;name-of-build-directory&amp;gt;
cmake &amp;lt;flags&amp;gt; ..
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;The next step is to build the project. You can use parallel jobs to build faster. For more options you can type &lt;code&gt;cmake --help&lt;/code&gt; or &lt;code&gt;make --help&lt;/code&gt; or &lt;code&gt;ninja --help&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Common build command for all generators,&lt;/span&gt;
&lt;span class="c1"&gt;# Default number of parallel builds depends on generator used&lt;/span&gt;
cmake --build . --parallel &amp;lt;no-of-processes&amp;gt;
&lt;span class="c1"&gt;# For Unix Makefiles, no parallel build by default&lt;/span&gt;
make -j &amp;lt;no-of-processes&amp;gt;
&lt;span class="c1"&gt;# For Ninja, 8+ parallel build by default (depends on system)&lt;/span&gt;
ninja -j &amp;lt;no-of-processes&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Installing is also as easy as building. You can choose to install only certain components even if you have built the whole project. If you directly invoke the install command without building the project, it will automatically build the project first.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# For Unix Makefiles&lt;/span&gt;
make install
&lt;span class="c1"&gt;# For Ninja&lt;/span&gt;
ninja install
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;While testing has some issues, most of the testing is working fine. For now, you must build and run any test from the FOSSology root directory only. You can choose to configure a single agent if you want to test one agent only. See &lt;code&gt;ctest --help&lt;/code&gt; for controlling test runs.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Common testing command&lt;/span&gt;
ctest --parallel &amp;lt;no-of-processes&amp;gt;
&lt;span class="c1"&gt;# For Unix Makefiles&lt;/span&gt;
make &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;span class="c1"&gt;# For Ninja&lt;/span&gt;
ninja &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;You can package FOSSology, the packaging currently lacks copyright and conf files. But for testing purposes, you can use the following commands. Similar to installing, if you run the package command without building the project, it will automatically build the project first. See &lt;code&gt;cpack --help&lt;/code&gt; for more packaging options.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Common testing command&lt;/span&gt;
cpack
&lt;span class="c1"&gt;# For Unix Makefiles&lt;/span&gt;
make package
&lt;span class="c1"&gt;# For Ninja&lt;/span&gt;
ninja package
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class="section" id="known-issues-and-drawbacks"&gt;
&lt;h2&gt;Known Issues and Drawbacks&lt;/h2&gt;
&lt;p&gt;Although the transition from Makefiles to CMake and Travis CI to GitHub Actions is almost complete and working as expected. But it is not free of drawbacks and issues. This section outlines the known issues at the time of writing.&lt;/p&gt;
&lt;img alt="A Bug Meme" class="float-md-right rounded border border-info ml-3" src="https://imgs.xkcd.com/comics/conference_question.png" style="width: 350px;" /&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Coverage builds may fail with linking errors.&lt;/li&gt;
&lt;li&gt;Packaging prefix is the same as the install prefix. This requires the developer to set the install prefix manually before packaging to produce packages with the correct directory structure.&lt;/li&gt;
&lt;li&gt;Testing and packaging must be used from the FOSSology root directory. Not doing so may or may not configure the project as intended.&lt;/li&gt;
&lt;li&gt;Previously tests were written hardcoded for the Makefiles. But new build system requires all artifacts to be generated in a separate directory. This required me to add symbolic links wherever a generated script or file is expected. Tests can still leave some artifacts inside source folders.&lt;/li&gt;
&lt;li&gt;There is no easy way to install a particular agent from the FOSSology root directory.&lt;/li&gt;
&lt;li&gt;Packages don't contain copyright, readme, and license files. CMake doesn't provide a way to include these files. This is being tracked by issue &lt;a class="reference external" href="https://gitlab.kitware.com/cmake/cmake/-/issues/21832"&gt;#21832&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;While packaging the symbolic links may or may not be dereferenced and hence results in copying the folder too in the target directory.&lt;/li&gt;
&lt;li&gt;Running tests locally may require switching to &lt;code&gt;fossy&lt;/code&gt; user.&lt;/li&gt;
&lt;li&gt;While configured for testing, it may give permission errors.&lt;/li&gt;
&lt;li&gt;Scheduler, Ununpack, and Delagent unit and functional tests are not working. I have added an issue &lt;a class="reference external" href="https://github.com/fossology/fossology/issues/2084"&gt;#2084&lt;/a&gt; to track the progress on fixing these tests.&lt;/li&gt;
&lt;li&gt;CMake doesn't generate uninstall targets. The closest thing to uninstall is &lt;a class="reference external" href="https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake"&gt;this snippet&lt;/a&gt;. This will be later added to the FOSSology.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="challenges-faced"&gt;
&lt;h2&gt;Challenges Faced&lt;/h2&gt;
&lt;p&gt;While this whole project was challenging, some aspects of it were unforeseen and more challenging. When I decided to go on with this project I just had enough CMake knowledge to write a configuration for a very small project. I had never used CMake on this big scale. On the other side, the FOSSology community is largely unknown to CMake so for all of us it was learned, practiced, and implement. With support from mentors, I was able to overcome this challenge with flying colors.&lt;/p&gt;
&lt;p&gt;The other challenge was to understand the old build system, how they are all connected and what is the flow. The complexity can be imagined by the fact that the most of code and configurations were written in the decade before the last decade and haven't changed much since then.&lt;/p&gt;
&lt;p&gt;The most challenging task was to make tests work with the new build system. Since tests were mostly hardcoded and the new build system refactored many of the files and directory, the tests were failing initially. The testing part took me the most time. All thanks to my mentor Gaurav and my friend Sarita I was able to hack them to suit the new build system.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="related-resources-and-links"&gt;
&lt;h2&gt;Related Resources and Links&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Fix FOSSology agent tests issue &lt;a class="reference external" href="https://github.com/fossology/fossology/issues/2084"&gt;#2084&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;feat(CI): Migrate API docs generation and deployment to GitHub Actions pull request &lt;a class="reference external" href="https://github.com/fossology/fossology/pull/1917"&gt;#1917&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;feat(CI): Migrate Static Checks and Analysis to GitHub Actions from Travis CI &lt;a class="reference external" href="https://github.com/fossology/fossology/pull/1919"&gt;#1919&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="future-development-plans"&gt;
&lt;h2&gt;Future Development Plans&lt;/h2&gt;
&lt;p&gt;There is a lot to do with the new build system and CI and it will probably take a year or to reach a maturity point. I was able to meet most of the goals but some of them are remaining.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Fix the tests, probably renovate them from the ground up.&lt;/li&gt;
&lt;li&gt;Find a hack for packaging problems.&lt;/li&gt;
&lt;li&gt;Improve and optimize the build.&lt;/li&gt;
&lt;li&gt;Modernise the source code, remove old, bloated code and replace them according to new standards.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="what-did-i-learn-from-this-project"&gt;
&lt;h2&gt;What did I learn from this project?&lt;/h2&gt;
&lt;p&gt;This Google Summer of Code was the busiest time of my life for all good reasons. I learned a lot about license compliance and how it all works in the software industry. The next big thing is CMake. As I mentioned I was just a novice user of CMake. Now I am confident that given any other large project I will be able to migrate it/improve it. I got to learn PHP, of which I did not know a single word before GSoC. And finally, I learned about packing and testing. I had these courses but implementing them myself and fixing them was a wholesome experience.&lt;/p&gt;
&lt;p&gt;Other than that I improved on my communication and presentation skills. Collaborating with fellow participants was one of the great things that happened during GSoC.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="acknowledgments"&gt;
&lt;h2&gt;Acknowledgments&lt;/h2&gt;
&lt;p&gt;Google Summer of Code is the best thing that has happened to me this year so far. Although there are numerous people to say thanks to, I want to mention key people who were my motivation and support during this period.&lt;/p&gt;
&lt;p&gt;First of all, I want to thank and appreciate my mentors &lt;a class="reference external" href="https://github.com/GMishx"&gt;Gaurav Mishra&lt;/a&gt;, &lt;a class="reference external" href="https://github.com/mcjaeger"&gt;Michael C. Jaeger&lt;/a&gt;, &lt;a class="reference external" href="https://github.com/ag4ums"&gt;Anupam Ghosh&lt;/a&gt;, and &lt;a class="reference external" href="https://github.com/shaheemazmalmmd"&gt;Shaheem Azmal M MD&lt;/a&gt;. Without the help and support from them, all this would not have been possible. They are very polite, knowledgeable, and helpful.&lt;/p&gt;
&lt;p&gt;I want to thank my friend and &lt;abbr title="Integrating ScanCode Toolkit to FOSSology"&gt;fellow participant&lt;/abbr&gt; &lt;a class="reference external" href="https://github.com/itssingh"&gt;Sarita&lt;/a&gt;. Thank you for being a collaborator, support, and motivation for attempting GSoC.&lt;/p&gt;
&lt;p&gt;Finally, I want to thank, my family and friends. I got to meet many awesome developers as my fellow participants from around the world, I wish we will do more collaboration in the future.&lt;/p&gt;
&lt;/div&gt;
</content><category term="report"></category><category term="gsoc"></category><category term="FOSSology"></category></entry></feed>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 903 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 905 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 434 B

-214
View File
@@ -1,214 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Be My SpaceTime | 눈치
</title>
<link rel="canonical" href="https://avinal.space/index.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Articles
</h1>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2022-02-27T20:47:00+05:30">
<i class="fas fa-clock"></i>
Sun 27 February 2022
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/lovely-dangerous-things-redhat.html">Developing Minimal Tekton Server <a class="reference external image-reference" href="https://github.com/MiniTeks"><img alt="mks_logo" class="align-middle" src="/images/mks_logo.png" style="width: 1.5em;" /></a></a>
</h4>
<div class="content">
We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2022-02-25T20:47:00+05:30">
<i class="fas fa-clock"></i>
Fri 25 February 2022
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/i-am-loving-it-redhat.html">My internship at Red Hat <a class="reference external image-reference" href="https://redhat.com"><img alt="redhat_logo" class="align-middle" src="/images/redhat_logo.png" style="width: 1.5em;" /></a></a>
</h4>
<div class="content">
I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-08-19T23:07:00+05:30">
<i class="fas fa-clock"></i>
Thu 19 August 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/report.html">report</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/report/final-evaluation.html">Google Summer of Code 2021</a>
</h4>
<div class="content">
This is the final report of my Google Summer of Code 2021 at The FOSSology Project.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-02-14T22:47:00+05:30">
<i class="fas fa-clock"></i>
Sun 14 February 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/rst-guide.html">reStructuredText in GitHub</a>
</h4>
<div class="content">
reStructuredText syntax
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-02-02T21:47:00+05:30">
<i class="fas fa-clock"></i>
Tue 02 February 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/wakatime-readme.html">How I implemented WakaTime embeddable Coding Graph GHA?</a>
</h4>
<div class="content">
f you use WakaTime to track your coding activity. You can add that to your README as a bar graph or embed it in your blog/portfolio. Just add this action to any of your repositories and there you have it.
</div>
</div>
</article>
<hr>
<ul class="pagination">
<li class="page-item">
<span class="page-link">1 of 3</span>
</li>
<li class="page-item">
<a class="page-link" href="https://avinal.space/index2.html">
<span aria-hidden="true">&raquo;</span>
<span class="sr-only">Next</span>
</a>
</li>
</ul>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-220
View File
@@ -1,220 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Be My SpaceTime | 눈치
</title>
<link rel="canonical" href="https://avinal.space/index2.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Articles
</h1>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-01-26T16:47:00+05:30">
<i class="fas fa-clock"></i>
Tue 26 January 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/twilight-blog.html">How I Created This Blog?</a>
</h4>
<div class="content">
As you would have guessed by now, this blog is created using one such awesome SSG named Pelican. Pelican is simple, customizable and offers lots of themes and plugins. Pelican is python based SSG and is available through pip.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-01-09T22:29:00+05:30">
<i class="fas fa-clock"></i>
Sat 09 January 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/prime.html">prime</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/prime/prime1.html">Introduction to Prime Numbers</a>
</h4>
<div class="content">
A prime is a positive integer p having exactly two positive divisors, namely 1 and p. An integer n is composite if n > 1 and n is not prime. (The number 1 is considered neither prime nor composite.)
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2021-01-04T21:47:00+05:30">
<i class="fas fa-clock"></i>
Mon 04 January 2021
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/blog.html">blog</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/blog/hrt-interview-1.html"><abbr title="Hudson River Trading">HRT</abbr> Systems Internship Interview Experience</a>
</h4>
<div class="content">
I applied for Systems Internship - Summer 2021 back in December 2020 at Hudson River Trading , New York.....Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2020-12-31T19:07:00+05:30">
<i class="fas fa-clock"></i>
Thu 31 December 2020
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/wsl1.html">Move WSL 2 Safely to another Drive</a>
</h4>
<div class="content">
It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2020-12-01T23:47:00+05:30">
<i class="fas fa-clock"></i>
Tue 01 December 2020
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/development/vlc-gsod-report.html">Create the VLC User Documentation for one Mobile Port(Android)</a>
</h4>
<div class="content">
The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLCs wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization.
</div>
</div>
</article>
<hr>
<ul class="pagination">
<li class="page-item">
<a class="page-link" href="https://avinal.space/index.html">
<span aria-hidden="true">&laquo;</span>
<span class="sr-only">Previous</span>
</a>
</li>
<li class="page-item">
<span class="page-link">2 of 3</span>
</li>
<li class="page-item">
<a class="page-link" href="https://avinal.space/index3.html">
<span aria-hidden="true">&raquo;</span>
<span class="sr-only">Next</span>
</a>
</li>
</ul>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-168
View File
@@ -1,168 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Be My SpaceTime | 눈치
</title>
<link rel="canonical" href="https://avinal.space/index3.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Articles
</h1>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2020-09-28T22:47:00+05:30">
<i class="fas fa-clock"></i>
Mon 28 September 2020
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/blog.html">blog</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/blog/this-is-for-you.html">The Interstellar Twilight</a>
</h4>
<div class="content">
If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream.
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2019-09-21T15:47:00+05:30">
<i class="fas fa-clock"></i>
Sat 21 September 2019
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/article.html">article</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/article/for-sunshine.html">प्रेम रतन धन पायो</a>
</h4>
<div class="content">
टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं ।
</div>
</div>
</article>
<hr>
<article class="row teaser">
<header class="col-sm-4 text-muted">
<ul>
<li title="2012-02-27T22:47:00+05:30">
<i class="fas fa-clock"></i>
Mon 27 February 2012
</li>
<li>
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/article.html">article</a>
</li>
</ul>
</header>
<div class="col-sm-8">
<h4 class="title">
<a href="https://avinal.space/posts/article/red-big-ants.html">The Big Red Ants</a>
</h4>
<div class="content">
In a birds eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagles beak.
</div>
</div>
</article>
<hr>
<ul class="pagination">
<li class="page-item">
<a class="page-link" href="https://avinal.space/index2.html">
<span aria-hidden="true">&laquo;</span>
<span class="sr-only">Previous</span>
</a>
</li>
<li class="page-item">
<span class="page-link">3 of 3</span>
</li>
</ul>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

-94
View File
@@ -1,94 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>About Me | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/pages/about-me.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<meta name="description" content="">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>About Me
</h1>
<hr>
<article class="article">
<div class="content">
</div>
</article>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-221
View File
@@ -1,221 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>प्रेम रतन धन पायो | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/posts/article/for-sunshine.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/article.atom.xml">
<meta name="description" content="टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं । दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं ।">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>प्रेम रतन धन पायो
</h1>
<hr>
<article class="article">
<header>
<ul class="list-inline">
<li class="list-inline-item text-muted" title="2019-09-21T15:47:00+05:30">
<i class="fas fa-clock"></i>
Sat 21 September 2019
</li>
<li class="list-inline-item">
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/article.html">article</a>
</li>
<li class="list-inline-item">
<i class="fas fa-tag"></i>
<a href="https://avinal.space/tag/love.html">#love</a>, <a href="https://avinal.space/tag/article.html">#article</a>, <a href="https://avinal.space/tag/hindi.html">#hindi</a> </li>
</ul>
</header>
<div class="content">
<p style="border: 2px solid var(--cyan);border-radius: 7px;" align=center>This article was published in 18th edition of SRIJAN, the official magazine of <a href="https://nith.ac.in" style="text-decoration: none;">National Institute of Technology, Hamirpur</a>, India. The magazine can be accessed <a href="https://issuu.com/srijandesk/docs/srijan2020" style="text-decoration: none;">here</a>.<p><p>टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं ।
दादा-दादी कहा करते थे ये जिंदा पहाड़ हैं । सारी बातें सुनते हैं लोगों की । उनके दुख दर्द दूर करते हैं, ये देवता हैं । आजकल जब रोज़ क्लास
आते जाते दूर पहाड़ों की चोटियाँ देखता हूँ तो उनकी विशालता का अनुभव होता हैं । एक पल को अगर ये मान लिया जाए की हमारी सारी धार्मिक किताबें
वो कहानियाँ हैं जो पथिक लेखकों के द्वारा लिखी गयी हैं तो सारी बातें साफ हो जाती है कि क्यूँ देवी-देवताओं ने हिमालय को अपनाया है। टूटता
तारा देखना अलौकिक है पर हिमालय की श्रेणियों से टूटता तारा देखना दैविक है । और वो कहते हैं न जिसमें न कोई तर्क हो न ही हाथों की सफाई वो
दैविक है। टूटते तारो के बारे में लोगों के बहुत सारे विश्वास हैं । कभी विभीषिका का पूर्वाभास माने जाने वाले इन टूटते तारे आज इच्छा पूरक के
प्रतीक हैं । कुछ लोगों का ये भी मानना है कि टूटते तारे दिवंगत लोगों का संकेत हैं । हिमालय की कन्दराओं में न जाने कितने ही ऋषि-मुनियों ने
तप करते हुए अपना जीवन अर्पित कर दिया । इसलिए हिमालय की पहाड़ों से टूटता तारा देखना दैविक हैं क्योंकि शायद वो तारे उन ऋषि-मुनियों की पवित्र
आत्माओं का संकेत हैं ।</p>
<p>प्रकृति की सुंदरता और कलाकारी हिमालय की कण-कण में झलकती है। प्रकृति ने प्रेम को भी हिमालय के जितना ही विशाल और अलौकिक बनाया है । ये एक
अलग चर्चा का विषय है कि हिमालय पहले आया या प्रेम। मैं तो प्रेम के पक्ष में हूँ । वो हर अणु-परमाणु जिन्होंने इतने बड़ा पहाड़ खड़ा किया वो सब
आपस में प्रेम से बंधे हुए हैं। ये पृथ्वी, सूर्य, चंद्रमा, आकाश-गंगा इत्यादि सब प्रेम से बंधे हुए हैं । और हिमाद्रि के छत पर मैं इसी प्रेम
के आगोश में आकर भावशून्य होकर तारों को निहार रहा था । तभी मानो सदियों की मन्नत पूरी हुई और मुझे एक टूटता तारा दिखा । आप मेरी स्थिति की
जटिलता का अनुभव इस प्रकार से लगा सकते हैं कि लोग टूटते तारे से मन्नत मांगते हैं और मैं टूटता तारा ही मन्नत में मांग रहा था । इससे पहले की
मैं पिछली जटिलता से बाहर आता की दूसरी जटिलता सामने आ पड़ी की तारा तो दिख गया पर मैं माँगूँ क्या ? और अगर आप सोच रहे की भाई पैसे मांग लो
शोहरत , नाम , शक्ति और पता नहीं क्या-क्या ? मांग तो लेता पर अगर आप मेरी जगह इसी स्थिति में होते तो शायद आपको भी ये सब याद न आता । तो मैं
एक पल को ये आकलन करने लगा की क्या कुछ ऐसा है जिसकी मुझे बहुत जरूरत है पर मेरे पास हो नहीं । और आपको पता है की गहरी सोच में जाने पर अक्सर
क्या होता है। अब वो लोग जो ये सोच रहे की भाईसाब आप हर कहानी(सच्ची घटना का विवरण वाली कहानी 😊) में सो क्यूँ जाते हैं। सच बताऊँ तो इसका
कोई सटीक जबाव नहीं है मेरे पास, पर अध्यात्म ये कहता है की जब आप सो रहे होते हैं तो आपका मन चेतना के कई स्थिति से गुजरता है। जब आप परम
चैतन्य अवस्था में होते हैं तो रहस्य, प्रतिभज्ञान इत्यादि के रास्ते खुल जाते हैं। और विज्ञान ये भी कहता है कि निद्रा के माध्यम से इस
अवस्था में जाना उतना ही अनिश्चित है जितना किसी बाला का मेरे लिए प्रेम-प्रस्ताव । सरल शब्दों में – मैं कुछ समय के लिए सो गया।</p>
<p>आज से ठीक 2 महीने पहले अगर ये मुझसे कोई पूछता की क्या चाहिए तुम्हें तो शायद मेरे पास जबाव होता। दोस्त तो बहुत हैं पर जब कोई ऐसा हो जो
आपके अधूरे वाक्य पूरे कर सके, कोई ऐसा जो आपकी भावनाओं को आपकी तरह समझ सके, कोई ऐसा जो आपको आपके असल रूप में पसंद करता हो । आपको लग रहा
होगा की मैं एक प्रेमिका का विवरण दे रहा हूँ, पर नहीं या शायद हाँ , मैं समझता हूँ की अधिकतर लोग प्रेमिका शब्द का प्रयोग अनुचित ढंग से करते
हैं। जहां प्रेम है वहाँ प्रेमी-प्रेमिका होंगे फिर वो भाई-बहन का रिश्ता हो या माँ-बेटे का । एक पल को सोचो तो ऊपर के विवरण के लिए कोई सबसे
सटीक उत्तर है तो वो है माँ। जब आप उन माँ-बाप जिन्होंने आपको जन्म दिया, आपका पालन-पोषण किया , आपको इस लायक बनाया कि आप इस वक़्त ये लेख पढ़
पा रहे हैं , उनको अपनी प्रेमी-प्रेमिका नहीं कह सकते तो शायद किसी और लड़के-लड़की को कहने का आपको कोई हक़ नहीं है। पर ये बात निजी समझदारी की
है और मैं माँ-बाप के बारे में बिलकुल भी बात नहीं कर रहा, इन 2-4 पन्ने में उनको चित्रित कर पाना दुष्कर है। अगर माँ है तो ये अलग व्यक्ति
क्यूँ ? लोग कहते हैं क्योंकि भगवान हर जगह नहीं हो सकते इसलिए उन्होंने माँ बनाई। पर मैं कहता हूँ माँ भी हर जगह नहीं हो सकती इसलिए भगवान ने
दोस्त बनाए और विशेष लोग भी बनाए। आज तक बहुत सारे लोग आए-गए , कई बार लगा की शायद वो विशेष व्यक्ति मिलने ही वाला है पर वो भ्रम था शायद ये
भी हो। मैं ये नहीं कह सकता की मेरी खोज पूर्ण हो गयी पर हाँ एक पड़ाव तो जरूर आ गया है। उस पहली मुलाक़ात में एक पल को ऐसा लगा मानो किसी
चमत्कारी दर्जी ने कपड़े की जगह एक पूरा आदमी सिल कर दिया हो। सब कुछ एकदम नाप के अनुरूप। शायद कई सालों के बाद मैं खुशियों का बवंडर अपने अंदर
महसूस कर रहा था। आप पूछेंगे इसमें प्रेम कहाँ है? हिमालय जितना विशाल है उतना ही गहरा भी है , यहाँ भी प्रेम गहराई में है । प्रेम का होना
जरूरी है दिखावा तो हर कोई कर लेता है। कबीर ने अपने एक दोहे में कहा है :</p>
<p><strong>बूंद समानी समूंद में , जानत है सब कोई; समूंद समाना बूंद में , बूझे बिरला कोई।</strong></p>
<p>मैं इस दोहे को प्रेम के संदर्भ में व्याख्या करना चाहूँगा। लोग बूंद हैं और प्रेम समुद्र, लोगों को प्रेम में पड़ते सबने देखा है या सुना है,
पर जो प्रेम लोगों के अंदर व्याप्त है ये हर कोई नहीं समझता। मैं उस विशेष व्यक्ति का कृतज्ञ हूँ जिसने ने मुझे इस दोहे के मूल भाव का अहसास
करवाया।</p>
<p>कभी-कभी डर लगता है, खोने का उसे। आजकल दुनिया में सब अनिश्चित है। कब-क्या हो जाए ये कोई नहीं बता सकता। पहले सिर्फ पृथ्वी थी फिर लोग हुए और
तब से पृथ्वी अस्थमा की मरीज है। किसी प्रसिद्ध कवि ने लिखा है :</p>
<p><strong>आज आदमी में विष इतना भर गया है, की विषधरों का वंश उनसे डर गया है,</strong>
<strong>कल को कहते सुनोगे , आदमी काटा और साँप मर गया है।</strong></p>
<p>ठंडी-ठंडी हवाओं ने मेरी सारी नींद उड़ा दी। प्रकृति शायद मुझे खुश करके मारना चाहती थी। आसमान ने एक बड़े काले पर्दे का रूप ले लिया था और उस
पर्दे पर दसियो उजले साँप रेंगते नज़र आ रहे थे। मानो दस सालो के टूटते तारे एक साथ दिख रहे हों और आसमान कह रहा हो – जो चाहिए, जितना चाहिए
माँग लो। और मैंने सच में माँग लिए , लगभग सब कुछ । और उसको हमेशा पास रखने की दुआ तो नहीं माँग सका , पर वो जहां रहे, खुश रहे, सलामत रहे।</p>
<hr>
<p align=center>
This Blog is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer">Attribution-NonCommercial 4.0 International<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
</a>
</p>
</div>
</article>
<hr>
<div id="comment-form">
<div class="alert alert-info" role="alert">
Feel free to leave a feedback or question!
</div>
<form action="https://docs.google.com/forms/u/0/d/e/1FAIpQLSfL9T8WBRm-Ac2uyu74lJXSYOqAuF6lLIUAulRArCsuiI1ZRQ/formResponse" target="response" method="POST" id="valid-form">
<div class="form-row align-items-center">
<div class="form-group col-md-5">
<label class="sr-only" for="person-name">Name</label>
<input type="text" class="form-control form-control-sm" id="person-name" placeholder="Your Name (Optional)"
aria-describedby="nameHelp" name="entry.982725972">
<input type="text" id="page-link" name="entry.1641222305" hidden>
<small id="nameHelp" class="form-text text-muted">You may put your GitHub Username.</small>
</div>
<div class="form-group col-md-7">
<label class="sr-only" for="email-address">Email address</label>
<input type="email" class="form-control form-control-sm" id="email-address" aria-describedby="emailHelp"
placeholder="Your Email Address (Optional)" name="entry.1652853191">
<small id="emailHelp" class="form-text text-muted">I'll never share your email with anyone
else.</small>
</div>
</div>
<div class="form-group">
<label class="sr-only" for="comment-section">Your Message</label>
<textarea class="form-control form-control-sm" id="comment-section" rows="3"
placeholder="Please enter your message or feedback. (Required)" aria-describedby="emailHelp"
name="entry.1062656232" required></textarea>
<div class="invalid-feedback">
Please Enter something !
</div>
<small id="textHelp" class="form-text text-muted">Enter upto 200 characters.</small>
</div>
<button class="btn btn-outline-info" type="submit">Send</button>
</form>
<iframe name="response" hidden></iframe>
</div>
<div class="alert alert-info" role="alert" id="comment-message" style="display: none;">
<h4 class="alert-heading">Thanks You 🥳</h4>
<p>Thanks a lot for reading this blog and sending me a feedback. I hope you liked it. I will get back to you
soon if you have added an email.</p>
</div>
<script>
(function () {
'use strict';
window.addEventListener('load', function () {
var form = document.getElementById('valid-form');
form.addEventListener('submit', function (event) {
document.getElementById('page-link').value = window.location.href;
document.getElementById('comment-form').style.display = 'none';
document.getElementById('comment-message').style.display = '';
}, false);
}, false);
})();
</script>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-181
View File
@@ -1,181 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>The Big Red Ants | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/posts/article/red-big-ants.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/article.atom.xml">
<meta name="description" content="In a birds eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagles beak.">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>The Big Red Ants
</h1>
<hr>
<article class="article">
<header>
<ul class="list-inline">
<li class="list-inline-item text-muted" title="2012-02-27T22:47:00+05:30">
<i class="fas fa-clock"></i>
Mon 27 February 2012
</li>
<li class="list-inline-item">
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/article.html">article</a>
</li>
<li class="list-inline-item">
<i class="fas fa-tag"></i>
<a href="https://avinal.space/tag/ants.html">#ants</a>, <a href="https://avinal.space/tag/sav.html">#sav</a> </li>
</ul>
</header>
<div class="content">
<p style="border: 2px solid var(--cyan);border-radius: 7px;" align=center>This article was published in 3rd edition of नवांकुर , the official magazine of Simultala Awasiya Vidyalaya, Bihar, India.<p><p>In a birds eye view if we see around us, ants are the common and tiniest living entitiy seen by naked eye. One of them are the big red ants, in my view they are unique from others in two ways, first they live on trees and second their anteenas are too long and bent in middle, seems like their fore legs. Their mandible (mouth) seems like eagles beak.</p>
<p>As I observed them making and reparing their nests, I concluded that they are very laborious and intellectual. They create their nests by binding two or more leaves (maybe up to 500) together. They stich the leaves using a stinky white substance either excreted by themselves or from trees. This substance is like web of spider. At first builder ants creates an array at the blade of two leaves. Then they make ant-cranes or ant-chain like chain of monomer to form a polymer. They catch the leaves and pull each other to stich. After some time, the parliament of leaves transforms into a leaf-sac called their nest. They also weave translucent cloth like structure to cover remainings of leaf. A nest hangs by a branch of the trees.</p>
<p>A nest is skillfully divided into living rooms, barracks, storehouse, egg room and queens room. The eggroom, lies at the center of nest to protect from outer attack until last time. Besides that, lies queens room. Living rooms are sequenncly joined with eggroom. There are different rooms for workers, food searchers etc. The partition of the room resembles atoms electron shell, one upon another. At last barracks are the outermost rooms, just like outermost orbit of electron. The defence system is strongest at the nests opening. A nest may size as 2-3 footballs and have 50 to 10000 ants. There may be more openings.</p>
<p>Now about their attacking and protecting skills. A solider is unique from other ants. It is equipped with many attacking and defending skills. Normally they do not attack. They are social insects. If someone attacks, all other ants go inside, and soldiers come out. They spread allover the nest. They are very sensetive and have sharp vision. If any one of them see their enemy the stand on their hind legs, swinging, their forelegs and anteens in their air as scolding someone. Their spit contains formic acid, present at the end of the abdomen below the rectum. If their nest is broken and eggs fall on ground then the ants make a dome, like the dome of Taj mahal to save the eggs till last their breadth. This shows their caring skills.</p>
<p>The most amazing is their discipline. They can easily beat a human in race of discipline. Humans must learn from it. When two ants meet, they touch their anteena to communicate. When they walk in a queue, they seem like twinkling dots and dashes. I want to conclude that <strong>All tiny things are not really tiny. It may be as a space having infinite mysteries one has to explore it.</strong></p>
<hr>
<p align=center>
This Blog is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer">Attribution-NonCommercial 4.0 International<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
</a>
</p>
</div>
</article>
<hr>
<div id="comment-form">
<div class="alert alert-info" role="alert">
Feel free to leave a feedback or question!
</div>
<form action="https://docs.google.com/forms/u/0/d/e/1FAIpQLSfL9T8WBRm-Ac2uyu74lJXSYOqAuF6lLIUAulRArCsuiI1ZRQ/formResponse" target="response" method="POST" id="valid-form">
<div class="form-row align-items-center">
<div class="form-group col-md-5">
<label class="sr-only" for="person-name">Name</label>
<input type="text" class="form-control form-control-sm" id="person-name" placeholder="Your Name (Optional)"
aria-describedby="nameHelp" name="entry.982725972">
<input type="text" id="page-link" name="entry.1641222305" hidden>
<small id="nameHelp" class="form-text text-muted">You may put your GitHub Username.</small>
</div>
<div class="form-group col-md-7">
<label class="sr-only" for="email-address">Email address</label>
<input type="email" class="form-control form-control-sm" id="email-address" aria-describedby="emailHelp"
placeholder="Your Email Address (Optional)" name="entry.1652853191">
<small id="emailHelp" class="form-text text-muted">I'll never share your email with anyone
else.</small>
</div>
</div>
<div class="form-group">
<label class="sr-only" for="comment-section">Your Message</label>
<textarea class="form-control form-control-sm" id="comment-section" rows="3"
placeholder="Please enter your message or feedback. (Required)" aria-describedby="emailHelp"
name="entry.1062656232" required></textarea>
<div class="invalid-feedback">
Please Enter something !
</div>
<small id="textHelp" class="form-text text-muted">Enter upto 200 characters.</small>
</div>
<button class="btn btn-outline-info" type="submit">Send</button>
</form>
<iframe name="response" hidden></iframe>
</div>
<div class="alert alert-info" role="alert" id="comment-message" style="display: none;">
<h4 class="alert-heading">Thanks You 🥳</h4>
<p>Thanks a lot for reading this blog and sending me a feedback. I hope you liked it. I will get back to you
soon if you have added an email.</p>
</div>
<script>
(function () {
'use strict';
window.addEventListener('load', function () {
var form = document.getElementById('valid-form');
form.addEventListener('submit', function (event) {
document.getElementById('page-link').value = window.location.href;
document.getElementById('comment-form').style.display = 'none';
document.getElementById('comment-message').style.display = '';
}, false);
}, false);
})();
</script>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-222
View File
@@ -1,222 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>HRT Systems Internship Interview Experience | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/posts/blog/hrt-interview-1.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/blog.atom.xml">
<meta name="description" content="I applied for Systems Internship - Summer 2021 back in December 2020 at Hudson River Trading , New York.....Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt.">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1><abbr title="Hudson River Trading">HRT</abbr> Systems Internship Interview Experience
</h1>
<hr>
<article class="article">
<header>
<ul class="list-inline">
<li class="list-inline-item text-muted" title="2021-01-04T21:47:00+05:30">
<i class="fas fa-clock"></i>
Mon 04 January 2021
</li>
<li class="list-inline-item">
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/blog.html">blog</a>
</li>
<li class="list-inline-item">
<i class="fas fa-tag"></i>
<a href="https://avinal.space/tag/hrt.html">#HRT</a>, <a href="https://avinal.space/tag/hudsonrivertrading.html">#hudsonrivertrading</a>, <a href="https://avinal.space/tag/interview.html">#interview</a>, <a href="https://avinal.space/tag/internship.html">#internship</a> </li>
</ul>
</header>
<div class="content">
<p>I applied for <strong>Systems Internship - Summer 2021</strong> back in December 2020 at <a class="reference external" href="https://www.hudsonrivertrading.com">Hudson River Trading</a> , New York. The internship description was: -</p>
<blockquote class="epigraph">
<p>We are looking for highly motivated students who are eager to learn and excited about systems to join us for our summer internship
program. As a systems intern, you may have the opportunity to work on projects in the following areas:</p>
<ul class="simple">
<li>Programming/scripting (Golang, Python, C++, C)</li>
<li>FOSS development</li>
<li>HPC, Cluster computing</li>
<li>System Administration</li>
<li>Linux, Debian</li>
<li>Linux-based computer security</li>
<li>Data Storage</li>
<li>Large deployment or config management</li>
</ul>
</blockquote>
<p>The first step was a coding test on the Codility platform. If you have used any of the online coding platforms, this is similar. It was a <abbr title="90 mins">2.5 hrs</abbr> test consisting of 3 questions. They let you use <abbr title="documentation, man pages, etc.">online references</abbr> but
<strong>do not copy the code</strong> as it will highly reduce your chances of qualifying for this first stage. You can choose between <strong>C/C++</strong>,
<strong>Python</strong> and <strong>Golang</strong> (no Java 😪).</p>
<p>Questions were clear and of medium level. But they were designed in such a way that you must know the basics before you could attempt.
Also, they expected a clear and concise approach. Two of the most important points in their instructions were: -</p>
<blockquote class="epigraph">
<ul class="simple">
<li>While correctness and performance are the most important factors for evaluation, we will take test duration into account as well.</li>
<li>Please understand that this test is meant to be challenging. A perfect score is not necessary to move on to future interview rounds, so do the best you can!</li>
</ul>
</blockquote>
<p>So, you must be near perfect in your approach as well as on time. I did them kind of quickly. They will show you a summary of your
submission but not the results. It will take almost 2 weeks to get back to you for further steps.</p>
<p>Next, I received a mail invitation for a telephonic interview. <strong>This interview will last about 45 minutes and will be technical but will not require coding. Interview topics may include your background, programming languages, and Unix/Linux concepts</strong>. Once you receive this
mail you can then decide a time slot for an interview.</p>
<p>I was not sure what they will ask if this is not a coding interview. The interviewer was very polite, and he was explaining the questions
too. Questions were not so tricky but practical and real-life. Since it was <strong>not for SDE role</strong>, the questions were mostly related to
Linux/Unix, C++ (mainly pointers and memory), Python/Bash scripting, automation, knowledge of tools (IDEs, Editors, System Administration
Tools) and previous experiences. The interview would often explain why he is asking this question, this was very nice. Then some common
interview questions, why do you want to work for this role? What makes you fit for this role? etc.</p>
<p>One thing that I want to point out is that the interviewer was repeatedly checking my resume, and for the most part he did not ask
anything that was not on my resume. So, my tip is to create a nice resume with genuine work/tool experiences. And when you are applying
for such a role, it would be helpful if you mention mathematics or other courses that you have taken. <em>Do not lie on your resume</em>. They
will easily catch that.</p>
<p>The other thing is to keep your words short and clear; I was not great at communication, but you can be. If the interviewer allows then
use examples for the things you cannot explain. I used nice examples. At last, he gave me short feedback on how well I performed.</p>
<p>At last, I want to point out things I should not have done. The first is, I did not ask much about the role, you must do this at least
once. Second, I am talkative, I do not know if the interviewer was not faking his expressions (because he would often discuss in-depth),
but not all interviewers will be the same. So, do not talk too much, nor too less. At last work on your communication skill, mostly how
you to present things and how to answer technical as well as behavioral questions. I was not fluent, but my way of presentation might
have saved me.</p>
<hr>
<p align=center>
This Blog is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer">Attribution-NonCommercial 4.0 International<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
</a>
</p>
</div>
</article>
<hr>
<div id="comment-form">
<div class="alert alert-info" role="alert">
Feel free to leave a feedback or question!
</div>
<form action="https://docs.google.com/forms/u/0/d/e/1FAIpQLSfL9T8WBRm-Ac2uyu74lJXSYOqAuF6lLIUAulRArCsuiI1ZRQ/formResponse" target="response" method="POST" id="valid-form">
<div class="form-row align-items-center">
<div class="form-group col-md-5">
<label class="sr-only" for="person-name">Name</label>
<input type="text" class="form-control form-control-sm" id="person-name" placeholder="Your Name (Optional)"
aria-describedby="nameHelp" name="entry.982725972">
<input type="text" id="page-link" name="entry.1641222305" hidden>
<small id="nameHelp" class="form-text text-muted">You may put your GitHub Username.</small>
</div>
<div class="form-group col-md-7">
<label class="sr-only" for="email-address">Email address</label>
<input type="email" class="form-control form-control-sm" id="email-address" aria-describedby="emailHelp"
placeholder="Your Email Address (Optional)" name="entry.1652853191">
<small id="emailHelp" class="form-text text-muted">I'll never share your email with anyone
else.</small>
</div>
</div>
<div class="form-group">
<label class="sr-only" for="comment-section">Your Message</label>
<textarea class="form-control form-control-sm" id="comment-section" rows="3"
placeholder="Please enter your message or feedback. (Required)" aria-describedby="emailHelp"
name="entry.1062656232" required></textarea>
<div class="invalid-feedback">
Please Enter something !
</div>
<small id="textHelp" class="form-text text-muted">Enter upto 200 characters.</small>
</div>
<button class="btn btn-outline-info" type="submit">Send</button>
</form>
<iframe name="response" hidden></iframe>
</div>
<div class="alert alert-info" role="alert" id="comment-message" style="display: none;">
<h4 class="alert-heading">Thanks You 🥳</h4>
<p>Thanks a lot for reading this blog and sending me a feedback. I hope you liked it. I will get back to you
soon if you have added an email.</p>
</div>
<script>
(function () {
'use strict';
window.addEventListener('load', function () {
var form = document.getElementById('valid-form');
form.addEventListener('submit', function (event) {
document.getElementById('page-link').value = window.location.href;
document.getElementById('comment-form').style.display = 'none';
document.getElementById('comment-message').style.display = '';
}, false);
}, false);
})();
</script>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-202
View File
@@ -1,202 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>The Interstellar Twilight | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/posts/blog/this-is-for-you.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/blog.atom.xml">
<meta name="description" content="If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream.">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>The Interstellar Twilight
</h1>
<hr>
<article class="article">
<header>
<ul class="list-inline">
<li class="list-inline-item text-muted" title="2020-09-28T22:47:00+05:30">
<i class="fas fa-clock"></i>
Mon 28 September 2020
</li>
<li class="list-inline-item">
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/blog.html">blog</a>
</li>
<li class="list-inline-item">
<i class="fas fa-tag"></i>
<a href="https://avinal.space/tag/interstellar.html">#interstellar</a>, <a href="https://avinal.space/tag/twilight.html">#twilight</a> </li>
</ul>
</header>
<div class="content">
<p>Yeah, it was a dream someday. I never imagined you. But I do remember glimpses of a wonderful person
in my deep slumber. When I go back to last year about the same time, I find myself a manic who gets
carried away with every emotion. Becoming too happy about something and then becoming too sad was so
common that I never noticed what I was risking.</p>
<p><strong>&quot;If in the Twilight of dreams we should meet once more, we shell talk again together and I shall sing to you a lullaby till you sleep again to meet me in the Twilight of another dream.&quot;</strong></p>
<p>But 1 year ago many things changed. A never seen dream came true. To be honest I was skeptical if all
this happening to me was true. Even until last December. Gradually things started falling into places.
And for the most part, the reality became more real. I can now easily see what is happening and why it
happened. Everything was so nice until we had a fight. Then another, and now it was every other day
story. It was a really hard time collecting everything together and act as nothing happened after every
single of those. Everything was plunging. I started imagining the end of something that I did not
imagine to happen in the first place.</p>
<p>But during all those times, there was a continual intuition that maybe there is something that we both
are missing. And that was maybe the root of all chaos. I never came to know that what it was neither did
you. But I do realize many mistakes I have been doing since we met.</p>
<p>I want to thank you for not losing hope in me. We both always tried to reduce tension as much as we could.
And thank you for many other ineffable things happened because of you.</p>
<p>As of now I can see things making sense. Every message, every talk now seems to make sense. I am more
deeply into this friendship if I was not ever before. The ecstasy of having you is other-worldly. I don't
know if I could ever adore a person this much but I adore this ravishing friendship. Only you or only
this friendship may mean nothing to me. But I am delighted to say that I have both and I have you.</p>
<p>Now, what is all with The Interstellar Twilight. Why this name ? Let me explain it for you. <strong>Interstellar</strong>
means between stars and <strong>Twilight</strong> means the soft glow when the sun is below the horizon.
<strong>The Interstellar Twilight</strong> means the glow between the stars or simply glow of a cluster of stars. A
single star shines but the glow is too low to be noticed against its brightness. But a lot stars together
gets a glow. So my friend we are such two stars and our friendship is that glow.</p>
<hr>
<p align=center>
This Blog is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer">Attribution-NonCommercial 4.0 International<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
</a>
</p>
</div>
</article>
<hr>
<div id="comment-form">
<div class="alert alert-info" role="alert">
Feel free to leave a feedback or question!
</div>
<form action="https://docs.google.com/forms/u/0/d/e/1FAIpQLSfL9T8WBRm-Ac2uyu74lJXSYOqAuF6lLIUAulRArCsuiI1ZRQ/formResponse" target="response" method="POST" id="valid-form">
<div class="form-row align-items-center">
<div class="form-group col-md-5">
<label class="sr-only" for="person-name">Name</label>
<input type="text" class="form-control form-control-sm" id="person-name" placeholder="Your Name (Optional)"
aria-describedby="nameHelp" name="entry.982725972">
<input type="text" id="page-link" name="entry.1641222305" hidden>
<small id="nameHelp" class="form-text text-muted">You may put your GitHub Username.</small>
</div>
<div class="form-group col-md-7">
<label class="sr-only" for="email-address">Email address</label>
<input type="email" class="form-control form-control-sm" id="email-address" aria-describedby="emailHelp"
placeholder="Your Email Address (Optional)" name="entry.1652853191">
<small id="emailHelp" class="form-text text-muted">I'll never share your email with anyone
else.</small>
</div>
</div>
<div class="form-group">
<label class="sr-only" for="comment-section">Your Message</label>
<textarea class="form-control form-control-sm" id="comment-section" rows="3"
placeholder="Please enter your message or feedback. (Required)" aria-describedby="emailHelp"
name="entry.1062656232" required></textarea>
<div class="invalid-feedback">
Please Enter something !
</div>
<small id="textHelp" class="form-text text-muted">Enter upto 200 characters.</small>
</div>
<button class="btn btn-outline-info" type="submit">Send</button>
</form>
<iframe name="response" hidden></iframe>
</div>
<div class="alert alert-info" role="alert" id="comment-message" style="display: none;">
<h4 class="alert-heading">Thanks You 🥳</h4>
<p>Thanks a lot for reading this blog and sending me a feedback. I hope you liked it. I will get back to you
soon if you have added an email.</p>
</div>
<script>
(function () {
'use strict';
window.addEventListener('load', function () {
var form = document.getElementById('valid-form');
form.addEventListener('submit', function (event) {
document.getElementById('page-link').value = window.location.href;
document.getElementById('comment-form').style.display = 'none';
document.getElementById('comment-message').style.display = '';
}, false);
}, false);
})();
</script>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
@@ -1,226 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>My internship at Red Hat | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/posts/development/i-am-loving-it-redhat.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/development.atom.xml">
<meta name="description" content="I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project.">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>My internship at Red Hat <a class="reference external image-reference" href="https://redhat.com"><img alt="redhat_logo" class="align-middle" src="/images/redhat_logo.png" style="width: 1.5em;" /></a>
</h1>
<hr>
<article class="article">
<header>
<ul class="list-inline">
<li class="list-inline-item text-muted" title="2022-02-25T20:47:00+05:30">
<i class="fas fa-clock"></i>
Fri 25 February 2022
</li>
<li class="list-inline-item">
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
<li class="list-inline-item">
<i class="fas fa-tag"></i>
<a href="https://avinal.space/tag/kubernetes.html">#kubernetes</a>, <a href="https://avinal.space/tag/redhat.html">#redhat</a>, <a href="https://avinal.space/tag/docker.html">#docker</a>, <a href="https://avinal.space/tag/golang.html">#golang</a>, <a href="https://avinal.space/tag/tekton.html">#tekton</a>, <a href="https://avinal.space/tag/openshift.html">#openshift</a>, <a href="https://avinal.space/tag/intern.html">#intern</a> </li>
</ul>
</header>
<div class="content">
<p>I have been contributing to open source for the last 3 years and Red Hat was one of the companies that I was very fond of. I must say all my contributions and consistency paid off, and I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project.</p>
<p>On the first day of my internship, I met two amazing teammates <a class="reference external" href="https://github.com/">Saytam</a> and <a class="reference external" href="https://github.com/">Utkarsh</a>. We were also introduced to a Senior Software Engineer <a class="reference external" href="https://github.com">Piyush Garg</a> who later mentored us. The initial few meetings were more on the introduction and what to learn topics. Before I jump into more details let me explain first what does a <strong>DevTools Developer/Engineer</strong> do?</p>
<div class="section" id="what-does-a-devtools-developer-engineer-do">
<h2>What does a DevTools Developer/Engineer do?</h2>
<p>From <a class="reference external" href="https://developer.mozilla.org/en-US/docs/Glossary/Developer_Tools">MDN Web Docs</a> <strong>Developer tools (or &quot;development tools&quot; or short &quot;DevTools&quot;) are programs that allow a developer to create, test, and debug software.</strong> At RedHat, a lot of open source developer tools of industry standards are developed. There are many, OpenShift, Tekton, CodeReady containers, and many more.</p>
</div>
<div class="section" id="learning-on-the-golang-logo">
<h2>Learning on the <img alt="golang_logo" class="align-top" src="/images/golang.png" style="width: 2.5em;" /></h2>
<p>There was a lot of learning and still a lot to learn. In a meeting with my manager Pradeepto Bhattacharya, I was told that I will be working on TektonCD or OpenShift Pipelines, and both of them require a sound knowledge of Golang, CI/CD, Containers, Docker, and Kubernetes. I was familiar with CI/CD, containers, and Docker but never used Golang and Kubernetes. We were provided plenty of good resources and my teammates also helped with many awesome resources. I am listing all the resources with their category.</p>
<div class="section" id="golang-1">
<h3><a class="reference external" href="https://go.dev/">Golang</a></h3>
<img alt="Gopher on the ladder" class="float-md-right rounded ml-3" src="/images/goladder.png" style="height: 20em;" />
<p>One of Golangs biggest advantages is that it offers the clarity and ease of use that other languages lack. Golangs advantages make it easy for new programmers to quickly understand the language and for seasoned veterans to easily read each others code.</p>
<ul class="simple">
<li><a class="reference external" href="https://go.dev/doc/">Official Go Documentation</a> - <em>Start from here</em></li>
<li><a class="reference external" href="https://gobyexample.com/">Go by Example</a> - <em>bite-size examples for most of the golang features</em></li>
<li><a class="reference external" href="https://golangbot.com/learn-golang-series/">Golang tutorial series - GOLANGBOT.COM</a> - <em>in-depth tutorial of golang</em></li>
<li><a class="reference external" href="https://go.dev/doc/effective_go">Effective Go</a> - <em>writing good golang programs</em></li>
<li><a class="reference external" href="https://go.dev/play/">The Go Playground</a> - <em>official online golang ide</em></li>
<li><a class="reference external" href="https://www.gopl.io/">The Go Programming Language - Book</a> <em>for learning advanced level golang</em></li>
<li><a class="reference external" href="https://youtu.be/yyUHQIec83I">Golang Tutorial for Beginners | Full Go Course - TechWorld with Nana</a> <em>if you prefer video tutorials, I don't :)</em></li>
</ul>
</div>
<div class="section" id="docker-1">
<h3><a class="reference external" href="https://www.docker.com/">Docker</a></h3>
<p>Docker takes away repetitive, mundane configuration tasks and is used throughout the development lifecycle for fast, easy, and portable application development - desktop and cloud. Dockers comprehensive end-to-end platform includes UIs, CLIs, APIs, and security that are engineered to work together across the entire application delivery lifecycle.</p>
<img alt="The Docker Architecture" class="float-md-right img-fluid my-3" src="/images/docker-architecture.png" />
<ul class="simple">
<li><a class="reference external" href="https://www.katacoda.com/courses/docker">Docker and Containers - Katacoda</a> <em>interactive lessons on docker and containers</em></li>
<li><a class="reference external" href="https://docker-curriculum.com/">Docker for beginners</a></li>
<li><a class="reference external" href="https://youtu.be/3c-iBn73dDE">Docker Tutorial for Beginners | TechWorld with Nana</a> <em>video tutorial</em></li>
</ul>
</div>
<div class="section" id="kubernetes-1">
<h3><a class="reference external" href="https://kubernetes.io/">Kubernetes</a></h3>
<img alt="Kubernetes tech" class="float-md-left border mr-3" src="/images/kubernetes-meme.png" style="width: 200px;" />
<p><strong>Kubernetes</strong> is the Greek word for a ships captain. We get the words Cybernetic and Gubernatorial from it. The Kubernetes project focuses on building a robust platform for running thousands of containers in production.</p>
<ul class="simple">
<li><a class="reference external" href="https://www.katacoda.com/courses/kubernetes">Learn Kubernetes - Katacoda</a> <em>interactive lessons with kubernetes</em></li>
<li><a class="reference external" href="https://kubebyexample.com/">kube by example</a> <em>learn by doing</em></li>
<li><a class="reference external" href="https://youtu.be/X48VuDVv0do">Kubernetes Tutorial for Beginners</a> <em>video tutorial</em></li>
</ul>
</div>
</div>
<div class="section" id="not-so-minimal-tekton-server">
<h2><em>Not so Minimal</em> Tekton Server</h2>
<p>In late January, we were asked to implement our learnings and deep dive into Kubernetes and TektonCD through an assignment project. Soon we realized that whatever we were learning so far was not even close to what we were going to implement. We were given a document containing the requirements of the applications we were supposed to create along with all the documentation and architectural diagrams.</p>
<p>The application was called <strong>Minimal Tekton Server</strong>. It is a set of three different applications, i.e a server, a CLI, and a dashboard. In short, this application is supposed to <em>listen to custom resources being created and then transfer the request to Tekton API to create the corresponding resource on the OpenShift/Kubernetes cluster.</em></p>
<p>So are you interested in how it went? Please follow up with my <a class="reference external" href="https://avinal.space/posts/development/lovely-dangerous-things-redhat.html">next blog</a>.</p>
</div>
<hr>
<p align=center>
This Blog is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer">Attribution-NonCommercial 4.0 International<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
</a>
</p>
</div>
</article>
<hr>
<div id="comment-form">
<div class="alert alert-info" role="alert">
Feel free to leave a feedback or question!
</div>
<form action="https://docs.google.com/forms/u/0/d/e/1FAIpQLSfL9T8WBRm-Ac2uyu74lJXSYOqAuF6lLIUAulRArCsuiI1ZRQ/formResponse" target="response" method="POST" id="valid-form">
<div class="form-row align-items-center">
<div class="form-group col-md-5">
<label class="sr-only" for="person-name">Name</label>
<input type="text" class="form-control form-control-sm" id="person-name" placeholder="Your Name (Optional)"
aria-describedby="nameHelp" name="entry.982725972">
<input type="text" id="page-link" name="entry.1641222305" hidden>
<small id="nameHelp" class="form-text text-muted">You may put your GitHub Username.</small>
</div>
<div class="form-group col-md-7">
<label class="sr-only" for="email-address">Email address</label>
<input type="email" class="form-control form-control-sm" id="email-address" aria-describedby="emailHelp"
placeholder="Your Email Address (Optional)" name="entry.1652853191">
<small id="emailHelp" class="form-text text-muted">I'll never share your email with anyone
else.</small>
</div>
</div>
<div class="form-group">
<label class="sr-only" for="comment-section">Your Message</label>
<textarea class="form-control form-control-sm" id="comment-section" rows="3"
placeholder="Please enter your message or feedback. (Required)" aria-describedby="emailHelp"
name="entry.1062656232" required></textarea>
<div class="invalid-feedback">
Please Enter something !
</div>
<small id="textHelp" class="form-text text-muted">Enter upto 200 characters.</small>
</div>
<button class="btn btn-outline-info" type="submit">Send</button>
</form>
<iframe name="response" hidden></iframe>
</div>
<div class="alert alert-info" role="alert" id="comment-message" style="display: none;">
<h4 class="alert-heading">Thanks You 🥳</h4>
<p>Thanks a lot for reading this blog and sending me a feedback. I hope you liked it. I will get back to you
soon if you have added an email.</p>
</div>
<script>
(function () {
'use strict';
window.addEventListener('load', function () {
var form = document.getElementById('valid-form');
form.addEventListener('submit', function (event) {
document.getElementById('page-link').value = window.location.href;
document.getElementById('comment-form').style.display = 'none';
document.getElementById('comment-message').style.display = '';
}, false);
}, false);
})();
</script>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
@@ -1,282 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Developing Minimal Tekton Server | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/posts/development/lovely-dangerous-things-redhat.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/development.atom.xml">
<meta name="description" content="We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster.">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Developing Minimal Tekton Server <a class="reference external image-reference" href="https://github.com/MiniTeks"><img alt="mks_logo" class="align-middle" src="/images/mks_logo.png" style="width: 1.5em;" /></a>
</h1>
<hr>
<article class="article">
<header>
<ul class="list-inline">
<li class="list-inline-item text-muted" title="2022-02-27T20:47:00+05:30">
<i class="fas fa-clock"></i>
Sun 27 February 2022
</li>
<li class="list-inline-item">
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
<li class="list-inline-item">
<i class="fas fa-tag"></i>
<a href="https://avinal.space/tag/kubernetes.html">#kubernetes</a>, <a href="https://avinal.space/tag/redhat.html">#redhat</a>, <a href="https://avinal.space/tag/docker.html">#docker</a>, <a href="https://avinal.space/tag/golang.html">#golang</a>, <a href="https://avinal.space/tag/tekton.html">#tekton</a>, <a href="https://avinal.space/tag/openshift.html">#openshift</a>, <a href="https://avinal.space/tag/intern.html">#intern</a> </li>
</ul>
</header>
<div class="content">
<p style="border: 2px solid var(--pink);border-radius: 7px;" align=center>This blog is a descreptive account of the development of Minimal Tekton Server. This is highly technical in nature, so please make sure that you have sufficient knowledge about Golang, Docker, Kubernetes and TektonCD. You can refer to my <a href="https://avinal.space/posts/development/i-am-loving-it-redhat.html">previous blog</a> to know about these topics.<p><p>As mentioned in my last blog, we were given to implement an application named <strong>Minimal Tekton Server</strong>. The problem statement reads:</p>
<blockquote class="epigraph">
We will be designing and implementing an application that will be talking to Tekton APIs to create resources on a Kubernetes/OpenShift Cluster. The application will expose some fields of the Tekton Resources which the user will provide and then this application will create Tekton resources by talking to Tekton APIs available on the cluster to create the resources based on the user-provided fields.</blockquote>
<p>There are three parts in this project for the application and two more parts for the CI/CD using TektonCD and Kubernetes/OpenShift. I will go through each part descriptively and try to explain what we did.</p>
<div class="section" id="the-architecture-of-mks">
<h2>The Architecture of MKS</h2>
<p>The first task in the development of the Minimal Tekton Server was creating its architectural diagram. Our first diagram was trash compared to the final diagram. Yeah, we learned. I will be explaining our final(obviously) architectural diagram and try to make some sense out of band-aids and duct tapes.</p>
<img alt="The MKS Arhitecture" class="img-fluid my-3" src="/images/mks-architecture.png" />
<p>Let me start with explaining <strong>What are MKS Resources?</strong>. I hope you know at least tidbits about Kubernetes and by the definition: <em>A resource is an endpoint in the Kubernetes API that stores a collection of API objects of a certain kind; for example, the built-in :code:`pods` resource contains a collection of Pod objects.</em> But developers soon realized that these in-built resources were not enough for the ever-growing applications of Kubernetes. Here <a class="reference external" href="https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/">custom resource</a> comes into the picture. <em>A custom resource is an extension of the Kubernetes API that is not necessarily available in a default Kubernetes installation.</em> To define a custom resource we use something called <a class="reference external" href="https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/">Custom Resource Definition</a>. So MKS Resources are such custom resources that correspond to the TektonCD custom resources.</p>
<img alt="A venus flytrap engulphing an insect." class="float-md-right ml-3" src="/images/venus-flytrap.gif" style="width: 250px;" />
<p>Let us now focus on the box containing <code>Controller</code> and <code>API server</code>. The controller can be said as a stimulus-response mechanism. Take the analogy of a Venus Flytrap plant. The trap is initially open. There are <code>trigger</code> hairs on the inside of the trap. Once an insect is detected, there is a change of state and the trap closes in a blick on the eye. The controller works the same way. It listens for the change in the state of the MKS resources and immediately transfers the request to the Tekton API to reflect the change in the corresponding Tekton resources. The changes can be creation, deletion, or updating. The API server ensures that there is a working connection between our controller and the Tekton API.</p>
<p>MKS Server also exposes APIs to introduce a change of state in the MKS resources. In technical terms these are called <code>verbs</code>. There are five such verbs that we have exposed: <code>create</code>, <code>update</code>, <code>get</code>, <code>delete</code>, and <code>list</code>. They can be utilized by a REST client, or in our case <strong>MKS CLI</strong> to introduce desired change. The MKS command-line interface provides commands and subcommands to do the desired tasks.</p>
<p>Whenever there is a change in the state, there is a logic running inside the controller to react on that and that also affects our database. We store four datapoints in our database: <code>created</code>, <code>deleted</code>, <code>completed</code>, and <code>failed</code>. They tell us about the current statistcs of our MKS resource using a single-page web app called <strong>MKS Dashboard</strong> (or UI).</p>
<p>This was about the architecture of the Minimal Tekton Server. Let us jump into more technical stuff.</p>
</div>
<div class="section" id="how-to-implement-a-crd-controller">
<h2>How to implement a CRD controller?</h2>
<p>During this assignment, something that took the most time and effort was the implementation of a controller for our custom resources. This isn't very hard if you go by the rules and do the things according to the well-defined documents and blogs since this is a standard step in the implementation of any custom resource controller. But did we follow the rules? Hell no! But this time, let us go step-by-step.</p>
<ol class="arabic simple">
<li>The first step is to define a <code>CustomResourceDefinition</code> for our custom resource. Let us define a CRD called <code>spacetime</code>. To do this you can write a YAML file like below.</li>
</ol>
<div class="highlight"><pre><span></span><span class="c1"># file: spacetime-crd.yaml</span><span class="w"></span>
<span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">apiextensions.k8s.io/v1</span><span class="w"></span>
<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">CustomResourceDefinition</span><span class="w"></span>
<span class="nt">metadata</span><span class="p">:</span><span class="w"></span>
<span class="c1"># name must match the spec fields below, and be in the form: &lt;plural&gt;.&lt;group&gt;</span><span class="w"></span>
<span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spacetimes.example.com</span><span class="w"></span>
<span class="nt">spec</span><span class="p">:</span><span class="w"></span>
<span class="c1"># group name to use for REST API: /apis/&lt;group&gt;/&lt;version&gt;</span><span class="w"></span>
<span class="nt">group</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">example.com</span><span class="w"></span>
<span class="c1"># list of versions supported by this CustomResourceDefinition</span><span class="w"></span>
<span class="nt">versions</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v1alpha1</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Each version can be enabled/disabled by Served flag.</span><span class="w"></span>
<span class="w"> </span><span class="nt">served</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span><span class="w"></span>
<span class="w"> </span><span class="c1"># One and only one version must be marked as the storage version.</span><span class="w"></span>
<span class="w"> </span><span class="nt">storage</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span><span class="w"></span>
<span class="w"> </span><span class="nt">schema</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">openAPIV3Schema</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">object</span><span class="w"></span>
<span class="w"> </span><span class="nt">properties</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">spec</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">object</span><span class="w"></span>
<span class="w"> </span><span class="nt">properties</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">message</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">string</span><span class="w"></span>
<span class="c1"># either Namespaced or Cluster</span><span class="w"></span>
<span class="nt">scope</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Namespaced</span><span class="w"></span>
<span class="nt">names</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="c1"># plural name to be used in the URL: /apis/&lt;group&gt;/&lt;version&gt;/&lt;plural&gt;</span><span class="w"></span>
<span class="w"> </span><span class="nt">plural</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spacetimes</span><span class="w"></span>
<span class="w"> </span><span class="c1"># singular name to be used as an alias on the CLI and for display</span><span class="w"></span>
<span class="w"> </span><span class="nt">singular</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spacetime</span><span class="w"></span>
<span class="w"> </span><span class="c1"># kind is normally the CamelCased singular type. Your resource manifests use this.</span><span class="w"></span>
<span class="w"> </span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">SpaceTime</span><span class="w"></span>
<span class="w"> </span><span class="c1"># shortNames allow shorter string to match your resource on the CLI</span><span class="w"></span>
<span class="w"> </span><span class="nt">shortNames</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">st</span><span class="w"></span>
</pre></div>
<p>You can learn more about the fields and options <a class="reference external" href="https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/">here</a>. The CRD that we defined above corresponds to the <code>CustomResource</code> given below. Once you apply the above file you will be able to see the <code>spacetime</code> custom resource on your Kubernetes/OpenShift cluster.</p>
<div class="highlight"><pre><span></span><span class="c1"># file: spacetime-cr.yaml</span><span class="w"></span>
<span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spacetimes.example.com/v1alpha1</span><span class="w"></span>
<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">SpaceTime</span><span class="w"></span>
<span class="nt">metadata</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spacetime-cr</span><span class="w"></span>
<span class="nt">spec</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">message</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Hello</span><span class="nv"> </span><span class="s">from</span><span class="nv"> </span><span class="s">space!&quot;</span><span class="w"></span>
</pre></div>
<p>Apply them using the following commands:</p>
<div class="highlight"><pre><span></span>kubectl apply -f spacetime-crd.yaml
kubectl apply -f spacetime-cr.yaml
</pre></div>
<ol class="arabic simple" start="2">
<li>Once we have defined our custom resources, we need to define the types that will correspond to this custom resource definition. This can be done using <code>k8s.io/apimachinery/pkg/apis/meta/v1</code> package written in golang. Did I tell you that this is all in golang? Well, now you know. Create a package structure for a golang project and add the definition of the type as given below.</li>
</ol>
<div class="highlight"><pre><span></span>mkdir -p pkg/api/spacetime/v1alpha1
touch pkg/api/spacetime/v1alpha1/<span class="o">{</span>spacetime_types,register,doc<span class="o">}</span>.go pkg/api/spacetime/register.go
</pre></div>
<p>Add the following content to the corresponding files.</p>
<div class="highlight"><pre><span></span><span class="c1">// file: /pkg/api/spacetime/v1alpha1/spacetime_types.go</span><span class="w"></span>
<span class="kn">package</span><span class="w"> </span><span class="nx">v1alpha1</span><span class="w"></span>
<span class="kn">import</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
<span class="w"> </span><span class="nx">metav1</span><span class="w"> </span><span class="s">&quot;k8s.io/apimachinery/pkg/apis/meta/v1&quot;</span><span class="w"></span>
<span class="p">)</span><span class="w"></span>
<span class="kd">type</span><span class="w"> </span><span class="nx">SpaceTime</span><span class="w"> </span><span class="kd">struct</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nx">metav1</span><span class="p">.</span><span class="nx">TypeMeta</span><span class="w"> </span><span class="s">`json:&quot;,inline&quot;`</span><span class="w"></span>
<span class="w"> </span><span class="nx">metav1</span><span class="p">.</span><span class="nx">ObjectMeta</span><span class="w"> </span><span class="s">`json:&quot;metadata,omitempty&quot;`</span><span class="w"></span>
<span class="w"> </span><span class="nx">Spec</span><span class="w"> </span><span class="nx">SpaceTimeSpec</span><span class="w"> </span><span class="s">`json:&quot;spec&quot;`</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
<span class="kd">type</span><span class="w"> </span><span class="nx">SpaceTimeSpec</span><span class="w"> </span><span class="kd">struct</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nx">Message</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="s">`json:&quot;message&quot;`</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
<span class="kd">type</span><span class="w"> </span><span class="nx">SpaceTimeList</span><span class="w"> </span><span class="kd">struct</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nx">metav1</span><span class="p">.</span><span class="nx">TypeMeta</span><span class="w"> </span><span class="s">`json:&quot;,inline&quot;`</span><span class="w"></span>
<span class="w"> </span><span class="nx">metav1</span><span class="p">.</span><span class="nx">ListMeta</span><span class="w"> </span><span class="s">`json:&quot;metadata&quot;`</span><span class="w"></span>
<span class="w"> </span><span class="nx">Items</span><span class="w"> </span><span class="p">[]</span><span class="nx">SpaceTime</span><span class="w"> </span><span class="s">`json:&quot;items&quot;`</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>
<p><strong>To be Continued</strong></p>
</div>
<hr>
<p align=center>
This Blog is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer">Attribution-NonCommercial 4.0 International<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
</a>
</p>
</div>
</article>
<hr>
<div id="comment-form">
<div class="alert alert-info" role="alert">
Feel free to leave a feedback or question!
</div>
<form action="https://docs.google.com/forms/u/0/d/e/1FAIpQLSfL9T8WBRm-Ac2uyu74lJXSYOqAuF6lLIUAulRArCsuiI1ZRQ/formResponse" target="response" method="POST" id="valid-form">
<div class="form-row align-items-center">
<div class="form-group col-md-5">
<label class="sr-only" for="person-name">Name</label>
<input type="text" class="form-control form-control-sm" id="person-name" placeholder="Your Name (Optional)"
aria-describedby="nameHelp" name="entry.982725972">
<input type="text" id="page-link" name="entry.1641222305" hidden>
<small id="nameHelp" class="form-text text-muted">You may put your GitHub Username.</small>
</div>
<div class="form-group col-md-7">
<label class="sr-only" for="email-address">Email address</label>
<input type="email" class="form-control form-control-sm" id="email-address" aria-describedby="emailHelp"
placeholder="Your Email Address (Optional)" name="entry.1652853191">
<small id="emailHelp" class="form-text text-muted">I'll never share your email with anyone
else.</small>
</div>
</div>
<div class="form-group">
<label class="sr-only" for="comment-section">Your Message</label>
<textarea class="form-control form-control-sm" id="comment-section" rows="3"
placeholder="Please enter your message or feedback. (Required)" aria-describedby="emailHelp"
name="entry.1062656232" required></textarea>
<div class="invalid-feedback">
Please Enter something !
</div>
<small id="textHelp" class="form-text text-muted">Enter upto 200 characters.</small>
</div>
<button class="btn btn-outline-info" type="submit">Send</button>
</form>
<iframe name="response" hidden></iframe>
</div>
<div class="alert alert-info" role="alert" id="comment-message" style="display: none;">
<h4 class="alert-heading">Thanks You 🥳</h4>
<p>Thanks a lot for reading this blog and sending me a feedback. I hope you liked it. I will get back to you
soon if you have added an email.</p>
</div>
<script>
(function () {
'use strict';
window.addEventListener('load', function () {
var form = document.getElementById('valid-form');
form.addEventListener('submit', function (event) {
document.getElementById('page-link').value = window.location.href;
document.getElementById('comment-form').style.display = 'none';
document.getElementById('comment-message').style.display = '';
}, false);
}, false);
})();
</script>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-284
View File
@@ -1,284 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>reStructuredText in GitHub | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/posts/development/rst-guide.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/development.atom.xml">
<meta name="description" content="reStructuredText syntax">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>reStructuredText in GitHub
</h1>
<hr>
<article class="article">
<header>
<ul class="list-inline">
<li class="list-inline-item text-muted" title="2021-02-14T22:47:00+05:30">
<i class="fas fa-clock"></i>
Sun 14 February 2021
</li>
<li class="list-inline-item">
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
<li class="list-inline-item">
<i class="fas fa-tag"></i>
<a href="https://avinal.space/tag/rst.html">#rst</a>, <a href="https://avinal.space/tag/github.html">#github</a> </li>
</ul>
</header>
<div class="content">
<ul>
<li><p class="first">Headers</p>
<div class="highlight"><pre><span></span><span class="gh">Top Title</span>
<span class="gh">=========</span>
<span class="gh">Sub Title</span>
<span class="gh">---------</span>
<span class="gh">Sub Sub Title</span>
<span class="gh">^^^^^^^^^^^^^</span>
</pre></div>
</li>
<li><p class="first">Images</p>
<ul>
<li><p class="first">Direct</p>
<div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">figure</span><span class="p">::</span> image-path-or-url
<span class="nc">:align:</span> center
<span class="nc">:target:</span> link-to-go-when-image-is-clicked
<span class="nc">:alt:</span> alternative-text-if-any
</pre></div>
</li>
<li><p class="first">Indirect</p>
<div class="highlight"><pre><span></span><span class="p">..</span> <span class="nt">|substitution|</span> <span class="ow">image</span><span class="p">::</span> image-path-or-url
<span class="nc">:target:</span> link-to-go-when-image-is-clicked
</pre></div>
<p>You can use <code>|substitution|</code> where you want to put your image.</p>
</li>
</ul>
</li>
<li><p class="first">Links</p>
<div class="highlight"><pre><span></span><span class="s">`Link Text </span><span class="si">&lt;link-itself&gt;</span><span class="s">`__</span>
</pre></div>
</li>
<li><p class="first">Lists</p>
<div class="highlight"><pre><span></span><span class="m">-</span> item 1
<span class="m">-</span> item 2
<span class="m">*</span> item 1
<span class="m">*</span> itme 2
<span class="m">#.</span> item 1
<span class="m">#.</span> item 2
<span class="m">1.</span> item 1
<span class="m">2.</span> item 2
</pre></div>
<p>First two lists are unordered next two are ordered.</p>
</li>
<li><p class="first">Code</p>
<ul>
<li><p class="first">Inline</p>
<div class="highlight"><pre><span></span><span class="na">:code:</span><span class="nv">`your-code`</span>
</pre></div>
</li>
<li><p class="first">Code block</p>
<div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">code-block</span><span class="p">::</span> <span class="k">language(optional)</span>
<span class="s"> Your code</span>
<span class="s"> in multiple lines. You may enable line numbers too.</span>
</pre></div>
</li>
</ul>
</li>
<li><p class="first">Tables</p>
<div class="highlight"><pre><span></span>+----------------+----------------+
<span class="o">|</span> Header Cell | Header Cell |
+================+================+
<span class="o">|</span> Data cell | Data Cell |
+----------------+----------------+
<span class="o">|</span> Header Cell | Header Cell |
+----------------+----------------+
</pre></div>
</li>
<li><p class="first">Raw HTML block</p>
<div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">raw</span><span class="p">::</span> html
&lt;put&gt;
your html code here
&lt;/put&gt;
</pre></div>
</li>
<li><p class="first">Notes, warnings</p>
<div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">note</span><span class="p">::</span>
Put your note here.
<span class="p">..</span> <span class="ow">warning</span><span class="p">::</span>
Put your warning here.
<span class="p">..</span> <span class="ow">important</span><span class="p">::</span>
Put instructions here.
<span class="p">..</span> <span class="ow">admonition</span><span class="p">::</span> custom-text
Custom description here.
</pre></div>
</li>
</ul>
<p>These all are supported by GitHub very well. For more exhautive list specific to Sphinx see <a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html">this</a> link.</p>
<div class="section" id="tips">
<h2>Tips</h2>
<ul class="simple">
<li>There must be a blank line before and after any directive. Such as after title or code block, tables etc.</li>
<li>The options and content of a directives must be 1 tab indented to the directives.</li>
</ul>
</div>
<hr>
<p align=center>
This Blog is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer">Attribution-NonCommercial 4.0 International<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
</a>
</p>
</div>
</article>
<hr>
<div id="comment-form">
<div class="alert alert-info" role="alert">
Feel free to leave a feedback or question!
</div>
<form action="https://docs.google.com/forms/u/0/d/e/1FAIpQLSfL9T8WBRm-Ac2uyu74lJXSYOqAuF6lLIUAulRArCsuiI1ZRQ/formResponse" target="response" method="POST" id="valid-form">
<div class="form-row align-items-center">
<div class="form-group col-md-5">
<label class="sr-only" for="person-name">Name</label>
<input type="text" class="form-control form-control-sm" id="person-name" placeholder="Your Name (Optional)"
aria-describedby="nameHelp" name="entry.982725972">
<input type="text" id="page-link" name="entry.1641222305" hidden>
<small id="nameHelp" class="form-text text-muted">You may put your GitHub Username.</small>
</div>
<div class="form-group col-md-7">
<label class="sr-only" for="email-address">Email address</label>
<input type="email" class="form-control form-control-sm" id="email-address" aria-describedby="emailHelp"
placeholder="Your Email Address (Optional)" name="entry.1652853191">
<small id="emailHelp" class="form-text text-muted">I'll never share your email with anyone
else.</small>
</div>
</div>
<div class="form-group">
<label class="sr-only" for="comment-section">Your Message</label>
<textarea class="form-control form-control-sm" id="comment-section" rows="3"
placeholder="Please enter your message or feedback. (Required)" aria-describedby="emailHelp"
name="entry.1062656232" required></textarea>
<div class="invalid-feedback">
Please Enter something !
</div>
<small id="textHelp" class="form-text text-muted">Enter upto 200 characters.</small>
</div>
<button class="btn btn-outline-info" type="submit">Send</button>
</form>
<iframe name="response" hidden></iframe>
</div>
<div class="alert alert-info" role="alert" id="comment-message" style="display: none;">
<h4 class="alert-heading">Thanks You 🥳</h4>
<p>Thanks a lot for reading this blog and sending me a feedback. I hope you liked it. I will get back to you
soon if you have added an email.</p>
</div>
<script>
(function () {
'use strict';
window.addEventListener('load', function () {
var form = document.getElementById('valid-form');
form.addEventListener('submit', function (event) {
document.getElementById('page-link').value = window.location.href;
document.getElementById('comment-form').style.display = 'none';
document.getElementById('comment-message').style.display = '';
}, false);
}, false);
})();
</script>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-288
View File
@@ -1,288 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>How I Created This Blog? | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/posts/development/twilight-blog.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/development.atom.xml">
<meta name="description" content="As you would have guessed by now, this blog is created using one such awesome SSG named Pelican. Pelican is simple, customizable and offers lots of themes and plugins. Pelican is python based SSG and is available through pip.">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>How I Created This Blog?
</h1>
<hr>
<article class="article">
<header>
<ul class="list-inline">
<li class="list-inline-item text-muted" title="2021-01-26T16:47:00+05:30">
<i class="fas fa-clock"></i>
Tue 26 January 2021
</li>
<li class="list-inline-item">
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
<li class="list-inline-item">
<i class="fas fa-tag"></i>
<a href="https://avinal.space/tag/blog.html">#blog</a>, <a href="https://avinal.space/tag/pelican.html">#pelican</a>, <a href="https://avinal.space/tag/ssg.html">#ssg</a> </li>
</ul>
</header>
<div class="content">
<p><span class="html-raw"><div class="alert alert-info" role="alert">This article may not be for you if you are a web developer. You already got better options. 😉</div></span></p>
<p>There are lots of ways to create a personal website or a blog. You can design your own user interface and write the backend code. But not everyone is a web developer. And here comes <abbr title="Static Site Generator">SSGs</abbr> to the rescue. <strong>Static Site Generators</strong> are little more than just website generators. In general, if you are looking for a simple blog, its better to use SSG than writing a lot of html and css. They are simple and elegant. Easy to maintain and you can add lots of customizations to your site without breaking or bloating your blog. There are lots of SSGs, <a class="reference external" href="https://jekyllrb.com/">Jekyll</a>, <a class="reference external" href="https://blog.getpelican.com/">Pelican</a> and more complex ones like <a class="reference external" href="https://www.gatsbyjs.com/">Gatsby</a>, <a class="reference external" href="https://gohugo.io/">Hugo</a> .</p>
<p>As you would have guessed by now, this blog is created using one such awesome SSG named <strong>Pelican</strong>. Pelican is simple, customizable and offers lots of <a class="reference external" href="http://www.pelicanthemes.com/">themes</a> and <a class="reference external" href="https://github.com/getpelican/pelican-plugins">plugins</a>. Pelican is python based SSG and is available through <code>pip</code>.</p>
<div class="highlight"><pre><span></span><span class="c1"># for reStructuredText only (recommended)</span>
python -m pip install pelican
<span class="c1"># for markdown and reStructuredText both</span>
python -m pip install <span class="s2">&quot;pelican[markdown]&quot;</span>
</pre></div>
<p>You can start a pelican project by typing following command. It will create a basic template and build configurations.</p>
<div class="highlight"><pre><span></span>pelican-quickstart
<span class="c1"># output</span>
yourproject/
├── content <span class="c1"># Put your content here</span>
│ └── <span class="o">(</span>pages<span class="o">)</span>
├── output <span class="c1"># Output files</span>
├── tasks.py
├── Makefile <span class="c1"># Makefile to run build and publish command</span>
├── pelicanconf.py <span class="c1"># Main settings file</span>
└── publishconf.py <span class="c1"># Settings to use when ready to publish</span>
</pre></div>
<p>Next step is to choose themes. As I said earlier there are lots of <a class="reference external" href="http://www.pelicanthemes.com/">themes</a> . And it is easy to create your own theme. Check <a class="reference external" href="https://docs.getpelican.com/en/latest/themes.html">here</a> to create your own theme. My choice of theme was <a class="reference external" href="https://nairobilug.github.io/pelican-alchemy/">pelican-alchemy</a> . This is a simple and great theme. Installing and removing themes in pelican is very easy.</p>
<div class="highlight"><pre><span></span><span class="c1"># list all installed themes</span>
pelican-themes -l
<span class="c1"># output</span>
simple
alchemy
notmyidea
<span class="c1"># install new theme</span>
pelican-themes -i theme-path
<span class="c1"># remove a theme</span>
pelican-themes -r theme-name
</pre></div>
<p>To use a particular theme, set the <code>THEME</code> variable in the <strong>pelicanconf.py</strong> file.</p>
<div class="highlight"><pre><span></span><span class="n">THEME</span> <span class="o">=</span> <span class="s1">&#39;alchemy&#39;</span>
</pre></div>
<p>You can also use a theme that is not installed if you have all the required theme files. Just set this variable to its path.</p>
<div class="highlight"><pre><span></span><span class="n">THEME</span> <span class="o">=</span> <span class="s1">&#39;path-to-theme-directory&#39;</span>
</pre></div>
<p>Various themes will have different feature, choose according to your need, or you can always add a feature through plugin. The next step is to build and check your blog. Pelican got it all set up.</p>
<div class="highlight"><pre><span></span><span class="c1"># build your website</span>
make html
<span class="c1"># output</span>
<span class="s2">&quot;pelican&quot;</span> <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/content&quot;</span> -o <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/output&quot;</span> -s <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/pelicanconf.py&quot;</span>
Done: Processed <span class="m">6</span> articles, <span class="m">0</span> drafts, <span class="m">1</span> page, <span class="m">0</span> hidden pages and <span class="m">0</span> draft pages <span class="k">in</span> <span class="m">2</span>.43 seconds.
<span class="c1"># build and test/serve on localhost</span>
make serve
<span class="c1"># output</span>
<span class="s2">&quot;pelican&quot;</span> -l <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/content&quot;</span> -o <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/output&quot;</span> -s <span class="s2">&quot;/mnt/z/my_git/avinal.github.io/pelicanconf.py&quot;</span>
Serving site at: <span class="m">127</span>.0.0.1:8000 - Tap CTRL-C to stop
</pre></div>
<p>Now open your browser and open <a class="reference external" href="127.0.0.1:8000">127.0.0.1:8000</a> or <a class="reference external" href="localhost:8000">localhost:8000</a>. You should be able to see your new blog. Stop local server using <code>CTRL+C</code>. Next step is to publish it to github pages. Pelican has tools for this too. But wait we can do something more interesting here. Why not let GitHub take care of both building and publishing? Just push this project to a GitHub repository and set up GitHub pages. See <a class="reference external" href="https://pages.github.com/">this</a> help for instructions on that. Before pushing to GitHub add this little script to your project.</p>
<div class="highlight"><pre><span></span><span class="ch">#! /bin/bash</span>
<span class="c1">## file: publi.sh</span>
<span class="c1"># install tools</span>
sudo apt-get install -y git make python3 python3-pip python3-setuptools python3-wheel
<span class="c1"># setup github config</span>
git config user.email <span class="s2">&quot;your-email&quot;</span>
git config user.name <span class="s2">&quot;your-username&quot;</span>
<span class="c1"># install dependencies</span>
sudo pip3 install -r requirements.txt
<span class="c1"># pelican commands - install theme put your theme in themes directory</span>
pelican-themes --install themes/theme-name
<span class="c1"># publish to github pages</span>
ghp-import -m <span class="s2">&quot;Generate Pelican site&quot;</span> -b gh-pages output
git push -f origin gh-pages
</pre></div>
<p>Now once your project is on GitHub, go to the <strong>Actions</strong> tab and click on <em>set up a workflow yourself</em> and paste the following code into the file and commit it.</p>
<div class="highlight"><pre><span></span><span class="c1"># file: publish.yml</span><span class="w"></span>
<span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Publish Blog</span><span class="w"></span>
<span class="nt">on</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">push</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">branches</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="w"> </span><span class="nv">main</span><span class="w"> </span><span class="p p-Indicator">]</span><span class="w"></span>
<span class="w"> </span><span class="nt">pull_request</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">branches</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="w"> </span><span class="nv">main</span><span class="w"> </span><span class="p p-Indicator">]</span><span class="w"></span>
<span class="nt">jobs</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">build</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ubuntu-latest</span><span class="w"></span>
<span class="w"> </span><span class="nt">steps</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">actions/checkout@v2</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">set up permissions</span><span class="w"></span>
<span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">chmod +x publi.sh</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Run a multi-line script</span><span class="w"></span>
<span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">./publi.sh</span><span class="w"></span>
</pre></div>
<p>If you have done everything correctly then go to <em>https://username.github.io</em> and you should see your blog. From now on whenever you want to add an article, just write it, test locally and push. Yay your blog is ready.</p>
<p><span class="html-raw"><h2 style=font-family:Exodar;font-weight:lighter;">But My Blog is Special 🥰</h2></span></p>
<p>My blog looks different, that is because I customized this theme a lot, especially headers, footers, and link appearance. And sorry I won't be publish my theme any time sooner. But I am listing down all the resources I have used for finally getting this result. You can always get my help by sending me a <span class="html-raw"><a href="mailto:avinal.xlvii@gmail.com" class="fa fa-envelope" style="text-decoration: none;"></a></span> or starting a discussion on <span class="html-raw"><a href="https://github.com/avinal/avinal/discussions/2" class="fab fa-github" style="text-decoration: none;"></a></span>.</p>
<ul class="simple">
<li><a class="reference external" href="https://blog.getpelican.com/">Pelican Blog</a></li>
<li><a class="reference external" href="https://docs.getpelican.com/en/latest/">Pelican Docs</a></li>
<li><a class="reference external" href="http://www.pelicanthemes.com/">Pelican Themes</a></li>
<li><a class="reference external" href="https://github.com/nairobilug/pelican-alchemy">Pelican Alchemy Theme</a></li>
<li><a class="reference external" href="https://codepen.io/saransh/pen/BKJun">Parallax Star background in CSS</a></li>
<li><a class="reference external" href="https://codepen.io/kowlor/pen/ZYYQoy">Solar System animation</a></li>
<li><span class="html-raw"><a href="https://www.dafont.com/exodar.font" style="font-family: Exodar;font-weight: lighter;text-decoration: none;">EXODAR Font</a></span></li>
<li><a class="reference external" href="https://fonts.google.com/specimen/Overpass+Mono">Overpass Mono</a></li>
<li><a class="reference external" href="https://fontawesome.com/how-to-use/on-the-web/setup/hosting-font-awesome-yourself">Font Awesome</a></li>
</ul>
<p><span class="html-raw"><div class="alert alert-warning" role="alert">Some of the fonts I have used in my blog may not be available for commercial use. Please check if you intend to do so. Alternatively you may use fonts from this wonderful collection, <a href="https://www.websiteplanet.com/blog/best-free-fonts/">70+ Best Free Fonts for Designers Free for Commercial Use in 2021</a> <i>(Thanks Ritta Blens for this suggestion)</i></div></span></p>
<p><span class="html-raw"><p align=center>Thanks!</p></span></p>
<hr>
<p align=center>
This Blog is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer">Attribution-NonCommercial 4.0 International<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
</a>
</p>
</div>
</article>
<hr>
<div id="comment-form">
<div class="alert alert-info" role="alert">
Feel free to leave a feedback or question!
</div>
<form action="https://docs.google.com/forms/u/0/d/e/1FAIpQLSfL9T8WBRm-Ac2uyu74lJXSYOqAuF6lLIUAulRArCsuiI1ZRQ/formResponse" target="response" method="POST" id="valid-form">
<div class="form-row align-items-center">
<div class="form-group col-md-5">
<label class="sr-only" for="person-name">Name</label>
<input type="text" class="form-control form-control-sm" id="person-name" placeholder="Your Name (Optional)"
aria-describedby="nameHelp" name="entry.982725972">
<input type="text" id="page-link" name="entry.1641222305" hidden>
<small id="nameHelp" class="form-text text-muted">You may put your GitHub Username.</small>
</div>
<div class="form-group col-md-7">
<label class="sr-only" for="email-address">Email address</label>
<input type="email" class="form-control form-control-sm" id="email-address" aria-describedby="emailHelp"
placeholder="Your Email Address (Optional)" name="entry.1652853191">
<small id="emailHelp" class="form-text text-muted">I'll never share your email with anyone
else.</small>
</div>
</div>
<div class="form-group">
<label class="sr-only" for="comment-section">Your Message</label>
<textarea class="form-control form-control-sm" id="comment-section" rows="3"
placeholder="Please enter your message or feedback. (Required)" aria-describedby="emailHelp"
name="entry.1062656232" required></textarea>
<div class="invalid-feedback">
Please Enter something !
</div>
<small id="textHelp" class="form-text text-muted">Enter upto 200 characters.</small>
</div>
<button class="btn btn-outline-info" type="submit">Send</button>
</form>
<iframe name="response" hidden></iframe>
</div>
<div class="alert alert-info" role="alert" id="comment-message" style="display: none;">
<h4 class="alert-heading">Thanks You 🥳</h4>
<p>Thanks a lot for reading this blog and sending me a feedback. I hope you liked it. I will get back to you
soon if you have added an email.</p>
</div>
<script>
(function () {
'use strict';
window.addEventListener('load', function () {
var form = document.getElementById('valid-form');
form.addEventListener('submit', function (event) {
document.getElementById('page-link').value = window.location.href;
document.getElementById('comment-form').style.display = 'none';
document.getElementById('comment-message').style.display = '';
}, false);
}, false);
})();
</script>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-377
View File
@@ -1,377 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Create the VLC User Documentation for one Mobile Port(Android) | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/posts/development/vlc-gsod-report.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/development.atom.xml">
<meta name="description" content="The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLCs wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization.">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Create the VLC User Documentation for one Mobile Port(Android)
</h1>
<hr>
<article class="article">
<header>
<ul class="list-inline">
<li class="list-inline-item text-muted" title="2020-12-01T23:47:00+05:30">
<i class="fas fa-clock"></i>
Tue 01 December 2020
</li>
<li class="list-inline-item">
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
<li class="list-inline-item">
<i class="fas fa-tag"></i>
<a href="https://avinal.space/tag/vlc.html">#vlc</a>, <a href="https://avinal.space/tag/gsod.html">#gsod</a>, <a href="https://avinal.space/tag/gsod2020.html">#gsod2020</a> </li>
</ul>
</header>
<div class="content">
<div class="section" id="overview">
<h2>OVERVIEW</h2>
<p>VideoLAN is a non-profit organization that develops software for playing video and other media formats. VLC media player (commonly known as just VLC) is a free and Open Source cross-platform multimedia player and framework that plays most multimedia files as well as DVDs, Audio CDs, VCDs, and various streaming protocols built by the VideoLAN organization and a team of volunteers. VLC for Android is a port of the VLC for Android OS.</p>
<p>The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLCs wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization and an engaging and easy to follow for both technical and non-technical users. The original proposal can be found here.</p>
</div>
<div class="section" id="project-goals">
<h2>PROJECT GOALS</h2>
<ul class="simple">
<li>Propose a new structure for documentation e.g. Chapter Separation, Sections etc</li>
<li>Proper balance between technical and non-technical descriptions to serve all kinds of users.</li>
<li>Adequate amount of screenshots in each section and other supporting media to make documentation more appealing.</li>
<li>Optimized for all Screen Sizes. Especially for Mobile Devices.</li>
<li>Ease of navigation</li>
</ul>
</div>
<div class="section" id="community-bonding">
<h2>COMMUNITY BONDING</h2>
<p>This period was mostly utilized for collecting more information and many internal meetings to shape the projects and bonding with fellow writers, developers(mentors). I got to know more about the VLC organization and the project. We decided to create a skeleton of the project and then follow a Issue-Merge Request-Review-Merge system to keep the commit history clean and maintain the proper review of the work before it is merged.</p>
<p>I initially proposed that the new documentation should also use the same tools(Sphinx and GitLab Pages) because if in future we want to merge all the documentation into a single one, it will be easier to migrate and will provide a consistency across all documentations. Later I got to know that this will be an independent project and may not be merged since it solves a lot of problems. I was already familiar with the tools so it took no time to get started.</p>
<p>Nicolas Pomepuy, who is the lead developer of VLC for Android was assigned as my primary mentor and Simon Latapie as secondary mentor.</p>
</div>
<div class="section" id="documentation-development-phase">
<h2>DOCUMENTATION DEVELOPMENT PHASE</h2>
<p>Initial Preparation
I first moved my existing demo documentation to an entirely new repository with only the skeleton at the suggestion of my mentor. It was necessary to keep the commit history clean. The skeleton contained the empty directories representing the chapter separation. I got to learn “how to properly develop a project and contribute to open source”. This was a major lesson that got me familiar with the Merge Request and Review system.</p>
<p>The Development
The next part was to frame the actual documentation pages and push to the repository. Since there was a significant time-zone difference we agreed to discuss by creating issues and sometimes my emails. There was one meeting every fortnight to check the process and discuss further development and blockers. Nicolas was really helpful and patient, answering each of my big-small queries.</p>
<p>Work Done</p>
<style>
table,td,th {
border-collapse:collapse;
border: 1px solid #000000;
}
</style>
<table>
<tr>
<td><strong>Documentation</strong></td>
<td><a href="https://avinal.videolan.me/vlc-android-user/">VLC for Android User Documentation </a>
</td>
</tr>
<tr>
<td><strong>Project Repository</strong>
</td>
<td><a href="https://code.videolan.org/avinal/vlc-android-user">Projects · Avinal Kumar / VLC for Android User Documentation</a>
</td>
</tr>
<tr>
<td><strong>Commits</strong>
</td>
<td><a href="https://code.videolan.org/avinal/vlc-android-user/-/commits/master">Commits · Avinal Kumar / VLC for Android User Documentation</a>
</td>
</tr>
<tr>
<td><strong>Issues/Discussions</strong>
</td>
<td><a href="https://code.videolan.org/avinal/vlc-android-user/-/issues">Issues · Avinal Kumar / VLC for Android User Documentation</a>
</td>
</tr>
<tr>
<td><strong>Merge Requests</strong>
</td>
<td><a href="https://code.videolan.org/avinal/vlc-android-user/-/merge_requests">Merge Requests · Avinal Kumar / VLC for Android User Documentation</a>
</td>
</tr>
</table><p>Since the Android port of VLC can be installed on Android Smartphones/Tablets, Android TVs, Amazon Fire Devices and Chromebooks too, a full documentation will cover these all devices. Although these are different form factors, the features provided on each of them is exactly the same and the same documentation can be used for all these devices. As of now only Smartphones/Tablets are covered. And later additional pages will be added to reference different features/User Interface. Regardless of this addition the current documentation can serve a major part for all these form factors.
Completed/Remaining</p>
<table>
<tr>
<td><strong>Chapters</strong>
</td>
<td><strong>Sections</strong>
</td>
<td><strong>Status</strong>
</td>
</tr>
<tr>
<td><strong>Settings</strong>
</td>
<td>
<ul>
<li>General Settings
<li>Interface
<li>Video
<li>Subtitles
<li>Audio
<li>Casting
<li>Advanced
</li>
</ul>
</td>
<td><strong>ALL COMPLETED</strong>
<p>
<strong>FOR ALL FORM FACTORS</strong>
</td>
</tr>
<tr>
<td><strong>Video</strong>
</td>
<td>
<ul>
<li>Video Explorer
<li>Video Player
</li>
</ul>
</td>
<td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong>
</td>
</tr>
<tr>
<td><strong>Audio</strong>
</td>
<td>
<ul>
<li>Audio Explorer
<li>Audio Player
</li>
</ul>
</td>
<td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong>
</td>
</tr>
<tr>
<td><strong>Browse</strong>
</td>
<td>
<ul>
<li>Explorer
<li>Local Network
</li>
</ul>
</td>
<td><strong>ONLY SMB IN LOCAL NETWORK COMPLETED</strong>
</td>
</tr>
<tr>
<td><strong>Installation</strong>
</td>
<td>
<ul>
<li>Smartphones/Tablets
<li>Android TV
<li>Fire Devices
<li>Chromebooks
</li>
</ul>
</td>
<td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong>
</td>
</tr>
<tr>
<td><strong>User Interface</strong>
</td>
<td>
<ul>
<li>Smartphones/Tablets
<li>Android TV
<li>Fire Devices
<li>Chromebooks
</li>
</ul>
</td>
<td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong>
</td>
</tr>
<tr>
<td><strong>Support</strong>
</td>
<td>
<ul>
<li>FAQs
<li>Help
</li>
</ul>
</td>
<td><strong>IN PROGRESS</strong>
</td>
</tr>
<tr>
<td><strong>Guidelines</strong>
</td>
<td>
<ul>
<li>Contribution Guideline
<li>Screenshot Guidelines
<li>READMEs
</li>
</ul>
</td>
<td><strong>IN PROGRESS</strong>
</td>
</tr>
</table></div>
<div class="section" id="challenges">
<h2>CHALLENGES</h2>
<p>The major obstacle was to get screenshots for all form factors. Since screenshots were the major part of this documentation it was necessary to provide proper screenshots in each chapter and with every step. For Android TV and Smartphone this was solved by using emulators instead of actual devices, but to emulate the actual scenario in an emulator was sometimes very difficult.
There were many occasions where I was not able to gather the exact information about devices other than smartphones/tables. Since all form factors share a common pool of features, my mentor suggested that I focus on smartphones/tables. And to create issues mentioning missing parts so that it could be solved later.</p>
</div>
<div class="section" id="thanks">
<h2>THANKS</h2>
<p>I want to thank my mentors for being supporting and helpful. I want to thank every person at VLC and Google who were involved in this whole process. Thanks and Congrats to my fellow writer Abhishek Pratap Singh. This was a great opportunity to learn and meet awesome people. I learned a lot about Sphinx, reStructured Text and many other things.</p>
</div>
<hr>
<p align=center>
This Blog is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer">Attribution-NonCommercial 4.0 International<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
</a>
</p>
</div>
</article>
<hr>
<div id="comment-form">
<div class="alert alert-info" role="alert">
Feel free to leave a feedback or question!
</div>
<form action="https://docs.google.com/forms/u/0/d/e/1FAIpQLSfL9T8WBRm-Ac2uyu74lJXSYOqAuF6lLIUAulRArCsuiI1ZRQ/formResponse" target="response" method="POST" id="valid-form">
<div class="form-row align-items-center">
<div class="form-group col-md-5">
<label class="sr-only" for="person-name">Name</label>
<input type="text" class="form-control form-control-sm" id="person-name" placeholder="Your Name (Optional)"
aria-describedby="nameHelp" name="entry.982725972">
<input type="text" id="page-link" name="entry.1641222305" hidden>
<small id="nameHelp" class="form-text text-muted">You may put your GitHub Username.</small>
</div>
<div class="form-group col-md-7">
<label class="sr-only" for="email-address">Email address</label>
<input type="email" class="form-control form-control-sm" id="email-address" aria-describedby="emailHelp"
placeholder="Your Email Address (Optional)" name="entry.1652853191">
<small id="emailHelp" class="form-text text-muted">I'll never share your email with anyone
else.</small>
</div>
</div>
<div class="form-group">
<label class="sr-only" for="comment-section">Your Message</label>
<textarea class="form-control form-control-sm" id="comment-section" rows="3"
placeholder="Please enter your message or feedback. (Required)" aria-describedby="emailHelp"
name="entry.1062656232" required></textarea>
<div class="invalid-feedback">
Please Enter something !
</div>
<small id="textHelp" class="form-text text-muted">Enter upto 200 characters.</small>
</div>
<button class="btn btn-outline-info" type="submit">Send</button>
</form>
<iframe name="response" hidden></iframe>
</div>
<div class="alert alert-info" role="alert" id="comment-message" style="display: none;">
<h4 class="alert-heading">Thanks You 🥳</h4>
<p>Thanks a lot for reading this blog and sending me a feedback. I hope you liked it. I will get back to you
soon if you have added an email.</p>
</div>
<script>
(function () {
'use strict';
window.addEventListener('load', function () {
var form = document.getElementById('valid-form');
form.addEventListener('submit', function (event) {
document.getElementById('page-link').value = window.location.href;
document.getElementById('comment-form').style.display = 'none';
document.getElementById('comment-message').style.display = '';
}, false);
}, false);
})();
</script>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-311
View File
@@ -1,311 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>How I implemented WakaTime embeddable Coding Graph GHA? | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/posts/development/wakatime-readme.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/development.atom.xml">
<meta name="description" content="f you use WakaTime to track your coding activity. You can add that to your README as a bar graph or embed it in your blog/portfolio. Just add this action to any of your repositories and there you have it.">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>How I implemented WakaTime embeddable Coding Graph GHA?
</h1>
<hr>
<article class="article">
<header>
<ul class="list-inline">
<li class="list-inline-item text-muted" title="2021-02-02T21:47:00+05:30">
<i class="fas fa-clock"></i>
Tue 02 February 2021
</li>
<li class="list-inline-item">
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
<li class="list-inline-item">
<i class="fas fa-tag"></i>
<a href="https://avinal.space/tag/wakatime.html">#wakatime</a>, <a href="https://avinal.space/tag/github-action.html">#github-action</a>, <a href="https://avinal.space/tag/coding.html">#coding</a> </li>
</ul>
</header>
<div class="content">
<a href="https://github.com/avinal/Profile-Readme-WakaTime"><img src="https://raw.githubusercontent.com/avinal/Profile-Readme-WakaTime/b281d074ee75f9626b39d10e2e518c6a297208a3/waka.png" class="img-fluid"></a><div class="section" id="implementation-details">
<h2>Implementation Details</h2>
<p>This GitHub Action is divided into three parts. I didn't want to use Docker but it seems it doesn't work well without it. Let dive a little into technical details. Three parts are as below.</p>
<ol class="arabic simple">
<li><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py">main.py</a> python script. This script contains many procedures.</li>
</ol>
<ul>
<li><p class="first"><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L52">Getting JSON data file via WakaTime API</a></p>
<blockquote>
<div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">get_stats</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">:</span>
<span class="o">...</span>
<span class="k">return</span> <span class="n">data_list</span>
</pre></div>
</blockquote>
<p>This function parses the JSON file received and scraps out the useful data as a list of lists. Data scraped are language list, time spent on each language, percentage of the time, start date, and end date. For this action, I have limited the number of languages to 5 however it should be very easy to increase that number.</p>
</li>
<li><p class="first"><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L13">Setting the Timeline</a></p>
<blockquote>
<div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">this_week</span><span class="p">(</span><span class="n">dates</span><span class="p">:</span> <span class="nb">list</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="o">...</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;Coding Activity During: </span><span class="si">{</span><span class="n">week_start</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%d</span><span class="s1"> %B, %Y&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">week_end</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%d</span><span class="s1"> %B, %Y&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</pre></div>
</blockquote>
<p>The start date and end date scraped in the last function are used here to set the timeline. Because date in JSON is provided in UTC as below :</p>
<blockquote>
<div class="highlight"><pre><span></span><span class="err">da</span><span class="kc">te</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;YYYY-MM-DDTHH:MM:SSZ&quot;</span><span class="w"></span>
</pre></div>
</blockquote>
<p>I striped it to simple dates only. We can set them manually by taking the current time from the system. But that method is flawed. But this method ensures that JSON was received latest and the request was successful. Any anomaly will point to a failure in request.</p>
</li>
<li><p class="first"><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L21">Creating a bar graph</a></p>
<blockquote>
<div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">make_graph</span><span class="p">(</span><span class="n">data</span><span class="p">:</span> <span class="nb">list</span><span class="p">):</span>
<span class="o">...</span>
<span class="n">savefig</span><span class="p">(</span><span class="o">...</span><span class="p">)</span>
</pre></div>
</blockquote>
<p>Lastly, it is time to generate the graph and save them as an image. This function uses the data scraped in the first step. Creating a bar graph using <cite>matplotlib</cite> is easy. Decorating was a bit difficult. I wanted this graph to merge with GitHub's look so I chose to color the bar as GitHub colors the languages. That data is stored as <cite>colors.json</cite>. Many of the languages have slightly different spelling in GitHub as compared to WakaTime. So some languages are shown in default color. That can be improved if we notice that language and change its color manually. Lastly, the graph is saved both as SVG and PNG. SVGs are better to put on a responsive page.</p>
</li>
</ul>
<ol class="arabic" start="2">
<li><p class="first"><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/entrypoint.sh">entrypoint.py</a> shell script. This shell script clones the repository copies the image and pushes changes to the master. There were several problems. First of all authentication. This was solved by using a remote repository address using GitHub Token. And it seems that GitHub doesn't allow to commit without a username and email. So I used <strong>github-actions</strong> bot email.</p>
<blockquote>
<div class="highlight"><pre><span></span>remote_repo-<span class="s2">&quot;https://</span><span class="si">${</span><span class="nv">GITHUB_ACTOR</span><span class="si">}</span><span class="s2">:</span><span class="si">${</span><span class="nv">INPUT_GITHUB_TOKEN</span><span class="si">}</span><span class="s2">@github.com/</span><span class="si">${</span><span class="nv">GITHUB_REPOSITORY</span><span class="si">}</span><span class="s2">.git&quot;</span>
git config user.email <span class="s2">&quot;41898282+github-actions[bot]@users.noreply.github.com&quot;</span>
git config user.name <span class="s2">&quot;GitHub Actions&quot;</span>
</pre></div>
</blockquote>
</li>
</ol>
<blockquote>
<p><code>41898282</code> is the id assigned to the github-actions bot. Don't ask where I found them 🙂.</p>
<p>Another problem was to separate repository name from combined <em>username/repository-name</em> provided by <cite>${GITHUB_REPOSITORY}</cite>. GitHub doesn't provides a direct way to get just the repo name. We used <em>Internal Field Separator</em>. It returns an array and works similar to <code>split()</code> command in Python and Java.</p>
<blockquote>
<div class="highlight"><pre><span></span><span class="c1"># &#39;/&#39; is the seperator</span>
IFS-<span class="s1">&#39;/&#39;</span> <span class="nb">read</span> -ra reponame <span class="o">&lt;&lt;&lt;</span> <span class="s2">&quot;</span><span class="si">${</span><span class="nv">GITHUB_REPOSITORY</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="c1"># returned {username, repository}</span>
repository-<span class="s2">&quot;</span><span class="si">${</span><span class="nv">reponame</span><span class="p">[1]</span><span class="si">}</span><span class="s2">&quot;</span>
</pre></div>
</blockquote>
</blockquote>
<p>After that, all other commands are pretty straight. Commit the added files and push them.</p>
<ol class="arabic simple" start="3">
<li><a class="reference external" href="https://github.com/avinal/Profile-Readme-WakaTime/blob/master/Dockerfile">Dockerfile</a> <strong>IMPORTANT</strong> It took a lot of time to reach this state 🥱. This is where all the magic happens. I am running <cite>ubuntu:latest</cite> inside the container. I first update the distribution. Then install the required python packages. Lastly, I invoke the python script and shell script.</li>
</ol>
<p>There was an almost impossible problem, I searched hundreds of posts that <em>how can I access the generated files inside Docker container</em>, but no luck. But at last, I found a workaround(obviously otherwise you wouldn't be reading this by now 🤣) each command is run in a separate virtual sub-container. As the command ends its output is also lost but not when you club multiple commands together. At least not until every command is finished. The generated files are available to the next clubbed process. I did that by combining the python script run and shell script run.</p>
<div class="highlight"><pre><span></span><span class="k">CMD</span><span class="w"> </span>python3 /main.py <span class="o">&amp;&amp;</span> /entrypoint.sh
</pre></div>
<p>This part is the smallest yet took the most time and tries while developing this action.</p>
</div>
<div class="section" id="how-to-use-this-github-actions">
<h2>How to use this GitHub Actions?</h2>
<ol class="arabic">
<li><p class="first">First get your WakaTime API Key. You can get it from your [WakaTime](<a class="reference external" href="https://wakatime.com">https://wakatime.com</a>) account settings.</p>
</li>
<li><p class="first">Save WakaTime API Key to Repository Secret. Find that by clicking the Settings tab. Keep the name of the secret as <strong>WAKATIME_API_KEY</strong>.</p>
</li>
<li><p class="first">Add the following line in your README.md of your repo.</p>
<blockquote>
<div class="highlight"><pre><span></span><span class="p">&lt;</span><span class="nt">img</span> <span class="na">src-</span><span class="err">&quot;</span><span class="na">https:</span><span class="err">//</span><span class="na">github</span><span class="err">.</span><span class="na">com</span><span class="err">/&lt;</span><span class="na">username</span><span class="p">&gt;</span>/<span class="p">&lt;</span><span class="nt">repository-name</span><span class="p">&gt;</span>/blob/<span class="p">&lt;</span><span class="nt">branch-name</span><span class="p">&gt;</span>/images/stat.svg&quot; alt-&quot;Alternative Text&quot;/&gt;
Example: <span class="p">&lt;</span><span class="nt">img</span> <span class="na">src-</span><span class="err">&quot;</span><span class="na">https:</span><span class="err">//</span><span class="na">github</span><span class="err">.</span><span class="na">com</span><span class="err">/</span><span class="na">avinal</span><span class="err">/</span><span class="na">avinal</span><span class="err">/</span><span class="na">blob</span><span class="err">/</span><span class="na">main</span><span class="err">/</span><span class="na">images</span><span class="err">/</span><span class="na">stat</span><span class="err">.</span><span class="na">svg</span><span class="err">&quot;</span> <span class="na">alt-</span><span class="err">&quot;</span><span class="na">Avinal</span> <span class="na">WakaTime</span> <span class="na">Activity</span><span class="err">&quot;</span><span class="p">/&gt;</span>
</pre></div>
</blockquote>
</li>
</ol>
<blockquote>
You can use this method to embed in web pages too. <strong>Do not use the markdown method of inserting images. It does not work sometimes.</strong></blockquote>
<ol class="arabic" start="4">
<li><p class="first">Click the <strong>Action</strong> tab and <strong>choose to set up a workflow yourself</strong>.</p>
</li>
<li><p class="first">Copy the following code into the opened file, you can search for <strong>WakaTime Stat</strong> in the marketplace tab for assistance.</p>
<blockquote>
<div class="highlight"><pre><span></span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">WakaTime status update</span><span class="w"></span>
<span class="nt">on</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">schedule</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Runs at 12 am &#39;0 0 * * *&#39; UTC</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">cron</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;1</span><span class="nv"> </span><span class="s">0</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">*&quot;</span><span class="w"></span>
<span class="nt">jobs</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">update-readme</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Update the WakaTime Stat</span><span class="w"></span>
<span class="w"> </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ubuntu-latest</span><span class="w"></span>
<span class="w"> </span><span class="nt">steps</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Use avinal/Profile-Readme-WakaTime@&lt;latest-release-tag&gt; for latest stable release</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Do not change the line below except the word master with tag number maybe</span><span class="w"></span>
<span class="w"> </span><span class="c1"># If you have forked this project you can use &lt;username&gt;/Profile-Readme-WakaTime@master instead</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">avinal/Profile-Readme-WakaTime@master</span><span class="w"></span>
<span class="w"> </span><span class="nt">with</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="c1"># WakaTime API key stored in secrets, do not directly paste it here</span><span class="w"></span>
<span class="w"> </span><span class="nt">WAKATIME_API_KEY</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.WAKATIME_API_KEY }}</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Automatic github token</span><span class="w"></span>
<span class="w"> </span><span class="nt">GITHUB_TOKEN</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ github.token }}</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Branch - newer GitHub repositories have &quot;main&quot; as default branch, change to main in that case, default is master</span><span class="w"></span>
<span class="w"> </span><span class="nt">BRANCH</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;master&quot;</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Manual Commit messages - write your own messages here</span><span class="w"></span>
<span class="w"> </span><span class="nt">COMMIT_MSG</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Automated</span><span class="nv"> </span><span class="s">Coding</span><span class="nv"> </span><span class="s">Activity</span><span class="nv"> </span><span class="s">Update</span><span class="nv"> </span><span class="s">:alien:&quot;</span><span class="w"></span>
</pre></div>
</blockquote>
</li>
<li><p class="first">Please wait till 12 AM UTC to run this workflow automatically. Or you can force run it by going to the Actions tab. Or you can add the following lines under <cite>on:</cite> to run with every push. Search for 12 AM UTC to find the equivalent time in your time zone.</p>
<blockquote>
<div class="highlight"><pre><span></span><span class="nt">on</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">push</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">branches</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="w"> </span><span class="nv">master</span><span class="w"> </span><span class="p p-Indicator">]</span><span class="w"></span>
<span class="w"> </span><span class="nt">schedule</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">cron</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;1</span><span class="nv"> </span><span class="s">0</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">*&#39;</span><span class="w"></span>
</pre></div>
</blockquote>
</li>
</ol>
</div>
<div class="section" id="my-coding-activity">
<h2>My Coding Activity</h2>
<img class="img-fluid" src="https://raw.githubusercontent.com/avinal/avinal/main/images/stat.svg"></div>
<hr>
<p align=center>
This Blog is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer">Attribution-NonCommercial 4.0 International<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
</a>
</p>
</div>
</article>
<hr>
<div id="comment-form">
<div class="alert alert-info" role="alert">
Feel free to leave a feedback or question!
</div>
<form action="https://docs.google.com/forms/u/0/d/e/1FAIpQLSfL9T8WBRm-Ac2uyu74lJXSYOqAuF6lLIUAulRArCsuiI1ZRQ/formResponse" target="response" method="POST" id="valid-form">
<div class="form-row align-items-center">
<div class="form-group col-md-5">
<label class="sr-only" for="person-name">Name</label>
<input type="text" class="form-control form-control-sm" id="person-name" placeholder="Your Name (Optional)"
aria-describedby="nameHelp" name="entry.982725972">
<input type="text" id="page-link" name="entry.1641222305" hidden>
<small id="nameHelp" class="form-text text-muted">You may put your GitHub Username.</small>
</div>
<div class="form-group col-md-7">
<label class="sr-only" for="email-address">Email address</label>
<input type="email" class="form-control form-control-sm" id="email-address" aria-describedby="emailHelp"
placeholder="Your Email Address (Optional)" name="entry.1652853191">
<small id="emailHelp" class="form-text text-muted">I'll never share your email with anyone
else.</small>
</div>
</div>
<div class="form-group">
<label class="sr-only" for="comment-section">Your Message</label>
<textarea class="form-control form-control-sm" id="comment-section" rows="3"
placeholder="Please enter your message or feedback. (Required)" aria-describedby="emailHelp"
name="entry.1062656232" required></textarea>
<div class="invalid-feedback">
Please Enter something !
</div>
<small id="textHelp" class="form-text text-muted">Enter upto 200 characters.</small>
</div>
<button class="btn btn-outline-info" type="submit">Send</button>
</form>
<iframe name="response" hidden></iframe>
</div>
<div class="alert alert-info" role="alert" id="comment-message" style="display: none;">
<h4 class="alert-heading">Thanks You 🥳</h4>
<p>Thanks a lot for reading this blog and sending me a feedback. I hope you liked it. I will get back to you
soon if you have added an email.</p>
</div>
<script>
(function () {
'use strict';
window.addEventListener('load', function () {
var form = document.getElementById('valid-form');
form.addEventListener('submit', function (event) {
document.getElementById('page-link').value = window.location.href;
document.getElementById('comment-form').style.display = 'none';
document.getElementById('comment-message').style.display = '';
}, false);
}, false);
})();
</script>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-238
View File
@@ -1,238 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Move WSL 2 Safely to another Drive | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/posts/development/wsl1.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/development.atom.xml">
<meta name="description" content="It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps.">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Move WSL 2 Safely to another Drive
</h1>
<hr>
<article class="article">
<header>
<ul class="list-inline">
<li class="list-inline-item text-muted" title="2020-12-31T19:07:00+05:30">
<i class="fas fa-clock"></i>
Thu 31 December 2020
</li>
<li class="list-inline-item">
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/development.html">development</a>
</li>
<li class="list-inline-item">
<i class="fas fa-tag"></i>
<a href="https://avinal.space/tag/wsl.html">#wsl</a>, <a href="https://avinal.space/tag/wsl2.html">#wsl2</a> </li>
</ul>
</header>
<div class="content">
<p>It is real pain when you have small SSD and Windows Subsystem for Linux (WSL) is growing exponentially in size. There is no easy way to move
the WSL installation to another drive. Here in this blog I will discuss how to tackle this problem with bite size steps.</p>
<ol class="arabic simple">
<li>Open a PowerShell <img alt="powershell" class="align-middle" src="/images/powershell.png" style="width: 5%;" /> or Command Prompt <img alt="command-line" class="align-middle" src="/images/command-line.png" style="width: 5%;" /> with <em>Admin</em> access. For this you can use <img alt="WinKey" class="align-middle" src="/images/windows10.png" style="width: 5%;" /> + X shortcut and select <strong>Windows PowerShell(Admin)</strong>.</li>
<li>Check if the WSL 2 installation you are planning to move is is currently running/stopped.</li>
</ol>
<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="n">-l</span> <span class="n">-v</span>
<span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span>
<span class="n">NAME</span> <span class="n">STATE</span> <span class="n">VERSION</span>
<span class="p">*</span> <span class="n">Ubuntu</span> <span class="n">Running</span> <span class="n">2</span>
<span class="n">Kali</span> <span class="n">Stopped</span> <span class="n">2</span>
</pre></div>
<ol class="arabic simple" start="3">
<li>If its running then you must stop the particular WSL distribution. (<em>Ubuntu</em> used as example)</li>
</ol>
<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="n">-t</span> <span class="n">Ubuntu</span>
</pre></div>
<ol class="arabic simple" start="4">
<li>Export to some folder. (Here exporting <em>Ubuntu</em> as <em>ubuntu-ex.tar</em> to <em>Z:wsl2</em>)</li>
</ol>
<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="p">-</span><span class="n">-export</span> <span class="n">Ubuntu</span> <span class="s2">&quot;Z:\export\ubuntu-ex.tar&quot;</span>
</pre></div>
<ol class="arabic simple" start="5">
<li>Unregister previous WSL installation</li>
</ol>
<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="p">-</span><span class="n">-unregister</span> <span class="n">Ubuntu</span>
</pre></div>
<ol class="arabic simple" start="6">
<li>Create a new folder and import your WSL installation to that folder.</li>
</ol>
<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="nb">New-Item</span> <span class="n">-Path</span> <span class="s2">&quot;Z:\wsl2&quot;</span> <span class="n">-ItemType</span> <span class="n">Directory</span>
<span class="n">Directory</span><span class="p">:</span> <span class="n">Z</span><span class="p">:\</span>
<span class="n">Mode</span> <span class="n">LastWriteTime</span> <span class="n">Length</span> <span class="n">Name</span>
<span class="p">----</span> <span class="p">-------------</span> <span class="p">------</span> <span class="p">----</span>
<span class="n">d</span><span class="p">-----</span> <span class="n">31</span><span class="p">-</span><span class="n">12</span><span class="p">-</span><span class="n">2020</span> <span class="n">21</span><span class="p">:</span><span class="n">03</span> <span class="n">wsl2</span>
<span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="p">-</span><span class="n">-import</span> <span class="n">Ubuntu</span> <span class="s2">&quot;Z:\wsl2&quot;</span> <span class="s2">&quot;Z:\export\ubuntu-ex.tar&quot;</span>
</pre></div>
<ol class="arabic simple" start="7">
<li>Check after import is complete</li>
</ol>
<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="n">-l</span> <span class="n">-v</span>
<span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span>
<span class="n">NAME</span> <span class="n">STATE</span> <span class="n">VERSION</span>
<span class="p">*</span> <span class="n">Ubuntu</span> <span class="n">Running</span> <span class="n">2</span>
<span class="n">Kali</span> <span class="n">Stopped</span> <span class="n">2</span>
</pre></div>
<ol class="arabic simple" start="8">
<li>Mark one of your WSL distribution as <em>(default)</em>.</li>
</ol>
<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">wsl</span> <span class="n">-s</span> <span class="n">Ubuntu</span>
</pre></div>
<ol class="arabic simple" start="9">
<li>After exporting your default user will be set as <span class="html-raw"><i style="color:red">root</i></span> , to change it to your desired username, run following command</li>
</ol>
<div class="highlight"><pre><span></span><span class="nb">PS </span><span class="n">C</span><span class="p">:\</span><span class="n">Users</span><span class="p">\</span><span class="n">Avinal</span><span class="p">&gt;</span> <span class="n">ubuntu</span> <span class="n">config</span> <span class="p">-</span><span class="n">-default-user</span> <span class="n">user_name</span>
</pre></div>
<ol class="arabic simple" start="10">
<li>Finally run <code>wsl</code> and you have successfully moved your WSL 2 installation to another drive.</li>
</ol>
<hr>
<p align=center>
This Blog is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer">Attribution-NonCommercial 4.0 International<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
</a>
</p>
</div>
</article>
<hr>
<div id="comment-form">
<div class="alert alert-info" role="alert">
Feel free to leave a feedback or question!
</div>
<form action="https://docs.google.com/forms/u/0/d/e/1FAIpQLSfL9T8WBRm-Ac2uyu74lJXSYOqAuF6lLIUAulRArCsuiI1ZRQ/formResponse" target="response" method="POST" id="valid-form">
<div class="form-row align-items-center">
<div class="form-group col-md-5">
<label class="sr-only" for="person-name">Name</label>
<input type="text" class="form-control form-control-sm" id="person-name" placeholder="Your Name (Optional)"
aria-describedby="nameHelp" name="entry.982725972">
<input type="text" id="page-link" name="entry.1641222305" hidden>
<small id="nameHelp" class="form-text text-muted">You may put your GitHub Username.</small>
</div>
<div class="form-group col-md-7">
<label class="sr-only" for="email-address">Email address</label>
<input type="email" class="form-control form-control-sm" id="email-address" aria-describedby="emailHelp"
placeholder="Your Email Address (Optional)" name="entry.1652853191">
<small id="emailHelp" class="form-text text-muted">I'll never share your email with anyone
else.</small>
</div>
</div>
<div class="form-group">
<label class="sr-only" for="comment-section">Your Message</label>
<textarea class="form-control form-control-sm" id="comment-section" rows="3"
placeholder="Please enter your message or feedback. (Required)" aria-describedby="emailHelp"
name="entry.1062656232" required></textarea>
<div class="invalid-feedback">
Please Enter something !
</div>
<small id="textHelp" class="form-text text-muted">Enter upto 200 characters.</small>
</div>
<button class="btn btn-outline-info" type="submit">Send</button>
</form>
<iframe name="response" hidden></iframe>
</div>
<div class="alert alert-info" role="alert" id="comment-message" style="display: none;">
<h4 class="alert-heading">Thanks You 🥳</h4>
<p>Thanks a lot for reading this blog and sending me a feedback. I hope you liked it. I will get back to you
soon if you have added an email.</p>
</div>
<script>
(function () {
'use strict';
window.addEventListener('load', function () {
var form = document.getElementById('valid-form');
form.addEventListener('submit', function (event) {
document.getElementById('page-link').value = window.location.href;
document.getElementById('comment-form').style.display = 'none';
document.getElementById('comment-message').style.display = '';
}, false);
}, false);
})();
</script>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-189
View File
@@ -1,189 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Introduction to Prime Numbers | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/posts/prime/prime1.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/prime.atom.xml">
<meta name="description" content="A prime is a positive integer p having exactly two positive divisors, namely 1 and p. An integer n is composite if n > 1 and n is not prime. (The number 1 is considered neither prime nor composite.)">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Introduction to Prime Numbers
</h1>
<hr>
<article class="article">
<header>
<ul class="list-inline">
<li class="list-inline-item text-muted" title="2021-01-09T22:29:00+05:30">
<i class="fas fa-clock"></i>
Sat 09 January 2021
</li>
<li class="list-inline-item">
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/prime.html">prime</a>
</li>
<li class="list-inline-item">
<i class="fas fa-tag"></i>
<a href="https://avinal.space/tag/prime.html">#prime</a>, <a href="https://avinal.space/tag/primenumbers.html">#primenumbers</a> </li>
</ul>
</header>
<div class="content">
<blockquote class="epigraph">
A prime is a positive integer <em>p</em> having exactly two positive divisors, namely <em>1</em> and <em>p</em>. An integer <em>n</em> is composite if <em>n</em> &gt; <em>1</em> and <em>n</em> is not prime. (The number 1 is considered neither prime nor composite.)</blockquote>
<p>We can frame a brute force algorithm for checking primality of numbers using the above statement.</p>
<div class="highlight"><pre><span></span><span class="kt">bool</span><span class="w"> </span><span class="nf">is_prime</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">number</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">factor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;=</span><span class="w"> </span><span class="n">number</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">number</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="n">factor</span><span class="o">++</span><span class="p">;</span><span class="w"></span>
<span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="n">factor</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="o">?</span><span class="w"> </span><span class="nb">true</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">false</span><span class="p">;</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>
<hr>
<p align=center>
This Blog is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer">Attribution-NonCommercial 4.0 International<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
</a>
</p>
</div>
</article>
<hr>
<div id="comment-form">
<div class="alert alert-info" role="alert">
Feel free to leave a feedback or question!
</div>
<form action="https://docs.google.com/forms/u/0/d/e/1FAIpQLSfL9T8WBRm-Ac2uyu74lJXSYOqAuF6lLIUAulRArCsuiI1ZRQ/formResponse" target="response" method="POST" id="valid-form">
<div class="form-row align-items-center">
<div class="form-group col-md-5">
<label class="sr-only" for="person-name">Name</label>
<input type="text" class="form-control form-control-sm" id="person-name" placeholder="Your Name (Optional)"
aria-describedby="nameHelp" name="entry.982725972">
<input type="text" id="page-link" name="entry.1641222305" hidden>
<small id="nameHelp" class="form-text text-muted">You may put your GitHub Username.</small>
</div>
<div class="form-group col-md-7">
<label class="sr-only" for="email-address">Email address</label>
<input type="email" class="form-control form-control-sm" id="email-address" aria-describedby="emailHelp"
placeholder="Your Email Address (Optional)" name="entry.1652853191">
<small id="emailHelp" class="form-text text-muted">I'll never share your email with anyone
else.</small>
</div>
</div>
<div class="form-group">
<label class="sr-only" for="comment-section">Your Message</label>
<textarea class="form-control form-control-sm" id="comment-section" rows="3"
placeholder="Please enter your message or feedback. (Required)" aria-describedby="emailHelp"
name="entry.1062656232" required></textarea>
<div class="invalid-feedback">
Please Enter something !
</div>
<small id="textHelp" class="form-text text-muted">Enter upto 200 characters.</small>
</div>
<button class="btn btn-outline-info" type="submit">Send</button>
</form>
<iframe name="response" hidden></iframe>
</div>
<div class="alert alert-info" role="alert" id="comment-message" style="display: none;">
<h4 class="alert-heading">Thanks You 🥳</h4>
<p>Thanks a lot for reading this blog and sending me a feedback. I hope you liked it. I will get back to you
soon if you have added an email.</p>
</div>
<script>
(function () {
'use strict';
window.addEventListener('load', function () {
var form = document.getElementById('valid-form');
form.addEventListener('submit', function (event) {
document.getElementById('page-link').value = window.location.href;
document.getElementById('comment-form').style.display = 'none';
document.getElementById('comment-message').style.display = '';
}, false);
}, false);
})();
</script>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
-862
View File
@@ -1,862 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Google Summer of Code 2021 | Be My SpaceTime
</title>
<link rel="canonical" href="https://avinal.space/posts/report/final-evaluation.html">
<link rel="apple-touch-icon" href="https://avinal.space/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://avinal.space/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://avinal.space/site.webmanifest">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="https://avinal.space/theme/css/bootstrap.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/all.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/pygments/manni.min.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/theme.css">
<link rel="stylesheet" href="https://avinal.space/theme/css/space.css">
<link rel="alternate" type="application/atom+xml" title="Full Atom Feed" href="https://avinal.space/feeds/all.atom.xml">
<link rel="alternate" type="application/atom+xml" title="Categories Atom Feed"
href="https://avinal.space/feeds/report.atom.xml">
<meta name="description" content="This is the final report of my Google Summer of Code 2021 at The FOSSology Project.">
</head>
<body style="font-family:Overpass Mono,monospace;">
<header class="header star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container text-center">
<div class="row">
<div class="col-sm-12">
<h1 class="title" style="font-family: ExodarOut;font-weight: lighter;"><a href="https://avinal.space/">Be My SpaceTime</a>
</h1>
<!--
<p class="text-muted">눈치</p>
-->
<ul class="list-inline">
<li class="list-inline-item"><a href="https://gsoc.avinal.space" target="_blank">gsoc</a></li>
<li class="list-inline-item text-muted">|</li>
<li class="list-inline-item"><a href="https://avinal.space/pages/about-me.html">About Me</a></li>
<li class=" list-inline-item text-muted">|</li>
<li class="list-inline-item"><a class="fab fa-github" href="https://github.com/avinal" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-linkedin" href="https://www.linkedin.com/in/avinal/" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-instagram" href="https://instagram.com/avinal.k" target="_blank"></a></li>
<li class="list-inline-item"><a class="fab fa-calendar" href="https://meet.avinal.space" target="_blank"></a></li>
<li class="list-inline-item"><a class="fa fa-envelope" href="mailto:blog@avinal.space" target="_blank"></a></li>
</ul>
</div>
</div> </div>
</header>
<div class="main">
<div class="container">
<h1>Google Summer of Code 2021
</h1>
<hr>
<article class="article">
<header>
<ul class="list-inline">
<li class="list-inline-item text-muted" title="2021-08-19T23:07:00+05:30">
<i class="fas fa-clock"></i>
Thu 19 August 2021
</li>
<li class="list-inline-item">
<i class="fas fa-folder-open"></i>
<a href="https://avinal.space/category/report.html">report</a>
</li>
<li class="list-inline-item">
<i class="fas fa-tag"></i>
<a href="https://avinal.space/tag/gsoc.html">#gsoc</a>, <a href="https://avinal.space/tag/fossology.html">#FOSSology</a> </li>
</ul>
</header>
<div class="content">
<style>
.rd {color:red;font-weight:bold}
.gr{color:green;font-weight:bold}
.or{color:orange;font-weight:medium}
ul{margin-bottom:0}
</style><div class="section" id="the-cmake-build-system">
<h2>The CMake Build system</h2>
<p>FOSSology is quite an old and mature project. The project has been using bare metal <strong>Makefiles</strong>. As the project is growing with new agents and modernization it was required to have a modern build system.</p>
<p>The FOSSology is a suite of well-integrated and synchronized sub-projects (called agents) written in C, C++, and PHP. Most of the major agents are in C, C++ and that made CMake an obvious choice for a new build system for FOSSology. CMake is a versatile set of build, test, and packaging tools and is the most popular choice of C/C++ developers. CMake can be extended to create a build system for other languages too via custom scripts.</p>
</div>
<div class="section" id="github-actions-ci-cd">
<h2>GitHub Actions CI/CD</h2>
<img alt="A CI Meme" class="float-md-right rounded border border-info ml-3" src="/images/ci.png" style="width: 350px;" />
<p>Since the FOSSology project moved on Github, it has used only the free Travis CI service for OSS projects.
At the time of writing Travis CI has reduced its free tier CI services. GitHub Actions provides faster builds. Since GitHub Actions is a fully managed service by GitHub, we dont need to know how to scale and operate the infrastructure to run it.</p>
<p>It is straightforward to use with GitHub because when we fork a repository, the actions automatically get forked. This allows you to test and build projects very efficiently and even run them closer to the developer. Also, you have readily available access to the GitHub API, making it more popular among developers.</p>
</div>
<div class="section" id="improvements-over-previous-build-system-and-ci">
<h2>Improvements over previous build system and CI</h2>
<p>The new build system and CI brings a lot of improvements and features. The list below describes them.</p>
<ul class="simple">
<li>CMake enforces out-of-source builds. This was already possible with the previous build system but not a strict requirement. This feature keeps the source code clean and makes cleaning the build artifacts easy. (Just remove the build folder :)</li>
<li>One of the major improvements over the previous build system is faster build times. CMake generates parallel build-enabled configurations for all generators. In our tests, the new build system is at least twice as fast as the previous one. With further improvement in configuration, we will be able to further cut the build times.</li>
<li>Previously FOSSology can only be built using <em>Unix Makefiles</em>. With CMake, we can now use many other popular generators such as <em>Ninja</em>.</li>
<li>Now it is also very flexible to choose different compilers. This will help support more platforms and architecture in the future. As of now, we are experimenting with Clang compilers.</li>
<li>FOSSology is quite an old project and a lot of agent testing code was written in the last decade. Initially, none of them were compatible with the new build system, but we were able to hack most of the test code using better-improved methods. Test times have also improved.</li>
<li>Migrating from Travis CI to GitHub Actions was another big move and for the most part, it removes the dependency on a third-party CI service. Along with that GitHub Actions provides better build times, tons of new features, and better integration with other GitHub services.</li>
</ul>
</div>
<div class="section" id="deliverables">
<h2>Deliverables</h2>
<div class="alert alert-info" role="alert">
<ul class="simple">
<li>Final Pull Request <a class="badge badge-info" href="https://github.com/fossology/fossology/pull/2075">#2075</a></li>
<li>Pull Request Branch <a class="badge badge-info" href="https://github.com/avinal/fossology/tree/avinal/feat/buildsystem">avinal/feat/buildsystem</a></li>
<li>Working Branch (individual commits) <ul>
<li><a class="badge badge-info" href="https://github.com/avinal/fossology/tree/avinal/feat/cmake-buildsystem">avinal/feat/cmake-buildsystem</a></li>
<li><a class="badge badge-info" href="https://github.com/avinal/fossology/tree/avinal/feat/testing">avinal/feat/testing</a></li>
</ul></li>
<li>Project Issue <a class="badge badge-info" href="https://github.com/fossology/fossology/issues/1913">#1913</a></li>
<li>Project Discussion <a class="badge badge-info" href="https://github.com/fossology/fossology/discussions/1931">#1931</a></li>
<li>Weekly Reports<ul>
<li><a class="badge badge-info" href="https://gsoc.avinal.space">Personal Blog</a></li>
<li><a class="badge badge-info" href="https://fossology.github.io/gsoc/docs/2021/buildsystem/">FOSSology Official Blog</a></li>
</ul></li></ul>
</div><p><strong>CMake Build System Tasks</strong></p>
<table border="1" class="table table-sm table-hover table-bordered table-responsive docutils align-center">
<colgroup>
<col width="5%" />
<col width="15%" />
<col width="10%" />
<col width="10%" />
<col width="20%" />
<col width="15%" />
<col width="25%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">#</th>
<th class="head">Agents</th>
<th class="head">Build</th>
<th class="head">Install</th>
<th class="head">Testing</th>
<th class="head">Packaging</th>
<th class="head">Remarks</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>1</td>
<td>adj2nest</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>2</td>
<td>buckets</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>3</td>
<td>cli</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="rd">Functional</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>4</td>
<td>copyright</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>5</td>
<td>debug</td>
<td>&nbsp;</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>6</td>
<td>decider</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>7</td>
<td>deciderjob</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Functional</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>8</td>
<td>delagent</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="rd">Functional</span></li>
<li><span class="rd">Unit</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>9</td>
<td>demomod</td>
<td><span class="or">YES</span></td>
<td><span class="or">YES</span></td>
<td><ul class="first last simple">
<li><span class="or">Functional</span></li>
<li><span class="or">Unit</span></li>
</ul>
</td>
<td><span class="or">NO</span></td>
<td><em>(Not Used)</em></td>
</tr>
<tr><td>10</td>
<td>example_wc_agent</td>
<td><span class="or">YES</span></td>
<td><span class="or">YES</span></td>
<td><ul class="first last simple">
<li><span class="or">Functional</span></li>
<li><span class="or">Unit</span></li>
</ul>
</td>
<td><span class="or">NO</span></td>
<td><em>(Not Used)</em></td>
</tr>
<tr><td>11</td>
<td>clib</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>12</td>
<td>cpplib</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Unit</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>13</td>
<td>phplib</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>1 functional
test needs fix</td>
</tr>
<tr><td>14</td>
<td>maintagent</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>15</td>
<td>mimetype</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>16</td>
<td>monk</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>17</td>
<td>ninka</td>
<td><span class="or">YES</span></td>
<td><span class="or">YES</span></td>
<td><ul class="first last simple">
<li><span class="or">Functional</span></li>
<li><span class="or">Unit</span></li>
</ul>
</td>
<td><span class="or">NO</span></td>
<td><em>(Deprecated)</em></td>
</tr>
<tr><td>18</td>
<td>nomos</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>19</td>
<td>ojo</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>1 functional
test needs fix</td>
</tr>
<tr><td>20</td>
<td>pkgagent</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>21</td>
<td>readmeoss</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>22</td>
<td>regexscan</td>
<td><span class="or">YES</span></td>
<td><span class="or">YES</span></td>
<td>&nbsp;</td>
<td><span class="or">NO</span></td>
<td><em>(Deprecated)</em></td>
</tr>
<tr><td>23</td>
<td>reportImport</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>24</td>
<td>reuser</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Functional</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>25</td>
<td>reso</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>26</td>
<td>scheduler</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="rd">Functional</span></li>
<li><span class="rd">Unit</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>Tests needs
fix</td>
</tr>
<tr><td>27</td>
<td>softwareHeritage</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>28</td>
<td>spasht</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>29</td>
<td>spdx2</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>1 Test failing
in CI</td>
</tr>
<tr><td>30</td>
<td>unifiedreport</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Functional</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>31</td>
<td>ununpack</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Functional</span></li>
<li><span class="rd">Unit</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>Unit tests
needs fix</td>
</tr>
<tr><td>32</td>
<td>wget_agent</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="gr">Functional</span></li>
<li><span class="gr">Unit</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
<tr><td>32</td>
<td>www</td>
<td><span class="gr">YES</span></td>
<td><span class="gr">YES</span></td>
<td><ul class="first last simple">
<li><span class="rd">UI</span></li>
</ul>
</td>
<td><span class="gr">YES</span></td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<p><strong>GitHub Actions CI Tasks</strong></p>
<table border="1" class="table table-sm table-hover table-bordered table-responsive docutils align-center">
<colgroup>
<col width="5%" />
<col width="25%" />
<col width="70%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">#</th>
<th class="head">CI Tasks</th>
<th class="head">Status</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>1</td>
<td><span class="gr">build</span></td>
<td>Added Ubuntu 20.04 GCC 8, 9 and Clang, GCC 7 not working</td>
</tr>
<tr><td>2</td>
<td><span class="gr">c/cpp unit test</span></td>
<td>Added, delagent, scheduler and ununpack not working</td>
</tr>
<tr><td>3</td>
<td><span class="gr">phpunit tests</span></td>
<td>Added, delagent and scheduler functional not working</td>
</tr>
<tr><td>4</td>
<td><span class="rd">cahching</span></td>
<td>Not implemented</td>
</tr>
<tr><td>5</td>
<td><span class="rd">source install</span></td>
<td>Not implemented</td>
</tr>
</tbody>
</table>
<p>(<span class="gr">GREEN</span>: COMPLETED, <span class="rd">RED</span>: INCOMPLETE, <span class="or">ORANGE</span>: NOT NEEDED/DEPRECATED)</p>
</div>
<div class="section" id="how-does-it-work-and-how-to-use-it">
<h2>How does it work and how to use it?</h2>
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="/images/second-build.webm" allowfullscreen></iframe>
</div><p>The new build system retains the modular and hierarchical structure of the previous build system. On the other hand, the new build system provides several new flags to control the build. The new build system forces out-of-source build instead of the previous in-source builds. This keeps the source clutter-free and reduces the chance of accidentally deleting source files. <em>Testing still needs some in-source artifacts, this will be solved once all the tests are fixed according to the new build system.</em></p>
<p>Each agent is a complete CMake sub-project with its independent configuration for building, installing, and testing. That means a single agent can be built and installed separately and even removed from the default build without breaking other builds. The directory structure is as below.</p>
<div class="highlight"><pre><span></span>.
├── build <span class="c1"># temporary directory for build artifacts</span>
├── cmake <span class="c1"># CMake modules for FOSSology</span>
│ ├── FoPackaging.cmake <span class="c1"># CMake Packaging configurations</span>
│ ├── FoUtilities.cmake <span class="c1"># Custom CMake utilities</span>
│ ├── FoVersionFile.cmake <span class="c1"># VERSION version.php CMake template file</span>
│ ├── SetDefaults.cmake <span class="c1"># CMake defaults for this project</span>
│ ├── TestInstall.make.in <span class="c1"># Template makefile for install during tests</span>
│ └── VERSION.in <span class="c1"># VERSION file template</span>
├── src
│ ├── agent-1 <span class="c1"># Agent sub-project</span>
│ │ ├── agent <span class="c1"># Agent&#39;s source code directory</span>
│ │ │ ├── agent-source-code
│ │ │ └── CMakeLists.txt
│ │ ├── agent_tests <span class="c1"># Agent&#39;s test directory</span>
│ │ │ ├── Unit
│ │ │ ├── Functional
│ │ │ └── CMakeLists.txt
│ │ ├── ui <span class="c1"># Agent&#39;s UI source code</span>
│ │ │ ├── templates
│ │ │ └── agent-ui-code
│ │ └── CMakeLists.txt <span class="c1"># Agent&#39;s top-level CMake configuration</span>
: :
│ ├── other agents
: :
│ └── CMakeLists.txt <span class="c1"># Source intermediate CMake configuration</span>
:
├── other directories and files
:
└── CMakeLists.txt <span class="c1"># FOSSology Top-level CMake configuration</span>
</pre></div>
<p>The <code>cmake</code> directory contains customized CMake modules and templates for FOSSology. This directory is required for all the operations. The general workflow of the new build system as well as how to use it is described below.</p>
<ol class="arabic">
<li><p class="first">Since the new build system is still in review. You must fork FOSSology and pull the <a class="reference external" href="https://github.com/fossology/fossology/pull/2075">#2075</a> pull request branch. Once you are in FOSSology root, run these commands.</p>
<blockquote>
<div class="highlight"><pre><span></span>git fetch https://github.com/avinal/fossology avinal/feat/buildsystem:buildsystem
git checkout buildsystem
</pre></div>
</blockquote>
</li>
<li><p class="first">The first step towards building is to create a temporary directory for storing intermediate files and build artifacts. By convention we use a directory named <code>build</code>, but you can use any name. (<strong>NOTE: For testing do not use other names</strong>)</p>
<blockquote>
<div class="highlight"><pre><span></span>mkdir build
<span class="nb">cd</span> build
</pre></div>
</blockquote>
</li>
<li><p class="first">In the next steps, we will configure the CMake project and generate the required configurations. You can use several flags to control the build. Given below are the flags available for this project.</p>
<blockquote>
<table border="1" class="table table-sm table-hover table-bordered table-responsive docutils">
<colgroup>
<col width="35%" />
<col width="44%" />
<col width="20%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">CMake Flags</th>
<th class="head">Description</th>
<th class="head">Default</th>
</tr>
</thead>
<tbody valign="top">
<tr><td><strong>-DCMAKE_INSTALL_PREFIX=&lt;path&gt;</strong></td>
<td>Sets the install prefix.</td>
<td><code>/usr/local</code></td>
</tr>
<tr><td><strong>-DAGENTS=&quot;agent1;agent2...&quot;</strong></td>
<td>Only configure these agents.</td>
<td>ALL AGENTS</td>
</tr>
<tr><td><strong>-DOFFLINE=&lt;ON/OFF&gt;</strong></td>
<td>Controls vendor generation, ON=NO</td>
<td><strong>OFF</strong></td>
</tr>
<tr><td><p class="first"><strong>-DCMAKE_BUILD_TYPE=&lt;type&gt;</strong></p>
<blockquote class="last">
<ul class="simple">
<li>Controls build type aka
level optimisation</li>
</ul>
</blockquote>
</td>
<td><ul class="first last simple">
<li><code>Debug</code></li>
<li><code>Release</code></li>
<li><code>RelWithDebInfo</code></li>
<li><code>MinSizeRel</code></li>
</ul>
</td>
<td><code>Debug</code></td>
</tr>
<tr><td><strong>-DTESTING=&lt;ON/OFF&gt;</strong></td>
<td>Controls testing config generation</td>
<td><strong>OFF</strong></td>
</tr>
<tr><td><strong>-DMONOPACK=&lt;ON/OFF&gt;</strong></td>
<td>Package adj2nest and ununpack seperately</td>
<td><strong>OFF</strong></td>
</tr>
<tr><td><strong>-GNinja</strong></td>
<td>Use Ninja instead of Unix Makefiles</td>
<td><em>Unix MakeFiles</em></td>
</tr>
</tbody>
</table>
<p>There are lots of inbuilt CMake command-line options you can see them in the official <a class="reference external" href="https://cmake.org/cmake/help/v3.10/manual/cmake.1.html">documentation</a>. Once you have chosen your flags we can now configure the project using the following commands.</p>
<div class="highlight"><pre><span></span><span class="c1"># From build folder</span>
<span class="nb">cd</span> &lt;name-of-build-directory&gt;
cmake &lt;flags&gt; ..
</pre></div>
</blockquote>
</li>
<li><p class="first">The next step is to build the project. You can use parallel jobs to build faster. For more options you can type <code>cmake --help</code> or <code>make --help</code> or <code>ninja --help</code>.</p>
<blockquote>
<div class="highlight"><pre><span></span><span class="c1"># Common build command for all generators,</span>
<span class="c1"># Default number of parallel builds depends on generator used</span>
cmake --build . --parallel &lt;no-of-processes&gt;
<span class="c1"># For Unix Makefiles, no parallel build by default</span>
make -j &lt;no-of-processes&gt;
<span class="c1"># For Ninja, 8+ parallel build by default (depends on system)</span>
ninja -j &lt;no-of-processes&gt;
</pre></div>
</blockquote>
</li>
<li><p class="first">Installing is also as easy as building. You can choose to install only certain components even if you have built the whole project. If you directly invoke the install command without building the project, it will automatically build the project first.</p>
<blockquote>
<div class="highlight"><pre><span></span><span class="c1"># For Unix Makefiles</span>
make install
<span class="c1"># For Ninja</span>
ninja install
</pre></div>
</blockquote>
</li>
<li><p class="first">While testing has some issues, most of the testing is working fine. For now, you must build and run any test from the FOSSology root directory only. You can choose to configure a single agent if you want to test one agent only. See <code>ctest --help</code> for controlling test runs.</p>
<blockquote>
<div class="highlight"><pre><span></span><span class="c1"># Common testing command</span>
ctest --parallel &lt;no-of-processes&gt;
<span class="c1"># For Unix Makefiles</span>
make <span class="nb">test</span>
<span class="c1"># For Ninja</span>
ninja <span class="nb">test</span>
</pre></div>
</blockquote>
</li>
<li><p class="first">You can package FOSSology, the packaging currently lacks copyright and conf files. But for testing purposes, you can use the following commands. Similar to installing, if you run the package command without building the project, it will automatically build the project first. See <code>cpack --help</code> for more packaging options.</p>
<blockquote>
<div class="highlight"><pre><span></span><span class="c1"># Common testing command</span>
cpack
<span class="c1"># For Unix Makefiles</span>
make package
<span class="c1"># For Ninja</span>
ninja package
</pre></div>
</blockquote>
</li>
</ol>
</div>
<div class="section" id="known-issues-and-drawbacks">
<h2>Known Issues and Drawbacks</h2>
<p>Although the transition from Makefiles to CMake and Travis CI to GitHub Actions is almost complete and working as expected. But it is not free of drawbacks and issues. This section outlines the known issues at the time of writing.</p>
<img alt="A Bug Meme" class="float-md-right rounded border border-info ml-3" src="https://imgs.xkcd.com/comics/conference_question.png" style="width: 350px;" />
<ul class="simple">
<li>Coverage builds may fail with linking errors.</li>
<li>Packaging prefix is the same as the install prefix. This requires the developer to set the install prefix manually before packaging to produce packages with the correct directory structure.</li>
<li>Testing and packaging must be used from the FOSSology root directory. Not doing so may or may not configure the project as intended.</li>
<li>Previously tests were written hardcoded for the Makefiles. But new build system requires all artifacts to be generated in a separate directory. This required me to add symbolic links wherever a generated script or file is expected. Tests can still leave some artifacts inside source folders.</li>
<li>There is no easy way to install a particular agent from the FOSSology root directory.</li>
<li>Packages don't contain copyright, readme, and license files. CMake doesn't provide a way to include these files. This is being tracked by issue <a class="reference external" href="https://gitlab.kitware.com/cmake/cmake/-/issues/21832">#21832</a>.</li>
<li>While packaging the symbolic links may or may not be dereferenced and hence results in copying the folder too in the target directory.</li>
<li>Running tests locally may require switching to <code>fossy</code> user.</li>
<li>While configured for testing, it may give permission errors.</li>
<li>Scheduler, Ununpack, and Delagent unit and functional tests are not working. I have added an issue <a class="reference external" href="https://github.com/fossology/fossology/issues/2084">#2084</a> to track the progress on fixing these tests.</li>
<li>CMake doesn't generate uninstall targets. The closest thing to uninstall is <a class="reference external" href="https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake">this snippet</a>. This will be later added to the FOSSology.</li>
</ul>
</div>
<div class="section" id="challenges-faced">
<h2>Challenges Faced</h2>
<p>While this whole project was challenging, some aspects of it were unforeseen and more challenging. When I decided to go on with this project I just had enough CMake knowledge to write a configuration for a very small project. I had never used CMake on this big scale. On the other side, the FOSSology community is largely unknown to CMake so for all of us it was learned, practiced, and implement. With support from mentors, I was able to overcome this challenge with flying colors.</p>
<p>The other challenge was to understand the old build system, how they are all connected and what is the flow. The complexity can be imagined by the fact that the most of code and configurations were written in the decade before the last decade and haven't changed much since then.</p>
<p>The most challenging task was to make tests work with the new build system. Since tests were mostly hardcoded and the new build system refactored many of the files and directory, the tests were failing initially. The testing part took me the most time. All thanks to my mentor Gaurav and my friend Sarita I was able to hack them to suit the new build system.</p>
</div>
<div class="section" id="related-resources-and-links">
<h2>Related Resources and Links</h2>
<ul class="simple">
<li>Fix FOSSology agent tests issue <a class="reference external" href="https://github.com/fossology/fossology/issues/2084">#2084</a></li>
<li>feat(CI): Migrate API docs generation and deployment to GitHub Actions pull request <a class="reference external" href="https://github.com/fossology/fossology/pull/1917">#1917</a></li>
<li>feat(CI): Migrate Static Checks and Analysis to GitHub Actions from Travis CI <a class="reference external" href="https://github.com/fossology/fossology/pull/1919">#1919</a></li>
</ul>
</div>
<div class="section" id="future-development-plans">
<h2>Future Development Plans</h2>
<p>There is a lot to do with the new build system and CI and it will probably take a year or to reach a maturity point. I was able to meet most of the goals but some of them are remaining.</p>
<ul class="simple">
<li>Fix the tests, probably renovate them from the ground up.</li>
<li>Find a hack for packaging problems.</li>
<li>Improve and optimize the build.</li>
<li>Modernise the source code, remove old, bloated code and replace them according to new standards.</li>
</ul>
</div>
<div class="section" id="what-did-i-learn-from-this-project">
<h2>What did I learn from this project?</h2>
<p>This Google Summer of Code was the busiest time of my life for all good reasons. I learned a lot about license compliance and how it all works in the software industry. The next big thing is CMake. As I mentioned I was just a novice user of CMake. Now I am confident that given any other large project I will be able to migrate it/improve it. I got to learn PHP, of which I did not know a single word before GSoC. And finally, I learned about packing and testing. I had these courses but implementing them myself and fixing them was a wholesome experience.</p>
<p>Other than that I improved on my communication and presentation skills. Collaborating with fellow participants was one of the great things that happened during GSoC.</p>
</div>
<div class="section" id="acknowledgments">
<h2>Acknowledgments</h2>
<p>Google Summer of Code is the best thing that has happened to me this year so far. Although there are numerous people to say thanks to, I want to mention key people who were my motivation and support during this period.</p>
<p>First of all, I want to thank and appreciate my mentors <a class="reference external" href="https://github.com/GMishx">Gaurav Mishra</a>, <a class="reference external" href="https://github.com/mcjaeger">Michael C. Jaeger</a>, <a class="reference external" href="https://github.com/ag4ums">Anupam Ghosh</a>, and <a class="reference external" href="https://github.com/shaheemazmalmmd">Shaheem Azmal M MD</a>. Without the help and support from them, all this would not have been possible. They are very polite, knowledgeable, and helpful.</p>
<p>I want to thank my friend and <abbr title="Integrating ScanCode Toolkit to FOSSology">fellow participant</abbr> <a class="reference external" href="https://github.com/itssingh">Sarita</a>. Thank you for being a collaborator, support, and motivation for attempting GSoC.</p>
<p>Finally, I want to thank, my family and friends. I got to meet many awesome developers as my fellow participants from around the world, I wish we will do more collaboration in the future.</p>
</div>
<hr>
<p align=center>
This Blog is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer">Attribution-NonCommercial 4.0 International<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
</a>
</p>
</div>
</article>
<hr>
<div id="comment-form">
<div class="alert alert-info" role="alert">
Feel free to leave a feedback or question!
</div>
<form action="https://docs.google.com/forms/u/0/d/e/1FAIpQLSfL9T8WBRm-Ac2uyu74lJXSYOqAuF6lLIUAulRArCsuiI1ZRQ/formResponse" target="response" method="POST" id="valid-form">
<div class="form-row align-items-center">
<div class="form-group col-md-5">
<label class="sr-only" for="person-name">Name</label>
<input type="text" class="form-control form-control-sm" id="person-name" placeholder="Your Name (Optional)"
aria-describedby="nameHelp" name="entry.982725972">
<input type="text" id="page-link" name="entry.1641222305" hidden>
<small id="nameHelp" class="form-text text-muted">You may put your GitHub Username.</small>
</div>
<div class="form-group col-md-7">
<label class="sr-only" for="email-address">Email address</label>
<input type="email" class="form-control form-control-sm" id="email-address" aria-describedby="emailHelp"
placeholder="Your Email Address (Optional)" name="entry.1652853191">
<small id="emailHelp" class="form-text text-muted">I'll never share your email with anyone
else.</small>
</div>
</div>
<div class="form-group">
<label class="sr-only" for="comment-section">Your Message</label>
<textarea class="form-control form-control-sm" id="comment-section" rows="3"
placeholder="Please enter your message or feedback. (Required)" aria-describedby="emailHelp"
name="entry.1062656232" required></textarea>
<div class="invalid-feedback">
Please Enter something !
</div>
<small id="textHelp" class="form-text text-muted">Enter upto 200 characters.</small>
</div>
<button class="btn btn-outline-info" type="submit">Send</button>
</form>
<iframe name="response" hidden></iframe>
</div>
<div class="alert alert-info" role="alert" id="comment-message" style="display: none;">
<h4 class="alert-heading">Thanks You 🥳</h4>
<p>Thanks a lot for reading this blog and sending me a feedback. I hope you liked it. I will get back to you
soon if you have added an email.</p>
</div>
<script>
(function () {
'use strict';
window.addEventListener('load', function () {
var form = document.getElementById('valid-form');
form.addEventListener('submit', function (event) {
document.getElementById('page-link').value = window.location.href;
document.getElementById('comment-form').style.display = 'none';
document.getElementById('comment-message').style.display = '';
}, false);
}, false);
})();
</script>
</div>
</div>
<footer class="footer star">
<div id='stars'></div>
<div id='stars2'></div>
<div id='stars3'></div>
<div class="container">
<div class="row">
<ul class="col-sm-6 list-inline">
<li class="list-inline-item"><a
href="https://avinal.space/archives.html">Archives</a></li>
<li class="list-inline-item"><a
href="https://avinal.space/categories.html">Categories</a></li>
<li class="list-inline-item"><a href="https://avinal.space/tags.html">Tags</a></li>
</ul>
<p class="col-sm-6 text-sm-right text-muted">Created with <i class="fa fa-heart" style="color: red;"></i> by <a
href="https://github.com/avinal" target="_blank">Avinal</a>
</p>
</div> </div>
</footer>
</body>
</html>
+65
View File
@@ -0,0 +1,65 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#2d89ef">
<meta name="theme-color" content="#ffffff">
<title>Single Page Apps for GitHub Pages</title>
<script type="text/javascript">
// Single Page Apps for GitHub Pages
// https://github.com/rafrex/spa-github-pages
// Copyright (c) 2016 Rafael Pedicini, licensed under the MIT License
// ----------------------------------------------------------------------
// This script takes the current url and converts the path and query
// string into just a query string, and then redirects the browser
// to the new url with only a query string and hash fragment,
// e.g. http://www.foo.tld/one/two?a=b&c=d#qwe, becomes
// http://www.foo.tld/?p=/one/two&q=a=b~and~c=d#qwe
// Note: this 404.html file must be at least 512 bytes for it to work
// with Internet Explorer (it is currently > 512 bytes)
// If you're creating a Project Pages site and NOT using a custom domain,
// then set segmentCount to 1 (enterprise users may need to set it to > 1).
// This way the code will only replace the route part of the path, and not
// the real directory in which the app resides, for example:
// https://username.github.io/repo-name/one/two?a=b&c=d#qwe becomes
// https://username.github.io/repo-name/?p=/one/two&q=a=b~and~c=d#qwe
// Otherwise, leave segmentCount as 0.
var segmentCount = 0;
var l = window.location;
l.replace(
l.protocol +
"//" +
l.hostname +
(l.port ? ":" + l.port : "") +
l.pathname
.split("/")
.slice(0, 1 + segmentCount)
.join("/") +
"/?p=/" +
l.pathname
.slice(1)
.split("/")
.slice(segmentCount)
.join("/")
.replace(/&/g, "~and~") +
(l.search ? "&q=" + l.search.slice(1).replace(/&/g, "~and~") : "") +
l.hash
);
</script>
</head>
<body></body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 B

@@ -3,7 +3,7 @@
<msapplication>
<tile>
<square150x150logo src="/mstile-150x150.png"/>
<TileColor>#00aba9</TileColor>
<TileColor>#2d89ef</TileColor>
</tile>
</msapplication>
</browserconfig>
Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 433 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.
Binary file not shown.
@@ -0,0 +1,295 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
<defs >
<font id="ShareTechMono" horiz-adv-x="544" ><font-face
font-family="Share Tech Mono"
units-per-em="1000"
panose-1="2 11 5 9 5 0 0 2 0 4"
ascent="885"
descent="-242"
alphabetic="0" />
<glyph unicode=" " glyph-name="space" horiz-adv-x="540" />
<glyph unicode="!" glyph-name="exclam" horiz-adv-x="540" d="M312 700V208H227V700H312ZM320 100V0H220V100H320Z" />
<glyph unicode="&quot;" glyph-name="quotedbl" horiz-adv-x="540" d="M145 610V700H240V610L220 453H165L145 610ZM300 610V700H395V610L375 453H320L300 610Z" />
<glyph unicode="#" glyph-name="numbersign" horiz-adv-x="540" d="M310 0V180H230V0H150V180H80V255H150V455H80V530H150V700H230V530H310V700H390V530H460V455H390V255H460V180H390V0H310ZM230 255H310V455H230V255Z" />
<glyph unicode="$" glyph-name="dollar" horiz-adv-x="540" d="M122 0V76H264Q301 76 324 98T347 151V235Q347 265 332 283T285 302H265Q191 302 148 345T105 472V500Q105 638 227 664V780H312V670H418V594H275Q238 594 215 572T192 519V453Q192 422 212 402T264
381H284Q355 381 394 340T434 216V170Q434 101 403 60T312 5V-110H227V0H122Z" />
<glyph unicode="%" glyph-name="percent" horiz-adv-x="540" d="M289 469T257 437T167 404H159Q101 404 69 436T37 532V572Q37 635 69 667T159 700H167Q225 700 257 668T289 572V532Q289 469 257 437ZM219 608T206 624T167 640H159Q133 640 120 624T107 583V521Q107
496 120 480T159 464H167Q193 464 206 480T219 521V583Q219 608 206 624ZM527 416V354L12 281V343L527 416ZM499 65T467 33T377 0H369Q311 0 279 32T247 128V168Q247 231 279 263T369 296H377Q435 296 467 264T499 168V128Q499 65 467 33ZM429 204T416 220T377
236H369Q343 236 330 220T317 179V117Q317 92 330 76T369 60H377Q403 60 416 76T429 117V179Q429 204 416 220Z" />
<glyph unicode="&amp;" glyph-name="ampersand" horiz-adv-x="540" d="M163 0T123 37T83 158V284Q83 371 148 407Q93 446 93 523V544Q93 625 136 662T265 700H371V625H253Q215 625 198 608T180 553V513Q180 480 201 460T253 440H496V365H417V0H253Q163 0 123 37ZM210
365T190 346T170 293V148Q170 110 188 93T244 75H336V365H243Q210 365 190 346Z" />
<glyph unicode="&apos;" glyph-name="quotesingle" horiz-adv-x="540" d="M222 610V700H317V610L297 453H242L222 610Z" />
<glyph unicode="(" glyph-name="parenleft" horiz-adv-x="540" d="M170 621T199 693T282 820H370Q322 762 299 723T266 634T255 507V193Q255 115 265 66T299 -22T370 -120H282Q229 -65 200 7T170 195V505Q170 621 199 693Z" />
<glyph unicode=")" glyph-name="parenright" horiz-adv-x="540" d="M370 79T341 7T258 -120H170Q218 -62 241 -23T274 66T285 193V507Q285 585 275 634T241 722T170 820H258Q311 765 340 693T370 505V195Q370 79 341 7Z" />
<glyph unicode="*" glyph-name="asterisk" horiz-adv-x="540" d="M357 340L269 482L178 340L108 393L215 515L70 547L97 627L238 570L225 722H315L302 570L445 625L470 546L323 515L429 392L357 340Z" />
<glyph unicode="+" glyph-name="plus" horiz-adv-x="540" d="M230 118V275H79V350H230V508H310V350H460V275H310V118H230Z" />
<glyph unicode="," glyph-name="comma" horiz-adv-x="540" d="M240 0V100H340V0L278 -140H200L240 0Z" />
<glyph unicode="-" glyph-name="hyphen" horiz-adv-x="540" d="M432 350V275H107V350H432Z" />
<glyph unicode="." glyph-name="period" horiz-adv-x="540" d="M320 100V0H220V100H320Z" />
<glyph unicode="/" glyph-name="slash" horiz-adv-x="540" d="M406 810H490L134 -110H50L406 810Z" />
<glyph unicode="0" glyph-name="zero" horiz-adv-x="540" d="M448 87T403 44T280 0H260Q183 0 138 43T92 170V530Q92 614 137 657T260 700H280Q358 700 403 657T448 530V170Q448 87 403 44ZM363 580T340 602T280 625H260Q224 625 201 603T177 549V278L363 549Q363
580 340 602ZM177 120T200 98T260 75H280Q316 75 339 97T363 151V421L177 151Q177 120 200 98Z" />
<glyph unicode="1" glyph-name="one" horiz-adv-x="540" d="M243 75V621L102 569V650L233 700H328V75H437V0H112V75H243Z" />
<glyph unicode="2" glyph-name="two" horiz-adv-x="540" d="M265 316Q297 362 308 381T324 421T328 479V549Q328 580 305 602T245 624H125V700H235Q322 700 368 658T415 530V488Q415 438 408 407T388 352T345 285L197 76H435V0H105V88L265 316Z" />
<glyph unicode="3" glyph-name="three" horiz-adv-x="540" d="M419 75T379 38T249 0H121V75H258Q296 75 314 92T332 148V251Q332 284 312 303T259 323H152V398H249Q280 398 301 418T322 471V553Q322 591 305 608T249 625H121V700H237Q322 700 365 663T409 544V481Q409
404 354 365Q419 329 419 242V158Q419 75 379 38Z" />
<glyph unicode="4" glyph-name="four" horiz-adv-x="540" d="M293 0V156H87V242L194 700H275L173 229H293V457H378V229H453V156H378V0H293Z" />
<glyph unicode="5" glyph-name="five" horiz-adv-x="540" d="M420 75T380 38T250 0H119V75H259Q297 75 315 92T333 148V275Q333 308 313 327T260 347H129V700H405V625H214V422H255Q332 422 376 384T420 266V158Q420 75 380 38Z" />
<glyph unicode="6" glyph-name="six" horiz-adv-x="540" d="M448 88T403 44T290 0H255Q187 0 142 44T97 170V530Q97 615 142 657T275 700H400V624H265Q228 624 205 602T182 549V440H280Q366 440 407 402T448 280V170Q448 88 403 44ZM182 119T203 97T260 75H285Q321
75 342 97T363 151V299Q363 330 345 347T290 365H182V151Q182 119 203 97Z" />
<glyph unicode="7" glyph-name="seven" horiz-adv-x="540" d="M346 625H104V700H429V603L253 0H164L346 625Z" />
<glyph unicode="8" glyph-name="eight" horiz-adv-x="540" d="M454 75T414 38T284 0H256Q166 0 126 37T86 158V242Q86 329 151 365Q98 402 98 481V544Q98 624 140 662T260 700H280Q358 700 400 662T442 544V481Q442 402 389 365Q454 329 454 242V158Q454 75 414
38ZM214 624T200 607T185 553V471Q185 439 203 420T250 398H284Q315 398 335 418T355 471V553Q355 591 339 608T284 625H248Q214 624 200 607ZM367 284T347 303T294 323H246Q213 323 193 304T173 251V148Q173 111 189 93T239 75H293Q331 75 349 92T367 148V251Q367
284 347 303Z" />
<glyph unicode="9" glyph-name="nine" horiz-adv-x="540" d="M96 612T141 656T254 700H289Q357 700 402 656T447 530V170Q447 85 402 43T269 0H154V76H279Q316 76 339 98T362 151V260H264Q178 260 137 298T96 420V530Q96 612 141 656ZM362 581T341 603T284 625H259Q223
625 202 603T181 549V401Q181 370 199 353T254 335H362V549Q362 581 341 603Z" />
<glyph unicode=":" glyph-name="colon" horiz-adv-x="540" d="M320 500V400H220V500H320ZM320 100V0H220V100H320Z" />
<glyph unicode=";" glyph-name="semicolon" horiz-adv-x="540" d="M340 500V400H240V500H340ZM240 0V100H340V0L278 -140H200L240 0Z" />
<glyph unicode="&lt;" glyph-name="less" horiz-adv-x="540" d="M460 564V472L150 336L460 199V105L80 280V385L460 564Z" />
<glyph unicode="=" glyph-name="equal" horiz-adv-x="540" d="M460 450V375H80V450H460ZM460 250V175H80V250H460Z" />
<glyph unicode="&gt;" glyph-name="greater" horiz-adv-x="540" d="M396 336L80 472V564L460 385V280L80 105V199L396 336Z" />
<glyph unicode="?" glyph-name="question" horiz-adv-x="540" d="M409 476T405 456T387 415T338 358L285 304V208H200V329L258 390Q290 424 303 441T320 471T324 509V559Q324 590 306 607T251 624H126V700H241Q409 700 409 550V518Q409 476 405 456ZM293 100V0H193V100H293Z"
/>
<glyph unicode="@" glyph-name="at" horiz-adv-x="540" d="M95 0T62 32T29 140V550Q29 629 66 664T189 700H354Q438 700 474 666T511 550V223Q511 163 487 139T411 115Q378 115 357 130T332 175Q317 159 299 152T251 144Q200 144 177 169T154 259V403Q154 457
169 486T216 527T308 539H380V211Q380 190 386 180T410 170Q429 170 435 179T441 216V560Q441 598 423 617T364 637H179Q136 637 118 618T99 560V130Q99 63 166 63H351V0H166Q95 0 62 32ZM286 202T299 217T312 254V482H297Q254 482 238 468T222 409V253Q222 229
229 216T260 202Q286 202 299 217Z" />
<glyph unicode="A" glyph-name="A" horiz-adv-x="540" d="M173 177L134 0H45L214 700H329L495 0H406L368 177H173ZM352 252L270 634L189 252H352Z" />
<glyph unicode="B" glyph-name="B" horiz-adv-x="540" d="M455 72T416 36T285 0H85V700H273Q362 700 403 664T445 544V487Q445 410 390 371Q455 335 455 248V158Q455 72 416 36ZM358 591T341 608T285 625H172V404H285Q316 404 337 424T358 477V553Q358 591 341
608ZM368 290T348 309T295 329H172V75H294Q332 75 350 92T368 148V257Q368 290 348 309Z" />
<glyph unicode="C" glyph-name="C" horiz-adv-x="540" d="M202 0T156 42T109 170V530Q109 615 155 657T289 700H431V624H279Q242 624 219 602T196 549V151Q196 120 219 98T279 76H431V0H289Q202 0 156 42Z" />
<glyph unicode="D" glyph-name="D" horiz-adv-x="540" d="M458 72T419 36T288 0H82V700H276Q366 700 412 664T458 544V158Q458 72 419 36ZM371 586T351 605T298 625H169V75H297Q335 75 353 92T371 148V553Q371 586 351 605Z" />
<glyph unicode="E" glyph-name="E" horiz-adv-x="540" d="M437 700V627H190V398H412V325H190V73H437V0H103V700H437Z" />
<glyph unicode="F" glyph-name="F" horiz-adv-x="540" d="M415 388V315H193V0H106V700H440V627H193V388H415Z" />
<glyph unicode="G" glyph-name="G" horiz-adv-x="540" d="M187 0T141 42T94 170V530Q94 615 140 657T274 700H415V624H264Q227 624 204 602T181 549V151Q181 120 204 98T264 76H362V293H275V368H445V0H274Q187 0 141 42Z" />
<glyph unicode="H" glyph-name="H" horiz-adv-x="540" d="M167 322V0H80V700H167V396H373V700H460V0H373V322H167Z" />
<glyph unicode="I" glyph-name="I" horiz-adv-x="540" d="M226 73V627H136V700H403V627H313V73H403V0H136V73H226Z" />
<glyph unicode="J" glyph-name="J" horiz-adv-x="540" d="M410 85T364 43T230 0H125V76H240Q277 76 300 98T323 151V625H162V700H410V170Q410 85 364 43Z" />
<glyph unicode="K" glyph-name="K" horiz-adv-x="540" d="M168 258V0H81V700H168V398L358 700H453L260 391L465 0H365L206 315L168 258Z" />
<glyph unicode="L" glyph-name="L" horiz-adv-x="540" d="M202 700V76H425V0H115V700H202Z" />
<glyph unicode="M" glyph-name="M" horiz-adv-x="540" d="M310 235H227L129 628V0H53V700H192L272 342L353 700H488V0H410V628L310 235Z" />
<glyph unicode="N" glyph-name="N" horiz-adv-x="540" d="M160 0H79V700H221L379 74V700H460V0H317L160 626V0Z" />
<glyph unicode="O" glyph-name="O" horiz-adv-x="540" d="M470 85T424 43T290 0H250Q163 0 117 42T70 170V530Q70 615 116 657T250 700H290Q377 700 423 658T470 530V170Q470 85 424 43ZM383 580T360 602T300 624H240Q203 624 180 602T157 549V151Q157 120 180
98T240 76H300Q337 76 360 98T383 151V549Q383 580 360 602Z" />
<glyph unicode="P" glyph-name="P" horiz-adv-x="540" d="M451 349T408 311T281 272H177V0H90V700H279Q364 700 407 663T451 544V430Q451 349 408 311ZM364 591T347 608T291 625H177V347H291Q329 347 346 364T364 420V553Q364 591 347 608Z" />
<glyph unicode="Q" glyph-name="Q" horiz-adv-x="540" d="M347 0T290 0H250Q163 0 117 42T70 170V530Q70 615 116 657T250 700H290Q377 700 423 658T470 530V170Q470 111 447 71L520 -2L463 -59L386 18Q347 0 290 0ZM383 580T360 602T300 624H240Q203 624 180
602T157 549V151Q157 120 180 98T240 76H300Q337 76 360 98T383 151V549Q383 580 360 602Z" />
<glyph unicode="R" glyph-name="R" horiz-adv-x="540" d="M157 290V0H70V700H258Q343 700 386 663T430 544V448Q430 335 340 307L479 0H384L255 290H157ZM343 591T326 608T270 625H157V365H270Q308 365 325 382T343 438V553Q343 591 326 608Z" />
<glyph unicode="S" glyph-name="S" horiz-adv-x="540" d="M439 85T393 43T259 0H117V76H269Q306 76 329 98T352 151V255Q352 285 337 303T290 322H260Q186 322 143 365T100 492V530Q100 615 146 657T280 700H423V624H270Q233 624 210 602T187 549V473Q187 442
207 422T259 401H289Q360 401 399 360T439 236V170Q439 85 393 43Z" />
<glyph unicode="T" glyph-name="T" horiz-adv-x="540" d="M226 0V624H67V700H472V624H313V0H226Z" />
<glyph unicode="U" glyph-name="U" horiz-adv-x="540" d="M462 85T416 43T282 0H257Q170 0 124 42T77 170V700H164V151Q164 120 187 98T247 76H292Q329 76 352 98T375 151V700H462V170Q462 85 416 43Z" />
<glyph unicode="V" glyph-name="V" horiz-adv-x="540" d="M56 700H144L264 88L393 700H479L322 0H203L56 700Z" />
<glyph unicode="W" glyph-name="W" horiz-adv-x="540" d="M268 284L205 0H85L51 700H125L155 75L238 405H300L385 75L416 700H485L451 0H325L268 284Z" />
<glyph unicode="X" glyph-name="X" horiz-adv-x="540" d="M145 0H51L225 362L67 700H162L272 463L386 700H479L317 363L489 0H391L271 263L145 0Z" />
<glyph unicode="Y" glyph-name="Y" horiz-adv-x="540" d="M223 0V325L44 700H140L272 409L404 700H495L313 325V0H223Z" />
<glyph unicode="Z" glyph-name="Z" horiz-adv-x="540" d="M441 0H87V88L361 626H110V700H451V612L178 74H441V0Z" />
<glyph unicode="[" glyph-name="bracketleft" horiz-adv-x="540" d="M375 820V745H245V-45H375V-120H165V820H375Z" />
<glyph unicode="\" glyph-name="backslash" horiz-adv-x="540" d="M490 -110H406L50 810H134L490 -110Z" />
<glyph unicode="]" glyph-name="bracketright" horiz-adv-x="540" d="M295 -45V745H165V820H375V-120H165V-45H295Z" />
<glyph unicode="^" glyph-name="asciicircum" horiz-adv-x="540" d="M159 420H71L215 760H329L468 420H377L273 700L159 420Z" />
<glyph unicode="_" glyph-name="underscore" horiz-adv-x="540" d="M522 -95V-170H18V-95H522Z" />
<glyph unicode="`" glyph-name="grave" horiz-adv-x="540" d="M267 715L371 580H285L163 715H267Z" />
<glyph unicode="a" glyph-name="a" horiz-adv-x="540" d="M404 0T389 8T362 30Q339 0 301 0H212Q136 0 102 30T67 135V155Q67 310 213 310H337V360Q337 391 318 408T262 425H107V500H252Q339 500 380 462T422 340V100Q422 85 433 78T472 70V0H417Q404 0 389 8ZM321
75T329 89T337 125V235H212Q186 235 169 218T152 175V125Q152 99 164 87T202 75H291Q321 75 329 89Z" />
<glyph unicode="b" glyph-name="b" horiz-adv-x="540" d="M453 76T412 38T283 0H87V700H172V480Q202 500 247 500H283Q371 500 412 463T453 340V160Q453 76 412 38ZM204 425T188 408T172 370V75H293Q330 75 349 92T368 140V360Q368 391 349 408T293 425H237Q204
425 188 408Z" />
<glyph unicode="c" glyph-name="c" horiz-adv-x="540" d="M202 0T161 37T120 160V340Q120 424 161 462T290 500H419V425H280Q243 425 224 408T205 360V140Q205 109 224 92T280 75H419V0H290Q202 0 161 37Z" />
<glyph unicode="d" glyph-name="d" horiz-adv-x="540" d="M342 0T295 0H254Q166 0 125 37T84 160V340Q84 424 125 462T254 500H370V700H455V0H375V23Q342 0 295 0ZM338 75T354 92T370 130V425H244Q207 425 188 408T169 360V140Q169 109 188 92T244 75H305Q338 75 354 92Z" />
<glyph unicode="e" glyph-name="e" horiz-adv-x="540" d="M176 0T135 37T94 160V340Q94 426 131 463T254 500H301Q372 500 408 461T445 345V215H179V140Q179 109 198 92T254 75H413V0H264Q176 0 135 37ZM362 365Q362 391 345 408T302 425H244Q208 425 194 409T179
360V290H362V365Z" />
<glyph unicode="f" glyph-name="f" horiz-adv-x="540" d="M288 625T279 617T269 595V500H430V425H269V75H390V0H99V75H184V425H99V500H184V590Q184 641 213 670T288 700H440V625H304Q288 625 279 617Z" />
<glyph unicode="g" glyph-name="g" horiz-adv-x="540" d="M467 -103T427 -136T300 -170H92V-95H310Q346 -95 364 -81T382 -45V-13Q382 10 364 23T310 37H137V175Q104 193 88 227T72 315V340Q72 424 113 462T242 500H452V315Q452 240 411 198T302 155H222V112H300Q386
112 426 79T467 -23V-35Q467 -103 427 -136ZM333 230T349 250T367 292V425H232Q195 425 176 408T157 360V295Q157 264 176 247T232 230H302Q333 230 349 250Z" />
<glyph unicode="h" glyph-name="h" horiz-adv-x="540" d="M172 700V480Q202 500 247 500H293Q374 500 413 462T453 340V0H368V360Q368 390 351 407T303 425H237Q205 425 189 409T172 373V0H87V700H172Z" />
<glyph unicode="i" glyph-name="i" horiz-adv-x="540" d="M317 700V610H222V700H317ZM80 425V500H312V75H460V0H227V425H80Z" />
<glyph unicode="j" glyph-name="j" horiz-adv-x="540" d="M402 700V610H307V700H402ZM294 -95T303 -87T313 -65V425H166V500H398V-60Q398 -111 369 -140T294 -170H137V-95H278Q294 -95 303 -87Z" />
<glyph unicode="k" glyph-name="k" horiz-adv-x="540" d="M181 214V0H96V700H181V322L338 500H445L271 303L459 0H354L207 244L181 214Z" />
<glyph unicode="l" glyph-name="l" horiz-adv-x="540" d="M268 0T243 24T217 100V625H70V700H302V105Q302 89 310 82T337 75H470V0H302Q268 0 243 24Z" />
<glyph unicode="m" glyph-name="m" horiz-adv-x="540" d="M118 500V477Q144 500 180 500H186Q256 500 285 460Q318 500 372 500H378Q439 500 468 469T497 359V0H417V360Q417 401 409 417T370 433H364Q334 433 323 413T310 367V0H230V360Q230 402 220 417T184 433H178Q148
433 136 416T123 376V0H43V500H118Z" />
<glyph unicode="n" glyph-name="n" horiz-adv-x="540" d="M167 500V476Q198 500 247 500H293Q374 500 413 462T453 340V0H368V360Q368 390 351 407T303 425H237Q204 425 188 408T172 370V0H87V500H167Z" />
<glyph unicode="o" glyph-name="o" horiz-adv-x="540" d="M456 76T415 38T286 0H253Q166 0 125 38T83 160V340Q83 424 124 462T253 500H286Q373 500 414 462T456 340V160Q456 76 415 38ZM371 391T352 408T296 425H243Q206 425 187 408T168 360V140Q168 109 187
92T243 75H296Q333 75 352 92T371 140V360Q371 391 352 408Z" />
<glyph unicode="p" glyph-name="p" horiz-adv-x="540" d="M167 500V476Q198 500 247 500H283Q371 500 412 463T453 340V160Q453 76 412 38T283 0H172V-170H87V500H167ZM204 425T188 408T172 370V75H293Q330 75 349 92T368 140V360Q368 391 349 408T293 425H237Q204
425 188 408Z" />
<glyph unicode="q" glyph-name="q" horiz-adv-x="540" d="M339 0T295 0H254Q166 0 125 37T84 160V340Q84 424 125 462T254 500H455V-170H370V20Q339 0 295 0ZM338 75T354 92T370 130V425H244Q207 425 188 408T169 360V140Q169 109 188 92T244 75H305Q338 75 354 92Z" />
<glyph unicode="r" glyph-name="r" horiz-adv-x="540" d="M173 75V425H100V500H253V473Q286 500 333 500H436V420H323Q291 420 275 400T258 358V75H367V0H100V75H173Z" />
<glyph unicode="s" glyph-name="s" horiz-adv-x="540" d="M422 62T384 31T272 0H123V75H282Q309 75 323 86T337 120V173Q337 218 294 218H257Q187 218 153 248T118 345V374Q118 441 156 470T268 500H402V425H258Q233 425 218 414T203 380V344Q203 321 216 310T251
299H285Q352 299 387 267T422 170V125Q422 62 384 31Z" />
<glyph unicode="t" glyph-name="t" horiz-adv-x="540" d="M256 0T229 33T202 120V425H107V500H202V620H287V500H433V425H287V115Q287 93 298 84T332 75H433V0H307Q256 0 229 33Z" />
<glyph unicode="u" glyph-name="u" horiz-adv-x="540" d="M334 0T287 0H253Q172 0 133 38T93 160V500H178V140Q178 110 195 93T243 75H297Q329 75 344 91T362 127V500H447V0H367V23Q334 0 287 0Z" />
<glyph unicode="v" glyph-name="v" horiz-adv-x="540" d="M64 500H156L273 69L387 500H476L332 0H209L64 500Z" />
<glyph unicode="w" glyph-name="w" horiz-adv-x="540" d="M272 251L218 0H125L35 500H120L177 103L243 410H308L368 103L425 500H505L416 0H320L272 251Z" />
<glyph unicode="x" glyph-name="x" horiz-adv-x="540" d="M159 0H65L221 258L77 500H176L271 332L368 500H461L315 262L474 0H374L269 189L159 0Z" />
<glyph unicode="y" glyph-name="y" horiz-adv-x="540" d="M204 -95T216 -86T234 -55L248 0H228L63 500H155L280 81L389 500H476L321 -54Q308 -105 289 -130T247 -162T186 -170H138V-95H180Q204 -95 216 -86Z" />
<glyph unicode="z" glyph-name="z" horiz-adv-x="540" d="M424 0H106V80L340 426H126V500H434V411L202 74H424V0Z" />
<glyph unicode="{" glyph-name="braceleft" horiz-adv-x="540" d="M187 405T202 417T218 469V698Q218 765 243 792T327 820H392V750H341Q317 750 307 743T296 713V469Q296 419 272 387T211 349Q247 345 271 313T296 231V-13Q296 -35 306 -42T341 -50H392V-120H327Q268
-120 243 -93T218 2V231Q218 270 203 282T147 295V405Q187 405 202 417Z" />
<glyph unicode="|" glyph-name="bar" horiz-adv-x="540" d="M310 810V-110H230V810H310Z" />
<glyph unicode="}" glyph-name="braceright" horiz-adv-x="540" d="M352 295T337 283T321 231V2Q321 -65 296 -92T212 -120H147V-50H198Q222 -50 232 -43T243 -13V231Q243 281 267 313T328 349Q292 355 268 387T243 469V713Q243 735 233 742T198 750H147V820H212Q271
820 296 793T321 698V469Q321 430 336 418T392 405V295Q352 295 337 283Z" />
<glyph unicode="~" glyph-name="asciitilde" horiz-adv-x="540" d="M112 352T148 366T197 381H212Q225 381 279 361Q331 341 343 341H353Q360 341 394 356T440 377V297Q429 291 396 277T352 262H337Q331 262 284 279Q219 302 207 302H197Q188 302 151 287T100
266V346Q112 352 148 366Z" />
<glyph unicode="&#xa0;" glyph-name="uni00A0" horiz-adv-x="540" />
<glyph unicode="&#xa1;" glyph-name="exclamdown" horiz-adv-x="540" d="M220 400V500H320V400H220ZM228 -200V292H313V-200H228Z" />
<glyph unicode="&#xa2;" glyph-name="cent" horiz-adv-x="540" d="M188 6T154 43T120 159V339Q120 416 154 453T260 497V600H340V499H419V424H280Q243 424 224 407T205 359V139Q205 108 224 91T280 74H419V-1H340V-110H260V0Q188 6 154 43Z" />
<glyph unicode="&#xa3;" glyph-name="sterling" horiz-adv-x="540" d="M162 530Q162 615 208 657T342 700H439V624H332Q295 624 272 602T249 549V413H377V340H249V73H447V0H92V73H162V340H92V413H162V530Z" />
<glyph unicode="&#xa4;" glyph-name="currency" horiz-adv-x="540" d="M73 206T73 252V350Q73 398 85 429L14 501L71 558L139 490Q176 510 243 510H296Q361 510 400 489L469 558L526 501L453 428Q466 398 466 350V252Q466 207 454 175L526 103L469 46L402 113Q362
92 296 92H243Q174 92 138 113L71 46L14 103L85 174Q73 206 73 252ZM381 401T362 418T306 435H233Q196 435 177 418T158 370V232Q158 201 177 184T233 167H306Q343 167 362 184T381 232V370Q381 401 362 418Z" />
<glyph unicode="&#xa5;" glyph-name="yen" horiz-adv-x="540" d="M224 0V115H94V190H224V265H94V340H221L55 700H151L273 427L394 700H485L316 340H444V265H314V190H444V115H314V0H224Z" />
<glyph unicode="&#xa6;" glyph-name="brokenbar" horiz-adv-x="540" d="M310 810V450H230V810H310ZM310 250V-110H230V250H310Z" />
<glyph unicode="&#xa7;" glyph-name="section" horiz-adv-x="540" d="M113 391T125 419T157 462Q143 477 135 499T127 550V560Q127 633 165 666T277 700H401V625H267Q243 625 228 614T212 580V540Q212 517 225 506T260 495H289Q426 495 426 350V345Q426 277 382
238Q396 228 404 204T412 150V140Q412 67 374 34T262 0H138V75H272Q296 75 311 86T327 120V160Q327 205 283 205H250Q113 205 113 350V355Q113 391 125 419ZM216 420T207 409T198 375V330Q198 307 211 294T251 280H306Q322 280 331 291T341 325V370Q341 394 330
407T289 420H233Q216 420 207 409Z" />
<glyph unicode="&#xa8;" glyph-name="dieresis" horiz-adv-x="540" d="M212 675V595H127V675H212ZM412 675V595H327V675H412Z" />
<glyph unicode="&#xa9;" glyph-name="copyright" horiz-adv-x="540" d="M515 86T472 43T352 0H188Q111 0 68 43T25 170V530Q25 614 68 657T188 700H352Q429 700 472 657T515 530V170Q515 86 472 43ZM443 585T419 610T352 636H188Q145 636 121 611T97 552V147Q97
114 121 89T188 63H352Q395 63 419 88T443 147V552Q443 585 419 610ZM231 157T203 180T175 251V449Q175 496 203 519T283 543H358V492H278Q257 492 245 480T232 450V250Q232 233 244 221T278 208H357V157H283Q231 157 203 180Z" />
<glyph unicode="&#xaa;" glyph-name="ordfeminine" horiz-adv-x="540" d="M359 324T348 329T329 344Q312 324 286 324H234Q177 324 151 347T125 426V441Q125 557 235 557H309V595Q309 618 297 628T256 639H155V700H249Q314 700 345 672T377 580V399Q377 387 385
382T414 377V324H369Q359 324 348 329ZM297 383T303 393T309 420V499H238Q219 499 206 487T193 454V422Q193 383 230 383H274Q297 383 303 393ZM398 75V0H147V75H398Z" />
<glyph unicode="&#xab;" glyph-name="guillemotleft" horiz-adv-x="540" d="M201 506H267L204 299L267 92H201L112 299L201 506ZM361 506H427L364 299L427 92H361L272 299L361 506Z" />
<glyph unicode="&#xac;" glyph-name="logicalnot" horiz-adv-x="540" d="M62 275V350H477V106H392V275H62Z" />
<glyph unicode="&#xad;" glyph-name="uni00AD" horiz-adv-x="540" d="M432 350V275H107V350H432Z" />
<glyph unicode="&#xae;" glyph-name="registered" horiz-adv-x="540" d="M515 86T472 43T352 0H188Q111 0 68 43T25 170V530Q25 614 68 657T188 700H352Q429 700 472 657T515 530V170Q515 86 472 43ZM443 585T419 610T352 636H188Q145 636 121 611T97 552V147Q97
114 121 89T188 63H352Q395 63 419 88T443 147V552Q443 585 419 610ZM225 317V159H169V543H276Q380 543 380 457V404Q380 342 326 326L409 159H348L270 317H225ZM319 478T309 487T276 496H225V363H276Q299 363 309 372T319 403V457Q319 478 309 487Z" />
<glyph unicode="&#xaf;" glyph-name="overscore" horiz-adv-x="540" d="M397 675V605H142V675H397Z" />
<glyph unicode="&#xb0;" glyph-name="degree" horiz-adv-x="540" d="M411 458T375 428T284 397H256Q201 397 165 427T129 516V582Q129 640 164 670T256 701H284Q340 701 375 671T411 582V516Q411 458 375 428ZM342 607T326 623T284 639H256Q231 639 215 623T198
585V513Q198 491 214 475T256 459H284Q309 459 325 475T342 513V585Q342 607 326 623Z" />
<glyph unicode="&#xb1;" glyph-name="plusminus" horiz-adv-x="540" d="M230 143V275H80V350H230V508H310V350H460V275H310V143H230ZM460 75V0H80V75H460Z" />
<glyph unicode="&#xb2;" glyph-name="twosuperior" horiz-adv-x="540" d="M262 431Q295 476 303 495T312 551V587Q312 636 251 636H165V700H244Q318 700 351 672T385 581V558Q385 518 380 496T366 458T331 408L228 269H390V205H150V278L262 431Z" />
<glyph unicode="&#xb3;" glyph-name="threesuperior" horiz-adv-x="540" d="M381 261T352 233T254 205H158V269H251Q279 269 293 280T307 319V374Q307 398 292 412T252 426H181V490H244Q268 490 283 503T299 542V584Q299 613 286 624T244 636H158V700H245Q374
700 374 583V548Q374 520 362 498T330 461Q381 434 381 369V324Q381 261 352 233Z" />
<glyph unicode="&#xb4;" glyph-name="acute" horiz-adv-x="540" d="M376 715L254 580H168L272 715H376Z" />
<glyph unicode="&#xb5;" glyph-name="mu" horiz-adv-x="540" d="M188 500V140Q188 110 205 93T253 75H287Q320 75 336 92T352 130V500H437V0H357V23Q324 0 277 0H263Q218 0 188 10V-170H103V500H188Z" />
<glyph unicode="&#xb6;" glyph-name="paragraph" horiz-adv-x="540" d="M229 374Q141 374 102 408T62 527V540Q62 625 102 662T229 700H318V630H218Q182 630 163 611T143 560V507Q143 476 162 459T218 442H318V0H235V374H229ZM453 700V0H373V700H453Z" />
<glyph unicode="&#xb7;" glyph-name="middot" horiz-adv-x="540" d="M320 360V260H220V360H320Z" />
<glyph unicode="&#xb8;" glyph-name="cedilla" horiz-adv-x="540" d="M250 -136Q283 -136 283 -105Q283 -88 275 -82T248 -76H199V50H269V-21Q315 -21 335 -38T356 -105Q356 -163 331 -181T268 -200H183V-136H250Z" />
<glyph unicode="&#xb9;" glyph-name="onesuperior" horiz-adv-x="540" d="M245 269V633L146 594V662L237 700H319V269H393V205H154V269H245Z" />
<glyph unicode="&#xba;" glyph-name="ordmasculine" horiz-adv-x="540" d="M400 383T369 355T273 326H263Q197 326 166 354T135 446V582Q135 645 166 673T263 702H273Q338 702 369 674T400 582V446Q400 383 369 355ZM332 616T318 628T276 641H259Q232 641 218
629T203 593V435Q203 412 217 400T259 387H276Q304 387 318 399T332 435V593Q332 616 318 628ZM408 75V0H132V75H408Z" />
<glyph unicode="&#xbb;" glyph-name="guillemotright" horiz-adv-x="540" d="M112 506H178L267 299L178 92H112L175 299L112 506ZM272 506H338L427 299L338 92H272L335 299L272 506Z" />
<glyph unicode="&#xbc;" glyph-name="onequarter" horiz-adv-x="540" d="M375 810H449L193 -110H119L375 810ZM77 269V630L11 591V662L79 700H151V269H185V205H29V269H77ZM428 0V117H327V191L381 495H450L388 181H424L451 324H498V181H528V117H498V0H428Z" />
<glyph unicode="&#xbd;" glyph-name="onehalf" horiz-adv-x="540" d="M365 810H453L197 -110H123L365 810ZM77 269V630L11 591V662L79 700H151V269H185V205H29V269H77ZM443 246Q452 266 454 283T457 346V392Q457 431 416 431H380V495H409Q458 495 484 485T520
451T530 386V353Q530 286 527 262T512 216L441 64H535V0H365V73L443 246Z" />
<glyph unicode="&#xbe;" glyph-name="threequarters" horiz-adv-x="540" d="M369 810H443L187 -110H113L369 810ZM198 260T171 233T77 205H21V267H74Q101 267 114 278T128 317V376Q128 400 114 414T75 428H44V488H67Q91 488 105 501T120 540V586Q120 615 108 626T67
638H21V700H68Q131 700 161 672T191 583V548Q191 520 179 498T147 461Q198 434 198 369V324Q198 260 171 233ZM428 0V117H327V191L381 495H450L388 181H424L451 324H498V181H528V117H498V0H428Z" />
<glyph unicode="&#xbf;" glyph-name="questiondown" horiz-adv-x="540" d="M247 400V500H347V400H247ZM131 24T135 44T153 85T202 142L255 196V292H340V171L282 110Q250 77 237 60T220 29T216 -9V-59Q216 -90 234 -107T289 -124H414V-200H299Q131 -200 131 -50V-18Q131
24 135 44Z" />
<glyph unicode="&#xc0;" glyph-name="Agrave" horiz-adv-x="540" d="M253 841L357 726H274L142 841H253ZM173 177L134 0H45L214 700H329L495 0H406L368 177H173ZM352 252L270 634L189 252H352Z" />
<glyph unicode="&#xc1;" glyph-name="Aacute" horiz-adv-x="540" d="M396 841L264 726H181L285 841H396ZM173 177L134 0H45L214 700H329L495 0H406L368 177H173ZM352 252L270 634L181 252H352Z" />
<glyph unicode="&#xc2;" glyph-name="Acircumflex" horiz-adv-x="540" d="M209 730H113L223 845H315L426 730H329L269 794L209 730ZM173 177L134 0H45L214 700H329L495 0H406L368 177H173ZM352 252L270 634L189 252H352Z" />
<glyph unicode="&#xc3;" glyph-name="Atilde" horiz-adv-x="540" d="M144 812T172 826T212 840H227Q235 840 251 834T284 820Q326 800 338 800H348Q356 800 381 815T415 836V764Q407 759 383 745T347 731H332Q327 731 287 748Q235 771 222 771H212Q203 771 174
756T135 735V807Q144 812 172 826ZM173 177L134 0H45L214 700H329L495 0H406L368 177H173ZM352 252L270 634L189 252H352Z" />
<glyph unicode="&#xc4;" glyph-name="Adieresis" horiz-adv-x="540" d="M217 815V735H132V815H217ZM406 815L417 735H332V815H406ZM173 177L134 0H45L214 700H329L495 0H406L368 177H173ZM352 252L270 634L189 252H352Z" />
<glyph unicode="&#xc5;" glyph-name="Aring" horiz-adv-x="540" d="M361 696T335 675L495 0H406L368 177H173L134 0H45L208 674Q179 697 179 741V770Q179 812 203 833T268 855H274Q314 855 338 834T363 770V741Q361 696 335 675ZM306 809T274 809H268Q250 809
242 799T234 771V740Q234 723 242 713T268 702H274Q306 702 306 740V771Q306 809 274 809ZM352 252L270 634L189 252H352Z" />
<glyph unicode="&#xc6;" glyph-name="AE" horiz-adv-x="540" d="M141 177L99 0H15L191 700H498V627H325L348 398H493V325H356L381 73H518V0H307L292 177H141ZM247 627L159 252H283L247 627Z" />
<glyph unicode="&#xc7;" glyph-name="Ccedilla" horiz-adv-x="540" d="M303 -136Q336 -136 336 -105Q336 -88 328 -82T301 -76H252V2Q182 10 146 52T109 170V530Q109 615 155 657T289 700H431V624H279Q242 624 219 602T196 549V151Q196 120 219 98T279 76H431V0H322V-21Q368
-21 388 -38T409 -105Q409 -163 384 -181T321 -200H236V-136H303Z" />
<glyph unicode="&#xc8;" glyph-name="Egrave" horiz-adv-x="540" d="M248 841L352 726H269L137 841H248ZM437 700V627H190V398H412V325H190V73H437V0H103V700H437Z" />
<glyph unicode="&#xc9;" glyph-name="Eacute" horiz-adv-x="540" d="M397 841L265 726H182L286 841H397ZM437 700V627H190V398H412V325H190V73H437V0H103V700H437Z" />
<glyph unicode="&#xca;" glyph-name="Ecircumflex" horiz-adv-x="540" d="M210 730H114L224 845H316L427 730H330L270 794L210 730ZM437 700V627H190V398H412V325H190V73H437V0H103V700H437Z" />
<glyph unicode="&#xcb;" glyph-name="Edieresis" horiz-adv-x="540" d="M212 815V735H127V815H212ZM412 815V735H327V815H412ZM437 700V627H190V398H412V325H190V73H437V0H103V700H437Z" />
<glyph unicode="&#xcc;" glyph-name="Igrave" horiz-adv-x="540" d="M247 841L351 726H268L136 841H247ZM229 73V627H139V700H406V627H316V73H406V0H139V73H229Z" />
<glyph unicode="&#xcd;" glyph-name="Iacute" horiz-adv-x="540" d="M392 841L260 726H177L281 841H392ZM226 73V627H136V700H403V627H313V73H403V0H136V73H226Z" />
<glyph unicode="&#xce;" glyph-name="Icircumflex" horiz-adv-x="540" d="M210 730H114L224 845H316L427 730H330L270 794L210 730ZM227 73V627H137V700H404V627H314V73H404V0H137V73H227Z" />
<glyph unicode="&#xcf;" glyph-name="Idieresis" horiz-adv-x="540" d="M213 815V735H128V815H213ZM413 815V735H328V815H413ZM226 73V627H136V700H403V627H313V73H403V0H136V73H226Z" />
<glyph unicode="&#xd0;" glyph-name="Eth" horiz-adv-x="540" d="M467 72T428 36T297 0H91V325H34V400H91V700H285Q375 700 421 664T467 544V158Q467 72 428 36ZM380 586T360 605T307 625H178V400H294V325H178V75H306Q344 75 362 92T380 148V553Q380 586 360 605Z" />
<glyph unicode="&#xd1;" glyph-name="Ntilde" horiz-adv-x="540" d="M142 812T170 826T210 840H225Q233 840 249 834T282 820Q324 800 336 800H346Q354 800 379 815T413 836V764Q405 759 381 745T345 731H330Q325 731 285 748Q233 771 220 771H210Q201 771 172
756T133 735V807Q142 812 170 826ZM160 0H79V700H221L379 74V700H460V0H317L160 626V0Z" />
<glyph unicode="&#xd2;" glyph-name="Ograve" horiz-adv-x="540" d="M247 841L351 726H268L136 841H247ZM470 85T424 43T290 0H250Q163 0 117 42T70 170V530Q70 615 116 657T250 700H290Q377 700 423 658T470 530V170Q470 85 424 43ZM383 580T360 602T300 624H240Q203
624 180 602T157 549V151Q157 120 180 98T240 76H300Q337 76 360 98T383 151V549Q383 580 360 602Z" />
<glyph unicode="&#xd3;" glyph-name="Oacute" horiz-adv-x="540" d="M399 841L267 726H184L288 841H399ZM470 85T424 43T290 0H250Q163 0 117 42T70 170V530Q70 615 116 657T250 700H290Q377 700 423 658T470 530V170Q470 85 424 43ZM383 580T360 602T300 624H240Q203
624 180 602T157 549V151Q157 120 180 98T240 76H300Q337 76 360 98T383 151V549Q383 580 360 602Z" />
<glyph unicode="&#xd4;" glyph-name="Ocircumflex" horiz-adv-x="540" d="M209 730H113L223 845H315L426 730H329L269 794L209 730ZM470 85T424 43T290 0H250Q163 0 117 42T70 170V530Q70 615 116 657T250 700H290Q377 700 423 658T470 530V170Q470 85 424 43ZM383
580T360 602T300 624H240Q203 624 180 602T157 549V151Q157 120 180 98T240 76H300Q337 76 360 98T383 151V549Q383 580 360 602Z" />
<glyph unicode="&#xd5;" glyph-name="Otilde" horiz-adv-x="540" d="M141 812T169 826T209 840H224Q232 840 248 834T281 820Q323 800 335 800H345Q352 800 377 815T412 836V764Q404 759 380 745T344 731H329Q324 731 284 748Q232 771 219 771H209Q200 771 171
756T132 735V807Q141 812 169 826ZM470 85T424 43T290 0H250Q163 0 117 42T70 170V530Q70 615 116 657T250 700H290Q377 700 423 658T470 530V170Q470 85 424 43ZM383 580T360 602T300 624H240Q203 624 180 602T157 549V151Q157 120 180 98T240 76H300Q337 76 360
98T383 151V549Q383 580 360 602Z" />
<glyph unicode="&#xd6;" glyph-name="Odieresis" horiz-adv-x="540" d="M216 815V735H131V815H216ZM416 815V735H331V815H416ZM470 85T424 43T290 0H250Q163 0 117 42T70 170V530Q70 615 116 657T250 700H290Q377 700 423 658T470 530V170Q470 85 424 43ZM383
580T360 602T300 624H240Q203 624 180 602T157 549V151Q157 120 180 98T240 76H300Q337 76 360 98T383 151V549Q383 580 360 602Z" />
<glyph unicode="&#xd7;" glyph-name="multiply" horiz-adv-x="540" d="M97 193L213 310L97 427L153 483L270 367L387 483L443 427L327 310L443 193L387 137L270 253L153 137L97 193Z" />
<glyph unicode="&#xd8;" glyph-name="Oslash" horiz-adv-x="540" d="M470 85T424 43T290 0H250Q223 0 211 2L185 -91H109L141 24Q70 66 70 170V530Q70 615 116 657T250 700H290Q303 700 327 698L353 791H429L397 676Q470 636 470 530V170Q470 85 424 43ZM157 131T166
116L306 624H240Q203 624 180 602T157 549V151Q157 131 166 116ZM383 569T372 586L231 76H300Q337 76 360 98T383 151V549Q383 569 372 586Z" />
<glyph unicode="&#xd9;" glyph-name="Ugrave" horiz-adv-x="540" d="M227 841L331 726H248L116 841H227ZM462 85T416 43T282 0H257Q170 0 124 42T77 170V700H164V151Q164 120 187 98T247 76H292Q329 76 352 98T375 151V700H462V170Q462 85 416 43Z" />
<glyph unicode="&#xda;" glyph-name="Uacute" horiz-adv-x="540" d="M426 841L294 726H211L315 841H426ZM462 85T416 43T282 0H257Q170 0 124 42T77 170V700H164V151Q164 120 187 98T247 76H292Q329 76 352 98T375 151V700H462V170Q462 85 416 43Z" />
<glyph unicode="&#xdb;" glyph-name="Ucircumflex" horiz-adv-x="540" d="M214 730H118L228 845H320L431 730H334L274 794L214 730ZM462 85T416 43T282 0H257Q170 0 124 42T77 170V700H164V151Q164 120 187 98T247 76H292Q329 76 352 98T375 151V700H462V170Q462
85 416 43Z" />
<glyph unicode="&#xdc;" glyph-name="Udieresis" horiz-adv-x="540" d="M214 815V735H129V815H214ZM414 815V735H329V815H414ZM462 85T416 43T282 0H257Q170 0 124 42T77 170V700H164V151Q164 120 187 98T247 76H292Q329 76 352 98T375 151V700H462V170Q462 85 416 43Z" />
<glyph unicode="&#xdd;" glyph-name="Yacute" horiz-adv-x="540" d="M401 841L269 726H186L290 841H401ZM223 0V325L44 700H140L272 409L404 700H495L313 325V0H223Z" />
<glyph unicode="&#xde;" glyph-name="Thorn" horiz-adv-x="540" d="M455 219T412 181T285 142H181V0H94V700H181V570H283Q368 570 411 533T455 414V300Q455 219 412 181ZM368 461T351 478T295 495H181V217H295Q333 217 350 234T368 290V423Q368 461 351 478Z" />
<glyph unicode="&#xdf;" glyph-name="germandbls" horiz-adv-x="540" d="M78 630T121 665T228 700H267Q355 700 396 663T437 540V415H359Q329 415 317 404T304 370V355Q304 332 315 321T347 310Q402 310 434 278T466 190V125Q466 69 431 35T328 0H216V75H334Q381
75 381 120V190Q381 212 371 223T335 235Q284 235 252 268T219 356V366Q219 430 253 456T352 486V560Q352 591 333 608T277 625H223Q190 625 177 608T163 570V0H78V560Q78 630 121 665Z" />
<glyph unicode="&#xe0;" glyph-name="agrave" horiz-adv-x="540" d="M238 715L342 580H256L134 715H238ZM404 0T389 8T362 30Q339 0 301 0H212Q136 0 102 30T67 135V155Q67 310 213 310H337V360Q337 391 318 408T262 425H107V500H252Q339 500 380 462T422 340V100Q422
85 433 78T472 70V0H417Q404 0 389 8ZM321 75T329 89T337 125V235H212Q186 235 169 218T152 175V125Q152 99 164 87T202 75H291Q321 75 329 89Z" />
<glyph unicode="&#xe1;" glyph-name="aacute" horiz-adv-x="540" d="M410 715L288 580H202L306 715H410ZM404 0T389 8T362 30Q339 0 301 0H212Q136 0 102 30T67 135V155Q67 310 213 310H337V360Q337 391 318 408T262 425H107V500H252Q339 500 380 462T422 340V100Q422
85 433 78T472 70V0H417Q404 0 389 8ZM321 75T329 89T337 125V235H212Q186 235 169 218T152 175V125Q152 99 164 87T202 75H291Q321 75 329 89Z" />
<glyph unicode="&#xe2;" glyph-name="acircumflex" horiz-adv-x="540" d="M194 580H98L210 715H298L411 580H314L254 655L194 580ZM404 0T389 8T362 30Q339 0 301 0H212Q136 0 102 30T67 135V155Q67 310 213 310H337V360Q337 391 318 408T262 425H107V500H252Q339
500 380 462T422 340V100Q422 85 433 78T472 70V0H417Q404 0 389 8ZM321 75T329 89T337 125V235H212Q186 235 169 218T152 175V125Q152 99 164 87T202 75H291Q321 75 329 89Z" />
<glyph unicode="&#xe3;" glyph-name="atilde" horiz-adv-x="540" d="M115 672T143 686T183 700H198Q206 700 222 694T255 680Q297 660 309 660H319Q327 660 352 675T386 696V624Q378 619 354 605T318 591H303Q298 591 258 608Q206 631 193 631H183Q174 631 145
616T106 595V667Q115 672 143 686ZM404 0T389 8T362 30Q339 0 301 0H212Q136 0 102 30T67 135V155Q67 310 213 310H337V360Q337 391 318 408T262 425H107V500H252Q339 500 380 462T422 340V100Q422 85 433 78T472 70V0H417Q404 0 389 8ZM321 75T329 89T337 125V235H212Q186
235 169 218T152 175V125Q152 99 164 87T202 75H291Q321 75 329 89Z" />
<glyph unicode="&#xe4;" glyph-name="adieresis" horiz-adv-x="540" d="M191 675V595H106V675H191ZM391 675V595H306V675H391ZM404 0T389 8T362 30Q339 0 301 0H212Q136 0 102 30T67 135V155Q67 310 213 310H337V360Q337 391 318 408T262 425H107V500H252Q339
500 380 462T422 340V100Q422 85 433 78T472 70V0H417Q404 0 389 8ZM321 75T329 89T337 125V235H212Q186 235 169 218T152 175V125Q152 99 164 87T202 75H291Q321 75 329 89Z" />
<glyph unicode="&#xe5;" glyph-name="aring" horiz-adv-x="540" d="M344 592T319 570T255 548H249Q210 548 185 570T160 633V662Q160 704 184 725T249 747H255Q295 747 319 726T344 662V633Q344 592 319 570ZM287 701T255 701H249Q231 701 223 691T215 663V632Q215
615 223 605T249 594H255Q287 594 287 632V663Q287 701 255 701ZM404 0T389 8T362 30Q339 0 301 0H212Q136 0 102 30T67 135V155Q67 310 213 310H337V360Q337 391 318 408T262 425H107V500H252Q339 500 380 462T422 340V100Q422 85 433 78T472 70V0H417Q404 0 389
8ZM321 75T329 89T337 125V235H212Q186 235 169 218T152 175V125Q152 99 164 87T202 75H291Q321 75 329 89Z" />
<glyph unicode="&#xe6;" glyph-name="ae" horiz-adv-x="540" d="M346 0T317 11T273 47Q262 27 237 14T174 0H160Q93 0 59 31T25 135V147Q25 224 59 263T166 302H232V360Q232 392 217 408T165 425H60V500H155Q200 500 226 491T275 463Q296 483 316 491T375 500H382Q452
500 484 461T516 345V229H315V132Q318 73 385 73H484V0H395Q346 0 317 11ZM435 367Q435 394 422 410T383 427H375Q340 427 328 411T315 362V302H435V367ZM137 229T123 212T108 167V123Q108 97 120 85T158 73H184Q214 73 223 87T232 123V229H163Q137 229 123 212Z"
/>
<glyph unicode="&#xe7;" glyph-name="ccedilla" horiz-adv-x="540" d="M293 -136Q326 -136 326 -105Q326 -88 318 -82T291 -76H242V3Q180 12 150 49T120 160V340Q120 424 161 462T290 500H419V425H280Q243 425 224 408T205 360V140Q205 109 224 92T280 75H419V0H312V-21Q358
-21 378 -38T399 -105Q399 -163 374 -181T311 -200H226V-136H293Z" />
<glyph unicode="&#xe8;" glyph-name="egrave" horiz-adv-x="540" d="M261 715L365 580H279L157 715H261ZM176 0T135 37T94 160V340Q94 426 131 463T254 500H301Q372 500 408 461T445 345V215H179V140Q179 109 198 92T254 75H413V0H264Q176 0 135 37ZM362 365Q362
391 345 408T302 425H244Q208 425 194 409T179 360V290H362V365Z" />
<glyph unicode="&#xe9;" glyph-name="eacute" horiz-adv-x="540" d="M426 715L304 580H218L322 715H426ZM176 0T135 37T94 160V340Q94 426 131 463T254 500H301Q372 500 408 461T445 345V215H179V140Q179 109 198 92T254 75H413V0H264Q176 0 135 37ZM362 365Q362
391 345 408T302 425H244Q208 425 194 409T179 360V290H362V365Z" />
<glyph unicode="&#xea;" glyph-name="ecircumflex" horiz-adv-x="540" d="M211 580H115L227 715H315L428 580H331L271 655L211 580ZM176 0T135 37T94 160V340Q94 426 131 463T254 500H301Q372 500 408 461T445 345V215H179V140Q179 109 198 92T254 75H413V0H264Q176
0 135 37ZM362 365Q362 391 345 408T302 425H244Q208 425 194 409T179 360V290H362V365Z" />
<glyph unicode="&#xeb;" glyph-name="edieresis" horiz-adv-x="540" d="M218 675V595H133V675H218ZM418 675V595H333V675H418ZM176 0T135 37T94 160V340Q94 426 131 463T254 500H301Q372 500 408 461T445 345V215H179V140Q179 109 198 92T254 75H413V0H264Q176
0 135 37ZM362 365Q362 391 345 408T302 425H244Q208 425 194 409T179 360V290H362V365Z" />
<glyph unicode="&#xec;" glyph-name="igrave" horiz-adv-x="540" d="M253 715L357 580H271L149 715H253ZM80 425V500H312V75H460V0H227V425H80Z" />
<glyph unicode="&#xed;" glyph-name="iacute" horiz-adv-x="540" d="M413 715L291 580H205L309 715H413ZM80 425V500H312V75H460V0H227V425H80Z" />
<glyph unicode="&#xee;" glyph-name="icircumflex" horiz-adv-x="540" d="M213 580H117L229 715H317L430 580H333L273 655L213 580ZM80 425V500H312V75H460V0H227V425H80Z" />
<glyph unicode="&#xef;" glyph-name="idieresis" horiz-adv-x="540" d="M213 675V595H128V675H213ZM413 675V595H328V675H413ZM80 425V500H312V75H460V0H227V425H80Z" />
<glyph unicode="&#xf0;" glyph-name="eth" horiz-adv-x="540" d="M223 626H147V700H266L296 750H378L342 690Q445 658 445 530V170Q445 88 400 44T287 0H252Q184 0 139 44T94 170V300Q94 384 135 422T262 460H360V549Q360 574 345 594T303 622L270 566H188L223
626ZM216 385T198 368T179 319V151Q179 119 200 97T257 75H282Q318 75 339 97T360 151V385H252Q216 385 198 368Z" />
<glyph unicode="&#xf1;" glyph-name="ntilde" horiz-adv-x="540" d="M146 672T174 686T214 700H229Q237 700 253 694T286 680Q328 660 340 660H350Q357 660 382 675T417 696V624Q409 619 385 605T349 591H334Q329 591 289 608Q237 631 224 631H214Q205 631 176
616T137 595V667Q146 672 174 686ZM167 500V476Q198 500 247 500H293Q374 500 413 462T453 340V0H368V360Q368 390 351 407T303 425H237Q204 425 188 408T172 370V0H87V500H167Z" />
<glyph unicode="&#xf2;" glyph-name="ograve" horiz-adv-x="540" d="M261 715L365 580H279L157 715H261ZM452 76T411 38T282 0H249Q162 0 121 38T79 160V340Q79 424 120 462T249 500H282Q369 500 410 462T452 340V160Q452 76 411 38ZM367 391T348 408T292 425H239Q202
425 183 408T164 360V140Q164 109 183 92T239 75H292Q329 75 348 92T367 140V360Q367 391 348 408Z" />
<glyph unicode="&#xf3;" glyph-name="oacute" horiz-adv-x="540" d="M377 715L255 580H169L273 715H377ZM456 76T415 38T286 0H253Q166 0 125 38T83 160V340Q83 424 124 462T253 500H286Q373 500 414 462T456 340V160Q456 76 415 38ZM371 391T352 408T296 425H243Q206
425 187 408T168 360V140Q168 109 187 92T243 75H296Q333 75 352 92T371 140V360Q371 391 352 408Z" />
<glyph unicode="&#xf4;" glyph-name="ocircumflex" horiz-adv-x="540" d="M210 580H114L226 715H314L427 580H330L270 655L210 580ZM456 76T415 38T286 0H253Q166 0 125 38T83 160V340Q83 424 124 462T253 500H286Q373 500 414 462T456 340V160Q456 76 415 38ZM371
391T352 408T296 425H243Q206 425 187 408T168 360V140Q168 109 187 92T243 75H296Q333 75 352 92T371 140V360Q371 391 352 408Z" />
<glyph unicode="&#xf5;" glyph-name="otilde" horiz-adv-x="540" d="M139 672T167 686T207 700H222Q230 700 246 694T279 680Q321 660 333 660H343Q351 660 376 675T410 696V624Q402 619 378 605T342 591H327Q322 591 282 608Q230 631 217 631H207Q198 631 169
616T130 595V667Q139 672 167 686ZM456 76T415 38T286 0H253Q166 0 125 38T83 160V340Q83 424 124 462T253 500H286Q373 500 414 462T456 340V160Q456 76 415 38ZM371 391T352 408T296 425H243Q206 425 187 408T168 360V140Q168 109 187 92T243 75H296Q333 75 352
92T371 140V360Q371 391 352 408Z" />
<glyph unicode="&#xf6;" glyph-name="odieresis" horiz-adv-x="540" d="M213 675V595H128V675H213ZM413 675V595H328V675H413ZM456 76T415 38T286 0H253Q166 0 125 38T83 160V340Q83 424 124 462T253 500H286Q373 500 414 462T456 340V160Q456 76 415 38ZM371
391T352 408T296 425H243Q206 425 187 408T168 360V140Q168 109 187 92T243 75H296Q333 75 352 92T371 140V360Q371 391 352 408Z" />
<glyph unicode="&#xf7;" glyph-name="divide" horiz-adv-x="540" d="M320 560V460H220V560H320ZM460 350V275H80V350H460ZM320 165V65H220V165H320Z" />
<glyph unicode="&#xf8;" glyph-name="oslash" horiz-adv-x="540" d="M456 76T415 38T286 0H233L206 -89H128L159 15Q121 32 102 67T83 160V340Q83 424 124 462T253 500H286Q300 500 306 499L334 589H411L379 484Q418 467 437 432T456 340V160Q456 76 415 38ZM168
112T183 95L284 425H243Q206 425 187 408T168 360V140Q168 112 183 95ZM371 388T355 404L255 75H296Q333 75 352 92T371 140V360Q371 388 355 404Z" />
<glyph unicode="&#xf9;" glyph-name="ugrave" horiz-adv-x="540" d="M239 715L343 580H257L135 715H239ZM334 0T287 0H253Q172 0 133 38T93 160V500H178V140Q178 110 195 93T243 75H297Q329 75 344 91T362 127V500H447V0H367V23Q334 0 287 0Z" />
<glyph unicode="&#xfa;" glyph-name="uacute" horiz-adv-x="540" d="M425 715L303 580H217L321 715H425ZM334 0T287 0H253Q172 0 133 38T93 160V500H178V140Q178 110 195 93T243 75H297Q329 75 344 91T362 127V500H447V0H367V23Q334 0 287 0Z" />
<glyph unicode="&#xfb;" glyph-name="ucircumflex" horiz-adv-x="540" d="M209 580H113L225 715H313L426 580H329L269 655L209 580ZM334 0T287 0H253Q172 0 133 38T93 160V500H178V140Q178 110 195 93T243 75H297Q329 75 344 91T362 127V500H447V0H367V23Q334 0 287 0Z" />
<glyph unicode="&#xfc;" glyph-name="udieresis" horiz-adv-x="540" d="M210 675V595H125V675H210ZM410 675V595H325V675H410ZM334 0T287 0H253Q172 0 133 38T93 160V500H178V140Q178 110 195 93T243 75H297Q329 75 344 91T362 127V500H447V0H367V23Q334 0 287 0Z" />
<glyph unicode="&#xfd;" glyph-name="yacute" horiz-adv-x="540" d="M403 715L281 580H195L299 715H403ZM204 -95T216 -86T234 -55L248 0H228L63 500H155L280 81L389 500H476L321 -54Q308 -105 289 -130T247 -162T186 -170H138V-95H180Q204 -95 216 -86Z" />
<glyph unicode="&#xfe;" glyph-name="thorn" horiz-adv-x="540" d="M371 500T412 463T453 340V160Q453 76 412 38T283 0H182V-170H97V700H182V480Q213 500 257 500H283Q371 500 412 463ZM368 391T349 408T293 425H247Q214 425 198 408T182 370V75H293Q330 75 349
92T368 140V360Q368 391 349 408Z" />
<glyph unicode="&#xff;" glyph-name="ydieresis" horiz-adv-x="540" d="M212 675V595H127V675H212ZM412 675V595H327V675H412ZM204 -95T216 -86T234 -55L248 0H228L63 500H155L280 81L389 500H476L321 -54Q308 -105 289 -130T247 -162T186 -170H138V-95H180Q204
-95 216 -86Z" />
<glyph unicode="&#x2013;" glyph-name="endash" horiz-adv-x="540" d="M460 350V275H80V350H460Z" />
<glyph unicode="&#x2014;" glyph-name="emdash" horiz-adv-x="540" d="M507 350V275H32V350H507Z" />
<glyph unicode="&#x2018;" glyph-name="quoteleft" horiz-adv-x="540" d="M302 542V452H207V542L262 699H332L302 542Z" />
<glyph unicode="&#x2019;" glyph-name="quoteright" horiz-adv-x="540" d="M237 610V700H332V610L277 453H207L237 610Z" />
<glyph unicode="&#x201a;" glyph-name="quotesinglbase" horiz-adv-x="540" d="M237 0V90H332V0L277 -157H207L237 0Z" />
<glyph unicode="&#x201c;" glyph-name="quotedblleft" horiz-adv-x="540" d="M225 542V452H130V542L185 699H255L225 542ZM380 542V452H285V542L340 699H410L380 542Z" />
<glyph unicode="&#x201d;" glyph-name="quotedblright" horiz-adv-x="540" d="M160 610V700H255V610L200 453H130L160 610ZM315 610V700H410V610L355 453H285L315 610Z" />
<glyph unicode="&#x201e;" glyph-name="quotedblbase" horiz-adv-x="540" d="M160 0V90H255V0L200 -157H130L160 0ZM315 0V90H410V0L355 -157H285L315 0Z" />
<glyph unicode="&#x2022;" glyph-name="bullet" horiz-adv-x="540" d="M345 390V235H195V390H345Z" />
<glyph unicode="&#x2039;" glyph-name="guilsinglleft" horiz-adv-x="540" d="M281 506H347L284 299L347 92H281L192 299L281 506Z" />
<glyph unicode="&#x203a;" glyph-name="guilsinglright" horiz-adv-x="540" d="M192 506H258L347 299L258 92H192L255 299L192 506Z" />
</font>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
+1966
View File
File diff suppressed because it is too large Load Diff
+1
View File
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 141 KiB

Before

Width:  |  Height:  |  Size: 184 KiB

After

Width:  |  Height:  |  Size: 184 KiB

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 83 KiB

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 512"><!--! Font Awesome Pro 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --><path d="M144 80c0 26.5-21.5 48-48 48s-48-21.5-48-48s21.5-48 48-48s48 21.5 48 48zM0 224c0-17.7 14.3-32 32-32H96c17.7 0 32 14.3 32 32V448h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H64V256H32c-17.7 0-32-14.3-32-32z"/></svg>

After

Width:  |  Height:  |  Size: 486 B

Before

Width:  |  Height:  |  Size: 372 KiB

After

Width:  |  Height:  |  Size: 372 KiB

Before

Width:  |  Height:  |  Size: 163 KiB

After

Width:  |  Height:  |  Size: 163 KiB

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Some files were not shown because too many files have changed in this diff Show More