new changes
3
.gitmodules
vendored
Normal 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
5
archetypes/default.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
date: '{{ .Date }}'
|
||||
draft: true
|
||||
title: '{{ replace .File.ContentBaseName "-" " " | title }}'
|
||||
---
|
||||
23
content/about.md
Normal 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
@@ -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 -->
|
||||
91
content/generalposts/FS2020.md
Normal 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.
|
||||
|
||||

|
||||
|
||||
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:
|
||||
|
||||

|
||||
|
||||
- Flight Simulator 5.1:
|
||||
|
||||

|
||||
|
||||
- Flight Simulator X:
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
[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
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
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:
|
||||
|
||||

|
||||
26
content/generalposts/Opentowork.md
Normal 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 :)
|
||||
|
||||
|
||||
31
content/generalposts/Working-on-p2prc-challenges.md
Normal 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.
|
||||
5
content/generalposts/_index.md
Normal 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
@@ -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).
|
||||
---
|
||||
54
content/hiking/burntisland.md
Normal 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
|
||||

|
||||
|
||||
Edinburgh the only sunny city in Scotland!!!
|
||||
|
||||
## Original path
|
||||

|
||||
|
||||
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
|
||||

|
||||
|
||||
## Pictures
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
Rocky parts which had to be crossed through the costal walkway.
|
||||
|
||||

|
||||
|
||||
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
@@ -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
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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 :-).
|
||||
|
||||

|
||||
|
||||
Oww look another rainbow with camel humped style hills in the background. Don't get fooled by the weather the path was pretty swampy.
|
||||
|
||||

|
||||
|
||||
Wee beauty!
|
||||
|
||||
|
||||
|
||||
12
content/hiking/monaco.md
Normal 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
@@ -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)
|
||||
34
content/projects/Custom-Static-Website-Generator.md
Normal 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 Api’s. 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
@@ -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
|
||||

|
||||
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.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
5
content/projects/_index.md
Normal 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.
|
||||
---
|
||||
31
content/projects/arewefastyet.md
Normal 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
|
||||

|
||||
|
||||
## SQL Schema
|
||||

|
||||
|
||||
|
||||
23
content/projects/p2prc.md
Normal 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
@@ -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)
|
||||
42
content/technicalposts/Custom-static-website-generator.md
Normal 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.
|
||||
|
||||

