├── .gitignore ├── .hugo_build.lock ├── static └── n1.png ├── content └── blog │ ├── img │ ├── eg-1.jpeg │ ├── eg-2.jpeg │ ├── eg-3.jpeg │ ├── eg-4.jpeg │ ├── mp_1.jpeg │ ├── sw1.jpg │ ├── ws2.jpeg │ ├── yay.gif │ ├── 2020-gh.png │ ├── 2022-gh.png │ ├── fastapi.png │ ├── feynman.png │ ├── nw-img.jpeg │ ├── search.png │ ├── cat-typing.gif │ ├── pil_img.jpeg │ └── solder_1.jpeg │ ├── probot │ ├── wp.jpg │ ├── glitch_show.png │ └── index.md │ ├── 2019-1 │ ├── jan.png │ └── index.md │ ├── pwcli │ ├── scrot.png │ └── index.md │ ├── tgnotify │ ├── p1.png │ ├── p2.png │ └── index.md │ ├── deploy-hugo │ ├── dpl.png │ └── index.md │ ├── telegram-bot-gh-actions │ ├── scr.png │ └── bfather.png │ ├── why_birthday.md │ ├── birthday │ └── index.md │ ├── two-planets.md │ ├── philosphy-2.md │ ├── My-Setup │ └── index.md │ ├── 2024.md │ ├── purpose.md │ ├── mob-dev │ └── index.md │ ├── bye-k2.md │ ├── dumb.md │ ├── readme_ghactions.md │ ├── shelby │ └── index.md │ ├── Automate-stuff │ └── index.md │ ├── 20-and-22.md │ ├── final-year.md │ ├── termchat.mdx │ ├── useful │ └── index.md │ ├── pink-floyd.md │ ├── gorelaser │ └── index.md │ ├── frappe-internship.md │ ├── desk-2020.md │ ├── cooking.md │ ├── 2020.md │ ├── hack.md │ ├── custom-mdx.md │ ├── love-and-other │ └── index.md │ ├── abraham.md │ ├── jiofi.md │ ├── First-year │ └── index.md │ ├── 2021-me.md │ ├── Bangalore │ └── index.md │ ├── philosophies.md │ ├── analytics_from_scratch.md │ ├── lobsters_feed.md │ ├── hackathons │ └── index.md │ ├── 2023.md │ └── macropad.md ├── archetypes └── default.md ├── layouts ├── partials │ ├── head.html │ ├── paginator.html │ ├── footer.html │ └── header.html ├── shortcodes │ └── callout.html ├── _default │ ├── baseof.html │ ├── list.html │ ├── term.html │ ├── terms.html │ └── single.html ├── 404.html └── index.html ├── netlify.toml ├── flake.nix ├── flake.lock ├── config.toml └── assets └── css ├── dark.css ├── fonts.css ├── syntax.css └── main.css /.gitignore: -------------------------------------------------------------------------------- 1 | public/ -------------------------------------------------------------------------------- /.hugo_build.lock: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/n1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/static/n1.png -------------------------------------------------------------------------------- /content/blog/img/eg-1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/eg-1.jpeg -------------------------------------------------------------------------------- /content/blog/img/eg-2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/eg-2.jpeg -------------------------------------------------------------------------------- /content/blog/img/eg-3.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/eg-3.jpeg -------------------------------------------------------------------------------- /content/blog/img/eg-4.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/eg-4.jpeg -------------------------------------------------------------------------------- /content/blog/img/mp_1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/mp_1.jpeg -------------------------------------------------------------------------------- /content/blog/img/sw1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/sw1.jpg -------------------------------------------------------------------------------- /content/blog/img/ws2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/ws2.jpeg -------------------------------------------------------------------------------- /content/blog/img/yay.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/yay.gif -------------------------------------------------------------------------------- /content/blog/probot/wp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/probot/wp.jpg -------------------------------------------------------------------------------- /content/blog/2019-1/jan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/2019-1/jan.png -------------------------------------------------------------------------------- /content/blog/img/2020-gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/2020-gh.png -------------------------------------------------------------------------------- /content/blog/img/2022-gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/2022-gh.png -------------------------------------------------------------------------------- /content/blog/img/fastapi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/fastapi.png -------------------------------------------------------------------------------- /content/blog/img/feynman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/feynman.png -------------------------------------------------------------------------------- /content/blog/img/nw-img.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/nw-img.jpeg -------------------------------------------------------------------------------- /content/blog/img/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/search.png -------------------------------------------------------------------------------- /content/blog/pwcli/scrot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/pwcli/scrot.png -------------------------------------------------------------------------------- /content/blog/tgnotify/p1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/tgnotify/p1.png -------------------------------------------------------------------------------- /content/blog/tgnotify/p2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/tgnotify/p2.png -------------------------------------------------------------------------------- /content/blog/img/cat-typing.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/cat-typing.gif -------------------------------------------------------------------------------- /content/blog/img/pil_img.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/pil_img.jpeg -------------------------------------------------------------------------------- /content/blog/img/solder_1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/img/solder_1.jpeg -------------------------------------------------------------------------------- /content/blog/deploy-hugo/dpl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/deploy-hugo/dpl.png -------------------------------------------------------------------------------- /content/blog/probot/glitch_show.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/probot/glitch_show.png -------------------------------------------------------------------------------- /archetypes/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{ replace .Name "-" " " | title }}" 3 | date: {{ .Date }} 4 | draft: true 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /content/blog/telegram-bot-gh-actions/scr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/telegram-bot-gh-actions/scr.png -------------------------------------------------------------------------------- /content/blog/telegram-bot-gh-actions/bfather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/athul/blog/HEAD/content/blog/telegram-bot-gh-actions/bfather.png -------------------------------------------------------------------------------- /layouts/partials/head.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{ .Site.Title }}

4 |
5 |
6 | -------------------------------------------------------------------------------- /layouts/shortcodes/callout.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 💡 {{ .Get "text" }} 5 |
6 |
7 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | publish = "public" 3 | command = "hugo --gc --minify" 4 | 5 | [context.production.environment] 6 | HUGO_VERSION = "0.125.0" 7 | HUGO_ENV = "production" 8 | 9 | [context.branch-deploy.environment] 10 | HUGO_VERSION = "0.125.0" 11 | -------------------------------------------------------------------------------- /layouts/_default/baseof.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{- partial "header.html" . -}} 4 | 5 |
6 | {{- block "main" . }}{{- end }} 7 | {{- partial "footer.html" . -}} 8 |
9 | 10 | 11 | -------------------------------------------------------------------------------- /layouts/404.html: -------------------------------------------------------------------------------- 1 | 2 | {{ partial "header.html" . }} 3 | 4 |
5 |

{{ .Site.Title }}

6 |
7 |
8 |

404

9 |

Route Doesn't Exist !!! The Sadness

10 | 11 | {{partial "footer.html" .}} 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "Daydreams++ Blog"; 3 | 4 | inputs = { 5 | nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; 6 | }; 7 | 8 | outputs = { self, nixpkgs }: 9 | let pkgs = nixpkgs.legacyPackages.x86_64-linux; 10 | in { 11 | devShells.x86_64-linux.default = pkgs.mkShell { 12 | buildInputs = [ 13 | pkgs.hugo 14 | ]; 15 | }; 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /layouts/partials/paginator.html: -------------------------------------------------------------------------------- 1 | {{ $pag := $.Paginator }} 2 | {{ if gt $pag.TotalPages 1 }} 3 | 15 | {{ end }} 16 | -------------------------------------------------------------------------------- /layouts/_default/list.html: -------------------------------------------------------------------------------- 1 | {{ define "main" }} {{ partial "head.html" . }} {{ if isset .Data "Term" }} 2 |

Entries tagged - "{{ .Data.Term }}"

3 | {{ else }} 4 |

All articles

5 | {{ end }} 6 | 7 | 18 |
19 | {{ end }} 20 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "nixpkgs": { 4 | "locked": { 5 | "lastModified": 1713537308, 6 | "narHash": "sha256-XtTSSIB2DA6tOv+l0FhvfDMiyCmhoRbNB+0SeInZkbk=", 7 | "owner": "nixos", 8 | "repo": "nixpkgs", 9 | "rev": "5c24cf2f0a12ad855f444c30b2421d044120c66f", 10 | "type": "github" 11 | }, 12 | "original": { 13 | "owner": "nixos", 14 | "ref": "nixos-unstable", 15 | "repo": "nixpkgs", 16 | "type": "github" 17 | } 18 | }, 19 | "root": { 20 | "inputs": { 21 | "nixpkgs": "nixpkgs" 22 | } 23 | } 24 | }, 25 | "root": "root", 26 | "version": 7 27 | } 28 | -------------------------------------------------------------------------------- /layouts/_default/term.html: -------------------------------------------------------------------------------- 1 | {{ define "main" }} {{ if isset .Data "Term" }} 2 |

Entries tagged - "{{ .Data.Term }}"

3 | 4 | {{ else }} 5 |

All articles

6 | {{ end }} 7 | 8 | 20 |
21 | {{ end }} 22 | -------------------------------------------------------------------------------- /content/blog/why_birthday.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Should Birthdays be Celebrated? 3 | date: "2021-07-08" 4 | description: ☝️ 5 | draft: true 6 | --- 7 | 8 | Recently I was having a conversation with a friend on Birthdays. Turned out both of our birthdays are on the same month but 1 year and 7 days apart. Then she asked me a question, "Do you like Birthdays?". I was stumped! Out of the rush to send a response, I replied saying "kinda yeah". I passively think about stuff in my conversations. 9 | 10 | > "Birthdays were made up by Birthday card companies to sell birthday cards" 11 | 12 | The question felt quite thinkable in a lot of sense. Should we celebrate birthdays? 13 | 14 | I'm not sure we should. Plus this is my personal opinion. 15 | -------------------------------------------------------------------------------- /layouts/_default/terms.html: -------------------------------------------------------------------------------- 1 | {{ define "main" }} {{partial "head.html" .}} 2 |

All tags

3 | 4 | {{ $biggest := 1 }} {{ $smallest := 1 }} {{ $max := 3 }} {{ $min := 1 }} {{ 5 | $size := $min }} {{ $data := .Data }} 6 |
7 | 20 |
21 |
22 | {{ end }} 23 | -------------------------------------------------------------------------------- /layouts/partials/footer.html: -------------------------------------------------------------------------------- 1 | 13 | {{ if not .Site.IsServer }} 14 | 19 | {{- end }} {{- if (isset .Site.Params "social") -}} 20 | 23 | {{- end -}} 24 | -------------------------------------------------------------------------------- /config.toml: -------------------------------------------------------------------------------- 1 | baseURL = "https://blog.athulcyriac.in" 2 | languageCode = "en-us" 3 | title = "dayDreams ++" 4 | copyright = "© Athul" 5 | paginate = 6 6 | pygmentsstyle = "catppuccin-mocha" 7 | pygmentscodefences = true 8 | pygmentscodefencesguesssyntax = true 9 | enableEmoji = true 10 | 11 | [params] 12 | favicon = "/n1.png" 13 | mode = "dark" 14 | useCDN = true 15 | subtitle = "Personal Blog of **Athul Cyriac Ajay**. Find more about me [here](https://athulcyriac.in)" 16 | description = "Because I daydream as incrementally" 17 | 18 | [[params.social]] 19 | name = "GitHub" 20 | icon = "github" 21 | url = "https://github.com/athul" 22 | 23 | [[params.social]] 24 | name = "Twitter" 25 | icon = "twitter" 26 | url = "https://twitter.com/athulcajay/" 27 | 28 | [[params.social]] 29 | name = "GitLab" 30 | icon = "gitlab" 31 | url = "https://gitlab.com/athul/" 32 | 33 | [[menu.main]] 34 | name = "RSS" 35 | url = "/index.xml" 36 | weight = 3 37 | 38 | [[menu.main]] 39 | name = "All Posts" 40 | url = "/blog" 41 | weight = 2 42 | 43 | [[menu.main]] 44 | name = "Tags" 45 | url = "/tags" 46 | weight = 1 47 | -------------------------------------------------------------------------------- /content/blog/birthday/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Call Your Friend 3 | date: "2020-01-12" 4 | description: Enjoy your friend's birthday together 5 | --- 6 | 7 | > when was the last time someone called to wish you a "Happy Birthday"? 8 | 9 | All of us Humans have our Birthdays, this is as true as the sun rises in the east and sets in the west stuff... The universal truth stuff. 10 | 11 | Otherwise if you're a robot, you'll have a manufacturing date. 12 | 13 | We all greet our friends with a lousy "Happy Birthday" in Whatsapp or Instagram (or Facebook) or someother social media platform. This maybe effective in the short term but the level of personalization is nearly equal to 1. 14 | 15 | In my opininon Birthday Wishes should come from the Heart.Rather than a routine Message through Whatsapp, it should come from your words. 16 | 17 | I prefer calling that person on his birthday, it gives a better message that I care and I value you... all that stuff. You took a bit of time to call that friend. It can help you get better with your old friends or relationships. Best of it all, It'll make the person happy since you've called. 18 | 19 | Next Time call your friends on His/Her Birthday in addition to that whatsapp message. 20 | -------------------------------------------------------------------------------- /assets/css/dark.css: -------------------------------------------------------------------------------- 1 | body { 2 | color: white; 3 | background-color: #121116; 4 | } 5 | 6 | ::-moz-selection { 7 | background: blue; 8 | color: #fff; 9 | text-shadow: none; 10 | } 11 | 12 | ::selection { 13 | background: red; 14 | color: #fff; 15 | text-shadow: none; 16 | } 17 | 18 | code { 19 | /* background-color: lightblue; */ 20 | /* color: black; */ 21 | text-decoration: bold; 22 | padding: 0.1em 0.2em; 23 | } 24 | pre { 25 | background-color: #272822; 26 | line-height: 1.4; 27 | overflow-x: auto; 28 | padding: 1em; 29 | } 30 | 31 | a { 32 | border-bottom: 3px solid var(--darkMaincolor); 33 | color: inherit; 34 | } 35 | /* a:hover { 36 | background-color: var(--darkMaincolor); 37 | color: black; 38 | } */ 39 | 40 | .site-description a { 41 | color: #ddd; 42 | } 43 | .site-description a:hover { 44 | color: black; 45 | } 46 | 47 | .tags a { 48 | color: paleturquoise; 49 | border-bottom: 3px solid var(--darkMaincolor); 50 | } 51 | .tags a:hover { 52 | background-color: var(--darkMaincolor); 53 | color: plum; 54 | } 55 | 56 | .site-title a { 57 | color: white; 58 | text-decoration: none !important; 59 | } 60 | 61 | .header nav, 62 | .footer { 63 | border-color: #333; 64 | } 65 | 66 | .highlight { 67 | background-color: #333; 68 | } 69 | .soc:hover { 70 | color: plum; 71 | } 72 | .draft-label { 73 | color: var(--darkMaincolor); 74 | background-color: blue; 75 | } 76 | -------------------------------------------------------------------------------- /content/blog/two-planets.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Two Planets 3 | date: "2021-10-20" 4 | description: '"How sweet If endlessly we might embrace"' 5 | tags: ["rant", "personal"] 6 | --- 7 | 8 | I was watching a video about Echoes by Pink Floyd on Youtube and came to know that Waters was inspired by the poem "Two Planets" by Muhammed Iqbal. I went on to search more about the poem and it goes like this, 9 | 10 | "_Two planets meeting face to face, 11 | One to the other cried, ‘How sweet 12 | If endlessly we might embrace, 13 | And here for ever stay! how sweet 14 | If Heaven a little might relent, 15 | And leave our light in one light blent!’ 16 | But through that longing to dissolve 17 | In one, the parting summons sounded. 18 | Immutably the stars revolve, 19 | By changeless orbits each is bounded; 20 | Eternal union is a dream, 21 | And severance the world’s law supreme._" 22 | 23 | I felt like Iqbal put up a common concept yet a profound one in a heavenly way which gives depth to that relationship. 24 | 25 | "_Eternal union is a dream, 26 | And severance the world's law supreme_" 27 | 28 | This makes a lot of sense in the usual humane sense and it hits the hardest. I don't have words to describe the feeling of helplessness when you read something like this and reflect on your personal achievements or your relationships. It's hard to accept but it will be the end result 😔 as Iqbal puts it, it's a **Universal Law**. 29 | -------------------------------------------------------------------------------- /content/blog/philosphy-2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The Sunset Revelation 3 | date: "2022-02-10" 4 | description: Sunsets and Dreads 5 | tags: ["life", "personal","philosophy","rant"] 6 | --- 7 | **Note**: 8 | This is just a rant. This is how my mind wanders off! 9 | 10 | --- 11 | 12 | Last Day I got a beautiful revelation. 13 | 14 | 15 | I was watching the sunset and all of a sudden I felt a fear surging to my brain. I felt so small in the universal vastness. I got so afraid that I could hear my heart beat and it was fast, so fast I thought I was going to pass out. 16 | 17 | It's a usual case for me. I'm used to having an _existential dread_ from time to time and this time it was no different. The sudden fear creeping throughout your body to the head. 18 | 19 | The premise of having this Existential Dread was none other than thinking about the future. What'll life be for my kids when I have them. What'll happen to my parents. How society will be in 5 years. The world that will be passed on, the world that the future will forget. Most of these are things outside of my control and comprehension. 20 | 21 | And just like mechanical switch, It clicked to me. Thinking about the future triggers this shit. An anxiety of what's to come in a few years. So, what's the solution? **Live the moment!** 22 | 23 | Enjoy the moment and don't be tensed about the future. It'll be good as well as bad. We'll grow enough to handle it. Like Atlas balancing to hold the world on his shoulders. We shall prevail! 24 | -------------------------------------------------------------------------------- /layouts/_default/single.html: -------------------------------------------------------------------------------- 1 | {{ define "main" }} 2 |
3 |

{{ .Site.Title }}

4 |
5 |
6 |
7 |
8 |

{{ .Title }}

