new changes

This commit is contained in:
2025-04-05 11:20:00 +01:00
commit e635774871
255 changed files with 2506 additions and 0 deletions

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "themes/PaperMod"]
path = themes/PaperMod
url = https://github.com/adityatelange/hugo-PaperMod.git

0
.hugo_build.lock Normal file
View File

5
archetypes/default.md Normal file
View File

@@ -0,0 +1,5 @@
---
date: '{{ .Date }}'
draft: true
title: '{{ replace .File.ContentBaseName "-" " " | title }}'
---

23
content/about.md Normal file
View File

@@ -0,0 +1,23 @@
---
title: About
summary: I am a Homosapien
description: I am a Homosapien
---
## Hi there,
I am just a normal person.
I love to build stuff and a huge believer in randomization.
### Areas I focus on:
1. Distributed computation
2. p2p networks
3. RISC-V
4. Linux distributions
5. Compilers
<!-- ### Preferred programming langauge to use:
- Go lang (Scalable code) -->
### My wish list
- FS2020 becomes open source or better alternatives catch up.
- Distributed computing on the foundations of a p2p network becomes the standard norm.
<!-- - Using houseold devices to generate basic income -->

10
content/chat.md Normal file
View File

@@ -0,0 +1,10 @@
---
title: Chat
summary: One to one conversation
description: One to one conversation
---
If you would like to have a one of one chat you can initially email me with
the email me@akilan.io. I will normally respond within 24 hours and at the worst
case 48 hours.
<!-- Link: https://calendly.com/akilan1999 -->

View File

