## 1. Project Overview & Quickstart (serialization/serialization)

# serialization

Open-source repository serialization/serialization

### Repository Details
- **Repository:** [serialization/serialization](https://github.com/serialization/serialization)
- **Primary Language:** Code

*Note: High-volume repository documentation is actively indexed and synchronized by YakaAI.*

## 2. Official Technical Reference & Guides (serialization/serialization.github.io)

## File: README.md

# saikiransripada.github.io [](https://travis-ci.org/saikiransripada/saikiransripada.github.io)

[saikiransripada.com](https://www.saikiransripada.com) - My personal blog

---

## File: 404.md

---
title: 404
layout: pagenotfound
invisible: true
---

I suggest you come back to [home](/)

---

## File: _config.yml

# General settings
title: Sai Kiran Sripada
title_html: "**Sai Kiran** Sripada"
pitch:
baseurl: "" # the subpath of your site, e.g. /blog
url: "https://www.saikiransripada.com" # the base hostname & protocol for your site, e.g. http://example.com

nb_posts_page: 3
dateformat: "%b %-d, %Y"
lastfm: true

cta:
  like: "Do you enjoy the blog?"
  post: "Did you like that post?"
  rss: ["You can suscribe to the", "RSS feed", ""]
  twitter: ["or follow", "on Twitter"]

archive: "Welcome to the archives of this blog. Below, you will find all published posts listed in reverse chronological order."
notfound: "I guess this page has moved somewhere else..."

# Author
author: Sai Kiran Sripada
email: hello@saikiransripada.com
twitter_username: neatcoder
github_username: saikiransripada
keybase_username:
linkedin_username: saikiransripada
hackerrank_username: 
leetcode_username: saikiransripada
steam_username:
author_website:
avatar: https://avatars.githubusercontent.com/u/8281503

paginate: 3
paginate_path: /page/:num/

text:
  pagination:
    newer: 'Newer'
    older: 'Older'

# Favicon
favicon:
  safari: 5bbad5
  theme: 3f3f3f

# Build settings
markdown: kramdown
redcarpet:
  extensions: ["tables", "fenced_code_blocks", "autolink", "footnotes"]
permalink: pretty
sass:
  style: compressed
plugins:
  - jekyll-paginate
  - jekyll-feed
  - jekyll-assets
  - jekyll-last-modified-at
exclude:
  - jekyll_build.sh
  - Gemfile
  - Gemfile.lock
  - vendor

---

## File: about.md

---
layout: page
title: About
permalink: /about/
invisible: true
---


{% assign age = 'now' | date: '%Y' | minus: 1990 %}
{% assign current_month = 'now' | date: '%m' | to_integer %}
{% if current_month < 4 %}
    {% assign age = 'now' | date: '%Y' | minus: 1991 %}
{% endif %}

I am a software engineer based in Hyderabad, India. Over the past 11+ years, I have been coding primarily in Python, Ruby, Node.js, PHP, React, and Vue, with a strong interest in data structures and algorithms as well as back-end development.

I enjoy writing code, [listening to music](https://www.last.fm/user/thephpguy){:target="_blank"} and [playing games](https://steamcommunity.com/id/saikiransripada){:target="_blank"} on the computer.

I blog to document my ideas and research for future reference. This blog serves as a timeline of my life.

If you'd like to get in touch, please send an email to [hello@saikiransripada.com](mailto:hello@saikiransripada.com). For secure communication, my PGP key is available on [Keybase](https://keybase.io/saikiransripada){:target="_blank"}.

All views are my own.

---

## File: index.md

---
layout: about
title: Sai Kiran Sripada
seo:
    title: Sai Kiran Sripada
invisible: true
---

{% assign age = 'now' | date: '%Y' | minus: 1990 %}
{% assign current_month = 'now' | date: '%m' | to_integer %}
{% if current_month < 4 %}
    {% assign age = 'now' | date: '%Y' | minus: 1991 %}
{% endif %}

I am a software engineer based in Hyderabad, India. Over the past **{{ 'now' | date: '%Y' | minus: 2012 }}+ years**, I have been coding primarily in *Python*, *Ruby*, *Node.js*, *PHP*, *React* and *Vue*, with a strong interest in data structures and algorithms as well as back-end development.

I enjoy writing code, [listening to music](https://www.last.fm/user/thephpguy){:target="_blank"}, and [playing computer games](https://steamcommunity.com/id/saikiransripada){:target="_blank"}.

I blog to document my ideas and research for future reference. This blog serves as a timeline of my life.

If you'd like to get in touch, please send an email to [hello@saikiransripada.com](mailto:hello@saikiransripada.com). For secure communication, my PGP key is available on [Keybase](https://keybase.io/saikiransripada){:target="_blank"}.

All views are my own.

---

## File: LICENSE.txt

The MIT License (MIT)

Copyright (c) 2016 batlab

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

---

## File: projects.md

---
layout: page
title: Projects
permalink: /projects/
---


Here's what I do with my free time!

1. [Get a notification when the movie tickets are available on BookMyShow]({{ site.url }}/get-a-notification-when-the-movie-tickets-are-available-on-bookmyshow/)
2. [Download photos, videos, and sidecars from Instagram]({{ site.url }}/download-photos-and-videos-from-instagram/)
3. [Find similar Instagram hashtags of a keyword]({{ site.url }}/find-similar-instagram-hashtags-of-a-keyword/)

---

## File: robots.txt

Sitemap: https://www.saikiransripada.com/sitemap.xml
User-agent: *

---

## File: .travis.yml

language: ruby
cache: bundler
branches:
  only:
  - dev
script:
  - JEKYLL_ENV=production bundle exec jekyll build --destination _site
  - cp CNAME ./_site/CNAME
deploy:
  provider: pages
  local-dir: ./_site
  target-branch: master
  email: deploy@travis-ci.org
  name: Deployment Bot
  skip-cleanup: true
  github-token: $GITHUB_TOKEN
  keep-history: true
  on:
    branch: dev

---

## File: _posts/2015-11-20-include-css-or-javascript-in-moodle.md

---
layout: post
title: Include CSS or JavaScript in Moodle
summary: When writing a custom plugin, place CSS in a file called styles.css in the base directory of your plugin /plugin/styles.css. Moodle will automatically load the CSS file for you.
thumbnail: images/omid-armin-cF6gNl0EE-E-unsplash.jpg
permalink: /include-css-or-javascript-in-moodle/
date: 2015-11-20 18:01:27 +0100
categories: moodle php
hide_summary: true
---

When writing a custom plugin, place CSS in a file called styles.css in the base directory of your plugin /plugin/styles.css. Moodle will automatically load the CSS file for you.

To include a CSS file in Moodle:

{% highlight php %}
<?php $PAGE->requires->css(new moodle_url('/path/to/file.css')); ?>
{% endhighlight %}

To include a JavaScript file in Moodle:

{% highlight php %}
<?php $PAGE->requires->js(new moodle_url('/path/to/file.js')); ?>
{% endhighlight %}

Provide the relative path to the file (excluding document root).

When writing a custom plugin, place CSS in a file called `styles.css` in the base directory of your plugin `/plugin/styles.css`. Moodle will automatically load the CSS file for you.

---

## File: _posts/2015-11-24-get-the-file-extension-in-php.md

---
layout: post
title: Get the file extension in PHP
summary: A simple function to get the extension of a file. Meet pathinfo().
permalink: /get-the-file-extension-in-php/
date: 2015-11-24 18:01:27 +0100
categories: php
hide_summary: true
---

A simple function to get the extension of a file. Meet [pathinfo()](https://php.net/pathinfo){:target="_blank"}.

{% highlight php %}
<?php $extension = pathinfo($filename, PATHINFO_EXTENSION); ?>
{% endhighlight %}

---

## File: _posts/2016-01-20-always-backup-your-database.md

---
layout: post
title: Always backup your database
summary: Always backup your database before playing with it! Better safe than sorry!
permalink: /always-backup-your-database/
date: 2015-11-24 18:01:27 +0100
categories: protip
hide_summary: true
---

> Always backup your database before playing with it! Better safe than sorry!

---

## File: _posts/2016-02-19-font-from-origin-has-been-blocked-from-loading.md

---
layout: post
title: Font from origin has been blocked from loading by Cross-Origin Resource Sharing policy
summary: Custom web fonts via CDN requires CORS (Cross-Origin Resource Sharing) configuration to display fonts properly.
thumbnail: images/chris-yang-Ii0SqNV7e8I-unsplash.jpg
permalink: /font-from-origin-has-been-blocked-from-loading/
date: 2016-02-19 18:01:27 +0100
categories: apache
hide_summary: true
---

Custom web fonts via CDN requires CORS (Cross-Origin Resource Sharing) configuration to display fonts properly.

Add the below rule to your .htaccess

{% highlight apache %}
# Allow access from all domains for webfonts.

  <FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css|css)$">
    Header add Access-Control-Allow-Origin "*"
  </FilesMatch>

{% endhighlight %}

Using a wildcard is potentially insecure as it opens the domain to JavaScript access from any domain. Instead, you can allow your domain or subdomain.

{% highlight apache %}
Header add Access-Control-Allow-Origin "your-domain.com"
{% endhighlight %}

When `add` is used, the response header will be added to the existing set of headers; Whereas with `set` the response header will be set, replacing any header with this name.

---

## File: _posts/2018-11-18-get-a-notification-when-the-movie-tickets-are-available-on-bookmyshow.md

---
layout: post
title: Get a notification when the movie tickets are available on BookMyShow
summary: This python script checks if movie tickets are available for a showtime and send an email notification. I’ve written this in Python 3 using BeautifulSoup.
thumbnail: images/david-holifield-LIj0__XAnu0-unsplash.jpg
permalink: /get-a-notification-when-the-movie-tickets-are-available-on-bookmyshow/
categories: python scraping
date: 2018-11-18 18:01:27 +0100
hide_summary: true
---

This python script checks if movie tickets are available for a showtime and send an email notification. I have written this in [Python 3](https://www.python.org/){:target="_blank"} using [BeautifulSoup](https://www.crummy.com/software/BeautifulSoup/){:target="_blank"}.

Run the script using `python3 app.py`.

Please feel free to fork and file issues or create pull requests.
[https://github.com/saikiransripada/bookmyshow](https://github.com/saikiransripada/bookmyshow){:target="_blank"}

---

## File: _posts/2019-06-29-prevent-cname-file-in-jekyll-from-being-deleted-during-the-build-process.md

---
layout: post
title: Prevent CNAME file in Jekyll from being deleted during the build process
summary: In Jekyll, the "_site" folder gets deleted and rebuilt after every change or build execution.
thumbnail: images/jason-leung-TAltMGNXlos-unsplash.jpg
permalink: /prevent-cname-file-in-jekyll-from-being-deleted-during-the-build-process/
categories: jekyll ruby
date: 2019-06-29 18:01:27 +0100
---

If you have a custom domain, you may have to copy the CNAME file after every Jekyll build.

You can use the `keep_files` option in `_config.yml` to prevent the CNAME file in the `_site` directory from being deleted during the build process.

{% highlight yaml %}
keep_files: ['CNAME']
{% endhighlight %}

If you are using Travis CI, you can copy the CNAME file to the `_site` directory after the build process. Here's a sample `.travis.yml` configuration that you can use:
{% highlight yaml %}
language: ruby
cache: bundler
branches:
  only:
  - dev
script:
  - JEKYLL_ENV=production bundle exec jekyll build --destination _site
  - cp CNAME ./_site/CNAME
deploy:
  provider: pages
  local-dir: ./_site
  target-branch: master
  email: deploy@travis-ci.org
  name: Deployment Bot
  skip-cleanup: true
  github-token: $GITHUB_TOKEN
  keep-history: true
  on:
    branch: dev
{% endhighlight %}

---

## File: _posts/2019-08-04-download-photos-and-videos-from-instagram.md

---
layout: post
title: Download photos, videos, and sidecars from Instagram
summary: A simple command-line script to download photos, videos, and sidecars (album) of an Instagram profile.
thumbnail: images/patrick-schneider-8bPJ0vagphw-unsplash.jpg
permalink: /download-photos-and-videos-from-instagram/
categories: python instagram
date: 2019-08-04 18:01:27 +0100
---

[Instagram Media Downloader](https://github.com/saikiransripada/instagram-media-downloader){:target="_blank"} is a command-line script to download photos, videos and sidecars (album) of an Instagram profile. No configuration or password required. This script works with public profiles only.

### Requirements
- Python 3.x

### Usage
1. Clone the [Instagram Media Downloader](https://github.com/saikiransripada/instagram-media-downloader){:target="_blank"} repo to your computer.
2. Install the required packages using `pip3 install -r requirements.txt`
3. Run the script using the command `python3 instagram.py -u  -p `

The path parameter is optional. Specify the path if you want to save the media in a specific location. If omitted, it downloads the media to the current working directory.

Please feel free to fork and file issues or create pull requests.
[https://github.com/saikiransripada/instagram-media-downloader](https://github.com/saikiransripada/instagram-media-downloader){:target="_blank"}

---

## File: _posts/2019-08-05-find-similar-instagram-hashtags-of-a-keyword.md

---
layout: post
title: Find similar Instagram hashtags of a keyword
summary: A simple command-line script that lists similar hashtags based on a user keyword.
thumbnail: images/riyan-wicaksono-LuZc578rdAc-unsplash.jpg
permalink: /find-similar-instagram-hashtags-of-a-keyword/
categories: python instagram
date: 2019-08-05 18:01:27 +0100
---

[Instagram Similar Hashtags](https://github.com/saikiransripada/instagram-similar-hashtags){:target="_blank"} is a command-line script that lists similar hashtags based on the user keyword. No configuration or password required.

### Requirements
- Python 3.x

### Usage
1. Clone the [Instagram Similar Hashtags](https://github.com/saikiransripada/instagram-similar-hashtags){:target="_blank"} repository to your computer.
2. Run the script using the command `python3 hashtags.py`
3. Enter the hashtag.

Please feel free to fork and file issues or create pull requests.
[https://github.com/saikiransripada/instagram-similar-hashtags](https://github.com/saikiransripada/instagram-similar-hashtags){:target="_blank"}

---

## File: .circleci/config.yml

version: 2.1

executors:
  ruby-executor:
    docker:
      - image: circleci/ruby:2.7
        environment:
          BUNDLE_VERSION: 1.17.3

jobs:
  build:
    executor: ruby-executor
    working_directory: ~/repo
    steps:
      - checkout
      - restore_cache:
          key: bundler-cache-{{ checksum "Gemfile.lock" }}
      - run:
          name: Install Bundler 1.17.3
          command: gem install bundler -v 1.17.3
      - run:
          name: Initialize Git Repository
          command: git init
      - run:
          name: Install Dependencies
          command: bundle install --path vendor/bundle
      - run:
          name: Build Jekyll Site
          command: JEKYLL_ENV=production bundle exec jekyll build --destination _site
      - run:
          name: Copy CNAME
          command: cp CNAME ./_site/CNAME
      - persist_to_workspace:
          root: ~/repo
          paths:
            - _site

  deploy:
    docker:
      - image: circleci/ruby:2.7
    working_directory: ~/repo
    steps:
      - attach_workspace:
          at: ~/repo
      - run:
          name: Configure Git
          command: |
            git config --global user.email "deploy@circleci.org"
            git config --global user.name "Deployment Bot"
      - run:
          name: Commit and Push changes
          command: |
            cd ./_site
            git init
            git remote add origin https://github.com/saikiransripada/saikiransripada.github.io.git
            git add .
            git commit -m "Deployed via CircleCI"
            git push -f https://${GITHUB_TOKEN}@github.com/saikiransripada/saikiransripada.github.io.git master

workflows:
  version: 2
  build-and-deploy:
    jobs:
      - build
      - deploy:
          requires:
            - build
          filters:
            branches:
              only: dev