|
||||
|
||||
### 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)
|
||||
39
content/technicalposts/IT-infrastrucuture-Beginners.md
Normal 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.
|
||||
73
content/technicalposts/Modifying-laplace-keyboard-mouse.md
Normal 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 |[](https://dev.azure.com/debauchee/Barrier/_build/latest?definitionId=1&branchName=master)|
|
||||
|Mac |[](https://dev.azure.com/debauchee/Barrier/_build/latest?definitionId=1&branchName=master)|
|
||||
|Windows Debug |[](https://dev.azure.com/debauchee/Barrier/_build/latest?definitionId=1&branchName=master)|
|
||||
|Windows Release|[](https://dev.azure.com/debauchee/Barrier/_build/latest?definitionId=1&branchName=master)|
|
||||
|Snap |[](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 >}}
|
||||
|
||||
|
||||
|
||||
50
content/technicalposts/P2PRC-1.0.0-Alpha-release.md
Normal 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
|
||||
|
||||
|
||||
135
content/technicalposts/P2PRC-AST.md
Normal 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
|
||||
140
content/technicalposts/P2PRC-Escaping-NAT.md
Normal 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
|
||||
```
|
||||
|
||||
92
content/technicalposts/P2PRC-Plugin-Module-Implementation.md
Normal 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
|
||||
60
content/technicalposts/P2PRC-automatic-ports.md
Normal 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
|
||||
6
content/technicalposts/_index.md
Normal 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.
|
||||
---
|
||||
@@ -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: Apple’s 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 it’s 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 :).
|
||||
155
content/technicalposts/riscv.md
Normal 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.
|
||||
|
||||

|
||||
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
|
||||
|
||||

|
||||
Fig 1.1 [Assembly instructions for RV32I](https://github.com/jameslzhu/riscv-card/blob/master/riscv-card.pdf)
|
||||
|
||||

|
||||
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
@@ -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
|
||||
BIN
img/hike/burntisland/Edinburgh.jpeg
Normal file
|
After Width: | Height: | Size: 221 KiB |
BIN
img/hike/burntisland/OriginalPath.png
Normal file
|
After Width: | Height: | Size: 340 KiB |
BIN
img/hike/burntisland/PathBlocked.jpeg
Normal file
|
After Width: | Height: | Size: 230 KiB |
BIN
img/hike/burntisland/Rocks.jpeg
Normal file
|
After Width: | Height: | Size: 402 KiB |
BIN
img/hike/burntisland/Seaside.jpeg
Normal file
|
After Width: | Height: | Size: 454 KiB |
BIN
img/hike/burntisland/burntisland.jpg
Normal file
|
After Width: | Height: | Size: 168 KiB |
BIN
img/hike/burntisland/burntislandpath.jpg
Normal file
|
After Width: | Height: | Size: 227 KiB |
BIN
img/hike/killin/path.png
Normal file
|
After Width: | Height: | Size: 554 KiB |
BIN
img/registersrv32i.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
img/rv32i.png
Normal file
|
After Width: | Height: | Size: 232 KiB |
6
public/404.html
Normal file
@@ -0,0 +1,6 @@
|
||||
<!doctype html><html lang=en dir=auto><head><script src="/livereload.js?mindelay=10&v=2&port=1313&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>© 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>
|
||||
2
public/CustomStaticWebsiteGenerator/index.html
Normal 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>
|
||||
2
public/CutestTrainStation/index.html
Normal 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
@@ -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>
|
||||
2
public/P2PRC-Automatic-ports/index.html
Normal 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>
|
||||
2
public/P2PRC-Extending/index.html
Normal 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>
|
||||
2
public/P2PRC-Plugin/index.html
Normal 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>
|
||||
2
public/P2PRC-escaping-NAT/index.html
Normal 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>
|
||||
2
public/P2PRC_Psychological_1/index.html
Normal 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>
|
||||
2
public/PersonalPublicTransport/index.html
Normal 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>
|
||||
2
public/RichFucks/index.html
Normal 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
2
public/arewefastyet/index.html
Normal 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>
|
||||
6
public/categories/index.html
Normal file
@@ -0,0 +1,6 @@
|
||||
<!doctype html><html lang=en dir=auto><head><script src="/livereload.js?mindelay=10&v=2&port=1313&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>© 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>
|
||||
1
public/categories/index.xml
Normal 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
2
public/fs2020/index.html
Normal 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>
|
||||
6
public/generalposts/fs2020/index.html
Normal file
6
public/generalposts/index.html
Normal file
1
public/generalposts/index.xml
Normal 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&rsquo;s hard to compare reality and simulation</description></item></channel></rss>
|
||||
8
public/generalposts/opentowork/index.html
Normal file
2
public/generalposts/page/1/index.html
Normal 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>
|
||||
18
public/generalposts/working-on-p2prc-challenges/index.html
Normal file
13
public/hiking/burntisland/index.html
Normal file
6
public/hiking/index.html
Normal file
1
public/hiking/index.xml
Normal 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>
|
||||
9
public/hiking/kilin/index.html
Normal file
6
public/hiking/monaco/index.html
Normal file
2
public/hiking/page/1/index.html
Normal 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>
|
||||
BIN
public/img/hike/burntisland/Edinburgh.jpeg
Normal file
|
After Width: | Height: | Size: 221 KiB |
BIN
public/img/hike/burntisland/OriginalPath.png
Normal file
|
After Width: | Height: | Size: 340 KiB |
BIN
public/img/hike/burntisland/PathBlocked.jpeg
Normal file
|
After Width: | Height: | Size: 230 KiB |
BIN
public/img/hike/burntisland/Rocks.jpeg
Normal file
|
After Width: | Height: | Size: 402 KiB |
BIN
public/img/hike/burntisland/Seaside.jpeg
Normal file
|
After Width: | Height: | Size: 454 KiB |
BIN
public/img/hike/burntisland/burntisland.jpg
Normal file
|
After Width: | Height: | Size: 168 KiB |
BIN
public/img/hike/burntisland/burntislandpath.jpg
Normal file
|
After Width: | Height: | Size: 227 KiB |
BIN
public/img/hike/killin/path.png
Normal file
|
After Width: | Height: | Size: 554 KiB |
BIN
public/img/registersrv32i.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
public/img/rv32i.png
Normal file
|
After Width: | Height: | Size: 232 KiB |
14
public/index.html
Normal file
1
public/index.xml
Normal file
2
public/laplace-keyboard-mouse/index.html
Normal 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>
|
||||
2
public/opentowork/index.html
Normal 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>
|
||||
2
public/p2prc-1.0.0-alpha/index.html
Normal 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
@@ -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
6
public/projects/arewefastyet/index.html
Normal file
6
public/projects/index.html
Normal file
1
public/projects/index.xml
Normal 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>
|
||||
7
public/projects/ioe/index.html
Normal file
6
public/projects/p2prc/index.html
Normal file
2
public/projects/page/1/index.html
Normal 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
3
public/robots.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
User-agent: *
|
||||
Disallow:
|
||||
Sitemap: http://localhost:1313/sitemap.xml
|
||||
1
public/sitemap.xml
Normal file
6
public/tags/ast/index.html
Normal file
@@ -0,0 +1,6 @@
|
||||
<!doctype html><html lang=en dir=auto><head><script src="/livereload.js?mindelay=10&v=2&port=1313&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> » <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> · 4 min · 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>© 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>
|
||||