@@ -0,0 +1,91 @@
---
title: "Why FS2020 is something very Exciting"
summary: Closer towards a future where it's hard to compare reality and simulation
date: 2020-05-02
tags: ["Flightsim","Introduction"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/fs2020]
weight: 2
---
## What are Flight sims ?
A flight simulator is a device that artificially re-creates aircraft flight and the environment in which it flies, for pilot training, design, or other purposes. It has been really popular since 1982. The first release was called subLogic flight simulator which was released in 1979 on the Apple II.
![](https://i.ytimg.com/vi/vK-iIrIEOyc/hqdefault.jpg)
Since this release flight sim has completely evolved with newer versions with newer features which means more and more accurate modelling of newer aircrafts.
### Important milestones:
- Flight Simulator 2.0:
![](https://s.uvlist.net/l/y2014/01/122928.jpg)
- Flight Simulator 5.1:
![](https://i.ytimg.com/vi/dHpzHYHcqV8/hqdefault.jpg)
- Flight Simulator X:
![](https://s3-eu-west-2.amazonaws.com/assets.fsxinsider.com/app/uploads/2015/09/27215612/Image2.jpg)
Flight sims have also become part open source. The current best flight simulator in the market Xplane 11 has open source modules such as BetterPushBack , SharedCockpit etc ... In recent years flight school students can even skip most of the instrumental classes for aircrafts such as the Ceesna's due to the fact that they have already learned it in the flight sim at home.
## FS2020 Competitor
Before we start the discussion of FS2020 we need to compare the current progress of their competitor [Xplane](https://www.x-plane.com/) which is designed by a Software Company called [Laminar research](http://www.laminarresearch.com/). Xplane 11 is the current best Flight sim platform out there. Xplane 11 comes built in with VR compatibility , Runs on all platforms such as Mac , Windows , Linux and the graphics speaks for itself and runs on most common Pc's on today's standards.
![](https://steamcdn-a.akamaihd.net/steam/apps/269950/ss_35a2520bad426346196ac6e2aa96883e96f84e59.1920x1080.jpg?t=1586961059)
[XPlane 11 in VR](https://www.youtube.com/watch?v=31S_jUy3h7Q&t=887s)
## Introduction to FS2020
The release date of FS2020 is still unknown due to COVID19 delays. All we know is that it should be coming out sometime this year. The idea is that the game is rendered on your PC but the scenery is downloaded from the azure servers. The reason it has a lot of hype is because of the fact that it's graphics is game changing and even the amount of realism that they have added to the game (We will talk more on this later).
## Ground Scenery
![](https://lh6.googleusercontent.com/sagSw47Tw5K8i9KLgN-SZVKudzYN4B2UJu78qEiKZniaTaEWmFRkj673Cr4CCkISZgvYk0Q5mk-HF-2SU_tUfn_PqzCoCBbjK8q1Ur1X9lzlQJQjvvJV_p59qdPV470iw3uOZTwM)
The game has an online and offline maps. The Hype comes from the online maps as it's a 3D map from Bing. With the current technology, satellites are able to take a picture of cities from different angles and generate 3D models out of them and the game developers have been using a lot of machine learning techniques to generate the tiniest details such as grass ,trees , cars on the road etc.. There have also been very funny comments on these 3D maps such as "Tips on how to tour north korea", "How to catch your wife cheating","This video gave me morning wood. Girlfriend thought it was because of her. Yea honey....it's totally you." etc...
[This link will give you a general idea on 3D models of cities look like](https://earth.google.com/web/@40.71247137,-74.0072421,27.70327415a,2644.644745d,35y,35.47111927h,60.00244366t,0r)
For higher details many of the major airports are modeled partially manually. The movement ground crew and vehicles are all a bunch of AI's working in parallel. The details of the runway and taxiway are super high. In the demo we can even see tiny stones on the taxiway.
As per the developers the 3D models are generated using Photogrammetry data or else it's augmented bitmap which means that the base image is from bing maps and then it's filled with some pre-build objects. The size of the bing scenery which they use is around 2 Petabytes and this is only one aspect of the Sim. All the maps are generated or drawn based on the horizon and this varies based on the height of the aircraft.
## Behavior in the Sky
![](https://lh5.googleusercontent.com/_vxFWb0lLyo-NnwgypPoz4m0EFRbNX4qh54E5-YvnlPZ1cZEo-xW7kv9MqK06ns561bTfS2_QTwi13uEnU1CcLDBo8G9mg84nGBhvBqPiXl0fBU2K124CfedGS7_IOlpxG2PkjxD)
Again for the weather there is online and offline data. Is it actually interesting to know that simulating or modeling the weather is as complex as doing it for the ground. To simulate that the game generates millions of virtual particles to generate accurate lift for the aircraft. In many other sims the stalls in the code have been like flags (i.e on and off switch) this means that when the aircraft loses speed the nose dive will be a bit unrealistic. This has been fixed in FS2020 and they calculate various aspects such as density of air , wind patterns because at many times the aircraft would not even stall due to the design of the hardware which automatically pushes the nose down to gain speed. FS2020 can even predict which direction the aircraft will stall at.
### Atmospheric Simulation:
The developers had to use a fresh approach to ensure that the lighting effects have to be as realistic as possible and to also accommodate all new techniques coming out from the video game industry. They have their own scattering system which gets lights from unified sources such as Sunlight ,Moonlight ,Starlight ,City light etc... The photons are scattered based on the parameters such as humidity , weather , pollution etc ... The shadows of the clouds are casted on the ground , shadows of the ground have been casted on the clouds and so this gives unbelievable sights.
### Weather Special Effects:
The sim has volumetric 3D rain , volumetric Rainbow scattering; this means that the rainbow is generated based on the compositions required to generate one. Each water droplet on the windshield is generated based on the speed of the aircraft and as the aircraft speed varies this impacts on how much the water is stretched in the windshield of the cockpit.
The sim even has window icing that takes place mostly in the cruise altitude if the Anti ice systems are not turned on in the aircraft.
The position of the sun , moon and stars will be informed based on date and time of year and even the light of the city will be reflected back to the cloud which creates realistic VFR flying. The reflection of the building on water is also realistic based on time of day, number of clouds etc.. and it is rendered the same way as how the atmosphere is rendered.
### Volumetric clouds:
This is one of the best features for anyone flying aircraft's through clouds. There are 32 layers from sea level and they are based on density , shape , fuzziness and all these clouds can be seen from any angle. The formations are informed based on the updraft winds. The sim natively supports all types of clouds. The max view distance of generated clouds is 600 km.
### Real Weather Data:
The weather data is collected from one of the research centers in Switzerland. Based on data provided to the engine, The corresponding clouds and updrafts are generated. The sim gets upto 32 layers of real world cloud data, pressure , humidity, temperature, wind speed and gusts.
## Specs for the game:
![](https://lh3.googleusercontent.com/F-UoR7uLg0AfDB0ybzpE4uE8UM-IndxoVoLaSVlERcO7bBUXPERSNINNJLV8FqtWfjOtozGm7zf1rbmrHJPgXXidqMgOGyKfQPIM3eHKnNWARYIEVSqeAetDidGbAdxv_4NTDaox)

View File

@@ -0,0 +1,26 @@
---
title: "Open to work"
summary: Just graduated looking for remote or work based in the UAE.
date: 2024-07-07
tags: ["Work","Open"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/opentowork]
weight: 1
---
I am current working on my PhD experiments on CHERI based capability system.
[Read more](https://github.com/Akilan1999/phd-thesis/releases/download/Year2/thesis.pdf)
I am currently looking for work as a part time software engineer (Max 17 hours a week). What I
am capable of building is what you see in my website.
#### Current Location: UK (GMT +1)
#### Preferred rate hourly: 60$ an hour
#### Contact email: me@akilan.io (Response time will be 24 hours)
I am happy to have a conversation with interested employers :)

View File

@@ -0,0 +1,31 @@
---
title: "Psychological challenges working on P2PRC POST 1"
summary: Mental challenges I face when working on open source project I created called P2PRC.
tags: ["P2PRC","Psychological"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/P2PRC_Psychological_1]
weight: 1
---
Okay so P2PRC is a technical topic atleast for me as it's about a peer to peer networks that is designed for computation. This post is about how I feel mentally working on this project. What I am talking about in this post can be linked to how I feel working in
any of my personal projects.
At the current stage of P2PRC, I have been trying to use my free time on trying to build a binary that just works. I know it's being
optimistic but I am way over my head at many instances. The painful
part for me is figure out how to get this project at a useful state.
At the current moment P2PRC project is like me talking to myself.
Example I create an Issue , fix it and review my own code. It's like taking to yourself. This is fine initially but it just feels
extremely (i.e in kind words) lonely. No one is blame for this
but it's a true fact in my case simple as that.
I have no idea on why I keep working on this project. I guess
maybe it's just that I have fun doing it. The true fact is that it
is fun at times and really lonley at many times. As a hacker or
Open Source developer (i.e call it whatever you like). The important thing would just be feedback and hopefully feeling
happy on what you built.
I promoised that I would continue this project for 3 more years and
see how it continues from there. The project is at the very initial stages and very tough to say what would be it's fate. The aim of this was to be helping hand towards the main aim of creating a distributed game engine. But at the moment have no clue on how a
game engine works.

View File

@@ -0,0 +1,5 @@
---
title: General Posts
summary: General concepts and stuff I love to talk about.
description: Mostly on my hobbies and stuff other than CS topics.
---

5
content/hiking/_index.md Normal file
View File

@@ -0,0 +1,5 @@
---
title: Hiking
summary: Logging the places I hiking around for the weekend (To be updated on a weekly basis).
description: Logging the places I hiking around for the weekend (To be updated on a weekly basis).
---

View File

@@ -0,0 +1,54 @@
---
title: "Burntisland (Burnt Island)"
summary: The hike with best weather so far in the warmest Scottish winter.
tags: ["hiking","good weather","seaside"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/CutestTrainStation]
weight: 3
---
## Key Picture
![](/img/hike/burntisland/Edinburgh.jpeg)
Edinburgh the only sunny city in Scotland!!!
## Original path
![](/img/hike/burntisland/OriginalPath.png)
Path information: https://www.walkhighlands.co.uk/fife-stirling/the-binn-burntisland.shtml
## Walk description
A really easy and relaxed walk. Can be easily done no matter the weather condition.
From the previous hikes done so far one of the most well connected hikes (In terms of public transport) especially from the Edinburgh side.
### Key highlights
- Really cute train station.
- You can easily unleash the kid in yourself by adoring the cute trains and the [4 legged wingman](https://hips.hearstapps.com/hmg-prod/images/cutest-dog-breed-german-shephard-6435743c5766b.jpg?crop=1.00xw:0.836xh;0,0.141xh&resize=980:*) along the walkway.
- Fancy houses blocking pathways which should be public.
## Path we walked
![](/img/hike/burntisland/burntislandpath.jpg)
## Pictures
![](/img/hike/burntisland/burntisland.jpg)
This was taken from the highest peak and shows
an impressive view of the small town with Edinburgh across the sea. North bridge is barely visible due to the clouds.
![](/img/hike/burntisland/PathBlocked.jpeg)
While walking through the trail we intended to take
a deviation to walk through the Fife costal walkway
to walk closer to the sea. There is a small caveat, the segment of costal walkway can only be traversed
on a low tide (Unless you are [Moses](https://i.pinimg.com/474x/e5/fb/3e/e5fb3eb00e8a5c2566f571fdde2e0385.jpg)).
The annoying part was that there was a relatively high tide which we didn't notice blocking parts of the path. The worst case scenario would be to walk back to the start of the costal path and walk along side the road to city centre. The picture above reflects one of the deviated paths we could have taken but unfortunately private property had fenced out path way from the public from using it (This was a bit frustrating). When walking through the partially blocked pathway a nice view of the sea could be captured.
![](/img/hike/burntisland/Rocks.jpeg)
Rocky parts which had to be crossed through the costal walkway.
![](/img/hike/burntisland/Seaside.jpeg)
Start of the costal walkway from the fancy golf course. Crossing the golf course is part of the trail. Heading
to the beach is not part of the documented path on the trail provided in [Walkhighlands](https://www.walkhighlands.co.uk/fife-stirling/the-binn-burntisland.shtm).

50
content/hiking/kilin.md Normal file
View File

@@ -0,0 +1,50 @@
---
title: "Killin"
summary: Really cute public transport for the last stretch and great view of the highlands
tags: ["hiking","good weather","highlands","Perthshire"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/PersonalPublicTransport]
weight: 3
---
## Key Picture
![](https://photos.akilan.io/api/assets/6495891f-8dc6-4798-b900-02ad670d7e2e/thumbnail?size=preview&key=_q41093B16xTMIRZ_0lIS4uarrWcg5TDB0qGW8yXA3qcxh4--dmBMemG5_oNEm0Y4Rs&c=VJBWP152EfRwvwySXx4qQFiVSDQ%3D)
A random stream of water which my flatmate is tempted to row in. You wouldn't believe me but I have normal friends.
## Walk description
![](/img/hike/killin/path.png)
Path: https://www.walkhighlands.co.uk/perthshire/sron-a-chlachain.shtml
### Key highlights
- Great weather and a lot of rainbows! It made total sense to be [gay](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSS0x6__AdYYUxvcsUJv7sIouFNRqOMPW8KJA&s) that day.
- The path looked easy but did get annoying at a lot of parts. But really enjoyable walk.
- Killin looks like mini version of a swiss town (With the highlands replicating a smaller version of the Alps and the cost being scaled down as well). Great place to go if you are broke and want to enjoy good views.
## Pictures
![](https://photos.akilan.io/api/assets/c70cf9ca-85ab-4974-887e-63acaeb1079f/thumbnail?size=preview&key=_q41093B16xTMIRZ_0lIS4uarrWcg5TDB0qGW8yXA3qcxh4--dmBMemG5_oNEm0Y4Rs&c=QvR7%2FR0LBj1Ikc%2B%2BgNGDw3PXQhs%3D)
First identified rainbow, this was the first instance of the gayness unleashed (Still straight though). I don't have a picture
but there was a double rainbow by basic arithmetic makes you straight as well.
![](https://photos.akilan.io/api/assets/6711f894-c83d-40e9-a39a-2b22af958c09/thumbnail?size=preview&key=GQP_7Kkm0mqF_CQeQlNyswgUbR8B4o7kHA68rPSm9X_KO6OKUyObTWjos-Z_Euk9D44&c=UtfAtu4zt8Jaueur%2BlTLCLnhr6I%3D)
Proof that no one was tortured during this hike. I am not liable to people having
traumatic memories listening to
me talk for 4 hours straight :-).
![](https://photos.akilan.io/api/assets/ed2d4cc9-fca7-468d-847e-af5b5408d629/thumbnail?size=preview&key=_q41093B16xTMIRZ_0lIS4uarrWcg5TDB0qGW8yXA3qcxh4--dmBMemG5_oNEm0Y4Rs&c=7iW4GoVheCiLdGL6Az26Fcw1ztU%3D)
Oww look another rainbow with camel humped style hills in the background. Don't get fooled by the weather the path was pretty swampy.
![](https://photos.akilan.io/api/assets/ec1ab5cd-4843-4f58-9380-81d9056801e0/thumbnail?size=preview&key=_q41093B16xTMIRZ_0lIS4uarrWcg5TDB0qGW8yXA3qcxh4--dmBMemG5_oNEm0Y4Rs&c=5NEOL%2BGVK3BXRYYjFy78pykMebk%3D)
Wee beauty!

12
content/hiking/monaco.md Normal file
View File

@@ -0,0 +1,12 @@
---
title: "Monaco"
summary: Day trip walkaround the principality of Monaco
tags: ["citywalk","good weather"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/RichFucks]
weight: 3
---
## Key Picturue

9
content/papers.md Normal file
View File

@@ -0,0 +1,9 @@
---
title: Papers
summary: Papers published
description: Papers published
---
- "P2PRC—A Peer-To-Peer Network Designed for Computation" (https://link.springer.com/chapter/10.1007/978-981-16-7618-5_45)
- "Benchmarking Parallelism in Unikernels" (https://researchportal.hw.ac.uk/en/publications/benchmarking-parallelism-in-unikernels)

View File

@@ -0,0 +1,34 @@
---
title: "Custom Static Website Generator"
summary: Creating a custom static website engine which
can be accessed by using RestApi
tags: ["website","static","generator","Rest"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/CustomStaticWebsiteGenerator]
weight: 3
---
## Introduction
We have designed a simple static website generator which can be designed to be interacted via Rest Apis. We have demonstrated how a user can create a static webpage from WhatsApp. The intention of this project is to prove simplicity of having static websites.
#### Project link: https://github.com/HWTechClub/Custom-Static-Website-Generator
## Features
1. Static files generated in less than a second and served to your visitors just as fast.
2. We support deploying your website on IPFS. Time to power the distributed web.
3. Users attention to content rather than design.
## Demo Interaction
The demo interaction is done using a whatsapp bot to interact with Rest Apis.
{{< youtube SXfCQiZDZKY >}}
## Basic Information
1. Main programming langauge: Nodejs
2. License: GPLv2
3. [Installation](https://cwsg-docs.hwtech.club/getting-started/installation/)
4. [Documentation](https://cwsg-docs.hwtech.club/)

27
content/projects/IOE.md Normal file
View File

@@ -0,0 +1,27 @@
---
title: "Internet Of Energy"
summary: Prototype Implementation of energy transcations in a micro grid.
tags: ["Internet Of Energy","Decentralized","Micro Grids","Transactional","battery"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/IOE]
weight: 4
---
## Introduction
![](http://www.networkrevolution.co.uk/wp-content/uploads/2014/04/img-smartgrid-problem.png)
This project aims to create a marketplace where anyone generating energy by using renewable sources can sell it to anyone in the grid. This will in most cases will be cheaper and aims to have no carbon emissions.This entire platform has two versions, a centralized and a decentralized version.The centralized version uses the client-server architecture while decentralized version uses the concept of a transactional battery along with relay modules which is used to forward and receive power from other batteries. We were able to transfer energy from one power bank to the other using relays.
#### website: https://ioe.hwtech.club
#### Github organization page: https://github.com/internet-of-energy/
#### White Paper: https://ioe.hwtech.club/pdf/white_paper_v3.pdf
## Main repositories
1. [Centralized IOE](https://github.com/internet-of-energy/Centralized_IOE): We will use a simple backend model that can communicate with smart meters at home to control the flow of the electricity. The client-server architecture has a lot of support and tools available for development. This means we can create functioning platform with a lot of features at a quicker pace.
2. [IOE relays api](https://github.com/internet-of-energy/IOE_relays_api): The Concept of IOE is that anyone can buy electricity from anyone. Once a transaction is successful there must be a way to transfer electricity. This code will run on a raspberry pi and using relays it will control the flow of electricity.
3. [IOE electricity cost](https://github.com/internet-of-energy/IOE-electricity-cost): In this repo we will focus on designing a module that helps decide the cost in the electric grid based on supply and demand.

View File

@@ -0,0 +1,5 @@
---
title: Open Source Projects
summary: Open source I have created or been a part of.
description: Open source I have created or been a part of.
---

View File

@@ -0,0 +1,31 @@
---
title: "Vitess Arewefastyet"
summary: intergrating benchmarks for the open source repository vitess
tags: ["vitess","benchmark"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/arewefastyet]
weight: 2
---
## Introduction
The purpose of this project is to do a benchmark run when ever there is a push. The background activity is fairly simple, we create our own bare metal server. Once this server is created we run a bunch of ansibles(for sysbench) and once the run is complete we read the results and store them in a mysql instance. Once the following operations are complete we take down the server.
## Kubecon talk
{{< youtube h1bd1yxA4ec >}}
#### Project Link: https://github.com/vitessio/arewefastyet
#### website link: https://benchmark.vitess.io
## Objectives
1. Creates a VPS
2. Runs the ansibles on the VPS
3. Reads benchmark results
4. Kills VPS
## Architecture
![](https://raw.githubusercontent.com/vitessio/arewefastyet/master/docs/architecture/arewefastyet_architecture.png)
## SQL Schema
![](https://raw.githubusercontent.com/vitessio/arewefastyet/master/docs/architecture/sql/arewefastyet_schema.png)

23
content/projects/p2prc.md Normal file
View File

@@ -0,0 +1,23 @@
---
title: "P2P Rendering/Computation"
summary: p2p network that creates containers and eventually helps in harnessing the computation power.
tags: ["p2p","rendering","computation"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/p2prc]
weight: 1
---
## About
The main aim of this project was to create a custom peer to peer network. The user acting as the client has total flexibility on how to batch the tasks and the user acting as the server has complete flexibility on tracking the container's usages and killing the containers at any point of time.
#### Project Link: https://github.com/Akilan1999/p2p-rendering-computation
## Demo
{{< youtube LRv3NR2lu7I >}}
## Basic Information
1. Main programming langauge: Go
2. License: GPLv2
3. [Installation](https://github.com/Akilan1999/p2p-rendering-computation/blob/master/Docs/Installation.md)
4. [Documentation](https://github.com/Akilan1999/p2p-rendering-computation/blob/master/Docs/README.md)

135
content/resume.md Normal file
View File

@@ -0,0 +1,135 @@
---
title: Resumé
summary: My voluntary and work experience.
description: My voluntary and work experience.
---
<!-- Todo:
- More descriptive descriptions of work done on the job -->
- I am just a normal person
- I love to build stuff and love to run away from fancy documentation.
- Believer in free knowledge.
### Interested areas
<!-- - Web Development -->
<!-- - IOT Development -->
- Distributed Databases.
- P2P networks for distributed computing.
- Operating systems (i.e Uni-kernels and Multi-kernels).
- Capability based systems (i.e [CHERI](https://www.cl.cam.ac.uk/research/security/ctsrd/cheri/)).
<!-- ### Programming Languages:
- Go
- Python
- Node js
- C -->
<!-- ### Databases:
- MySQL
- Mongodb -->
---------------------------------------------------------------------------------------------------------------------------------------------------------------
## Experience
### 1. Maintainer
#### [P2PRC](http://github.com/Akilan1999/p2p-rendering-computation)
Maintainer of a project I created and currently developing. P2PRC is a p2p network designed to orchestrate custom tasks on a P2P network. The project is built entirely using Go Lang.
##### Languages used:
Go, Haskell, Python
#### Derived from P2PRC:
- Open source self hosted version for remote gaming using WebRTC: https://github.com/Akilan1999/remotegameplay
### 2. Core Developer
#### [Peernet](https://github.com/PeernetOfficial)
October 2021 - November 2023, Remote (Prague, Czechia)
Worked on the open source project (https://github.com/PeernetOfficial/core).
##### Languages used:
- Go, JS, Kotlin
### 3. Senior Software Engineer
#### [Maman LLC](https://maman.ae)
August 2021 - March 2022, Remote (Dubai, UAE)
Worked on Read Solomon error corrections for finger printing audio signals and
worked with Maman with smaller consultancy work.
##### Languages used:
- Go, Python
### 4. Senior Software Engineer
#### [Karaz](https://apps.apple.com/tt/app/karaz-platform-%D9%83%D8%B1%D8%B2/id1576524708)
September 2021 - Present, Remote (Riyadh, Saudi Arabia)
Took over the Karaz back end development as apart of mutual agreement to switch over from
Maman to Karaz. Initially built the entire back-end system for Karaz which included reverse
engineering glucose devices and extracting data from such devices. As the company grew recruited
back-end developers to do most of the maintenance and feature building.
##### Languages used:
Go, Python, Javascript, Kotlin, Java
### 5. Software Engineer Intern
#### [PlanetScale](https://planetscale.com/)
August 2020 - March 2021, Remote (San Francisco, California, United States)
Working on an open source project to benchmark the project Vitess (A database clustering system for horizontal scaling of MySQL).
Project: [Vitess Arewefastyet](/projects/arewefastyet/)
### 6. Heriot Watt / HW Tech Club President
November 2018 - May 2021, (Dubai , UAE)
My role as tech club president is to work on projects that seem to help towards building a strong community.
#### Milestones acheived:
1. Grew the club from 8 to 160 members
2. Setup the leadership team
3. Lead the leadership to setup initial infrastructure
4. Setup tech club to run using an open source model
5. Initial contributor to boost projects within the club
<!-- ### Dubai Holiday Camps / Assistant Teacher
July 2017 - July 2019, DIA, Dubai
My role as an assistant teacher was to just make sure that kids have as much fun as possible by getting involved in various sports such as Football, Basketball , Tennis , Dodgeball etc... -->
------------------------------------------------------------------------------------------------------------------------------------------------------------------
## Education
### Heriot-Watt University / BSc (Hons) Computer Science
September 2017 - July 2021
Major courses completed:
- Databases and management systems
- Hardware and Software Interfaces
- Bio Inspired Computing
- Data mining and machine learning
- Advanced network security
- Digital forensics
#### Final Dissertation: [p2p network rendering/computation](/projects/p2prc/)
### Heriot-Watt University / PhD Computer Science
January 2022 - Present
#### Keywords
- [CHERI](https://www.cl.cam.ac.uk/research/security/ctsrd/cheri/)
- Memory allocators
- FreeBSD kernel development
#### Languages used:
- C
- ARM Assembly
#### Ongoing research:
The increasing disparity between application workloads and the capacity of Translation Lookaside Buffers (TLB) has prompted researchers to explore innovative solutions to mitigate this gap. One such approach involves leveraging physically contiguous memory to optimize TLB utilization. Concurrently, advancements in hardware-level system security, exemplified by the Capability Hardware Enhanced RISC Instructions (CHERI) architecture, offer additional opportunities for improving memory management and security.
CHERI introduces capability-based addressing, a novel approach that enhances system security by associating capabilities with memory pointers. These capabilities restrict access to memory regions, thereby fortifying the system against various security threats. Importantly, the mechanisms implemented in CHERI for enforcing memory protection can also serve as accelerators for standard user-space memory allocators. By leveraging capability-based addressing, memory allocators can efficiently manage memory resources while ensuring robust security measures are in place.
- ##### [Draft report link](https://github.com/Akilan1999/phd-thesis/releases/download/Year2/thesis.pdf)
- ##### [Release](https://github.com/Akilan1999/phd-thesis/releases/tag/Year2)

View File

@@ -0,0 +1,42 @@
---
title: "Custom static website generator"
summary: Based on a Website generator built by
hw tech club
date: 2020-02-27
tags: ["Generator","Website"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/technicalposts/website-generator]
weight: 2
---
In this blog post we will talk about the project custom website generator which hw tech club contributors created. Before that a bit of basics of how static website generators work. In the current scenarios websites are either rendered in the front end using React/Vue or in the backend using Jinga , express etc … The flaw in the front end is that websites use a lot of CPU memory from the Client side to load webpages and rendering on the backend does fix this issue but is still relatively more expensive than loading static web pages. A static website generator basically generates static web pages only when content is changed.
### Problems of existing Static website generators
There are many static generators such as Hugo and Jenkyll which are super efficient and do a great job in generating static web pages. The only problem is both are human readable and not Api friendly which made it initially tough for us to interact with it. Ex: Hugo has many variations and with Yaml , Toml and creating an Api to store these states and ensuring to populate according to the template was super painful for us.
### Solution
To build a simple website generator that can take a JSON file of any shape and populate it to the according website template. The only catch is that both the JSON shape and fields that should be populated in the template should be of the same shape. The implementation of this was done using Node js as that was the only language me and my friends were familiar with at that time.
![Describes a high level visualization](https://blogs.hwtech.club/images/Customwebsite.png)
### Process of generating a website
- Send Data via Rest Api
- Populate inside the appropriate template
- Copy the files modified and add it to the project directory which is created based on the project name in the JSON file.
- Respond to the user the website generated link
### Deploying generated websites in IPFS
There are bash scripts added to make it possible to deploy websites generated to IPFS (Interplanetary file system). This is to ensure that your generated website can be deployed on a peer to peer network.
The following project is released on GPLv2 hence it is completely open source and we accept contributions from all developers.
### How to contribute:
1. Create an Issue
2. Create a PR(Pull Request) linking to that issue
3. If we approve it will be merged or we will inform you on the changes we need
We have only covered the high level overview of this project and there are other modules not talked about like the whatsapp bot to interact with this Api.
- [Documentation to the project](https://website-generator.netlify.app)
- [Module of the project we are talking about in this blog](https://github.com/HWTechClub/Custom-Static-Website-Generator/tree/master/website-generator)
- [Repo Link (Main project)](https://github.com/HWTechClub/Custom-Static-Website-Generator)

View File

@@ -0,0 +1,39 @@
---
title: "IT infrastructure (Beginners guide)"
summary: Basics of running power and cheap IT infrastructure
date: 2020-05-25
aliases: ["/papermod-how-to-guide"]
tags: ["IT","Beginners"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/technicalposts/beginners]
weight: 2
---
Although the current cost of IT infrastructure is relatively minimal cost these days. We can still dramatically reduce the cost further. A good IT infrastructure is the fact that we rely less on 3rd party companies and they are simple to run. When we mean simple it does mean a fancy UI where everything is drag and drop. Using a terminal can be your best friend and save you a lot of time. Like any skill you need to use it regularly to reap the benefits. It is very important to stay minimal to sustain your IT infrastructure for a longer period of time.
## Always stick to Open Source OS:
If you run a windows server then stop it. Always use an Open source OS over Proprietary. Transition is an open source OS (i.e Ubuntu , Debian) is relatively easy. To start off use a VPS to host your servers (i.e Digital Ocean, Vultr) . The main reason to use a VPS is the fact that you get an static IPV4 address. You pay for the hour rather than the month. If you think something is wrong in your server you can back it up and delete the server. Saves a lot of time on your side.
If you have an inhouse server, You can either get a static IPV4 address or use a DDNS if it is expensive (i.e so that someone can access it from outside your company network). There are many free training courses to learn how to use a linux server and configure it. This means you can be self-reliant and not rely on other companies to configure your server.
### Benefits of Open Source servers:
The main benefit is that there is no licensing cost and you have access to the source code. For Example : The linux community is really big and OS keeps getting updated frequently that means if a new vulnerability is found its most likely fixed really quick. The concept of open source OS is simple if you break it then just back up data and reinstall the OS.
## You should know Git no matter who you are:
Git is a version control system which can be used to store documents or codebase. Using it is the best way to store your company information in a secure way. It recommended you run it on your company server (Recommended to use Gitlab). If you want you can use github ( :) Owned by microsoft) .
1. [Documentation](https://git-scm.com/doc)
2. [Video](https://www.youtube.com/watch?v=2sjqTHE0zok&list=LLhy18QB1hBzZ7MniIW_FJvQ&index=6&t=0s)
## You can avoid office 365:
For your email you can set up your own mail server(i.e https://github.com/maildev/maildev) or use [Migadu](https://www.migadu.com/en/index.html) which is extremely cheap. There are so many alternatives for word , excel etc .. ( i.e LibreOffice , Apache Open Office , Google Suite etc...). If you want to have your own conference on your own server or on outside server use [Jitsi](https://jitsi.org/).
For any tool which is paid there is an open source alternative.
## Building websites:
If you are planning to have a website which is either an E-commerce website or a normal company webpage there is no point of a database like Sql unless your website is really huge. I would recommend using [static website generators](https://dzone.com/articles/6-reasons-why-you-should-go-for-a-static-website) like [Hugo](https://gohugo.io/) and either design your theme or use the ones available online. In most cases you only need to only use static generators for your company page and your basic e-commerce website.
## Deploying websites:
If you use a static website generator you can either deploy it on places like [netlify](https://www.netlify.com/) for free of cost or deploy them on your server.

View File

@@ -0,0 +1,73 @@
---
title: "Patch: Using remote ScreenShare ,keyboard and mouse using laplace and Barrier"
summary: Modifying the open source project laplace to allow remote keyboard and mouse during screenshare
date: 2021-07-05
aliases: ["/laplace-keyboard-mouse"]
tags: ["WebRTC","laplace"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/laplace-keyboard-mouse]
weight: 2
---
## What is laplace ?
" Laplace is an open-source project to enable screen sharing directly via browser. Made possible using WebRTC for low latency peer-to-peer connections, and WebSocket implemented in golang for WebRTC signaling. "
link: https://github.com/adamyordan/laplace
Link to my branch which has Barrier intergrated with Barrier KVM:
https://github.com/Akilan1999/laplace/tree/keyboard_mouse
Link to the pull request: https://github.com/adamyordan/laplace/pull/8
## Installation
### Installation required to share keyboard and mouse
To do this we ensure that the client either has has a IPV6
address or a public IPV4 address.
We use the use the popular open repository known as [Barrier KVM](https://github.com/debauchee/barrier).
#### What is Barrier kvm?
"Barrier is software that mimics the functionality of a KVM switch, which historically would allow you to use a single keyboard and mouse to control multiple computers by physically turning a dial on the box to switch the machine you're controlling at any given moment. Barrier does this in software, allowing you to tell it which machine to control by moving your mouse to the edge of the screen, or by using a keypress to switch focus to a different system." [Barrier KVM](https://github.com/debauchee/barrier)
#### Barrier KVM build status and links to install
|Platform |Build Status|
| --:|:-- |
|Linux |[![Build Status](https://dev.azure.com/debauchee/Barrier/_apis/build/status/debauchee.barrier?branchName=master&jobName=Linux%20Build)](https://dev.azure.com/debauchee/Barrier/_build/latest?definitionId=1&branchName=master)|
|Mac |[![Build Status](https://dev.azure.com/debauchee/Barrier/_apis/build/status/debauchee.barrier?branchName=master&jobName=Mac%20Build)](https://dev.azure.com/debauchee/Barrier/_build/latest?definitionId=1&branchName=master)|
|Windows Debug |[![Build Status](https://dev.azure.com/debauchee/Barrier/_apis/build/status/debauchee.barrier?branchName=master&jobName=Windows%20Build&configuration=Windows%20Build%20Debug)](https://dev.azure.com/debauchee/Barrier/_build/latest?definitionId=1&branchName=master)|
|Windows Release|[![Build Status](https://dev.azure.com/debauchee/Barrier/_apis/build/status/debauchee.barrier?branchName=master&jobName=Windows%20Build&configuration=Windows%20Build%20Release%20with%20Release%20Installer)](https://dev.azure.com/debauchee/Barrier/_build/latest?definitionId=1&branchName=master)|
|Snap |[![Snap Status](https://build.snapcraft.io/badge/debauchee/barrier.svg)](https://build.snapcraft.io/user/debauchee/barrier)|
### Build from source
```bash
$ git clone https://github.com/adamyordan/laplace.git
$ cd laplace && go build -o laplace main.go
$ export LAPLACE = $PATH
$ ./laplace --help
$ ./laplace -setconfig
$ ./laplace -tls -addrs <ip address>:<port no>
```
Note: ensure you are running none using Sudo
## Limitation
The machine that wants to control the screen needs to either be:
- Same network as the server
- Needs to have an IPV6 address
- Needs to have an public IPV4 address
## Vidoe demo
#### Video demo server side installation
{{< youtube 7c1_jlXJW4Q >}}
#### Video demo client side installation
{{< youtube gF70pqvN3Gk >}}

View File

@@ -0,0 +1,50 @@
---
title: "Alpha Release P2PRC v1.0.0"
summary: Alpha release for P2PRC
date: 2021-06-27
aliases: ["/papermod-how-to-guide"]
tags: ["P2PRC","v1.0.0-alpha"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/p2prc-1.0.0-alpha]
weight: 2
---
After 5 months of working on this project. I would be glad to announce that we
have a alpha release. The objective of P2PRC is to create a p2p network where nodes
can share each others computatination power in a virtualized manner (i.e digital
ocean where anyone can share resources). In the alpha release the choice of
virtualization used is docker. The current release will
support docker. It should be noted that from the next release onwards we will
not support the docker daemon. We will try to provide backwards compatability
as much as we can but I have decided to ditch the docker daemon and write
compatable code from containerd.
## Major features
- IPV4 and IPV6 support: All the nodes can listen to both IPV4 and
IPV6 addresses. It can be noted that with IPV6 there are minor issues
detected in certain PC in terms of SSH into a docker container which is
mostly on the server side.
- Hopping mechanism: Since it's a p2p network we have a very simple
implementation that hops though servers and downloads it's IP tables.
In our implementation. This contains about imformtaion of other servers
in the network. This way nodes can automatically learn parts of the
network. The current implementation uses 3 hops.
- Possibility to run any docker container: To satisfy this the server
must already have the docker container and the must ensure that the
SSH username is 'master' and password is 'password' in creation of new
servers. It's not secure but worksout for this version for now.
The test network will be avaliable for use from the beta release
which should come out on the 5th of july 2021. The network will
consist of 1 node which runs on a paid cloud server as I do not
keep my machines on 24/7. The node up will help to connect with
other nodes and the paid cloud server cannot be used to create
and remove containers.
### Link to release and installation instructions:
https://github.com/Akilan1999/p2p-rendering-computation/releases/tag/v1.0.0-alpha

View File

@@ -0,0 +1,135 @@
---
title: "Extension of P2PRC to create your own modification"
summary: P2PRC as a abstraction
date: 2021-08-31
aliases: ["/P2PRC-Extending"]
tags: ["P2PRC","AST","Extend"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/P2PRC-Extending]
weight: 2
---
# Generate Module
P2PRC is a great layer of abstraction. This means that in many cases it is not an end product but rather
a tool that customized as an end product. An example would be writing your own billing module to monetize
the computation power available. The generate module copies the current with the appropriate git histories
and keeps only the go files which would be useful to edit. To use the generate module the user will need
to have a go compiler present in his computer. Due to the introduction of this module there will 2 releases:
- Regular Release (Consists of only the build binary and cli command cannot access the generate module)
- Developer Release (Consists of important Go files and the cli can access the generate module)
## How does this work ?
### [Struct information](https://github.com/Akilan1999/p2p-rendering-computation/blob/9d69aed8ce0fe5273aaff2828f7d51c3d5ac2ce4/generate/generate.go#L19)
- ###```Generate.go```:
This file creates a local copy of P2PRC from where the CLI was called from.
This go file also does various stuff like instruction of file should be ignored when copying and
which of should not be. Now let's understand this. Below is a sample code which does the following:
```go
//----------------------------------------------------------------
// Action performed:
// - Ensuring main.go file exists
// - Skipping all .go files apart from the ones listed above
// - Skipping .idea/ directory
// - Skipping Makefile file
//----------------------------------------------------------------
Options.Skip = func(src string) (bool, error) {
switch {
case strings.HasSuffix(src, "main.go"):
return false, nil
case strings.HasSuffix(src, ".go"):
return true, nil
case strings.HasSuffix(src, ".idea"):
return true, nil
case strings.HasSuffix(src, "Makefile"):
return true, nil
default:
return false, nil
}
}
// Doing the copy
err = copy.Copy("<P2PRC folder you want to copy from>", "<PATH to the directory>", Options)
```
Unfortunately currently this will have to be manually edited in the ```Generate.go``` file. When using the generate
module the user also creates their own Go module which is the modified version of P2PRC. This means
if the 1 modified package is using another modified package then the appropriate import have to be modified
in the file where the import is called:
Ex:
```go
//Sample Project module name = Test
//Package names:
//- Test/Genius
//- Test/GeGeGenuis
//
// When we call the generate function with the new project with the module name = MicDrop
// The new package name would be:
// - MicDrop/Genius
// - MicDrop/GeGeGenuis
// Test/Genius code depends on the package Test/GeGeGenuis
import (
"Test/GeGeGenuis"
)
// When we create a new module with the copy of the
// existing project we need change:
import (
"MicDrop/GeGeGenuis"
)
```
To do this we have built functions which can modify import names in the Go file provided.
To customize the use case of your generate module you would need to manually add your own
imports which are supposed to be replaced and in which files they are supposed to be replaced
in.
```go
// 1.0 - Test/Genius.go -> GeGeGenuis module
// a is struct of type NewProject
a.FileNameAST = "<path to project to copy from>/Test/Genius.go"
// Get AST information of the file
err := a.GetASTGoFile()
if err != nil {
return err
}
// Change the appropriate Go file
err = a.ChangeImports("Test/GeGeGenuis", "MicDrop/GeGeGenuis")
if err != nil {
return err
}
// Writes the change to the appropriate file
err = a.WriteGoAst()
if err != nil {
return err
}
```
Higher order of execution of ```Generate.go```:
1. Copy entire P2PRC project and ignores files which are not meant to be copied
2. The folder name will be based on the new project name and the module name based on the new
module name provided.
3. Modifies the appropriate imports in the project as instructed in the code.
4. Creates a commit with the new changes in the new project.
- ### ``` modifyGenerate.go```:
This a really simple implementation where we replace the imports
in certain files as instructed from ```generate.go```. To do we create an AST (i.e Abstract Syntax tree)
from new file we want to change the imports in. AST create a tree structure of expression. To change the
import we can just traverse to the appropriate expression and change the value of that expression in
the case of modifying imports. This approach is more simple than using templates.
## Cli command
```
p2prc --gen <project name> --mod <go module name>
```
#### based on PR: https://github.com/Akilan1999/p2p-rendering-computation/pull/69

View File

@@ -0,0 +1,140 @@
---
title: "Draft for escaping NAT with reverse proxy P2PRC"
summary: Annoying NAT boo boo
date: 2021-10-11
aliases: ["/P2PRC-escaping-NAT"]
tags: ["P2PRC","NAT"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/P2PRC-escaping-NAT]
weight: 2
---
## Abstract
We focus here on escaping NAT for the project P2PRC. The intial
plan is to use a middle server with an IPV4 address to escape NAT.
The future plan would be to use a WebRTC approach to where we
use a middle server to intansiate a direct p2p connection
using UDP sockets with nodes behind NAT.
## Architecture plan
The server behind NAT would use a reverse proxy server with an IPV4 address
to be a possible way to communicate with the outside world.
Ex:
```
NAT
|
Server <--> Reverse Proxy server with <--> Clients
| public IPV4
```
We use the libaray known as [frp](https://github.com/fatedier/frp).
"frp is A fast reverse proxy to help you expose a local server behind a NAT
or firewall to the internet."
The server behind the NAT IPTable would be broadcasted through the reverse proxy.
The mapping would be done automatically though P2PRC because the reverse proxy
could have certain ports already taken.
We are introducting a new concept of detecting reverse proxies over P2PRC.
We call this ``` reverse_proxy_server.json ``` and ``` reverse_proxy_mapping.json```.
The ```reverse_proxy_server.json``` file is incharge of detecting all reverse
proxy servers and the ```reverse_proxy_mapping.json``` is incharge of logging
all the reverse proxy server mappings talking place.
#### reverse_proxy_server.json
```
{
"reverse_proxy_servers": [
{
"Server_name": <server name>,
"Address": <remote address>,
"Latency": <latency>
}, ... n
]
}
```
#### reverse_proxy_mapping.json
```
{
"reverse_proxy_mappings": [
{
"Server_name": <server name>,
"Address": <remote address>,
"Type": <TCP or UDP>,
"blind_port": <port no>
}, ... n
]
}
```
### Port allocation
The function for port allocation would need certain
modifications need to ensure that the port is not only free
on the server but also on the on reverse proxy server.
We are debate on this would occur as it requires
further reading on the inner depths of [frp](https://github.com/fatedier/frp).
The idea scenario would be that the odds a 5 or 6 digit
taken is a low probability.
### How would the ip tables would look
There would not be much change when a client looks
at it. This only difference is that the client
see's the address of the proxy server.
Ex:
```
{
"ip_address": [
{
"ipv4": "<reverse proxy address>",
"ipv6": "",
"latency": 0,
"download": 0,
"upload": 0,
"serverport": "<server port no>"
}
]
}
```
If the server is using a reverse proxy then the server
port no should be decided by P2PRC to ensure that there
is no scenario where the port is already taken.
## New Cli Commands
We will be introducing a new set of Cli commands.
These cli commands would be incharge to starting
the reverse proxy or connecting to the reverse proxy
and various other function.
1. start reverse proxy (need public IPV4)
```
p2prc -s --reverse-proxy
```
This will start the reverse
and autoamtically broadcast
as a reverse proxy as well.
2. connecting to a reverse proxy
```
p2prc -s --connect-reverse-proxy <proxy ip address>
```
This will start p2prc as server
and automatically set the server port
and link it to the reverse proxy and
any connections would go through the
reverse proxy.
3. Listing all proxy servers avaliable
```
p2prc --view-rps or p2prc --view-reverse-proxy-servers
```
4. Listing all reverse proxy connection mapping
```
p2prc --view-rpm or p2prc --view-reverse-proxy-mapping
```

View File

@@ -0,0 +1,92 @@
---
title: "P2PRC Plugin module implementation"
summary: Plugin Module implementation P2PRC
date: 2021-07-16
aliases: ["/P2PRC-Plugin"]
tags: ["P2PRC","Plugin"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/P2PRC-Plugin]
weight: 2
---
## Introduction
The plugin module is designed to ensure clients can execute instructions in a declarative manner across different
containers created. This means the user (i.e client) needs to write the instruction only once, and these instructions
can be executed across different nodes in a repetitive manner.
In the scenario of this project Ansibles will be used as the way the users can create these instructions.
The plugin module introduces a new path to the config file known as pluginpath. This path by defaults points to
```${P2PRC}/plugin/deploy```. Any file/folder inside ```plugin/deploy``` is part of the .gitginore. Plugins are
detected by folder names inside the ```plugin/deploy```.
```
plugin
|___ Deploy
|___<plugin name>
|___ site.yml
|___ hosts
|___ description.txt
.
.
.
n: n number of plugins possible
```
## Site File Template
The site file is also known as the Ansible playbook and is incharge of executing
instructions in a declarative manner. The below example specifies how to make one.
```
- hosts: all
tasks:
- name: <task name>
<ansible task>
debug:
msg: <debug message>
```
Read more about ansible tasks: https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#about-playbooks
## Hosts file
hosts file is also known as the inventory file. This file consists of all the information required to connect to other
nodes to execute Ansible instructions. In this project this file needs to be set in a certain configuration because the
go code or binary will populate this file automatically with the appropriate information required to connect to local or
remote containers.
#### Note: Add as exactly specified below
```
all:
vars:
ansible_python_interpreter: /usr/bin/python3 // Path to your python 3 interpreter
main:
hosts:
host1:
// Note: These values will be automatically overwritten
// by the Go functions
ansible_host: 0.0.0.0
ansible_port: 39269
ansible_user: master
ansible_ssh_pass: password
ansible_sudo_pass: password
```
## Description file
This is a simple text file used to describe what the module does.
When the client is looking at various commands via the ClI.
The description is displayed along-side the plugin name.
Ex: When the flag ```--ViewPlugins``` or ```--vp``` is called
```
{
"PluginsDetected": [
{
"FolderName": "<name of the plugin>",
"PluginDescription": "<description of the plugin>"
}
]
}
```
#### Based on PR: https://github.com/Akilan1999/p2p-rendering-computation/pull/50

View File

@@ -0,0 +1,60 @@
---
title: "Automatic ports allocation P2PRC"
summary: Allocating ports to plugins P2PRC
date: 2021-10-03
aliases: ["/P2PRC-Automatic-ports"]
tags: ["P2PRC","Ports","TCP","Automatic"]
author: "Akilan Selvacoumar"
draft: false
aliases: [//P2PRC-Automatic-ports]
weight: 2
---
## Automatic port allocations
P2PRC would be in-charge to set to the ports to various TCP ports
opened. Due to this implementation the plugin being executed is
copied to the tmp directory with a unique UUID.
```
Command: ls /tmp
output: Semantic <UUID>_<Plugin Name>
2e6d76c4-0ed1-4b55-9385-79a58d4f0492_p2prc-vscode-browser
7b631e08-62ee-4c1c-a2a4-c05857b9aa7d_p2prc-vscode-browser
```
Once the copy of the plugin is added to the /tmp directory
the site.yml file inside the appropriate yaml is modified
with the appropriate ports assigned to the container.
### Ex:
1. Create container called c1 with an automatic generated TCP port
3313 (external) - 3313 (internal)
2. Assumption of plugin p1 exists. p1 has one server which needs to
be mapped to a free open TCP port in container c1. Below shows
an implementation of a sample site.yml file.
```
---
- hosts: all
tasks:
- name: start vscode code server
shell: sh server.sh 0.0.0.0:{{index . 0}}
```
Notice there is the following {{index . 0}}. {{index . 0}} does not belong to
Ansible but rather is a way to mention where to add the external free port
of the container. We use the golang [template library](https://pkg.go.dev/text/template)
to parse and populate the site.yml with the appropriate open ports. An array of ints
which consists of open free ports are sent to the site.yml. 0 in {{index . 0}} refers
to the index in the int array passed on.
After the port is automatically it's ready to run !
```
---
- hosts: all
tasks:
- name: start vscode code server
shell: sh server.sh 0.0.0.0:3313
```
### Sample plugins implemented:
- [VSCode Plugin](https://github.com/Akilan1999/p2prc-vscode-browser)
## based on PR: https://github.com/Akilan1999/p2p-rendering-computation/pull/73

View File

@@ -0,0 +1,6 @@
---
title: Technical Posts
summary: Fun CS concepts to play around with
description: Contains posts regrading CS topics I love
to play around with.
---

View File

@@ -0,0 +1,25 @@
---
title: "Distributed computing in a local network"
summary: Brainstroming ideas to run distributed tasks locally
date: 2021-01-01
aliases: ["/distributed-local-network"]
tags: ["Distributed","Brainstorming"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/technicalposts/distributed-local-network]
weight: 2
---
mDNS or called multicast DNS is just a DNS over a local network. mDNS is also considered as a Zero configuration technique. It can be used to discover nodes in a local network (ex: Apples bonjour).
## Implementation
- [multicast-dns](https://github.com/mafintosh/multicast-dns)
- [dns-discovery](https://github.com/mafintosh/dns-discovery)
- [libp2p-mdns](https://github.com/libp2p/js-libp2p-mdns)
Assuming all machines are running a linux kernel. All nodes in the network can have an SSH server and can broadcast each other's public key. All the nodes can add broadcasted public keys to their authorized_keys file. This is assuming its done in a local private network (i.e not a secure solution but an easier way). Now all nodes can SSH into each other.
To render tasks [DrQueue](https://github.com/DrQueue/drqueue) seems to be a promising choice. DrQueue is an open source render farm system. Similar to Farmer-Joe-Render. DrQueue is used in the Visual effects ,science and finance industry. The objective of DrQueue is batch tasks and run as a task management tool for multiple nodes. DrQueue is compatible on Windows, macOS, Linux, Irix and FreeBSD. DrQueue can be used with any renderer that supports a CLI(Command Line Interface). DrQueue auto generated scripts for Blender, Maya, Lightwave, Cinema 4D, Maya, lightwave, Mental Ray, After Effects, Aqsis, 3Delight, Pixie, Snake , Terragen and Nuke. DrQueue makes it possible to talk to master and slave nodes with a custom API which any user can create based on the inbuilt functions.
This is just a thought in my mind of a logical and simple way to run tasks distributed. This is really important as we underestimate the computing power we have if we use our home devices collectively. We could start pushing game developers to start building games for distributed systems. Imagine if [FS2020](https://blogs.hwtech.club/post/fs2020/) could be rendered distributed :).

View File

@@ -0,0 +1,155 @@
---
title: "Challenging myself to understand RISC-V"
summary: Basics of what is RISC-V
date: 2021-05-30
aliases: ["/riscv"]
tags: ["RISCV","Open Source"]
author: "Akilan Selvacoumar"
draft: false
aliases: [/technicalposts/riscv"]
weight: 2
---
## Why do we need open standards for CPU Architecture ?
- We want to allow users to see all the parts of the architecture
without any proprietary constraints.
- We want to have the rights to modify and distribute without paying any licensing fees and constraints in sharing.
- With open standards it's easier to build on top of others work and possibly build CPU designs custom made for certain tasks.
## What is RISC-V ?
RISC-V is just an open source ISA (Instruction Set Architecture). An ISA is the software interface for the hardware. A single ISA can
have many hardware implementations. In technical terms as ISA defines set of Instructions and how they behave such as:
- Data types
- Registers
- Addressing modes
- memory models
- Protection levels
- How is I/O are done
- Virtual memory
- Exceptions
Another important factor to understand is that RISC-V is a standard
and not an implementation. This means that the entire ISA is defined in a huge latex file which can be found on Github.
Repo link: https://github.com/riscv/riscv-isa-manual
The RISC-V is a well organized ISA and is divided into various categories and extensions in order to keep it as a modular design.
The RISC-V is maintained the non profit organization called [RISC-V foundation](https://riscv.org/).
### ["RISC-V in contrast was made specifically to be easy to teach while pragmatic enough to actually allow the implementation of high performance microprocessors."](https://medium.com/swlh/risc-v-assembly-for-beginners-387c6cd02c49)
## Few companies working on RISC-V
- [NVIDIA](https://riscv.org/wp-content/uploads/2017/05/Tue1345pm-NVIDIA-Sijstermans.pdf): using RISC-V in it's GPU
- [SiFive](https://www.sifive.com/): Startup that allows you to create your own RISC-V board or use exsisting models they provide with great toolkits around them.
- [Western Digital](https://blog.westerndigital.com/risc-v-swerv-core-open-source/): Focusing on building custom
RISC-V cores.
## Complier support for RISC-V ISA
- [GCC](https://github.com/riscv/riscv-gnu-toolchain)
- [LLVM/Clang](https://github.com/sifive/riscv-llvm)
- [glibc](https://sourceware.org/git/?p=glibc.git)
- [Go](https://github.com/riscvarchive/riscv-go)
- [Rust](https://github.com/riscv-rust/riscv-rust-quickstart)
## How is the RISC-V ISA organized
In this section we look into how RISC-V is organised
### RV N (Extension letter)
- RV stands for RISC-V
- N - Number of bits (Ex: 32 bits)
- Extension letter: This is the Extension for the instruction
sets (I stands for Integer)
### Example Base ISA
RV32I, RV64I, RV128I
### Standard Extensions
- M: Math
- A: Atomic
- F: Floating Point
- D: Double Precision Floating Point
#### - G: General Purpose (Includes, Integer, Math, Atomic, Floating Point and Double Precision Floating Point)
### Linux supports
#### RV64G
This is called as RISC-V 64 bit General Purpose
## Lets talk a bit indepth of RV32I
RV32I is a base ISA and the easiest to understand.
RV32I means it's RISC-V 32 bit Integer ISA.
```
Registers: x0-x31
(x0 is hardwired to 0)
```
Each register is 32 bits which can be called as 1 word.
![](https://raw.githubusercontent.com/Artoriuz/RV32I-SC/master/images/schematic.png)
Fig 1.0 [Simplified schematics of RV32I](https://github.com/Artoriuz/RV32I-SC)
Now we will recall the basics and try to understand
how to read an instruction.
```
add rd,rs1,rs2
```
- add: is the opcode
- rd: is the destination register
- rs1: Source register 1
- rs2: Source register 2
![](/img/rv32i.png)
Fig 1.1 [Assembly instructions for RV32I](https://github.com/jameslzhu/riscv-card/blob/master/riscv-card.pdf)
![](/img/registersrv32i.png)
Fig 1.2 [Registers for RV32I](https://github.com/jameslzhu/riscv-card/blob/master/riscv-card.pdf)
## Interesting research papers
- [Implementing RISC-V System-on-Chip for Acceleration of Convolution Operation and Activation Function Based on FPGA (Field programmable gate arrays)](https://ieeexplore.ieee.org/document/8564810): FGPA are mostly for application specific integrated circuits. An example would be Intel using FGPA to
prototype new chips. The objective of the paper was to design
a RISC-V processor for specific tasks such as Convolution functions and activation functions. The result was that the
RISC-V processor was faster than CPU + co-processor mode and
used lesser than the CPU + GPU mode.
- [Towards deep learning using Tensorflow lite on RISC-V](
https://edge.seas.harvard.edu/files/edge/files/carrv_workshop_submission_2019_camera_ready.pdf
): This paper focuses on ISA extensions customized for
machine learning kernels. The software infrastructure implemented was optimized for neural network execution.
The following was integrated into Tensorflow lite. The
result was that instructions was reduced by 8X.
- [A compiler comparison in the RISC-V ecosystem](https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9191411): Comparing LLVM and GCC performance on RISC-V. LLVM and GCC
produce same binary size but both have different execution
times.
## Interesting Open Source projects
- [RISCBoy](https://github.com/Wren6991/RISCBoy): It is an open-source portable games console, designed from scratch.
RISC-V compatible CPU. Has raster graphics pipelines and display controllers. It consists of other infrastructure such as memory
controllers and GPIO ports. It also consists of a CAD design of
the PCB layout.
- [Potato](https://github.com/skordal/potato): The Potato Processor is a simple RISC-V processor written in VHDL for use in FPGAs. It implements the 32-bit integer subset of the RISC-V Specification version 2.0.
- [Vulcan](https://github.com/vmmc2/Vulcan): RISC-V instruction set simulation built for education using flutter.

140
hugo.yaml Normal file
View File

@@ -0,0 +1,140 @@
baseURL: "https://akilan.io/"
title: Akilan
theme: ["PaperMod"]
enableRobotsTXT: true
buildDrafts: false
buildFuture: false
buildExpired: false
minify:
disableXML: false
minifyOutput: true
params:
env: production # to enable google analytics, opengraph, twitter-cards and schema.
title: Akilan
description: "Akilan the not boring developer"
keywords: [Blog, Portfolio, Akilan]
author: ["Me","Not boring developer","Akilan Selvacoumar"]
# author: ["Me", "You"] # multiple authors
# images: ["<link or path of image for opengraph, twitter-cards>"]
DateFormat: "2006-02-01"
defaultTheme: auto # dark, light
disableThemeToggle: false
ShowReadingTime: true
ShowShareButtons: false
ShowPostNavLinks: true
ShowBreadCrumbs: true
ShowCodeCopyButtons: false
disableSpecial1stPost: false
disableScrollToTop: false
comments: false
hidemeta: false
hideSummary: false
showtoc: true
tocopen: false
# profile-mode
profileMode:
enabled: true # needs to be explicitly set
title: The Not Boring Developer
subtitle: "Akilan Selvacoumar"
imageUrl: "https://avatars.githubusercontent.com/u/31743758?v=4"
imageWidth: 160
imageHeight: 160
imageTitle: my image
buttons:
- name: About
url: about
- name: Resumé
url: resume
- name: Projects
url: projects
- name: Technical Posts
url: technicalposts
- name: General Posts
url: generalposts
- name: Hiking
url: hiking
# home-info mode
homeInfoParams:
Title: "Hi there \U0001F44B"
Content: Welcome to my blog
socialIcons:
- name: youtube
url: "https://www.youtube.com/channel/UChy18QB1hBzZ7MniIW_FJvQ"
- name: github
url: "https://github.com/Akilan1999"
- name: linkedin
url: "https://www.linkedin.com/in/akilan-selvacoumar/"
- name: email
url: "mailto:me@akilan.io"
cover:
hidden: true # hide everywhere but not in structured data
hiddenInList: true # hide on list pages and home
hiddenInSingle: true # hide on single page
editPost:
URL: "https://github.com/Akilan1999/Akilan-website/tree/master/content"
Text: "Suggest Changes" # edit text
appendFilePath: true # to append file path to Edit link
# for search
# https://fusejs.io/api/options.html
fuseOpts:
isCaseSensitive: false
shouldSort: true
location: 0
distance: 1000
threshold: 0.4
minMatchCharLength: 0
keys: ["title", "permalink", "summary", "content"]
menu:
main:
- identifier: About
name: About
url: /about/
weight: 10
- identifier: Resumé
name: Resumé
url: /resume/
weight: 20
- identifier: Projects
name: Projects
url: /projects/
weight: 30
- identifier: Technical Posts
name: Technical Posts
url: /technicalposts/
weight: 40
- identifier: General Posts
name: General Posts
url: /Generalposts/
weight: 50
- identifier: Papers
name: Papers
url: /Papers/
weight: 50
- identifier: Chat
name: Chat
url: /Chat/
weight: 60
- identifier: Hiking
name: Hiking
url: /hiking/
weight: 60
# Read: https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs#using-hugos-syntax-highlighter-chroma
# pygmentsUseClasses: true
# markup:
# highlight:
# # anchorLineNos: true
# codeFences: true
# guessSyntax: true
# lineNos: true
# style: monokai

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

BIN
img/hike/killin/path.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 KiB

BIN
img/registersrv32i.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
img/rv32i.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

6
public/404.html Normal file
View File

@@ -0,0 +1,6 @@
<!doctype html><html lang=en dir=auto><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>404 Page not found | Akilan</title>
<meta name=keywords content><meta name=description content="Akilan the not boring developer"><meta name=author content="Me, Not boring developer, Akilan Selvacoumar"><link rel=canonical href=http://localhost:1313/404.html><link crossorigin=anonymous href=/assets/css/stylesheet.f49d66caae9ea0fd43f21f29e71a8d3e284517ed770f2aa86fa012953ad3c9ef.css integrity="sha256-9J1myq6eoP1D8h8p5xqNPihFF+13Dyqob6ASlTrTye8=" rel="preload stylesheet" as=style><link rel=icon href=http://localhost:1313/favicon.ico><link rel=icon type=image/png sizes=16x16 href=http://localhost:1313/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=http://localhost:1313/favicon-32x32.png><link rel=apple-touch-icon href=http://localhost:1313/apple-touch-icon.png><link rel=mask-icon href=http://localhost:1313/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate hreflang=en href=http://localhost:1313/404.html><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:url" content="http://localhost:1313/404.html"><meta property="og:site_name" content="Akilan"><meta property="og:title" content="404 Page not found"><meta property="og:description" content="Akilan the not boring developer"><meta property="og:locale" content="en"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="404 Page not found"><meta name=twitter:description content="Akilan the not boring developer"></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=http://localhost:1313/ accesskey=h title="Akilan (Alt + H)">Akilan</a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme"><svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=http://localhost:1313/about/ title=About><span>About</span></a></li><li><a href=http://localhost:1313/resume/ title=Resumé><span>Resumé</span></a></li><li><a href=http://localhost:1313/projects/ title=Projects><span>Projects</span></a></li><li><a href=http://localhost:1313/technicalposts/ title="Technical Posts"><span>Technical Posts</span></a></li><li><a href=http://localhost:1313/generalposts/ title="General Posts"><span>General Posts</span></a></li><li><a href=http://localhost:1313/papers/ title=Papers><span>Papers</span></a></li><li><a href=http://localhost:1313/chat/ title=Chat><span>Chat</span></a></li><li><a href=http://localhost:1313/hiking/ title=Hiking><span>Hiking</span></a></li></ul></nav></header><main class=main><div class=not-found>404</div></main><footer class=footer><span>&copy; 2025 <a href=http://localhost:1313/>Akilan</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/projects/custom-static-website-generator/</title>
<link rel=canonical href=http://localhost:1313/projects/custom-static-website-generator/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/projects/custom-static-website-generator/"></head></html>

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/hiking/burntisland/</title>
<link rel=canonical href=http://localhost:1313/hiking/burntisland/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/hiking/burntisland/"></head></html>

2
public/IOE/index.html Normal file
View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/projects/ioe/</title>
<link rel=canonical href=http://localhost:1313/projects/ioe/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/projects/ioe/"></head></html>

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/technicalposts/p2prc-automatic-ports/</title>
<link rel=canonical href=http://localhost:1313/technicalposts/p2prc-automatic-ports/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/technicalposts/p2prc-automatic-ports/"></head></html>

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/technicalposts/p2prc-ast/</title>
<link rel=canonical href=http://localhost:1313/technicalposts/p2prc-ast/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/technicalposts/p2prc-ast/"></head></html>

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/technicalposts/p2prc-plugin-module-implementation/</title>
<link rel=canonical href=http://localhost:1313/technicalposts/p2prc-plugin-module-implementation/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/technicalposts/p2prc-plugin-module-implementation/"></head></html>

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/technicalposts/p2prc-escaping-nat/</title>
<link rel=canonical href=http://localhost:1313/technicalposts/p2prc-escaping-nat/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/technicalposts/p2prc-escaping-nat/"></head></html>

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/generalposts/working-on-p2prc-challenges/</title>
<link rel=canonical href=http://localhost:1313/generalposts/working-on-p2prc-challenges/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/generalposts/working-on-p2prc-challenges/"></head></html>

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/hiking/kilin/</title>
<link rel=canonical href=http://localhost:1313/hiking/kilin/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/hiking/kilin/"></head></html>

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/hiking/monaco/</title>
<link rel=canonical href=http://localhost:1313/hiking/monaco/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/hiking/monaco/"></head></html>

7
public/about/index.html Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/projects/arewefastyet/</title>
<link rel=canonical href=http://localhost:1313/projects/arewefastyet/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/projects/arewefastyet/"></head></html>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,6 @@
<!doctype html><html lang=en dir=auto><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Categories | Akilan</title>
<meta name=keywords content><meta name=description content="Akilan the not boring developer"><meta name=author content="Me, Not boring developer, Akilan Selvacoumar"><link rel=canonical href=http://localhost:1313/categories/><link crossorigin=anonymous href=/assets/css/stylesheet.f49d66caae9ea0fd43f21f29e71a8d3e284517ed770f2aa86fa012953ad3c9ef.css integrity="sha256-9J1myq6eoP1D8h8p5xqNPihFF+13Dyqob6ASlTrTye8=" rel="preload stylesheet" as=style><link rel=icon href=http://localhost:1313/favicon.ico><link rel=icon type=image/png sizes=16x16 href=http://localhost:1313/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=http://localhost:1313/favicon-32x32.png><link rel=apple-touch-icon href=http://localhost:1313/apple-touch-icon.png><link rel=mask-icon href=http://localhost:1313/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=http://localhost:1313/categories/index.xml><link rel=alternate hreflang=en href=http://localhost:1313/categories/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:url" content="http://localhost:1313/categories/"><meta property="og:site_name" content="Akilan"><meta property="og:title" content="Categories"><meta property="og:description" content="Akilan the not boring developer"><meta property="og:locale" content="en"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Categories"><meta name=twitter:description content="Akilan the not boring developer"></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=http://localhost:1313/ accesskey=h title="Akilan (Alt + H)">Akilan</a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme"><svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=http://localhost:1313/about/ title=About><span>About</span></a></li><li><a href=http://localhost:1313/resume/ title=Resumé><span>Resumé</span></a></li><li><a href=http://localhost:1313/projects/ title=Projects><span>Projects</span></a></li><li><a href=http://localhost:1313/technicalposts/ title="Technical Posts"><span>Technical Posts</span></a></li><li><a href=http://localhost:1313/generalposts/ title="General Posts"><span>General Posts</span></a></li><li><a href=http://localhost:1313/papers/ title=Papers><span>Papers</span></a></li><li><a href=http://localhost:1313/chat/ title=Chat><span>Chat</span></a></li><li><a href=http://localhost:1313/hiking/ title=Hiking><span>Hiking</span></a></li></ul></nav></header><main class=main><header class=page-header><h1>Categories</h1></header><ul class=terms-tags></ul></main><footer class=footer><span>&copy; 2025 <a href=http://localhost:1313/>Akilan</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Categories on Akilan</title><link>http://localhost:1313/categories/</link><description>Recent content in Categories on Akilan</description><generator>Hugo -- 0.145.0</generator><language>en</language><atom:link href="http://localhost:1313/categories/index.xml" rel="self" type="application/rss+xml"/></channel></rss>

8
public/chat/index.html Normal file

File diff suppressed because one or more lines are too long

2
public/fs2020/index.html Normal file
View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/generalposts/fs2020/</title>
<link rel=canonical href=http://localhost:1313/generalposts/fs2020/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/generalposts/fs2020/"></head></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>General Posts on Akilan</title><link>http://localhost:1313/generalposts/</link><description>Recent content in General Posts on Akilan</description><generator>Hugo -- 0.145.0</generator><language>en</language><lastBuildDate>Sun, 07 Jul 2024 00:00:00 +0000</lastBuildDate><atom:link href="http://localhost:1313/generalposts/index.xml" rel="self" type="application/rss+xml"/><item><title>Open to work</title><link>http://localhost:1313/generalposts/opentowork/</link><pubDate>Sun, 07 Jul 2024 00:00:00 +0000</pubDate><guid>http://localhost:1313/generalposts/opentowork/</guid><description>Just graduated looking for remote or work based in the UAE.</description></item><item><title>Psychological challenges working on P2PRC POST 1</title><link>http://localhost:1313/generalposts/working-on-p2prc-challenges/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://localhost:1313/generalposts/working-on-p2prc-challenges/</guid><description>Mental challenges I face when working on open source project I created called P2PRC.</description></item><item><title>Why FS2020 is something very Exciting</title><link>http://localhost:1313/generalposts/fs2020/</link><pubDate>Sat, 02 May 2020 00:00:00 +0000</pubDate><guid>http://localhost:1313/generalposts/fs2020/</guid><description>Closer towards a future where it&amp;rsquo;s hard to compare reality and simulation</description></item></channel></rss>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/generalposts/</title>
<link rel=canonical href=http://localhost:1313/generalposts/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/generalposts/"></head></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

6
public/hiking/index.html Normal file

File diff suppressed because one or more lines are too long

1
public/hiking/index.xml Normal file
View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Hiking on Akilan</title><link>http://localhost:1313/hiking/</link><description>Recent content in Hiking on Akilan</description><generator>Hugo -- 0.145.0</generator><language>en</language><atom:link href="http://localhost:1313/hiking/index.xml" rel="self" type="application/rss+xml"/><item><title>Burntisland (Burnt Island)</title><link>http://localhost:1313/hiking/burntisland/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://localhost:1313/hiking/burntisland/</guid><description>The hike with best weather so far in the warmest Scottish winter.</description></item><item><title>Killin</title><link>http://localhost:1313/hiking/kilin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://localhost:1313/hiking/kilin/</guid><description>Really cute public transport for the last stretch and great view of the highlands</description></item><item><title>Monaco</title><link>http://localhost:1313/hiking/monaco/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://localhost:1313/hiking/monaco/</guid><description>Day trip walkaround the principality of Monaco</description></item></channel></rss>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/hiking/</title>
<link rel=canonical href=http://localhost:1313/hiking/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/hiking/"></head></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
public/img/rv32i.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

14
public/index.html Normal file

File diff suppressed because one or more lines are too long

1
public/index.xml Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/technicalposts/modifying-laplace-keyboard-mouse/</title>
<link rel=canonical href=http://localhost:1313/technicalposts/modifying-laplace-keyboard-mouse/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/technicalposts/modifying-laplace-keyboard-mouse/"></head></html>

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/generalposts/opentowork/</title>
<link rel=canonical href=http://localhost:1313/generalposts/opentowork/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/generalposts/opentowork/"></head></html>

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/technicalposts/p2prc-1.0.0-alpha-release/</title>
<link rel=canonical href=http://localhost:1313/technicalposts/p2prc-1.0.0-alpha-release/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/technicalposts/p2prc-1.0.0-alpha-release/"></head></html>

2
public/p2prc/index.html Normal file
View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/projects/p2prc/</title>
<link rel=canonical href=http://localhost:1313/projects/p2prc/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/projects/p2prc/"></head></html>

6
public/papers/index.html Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Open Source Projects on Akilan</title><link>http://localhost:1313/projects/</link><description>Recent content in Open Source Projects on Akilan</description><generator>Hugo -- 0.145.0</generator><language>en</language><atom:link href="http://localhost:1313/projects/index.xml" rel="self" type="application/rss+xml"/><item><title>P2P Rendering/Computation</title><link>http://localhost:1313/projects/p2prc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://localhost:1313/projects/p2prc/</guid><description>p2p network that creates containers and eventually helps in harnessing the computation power.</description></item><item><title>Vitess Arewefastyet</title><link>http://localhost:1313/projects/arewefastyet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://localhost:1313/projects/arewefastyet/</guid><description>intergrating benchmarks for the open source repository vitess</description></item><item><title>Custom Static Website Generator</title><link>http://localhost:1313/projects/custom-static-website-generator/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://localhost:1313/projects/custom-static-website-generator/</guid><description>Creating a custom static website engine which can be accessed by using RestApi</description></item><item><title>Internet Of Energy</title><link>http://localhost:1313/projects/ioe/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://localhost:1313/projects/ioe/</guid><description>Prototype Implementation of energy transcations in a micro grid.</description></item></channel></rss>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
<!doctype html><html lang=en><head><title>http://localhost:1313/projects/</title>
<link rel=canonical href=http://localhost:1313/projects/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=http://localhost:1313/projects/"></head></html>

11
public/resume/index.html Normal file

File diff suppressed because one or more lines are too long

3
public/robots.txt Normal file
View File

@@ -0,0 +1,3 @@
User-agent: *
Disallow:
Sitemap: http://localhost:1313/sitemap.xml

1
public/sitemap.xml Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,6 @@
<!doctype html><html lang=en dir=auto><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>AST | Akilan</title>
<meta name=keywords content><meta name=description content="Akilan the not boring developer"><meta name=author content="Me, Not boring developer, Akilan Selvacoumar"><link rel=canonical href=http://localhost:1313/tags/ast/><link crossorigin=anonymous href=/assets/css/stylesheet.f49d66caae9ea0fd43f21f29e71a8d3e284517ed770f2aa86fa012953ad3c9ef.css integrity="sha256-9J1myq6eoP1D8h8p5xqNPihFF+13Dyqob6ASlTrTye8=" rel="preload stylesheet" as=style><link rel=icon href=http://localhost:1313/favicon.ico><link rel=icon type=image/png sizes=16x16 href=http://localhost:1313/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=http://localhost:1313/favicon-32x32.png><link rel=apple-touch-icon href=http://localhost:1313/apple-touch-icon.png><link rel=mask-icon href=http://localhost:1313/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=http://localhost:1313/tags/ast/index.xml><link rel=alternate hreflang=en href=http://localhost:1313/tags/ast/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:url" content="http://localhost:1313/tags/ast/"><meta property="og:site_name" content="Akilan"><meta property="og:title" content="AST"><meta property="og:description" content="Akilan the not boring developer"><meta property="og:locale" content="en"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="AST"><meta name=twitter:description content="Akilan the not boring developer"></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=http://localhost:1313/ accesskey=h title="Akilan (Alt + H)">Akilan</a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme"><svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=http://localhost:1313/about/ title=About><span>About</span></a></li><li><a href=http://localhost:1313/resume/ title=Resumé><span>Resumé</span></a></li><li><a href=http://localhost:1313/projects/ title=Projects><span>Projects</span></a></li><li><a href=http://localhost:1313/technicalposts/ title="Technical Posts"><span>Technical Posts</span></a></li><li><a href=http://localhost:1313/generalposts/ title="General Posts"><span>General Posts</span></a></li><li><a href=http://localhost:1313/papers/ title=Papers><span>Papers</span></a></li><li><a href=http://localhost:1313/chat/ title=Chat><span>Chat</span></a></li><li><a href=http://localhost:1313/hiking/ title=Hiking><span>Hiking</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=http://localhost:1313/>Home</a>&nbsp;»&nbsp;<a href=http://localhost:1313/tags/>Tags</a></div><h1>AST</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2 class=entry-hint-parent>Extension of P2PRC to create your own modification</h2></header><div class=entry-content><p>P2PRC as a abstraction</p></div><footer class=entry-footer><span title='2021-08-31 00:00:00 +0000 UTC'>2021-31-08</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;Akilan Selvacoumar</footer><a class=entry-link aria-label="post link to Extension of P2PRC to create your own modification" href=http://localhost:1313/technicalposts/p2prc-ast/></a></article></main><footer class=footer><span>&copy; 2025 <a href=http://localhost:1313/>Akilan</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script></body></html>

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