9 |
Posted on {{ dateFormat "Jan 2, 2006" .Date }} | {{math.Round (div (countwords .Content) 250.0)}} minutes {{ if .Draft }} DRAFT {{ end }}
10 |
11 | {{ if isset .Params "tldr" }} 12 |
13 | tl;dr: 14 | {{ .Params.tldr }} 15 |
{{ end }} 16 | 17 |
18 | {{ .Content }} 19 |
20 | 21 | 33 |
34 |
35 |
36 | 44 |
45 |
46 | {{ end }} 47 | -------------------------------------------------------------------------------- /layouts/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ partial "header.html" . }} 4 | 5 | 6 |
7 |
8 | 11 |
12 | {{- if isset .Site.Params "subtitle" -}} 13 |

{{ .Site.Params.Subtitle | markdownify }}

14 | {{- end -}} 15 |
16 | {{ $pages := where .Site.RegularPages "Type" "in" .Site.Params.mainSections }} 17 | {{ $paginator := .Paginate (where $pages "Params.hidden" "ne" true) }} 18 | {{ range $paginator.Pages }} 19 |
20 |

21 | {{.Title}} 22 |

23 | {{ dateFormat "Jan 2, 2006" .Date }}{{ if .Draft }} DRAFT {{ end }} {{if isset .Params "new"}} NEW {{end}} 24 | 25 |
26 |
27 | {{ if isset .Params "description" }} {{ .Description }} {{ else }} 28 | {{ .Summary }}… {{ end }} 29 |
30 | Read more ⟶ 31 |
32 | {{ end }} 33 | {{ template "partials/paginator.html" . }} 34 |
35 |
36 | {{ partial "footer.html" . }} 37 |
38 | 39 | 40 | -------------------------------------------------------------------------------- /content/blog/My-Setup/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: My System Setup 3 | date: "2019-07-09" 4 | description: My Personal and Mobile Setup for Coding and Basic Stuffs 5 | --- 6 | Coding is one of my favorite Hobbies apart from Music and Films. 7 | My system is a Desktop with 4Gigs of RAM and an Intel Pentium Processor with 1024+ 8 | 160 Gigs of HDD Space.I've got a Windows and Linux Setup in my Desktop. I use Linux more than Windows. The only use for windows is for transferring files from the Pendrives and my Drives. 9 | 10 | #### My Linux Setup 11 | I use *Ubuntu* with *KDE Plasma* as the Desktop Environment which makes it **Kubuntu**. So The terminal is "Konsole". I use **'Oh-My-ZSH'** rather than the original **'Bash'** as my console. Oh-My-ZSH is so cool and the way we could customize it to our needs. 12 | #### My ZSH Setup 13 | - Theme is "Norm" 14 | - Plugins -> Git 15 | - Sometimes I cahnge the Theme to Powerlevel 9k 16 | 17 | I've got my Editors as Vim, NeoVim, Visual Studio Code and Atom. VS Code is my main editor while NeoVim is used Second. I use Atom and Vim for extreme cases. I don't check on my windows much so I don't know whats there. 18 | I mostly use these editors for JavaScript and Python. Occassionaly HTMl,C sometimes React, Django, Machine Learning Examples etc... 19 | 20 | #### Favorite Apps 21 | - Latte Dock(For the MAC OS like Dock) 22 | - Spotify 23 | - Tmux 24 | - GitHub Desktop for Linux 25 | #### Vs Code Plugins 26 | - Python for VsCode 27 | - C/C++ 28 | - Wakatime(For Coding Metrics) 29 | - GitLens 30 | - GitHub Pull Requests 31 | - Live Server 32 | - Material Icon Theme 33 | - Markdown Previeew GitHub 34 | - ESLint 35 | - Prettier 36 | - MDX 37 | - DeepDark Material Theme(Colors and Syntaxes) 38 | - Fira Code 39 | #### Vim/NeoVim Plugins 40 | - Airline 41 | - Python-Mode 42 | - WakaTime 43 | - Papaya(Colors) 44 | - NerdTree 45 | - Vim JavaScript 46 | #### Git Setup 47 | All The basic aliases for the Git Plugin for Oh-My-ZSH 48 | -------------------------------------------------------------------------------- /content/blog/2024.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Yearly Review 2024 3 | date: "2025-01-01" 4 | description: "Insert something exciting" 5 | tags: ["life", "personal","rewind"] 6 | aliases: [/2024] 7 | --- 8 | 9 | Unlike previous years' reviews, this year I don't want to write an essay on things, keeping it short and sweet, point wise: 10 | 11 | - Joined KnowBe4 on January 2nd as an SRE in the Platform Team. 12 | - KnowBe4 has a Kochi office, and all the folks are really sweet—awesome colleagues and awesome friends. 13 | - Tried going to the gym, but I don't think I have enough discipline to keep it up. 14 | - Presented a talk on Nix OS at the KochiFOSS meetup in February. 15 | - Moved to a new flat in Kochi. 16 | - Went for night drives a lot—lost count at some point. 17 | - Hung out with my friends a lot. 18 | - Went to Goa for a weekend, met a few of my colleagues from Frappe. 19 | - Went on an international vacation to Thailand, swam in the sea, and visited Phi Phi Islands. 20 | - Tried meal prepping but failed there too. 21 | - Learned some new tech skills. 22 | - Got a lot lazier. 23 | - Read very few books. 24 | - Watched some good movies. 25 | - Started listening to old Malayalam songs a lot. 26 | - Moved from my OnePlus to a Samsung S23 and got a new (used) ThinkPad. 27 | - Bought 3 new watches—one for my brother, one for my mother, and one for me (a Moonswatch, the costliest item I own after my phone). 28 | - Went on a weekend trip to Kodaikanal and Munnar with my roommates/flatmates. 29 | - Got a new PlayStation 5 and played a lot of games. Finished *Ghost of Tsushima*, *Spider-Man 2*, *The Last of Us*, *God of War*, and *God of War: Ragnarok*. 30 | - Didn't build any new keyboards or contribute to open-source projects. I still think 20-year-old Athul was better than 24-year-old Athul. 31 | - Went to the TechRoastShow in Bangalore. 32 | - Drove my car to 18,000 km (in a year and 3 months). Longest single stretch drive was 360 km. 33 | 34 | Life was mostly chill this year—less stress, a lot less solitude. Got a lot lazier, thought less about what's to come, and became a lot less philosophical. 35 | 36 | -------------------------------------------------------------------------------- /content/blog/purpose.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The Purpose of being Purposeless 3 | date: "2023-02-24" 4 | description: Pondering on Meta stuffs 5 | tags: ["meta","rant"] 6 | --- 7 | 8 | We ponder onto this statement at times, "Why?". These three words has sparked thoughts, revolutions, philosophies and all type intellectual bullshit all the time but something profound still remains with these three letters. I've no clue on what remains or what is there left to be thought out with these three characters but one thing I want to ponder on is using "why" with "purpose" or a cry with "Why?" like some movies. 9 | 10 | I mean "Why do I live? Why am I alive? Why do I walk the Earth with a said name and address? Why is my life worth it?" 11 | 12 | Yeah philosophical :) but these questions we ask are in someways profoundly mind boggling. Maybe it's the side-effect of being "intelligent" as in "Human intelligence" kinda terminology but maybe it's just a dumb way of giving some sense into our lives. How would our life be any different than that of a dog or a cat? Longer lifespans? But maybe it's just being as is. 13 | 14 | Profound. Oscillating. Invincible! 15 | 16 | In a recent fun turn of events, I had to visit a doctor for fever medication. I met the doctor after the first checkup again after two days and the second checkup was in a much less busy manner. Me and the doctor who was new to town had a small yet deep conversation. I've been struggling with the monotonous nature of my current work and the doctor said he's been on this monotonous ride for more than 30 years. Monotonousity or Non-Monotonousity(Maybe reach semantic satiation) it's just the way we have been wired or seen. We see our parents go to work each day everyday and maybe they just dont enjoy work but they just do it because they have to. I mean is it the best way? I'm not sure though but hey they seem to enjoy this monotonousity. Maybe it's the generation gap or it's just the "raging" hormones of a person in their 20s. 17 | 18 | I had a thought on how to end this blog but now I don't recall how to do it. The whole purpose of this post was to ponder onto the purposelessness but at the end this blog didn't meet the purpose of defining the purpose. Maybe there was never one, for this blog and nor for life. 19 | 20 | Too meta right!? 21 | -------------------------------------------------------------------------------- /assets/css/fonts.css: -------------------------------------------------------------------------------- 1 | /* fira-sans-regular - latin */ 2 | @font-face { 3 | font-family: 'Fira Sans'; 4 | font-style: normal; 5 | font-weight: 400; 6 | src: url('../fonts/fira-sans-v10-latin-regular.eot'); /* IE9 Compat Modes */ 7 | src: local('Fira Sans Regular'), local('FiraSans-Regular'), 8 | url('../fonts/fira-sans-v10-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 9 | url('../fonts/fira-sans-v10-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ 10 | url('../fonts/fira-sans-v10-latin-regular.woff') format('woff'), /* Modern Browsers */ 11 | url('../fonts/fira-sans-v10-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ 12 | url('../fonts/fira-sans-v10-latin-regular.svg#FiraSans') format('svg'); /* Legacy iOS */ 13 | } 14 | /* roboto-mono-regular - latin */ 15 | @font-face { 16 | font-family: 'Roboto Mono'; 17 | font-style: normal; 18 | font-weight: 400; 19 | src: url('../fonts/roboto-mono-v12-latin-regular.eot'); /* IE9 Compat Modes */ 20 | src: url('../fonts/roboto-mono-v12-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 21 | url('../fonts/roboto-mono-v12-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ 22 | url('../fonts/roboto-mono-v12-latin-regular.woff') format('woff'), /* Modern Browsers */ 23 | url('../fonts/roboto-mono-v12-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ 24 | url('../fonts/roboto-mono-v12-latin-regular.svg#RobotoMono') format('svg'); /* Legacy iOS */ 25 | } 26 | /* ibm-plex-mono-500italic - latin */ 27 | @font-face { 28 | font-family: 'IBM Plex Mono'; 29 | font-style: italic; 30 | font-weight: 500; 31 | src: url('../fonts/ibm-plex-mono-v6-latin-500italic.eot'); /* IE9 Compat Modes */ 32 | src: local('IBM Plex Mono Medium Italic'), local('IBMPlexMono-MediumItalic'), 33 | url('../fonts/ibm-plex-mono-v6-latin-500italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 34 | url('../fonts/ibm-plex-mono-v6-latin-500italic.woff2') format('woff2'), /* Super Modern Browsers */ 35 | url('../fonts/ibm-plex-mono-v6-latin-500italic.woff') format('woff'), /* Modern Browsers */ 36 | url('../fonts/ibm-plex-mono-v6-latin-500italic.ttf') format('truetype'), /* Safari, Android, iOS */ 37 | url('../fonts/ibm-plex-mono-v6-latin-500italic.svg#IBMPlexMono') format('svg'); /* Legacy iOS */ 38 | } 39 | -------------------------------------------------------------------------------- /content/blog/mob-dev/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Programming on your Phone 3 | date: "2019-06-23" 4 | description: How to start using termux,using it as your local development system with Git,Neovim and your required language packages 5 | --- 6 | ### What is Termux? 7 | Termux is a **Terminal Emulator** which can be used on Android. 8 | 9 | ### Why Termux? 10 | > "Start by answering the Whys"- Simon Sinek 11 | 12 | Termux is quite useful if you are a aspiring dev and doesn't have a budget to buy a laptop or If your machine goes on frequent strikes(as for me). You can do mostly anything that you do in a Linux terminal, like exploring files,editing them,moving them and using tools for Python,C,JavaScript(Node) etc... 13 | Termux is 14 | - Light Weight(few kilobytes) 15 | - Works same as the Bash in Linux 16 | - Managable 17 | - Open Source 18 | - Has a package manager/repository 19 | - Supports many Packages and Compilers 20 | - Can use the full potential of phone's computing power 21 | - Super handy(for devs) while travelling or related tasks 22 | #### Installing Termux 23 | Termux can be installed from *_Google Play or F-Droid_*. 24 | We can *simply* install it from either of these sources and it'll work on-the-go. 25 | 26 | #### Setting Up Termux 27 | Accessing the Termux file system is a tedious one and is hard to find(for me) but we can provide acces to termux to our internal storage by going to `setting` . We can see a list of all the arguments to be used with `pkg` by running `pkg help`. 30 | Here,I'll show an example on how to install git and neovim with Termux 31 | - `pkg install git` 32 | - `pkg install neovim` 33 | Its that simple. 34 | There might be a problem with the `curl` command and we can resolve it by running `pkg upgrade`. 35 | We can install **Node,Python and C** packages too,using `pkg install` command. 36 | #### What can we do 37 | - We can use version control using Git 38 | - We can edit files using Neovim or Nano 39 | - We can run servers with python or npm 40 | - We can get a new session by sliding from the left 41 | 42 | ---- 43 | 44 | PS. I made this blog and related setup on Phone using Termux 45 | -------------------------------------------------------------------------------- /content/blog/bye-k2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Bye K2 3 | date: "2021-11-18" 4 | description: Moving to a new keyboard 5 | tags: ["hobby", "keyboards", "project"] 6 | --- 7 | 8 | I was bit by the mevhanical Keyboard bug almost a year ago. I was really excited to receive my Keychron K2 on 19th November 2020. I was waiting t to buy it for more than 6 months but was out of stock on the Indian vendor websites then and to get my hands on the keyboard I had bought it from a vendor in Singapore which fortuantely shipped to India. I had to pay a about 34% of it's cost as customs 🥲. 9 | 10 | That was my most costliest purchase of an item for my computer and it seconds my custom mechanical keyboard which I built in November 2021. It holds a very special place in my heart and I'm proud of myself to have earned the money to buy a Keychron K2. 11 | 12 | ## Why???? 13 | 14 | Why did I ditch my K2? 15 | 16 | The K2 is a good keyboard but it lacks something I want, **Configurability**. I'm kinda being a hypocrite by saying this since I use a Mac as my daily driver but atleast I can configure that other than the RGB of the K2. Plus it was becoming a defacto for almost every Indian Tech guy on Twitter and Youtube. At the time when I bought my K2, I was one of the few owners to show off a K2 among my peers and now it seemed like something everyone knew about. I still love the K2 for it's colours and form factor. 17 | 18 | ## What did I switch to? 19 | 20 | I bought the PCB and switches and soldered together an **ErgoDash**. ErgoDash is a ergo split mechanical keyboard. It has 35 keys per side and per key single color backlight and an RGB underglow. I use a combination of Gateron Yellows, Blues and Browns. It's not the best combos but it fits perfectly for me. Plus It's really really really configurable. It uses QMK as it's firmware and it is boosted with the VIA firmware for ergodash and the VIA configurator boosts this flexibility. 21 | 22 | {{
}} 23 | 24 | Also it supports layers which is an added advantage compared to the K2. I wish I could hack the K2 and run it QMK, sadly no option at the time of writing this post. 25 | 26 | Honestly typing on the ergodash is hard work since I'm not used to this split layout and I have to reteach my muscle memory to adjust to new key mappings. My WPM is now at 20 from the 50 I used to get from the K2 and that is one thing. I need to get a palm rest for both the halves and a travelling bag for both the halves. These are attainable and these tradeoffs are something I can live with. :wink: 27 | 28 | {{
}} 29 | {{
}} 30 | {{
}} 31 | -------------------------------------------------------------------------------- /content/blog/dumb.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Dumb and Dumber 3 | date: "2020-05-27" 4 | description: The title says it all 5 | tags: ["personal"] 6 | --- 7 | 8 | Let me kick off with a tweet, that'll be better 9 | 10 | ![](/img/feynman.png) 11 | 12 | If you personally know me, you'll know which definition suits me, for those who don't, I fall in the former category and that has been one of my failures in these 19 years and I'm reluctant to address this single point of failure. 13 | 14 | I've been hearing this since school days and multiple times I tried to change it and I never got cured of it. 15 | 16 | Even in college and in my community life this has been a hard hitting personal problem for me. But hey I lived this long to tell these to someone else. 17 | 18 | ## The Dumb Stuffs 19 | 20 | Long Story Short: I've got an internship and worked there for a month and they let me go in the first month. I was unproductive and lazy. 21 | 22 | But I wasn't much sad for it. A bit sad yes but I too has faced a lot of rejection and this seemed a bit more straining. Yes I was unproductive and lazy, I know that. I've never seen a hustling work environment. All I seen are hackathons. 23 | 24 | But in this one month span I learned a lot. Starting from SSH-Keys and ending to a deep introspection on life and meaning and failures. I failed a lot, "A Lot". For starters I failed in cracking jokes, exams and easier stuffs. This fear of failures pushed me on but at some point I stopped to fear failures. 25 | Most of you would think, "Thats good right?".Yes in a sense and personally it was a huge loss for me. I got studious in school because of the fear that my parents may scold me. 26 | 27 | By the Time I got to college studies never have made a fearful. Rather than studies, the Fear of being a Failure haunted me and it still does. I was having a suicidal thoughts regarding the same, but got relieved after talking to my dad about it. It was soo depressing to have a fear like this and then onwards for me it felt like almost every other failure made that fear a bit more to reality bits by bits. 28 | 29 | I have trouble sleeping with this fear in my mind. My sleep cycle has lost it cyclical balance and rather has affected my total person. Even when I lost my internship after a month, this fear came back which was dormant for a few weeks that I will be failure and I believe I still am. 30 | 31 | Looking back to the past 19 years, All I've have are some good Friends and other than that I still have no acheivements to be proud of. Rather I've always been an arrogant asshole in the family and in my community for showing off to people that "I know stuff" which I don't know about. 32 | 33 | One thing I learned while on the internship was 34 | 35 | > "Never be reluctant to ask for help! No one is gonna judge you" 36 | 37 | I hope I could use this advice to be less dumb in the future. 38 | -------------------------------------------------------------------------------- /layouts/partials/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{- $title := ( .Title ) -}} 5 | {{- $siteTitle := ( .Site.Title ) -}} 6 | {{- if .IsHome -}} 7 | {{ $siteTitle }} | Home 8 | {{- else -}} 9 | {{ $title }} - {{ $siteTitle }} 10 | {{- end -}} 11 | 12 | {{- if isset .Site.Params "favicon" -}} 13 | 14 | {{- end -}} 15 | 16 | 17 | 18 | 19 | 20 | 21 | {{ with .OutputFormats.Get "rss" -}} 22 | {{ printf `` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }} 23 | {{ end -}} 24 | 25 | {{- template "_internal/opengraph.html" . -}} 26 | {{- template "_internal/twitter_cards.html" . -}} 27 | {{ if and (isset .Site.Params "social") (.Site.Params.useCDN | default false) -}} 28 | 29 | {{- else if (isset .Site.Params "social") -}} 30 | 31 | {{ end }} 32 | {{ $style := resources.Get "css/main.css" | fingerprint | resources.Minify }} 33 | 34 | {{- if or (eq .Site.Params.mode "auto") (eq .Site.Params.mode "dark") -}} 35 | {{ $darkstyle := resources.Get "css/dark.css" | fingerprint | resources.Minify }} 36 | 37 | {{ end }} 38 | 39 | 40 | {{- if isset .Site.Params "customcss" }} 41 | {{ range .Site.Params.customCSS }} 42 | {{ $customstyle := resources.Get . | fingerprint }} 43 | 44 | {{ end }} 45 | {{- end -}} 46 | {{- range .Site.Params.customJS }} 47 | {{- if or (hasPrefix . "http://") (hasPrefix . "https://") }} 48 | 49 | {{- else }} 50 | 51 | {{- end }} 52 | {{- end }} 53 | 54 | 55 | -------------------------------------------------------------------------------- /content/blog/readme_ghactions.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Updating GitHub Readme with Waka-readme 3 | date: "2020-07-18" 4 | description: Wakatime Stats in your Profile Readme 5 | --- 6 | 7 | Profile Readme are a new way to show off your GitHub profile and gives you all the powers of Markdown for doing it. Let's discuss some ways you can update your profile readme with Python and GitHub Actions and how I use them to update my Profile Readme. 8 | 9 | So I would like to introduce you to [waka-readme](https://github.com/athul/waka-readme). Its built with Python and can be used to generate a graph like this in your Profile Repo. It mostly uses regex and GitHub's REST API for Python to update the readme. This graph will be updated every day at 00.00 UTC on schedule thanks to GitHub Actions. 10 | 11 | ```text 12 | Week #29 : July 13 - 18 13 | 14 | Python 8 hrs 52 mins ███████████████████░░░░░░ 75.87% 15 | Go 1 hr 15 mins ██░░░░░░░░░░░░░░░░░░░░░░░ 10.79% 16 | Markdown 52 mins █░░░░░░░░░░░░░░░░░░░░░░░░ 7.43% 17 | Docker 16 mins ░░░░░░░░░░░░░░░░░░░░░░░░░ 2.32% 18 | YAML 7 mins ░░░░░░░░░░░░░░░░░░░░░░░░░ 1.07% 19 | ``` 20 | 21 | Currently waka-readme has nearly 40 ⭐️s on GitHub and 3 Contributors and about 64 people use this in their Profile. It's not that fancy in any way but totally nerdy in my opinion🤓. 22 | 23 | ## FlashBack 24 | 25 | I don't know if any of you remember, but there was a time when pinnable gists came and the GitHub world just went for new tricks and hacks for creating pinnable gists. I saw some people rickrolling with Pinnable Gists. That was a perfect time time for creating some cool hacks and GitHub Actions were still in the early beta phases. I was a user of WakaTime and the [waka-box](https://github.com/matchai/waka-box) workflow and had been using them till the Profile Readme came. 26 | 27 | ## Waka-Readme 28 | 29 | Once I was able to get the profile readme on my GitHub profile, I tried to hack on it a bit and the first hack was to include the WakaTime stats in the profile readme. The first method I used was to scrape it from the Gist I made for waka-box by simply a GET request to the Gist's raw URL. Then I thought that this wouldn't be useful for any other people since that would simple introduce a bit more overhead for people not using waka-box. So I went to hack on it a bit more and used WakaTime's API to get my data and generate a graph with Python. I used the percentage part of the API response and divided that with 4 and used that value to generate a graph with 25 blocks of `█` and `░`. This will give a good graph for the metrics in regards with the percentage of time spent on a language. This data is collected from the WakaTime plugin in your code-editor and it support almost editors the last time I checked. 30 | 31 | I enourage you to update your Profile readme till it gives a whole idea of who you are and if you have time do try waka-readme and fell free to open an issue or ping me on twitter [@athulcajay](https://twitter.com/athulcajay) for any queries plus drop a ⭐️ if you found it useful. Your feedbacks are highly appreciated and go forth and build awesome stuff. 32 | 33 | -------------------------------------------------------------------------------- /content/blog/deploy-hugo/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Deploy a Hugo Website to GH Pages 3 | date: "2020-04-18" 4 | description: Deploy a Hugo website to GitHub Pages with GitHub Actions 5 | --- 6 | Due to the quarantine I thought of doing something good and useful for others. So I hacked up a theme for Hugo called [Archie](https://athul.github.io/archie). The design was inspired from https://blog.jse.li and was hacked from the ezhil theme for Hugo. The main reason why I built it was due to the Hugo-Ink theme built by [knadh](https://github.com/knadh) since I'm totally a fanboy of him. So deploying Archie to GitHub Pages was quite fun and easily managable. GitHub Actions made it a lot easier since I don't have to rely on any other platforms for deployment. 7 | 8 | ## Steps to Deploy the Hugo Site 9 | There are a few steps to deploy the Hugo site to GitHub Pages and this is these steps are taken from a [Discussion Thread](https://discourse.gohugo.io/t/deploy-hugo-project-to-github-pages-with-github-actions/20725) in the Hugo Forum 10 | ### Create the SSH Deploy Keys 11 | A question arises here.... Why SSH keys? SSH keys are safe because they are secured with a SHA256 hash. It's also better to use the Deploy key than a GitHub API token as it should be confidential. 12 | 13 | ```bash 14 | ssh-keygen -t rsa -b 4096 -C "$(git config user.email)" -f gh-pages -N "" 15 | ``` 16 | Execute this command and it will generate 2 files: 17 | - `gh-pages.pub` (public key) 18 | - `gh-pages` (private key) 19 | 20 | Now we need to add these files to GitHub,for that go to repository setting and click on the Deploy Keys button, add your public key with the Allow write access 21 | ![](dpl.png) 22 | 23 | Next go to the Secrets button and add the Private key(`gh-pages`) as `ACTION_DEPLOY_KEY.` 24 | 25 | To copy the public / private keys just run 26 | ```bash 27 | cat gh-pages | pbcopy 28 | ``` 29 | and it will copy the private key to the clipboard 30 | 31 | ### Defining the Workflow 32 | A workflow is a a file which runs your action on the GitHub Environment, the Workflow is a Yaml file and it contains specific instructions on what to do and how to do it. 33 | 34 | For our purpose we'll be defining a workflow for deploying to GitHub Pages whenever we get a push to the `master` branch. Paste these in the `.github/workflows/gh-pages.yml` file 35 | ```yml 36 | name: Github Pages 37 | on: 38 | push: 39 | branches: 40 | - master 41 | jobs: 42 | deploy: 43 | runs-on: ubuntu-18.04 44 | steps: 45 | - uses: actions/checkout@v2 46 | with: 47 | submodules: true 48 | 49 | - name: Setup Hugo 50 | uses: peaceiris/actions-hugo@v2 51 | with: 52 | hugo-version: '0.67.1' 53 | - name: Build 54 | run: hugo --minify 55 | - name: Deploy 56 | uses: peaceiris/actions-gh-pages@v3 57 | with: 58 | deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} 59 | publish_dir: ./public 60 | ``` 61 | > Note: Before deploying, just add the url to which you're going to deploy in the baseURL of the `config.toml` file with a trailing `/` 62 | 63 | ---- 64 | ### What I learned? 65 | With Archie too 😁, 66 | 67 | - Hugo as a SSG 68 | - CSS styling 69 | - Hugo Templating syntax 70 | - Deploying with Deploy Keys in GitHub 71 | - Designing New Hugo Shortcodes -------------------------------------------------------------------------------- /content/blog/shelby/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Shelby, the Shell Prompt 3 | date: "2019-12-26" 4 | description: Shelby is one of my Side Projects. It's a shell prompt written in Go for speed and minimalism 5 | tags: ["code","project"] 6 | --- 7 | 8 | ## What??? 9 | 10 | Shelby is a **bash and zsh** shell prompt with more focus on improving the terminal productivity while not compromising the speed and size. 11 | 12 | ## Why?? 13 | 14 | I use the terminal. I use it a LOT. Mostly editing,running scripts and servers. I use zsh because I ❤️ oh-my-zsh. I used to use [Spaceship Prompt](https://github.com/denysdovhan/spaceship-prompt) and it felt like quite slow to me. Then I flipped to [Starship Prompt](starship.rs) by the awesome [@matchai](https://github.com/matchai). 15 | 16 | I really fell in love with Starship. It's fast, it's built with Rust were too big to be for me to fall in ❤️. The only drawback was that it showed a lot of info. A lot. I didn't want to customize it much because I was lazy(obviously) and writing another TOML file was meh. 17 | 18 | Then on this fine evening(Dec 2nd) before going to sleep, during to the Study Leaves before my Uni Exams, I thought of writing a shell prompt in Go. I wanted it be **fast**, to only show the **needed info**(virtualenvs,SSH and git), and has a **small size**. The small package size maybe because I use a Macbook Air with 128gigs of storage and not wasting data for downloading the stuff. 19 | I've seen Go and Rust programs get photo finishes at speed benchmarks and I thought, why not learn Go on the go and write this Stuff???? 20 | 21 | 22 | > This was also the time I found out that Study Leaves increases the productivity and improves out of the box thinking. 23 | 24 | Then I wanted a name for it. I didn't want it to be a ship anymore but more personally and technically relatable. So I named it **_Shelby_** because *Shell+feminine name (because ships are mostly given feminine names🤪)* and my childhood caretaker's name was Silby😁. 25 | 26 | ## Code 27 | 28 | I started a bit on it like setting up the repo both local and remote and went to sleep. Since being a total noob to Go(I started learning a few days ago), I searched for any other implementations of the same. I stumbled upon [Powerline Go by @justjanne](https://github.com/justjanne/powerline-go) and [Mimir by @talal](https://github.com/talal/mimir). I found both the code hard to follow but grasped their logic in time. Shelby still use mimir's code in some functions😅. 29 | 30 | 31 | So, forward a few weeks after my 3rd paper(Discrete Mathematics) I got to spend a bit more time into it and on 22nd Decemeber 2019, I released the *Alpha* of Shelby. It still has bugs in it but due to my lack of knowledge in Go, I'm still searching for fixes🙂. 32 | 33 | Some of it's properties are: 34 | - Small Size(binary ~= 2MB, tar ~= 700KB) 35 | - Shows if a Virtualenv is enabled 36 | - Shows the Username and Hostname if that system is accessed via SSH 37 | - Shows the Git branch 38 | - Shows the number of untracked and unstaged files as `[+]` and `[!]` respectively. There will be a count of both of the files unstaged or untracked. 39 | 40 | 41 | You can find Shelby on GitHub [here](https://github.com/athul/shelby) do give it a try and open an issue or two if you find anything unusual😃. It also passed 35 stars on GitHub(my highest starred repo). I also built a GitHub Action to keep me posted on any new stars on telegram just to keep me motivated😊. 42 | 43 | I'd like to also thank[Gopikrishnan Sasikumar](https://github.com/GopikrishnanSasikumar) for providing me with a much needed mental support and being my mentor😇, and my Friend Kiran for the support and ideas . 44 | 45 | 46 | Thanks 47 | -------------------------------------------------------------------------------- /content/blog/tgnotify/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Get GitHub action Notification in Telegram ⚡️⚡️ 3 | date: "2020-01-01" 4 | description: Get Notifications of GitHub Actions in Telegram by using only a Shell Script and a Bot 5 | --- 6 | ### The Story Behind 7 | So, these few days I've been working on [Shelby](https://github.com/athul/shelby) a lot. For handling the releases section I used Travis CI and Travis really does a good job at it. 8 | The only thing about travis is that it takes time to *complete the build and deploy cycle*. Starting with the docker container to the deployment. We'd have to wait in the build page for a few minutes till the build&deploy is completed. That's just waste of productive time I'd say. Maybe in that time we could do something else like searhing stackoverflow for a previous error or read the docs to find out how it works better. And to check if the build failed or succeded, I'd have to go back to Travis' page and meh, it's just lazy. 9 | 10 | So I googled for any solutions to get me notified. I found this medium article where the author made a Shell Script to use it with Travis and sends you a notification on the **build's status in Telegram using a Bot.** I didn't knew that a Shell Script is enough for a telegram bot to work. 11 | 12 | I loved the idea, and copied the script and used it with some changes in the output message. It was fast alright. As soon as the build completed I'd get a Message in Telegram regarding the status. 13 | ### The Story Now 14 | I tweaked the same script to use it along GitHub Actions and boy, its fast alright. 15 | The solution I used before this was a GitHub Action I made for notifying meon Builds using GitHub actions. It was called [Statusoli](https://github.com/athul/statusoli). 16 | I made it using docker actions template and Go. I made different versions for it in different branches of the Repo. The `star` branch had an output message for notifying about new stars in the repo. The `notify` branch is for notifying about any new pull request or issues opened,closed,assigned or reopened. The `master` branch is just for sending a message regarding only the build status. 17 | And all of it included a Malayalam Text, I made it just for fun🤷‍♂️. 18 | 19 | Now the shell script for GitHub Actions Telegram Notify is a small one, You can find all of my scripts [here](https://github.com/athul/autom). 20 | 21 | You just have to add these lines to the action 22 | ```yml 23 | - name: Notifier 24 | env: 25 | TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID}} 26 | TELEGRAM_TOKEN: ${{secrets.TELEGRAM_TOKEN }} 27 | INPUT_STATUS: ${{ job.status }} 28 | run: sh -c "$(curl -sL https://raw.githubusercontent.com/athul/autom/master/tg_gh_action_noti.sh)" 29 | 30 | ``` 31 | > The `TELEGRAM_TOKEN` and the `TELEGRAM_CHAT_ID` should be added to the repository secrets in the repository settings. Be in mind that these Secret's Name is case sensitive. 32 | 33 | - Here the `TELEGRAM_CHAT_ID` is the chat id you want the bot to send the messages to. You can find your chat id by speaking to `jsondumpbot` in telegram. 34 | - The `TELEGRAM_TOKEN` is your Telegram bot's API Key. You can create a new bot by talking to `botfather` bot in Telegram 35 | - The `INPUT_STATUS` is something the actions have, you don't have to pass anything to it. 36 | The Shell script mostly uses Action's Environment Variables. So you'd have to define the trigger on which the action should be done. Check [this Guide](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows) for references. 37 | And 38 | 39 | ---- 40 | 41 | Screenshots: 1. Shell Script, 2. Statuoli 42 | ![Shell Script](p1.png) 43 | ![Statusoli](p2.png) 44 | **Happy New Year Ya'll** 45 | -------------------------------------------------------------------------------- /assets/css/syntax.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Based on copypasta from Remy Bach and Sarah Drasner 3 | */ 4 | code[class*='language-'], 5 | pre[class*='language-'] { 6 | color: white; 7 | background: none; 8 | font-family: Consolas, Menlo, Monaco, source-code-pro, Courier New, monospace; 9 | font-feature-settings: normal; 10 | text-align: left; 11 | white-space: pre; 12 | word-spacing: normal; 13 | word-break: normal; 14 | word-wrap: normal; 15 | line-height: 1.5; 16 | margin-bottom: 0; 17 | 18 | -moz-tab-size: 4; 19 | -o-tab-size: 4; 20 | tab-size: 4; 21 | 22 | -webkit-hyphens: none; 23 | -moz-hyphens: none; 24 | -ms-hyphens: none; 25 | hyphens: none; 26 | } 27 | 28 | /* Code blocks */ 29 | code[class*='language-'] { 30 | overflow: auto; 31 | padding: 1.3125rem; 32 | } 33 | 34 | pre[class*='language-']::-moz-selection { 35 | /* Firefox */ 36 | background: hsl(207, 4%, 16%); 37 | } 38 | 39 | pre[class*='language-']::selection { 40 | /* Safari */ 41 | background: hsl(207, 4%, 16%); 42 | } 43 | 44 | /* Text Selection colour */ 45 | pre[class*='language-']::-moz-selection, 46 | pre[class*='language-'] ::-moz-selection { 47 | text-shadow: none; 48 | background: hsla(0, 0%, 100%, 0.15); 49 | } 50 | 51 | pre[class*='language-']::selection, 52 | pre[class*='language-'] ::selection { 53 | text-shadow: none; 54 | background: hsla(0, 0%, 100%, 0.15); 55 | } 56 | 57 | /* Inline code */ 58 | :not(pre) > code[class*='language-'] { 59 | border-radius: 0.3em; 60 | background: #031627; 61 | color: var(--inlineCode-text); 62 | padding: 0.15em 0.2em 0.05em; 63 | white-space: normal; 64 | } 65 | 66 | .token.attr-name { 67 | color: rgb(173, 219, 103); 68 | font-style: italic; 69 | } 70 | 71 | .token.comment { 72 | color: rgb(128, 147, 147); 73 | } 74 | 75 | .token.string, 76 | .token.url { 77 | color: rgb(173, 219, 103); 78 | } 79 | 80 | .token.variable { 81 | color: rgb(214, 222, 235); 82 | } 83 | 84 | .token.number { 85 | color: rgb(247, 140, 108); 86 | } 87 | 88 | .token.builtin, 89 | .token.char, 90 | .token.constant, 91 | .token.function { 92 | color: rgb(130, 170, 255); 93 | } 94 | 95 | .token.punctuation { 96 | color: rgb(199, 146, 234); 97 | } 98 | 99 | .token.selector, 100 | .token.doctype { 101 | color: rgb(199, 146, 234); 102 | font-style: 'italic'; 103 | } 104 | 105 | .token.class-name { 106 | color: rgb(255, 203, 139); 107 | } 108 | 109 | .token.tag, 110 | .token.operator, 111 | .token.keyword { 112 | color: #ffa7c4; 113 | } 114 | 115 | .token.boolean { 116 | color: rgb(255, 88, 116); 117 | } 118 | 119 | .token.property { 120 | color: rgb(128, 203, 196); 121 | } 122 | 123 | .token.namespace { 124 | color: rgb(178, 204, 214); 125 | } 126 | 127 | pre[data-line] { 128 | padding: 1em 0 1em 3em; 129 | position: relative; 130 | } 131 | 132 | .highlight { 133 | background-color: hsla(207, 95%, 15%, 1); 134 | display: block; 135 | margin-right: -1.3125rem; 136 | margin-left: -1.3125rem; 137 | padding-right: 1em; 138 | padding-left: 1.25em; 139 | border-left: 0.25em solid #ffa7c4; 140 | } 141 | 142 | .highlight { 143 | margin-bottom: 1.75rem; 144 | margin-left: -1.3125rem; 145 | margin-right: -1.3125rem; 146 | border-radius: 10px; 147 | background: #011627; 148 | -webkit-overflow-scrolling: touch; 149 | overflow: auto; 150 | } 151 | 152 | @media (max-width: 672px) { 153 | .highlight { 154 | border-radius: 0; 155 | } 156 | } 157 | 158 | .highlight code[class*='language-'] { 159 | float: left; 160 | min-width: 100%; 161 | } -------------------------------------------------------------------------------- /content/blog/Automate-stuff/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Shell Scripting to Automation 3 | date: "2019-07-02" 4 | description: Automating Basic Unix stuff with Shell Scripts/Bash Scripts. From Pushing to different branches to saving you a Few Keypresses 5 | --- 6 | 7 | Ever encountered a time when you have a few working branches which you update daily? Then you'll know how tiresome it is to `checkout` to every branch and typing `git push ` . If you haven't encountered this,try doing it once, you'll know what I'm saying😏😏. 8 | We could always automate these stuff just by a few line of shell code.It's quite **easy** you know. Starting by taking the above said situation,you've got 5 branches and you want to push to all these 5 branches. We'll write a shell script for it. 9 | ```bash 10 | cd ~/path/to/git/repository/ #Assuming you are anywhere 11 | for i in 'master' 'dev' 'fix1' 'patch1' 'dope-branch-name' 12 | do 13 | git checkout $i 14 | git pull origin $i && git push origin $i 15 | done 16 | ``` 17 | This 7 line script can help you save some keystrokes.You should save this script with a `.sh` extension and can be run by typing `sh script_filename.sh` So now,what does this mean? It's the same thing you type in the terminal with a for loop as for extra a _"dev"_ touch😁😁. 18 | The looping variable `i` will loop through the strings we've passed through, these will be our branch names and inside the for loop the variable is passed by a _$_ prefix. Now wherever we use the _$_ as prefix for the variable name,the script will automatically pass the variable's value, just like that :snap:⚡⚡. Everything that needs to be executed inside the loop should be between the `do` and `done` keywords. The loop will go on till the parameters are over. 19 | 20 | ------ 21 | 22 | Now let us make a script which runs a python program,saves its output to another file and commits it and git push it. 23 | Here I'll be pushing it to a [Gist](https://gist.github.com). 24 | So some days ago I started using (Wakatime)[] which gets track on your coding activity and its super cool,showing it off in your GitHub profile seemed cool and one [Campus Expert,John Pham](phamous.dev) did do it and it looked super cool. But the way he did was using GitHub Actions, and no I didn't apply for the Beta of GH Actions. So I made a Python🐍 script to make something like his. You can find it [here](https://github.com/Athul-CA/wakatime-metrics). 25 | It's a tad manual since API requests are 😰😱. The manual thing is you've got to copy a json file from your wakatime dasboard's "embed" page. The rest of the work is done by a shell script👻👻. For showing the activity in my Profile too,I made a public gist with a `.txt` file in GitHub and cloned it to my local machine. The shell script goes like this,👇👇 26 | 27 | ```bash 28 | cd ~/path/to_the/python_file and json file 29 | nvim filename.json 30 | python main.py filename.json > ~/path_to_cloned_gist_repo/filename.txt 31 | cd ~/path_to_gist_repo 32 | git commit -a -m "New Metrics" 33 | git push origin master 34 | 35 | ``` 36 | When running this script, you'll be first prompted to paste the `json` text you copied from the Wakatime dashboard. You should delete the current contents and paste the new ones and save it. You can use any editor of your choice, I use NeoVim. It will run the python program and it will push the changes to GitHub. Easy Right? Just with a few line of Bash Script we can automate quite a good amount of Tedious Tasks. 37 | We can set up a script for launching the terminal just as the System turns on but I believe its for you to find out more about it. This post might've helped and possibly this will be the needed push for you to explore the world of shell scripting and automation✌️✌️✌️. 38 | I will post some more on this when I understand more of this some day.👻 39 | -------------------------------------------------------------------------------- /content/blog/20-and-22.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 20 → 22 3 | date: "2023-03-04" 4 | description: Though being 20 was hard, try >20 5 | tags: ["meta","rant"] 6 | --- 7 | 8 | So 2 years ago, one of my friends were looking for a job and he was 22 at that time. He was/is a good programmer guy and had a lot of projects under his name. He was struggling to get a job he liked and I asked him a question. 9 | 10 | > "Dude you are a contributor to the Fedora Kernal, how hard can getting the job be?" 11 | > To which he replied 12 | > "That was 20 year old me. I'm not 20 anymore" 13 | 14 | Little did I know that this answer will come to haunt me 2 years later. 15 | 16 | ---- 17 | 18 | When I was 20, I used to be the guy who thinks of "how can I write something that will solve this given problem" and I would have a rough idea on how to build a solution to that. It was not a well thought out product or something of extreme value but it felt great when I could think of something like that and get motivated to work on it. I used to spend almost all my weekend attending hackathons, hacking on stuff I found interesting and fun. 19 | 20 | I can safely say **I used to be a Hacker**. 21 | 22 | Am I a hacker now? I'm not sure. Sometimes I get this sudden boost in motivation to work on something so trivial or something more fun just to make 5 mins of my time less manual. But that's just programmer vibes I guess, a lot of "Not Invented Here" syndrome. 23 | 24 | My life has been one hack on top of another. Winging things all the time, not completing enough(Only things I've completed end to end is School and some old computer games) just leaving things off once it serves my purpose. It's a pretty lazy trait and I fully accept me being lazy. But being lazy has it's perks of getting to work on something that makes your life less mediocre. 25 | 26 | But thinking on mediocrity on life, life used to be less mediocre back when I was 20. Sitting home(due to covid), having a deluge of ideas, not thinking much into the future and getting anxious, pondering on philosophical pointless questions. But being 22, guess the only thing still going on from 2 years ago is sitting at home(remotly working), everything else has changed. Zero original ideas, zero creativity, zero things to do for fun and more mediocre. Maybe I'm just trying to hold on to my childish self. If I get to an option to choose to relive my childhood vs to fast forward to my mid-life situation, I'll choose my childhood any day any time and relive it all again to reach this age again and wing it again. Life was simpler then(like a 50 year old would say). Funnily(?) enough I can't write my heart out anymore, even reading my blogs from 2 years ago makes my current self feel like *what happened?* and neither can I read much more books. I mean these two must be correlated but still not living upto that 20 year old self. Maybe from my current perpective, life peaked when I was 20 and I'm still struggling to match what I achieved when I was 20. 27 | 28 | Maybe my GitHub green dots might give you an idea on what changed 29 | 30 | {{< figure src="../img/2020-gh.png" width="70%" >}} 31 | {{< figure src="../img/2022-gh.png" width="70%" >}} 32 | 33 | I'm just speculating on all the above, it's fun to have these weird thought experiments as long as it doesn't kill a cat or destroy a ship. 34 | 35 | But yeah, being 22 hasn't been easy to wing. Maybe mediocrity is part of being an Adult(Am I an adult?). Maybe it's becoming all the things I never dreamt of becoming but alas! I've become all those. I've become a bore of a person, less interesting. I find my 20 year old self a hella lot interesting and lot more curious and a lot more hacker vibes and zero fucks to give. Now it's too many "fucks to give" to handle. 36 | 37 | I'm sorry to that 20 year self, I'm sorry that I ended up less than you. 38 | 39 | > "The child is gone, The dream is gone 40 | > I have become comfortably numb" 41 | > - Comfortably Numb, The Wall,Pink Floyd 42 | -------------------------------------------------------------------------------- /content/blog/final-year.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The last 100 days 3 | date: "2022-03-03" 4 | description: The Last 100 days of College 5 | tags: ["life","college","rant","personal"] 6 | --- 7 | 8 | I joined College of Engineering Kidangoor on August 1st 2018 to start my undergraduate studies in Computer Science and Engineering under Kerala Technological University. CE Kidangoor is nearby the banks of the river Meenachil which starts from the western ghats and drains to the Vembanad Lake. Kidangoor is a small town and has impacted almost every student who had studied there. Impact in the sense that it have taught people how to cope with shortcomings and to move forward even when an adversity looks straight to your eyes and is ready to shoot you at point blank. The "പോട്ടെ പുല്ല്" mindset. This mindset is with almost every student under KTU. 9 | 10 | CEK wasn't a theatre of dreams or the best college nearby to get the UG degree, it's decent enough that people don't even know much about this college. It's not lush with greenery nor with fun side activities. It's like a school with another hierarchy and structure of operations. But there is something in CEK that's worth enjoying and I can't understand what it is. Some say to enjoy college you must be live in college. That's something I still haven't achieved yet, and I'm not sure I'll achieve it in these last 100 days. I had 4 years(remove 100 days) to achieve this but haven't yet. 11 | 12 | As the title says "The Last 100 Days" is actually not correct but not incorrect too. I've got like 5 months of college left but 1.5 months will be gone for our exams and the rest some for project works and you remove all those non-working days and I'll get roughly 80 days. 13 | 14 | There is something strange I felt when I understood that college is going to finish soon. The helplessness that I won't get to sit in the same classroom and discuss about all kinds of stuff. Sleep on the backbench after eating lunch and listening to lullabies which are actually just computer science theories. Microprocessors, Automata, Omega Networks, Hashes, Transactions and all kinda of theory. 15 | 16 | The helplessness came from the thought that I didn't get enough of college. 2 years of my supposed college life was snatched away due to COVID. The lockdown actually happened when we were actually getting along. The thought that there is a lot to explore, a lot to learn from college and all these just went down the drain. I couldn't even explore much of the local leisure spots. 17 | 18 | CEK taught me many things that I forget to recollect. It taught me that people will be good most of the time if you deal with them in a good manner. The only exception were the self imposed dictator of CEK and a few faculty. CEK was nothing like the college portrayed in movies, when I joined, it felt more like a school, but it later changed and felt more like a tight knit group of people, just chillin out in daylight when classes were on full swing. It was better than school and here everyone's voice was given equal value unlike the gangs at school.One thing that's best about CEK was the students. The senior students who became good friends and mentors, my classmates and my junior students. 19 | 20 | CEK gave me a lot of room to grow. My seniors motivated me to scratch the surface of the technical skills of my classmates and my juniors. This paved off my way to become a GitHub Campus Expert and to be part of a college community. Later I had the luck of leading it and start a new hackathon at CEK(The hackathon didn't pan out well). It also made me attend many more hackathons and join other communities. To strive for the vibe I can find at hackathons rather than trying to win. To become the Athul you read today. 21 | 22 | With all these said, I never have regretted studying at CEK. I thank the books I've read while learning for the entrance examination and my parents who never asked me why I should pursue Engineering. 23 | 24 | Looking back CEK was the theatre of _"my"_ dreams!!! 25 | -------------------------------------------------------------------------------- /content/blog/termchat.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Termchat - Chat from your Terminal with Websockets 3 | date: "2020-05-17" 4 | description: Termchat is small a side project which uses Websockets to commnunicate with a group from the Terminal. 5 | --- 6 | "Websockets... Websockets... Websockets...", I could do this all hour like Paul Allen shouted "Developers...Developers...Developers..." in some Microsoft Conference. I don't remember the specific conference but you get the point. Websockets are the bread and butter of many Realtime systems today. They're easy to implement in Node.js and mostly it is limited to web. 7 | 8 | ![Toy Story Meme](img/ws2.jpeg) 9 | 10 | ## Phase - 1 | Brainstorm 11 | 12 | I had searched google sometime ago on using websockets other than from browsers. Couldn't find a non browser usage of websockets. I was also inspired by a project called [Niltalk](https://github.com/knadh/niltalk) which uses Go's websocket's implementation with React but hey that too used the browser. So I went forth to make something using websockets and not TCP sockets. I wanted to write in Go since I knew Go and Go's websocket implementation was ⚡️. I had never used websockets before writing Termchat and boy oh boy... They're super cool. 13 | 14 | ## Phase - 2 | Writing Code 15 | 16 | ![](img/cat-typing.gif) 17 | 18 | Everytime I try to code in Go, I learn new things and use things in the Go STDlib that I had never used before. I for the First time used Goroutines and Structs here. The building part was a bit tricky since most of the blog posts or tutorials used webscokets where they sre usually used, in the Browser. Anyways the [Gorilla/Websocket](https://github.com/gorilla/websocket) package is well documented and had better "reviews" than the Standard Go Websocket implementation. I used some of the code from their example and mashed this up. 19 | 20 | "You can copy/paste code, but knowing what changes what is the key to making something from 0" 21 |
22 | The code uses goroutines for basic data transfer from client to Hub. There is a Hub and Client struct for the Data part. The User inputs the data and forwards it to the Hub and the gup broadcasts it to all other clients connected to the server. 23 | The `runner.go` file helps the clients connect to the server. It dials up to the websocket url and gives and input buffer for text entry. 24 | It was by accident when I actually found that this whole code actually works. 25 | 26 | **Here is a sample working 👇** 27 | 28 | 29 | 30 | The command part and connection is a simple `goroutine` dialing the websocket and connecting to it, but the difference here is that it connects from a Terminal🤪. 31 | 32 | ## Phase 3 - Making it Better 33 | 34 | You can find the source code on GitHub 35 |
36 | This is not the perfect implementation but it works, so sharing this 😅. I felt so proud that I hacked this up in the quarantine and learned a bit more of Go and websockets with this. Who knows, makng this better may help someone in some way. 37 | Some ways it could be used is,
38 | 39 | - Secret message passing in Local network(Like in Programming labs in college😂) 40 | - Organization Messaging 41 | - Hackathons for messaging mentors and organizers 42 | 43 | **This phase is still going on and might improve Termchat's functionality or design in the near future(I Hope).** 44 | 45 | ### What I learned from hacking this 46 | Learning is a part of everyday now, so hacking this up helped me a learn a lot about 47 | - Goroutines 48 | - Structs in Go 49 | - Interfaces in Go 50 | - Websockets 51 | 52 | > The chat in video is me talking to myself in 3 other aliases 🤪 53 | 54 | Here is another nerdy websoket Meme 👇 55 | 56 | ![2nd Nerdy Meme](img/sw1.jpg) 57 | 58 | > If you find any typos or have any suggestions or questions, feel free to use the comments section -------------------------------------------------------------------------------- /content/blog/useful/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Using your Old System Better 3 | date: "2019-12-14" 4 | description: Using your Old System as your Private Server,GitHub, Cloud and Whatnot 5 | --- 6 | 7 | # Using your Old System Better 8 | We all went through that stage(most of us), when we buy a New Laptop and we forget about out Old Computer. This is a much common trait of us. 9 | Most us has spend a lot of money fixing that old system and improving it. We've upgraded the RAM and HDD and still when we get this fancy new laptop and all of a sudden we Forget our PC. 10 | This **Negelected** peice of ICs and Love could be your next big side project. For me I was totally sad of not using my PC for weeks after buying my Laptop. I even felt empathatic for my PC. 11 | ![Old comp](https://media.giphy.com/media/xULW8m5Vmtz9oOSFpu/giphy.gif) 12 | ### What did I do? 13 | So after all this introspection and empathizing, I thought why not set my system to be my Server? 14 | Why not use it as my Storage Space? Why not use it as my Git Server???? Why not my Personal Cloud?????? 15 | So I started to work on this stuff. 16 | 17 | ------ 18 | ### Act 1, SSH 19 | 1. The First was of course I searched on What should I do? I found a lot of stuff for a server but most of them included booting to a new OS. I didn't want that. So I searched for other solutions 20 | 2. I currently run Manjaro and Ubuntu on my System and my Laptop is a Macbook. I couldn't drop neither of my OS. So I continued my Search. 21 | 3. Then I thought "Hey, I could just SSH into my PC and see what its like." I spend Half a Day just for the initial Connection. I have a Wifi card and a modem with WIFI, so I justed SSHed into my PC 22 | For SSHing use these commands 23 | ```shell 24 | $ ssh-keygen 25 | $ ssh-copy-id host@hostname/ip 26 | $ ssh host@hostname/ip 27 | ``` 28 | And congratulations you justed SSHed into your PC from a Laptop. :rocket: 29 | Now you get the Terminal of your PC(linux) and you're like the God of the Terminal now 30 | 4. You can run any commands like `curl`,`wget`, `npm install` etc... 31 | ![](https://media.giphy.com/media/65n8RPEa3r65q/giphy.gif) 32 | 33 | ------ 34 | ### Act 2, Personal Git Storage 35 | GitHub is one of the famous(and my fav) Git Repository storing & hosting platform. Why not a Personal GitHub lookalike for you? You could save all your private projects here without any risk or Costs. 36 | Some Self Hosted Git Platforms are 37 | - GitLab Community Edition 🆓 38 | - Gogs 🆓 39 | - Gitea 🆓 40 | - GitHub Enterprize Server 💸 41 | 42 | I used **Gitea** since it was easy to install and setup. You only have to download a binary from gitea.io and voíla you get an instant GitHub lookalike webapp. 43 | My advice is that if you want to use it cross-device install it in the central server and ssh to it from any device and for that(ssh-ing) I'd higly suggest (not a promotion)[Termius](https://termius.com). It has got a 14 day free trial of premium and you can get the pro pack from the [GitHub Student Developer Pack](https://termius.com/education). 44 | Or you can just enter the IP of the server followed by the port number in your browser like `192.168.322.12:3000` and you will get the webapp. 45 | Now create some repositories and use Gitea 🎉🎉 46 | 47 | ------ 48 | ### Act 3, The File Storage shenanigan 49 | Yep, use it as your personal data center. Store all your stuff. Your films,songs and *study materials*. Do it coz only you're the only one who can access all that since you're the one who knows how the folder structure is. Add a media server and you can use it with your Smart TV and forget about paying any bills for streaming. 50 | ![Roll Safe Meme](https://media.giphy.com/media/d3mlE7uhX8KFgEmY/giphy.gif) 51 | 52 | ---- 53 | ### Act 4, The Future 54 | "Wait what? This is what you've been Bragging about?" you might ask? I'd say yes since the next big selfhosted stuff maybe your best Ideas. You can self-host anything from Websites, Games to Even Media Servers 55 | 56 | 57 | Here are some good Places to find out more on what to selfhost 58 | - https://github.com/awesome-selfhosted/awesome-selfhosted The GitHub Repo tells it all 59 | - https://www.reddit.com/r/selfhosted/ The Epic Place to get all the info . 60 | -------------------------------------------------------------------------------- /content/blog/pink-floyd.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Coming Back to Pink Floyd" 3 | date: "2021-09-10" 4 | description: Rant on Pink Floyd's Music 5 | tags: ["music", "personal"] 6 | --- 7 | 8 | _"For long you live and high you fly_ 9 | 10 | _And smiles you'll give and tears you'll cry_ 11 | 12 | _And all you touch and all you see_ 13 | 14 | _Is all your life will ever be"_ 15 | 16 | \- Breathe, **Pink** Floyd 17 | 18 | --- 19 | 20 | ## Coming Back to Life 21 | 22 | Pink Floyd, the band of the 70's and 80's which brought mainstream attention to Psychedelic Rock and Progressive rock as a whole is an important part of my daily listening activity. Like most people who love Pink Floyd, there has been days when I listened to just them, various albums, various timelines, various states of mind. Even while writing this sentence I'm listening to "Shine on you Crazy Diamond(Pt 1-5)" from "Wish you were Here" and it's 1:36AM. 23 | 24 | I started to listen to Pink Floyd for the first time in 2019, my cousin had told me to listen to them since I loved Queen,AC/DC and Led Zeppelin(Immigrant Song mainly) then. I gave it a try by listening to "Wish you Were Here" then. I was hoping for something so pumped up and dance level since Immigrant Song was something like that and my Pop remix listening brain thought so. Underwhelming as the first thought came in 2019 when I listened to it. Maybe it was the forced liking effort from my side which made me less like it then. 25 | 26 | Then I watched 'Person of Interest'. There is a shot where the Machine asks for forgiveness to Harold. The background music actually struck me quite well. I went on to Google and searched for the music with the season and episode number. The music of that scene was "Welcome to the Machine" by Pink Floyd. I really liked that one and occasionally listened to that single song for so much time. I was more into Pop and Regional music then. 27 | 28 | FF to 2021 July. I met a senior from College who used to be the Guitar player back then(I'm still in College :see_no_evil:). He actually told me more about Pink Floyd and told me to listen to "Coming Back to Life". I came home and thought why not try it out, so I listened to it on my headphones at Midnight(usual music listening time) and that just blew me away. The more I listened to Pink Floyd, the more I loved it. I still listen to at-least one song from "The Dark Side of the Moon" album(mostly Breathe or Time). It just eases me and gives me enough hope and darkness for to move the day. 29 | 30 | ## This Irresitable Pasttime 31 | 32 | Wish you were here is the most listened songs by Pink Floyd on Spotify. The Guitars in _wywh_ is :sparkles:. Most of my thoughts when listening to Pink Floyd are from a feeling of heartbreak from past experiences. The song was originally made for their the then exited member Syd Barret but me as like most people, enjoyed this song from a romantic perspective. The frequency of listening to Floyd increased after a total breakdown of the emotional side of my brain. 33 | Wish you were here still reminds me of past romantic feelings, how common both the parties were and the ideologies each had. 34 | 35 | --- 36 | 37 | Mostly the Pink Floyd listening experience can be boosted with a tinge of "Melancholy". Melancholy helps us to understand art in a deeper perspective(I heard this in a Ted-Ed video). This is also true in many examples including music in varying genres, poetry and so on... 38 | 39 | Pink Floyd for me was the farcry to soothe the non-existing-non-relationship-friendship-break part of myself with a new music genre but turned out to be the best music choices yet. Pink Floyd is the main reason I'm learning to play the :guitar: (David Gilmour :zap:) and enjoy things without the lost friend. 40 | 41 | One of the things that I find funny is that I enjoy the songs made in my Dad's generation while he doesn't. 42 | 43 | ### My Favorite Albums and songs of Pink Floyd 44 | 45 | - The Dark Side of the Moon (1973) 46 | - Breathe 47 | - Time 48 | - Brain Damage 49 | - Wish you were Here (1975) 50 | - The Division Bell (1994) 51 | - Coming back to Life 52 | - Poles Apart 53 | - Lost for Words 54 | - Animals (1977) 55 | - Green is the Color - More(1969) 56 | - Comfortably Numb - The Wall(1979) 57 | - Echoes - Meddle(1971) 58 | -------------------------------------------------------------------------------- /content/blog/pwcli/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: From 0 to Go, Building a CLI for Postwoman 3 | date: "2020-02-01" 4 | description: Building a CLI for Postwoman without any Prior knowledge in Golang and learning golang better by building the cli. 5 | --- 6 | ![](/scrot.png) 7 | 8 | > "All power is within you. You can do anything and everything. Believe in that" - Swami Vivekananda 9 | 10 | You might be thinking why I started with a quote by Swami Vivekananda. This quote has been a driving factor in my pursuits to learn new things and building stuff and moving forward. 11 | 12 | I have been into Go for about 2 months now. I just wrote up two hacks in Go too. One was [Shelby](https://github.com/athul/shelby) and now lemme introduce you to [Postwoman CLI](https://github.com/athul/pwcli). As the name says It's a CLI client for [Postwoman 👽](https://postwoman.io) in Go. 13 | 14 | ## The '0' 👦 15 | Learning either Go or Rust was in my TODO list of 2019. It was only in late 2019, I had reached the mindset to learn Go. I started out on tutorials in building servers in Go. I used to code servers in Python and falled for Backend Programming. I made a bunch of servers in Go with Gin. Go was intimidating at first since it felt more like C to me, but in a few days I got the clutch of it. I still don't actually know most of Go like using slices and goroutines that much. I learn mostly by building so, I learn when I build. 16 | ## The '-1' 👶 17 | I met Liyas Thomas, the author of Postwoman in the official Telegram Group of Postwoman. Since he too was from the state of Kerala, we had a few convos. I had opened a PR to Postwoman when it launched in August-September but it didn't get merged due to my lack of Vue/Js. But later on I had a chat with him if I did a refactor PR. He really gave me the confidence to do that and I did. The PR was reviewed and made changes by the Maintainers of PW and where it started in 1 commit it changed to 8 and the diff was **+8k and -8k**. The PR got merged and I was the **#11 Contributor of PW 🎉.** The PR didn't give me any satisfaction but later after 2 days, Liyas send me a bug and told me to try to fix that. I traversed over 2k lines of Vue code and found the bug. He made a commit and fixed it. This bug squashing gave me much satisfaction than all the contributions I've done. Later that week, a maintainer and My Friend James made a repo for a CLI in Js. So the idea for making another CLI was basically for learning for me. 18 | ## The '1' 👨 19 | So, Liyas gave a Green Flag to work on the CLI. I considered Go as first option since I didnt know how to make one in any lang and Go was fresh in my mind. I built it in almost 2 weeks. `pwcli` is like *httpie* with displaying the Request Headers and Status Code and Output Highlighting. The Output is now limited to Json but will add support to HTML and XML in the coming days. **It also has a `send` feature in which you can give it the Postwoman-Collection.json file and it will test all the endpoints in their respective methods and output the status code**. This was actually a feature request in the Js counterpart of the CLI. 20 | ```bash 21 | NAME: 22 | Postwoman CLI - Test API endpoints without the hassle 23 | 24 | USAGE: 25 | cli [global options] command [command options] [arguments...] 26 | 27 | VERSION: 28 | 0.0.2 29 | 30 | DESCRIPTION: 31 | Made with <3 by Postwoman Team 32 | 33 | COMMANDS: 34 | get Send a GET request 35 | post Send a POST Request 36 | put Send a PUT Request 37 | patch Send a PATCH Request 38 | delete Send a DELETE Request 39 | send Test all the Endpoints in the Postwoman Collection.json 40 | help, h Shows a list of commands or help for one command 41 | 42 | GLOBAL OPTIONS: 43 | --help, -h show help 44 | --version, -v print the version 45 | ``` 46 | You can find **PwCLI** in GitHub at https://github.com/athul/pwcli. Consider trying it out and Giving a star. 47 | **PwCLI is open sourced under MIT and is waiting for Feature requests and Contributions** 48 | ## The '+1' 👨‍💻 49 | In these two weeks, I've learned a lot of Go, HTTP Requests and REST APIs. The main highlights were 50 | - Learned Go Structs 51 | - How to parse Json in Go 52 | - Learned Go Slices 53 | - Learned how to use `net/http` package of 54 | Go 55 | - HTTP Requests 56 | - Meeting the Postwoman team, especially from Kerala 57 | - Homebrew Packaging and bits of Ruby 58 | - Building CLIs 59 | - My insecurity with starting a convo with new people 60 | - Taking a workshop *(by actually taking one)* 61 | 62 | > "Learn like your life depended on it, coz it will" - Unknown 63 | -------------------------------------------------------------------------------- /content/blog/gorelaser/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Go ❤️ Travis+Gorelaser 3 | date: "2020-01-05" 4 | description: Using Travis CI with Goreleaser to Build and Deploy Your Go Applications to GitHub Releases and Godownloader to help users download your packages the easy way....🥳🥳🥳🥳🥳🥳🥳🥳🥳🥳 5 | --- 6 | Past Month, I've been wworking on Shelby a lot. I had set up my CI pipeline using [Travis CI](https://travis-ci.org/) by a `.travis.yml` file from [Powerline Go](https://github.com/justjanne/powerline-go).I used a shell script from [Mimir](https://github.com/talal/mimir)'s documentaion to help users install the binary or tar. 7 | I had tweaked both of em a bit to make it work for Shelby's requirements. 8 | 9 | #### The Email 10 | One day morning, I e-mailed [@talal](ttps://github.com/talal/) since I used some of the source code from Mimir for bootstrapping the project. He was so happy to receive the Email and gave mesome much needed feedback for Shelby. Out of this was one to try out Goreleaser for deployment. So I went on try it. Some other feedback also came from one of my telegram group [TinkerHub](https://t.me/TinkerHub/6839) to change the default installation path. 11 | > We'll be using goreleaser to Deploy a Go application to GitHub Releases.I am writing this because the Docs were a bit confusing to me. 12 | 13 | --- 14 | 15 | ## Setting Up Goreleaser and Travis CI 16 | 17 | All the installation Instructions of Gorelaser can be found in their [Official Docs](https://goreleaser.com/install/). 18 | After Installing Goreleaser, you just have to `cd` to that go repository you want to deploy and run `goreleaser init`. This command will create a `goreleaser.yml` already filled with some commands and stuff. 19 | 20 | **Here is the Gorelaser part to Deploy the Application to GitHUb Relases** 21 | ```yml 22 | release: 23 | github: 24 | owner: 25 | name: 26 | ``` 27 | You can add this to the bottom of the `.gorealeaser.yml` file and it'll work fine. 28 | 29 | **For Deploying to GitHub Releases Add this to your `.travis.yml` file** 30 | 31 | ```yml 32 | deploy: 33 | - provider: script 34 | skip_cleanup: true 35 | script: curl -sL https://git.io/goreleaser | bash 36 | on: 37 | tags: true 38 | ``` 39 | This will only deploy to GitHub releases when a tag is created and pushed. You will need a GitHub Token in the Repo scope and while adding it to Travis Secrets you must name it like `GITHUB_TOKEN` only. 40 | 41 | --- 42 | ### Some tips before pushing a tags for checking Goreleaser. 43 | You can always try goreleaser in you the terminal. 44 | - Try `goreleaser release --skip-publish` command and you can always test with this before you push to GitHub. 45 | I'd totally suggest this since I had simply pushed without any testing and I had to write the whole thing...again. 46 | 47 | --- 48 | 49 | ## GoDownloader 50 | You can install godownloader from their [releases page](https://github.com/goreleaser/godownloader/releases). Follow the next steps to use it Globally 51 | ```shell 52 | $ tar -xvf .tar.gz 53 | $ mv godownloader /usr/local/bin/ 54 | ``` 55 | Now go to your working folder and run 56 | ```shell 57 | $ godownloader --repo=/ > godownloader.sh 58 | ``` 59 | This will make a `godownlaoder.sh` file which can be used as an installation script. 60 | 61 | ---- 62 | ## Here are my Pipelines 63 | - `.travis.yml` 64 | 65 | ```yml 66 | sudo: false 67 | language: go 68 | 69 | go: 70 | - "1.13" 71 | before_script: 72 | - go get -v 73 | - go build 74 | - rm -rf shelby 75 | # 76 | # before we deploy, we go build for all operating systems we would like to support 77 | deploy: 78 | - provider: script 79 | skip_cleanup: true 80 | script: curl -sL https://git.io/goreleaser | bash 81 | on: 82 | tags: true 83 | ``` 84 | - `.goreleaser.yml` 85 | 86 | ```yml 87 | 88 | before: 89 | hooks: 90 | # you may remove this if you don't use vgo 91 | - go mod tidy 92 | # you may remove this if you don't need go generate 93 | - go get -v 94 | builds: 95 | - 96 | 97 | env: 98 | - CGO_ENABLED=0 99 | ldflags: 100 | - -s -w 101 | goos: 102 | - darwin 103 | - linux 104 | goarch: 105 | - amd64 106 | archives: 107 | - replacements: 108 | darwin: Darwin 109 | linux: Linux 110 | amd64: x86_64 111 | checksum: 112 | name_template: 'checksums.txt' 113 | snapshot: 114 | name_template: "{{ .Tag }}" 115 | changelog: 116 | sort: asc 117 | filters: 118 | exclude: 119 | - '^docs:' 120 | - '^test:' 121 | release: 122 | github: 123 | owner: athul 124 | name: shelby 125 | ``` 126 | -------------------------------------------------------------------------------- /content/blog/frappe-internship.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The Intern 3 | date: "2021-07-24" 4 | description: Internship Journey @Frappe 5 | tags: ["tech", "life", "personal"] 6 | --- 7 | 8 | Recently I had been an Intern at [Frappe](https://frappe.io). To get more context, Frappe is the company behind [ERPNext](https://erpnext.com). ERPNext is an Open Source ERP built on top of the Frappe homegrown Python Framework called **Frappe Framework** and I don't think many Indian companies have a framework of their own. 9 | Frappe is so cool, the people, the philosophy and the values. The People were so kind and helpful and the best of all a great learning experience. 10 | 11 | When I was a kid my parents and elders used to tell me a Malayalam proverb "കുന്നോളം ആശിച്ചാലേ കുന്നികുരുവോളം കിട്ടു" which translates to "Dream Big to acheive the smallest". There maybe better translations but nothing comes to mind now. Looking into this, this proverb was for the lazy dreamers who wanted great things in life but never work for it, the one thing I got to learn is if you've put the effort for acheiving it then you shall receive. Sadly I didn't understand the logic behind dreaming big, what's the point? Like Buddha says, "Desire is the root cause for all suffering". 12 | 13 | The point I'm trying to say is I didn't dream to be part of a Google or Microsoft. Budding Developers seems to think that you need to get into a FAANG company for your life to settle but that isn't anyways true. The one thing developers seems to do is work like robots and make shit tons of money, but here too what's the point of making shit tons of money? To be respected? Money can't buy anyone happiness, it's one of the ways to surf capitalism's wave. Being a Catholic, I was fascinated by the Bible in my earlier years, one of the sentences/quotes(English isn't my first language and my vocabulary has become too redundant and my brain functions feels deteriorated while I try to translate words) which actually shows the hollowness of money/power 14 | 15 | > "What good will it be for someone to gain the whole world, yet forfeit their soul?" Matthew 16:26 16 | 17 | After all this ranting on my life philosophies(I may regret this later 🙈). 18 | 19 | I can't tell you on what I've worked there, but these are some rants on what I learned 20 | 21 | ## Books 22 | 23 | Most of the people at Frappe are ardent readers. This came like a surprise to me, never have I in my 3 years of studying in college and having a dozen cousins and their spouses in Engineering heard about a full team so spirited on reading books and having a book club and bi-weekly calls to talk about books. This time at Frappe made me read quite a handful of books and an urge to spend money on books. Books were also a topic of discussion in company wide calls. 24 | 25 | ## Philosphy/Ideals 26 | 27 | I never understood the philosophy behind writing code untill now. Honestly, there isn't much to blabber about on code philosophy but it can be either perfect code or sphagetti code which has to be refactored over and over to attain a certain "perfectionism". Frappe has certain values/ideals and from what I understood, each person working there follows that unbeknownst to the individual. It's something that the senior engineers always impact the junior engineers and their peers. You can read more about the values at Frappe [here](https://frappe.io/values) 28 | 29 | ## Code styles 30 | 31 | Underscores, underscores and underscores.... Only use underscores. Period. Or write every method in Python or JavaScript in snake case. No camelCase, never use it. The other code styles usually come to typing, spaces after equals and variable naming. 32 | 33 | ## Frappe Framework 34 | 35 | This is a tech sided stuff but hell yeah, this was one of the best things I've learned in 2021. T'was a bit bulky to learn at start but later it was quite easier to build something on top of it. Initially it was a bit hard to understand how it works, but later on it was easier than most frameworks I've learned. Everything was a lot easier with it. 36 | 37 | --- 38 | 39 | People were so good there. We had games on Discord every Friday and everyone gave their honest feedback at all times. People appreciate you to for a smallest achievement you made, and the flexible timing made the environment stress free. But on a personal note, it was a tough time for me from a mental aspect. I was feeling a lot dejected and lonely and the people there helped me a lot. They gave me new perspectives of music, new perspective of movies and series and yes of course books. Frappe gave me good friends and that's something I'm really grateful for 💖. 40 | 41 | > P.S: This was written after months of procrastinating from blogging. People won't read it much but I guess I have lost the flair on writing too. 42 | -------------------------------------------------------------------------------- /content/blog/desk-2020.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Desk Setup - 2020 3 | date: "2020-11-24" 4 | description: Desk setup and most used Apps 5 | tags: ["hobby","tech"] 6 | --- 7 | 8 | My Desk is a small corner of the house. It's where my system stands, every Eureka moment I had and "Why the hell isn't this working?" happened. It doesn't have much unlike the desk showoff counterparts but has quite the basic stuffs which I need. As a college student going to "Google Meet" my desk setup is more than enough for video calls with the video off as most of my classes do. I also watch some of my classes on my Phone. I sometimes write notes about a Topic, it a tad tedious to listen to class and type out the same coming from a Pen and Paper way for the past 15 years of schools. So here they are, 9 | 10 | ## Phone 11 | 12 | I own a OnePlus Nord. I used to use an Honor 9 Lite which I ditched in August 2020, the same time I bought the new one. Strangely enough my Phone and my Laptop has the same memory. 8 Gigs of RAM and 128 gigs of Storage. Bought it myself with Self Earned money from writing Blogs for others. Coming from a 3 + 32 GB phone, the Nord is frikking fast. Better Photos and Fast Charging became my Favorites. I sometimes take Photos on the starry sky. 13 | 14 | ![](https://pbs.twimg.com/media/EjgdZeXXcAIeIsd?format=jpg) 15 | 16 | ## Laptop 17 | 18 | I own a Macbook Air 2017. It runs on MacOS Catalina. The new Big Sur upgrade is available but haven't upgraded yet, because I'm afraid if it'll break my current apps like catalina did a year ago. The Mac has been with me for a year now. I selected the macbook Air due to my travelling needs. I usually go to hackathons a lot and it's uncomfortable to take a laptop say weighing 2kgs and communting with that. The sheer weight will induce new back problems for me and a person at 181cm height, back problems are really ahrd to cope with. 19 | 20 | ![Laptop](https://i.imgur.com/bhkzivl.jpg) 21 | 22 | ## PC 23 | 24 | I own a PC too. It's a 2016 assembled one where I procured the items from a local wholesale shop. It's still running. I had upgraded the ram to 8gigs in April but I seldom turn it own now. It has about 4 linux distros loaded 25 | 26 | - Manjaro 27 | - Elementary 28 | - Kubuntu 29 | - KDE Neon 30 | 31 | I use manjaro most times when I turn it on. It's filled with Movies by my sibiling who has a good taste for movies. 32 | 33 | ## Monitor 34 | 35 | I own a Aopen 19" Monitor. It was too bought from a local shop. Aopen is owned by Acer I guess. I had a plan to move to another bigger one but it's on hold for the time being. May upgrade that after college or after I get a job or have a better economical hold 😄. 36 | 37 | ![Monitor](https://i.imgur.com/DatLqsx.jpg) 38 | 39 | ## Keyboard 40 | 41 | I recently bought a mechanical keyboard. I had been waiting to buy one for the past 6-7 months. I'm an owner of a Keychron K2. it did cost me quite a bit of money but It was money well spent. I used to own a Logitech k200 for the past 4 years. I had spray painted a few keys of the membrane keyboard for more aesthetics but was went south. The new keybaord is RGB + Gateron Browns + Aluminium frame. 42 | 43 | ![](https://pbs.twimg.com/media/EnIHlmiXMAAUPoi?format=jpg&name=medium) 44 | 45 | ## Chair 46 | 47 | The current chair I use was bought from a local store. Metal Legs and cushioned seats. The one I used before was 20+ years old. It had started giving me a lot of backpain after a coding or workshop session. So went and bought the new one. The wheel base is a boon for me. I don't have to get up and walk a few meters to turn on the Fan or light anymore😂. 48 | 49 | ![](https://pbs.twimg.com/media/EhKm5p-XgAAgYlj?format=jpg) 50 | 51 | --- 52 | ## Apps 53 | 54 | The Apps I use most on my laptop 55 | 56 | ### iTerm2 57 | 58 | iTerm2 is my terminal emulator. I use zsh as my basic shell with a custom [prompt](https://github.com/athul/shelby) I made a year ago in Go. I sometimes uses NeoVim for file editing. 59 | 60 | ### Brave 61 | 62 | I use Brave Browser to surf the internet. It doesn't show me ads of any sorts and I'm really happy about that. It doesn't show ads on Spotify, Youtube or Twitter 63 | 64 | ### VsCodium 65 | 66 | I had been a VsCode user for a few years now. I recently switched to VsCodium for a more privacy oriented code editor. I use the Vim emulation plugin for vsCodium for mouse independancy. The other plugins I use are the Golang plugin and Python plugin. I sometimes write Js or HTML and that's it. I have a wakatime plugin to track my coding activity and get detailed stats. 67 | 68 | ### Insomnia 69 | 70 | Insomnia is my local API Testing App. It still bothers me that Insomnia is made in electron. It would've been super cool if it was made in native code. 71 | 72 | ### Spotify 73 | 74 | For music and podcasts(duh) 75 | 76 | ### Telegram and WhatsApp 77 | 78 | Messaging obviosly 79 | -------------------------------------------------------------------------------- /assets/css/main.css: -------------------------------------------------------------------------------- 1 | /* global.css */ 2 | @import url("https://cdn.jsdelivr.net/npm/@xz/fonts@1/serve/fira-sans.min.css"); 3 | @import url("https://cdn.jsdelivr.net/npm/@xz/fonts@1/serve/cascadia-code.min.css"); 4 | @import url("https://fonts.googleapis.com/css2?family=Open+Sans:wght@700&display=swap"); 5 | @import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@400;900&display=swap"); 6 | html { 7 | font: 100%/1.75 "Merriweather", "Georgia", serif; 8 | } 9 | body { 10 | --bg: #121116; 11 | --textNormal: rgba(255, 255, 255, 0.88); 12 | --textTitle: yellow; 13 | --textLink: yellow; 14 | --block: rgba(255, 255, 255, 0.63); 15 | --hr: hsla(0, 0%, 100%, 0.2); 16 | --link: #121116; 17 | --date: silver; 18 | --ttr: teal; 19 | --hovercolor: #50fa7b; 20 | --headingcol: #50fa7b; 21 | background-color: var(--bg); 22 | --callout: #42b983; 23 | transition: background 0.2s ease-out; 24 | --calbdcol: #50fa7b; 25 | --selection: crimson; 26 | --gh: dodgerblue; 27 | --gh-bx: black; 28 | --inlineCode-text: rgb(173, 219, 103); 29 | } 30 | .desc { 31 | font-family: "Fira Sans", sans-serif; 32 | font-size: large; 33 | margin-bottom: 2rem; 34 | display: flex; 35 | } 36 | .desc a { 37 | color: var(--textLink); 38 | text-decoration: none; 39 | } 40 | .desc strong { 41 | color: hotpink; 42 | } 43 | .content { 44 | font-family: "Fira Sans", sans-serif; 45 | font-size: large; 46 | max-width: 61.25rem; 47 | margin-left: auto; 48 | margin-right: auto; 49 | padding: 2.625rem 1.3125rem; 50 | } 51 | section a:hover { 52 | background-color: var(--hovercolor); 53 | color: var(--link); 54 | } 55 | 56 | blockquote { 57 | border-color: rebeccapurple; 58 | color: var(--textNormal); 59 | border-left: 0.32813rem solid rebeccapurple; 60 | margin-left: -1.75rem; 61 | padding-left: 1.42188rem; 62 | font-style: italic; 63 | } 64 | hr { 65 | border: 3px solid rebeccapurple; 66 | margin-bottom: calc(1.75rem - 1px); 67 | } 68 | .bio { 69 | font-family: "Fira Sans", sans-serif; 70 | font-size: medium; 71 | } 72 | img { 73 | display: block; 74 | margin: 0 auto; 75 | } 76 | h2, 77 | h3, 78 | h4, 79 | h5 { 80 | letter-spacing: -0.015em; 81 | font-family: "Open Sans", sans-serif; 82 | font-size: x-large; 83 | } 84 | .callout { 85 | color: #cdd6f4; 86 | background: #1e1e2e; 87 | padding: 1.5em 1.25em; 88 | border-radius: 25px; 89 | display: flex; 90 | flex-direction: row; 91 | margin-top: 20px; 92 | border-bottom-width: 4px; 93 | border-bottom-style: solid; 94 | border-bottom-color: #a6e3a1; 95 | border-left-color: #a6e3a1; 96 | border-left-width: 6px; 97 | border-left-style: solid; 98 | } 99 | .callout-inner { 100 | font-style: italic; 101 | margin-left: 1em; 102 | } 103 | .callout a { 104 | color: blue; 105 | } 106 | .callout a:hover { 107 | background: greenyellow; 108 | } 109 | 110 | @media (max-width: 767px) { 111 | .callout { 112 | padding: 1.5em 0.75em 1.5em 0.6em; 113 | } 114 | .callout-inner { 115 | margin-left: 0.5em; 116 | } 117 | } 118 | 119 | div .callout::before { 120 | color: red; 121 | content: attr(emoji); 122 | } 123 | .new-label { 124 | color: #50fa7b; 125 | text-decoration: none; 126 | padding: 2px 4px; 127 | border-radius: 4px; 128 | margin-left: 6px; 129 | background-color: dodgerblue; 130 | } 131 | .main { 132 | font-family: "Montserrat", sans-serif; 133 | font-weight: 900; 134 | } 135 | h1 { 136 | font-family: "Montserrat", sans-serif; 137 | font-size: 2.5rem; 138 | } 139 | .main h1 { 140 | font-size: 4rem; 141 | line-height: 4.375rem; 142 | margin-bottom: 2.625rem; 143 | margin-top: 0px; 144 | } 145 | .main a { 146 | box-shadow: none; 147 | text-decoration: none; 148 | color: tomato; 149 | } 150 | .main a:hover { 151 | color: tomato; 152 | } 153 | .head a:hover { 154 | color: red; 155 | background-color: var(--hovercolor); 156 | } 157 | 158 | article a { 159 | box-shadow: 0 1px 0 0 currentColor; 160 | color: var(--textLink); 161 | text-decoration: none; 162 | } 163 | footer a { 164 | color: plum; 165 | text-decoration: none; 166 | } 167 | .list-item a { 168 | box-shadow: 0 1px 0 0 currentColor; 169 | color: paleturquoise; 170 | text-decoration: none; 171 | } 172 | .list-item h3 a:hover { 173 | background-color: var(--bg); 174 | } 175 | .meta { 176 | color: #999; 177 | letter-spacing: -0.5px; 178 | } 179 | .single_header a { 180 | box-shadow: none; 181 | text-decoration: none; 182 | color: tomato; 183 | } 184 | .single_header a:hover { 185 | color: tomato; 186 | } 187 | .single_header h3 { 188 | font-family: Montserrat, sans-serif; 189 | line-height: 1.1; 190 | margin-top: unset; 191 | } 192 | figcaption { 193 | text-align: center; 194 | } 195 | -------------------------------------------------------------------------------- /content/blog/cooking.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Hacking with Knives and Spoons 3 | date: "2025-08-10" 4 | description: Finding new Hobbies 5 | tags: ["life", "personal"] 6 | --- 7 | 8 | I was deeply invested in building keyboards some time ago, and I think I got pretty good at it—soldering switches, diodes, and even tiny RGB lights onto a motherboard. I even went a step further and customized a PCB with my name, some fun little logos, and inside jokes. This was mostly in the 2022–23 era, when I was grappling with philosophical turmoil and questioning what I wanted to do with life and the _purpose_ that comes with it. Turns out, it’s not keyboards—at least, not yet. 9 | 10 | I’ve always felt that hobbies are things that spark curiosity and imagination. Questions like: _How do things work?_ _How does a keyboard work?_ _Can I build one myself?_ _Why are Telegram bots so fun to write?_ That kind of thinking has always pulled me in. 11 | 12 | The best part about hobbies is how they tether you to reality. We spend our days toiling away—chasing money or maybe _purpose_—and life can start to feel monotonous. But when you find something outside of work that excites you, it becomes part of your identity. Suddenly, life feels more bearable. Whether it’s writing code, understanding car engines, maintaining your bike, fixing motors, reading books, or even playing an instrument—hobbies are experiments. They let you tinker with ideas, try things that might not work, and follow your curiosity without consequences. And that’s a win. 13 | 14 | ### Back to the title. 15 | 16 | These days, I find cooking to be that thing for me. On the surface, cooking seems mundane—something you _have_ to do daily. It seems like it demands planning, ideas, and experience. But the more I got into it, the more I realized how fun it can be to mix and match ingredients and watch something come together over time. 17 | 18 | Honestly, I see cooking like integration in calculus. You start with _x_ and _y_ ingredients, combine them over a time interval, and voilà—something that makes you feel good (or not). I get the same satisfaction from a well-cooked meal as I used to when I fixed a bug or successfully soldered a keyboard. That spark of _"I made this work!"_ never gets old. 19 | 20 | Sure, you can always order food and avoid the hassle—but then you deal with decision fatigue: what to eat, how much to spend, and how often to repeat that cycle. Cooking, on the other hand, started as a simple way to save money and survive. But it quickly became a space for experimentation. I’ve learned to mess around with different flavors and curry powders, figure out when to add salt, when to toss in the chili, and how to mellow things out when I go overboard with the heat. 21 | 22 | Cooking also gave me a whole new appreciation for my mom. For over 23 years, I took it for granted how much she did every day just to put food on the table. Now that I cook for myself, I see how much planning and mental energy goes into feeding a household. Even something as basic as grocery shopping became a strangely enjoyable activity. I plan a week ahead now. Who knew? 23 | 24 | What’s most fascinating about cooking is the _why_ behind the ingredients and techniques. Special thanks to YouTube for breaking it down. I didn’t know what the Maillard reaction was, but now I know it’s what makes seared food taste amazing. I didn’t know baking powder is “double action”—one reaction when it’s wet, and another at around 140°C in the oven or air fryer. That kind of chemistry makes cooking addictive. 25 | 26 | In the past few months, cooking almost daily has taught me that eating the same food every day can actually give you the room to experiment. Changing up little elements each time makes even repetition interesting. And when I do switch it up—like baking brownies or cakes in the air fryer—it feels like unlocking a new level. I make a cake about once a week now. Bread is next. I can feel it coming. 27 | 28 | At this point, I can confidently say I can cook well enough to feed myself—and even friends—without resorting to takeout. One of my proudest wins recently was learning to butcher a whole chicken. That might not sound like much, but where I live, you can’t easily buy just chicken breast or specific cuts. And here’s a quick price comparison: 450g of chicken breast costs ₹250–300. A whole 2kg chicken costs about ₹250. Buying the whole bird is way more economical. Plus, I make stock from the leftover bones—so it’s tasty and cost-effective. In the end, it’s all about balancing convenience and curiosity. 29 | 30 | Cooking has become a new kind of hacking for me. Instead of soldering wires, I’m tempering spices. Instead of building keyboards, I’m building meals. It’s a different toolkit—but the same spirit of making something with your own hands and watching it come to life. 31 | 32 | Maybe that’s what hobbies are all about: making life a little more bearable, one experiment at a time! 33 | -------------------------------------------------------------------------------- /content/blog/2020.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The 2020! 3 | date: "2020-12-31" 4 | description: 2020 taught me ....... 5 | tags: ["life","personal","rewind"] 6 | aliases: [/2020] 7 | --- 8 | 2020 was hell of a year and I mean that not as an *idiom* but literally it was hellish. But I learned a lot in 2020. Let it be how to actually drive a car or do Yoga, it's all due to 2020. I've only been around the Sun for 20 times.As of Jan 1 2021, I'm only 20.5 years old. 9 | 10 | 2020 gave me a new view on life. Too much Kurzgesagt give you an existential crisis mind. I questioned about the point of life. What's actually the point of living on this big pile of silica? What difference does our life actually make? These were my thoughts for a few months but I later moved past that. There is no point in over-thinking this stuff. 11 | 12 | 2020 taught me how social interactions matter. Personally I see a lot of people everyday and speak with them, 2020 gave a stoppage to all that. I acquired(not proud of it) *Social Anxiety*. I feared to talk to people whom I don't know about especially on Virtual Meetings. I guess I overcame that. 13 | 14 | 2020 gave me a new perspective on Cinema. All the credits go to my brother for that. I watched old movies. Movies before my birth, It's just sad to watch movies of today compared to that. Other than a handful movies, all are cliched to a huge extent. 15 | 16 | 2020 showed me the value of people. It taught me about grief and loss. 2020 took a friend from me. The day before we were playing cards and Mini Militia in home balcony and the next day he wasn't there. I still remember his favorite dialog from KGF. 17 | 18 | 2020 taught me how to manage money. Money can't buy you happiness, it just increases the stress of being you. It increases the responsiblities you have on your family. 19 | 20 | 2020 taught how a competitive work environment actually works and the need for asking questions to stuff that you don't know. It showed me how incompetent I am and not very consistent at anything. May be I have [Dunning-Kruger]. 21 | 22 | 2020 gave me a lot of time and books to read. Sadly I didn't even complete a single book. 23 | 24 | 2020 gave me a new perspective on Malayalam music. It's pretty cool per se. 25 | 26 | 2020 gave me chances to work on many side projects. I still remember last Jan 1, I posted about [Shelby](https://github.com/athul/shelby) and it was my first project to reach 100+ stars on GitHub. My highest repo stars is 300+. 27 | 28 | 2020 made me learn more about automating stuff and RSS feeds. I've made a few telegram bots as my Feedreader for the day. I mainly use it for [Lobsters Front Page](https://lobste.rs) 29 | 30 | 2020 taught me to hack in Virtual hackathons. Discord was the saviour. 31 | 32 | 2020 taught me how to let go of my fears. Main fear is not achieving anything after college and being a zero in Life as a whole. 33 | 34 | 2020 made me realize how *fat* I was getting. Being tall and fat is bad combination. 35 | 36 | 2020 gave me my first Salary. It was from an Internship and not any side gig. 37 | 38 | 2020 was the year of the SPAMfam. It showed me what it means to be in a technical community. 39 | 40 | 2020(Feb) showed me new places. I [travelled](/iv) to another state and a beach with my classmates. 41 | 42 | 2020 taught me how to use LaTeX with KaTeX. 43 | 44 | 2020 taught me more about Python and Code. I discovered many new sides of Code and the importance of putting a space between and `=` symbol. I even got to work on a mainstream project by the HoppScotch team and worked on lots of side projects in the mean time. It taught me the importance of commenting code and how to refactor the code you wrote a few months ago. 45 | 46 | 2020 made it possible for me to meet some Amazing people in the Tech Community. It showed me how to handle an online event. 47 | 48 | 2020 gave me new tech to play with. I got a new Amazon Echo and a Mechanical Keyboard. I also managed to but a new Phone and Headphones. The me in 2018 never even dreamt of buying a new phone nor a wireless headphone before graduating college, I considered these stuff as luxury. I still do. I even got a ton of Tshirts, stickers and a Bag this year. Google gave a pair of Headphones which was so cool. Auth0 gave a lot of tshirts. GitHub gave a cup and a wholesome video. Twilio gave a cup and a tshirt. Dev.to gave a backpack. 49 | 50 | 2020 was the first time I have been gifted a Book and the first time I actually bought one. Thanks to Nadeem Ikka and deta.sh team for the books. 51 | 52 | 2020 was the year which I realized blogging actually makes 💸. 53 | 54 | 2020 taught me how to sell Wooden planks and getting a profit from them. The mechanical keyboard community came to the rescue. 55 | 56 | 2020 taught me how to use Vim in a better way. I switched my code editor from VsCode to Vim. Except for debugging. 57 | 58 | [Dunning-Kruger]:https://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect 59 | -------------------------------------------------------------------------------- /content/blog/hack.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Hacking the Quarantine 3 | date: "2020-06-06" 4 | description: Hacking the Quarantine with Online Hackathons with my Buddies 5 | tags: ["code", "tech"] 6 | --- 7 | 8 | If you are reading this, I hope you are safe and in good Health 9 | 10 | The quarantine is tough. While the time of writing this, I'm nearing 3 months of sitting at home and doing stuff excluding college. It was easy at first and now I'm all sloppy and don't think about college or studies now. I got to be a bit better at something these these and I'm proud of that. 11 | 12 | ## At the tip of the Iceberg 13 | 14 | I am an avid hackathon enthusiast, even though I have only won one hackathon yet I feel like hackathons are like my weekly/monthly family meetings. I get to see usual family members and meet new people and hang out with them for a day or two. The energy radiating through a hackathon is something you won't get anywhere else and personally I call this energy **"The Vibe"** 😁. 15 | Then the quarantine happened. I was locked out of the people I meet and locked out from travelling. This was frustrating at first but I managed to cope with this. 16 | 17 | As a technophile, I'm always infront of my computer. I enjoy being in front of it most of the times and it's fun. I got with an internship at a Startup to kickoff everything. And bt April I joined another one as an Intern which I eventually lost after a month 😁. 18 | 19 | Coming back to Hackathons, in the month of March itself, there was this hackathon by GitHub called the "GitHub Actions Hackathon" from March 1-30. I hacked a lot on GitHub actions to build Telegram bots and notifying Agents. This was an oppurtunity which was set for myself to showcase my GitHub Actions Hack and I made one for the Hackathon itself. I usually used **Go** to write a Telegram notifier but it was usually late to send me a notification, like 30 seconds slow. So I thought to rewrite the whole logic in Javascript which GitHub Actions run natively. After a whole day of new language features and new stuff, I rewrote the notifier to Javascript and submitted it to the Hackathon. I called it [Telewire](https://github.com/athul/telewire). It was fast this time(~2s respone time). That was my first ever "Online Hackathon". Frankly I couldn't relate it much to a hackathon since I was a one man team. Then the pandemic happened. 20 | 21 | ## Falling Down from the Iceberg 22 | 23 | > Headings has been fun, and I was in a conflict if I should run back from the tip or fall down to the ocean. I embraced the ocean. 24 | 25 | The month of April went by with work and shipping and updating a few projects😁. 26 | The one hackathon in April which I participated was the Twilio-Dev Hackathon to which I submitted a varied varsion of Telewire in Javascript which doesn't send notification to Telegram but to a Phone as SMS. Thus I used twilio product and made myself eligible for the Hackathon. Obviosuly I didn'twin anything but hey, I got a 50$ credit to their store, which I haven't used up till now. Then my frined Subin contacted me about a Hackathon by MLH which was online and since he was enclosed in the p2p world, he said we can build something. I said "Sure, lets learn something new" 27 | 28 | ## Near the brim of the Ocean 29 | 30 | On the first week of May, MLH started it's summer league which was to be a series of virtual events and we simply participated in them. That was a weekend full of fun. That was where [vett.space](https://vett.space) originated. I worked on the UI in Vue which I didn't have any idea on before the hackathon. We used discord for the first time and used it's voice features to keep us in the loop. That was my first ever Online Hackathon where I got **"The Vibe"**. 31 | vett.space went to be something we've never imagined much. It came to be a timepassing game and breakout game. 32 | Fast-forward to the last week of May where we joined forces for another hackathon by MLH. This was rookie-hacks and we built a platform for collecting raingauge data from Kerala. Me with Subin and Kiran made this. We eventually won a category prize and we were really happy for that. Discord's voice and video features are top class and we totally loved them. We even had our team breakout sessions with vett.space game with voice chatting which made it even more fun. 33 | 34 | ## Embracing the Ocean 35 | 36 | For me Hackathons are the best way for community bindings. Personally, my teammates and I are not from the same college. 4 of us are from 4 different colleges and from various parts of Kerala. The only thing that makes us come together are the love for Technology and learning new stuffs and obviously Hackathons. 37 | We always come up with new ideas which we feel are socially good and fun to hack on. Hackathons never disappointed me other than 1(My first hackathon, where I didn't knew anything) but it turned out to be an eye opener. Hackathons are the best place for you to be yourself and meet lot of passionate people just like you. 38 | 39 | I embrace the community and the Hackathon culture❤️. 40 | -------------------------------------------------------------------------------- /content/blog/custom-mdx.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Custom MDX Components for Gatsby 3 | date: "2020-04-26" 4 | description: Make custom MDX components for a Gatsby Website/Blog 5 | --- 6 | 7 | So this week I updated my **Blog in Gatsby** to use MDX rather than usual Markdown for writing content. The major reason I had done this was because I could use React components inside the contents itself to make it more interactive and user-friendly. 8 | 9 | > Life update: Started as an intern in a Bangalore Based Startup called Algoshelf 10 | 11 | As a noob in this React ecosystem, I found it hard to implement custom components to be used in MDX and the number of blog posts were less too, so I thought why not implement it and write a blog.... And here we are now :) 12 | 13 | 14 | ## MDX 15 | *"MDX is an authorable format that lets you seamlessly write JSX in your Markdown documents. You can import components, such as interactive charts or alerts, and embed them within your content. This makes writing long-form content with components a blast 🚀."* - [MDX Website](https://mdxjs.com/) 16 | 17 | In simpler terms, you can use React Components inside Markdown. 18 | 19 | ## Authoring Components 20 | Authoring custom components for mdx is quite easy. Easily said it's just a React Component and if you know react well then this will be easy as pie. 21 | 22 | Here we'll implement a custom callout like component with basic styling. This callout will have an emoji in the beginning and followed by text. So let's get to it 23 | 24 | ### The Component Itself 25 | This will be first thing that we'll define. Here is the code, and we'll be defining the code in the `src/components/callout.js` file. 26 | ```js 27 | import React from "react" 28 | 29 | const Callout = ({ emoji, children }) => { 30 | return ( 31 |
32 |
33 | {children} 34 |
35 |
36 | ) 37 | } 38 | 39 | export default Callout 40 | ``` 41 | Here we're making a new Callout function with 2 arguments. The Emoji argument is for the for the emoji for the callout and the children argument is the data that will be enclosed inside the component's tags while in use. We're appending the emoji tag to the div as an attribute for getting the data with CSS. 42 | 43 | Now we need to be able to use it in the blog/website. I'll show an example of a blog. 44 | 45 | In your `src/templates/blog-post.js` file add these in the top 46 | 47 | ```jsx 48 | import { MDXProvider } from "@mdx-js/react" 49 | import Callout from "../components/callout" 50 | const shortcodes = { 51 | Callout 52 | } 53 | ``` 54 | and for using the callout inside the markdown content, paste this 55 | ```jsx 56 | 57 | {post.body} 58 | 59 | ``` 60 | Now we'll be able to use it with our content. 61 | 62 | ### Styling the Component 63 | I've used CSS styling for the component since i'm comfortable with CSS. 64 | ```css 65 | .callout { 66 | color: black; 67 | background: azure; 68 | padding: 1.5em 1.25em; 69 | border-radius: 25px; 70 | display: flex; 71 | flex-direction: row; 72 | margin-top: 20px; 73 | border-bottom-width: 4px ; 74 | border-bottom-style: solid; 75 | border-bottom-color: #50fa7b; 76 | border-left-color: #50fa7b; 77 | border-left-width: 6px; 78 | border-left-style: solid; 79 | } 80 | .callout-inner { 81 | font-style: italic; 82 | margin-left: 1em; 83 | } 84 | 85 | @media (max-width: 767px) { 86 | .callout { 87 | padding: 1.5em 0.75em 1.5em 0.6em; 88 | } 89 | .callout-inner { 90 | margin-left: 0.5em; 91 | } 92 | } 93 | 94 | div .callout::before{ 95 | color:red; 96 | content: attr(emoji); 97 | } 98 | ``` 99 | You can use any other framework or library for styling and it's upto personal preference. 100 | 101 | ### Using the component 102 | Now we want out custom made callout component to be used with our content. For that just call the components inside our post like this 103 | ```md 104 | 105 | This data will be displayed in the callout component 106 | 107 | ``` 108 | 109 | This data will be displayed in the callout component 110 | 111 | 112 | So that was easy right? Creating a new component and using it here and all the stuff. 113 | 114 | Even better, you can use already other components too other than the custom made ones, 115 | For that just import the component and use it in the content like this. Here we're using components from Rebass, you can use any one you prefer. 116 | ```md 117 | import { Box } from 'rebass' 118 | 124 | > ”This is an important quote.” 125 | 126 | ``` 127 | 128 | ## Conclusion 129 | So we have just made a custom component for MDX and now we know how to use other components to be used in our content. So that's all ⚡️. -------------------------------------------------------------------------------- /content/blog/love-and-other/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Love and Other...... 3 | date: "2020-01-04" 4 | description: The Story about a dumb schoolboy traversing through his dumb mind and Coming back to reality 5 | --- 6 | A few months ago one of our professors came into class. He was having some trouble speaking since he had a sore throat. He said he wasn't gonna teach anything but he told everyone to write a paragraph on Love. So I concluded my paragraph like this, 7 | > Love is like `Rust`, its friggin fast. 8 | Love is like `Haskell`, It makes us functional. Love is like `Clojure`, we won't understand a damn shit on what's written(no offence Clojure people). 9 | 10 | ---- 11 | # Love and Other Dumb Stuff 12 | Since then I've been wanting to write this story. 13 | 14 | > The characters in this post has whatsoever no relation in the real world. If anything relates, that's just coincidental 15 | 16 | ## Chapter 1 - Love 17 | ### 2013-15 ish 18 | Okay, so our guy is in his 13th Year on Earth. He is obviously in his high school because in India, High School starts at 8th Standard or Grade. Like every other kid that time he had feelings for a Girl. She was one of the Studious types in his class. Coincidentally his house was very near to her house. Both of their parents knew each other. One reason he had feelings for her was she had a good personality and not her physical beauty. That times were the times when almost all guys had a love affair from someone in the class or another class. 19 | So in the Fall of 2013s, he professed his love to her. The way he professed was a comedy. So it goes like this. BTW as like every guy, he was good friends with her. So the tide of the class was mostly on discussing love affairs between the class. There was another studious girl in the class too. 20 | So one fine morning she came to him and asked. "*Tell me the truth, you love her right?*" 21 | She had her deductions obviously because he was also a nerd in the class and both the studious girl and he was in the same religion and all. 22 | He got tensed, he said in his breath "*No, It's you. It's always been you*". She was shellshocked. She couldn't reply to him anything. Telling this he also got tensed, his heartbeat went rising. He got out of class to breathe some fresh air in. His friends came to him and mocked at him for some time, later they asked him all sorts of questions regarding the affair. 23 | 24 | Since this proposal, he and she didn't speak. Both of em were still studious as if nothing was going on. Before the exams, one of her *Messenger* came to him and told him that she was not able to study because of him. He was dumbstruck, he thought *"Why on earth would she be having difficulty in studying if she didn't have any feelings for me"*. He was never on her tail asking for any reply or any of that matter for sorts. He couldn't understand that yet he told the messenger to tell her that doesn't think anything about that proposal of sorts but focus on her studies more. But as any guy who faced rejection even if it is one-way love or anything he goes into a state of depression of sorts. He started listening to Sad Rejection Music from Foreign Bands. He discovered Backstreet Boys and many other sad song bands. Yet he pulled himself together and marched on. 25 | 26 | Fast Forward to 2015. He was in his 10th grade. She was shifted to another division. He wasn't so into her now. Both of them barely minded each other and both of them hadn't spoken to each other. Reaching by the end of 10th grade, he got a letter from her saying that she Hated him, the whole 1 paragraph tells on how much she hated him. He read it and shredded it to pieces. He didn't give a shit about it in 2015. He thought on why she'd give something like that to him. He never knew, yet he wouldn't give a damn on that too...But after the 10th Final Exams, she broke his silence to him while walking to home from the bus-stop. Both of em had to walk home from the Bus-Stop. At last when they reached her home. He walks forward and he told her "I don't give a damn anymore for you. The next time we see, I'll call you for my wedding and that's all from me". Not the best of his replies but that he made sure that, that reply never hurt her. 27 | 28 | ### 2015-ish 29 | The great tragic proposal failure. Since he didn't give a damn about her anymore, he met this other girl. He fell in love with a girl. Again!!. This time he was in the 10th class. He and the new girl had been really good friends but it was so late that he had feelings for her. She had a personality that will make anyone love her. She was so good at conveying stuff and much more. He asked his friends if he should propose to her. One friend is her neighbour and friend said She'll fall for you. Like all things his friends said, he too later found out that it was not gonna happen. She was perfect, not even a single flaw in his eyes. Later when he proposed to her a damn straight NO was heard from her. He too now was devastated. Now the film song "Azhalinte Aazhangalil" became his most-listened track. 30 | 31 | He got past this Affair in Time. That's all 32 | 33 | ## Chapter 2 - Being Dumb 34 | That's self-explanatory. 35 | 36 | Chapter Closed 37 | 38 | ------ The End --------- 39 | -------------------------------------------------------------------------------- /content/blog/2019-1/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2019 in an Oyster's Shell-I 3 | date: "2020-01-12" 4 | description: Its rewind time everybody.... 5 | tags: ["life","rewind"] 6 | aliases: [/2019] 7 | --- 8 | > Okay, when you're reading this, I am 2020% sure that you wont be in 2019.😝 9 | 10 | 2019 ended as every year ends, FAST and obviously fucked. Mine was just same... There were a lot of good things that happened like making this blog and becoming old. 2019 wasn't that harsh on **me** like the years before that. 11 | 12 | I got to do a lot of stuff I wished to do. I learned lots of stuff. Explored much,travelled much... 13 | 14 | Let me try to recollect stuff in the order of Months 15 | 16 | ### January 17 | On December 31st,2018 at about 11pm, I received an email regarding the GitHub Campus Experts Program. It stated that my first review was over and I had to improve on stuff. Okay that is not a good one to start the year with but hey I thought that was for the good. 2018 has given me its last blow. 18 | 19 | 2019 in January was full of mixed feelings and wishes...I was still in my S1 then. Specifically I was writing my first sem exams, without knowing which was would I fail first. My new year resolution for 2019 was to improve my profile in GitHub. I started commiting for the first 15 days in one of my private repositories. I did that, by thinking GitHub could be my perfect "Dear Diary". 20 | 21 | ![](/jan.png) 22 | 23 | On Jan 14th I went to Kochi-Muziris Bienale. I'm not that much of an art fan but I went there for meeting Sir Richard Stallman, the then FSF Head. Since I was bored by art, I walked nearly 1km to go to the nearest beach and stayed there till noon and again walked 2km to mattanchery to get food. I also got to meet a lot of wonderful student developers in central kerala. I still keep contact with most of them. I met Devdutt Shenoi, Sreeram, Kiran, Subin, Abhijith, George and many others whom I have forgotten the names. 2019's first Biriyani happened on the same day which was with My dad who then worked in Mattanchery and it was at Kayees, t'was a **kidu** biriyani. 24 | 25 | Exams were now over and we were planning to host a Hackathon in college. We had a team set and all, and we planned. 26 | 27 | I went to Velaimkanni in Tamil Nadu that month and got an email at 4am in the morning that my 2nd review for the campus experts program was done and i still needed to be improved. And again college, January ended pretty good and 11% of 2019 was done. 28 | 29 | ### February 30 | February was the month which helped me cross off the first thing in my Year checklist, Becoming a Campus Expert. That happened by 24th of February. Thats the best thing I remember in February. I got a project to do for our department's library. I moved from Windows to Linux and met Sharad Joe,Namitha,Chrisbin, Sumithran and Akshaya at School of AI Kottayam's first meetup in Kottayam. I got my Hacktoberfest Swags that month. 31 | 32 | ### March 33 | In the first week of March, I had a video call from GitHub about the Campus Experts. She was the program manager and that was the first time I had a one-to-one conversation with a person not from India. I got to meet a lot of people from different parts of the world and India itself. I was so excited to join the program and thus I became the **Campus Expert from Kerala**. I got to be featured in Gopi Chettan's whatspp status and in TinkerHub's official Instagram and twitter handles. 34 | 35 | We named our Hackathon _*Meenachil/Meen Hacks*_ and Iwas in charge of Sponsorship and Website. I had donemuch work on that. 36 | 37 | ### April 38 | Our college's Techincal fest was that month but I couldn't enjoy much since I was suffering from severe Asthma. 39 | I got my swags from GitHub being a campus expert. This included a Hoodie, a Bag and a GitHub Campus Experts Flag. April was okay and it was the time we were meant to host our Hackathon but due to technical issues we had to postpone it. Our S1 results came that month. Those were tough times, and postponing the hackathon had left us low in confidence. The 2nd Sememster exams were also upon us. 40 | 41 | ### May 42 | I discoverd Termux which could be used to run code on Android. And since my PC was on strike I had to use Termux. I learned Vim and NeoVim and became big fans of it. Study Leaves and Exams. 43 | ### June 44 | June was full of exams and code. June was a good month. I wrote code on my Phone. I wrote [Wakatime Metrics with Json](https://github.com/athul/wakatime-metrics) in this time. 45 | Just the next day after my Physics University exam, I commited the initial one for this blog. I wrote the first two blogs on my Phone. People were telling that I was lying when I told them that I coded my blog on my phone 46 | ### July 47 | My birthmonth. I was home most of the time due to sem break. Nothing good came that month. 48 | ### August 49 | I went to my first ever hackathon and that was in Bangalore too. My teammate was Devdutt and that was my travels for the first time. 50 | It was also the month were gonna conduct MeenHacks but on the day before the Hackathon, we had to cancel the event due to imminent rains. I was totally depressed for 2 weeks after the event postponed...Again. Kerala again went to flood mode. I contributed to Kerala Rescue by opening an Issue and Submi tting a PR review. 51 | 52 | ----- 53 | Rest on Part 2 54 | -------------------------------------------------------------------------------- /content/blog/abraham.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: For Abraham, forever ago 3 | description: "Shine on you crazy Diamond" 4 | date: "2023-09-15" 5 | tags: ["personal"] 6 | --- 7 | 8 | I met Abraham on a random telegram group when I had joined college back in 2018. He was the person who started Nexus SJCET which is the FOSS Cell of SJCET. His username was `avron` back then. I met him IRL in my second year of college during an event at his college, I still remember first meeting him and saying it's nice to meet you finally IRL. That was the first thing that I recollect when thinking about him now. 9 | 10 | Meeting him the next time was at a Hackathon but we didn't talk much then because we didn't knew each other that much. That was end of second year I guess. I don't know truth be told when it was but it was during those times. 11 | 12 | As you say third time's the charm, I again met Abraham at another Hackathon in Munnar. Even though we didn't knew each other that much, I kinda felt like I've known the guy for so long and we talked about all kinds of things. We talked about Code, Vim vs Emacs where Abe was an ardent Emacs user and was telling me join the cult but I refused and I was telling him to join the Vim cult. I still remember talking on all kinda philosophies with Him, Anusree and Levi during our "hackathon sessions" there. The four of us vibed off really good and we even began a new group on TG with just 4 of us. We used to have hourly long calls during COVID which made our bond really strong. 13 | 14 | I invited Abraham and Levi to my home a few months later and we had a fun time together, I drove them to nearest spots for sightseeing and we made dinner using a grill. It was the first time I called him Avarachan, which stuck. Fun fact is that Avarachan was 4 syllabelles and Abraham was just 3 and I found it easier to call him Avarachan than Abraham. I used to talk to Avarachan almost everyday about something or the other. We used to talk about a lot of things. 15 | 16 | When he got into his first job at BigBinary he used to always talk about the gripes of using a Mac machine. It was against all his ideologies and philosophies but he had to still do it for the work. He used to talk to me about how Ruby on Rails is so cool, the Object Oriented nature of it and how it gave a new perspective of OOP. He also used to talk to me about the improvements he made to their form system where he 400x improved the upload processing capabilities. Even I though I didn't understand that much back then it was so cool to listen to him geek about it. 17 | 18 | We used to geek out on all kinds of tech things and even beyond that, he introduced me to Nirvana, and later I introduced him to Foo Fighters, Porcupine Tree etc... Our music tastes were almost similar too. 19 | 20 | Even when it was time for me to get a job, he helped me prepare for it. He was always there for me whenever I fuck up something at my work and I used to tell him all about my work and what fun things I did that week since our calls were moved to weekends. 21 | 22 | We all went on a Munnar trip on 2022 October, where we all enjoyed really well. He always wanted to move out from Kottayam and he did on January 2023. I went with him to select his new flat. I used to visit his place every weekend, which I drove 50KM one side to geek out. 23 | 24 | He went to Kosovo for DebConf 2022 and send us pictures of his outings in Kosovo and he was the one announced about DebConf 2023 happening in Kochi. He went through a breakup but I didn't know how to help him out there. I tried but my consoling skills are very poor. 25 | 26 | Avarachan passed away on 13th September 2023 in a kayaking accident during an outing of the DebConf 2023 event. He was my bestest friend, my bigger brother and my family. 27 | 28 | He was there whenever I needed help, He would be the first person whom I'll call whenever I needed guidance because Avarachan was years ahead on maturity. He always gave me feedback the right time I needed something like that. I always asked him about Life philosophies and all kinds of things. He always called me Kutta. He was Barney Stinson to my Ted Mosby, The Chandler to my Joey, always there, my bestest friend. 29 | 30 | He was our Diamond and he shone so vividly that it changed many peoples lives. I always look up to you bro, always. 31 | 32 | > "Shine on you Crazy Diamond..." 33 | 34 | --- 35 | 36 | I wrote the above a few days after his passing, from a really dark place. I had a lot of struggle within myself about accepting he's no more. Accepting that I won't be able to talk to him again, accepting that I won't be able to see him again, accepting that I won't be able to hear his voice again, accepting that I won't be able to see his smile again. 37 | 38 | I spend a lot of time fighting my gods, beliefs and everything I thought had some power over this to make things change, to make things better, to make everything go back to the way it was, with him on the other end of the phone or to talk to him for a few hours. I really wish I got a few more seconds to hear his voice for one last time and say Thank You and Goodbye. All of a sudden, Pink Floyd's lyrics hit me. It hit me hard. The album "Wish you were here" tore me apart. Every lyric, every song was greiving. 39 | 40 | But this feels like a cruel joke played on to all of us. Death, without any warning is hard to bear and hard to get over. Even harder to live with the reality that yesterday you had dinner with the guy and the next day you're calling up his friends to say he's no more. 41 | 42 | Whenever I think of him, I recall the time when I was struggling with something and he told me to listen to "Breathe" by Pink Floyd. 43 | 44 | > "Breathe, Breathe in the air, 45 | > Don't be afraid to care" 46 | -------------------------------------------------------------------------------- /content/blog/probot/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Making GitHub apps with Probot 3 | date: "2019-07-04" 4 | description: Making GitHub apps easier with Probot and Node.js 5 | --- 6 | ### GitHub Apps with Probot 7 | Ever see in any issues or Pull Request in GitHub where a bot comments on the PR/Issue or adds labels to the PR/Issue? If you have, they are generally termed as GitHub apps and can be made relatively easily. 8 | Most of these apps are written in JavaScript (Node.js) using **Probot**, a framework for building apps for GitHub. Probot is written in Typescript, a superset of JavaScript. You can find more about on their [website](https://probot.github.io). 9 | 10 | --------- 11 | 12 | Here we'll make a **Simple Issue and Pull Request commenter** bot which is made and deployed on Glitch. 13 | 14 | ###### Prerequisites 15 | - GitHub account 16 | - An account on Glitch using GitHub 17 | - Basic JavaScript knowledge like variables and strings and functions 18 | #### Making our App on Glitch 19 | Glitch is a free online code-editing platform. It sets up our environment with all the necessary packages and stuff. All you need to do is click this button👇 and you'll get a full working environment for your "Remixing". 20 | 21 | 22 | remix this 25 | 26 | 27 | What Probot does is that it abstracts the authentication system that all GitHub Apps have to follow - letting you focus on writing API requests without worrying about API tokens or permissions. 28 | Probot ships with an example of setting up an issue commentor bot in `index.js`. 29 | We'll edit the `index.js` to the following 30 | 31 | ```js 32 | //index.js 33 | module.exports = app => { 34 | // Your code here 35 | app.log('Yay, the app was loaded!') 36 | app.on('issues.opened', async context =>({ 37 | const issue=context.payload.issue //getting issue details 38 | const user=issue.login.user //Getting the username 39 | const message=`Thanks @${user} for opening this issue!:tada: 40 | You are awesome..` 41 | const params = context.issue({ message }) 42 | return context.github.issues.createComment(params) 43 | ) 44 | }) 45 | } 46 | ``` 47 | The above code is for a bot which comments on new issues. It mentions the user too. The *"Robotic"* characteristics start from the 4th line starting with `app.on` function the first argument passed is the action which the bot listens to. These are **webhook** events of GitHub - you can learn more about them from the [Webhook Documentation](https://developer.github.com/webhooks/). 48 | Probot uses Node's `async/await` API for returning the data. We used the *`* character to enclose the string/comment body because we won't need to use escape characters and we can also interpolate [Template Literals](https://flaviocopes.com/javascript-template-literals/). 49 | 50 | Now we need to check if our app is working or not, we can do this **clicking** on a "sunglasses" button on Glitch which should look like this
![Glitch Show](glitch_show.png) 51 | 52 | Then You'll see a Page like this ![Page](wp.jpg) 53 | Click the **Register GitHub App** button and provide a name and install it in a repository. 54 | > Tip: Create a new private repository because we'll be making a lot of noise for the testing 55 | 56 | Now, if you check the `.env` file you'll see the variable values auto-filled with the necessary data. Glitch automatically deploys our app and our app will be listening to the webhooks to be received. 57 | 58 | > Test the app by making a new issue in a test repo on GitHub. 59 | 60 | It works right? 61 | Congratulations 🎉🎉 You just made yourself a GitHub App👌👌 62 | ##### Redelivering Webhook⤴️ 63 | We can view all the webhooks of any event triggered by the Repository and we can redeliver them by going to **Settings->Developer Settings->GitHub Apps->"Your app name"->Advanced Tab** in your profile. 64 | #### Commenting on PRs 65 | We need to add an extra permission for our App to comment on PRs, we can provide that by going to `Settings->Develope Settings-> -> Permissions and Events -> Pull Requests` Provide the read and Write Access. 66 | Now we need to edit the `index.js` to add Support for Pull Request before the last `}` 67 | ```js 68 | //index.js 69 | app.on('pull_request.opened', async context =>{ 70 | const pr = context.payload.pull_request 71 | const user = pr.user.login //Collecting Details of the person who created the PR 72 | const msg=context.issue({body:`Hey @${user} :wave: Thanks for the PR !!! You are Awesome.`}) 73 | return context.github.issues.createComment(msg) 74 | }) 75 | ``` 76 | Here we add a new _"robotic"_ characteristic by passing a webhook action called *pull_request.opened*. Now our app listens for PR webhook and once received it emits the `context.issue({body})` to GitHub. You can see that we are still passing the body to the *createComment* function. This is because PRs are considered as another type of Issues in GitHub. 77 | For testing if this works, make a new PR and check if the bot comments on that yes. 78 | 79 | ------- 80 | Congratulations on making a GitHub app. Since it is on Glitch we can install this in any repository and it will work any time too. 81 | > You can customise the comments with Images and Gifs but keep in mind that the comments render markdown. 82 | > You can always import these files to a GitHub repository through Glitch. 83 | Now go forth, explore and make some exciting GitHub apps,❤️❤️ 84 | ##### Thanks to 85 | - [Jason Etcovich](https://github.com/JasonEtco), for Proofreading this ❤️ 86 | - [Musthaq Ahamad](https://github.com/haxzie), for teaching me how to make GitHub Apps 87 | -------------------------------------------------------------------------------- /content/blog/jiofi.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Jiofi-CLI 3 | date: "2020-08-01" 4 | description: Introducing Jiofi-CLI. A CLI interface for getting your Jiofi Device Info. 5 | --- 6 | JioFi ia a portable wifi hotspot for personal use by Jio. They have somewhat generous plans and are a major telecom provider in India. Jiofi has a web dashboard to display the current details regarding the data usage, battery status and number of devices connected to the network. But I am too lazy to go to the dashboard to check the data out. So I built a small Python CLI to monitor the jiofi device from the network. I call it Jiofi-CLI. You can find the source code on GitHub at [Jiofi-CLI](https://github.com/athul/jiofi-cli). It's easy to install and you can install it with `pip`. The Python Package Manager. 7 | 8 | ## The Build Breakdown 9 | 10 | Before digging in deep, I saw a [repo on GitHub](https://github.com/anandubajith/jiofi-status) regarding jiofi that scrapes data from the dashboard of a Jiofi and this seemed a legit solution for getting the info. So Initial solution which came into mind for getting the data was **Web Scraping**!! 😈. So went on to scrape the dashboard without any prior knowledge in web scraping. I read a few articles on using Beautiful Soup with Requests for fetching the data and parsing the HTML. I went forward with it for a bit and I found out that the data part won't be shown in the scraped output. I was *sad*😓. I don't have any idea on moving forward without the data. Then the geek inside me woke up. "If the data can't be scraped, then the data has to come from somewhere". A sudden `Ctrl+Shift+i` took me to the chrome developer console. 11 | 12 | I spend half an hour tryin to figure out where the data is coming from. Trying the Networks tab finally yeilded some luck. I saw a pattern in the *waterfall* tab in the Network section. About 300+ requests are send in the span of 10 mins. Okay that seems interesting. I checked all the XHR requests and found the motherlode. A series of POST requests were being sent to the JioFi's internal API server. That was a `xxx-form-url-encoded` requests to the endpoint. *_An internal API⚡️⚡️_*. I checked the request headers and saw that a specific keyword was used to fetch the data. These were for LTEStatus, DeviceStatus, WANStatus and so on. I tried to get the data from Insomnia which is a REST Client since Postwoman had shown me a few errors and I was too lazy to fix the errors with Postwoman for that time. Those errors were due to local endpointsand not anything serious. 13 | 14 | It worked on Insomnia, I received the data that was to be used for the web dashboard or in simple terms, I mocked the web dashboard of JioFi with Insomnia. Win 🙌 Win. The response was like any other API response, in JSON. Here is the sample response. 15 | 16 | ```json 17 | { 18 | "Page": "GetLTEStatus", 19 | "Mask": "", 20 | "connected_status": "Attached", 21 | "connection_time": "00:00:57:19", 22 | "signal_strength": "Normal", 23 | "operating_mode": "TDD", 24 | "operating_band": "Band 40", 25 | "bandwidth": "20 MHz", 26 | "earfcn": "38750", 27 | "active_cell_id": "123", 28 | "plmn": "405 862", 29 | "apn_in_use": "jionet", 30 | "gcellid_pcellid": "12345", 31 | "eCellid": "12345", 32 | "ecgi": "1234567", 33 | "rsrp": "-106", 34 | "rsrq": "-13", 35 | "rssi": "74", 36 | "sinr": "9.8", 37 | "cinr": "not support", 38 | "tx_rate_total_data_transferred": "11.91 Kbps / 918.67 Kbyte", 39 | "rx_rate_total_data_received": "359.30 Kbps / 18.31 Mbyte", 40 | "ul_operator_limit": "50000000", 41 | "dl_operator_limit": "100000000" 42 | } 43 | ``` 44 | 45 | This JSON response once hooked up with Python will give the precise data. I used Python's requests library to fetch the json from the URL. I divided all the Pages(Page of the specific Keyword, like `"Page": "GetLTEStatus"`) to their respective functions to print the specific data to Stdout. Nothing fancy, just the `print` function of Python. 46 | 47 | Once I made out these functions, I need to implement a CLI interface to be the icing on the cake. Initially went on with Argparse since it's builtin and has a lot of cool features. Argparse then felt a bit daunting, so I tried it with Click. Click also showed some errors due to some function's optional arguments, I dropped it. So a=searching for another one, I found out about [fire](https://github.com/google/python-fire). It had a really easy API and it just helped me finish the job quite quickly. I was completed with a CLI and ready for packaging. My friend GKR helped me on packaging the CLI and it was on pypi after a few hours(*I was lazy to finish it duh...*) and that was my first python package on Pypi. You can find it [here](https://pypi.org/project/jiofi/). 48 | 49 | This is the output of Jiofi command when installed on your system 50 | 51 | ```bash 52 | $ jiofi 53 | NAME 54 | jiofi 55 | 56 | SYNOPSIS 57 | jiofi COMMAND 58 | 59 | COMMANDS 60 | COMMAND is one of the following: 61 | 62 | devices 63 | Prints a tabular view of all the connected devices in the network 64 | 65 | speed 66 | Prints the Current upload and download speed 67 | 68 | basic 69 | Get basic Details like Battery charge and state, no of connected devices and data used in