| @@ -1,21 +0,0 @@ | |||
| module.exports = { | |||
| root: true, | |||
| env: { | |||
| browser: true, | |||
| node: true | |||
| }, | |||
| parserOptions: { | |||
| parser: 'babel-eslint' | |||
| }, | |||
| extends: [ | |||
| // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention | |||
| // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. | |||
| 'plugin:vue/essential' | |||
| ], | |||
| // required to lint *.vue files | |||
| plugins: [ | |||
| 'vue' | |||
| ], | |||
| // add your custom rules here | |||
| rules: {} | |||
| } | |||
| @@ -1,23 +1,12 @@ | |||
| .DS_Store | |||
| node_modules | |||
| /dist | |||
| # local env files | |||
| .env.local | |||
| .env.*.local | |||
| # Log files | |||
| npm-debug.log* | |||
| yarn-debug.log* | |||
| yarn-error.log* | |||
| # Editor directories and files | |||
| .idea | |||
| .vscode | |||
| *.suo | |||
| *.ntvs* | |||
| *.njsproj | |||
| *.sln | |||
| *.sw* | |||
| .nuxt | |||
| # Hugo default output directory | |||
| /public | |||
| ## OS Files | |||
| # Windows | |||
| Thumbs.db | |||
| ehthumbs.db | |||
| Desktop.ini | |||
| $RECYCLE.BIN/ | |||
| # OSX | |||
| .DS_Store | |||
| @@ -1,9 +0,0 @@ | |||
| { | |||
| "bracketSpacing": true, | |||
| "printWidth": 100, | |||
| "semi": false, | |||
| "singleQuote": true, | |||
| "tabWidth": 2, | |||
| "trailingComma": "none", | |||
| "useTabs": false | |||
| } | |||
| @@ -1,21 +0,0 @@ | |||
| MIT License | |||
| Copyright (c) 2017 Rohan Verma | |||
| 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. | |||
| @@ -1,22 +0,0 @@ | |||
| # rohanverma.net | |||
| > Personal Website of Rohan Verma | |||
| ## Build Setup | |||
| ``` bash | |||
| # install dependencies | |||
| $ npm install # Or yarn install | |||
| # serve with hot reload at localhost:3000 | |||
| $ npm run dev | |||
| # build for production and launch server | |||
| $ npm run build | |||
| $ npm start | |||
| # generate static project | |||
| $ npm run generate | |||
| ``` | |||
| For detailed explanation on how things work, checkout the [Nuxt.js docs](https://github.com/nuxt/nuxt.js). | |||
| @@ -0,0 +1,6 @@ | |||
| +++ | |||
| title = "{{ replace .TranslationBaseName "-" " " | title }}" | |||
| date = {{ .Date }} | |||
| description = "This text is displayed in search result listings." | |||
| draft = true | |||
| +++ | |||
| @@ -0,0 +1,86 @@ | |||
| +++ | |||
| title = "{{ replace .TranslationBaseName "-" " " | title }}" | |||
| date = {{ .Date }} | |||
| description = "This text was generated using the After Dark post archetype." | |||
| draft = true | |||
| toc = false | |||
| categories = ["hacking"] | |||
| tags = ["after", "dark"] | |||
| images = [ | |||
| "https://source.unsplash.com/collection/983219/1600x900" | |||
| ] # overrides site-wide open graph image | |||
| +++ | |||
| Before continuing please create a post archetype. Archetypes are located within markdown files in the `archetypes` directory of your site: | |||
| ``` | |||
| flying-toasters | |||
| ├── archetypes | |||
| │ ├── default.md | |||
| │ └── post.md | |||
| ├── content | |||
| ``` | |||
| If `post.md` does not exist yet, copy it from the After Dark default: | |||
| ```sh | |||
| $ cd flying-toasters | |||
| $ cp themes/after-dark/archetypes/post.md archetypes/ | |||
| ``` | |||
| Make some changes to `post.md` then use `hugo new` to draft a new post: | |||
| ```sh | |||
| $ vi archetypes/post.md # or vim, emacs, nano ... | |||
| $ hugo new post/totally-twisted.md | |||
| ``` | |||
| If `hugo server` is running with the `--navigateToChanged` flag your new post will appear automatically in JavaScript-enabled browsers. If you see an empty page you probably need to restart `hugo server` with the `--buildDrafts` flag. | |||
| Use archetypes to maintain consistency when creating content for [Custom Layouts](http://localhost:1414/feature/custom-layouts). Like custom layouts {{< external href="https://gohugo.io/content-management/archetypes/" text="Hugo Archetypes" />}} may contain templating logic. | |||
| <!--more--> | |||
| --- | |||
| {{< hackcss-alert type="info" >}} | |||
| <strong>Tip:</strong> This message appears below a {{< external href="https://gohugo.io/content-management/summaries/#manual-summary-splitting" text="Manual Summary Split" />}}. | |||
| {{< /hackcss-alert >}} | |||
| The above tip uses a shortcode called [Alert](http://localhost:1414/shortcode/alert/). In addition to a number of [Shortcodes](http://localhost:1414/shortcode/) After Dark provides a number of other [Features](http://localhost:1414/feature/). | |||
| The [Module System](http://localhost:1414/feature/module-system/), for example, provides a module to display image animations with alpha transparency and something not possible using a GIF: | |||
|  | |||
| If you do not see the above animation, you may install the [Fractal Forest](http://localhost:1414/module/fractal-forest/) module yourself or reinstall After Dark using the [Quick Install](http://localhost:1414/feature/quick-install/) for instant setup. | |||
| Review the [Online Help](http://localhost:1414/) to learn about other useful features such as the [Section Menus](http://localhost:1414/feature/section-menu) navigational aid, responsive [Post Images](http://localhost:1414/feature/post-images/"), offline [Fuzzy Search](http://localhost:1414/feature/fuzzy-search/) and more. | |||
| If online help isn't running, go ahead and start it using the corresponding command from the following cheat sheet within your site directory: | |||
| ```sh | |||
| # After Dark scripts | |||
| ./themes/after-dark/bin/upgrade # check for updates and upgrade | |||
| ./themes/after-dark/bin/help # start online help docs | |||
| ./themes/after-dark/bin/install # run the quick installer | |||
| # Hugo commands | |||
| hugo # build site with default settings | |||
| hugo --minify # build with minified sources (hugo 0.47 and above) | |||
| hugo --config config.prod.toml # build with custom config | |||
| hugo --templateMetrics # generate template metrics | |||
| hugo new about.md # generate page content | |||
| hugo new post/coming-soon.md # generate new post content | |||
| hugo serve # serve locally with default settings | |||
| hugo serve --buildDrafts --navigateToChanged # serve with drafts for editing | |||
| hugo serve --buildExpired # serve locally showing expired content | |||
| hugo serve --disableLiveReload # serve locally w/live reload disabled | |||
| hugo list drafts # list draft content | |||
| hugo list expired # list expired content | |||
| hugo list future # list future content | |||
| hugo [serve] --debug # build or serve hugo with debug info | |||
| hugo [command] --help | |||
| ``` | |||
| Thank you for choosing After Dark. | |||
| @@ -0,0 +1,15 @@ | |||
| +++ | |||
| title = "Search" # title of the page | |||
| layout = "search" # sets the layout to use | |||
| noindex = true # tell robots not to index | |||
| [form] | |||
| helpblock = "Press <kbd>s</kbd> to focus input anytime." | |||
| [form.input] | |||
| placeholder = "Enter search query…" | |||
| disabled = false | |||
| [security.csp.directives] | |||
| scriptSrc = [ | |||
| "'sha512-Bxby9zhln4Zc2thGA1E9CdT4qcCY52SxO/SBxAH6qQK6LK6/1gGq1xJ3Uz0SXTsPSL6quze7bYQUHr94xJS7jQ=='", | |||
| "'unsafe-eval'" | |||
| ] | |||
| +++ | |||
| @@ -1,8 +0,0 @@ | |||
| # ASSETS | |||
| This directory contains your un-compiled assets such as LESS, SASS, or JavaScript. | |||
| More information about the usage of this directory in the documentation: | |||
| https://nuxtjs.org/guide/assets#webpacked | |||
| **This directory is not required, you can delete it if you don't want to use it.** | |||
| @@ -1,62 +0,0 @@ | |||
| /** | |||
| * This injects Tailwind's base styles, which is a combination of | |||
| * Normalize.css and some additional base styles. | |||
| * | |||
| * You can see the styles here: | |||
| * https://github.com/tailwindcss/tailwindcss/blob/master/css/preflight.css | |||
| * | |||
| * If using `postcss-import`, use this import instead: | |||
| * | |||
| * @import "tailwindcss/preflight"; | |||
| */ | |||
| @tailwind preflight; | |||
| /** | |||
| * This injects any component classes registered by plugins. | |||
| * | |||
| * If using `postcss-import`, use this import instead: | |||
| * | |||
| * @import "tailwindcss/components"; | |||
| */ | |||
| @tailwind components; | |||
| /** | |||
| * Here you would add any of your custom component classes; stuff that you'd | |||
| * want loaded *before* the utilities so that the utilities could still | |||
| * override them. | |||
| * | |||
| * Example: | |||
| * | |||
| * .btn { ... } | |||
| * .form-input { ... } | |||
| * | |||
| * Or if using a preprocessor or `postcss-import`: | |||
| * | |||
| * @import "components/buttons"; | |||
| * @import "components/forms"; | |||
| */ | |||
| /** | |||
| * This injects all of Tailwind's utility classes, generated based on your | |||
| * config file. | |||
| * | |||
| * If using `postcss-import`, use this import instead: | |||
| * | |||
| * @import "tailwindcss/utilities"; | |||
| */ | |||
| @tailwind utilities; | |||
| /** | |||
| * Here you would add any custom utilities you need that don't come out of the | |||
| * box with Tailwind. | |||
| * | |||
| * Example : | |||
| * | |||
| * .bg-pattern-graph-paper { ... } | |||
| * .skew-45 { ... } | |||
| * | |||
| * Or if using a preprocessor or `postcss-import`: | |||
| * | |||
| * @import "utilities/background-patterns"; | |||
| * @import "utilities/skew-transforms"; | |||
| */ | |||
| @@ -0,0 +1,50 @@ | |||
| body { | |||
| background: #fffcf5; | |||
| } | |||
| a[rel*="external"]::after { | |||
| content: " " url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20class='i-external'%20viewBox='0%200%2032%2032'%20width='14'%20height='14'%20fill='none'%20stroke='%23ff9800'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='9.38%'%3E%3Cpath%20d='M14%209%20L3%209%203%2029%2023%2029%2023%2018%20M18%204%20L28%204%2028%2014%20M28%204%20L14%2018'/%3E%3C/svg%3E"); | |||
| } | |||
| nav a.active { | |||
| background-color: inherit; | |||
| color: #000; | |||
| } | |||
| a { | |||
| color: #422eff; | |||
| border-bottom: 1px solid #00ff9c; | |||
| } | |||
| a:hover { | |||
| color: #000; | |||
| background-color: #00ff9c; | |||
| } | |||
| .muted, .help-block { | |||
| opacity: 0.70; | |||
| } | |||
| .hack .muted, | |||
| .hack .help-block { | |||
| color: #0e0e0e; | |||
| } | |||
| .hack > header { | |||
| display: grid; | |||
| grid-template-columns: 1fr minmax(min-content, auto); | |||
| column-gap: 20px; | |||
| grid-template-areas: "nav nav"; | |||
| } | |||
| .leader{ | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| } | |||
| .myimage{ | |||
| margin-right: 10px; | |||
| box-shadow: 0 4px 8px 0 rgba(0,0,0,.12),0 2px 4px 0 rgba(0,0,0,.08); | |||
| border-width: 1px; | |||
| border-radius: 9999px; | |||
| border-color: #22292f; | |||
| border-style: solid; | |||
| height: 4rem; | |||
| width: 4rem; | |||
| } | |||
| @@ -1,33 +0,0 @@ | |||
| /** ------------------------------------------------------------ | |||
| ## TAILWIND CSS | |||
| --------------------------------------------------------- */ | |||
| @import '_tailwind'; | |||
| /** ------------------------------------------------------------ | |||
| ## CUSTOM CLASSES | |||
| --------------------------------------------------------- */ | |||
| html { | |||
| height: 100%; | |||
| } | |||
| body { | |||
| background-color: #fafafa; | |||
| min-height: 100%; | |||
| } | |||
| .btn { | |||
| @apply text-xs font-semibold rounded-full px-4 py-1 leading-normal bg-white border border-black text-black; | |||
| } | |||
| .btn-black { | |||
| @apply bg-white text-black; | |||
| } | |||
| .btn-black:hover { | |||
| @apply bg-black text-white; | |||
| } | |||
| /* Temporary fix for https://github.com/vaso2/nuxt-fontawesome/issues/9 */ | |||
| .fix-fa-inlined span{ | |||
| width: 1em !important; | |||
| } | |||
| @@ -1,26 +0,0 @@ | |||
| <template> | |||
| <div class="sm:flex items-center px-6 py-4"> | |||
| <img class="border shadow-md border-black block h-16 sm:h-24 rounded-full mx-auto mb-4 sm:mb-0 sm:mr-4 sm:ml-0" src="//avatars2.githubusercontent.com/u/952036?s=512" alt="profile photo"> | |||
| <div class="text-center sm:text-left sm:flex-grow"> | |||
| <div class="mb-4"> | |||
| <p class="text-xl font-bold font-serif leading-tight">Rohan Verma</p> | |||
| <p class="text-sm leading-tight text-grey-dark">Software Developer at <a class="no-underline text-grey-dark" href="https://zerodha.com/">Zerodha</a></p> | |||
| </div> | |||
| <div> | |||
| <button @click="tweetHi" class="btn btn-black"> | |||
| Tweet @rhnvrm | |||
| </button> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </template> | |||
| <script> | |||
| export default { | |||
| methods: { | |||
| tweetHi: function () { | |||
| window.open('https://twitter.com/home?status=Hi%20%40rhnvrm', '_blank'); | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| @@ -1,23 +0,0 @@ | |||
| <template> | |||
| <div class="items-center px-6 py-4 "> | |||
| <h1 class="p-2 font-serif">👋 Hello World</h1> | |||
| <div class="p-4 leading-normal"> | |||
| Welcome to my homepage, | |||
| <br> | |||
| I’m a Software Developer working at <a class="no-underline text-grey-dark" href="https://zerodha.com/">Zerodha</a> where | |||
| I write Golang, Python and Javascript to build things that are used at scale. | |||
| <br> | |||
| I am also developing <a class="no-underline text-grey-dark" href="https://upi.link/">upi.link</a>, a small and nifty | |||
| programmable UPI shortlink generator. | |||
| <br> | |||
| <br> | |||
| <br> | |||
| You can read my <a class="no-underline text-grey-dark" href="https://blog.rohanverma.net/">blog</a> where | |||
| I try to write about what I am doing and things I find interesting. | |||
| </div> | |||
| </div> | |||
| </template> | |||
| @@ -1,40 +0,0 @@ | |||
| <template> | |||
| <div class="container"> | |||
| <div class="row"> | |||
| <div class="five columns"> | |||
| <contact-card></contact-card> | |||
| <profile-list></profile-list> | |||
| </div> | |||
| <div class="seven columns"> | |||
| <project-list></project-list> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </template> | |||
| <script> | |||
| import ContactCard from './ContactCard' | |||
| import ProfileList from './ProfileList' | |||
| import ProjectList from './ProjectList' | |||
| export default { | |||
| name: 'MainPage', | |||
| props: { | |||
| msg: String | |||
| }, | |||
| components:{ | |||
| ContactCard, | |||
| ProfileList, | |||
| ProjectList | |||
| }, | |||
| data(){ | |||
| return { | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| @@ -1,99 +0,0 @@ | |||
| <template> | |||
| <div class="w-full leading-normal"> | |||
| <div @click="redirect_href('blog')" class="flex group cursor-pointer hover:text-white hover:bg-indigo p-4 border-b"> | |||
| <div class="text-lg mb-1 group-hover:text-white fix-fa-inlined"> | |||
| <fa-layers full-width class="fa flex-none align-middle"><fa :icon="faWordpress" /></fa-layers> | |||
| <span class="pl-2 font-serif">Blog</span> | |||
| </div> | |||
| </div> | |||
| <div @click="redirect_href('twitter')" class="flex group cursor-pointer hover:text-white hover:bg-indigo p-4 border-b"> | |||
| <div class="text-lg mb-1 group-hover:text-white fix-fa-inlined"> | |||
| <fa-layers full-width class="fa flex-none align-middle"><fa :icon="faTwitter" /></fa-layers> | |||
| <span class="pl-2 font-serif">Twitter</span> | |||
| </div> | |||
| </div> | |||
| <div @click="redirect_href('github')" class="flex group cursor-pointer hover:text-white hover:bg-indigo p-4 border-b"> | |||
| <div class="text-lg mb-1 group-hover:text-white fix-fa-inlined"> | |||
| <fa-layers full-width class="fa flex-none align-middle"><fa :icon="faGithub" /></fa-layers> | |||
| <span class="pl-2 font-serif">Github</span> | |||
| </div> | |||
| </div> | |||
| <div @click="redirect_href('keybase')" class="flex group cursor-pointer hover:text-white hover:bg-indigo p-4 border-b"> | |||
| <div class="text-lg mb-1 group-hover:text-white fix-fa-inlined"> | |||
| <fa-layers full-width class="fa flex-none align-middle"><fa :icon="faKeybase" /></fa-layers> | |||
| <span class="pl-2 font-serif">Keybase</span> | |||
| </div> | |||
| </div> | |||
| <div @click="redirect_href('linkedin')" class="flex group cursor-pointer hover:text-white hover:bg-indigo p-4 border-b"> | |||
| <div class="text-lg mb-1 group-hover:text-white fix-fa-inlined"> | |||
| <fa-layers full-width class="fa flex-none align-middle"><fa :icon="faLinkedin" /></fa-layers> | |||
| <span class="pl-2 font-serif">Linkedin</span> | |||
| </div> | |||
| </div> | |||
| <div @click="redirect_href('youtube')" class="flex group cursor-pointer hover:text-white hover:bg-indigo p-4"> | |||
| <div class="text-lg mb-1 group-hover:text-white fix-fa-inlined"> | |||
| <fa-layers full-width class="fa flex-none align-middle"><fa :icon="faYoutube" /></fa-layers> | |||
| <span class="pl-2 font-serif">Youtube</span> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </template> | |||
| <script> | |||
| import { faGithub, faLinkedin, faTwitter, faWordpress, faKeybase, faYoutube } from '@fortawesome/free-brands-svg-icons' | |||
| export default { | |||
| methods: { | |||
| redirect_href (profile) { | |||
| var url | |||
| switch (profile) { | |||
| case "linkedin": | |||
| url = "//www.linkedin.com/in/rhnvrm/", '_blank' | |||
| break; | |||
| case "twitter": | |||
| url = "//twitter.com/rhnvrm", '_blank' | |||
| break; | |||
| case "github": | |||
| url = "//github.com/rhnvrm", '_blank' | |||
| break; | |||
| case "youtube": | |||
| url = "//youtube.com/user/TheRohanVerma", '_blank' | |||
| break; | |||
| case "blog": | |||
| url = "//blog.rohanverma.net/", '_blank' | |||
| break; | |||
| case "keybase": | |||
| url = "//keybase.io/rhnvrm", '_blank' | |||
| break; | |||
| default: | |||
| url = "//rohanverma.net/" | |||
| break; | |||
| } | |||
| url += "?utm_source=homepage_rohanverma_net&utm_medium=profilelist" | |||
| window.open(url, '_blank') | |||
| } | |||
| }, | |||
| computed: { | |||
| faGithub () { | |||
| return faGithub | |||
| }, | |||
| faLinkedin () { | |||
| return faLinkedin | |||
| }, | |||
| faTwitter () { | |||
| return faTwitter | |||
| }, | |||
| faWordpress () { | |||
| return faWordpress | |||
| }, | |||
| faKeybase () { | |||
| return faKeybase | |||
| }, | |||
| faYoutube () { | |||
| return faYoutube | |||
| } | |||
| }, | |||
| } | |||
| </script> | |||
| @@ -1,78 +0,0 @@ | |||
| <template> | |||
| <div class="sm:flex items-center px-6 py-4"> | |||
| <div class="text-center sm:text-left sm:flex-grow"> | |||
| <div class="mb-4"> | |||
| <p class="flex flex-col sm:flex-row border-b border-2px py-4"> | |||
| <span class="flex-1 text-xl font-bold leading-tight font-serif">Recent Projects</span> | |||
| <span class="flex-none text-sm leading-tight text-grey-dark"> | |||
| <span @click="changePage(-1)" :class="{'line-through': is_first_page, 'cursor-pointer': !is_first_page}">next</span> | |||
| / | |||
| <span @click="changePage(1)" :class="{'line-through': is_last_page, 'cursor-pointer': !is_last_page}">prev</span> | |||
| </span> | |||
| </p> | |||
| </div> | |||
| <div> | |||
| <!-- {{posts}} --> | |||
| <div v-for="project in posts" v-bind:key="project.id" @click="redirect_href(project.link)" class="flex group cursor-pointer hover:text-white hover:bg-indigo p-4"> | |||
| <p class="flex-1 text-lg mb-1 group-hover:text-white font-serif" v-html="project.title.rendered"></p> | |||
| <fa-layers full-width class="fa flex-none align-middle ml-2"> | |||
| <fa :icon="fas.faArrowCircleRight"/> | |||
| </fa-layers> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </template> | |||
| <script> | |||
| import { fas } from '@fortawesome/free-solid-svg-icons' | |||
| export default { | |||
| mounted() { | |||
| this.fetchPosts() | |||
| }, | |||
| methods: { | |||
| async fetchPosts() { | |||
| const posts = await this.$wp.posts().categories(21).perPage(8).page(this.current_page) | |||
| this.posts = posts | |||
| this.total_pages = posts._paging.totalPages | |||
| }, | |||
| redirect_href: function (url) { | |||
| window.open(url + "?utm_source=homepage_rohanverma_net&utm_medium=projectlist", '_blank'); | |||
| }, | |||
| changePage: function (p) { | |||
| var newPage = this.current_page + p | |||
| if (newPage >= 1 && newPage <= this.total_pages) { | |||
| this.current_page = newPage | |||
| this.fetchPosts() | |||
| } | |||
| }, | |||
| }, | |||
| data () { | |||
| return { | |||
| current_page: 1, | |||
| total_pages: 1, | |||
| posts: [ | |||
| { | |||
| id: 0, | |||
| title: { | |||
| rendered: "Loading..." | |||
| } | |||
| } | |||
| ] | |||
| } | |||
| }, | |||
| computed: { | |||
| fas () { | |||
| return fas | |||
| }, | |||
| is_first_page() { | |||
| return this.current_page == 1 | |||
| }, | |||
| is_last_page() { | |||
| return this.current_page == this.total_pages | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| @@ -1,6 +0,0 @@ | |||
| # COMPONENTS | |||
| The components directory contains your Vue.js Components. | |||
| Nuxt.js doesn't supercharge these components. | |||
| **This directory is not required, you can delete it if you don't want to use it.** | |||
| @@ -1,5 +0,0 @@ | |||
| <template> | |||
| <div class="h-64 p-1 overflow-y-scroll"> | |||
| <a class="twitter-timeline" data-link-color="#2B7BB9" data-chrome="nofooter noborders noheader transparent" href="https://twitter.com/rhnvrm?ref_src=twsrc%5Etfw">Loading my tweets... Click me if you have content blocking on to view my twitter feed.</a> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> | |||
| </div> | |||
| </template> | |||
| @@ -0,0 +1,77 @@ | |||
| baseurl = "/" # Controls base URL sitewide | |||
| languageCode = "en-US" # Controls site language | |||
| title = "rohanverma.net" # Homepage title and page title suffix | |||
| paginate = 11 # Number of posts to show before paginating | |||
| disqusShortname = "rhnvrm" | |||
| googleAnalytics = "UA-90695618-1" | |||
| # Controls default theme and theme components | |||
| theme = [ | |||
| "fractal-forest", | |||
| "after-dark" | |||
| ] | |||
| disableLiveReload = false # Optional, set true to disable live reload | |||
| enableRobotsTXT = true # Suggested, enable robots.txt file | |||
| pygmentsCodefences = true # Suggested, highlight fenced code blocks | |||
| pygmentsUseClasses = true # Required for custom syntax highlighting | |||
| sectionPagesMenu = "main" # Enable menu system for lazy bloggers | |||
| footnoteReturnLinkContents = "↩" # Provides a nicer footnote return link | |||
| [params] | |||
| description = "Todo" # Suggested, controls default description meta | |||
| author = "Rohan Verma" # Optional, controls author name display on posts | |||
| hide_author = false # Optional, set true to hide author name on posts | |||
| has_cookies = false # Optional, set true to disable cookie disclaimer | |||
| disable_csp = false # Optional, set true to disable content security policy | |||
| images = [ | |||
| "https://source.unsplash.com/collection/983219/2000x1322" | |||
| ] # Suggested, controls default Open Graph images | |||
| [params.layout.menu.main] | |||
| hidden = false # Optional, set false or remove to show section menu | |||
| exclude = ["search", "blog_list"] # exclude homepage and blog postings | |||
| [[menu.main]] | |||
| name = "Home" | |||
| identifier = "home" | |||
| url = "/" | |||
| weight = 1 | |||
| [[menu.main]] | |||
| name = "Blog" | |||
| identifier = "blog" | |||
| url = "/blog" | |||
| weight = 0 | |||
| [[menu.utility]] | |||
| name = "@rhnvrm" | |||
| weight = 1 | |||
| identifier = "tweet" | |||
| url = "https://twitter.com/rhnvrm" | |||
| [[menu.utility]] | |||
| name = "Email" | |||
| weight = 1 | |||
| identifier = "email" | |||
| url = "mailto:[email protected]" | |||
| [[menu.utility]] | |||
| name = "Search" | |||
| identifier = "search" | |||
| url = "/search/" | |||
| post = "<svg aria-hidden=\"true\" class=\"i-search\" viewBox=\"0 0 32 32\" width=\"10\" height=\"10\" fill=\"none\" stroke=\"currentcolor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"3\"><circle cx=\"14\" cy=\"14\" r=\"12\" /><path d=\"M23 23 L30 30\" /></svg>" | |||
| [params.modules.fractal_forest] | |||
| enabled = true # Optional, set false to disable module | |||
| decoders = ["bpgdec8a"] # Optional, 8-bit javascript decoder with animation | |||
| [params.hackcss] | |||
| mode = "hack" | |||
| palette = "light" | |||
| [outputs] | |||
| home = ["HTML", "RSS", "JSON"] | |||
| @@ -0,0 +1,39 @@ | |||
| --- | |||
| title: Making Presenations using Markdown | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-01-27T00:00:00+00:00 | |||
| url: blog/2016/01/27/making-presenations-using-markdown/ | |||
| categories: | |||
| - projects | |||
| - uncategorized | |||
| --- | |||
| It’s often a pain to make presenations. How many times have you just wanted to make a simple presentation but have had to deal with bulky software like MS Office? | |||
| Well markdown alternatives exist for presenations also, you can focus on your content and make your presentations simply in markdown. | |||
| If you don’t know what markdown is you can see this wonderful [cheatsheet][1] and | |||
| get acquainted with it in seconds. | |||
| Although there are many solutions, I found [RemarkJS][2] to be a good product. This is their getting started tutorial: | |||
| > It takes only a few, simple steps to get up and running with remark: | |||
| > 1. Create a HTML file to contain your slideshow (see below) | |||
| > 2. Open the HTML file in a decent browser | |||
| > 3. Edit the Markdown and/or CSS styles as needed, save and refresh! | |||
| They also have a wonderful [website][3] which is acutally a presentation which you can use as an introduction. | |||
| Many tools have also been built around it like [Remarkise][4] which can be used to render your Markdown-based slideshow on the fly. | |||
| If you know of any other cooler alternatives, please drop a comment! | |||
| [1]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet | |||
| [2]: https://github.com/gnab/remark | |||
| [3]: http://remarkjs.com/ | |||
| [4]: https://gnab.github.io/remark/remarkise | |||
| @@ -0,0 +1,18 @@ | |||
| --- | |||
| title: Point about Floating (Points) | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-01-28T00:00:00+00:00 | |||
| url: blog/2016/01/28/point-about-floating-points/ | |||
| categories: | |||
| - uncategorized | |||
| --- | |||
| It is not always true what you might be told about floating point numbers, always better to look for things in the manual or on the [internet][1] | |||
| ![xkcd][2] | |||
| Black Hat was lying to the ACM team. e^π – π, which is around 19.999099979 is very close to 20. Many people forget that floating point numbers are approximations, otherwise infinite space would be needed to store such numbers. He made them believe that it is “close enough to 20 that the computer should be unable to tell the difference, and that any noticeable deviation from 20 results from errors in the code”. Well, what more do you expect from black-hat? | |||
| [1]: http://floating-point-gui.de/basic/ | |||
| [2]: https://imgs.xkcd.com/comics/e_to_the_pi_minus_pi.png | |||
| @@ -0,0 +1,35 @@ | |||
| --- | |||
| title: Twitter bots using Tweepy | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-01-29T00:00:00+00:00 | |||
| url: blog/2016/01/29/twitter-bots-using-tweepy/ | |||
| categories: | |||
| - projects | |||
| --- | |||
| Unable to think what to tweet about? Have you ever faced a similar situation? | |||
| Well, it’s very easy to create your own bots using python’s Tweepy module. You can use these skeletons I recently made for a workshop on the same topic. All you need to make your own bot is add some logic to these skeletons. | |||
| * * * | |||
| This is a basic static script that you can use by running once yourself or setup a cronjob to run automaticall in intervals. Currently, it fetches JSON data from an API and parses it into a python dict which you can then manipulate with your py-fu. | |||
| * * * | |||
| This script uses twitter’s streaming API which you can use to read content in real time and act upon it again, in real time! | |||
| * * * | |||
| Note you will also need this file in the same directory, it holds your keys. You should add this file to <code class="highlighter-rouge">.gitignore</code> before commiting your keys in your own repo. | |||
| If you create your own bot using this, we would love for you to also add it to the [audience][2] folder in the repo by sending a pull request. | |||
| [2]: https://github.com/ACM-SNU/api-bot-python/tree/master/audience | |||
| @@ -0,0 +1,39 @@ | |||
| --- | |||
| title: 'BLIP – Asset Tracking & Location Based Contextual Services Using Bluetooth Based Indoor Positioning' | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-03-22T23:43:41+00:00 | |||
| url: blog/2016/03/22/blip/ | |||
| categories: | |||
| - projects | |||
| tags: | |||
| - hackathon | |||
| - iot | |||
| - python | |||
| --- | |||
| **BLIP** is a naive solution for effective tracking of assets in indoor spaces, where satellite (GPS) based positioning systems are unreliable, and provide location based contextual services. This project was made at IndiaHacks: Internet Of Things Hackathon at SAP Labs, Gurgaon. It was an overnight hackathon and [Paul][1] and I were awake till the last moments and only slept after creating a small demo video. | |||
| <img class="size-medium wp-image-101 aligncenter" src="/wp-content/uploads/2016/12/heiot-1-300x209.jpg" alt="" width="300" height="209" srcset="/wp-content/uploads/2016/12/heiot-1-300x209.jpg 300w, /wp-content/uploads/2016/12/heiot-1-768x534.jpg 768w, /wp-content/uploads/2016/12/heiot-1-700x487.jpg 700w, /wp-content/uploads/2016/12/heiot-1.jpg 854w" sizes="(max-width: 300px) 100vw, 300px" /> | |||
| We were inspired by the The Time Machine (2002) movie’s scene where the protagonist enters a museum in the future. | |||
| <span class="embed-youtube" style="text-align:center; display: block;"></span> | |||
| During the hackathon we were able to make an app that relays RSSI values to our real time Database (rethink-db) that works on a pub-sub model, queries the real time database for its calculated position and receives contextual information relating to its predicted position inside the building where beacons have been set up. | |||
| <img class="size-full wp-image-99 aligncenter" src="/wp-content/uploads/2016/12/Screenshot-from-2016-12-23-04-44-36.png" alt="" width="136" height="257" /> | |||
| Since, the final submission deadline was extended, we were able to reach back our campus at night and shoot a demo video at our university’s library. | |||
| <span class="embed-youtube" style="text-align:center; display: block;"></span> | |||
| Finally, we were selected in the top 20 for the offline finals of IndiaHacks and went to Taj Vivanta, Bangalore. It was a nice experience where we got to improve our idea with the help of mentors that were available there. We tweaked the algorithm and the variables a bit for the demo room we made at the venue. We were surprised to be among the few student teams at the finale. | |||
| <img class="size-medium wp-image-100 aligncenter" src="/wp-content/uploads/2016/12/heiot-2-300x143.jpg" alt="" width="300" height="143" srcset="/wp-content/uploads/2016/12/heiot-2-300x143.jpg 300w, /wp-content/uploads/2016/12/heiot-2.jpg 600w" sizes="(max-width: 300px) 100vw, 300px" /> | |||
| We gave our best and demo’d the project and were finally awarded the 7th position and received two RaspberryPi 3B models as the prize. | |||
| <img class="aligncenter wp-image-98 size-full" src="/wp-content/uploads/2016/12/heiot.jpg" width="462" height="826" srcset="/wp-content/uploads/2016/12/heiot.jpg 462w, /wp-content/uploads/2016/12/heiot-168x300.jpg 168w" sizes="(max-width: 462px) 100vw, 462px" /> | |||
| [1]: https://twitter.com/commandpaul | |||
| @@ -0,0 +1,42 @@ | |||
| --- | |||
| title: Foodify App – HackNSIT 2016 | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-04-15T00:22:24+00:00 | |||
| url: blog/2016/04/15/foodify-app-hacknsit-2016/ | |||
| categories: | |||
| - projects | |||
| tags: | |||
| - android | |||
| - api | |||
| - hackathon | |||
| - python | |||
| --- | |||
| [HackNSIT][1] is a 24 hour hackathon that took place at Netaji Subhash Institute of Technology, and had around 150 participants from all over India. The themes of the hackathon were diverse and we chose to build an app that can solve the problem of tracking the nutritional value of whatever you eat with just a simple snap. The app processes the image of a food item, retrieves nutritional content and also suggests recipes based on your daily calorie limit/goal. We won the third prize at this hackathon. | |||
| <img class="aligncenter wp-image-113 size-large" src="/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n-700x700.jpg" width="632" height="632" sizes="(max-width: 632px) 100vw, 632px" /> | |||
| Since we were a team of 4 composed of two python developers ([rhnvrm][2], [mrkaran_][3]) and two android developers ([mayank_saxena96][4], [arpit_gogia][5]), we started with a creating a [GitHub Organization][6] to organize our code. We had separate repositories for our _Backend API_ and _Android App_. Being lazy, we set up a webhook to Heroku to automatically deploy new builds whenever new code is pushed. | |||
| **Tech Stack**: We used Python (Flask) for our API, Parse for the user database and Android for the mobile app. We have used CloudSight, NutritionX API and Spoonacular API. On the Android app, one of our main goals was to accomplish a low bandwidth connection to our server. Cameras on mobile device these days are capable of reproducing high quality photos measuring up to 6 MB in size. By using a simple Bitmap scaling down mechanism, we were able to reduce the size to around 200 kB, thus allowing users to use our app on low bandwidth connections like 2G. | |||
| **User Flow**: We built our core API on Flask(Python) and hosted it on Heroku. The image is sent as multipart data from Android App as a POST request to /upload endpoint which calls CloudSIght API to retrieve food item name and then NutritionX API is called to retrieve relevant nutritional data of that item. The daily calorie limit is set at the time of signup, and this is deducted every time a new food item is added. Using Spoonacular API we get a list of recommended recipes which are within bounds of daily calorie limit. | |||
| **Documentation**: We have properly documented our API endpoints for reference to other people. It is available [here][7] | |||
| **Future Work**: Our aim is to integrate social features into this app, provide leaderboards, share healthy food items a user recommends to his/her followers. We will include some data insights on user’s food consumption and give him/her suggestions on what to consume to achieve his goal, provide visualizations, build a streak for providing an incentive to the user for eating healthy. We have already built our core API so porting this app to other platforms like iOS, web won’t be much difficult. | |||
| You can see the demo video here: | |||
| <span class="embed-youtube" style="text-align:center; display: block;"></span> | |||
| | |||
| [1]: http://www.hack-nsit.in/ | |||
| [2]: https://twitter.com/rhnvrm | |||
| [3]: https://twitter.com/mrkaran_ | |||
| [4]: https://twitter.com/mayank_saxena96 | |||
| [5]: https://twitter.com/arpit_gogia | |||
| [6]: http://github.com/CapsLockHacks/ | |||
| [7]: https://anypoint.mulesoft.com/apiplatform/rhnvrm/#/portals/organizations/ba699460-af7b-4192-b37f-7e7d635c9a8a/apis/62058/versions/64448 | |||
| @@ -0,0 +1,15 @@ | |||
| --- | |||
| title: Adding Support for Vector Instructions to 8051 Architecture | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-05-07T00:00:48+00:00 | |||
| url: blog/2016/05/07/adding-support-for-vector-instructions-to-8051-architecture/ | |||
| categories: | |||
| - projects | |||
| --- | |||
| This was a group project for the Computer Architecture course at SNU under Prof. Rajeev Kumar Singh. Our team wrote a theoretical paper in which the focus is on adding support for vector instructions to the Intel 8051 architecture. The proposed architecture has a new vector register bank and a unit to decode the vector addresses. The team was composed of Akhil Alluri, Dhiraj Balakrishnan, Manvendra Singh, Rohan Verma, and Pulkit Gairola. This project can be used to demonstrate how one can add specialized vectorisation capabilities to architectures found in microcontrollers. | |||
| [View Fullscreen][1] | |||
| [1]: /wp-content/plugins/pdfjs-viewer-shortcode/pdfjs/web/viewer.php?file=/wp-content/uploads/2016/12/8051_Vectorization.pdf&download=true&print=true&openfile=false | |||
| @@ -0,0 +1,34 @@ | |||
| --- | |||
| title: Participating in Google Summer of Code 2016 | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-05-10T00:00:00+00:00 | |||
| url: blog/2016/05/10/participating-in-google-summer-of-code-2016/ | |||
| categories: | |||
| - gsoc | |||
| - projects | |||
| --- | |||
| This summer I will be working on an open source project called [Apache | |||
| Allura][1]. This software powers [SourceForge.net][2] | |||
| and is developed | |||
| under the [Apache Software Foundation][3]. My mentors are | |||
| [Dave Brondsema][4] | |||
| and [Heith Seewald][5] who have been guiding me along the way during the application | |||
| period and the community bonding period and I hope to have an amazing summer working | |||
| with them. | |||
| I will keep updating my progress on this blog so stay tuned! | |||
| [1]: https://allura.apache.org/ | |||
| [2]: http://sourceforge.net | |||
| [3]: https://www.apache.org/ | |||
| [4]: http://brondsema.net | |||
| [5]: https://twitter.com/heiths | |||
| @@ -0,0 +1,48 @@ | |||
| --- | |||
| title: Building Planet GSoC | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-05-20T00:00:00+00:00 | |||
| url: blog/2016/05/20/building-planet-gsoc/ | |||
| categories: | |||
| - gsoc | |||
| - projects | |||
| --- | |||
| There were many emails in the GSoC mailing list regarding ‘sharing’ blogs | |||
| with the GSoC community. Many GSoC students keep blogs to track their | |||
| progress. It becomes really tough to track hundreds of blogs so I thought | |||
| of starting a blog aggregator. | |||
| Most of the solutions that had been developed until now required setting up a server | |||
| that would generate a static file of all the blogs. But I wanted a solution | |||
| that was easy to set up and could be deployed by anyone by clicking a single button on github. | |||
| The motivation for this was my conversation with James Lopeman (meflin) on irc who | |||
| is an org-admin at the Python Software Foundation. Before | |||
| that conversation, I had already set up a simple method using [river5][1] | |||
| developed by | |||
| [Dave Winer][2] but later I extended it to include a deploy on openshift button. | |||
| Currently, around 48 blogs are indexed by [PlanetGSoC][3]. It | |||
| can be forked by anyone to deploy their own planet on GitHub.io since it uses | |||
| JSONP requests to fetch the JSON river from the server running on openshift. | |||
| Feel free to fork the project or contribute! And if you have a blog related to GSoC be | |||
| sure to send a pull request. | |||
| [1]: https://github.com/scripting/river5 | |||
| [2]: https://github.com/scripting | |||
| [3]: http://planetGSoC.github.io | |||
| @@ -0,0 +1,46 @@ | |||
| --- | |||
| title: Installing Apache Allura on Digital Ocean | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-05-30T00:00:00+00:00 | |||
| url: blog/2016/05/30/installing-apache-allura-on-digital-ocean/ | |||
| categories: | |||
| - gsoc | |||
| - projects | |||
| --- | |||
| Installing Apache Allura on your [Digital Ocean][1] droplet is now as easy as typing <code class="highlighter-rouge">make install</code>. | |||
| [Apache Allura][2] is a Software Forge that powers [SourceForge.net][3]. Today, | |||
| I created a Makefile that simplifies the process of setting up Allura on a Digital Ocean droplet. The source code is hosted | |||
| on <https://forge-allura.apache.org/u/rhnvrm/allura-install/ci/master/tree/> | |||
| and on [github][4]. | |||
| Here are the steps to get started with deploying your own instance of Apache Allura. | |||
| 1. Set up your [digital ocean][1] account and spin up a new <code class="highlighter-rouge">Ubuntu 14.04</code> droplet. | |||
| 2. SSH into your droplet’s root <code class="highlighter-rouge">ssh root@<DO_id></code> and | |||
| clone the repository using <code class="highlighter-rouge">git clone https://[email protected]/git/u/rhnvrm/allura-install</code> | |||
| 3. Change your working directory into the cloned repository. <code class="highlighter-rouge">cd allura-install</code> | |||
| 4. Install <code class="highlighter-rouge">git</code> and <code class="highlighter-rouge">make</code> using <code class="highlighter-rouge">apt-get install git make</code> | |||
| 5. Run <code class="highlighter-rouge">make install</code> | |||
| If you face an error during a make step, report it to the issue tracker on [github][5]. | |||
| If it is an error that you can fix or due to some network errors, you can run the next step listed in the make file. | |||
| Suppose, you faced an error during the <code class="highlighter-rouge">npm install</code> inside the <code class="highlighter-rouge">initialize-allura-taskd</code>, you can run <code class="highlighter-rouge">make initialize-allura-taskd</code> again and | |||
| then run each next step in a simlar fashion (such as <code class="highlighter-rouge">initialize-allura-data</code>) | |||
| Finally, run <code class="highlighter-rouge">make start</code> (only required if <code class="highlighter-rouge">make</code> failed during a certain step) | |||
| [1]: http://digitalocean.com | |||
| [2]: http://allura.apache.org | |||
| [3]: http://sourceforge.net | |||
| [4]: http://github.com/rhnvrm/allura-install | |||
| [5]: http://github.com/rhnvrm/allura-install/issues | |||
| @@ -0,0 +1,26 @@ | |||
| --- | |||
| title: Vim as your daily log notebook | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-06-20T00:00:00+00:00 | |||
| url: blog/2016/06/20/vim-as-your-daily-log-notebook/ | |||
| categories: | |||
| - uncategorized | |||
| --- | |||
| There are probably hundreds of methods and software that have been written that can help you maintain a notebook that contains your daily logs and notes. | |||
| I have tried tens of methods and software and after a few days they just feel like bloat or take up too much time to maintain regularly. | |||
| So, I decided to break down my own problem and found a simplisitic method/solution that suits me. My need was to write two logs, one life log and one dev log which was distraction free and would not take more than a second to get started with. | |||
| I finally ended up with editing my <code class="highlighter-rouge">zshrc</code> and <code class="highlighter-rouge">vimrc</code>. Now, I just end up doing the following every morning: | |||
| 1. Open the terminal <code class="highlighter-rouge">(ctrl + t)</code> | |||
| 2. type <code class="highlighter-rouge">today</code> [This opens a split window having my life log and dev log side by side] | |||
| 3. type <code class="highlighter-rouge">nlog<space></code> to start a new log entry. | |||
| You can look at my commits [here][1] and [here][2] to see how I have done it and modify it for yourself. | |||
| [1]: https://github.com/rhnvrm/dotfiles/commit/04a61fdb0a671e6de64f37730845b85fa7bf6109 | |||
| [2]: https://github.com/rhnvrm/dotfiles/commit/81ebfa3f804032c8386d741232daa9744c54429c | |||
| @@ -0,0 +1,13 @@ | |||
| --- | |||
| title: To Draft or not to Draft | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-08-04T00:00:00+00:00 | |||
| url: blog/2016/08/04/to-draft-or-not-to-draft/ | |||
| categories: | |||
| - uncategorized | |||
| --- | |||
| I just realized that I have way more drafts pending in my blog than the actual posts that are published here. Maybe, it is because I am afraid of being incorrect. Well, today I have decided that I will not worry about being correct and will post rather than draft. The motivation to publish a pending draft drops exponentially for me with time. So, if any of my readers find any mistake in my posts; please notify me so that I can correct it for my and my reader’s sake. | |||
| _Update_: The irony here is that I had left this post as a draft. Posting it here as a cruel joke on myself. | |||
| @@ -0,0 +1,62 @@ | |||
| --- | |||
| title: What is Apache Allura and why is it relevant to developers? | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-08-05T00:00:00+00:00 | |||
| url: blog/2016/08/05/what-is-apache-allura-and-why-is-it-relevant-to-developers/ | |||
| categories: | |||
| - gsoc | |||
| --- | |||
| Apache Allura is a Top-Level Project under the Apache Software Foundation since April of 2014. | |||
| It powers SourceForge, Open Source Projects Europe, DLR German Aerospace Center and DARPA’s VehicleForge. | |||
| The most interesting features that distinguish Apache Allura from currently trending Forge Software like GitHub, GitLab and | |||
| the Atlassian Toolkit are | |||
| it’s modularity and use of well-known python technologies. It is one of the easiest to set up for personal or professional use | |||
| and even for use by big organisations. It reaches millions of users and developers throught the ~500,000 projects hosted | |||
| on SourceForge. | |||
| With having minimal steps in setting up your own instance of Apache Allura on a DigitalOcean droplet, a RaspberryPi, or simply | |||
| using SourceForge.net it is | |||
| one of the most valueable products that you can deploy for your team for collaborating on code, | |||
| documentation, research, or even blogging, chatting, discussing or even maintaining your personal Wiki. It is very convenient for new | |||
| users to setup in terms of usablity by using the defaults and also provides enough tools, settings, access control and ways to modify your Forge | |||
| for powerusers. | |||
| This week, I will be posting a series of posts about Allura. So stay tuned! | |||
| Further Reading: | |||
| * [An Open Forge][1] | |||
| * [The Apache Software Foundation Announces Apache™ Allura™ as a Top-Level Project][2] | |||
| * [Open Hub][3] | |||
| * [About SourceForge][4] | |||
| * [About DARPA VehicleForge][5] | |||
| * [SourceForge announces Apache Allura][6] | |||
| * [Apache Allura Wiki – Features][7] | |||
| * [Apache Allura Wiki – Feature Comparison][8] | |||
| * [Source Code][9] | |||
| * Also hosted as a mirror on Github: [![GitHub Stars][10]][11] | |||
| [1]: https://sourceforge.net/url: blog/an-open-forge/ | |||
| [2]: https://blogs.apache.org/foundation/entry/the_apache_software_foundation_announces52 | |||
| [3]: https://www.openhub.net/p/allura | |||
| [4]: https://sourceforge.net/about | |||
| [5]: http://cps-vo.org/group/avm/vehicleforge | |||
| [6]: https://sourceforge.net/url: blog/apache-allura-becomes-top-level-project/ | |||
| [7]: https://forge-allura.apache.org/p/allura/wiki/Features/ | |||
| [8]: https://forge-allura.apache.org/p/allura/wiki/Feature%20Comparison/ | |||
| [9]: https://forge-allura.apache.org/p/allura/git/ci/master/tree/ | |||
| [10]: https://img.shields.io/github/stars/apache/allura.svg | |||
| [11]: https://github.com/apache/allura/stargazers | |||
| @@ -0,0 +1,111 @@ | |||
| --- | |||
| title: Topological Sort for problems using DAG | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-08-06T00:00:00+00:00 | |||
| url: blog/2016/08/06/topological-sort-for-problems-using-dag/ | |||
| categories: | |||
| - uncategorized | |||
| --- | |||
| Given a DAG (Directed Acyclic Graph), in which we know the adjacencies represent the order in which to perform a task, and the | |||
| vertices are tasks, we want to place the vertices in a sequence. We must find a sequence that must satisfy | |||
| all dependencies of pre-requisites. This sequential arrangement of the vertices is called the topological sort of the DAG. | |||
| The first examples that come in my mind are of pre-requisite chains in courses offered at universities. Suppose, you were | |||
| given a challenge to plot a roadmap for everyone in your university about how they can complete their major and/or minor given | |||
| the courses they have already completed. Another one to which I was exposed recently was of finding out the complete sequence | |||
| of events that took place if only given a partial sequence and also to detect if the given information was accurate or not. | |||
| Accuracy of the given information can be detected by checking if at any point in the algorithm we detect a cycle. Since, | |||
| such problems are being expressed through DAGs, if there exists any cycle in the graph, it can be concluded that the graph will | |||
| not have a topological sort. The proof for this can be found [here][1] | |||
| Suppose we have the following graphs: | |||
| <div class="language-python highlighter-rouge"> | |||
| <pre class="highlight"><code><span class="n">graph1</span> <span class="o">=</span> <span class="p">{</span> <span class="s">"x"</span> <span class="p">:</span> <span class="p">[</span><span class="s">"y"</span><span class="p">],</span> | |||
| <span class="s">"z"</span> <span class="p">:</span> <span class="p">[</span><span class="s">"y"</span><span class="p">],</span> | |||
| <span class="s">"y"</span> <span class="p">:</span> <span class="p">[],</span> | |||
| <span class="s">"a"</span> <span class="p">:</span> <span class="p">[</span><span class="s">"b"</span><span class="p">],</span> | |||
| <span class="s">"b"</span> <span class="p">:</span> <span class="p">[</span><span class="s">"c"</span><span class="p">],</span> | |||
| <span class="s">"c"</span> <span class="p">:</span> <span class="p">[]</span> <span class="p">}</span> | |||
| </code></pre> | |||
| </div> | |||
| <div class="language-python highlighter-rouge"> | |||
| <pre class="highlight"><code><span class="n">graph2</span> <span class="o">=</span> <span class="p">{</span><span class="s">"x"</span> <span class="p">:</span> <span class="p">[</span><span class="s">"y"</span><span class="p">],</span> <span class="s">"y"</span><span class="p">:</span> <span class="p">[</span><span class="s">"x"</span><span class="p">]}</span> | |||
| </code></pre> | |||
| </div> | |||
| Here, you can notice how <code class="highlighter-rouge">graph1</code> has a toposort but for <code class="highlighter-rouge">graph2</code>, it does not exist. This is because of the fact there | |||
| exists a cycle in the graph. We can also understand it using the proof of the statment I had mentioned above. “Topological | |||
| sort exists only for a DAG” and since graph2 is not a DAG (since, it is cyclic) it must not have a toposort. | |||
| We can find the toposort using a modified dfs algorithm or kahn’s algorithm. | |||
| [Kahn’s algorithm][2] is discussed in the link and depends and utilizes | |||
| on calculating the indegree of all the vertices and using Queue (although it can also be written using an array). | |||
| Here is my implementation using Modified DFS and an array as a (kind-of) stack: | |||
| <div class="language-python highlighter-rouge"> | |||
| <pre class="highlight"><code><span class="k">def</span> <span class="nf">dfs_toposort</span><span class="p">(</span><span class="n">graph</span><span class="p">):</span> | |||
| <span class="n">L</span> <span class="o">=</span> <span class="p">[]</span> | |||
| <span class="n">color</span> <span class="o">=</span> <span class="p">{</span> <span class="n">u</span> <span class="p">:</span> <span class="s">"white"</span> <span class="k">for</span> <span class="n">u</span> <span class="ow">in</span> <span class="n">graph</span> <span class="p">}</span> | |||
| <span class="n">found_cycle</span> <span class="o">=</span> <span class="p">[</span><span class="bp">False</span><span class="p">]</span> | |||
| <span class="k">for</span> <span class="n">u</span> <span class="ow">in</span> <span class="n">graph</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="n">color</span><span class="p">[</span><span class="n">u</span><span class="p">]</span> <span class="o">==</span> <span class="s">"white"</span><span class="p">:</span> | |||
| <span class="n">dfs_visit</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">u</span><span class="p">,</span> <span class="n">color</span><span class="p">,</span> <span class="n">L</span><span class="p">,</span> <span class="n">found_cycle</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">found_cycle</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> | |||
| <span class="k">break</span> | |||
| <span class="k">if</span> <span class="n">found_cycle</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> | |||
| <span class="n">L</span> <span class="o">=</span> <span class="p">[]</span> | |||
| <span class="n">L</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span> | |||
| <span class="k">return</span> <span class="n">L</span> | |||
| <span class="k">def</span> <span class="nf">dfs_visit</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">u</span><span class="p">,</span> <span class="n">color</span><span class="p">,</span> <span class="n">L</span><span class="p">,</span> <span class="n">found_cycle</span><span class="p">):</span> | |||
| <span class="k">if</span> <span class="n">found_cycle</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> | |||
| <span class="k">return</span> | |||
| <span class="n">color</span><span class="p">[</span><span class="n">u</span><span class="p">]</span> <span class="o">=</span> <span class="s">"gray"</span> | |||
| <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">graph</span><span class="p">[</span><span class="n">u</span><span class="p">]:</span> | |||
| <span class="k">if</span> <span class="n">color</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">==</span> <span class="s">"gray"</span><span class="p">:</span> | |||
| <span class="n">found_cycle</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="bp">True</span> | |||
| <span class="k">return</span> | |||
| <span class="k">if</span> <span class="n">color</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">==</span> <span class="s">"white"</span><span class="p">:</span> | |||
| <span class="n">dfs_visit</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">color</span><span class="p">,</span> <span class="n">L</span><span class="p">,</span> <span class="n">found_cycle</span><span class="p">)</span> | |||
| <span class="n">color</span><span class="p">[</span><span class="n">u</span><span class="p">]</span> <span class="o">=</span> <span class="s">"black"</span> | |||
| <span class="n">L</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> | |||
| </code></pre> | |||
| </div> | |||
| The function <code class="highlighter-rouge">dfs_toposort</code> returns an empty array if there exists a cycle in the graph. | |||
| Also, it is important to note here that the topological sort need not be unique. (Hence, for competitive programming | |||
| problems it might be easier to find problems that involve checking if a given graph is a DAG or not; or if a sequence | |||
| satisfying the pre-req chain exists or not by detecting cycles). This is quite evident once you realize that there might | |||
| be many 0-in-degree vertices that can lead the toposort result. | |||
| You can also see [Erik Demaine’s][3] lecture on this topic given for MIT 6.006 | |||
| [1]: https://ece.uwaterloo.ca/~cmoreno/ece250/2012-03-16--topological-sort.pdf | |||
| [2]: http://www.geeksforgeeks.org/topological-sorting-indegree-based-solution/ | |||
| [3]: https://www.youtube.com/watch?v=AfSk24UTFS8 | |||
| @@ -0,0 +1,25 @@ | |||
| --- | |||
| title: Share WiFi via Ethernet on Gnome 3.20 | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-08-07T00:00:00+00:00 | |||
| url: blog/2016/08/07/share-wifi-via-ethernet-on-gnome-3-20/ | |||
| categories: | |||
| - foss | |||
| - notes | |||
| tags: | |||
| - fedora | |||
| - gnome | |||
| - linux | |||
| --- | |||
| There is a hidden method to share your WiFi over Ethernet in the latest Gnome. I stumbled upon this while trying to connect | |||
| my RaspberryPi 3B with my University’s Internet. | |||
| 1. Type <code class="highlighter-rouge">nm-connection-editor</code> in your terminal. | |||
| 2. Add a shared network connection by pressing the Add button. | |||
| 3. Choose Ethernet from the list and press Create. | |||
| 4. Click IPv4 Settings in the left. | |||
| 5. Choose <code class="highlighter-rouge">Shared to other computers</code> by clicking the Method drop-down menu. | |||
| 6. Enter a new name like <code class="highlighter-rouge">Shared WiFi LAN</code> as the Connection name at the top | |||
| @@ -0,0 +1,171 @@ | |||
| --- | |||
| title: Apache Allura – GSoC 2016 Summary | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-08-09T00:00:00+00:00 | |||
| url: blog/2016/08/09/apache-allura-gsoc-2016-summary/ | |||
| categories: | |||
| - gsoc | |||
| - projects | |||
| --- | |||
| This post has the summary of my work during GSoC 2016. Hopefully I was able to cover everything. You can also see my work on [forge-allura][1]. Also, you can visually see a list of my commits made during GSoC that also contains the miscellaneous work [here][2]. | |||
| ### Discussion Tool Changes {#discussion-tool-changes} | |||
| The idea behind this change was to promote discussions on the platform. Most conversations on the web are now displayed in a similar format. The replies to a comment are also now anchored to the left, i.e. don’t become shorter in length and are only shifted towards the left along with a smaller avatar. We have also moved away from shadows under the avatars since they do not match with the current design scheme. | |||
| The design enhances the username and avatar of the user to make it easier to recognize who has authored the comment. Also, the buttons used to interact in the discussion are now displayed on the upper right side. Also, there is now a unified design theme for all buttons including the moderation buttons. These set of buttons can easily be extendened in the future as well. This also makes more space available for the content. Images now do not overflow outside these bubbles and fit inside the bubbles. | |||
| ![Design Example of Discussion][3] | |||
| Another prominent change is how we now display attachments. There is now a dedicated download and delete button for all attachments and an icon beside the file name displaying the type of attachment. | |||
| Support for viewing the photo attachments has also been added by clicking on the image thumbnail inside the attachment box. | |||
| ![Preview Images][4] | |||
| There has also been a change in how we display meta posts which share information rather than conversational text that is generated by the interaction of the user with the tools. These are not highlighted and uses smaller fonts so it is easier for the eyes to find real content and also distinguish between meta information and the same. | |||
| ![Meta Posts][5] | |||
| You can also use Unicode Emoji’s within the discussion tool and they will be rendered as Twitter Style Emoji. This is very useful since we now have support for displaying the emoji even if the user don’t have the proper font’s to render them in his browser. | |||
| ![Imgur][6] | |||
| Emoji Support enables users to use their devices emoji input keyboards and enter data. Also, now teams can use a simple Thumbs Up emoji instead of writing words to express themselves. | |||
| You can view the results live on [SourceForge][7] as well. | |||
| ### Improved Landing Page {#improved-landing-page} | |||
| ![Imgur][8] | |||
| We now have a better landing page. A landing page is forms the first impression for the tool. Although, if you are probably using SourceForge, your landing page might be the Project Catalog. | |||
| Now we list all the neighborhoods in a block showing it’s logo along with the name and number of projects it contains. | |||
| It makes it easier to digest the concept of neighborhoods for users who are used to something similar to Github or GitLab. | |||
| ### Minor Improvements in Ticket Listing and Search {#minor-improvements-in-ticket-listing-and-search} | |||
| Now you can resize the length of the columns in the ticket listing. | |||
| ![Resize][9] | |||
| Also you can now click on the username in the Owner column to view all tickets that have been assigned to that user directly from the ticket listing. | |||
| ### Merge Request Flow Improvements {#merge-request-flow-improvements} | |||
| Now we show a link to Merge Requests listing in the side panel in all tools that support them even if none have been created. | |||
| ![List if zero][10] | |||
| Also the filtering of merge requests have changed a bit. Now we have a new set of filter buttons that we use to filter the merge requests that are either open, rejected, merged. | |||
| ![Filter MRs][11] | |||
| Also, there are now dedicated buttons matching the Forge theme that you can use to manage your merge requests. We now have an array of buttons and a text message that displays the status of the merge conflicts and if a one click merge is possible if you have access to that information. Users with correct priveleges can also click on the Reject button to reject and close the MR in two clicks including a confirmation dialog. | |||
| Also, you can now Refresh the commits without having to manually edit the merge request, saving 4-5 clicks using the Refresh Commits button. | |||
| ![Imgur][12] | |||
| ### What could not be completed or was not done {#what-could-not-be-completed-or-was-not-done} | |||
| #### Implement async loading of comments and allow them to be paginated. {#implement-async-loading-of-comments-and-allow-them-to-be-paginated} | |||
| This was not implemented since there would be a loss in the traffic for the discussions. This would have a huge impact in search rankings for comments since crawlers don’t index async loaded comments and searching for problems on the internet is a very important way to reach this content. Suppose you have a problem you have faced with TexStudio software and search about it on a search engine and someone else has also reported a problem on it’s bug tracker then if it is not indexed in the search engine we will not be able to find it on the search results. | |||
| #### Make Allura Responsive {#make-allura-responsive} | |||
| This is something which I worked on for atleast 2 weeks and trying to find the most optimal solution. Even before starting there was some doubt about the feasability. But my final decision was that it is not feasible to do. This was due to the fact that there is no way to move to a fully functional mobile experience without altering the current structure of the project. The best way forward would be to move to bootstrap or some similar project. Also, this way we would be able to have a good enough way to move forward with the project. | |||
| The first major problem I faced was keeping intact the design so that it does not break SourceForge. | |||
| My first approach was to change the current method of using viewport based widths instead of fixed pixel widths. | |||
| My next approach was to add media queries and then change the pixel values accordingly. | |||
| Next I tried to use the method suggested by mentor to detect if we have a mobile browser and display a different template. This works, but is of no use if all the templates are not modified. So for testing I edited the width of the holders to the viewport size but then I realized if the inside is not also properly updated it would be of no use. Also all tests relating to that component would fail. | |||
| So I moved on to work on other parts of the project. | |||
| #### Extend the models in the threads to allow voting(express +1, LGTM etc.) on individual comments. {#extend-the-models-in-the-threads-to-allow-votingexpress-1-lgtm-etc-on-individual-comments} | |||
| There were two ways I tried to implement this. | |||
| First was to add a thumbs up button on the menu of the discussion bubble along side reply. | |||
| ![Imgur][6] | |||
| Clicking that button adds a meta post as a reply to the post. But it looks ugly and does not seem useful. | |||
| ![Plus 1][13] | |||
| The other method was to try to make the artifact votable but here the problem was that I could not get it to work as per my thought of how it should look and work. In this way I wanted a menu on the bottom. | |||
| The code for all of these unimplemented work is available on my forked repo on forge-allura [here][14]. You can find all the branches with the unimplemented work mentioned here as well as other experiments. (My Branches begin with <code class="highlighter-rouge">feature</code> or <code class="highlighter-rouge">rhnvrm/</code>) | |||
| ### Other Cool Stuff I did related to Allura {#other-cool-stuff-i-did-related-to-allura} | |||
| #### Makefile to install Allura with one command {#makefile-to-install-allura-with-one-command} | |||
| You can now install Allura very easily if you don’t have docker or are not able to use it due to some reason | |||
| <https://forge-allura.apache.org/u/rhnvrm/allura-install/> | |||
| 1. Set up your [digital ocean][15] account and spin up a new <code class="highlighter-rouge">Ubuntu 14.04</code> droplet. | |||
| 2. SSH into your droplet’s root <code class="highlighter-rouge">ssh root@<DO_id></code> and | |||
| clone the repository using <code class="highlighter-rouge">git clone https://[email protected]/git/u/rhnvrm/allura-install</code> | |||
| 3. Change your working directory into the cloned repository. <code class="highlighter-rouge">cd allura-install</code> | |||
| 4. Install <code class="highlighter-rouge">git</code> and <code class="highlighter-rouge">make</code> using <code class="highlighter-rouge">apt-get install git make</code> | |||
| 5. Run <code class="highlighter-rouge">make install</code> | |||
| #### Installed Allura on a RaspberryPi B {#installed-allura-on-a-raspberrypi-b} | |||
| To show how it can even be run on a low powered device I installed Allura for me and my friends on a RPi 3B model. | |||
| There were various problems that I faced during installation due to it being an ARM based device. I first tried to install using docker since it was easier but after installing docker and docker-compose from hyperiot I soon realized that it was not possible as it is ARM based and we don’t provide docker support for that. | |||
| Here the makefile was very useful. Although I did not use it directly but I atleast had an idea how to install Allura step by step instead of having to re read the manual again and again. | |||
| ![Imgur][16] | |||
| #### Deployed Allura for my University {#deployed-allura-for-my-university} | |||
| Using the Raspberry Pi I am planning to deploy it for my university for using it for our Coding Club and also for internal usage. I have emailed my department and am hoping for a positive response. | |||
| #### Setup and hosted a small Allura Instance for testing on Digital Ocean {#setup-and-hosted-a-small-allura-instance-for-testing-on-digital-ocean} | |||
| During GSoC I ran Allura on a droplet for testing since my old laptop was having some issues with it’s graphics card. I was able to use a netbook and vim to test my changes on the droplet until I got my new laptop. | |||
| ### ShoutOut to tools that I used during GSoC {#shoutout-to-tools-that-i-used-during-gsoc} | |||
| 1. ZimWiki | |||
| 2. PyCharm | |||
| 3. Vim | |||
| 4. Digital Ocean | |||
| 5. Docker | |||
| 6. Pomodoro Timer App for Gnome | |||
| 7. Postman | |||
| 8. HexChat | |||
| 9. Imgur for hosting the image album (<https://imgur.com/a/r2oPI>) | |||
| [1]: https://forge-allura.apache.org/p/allura/git | |||
| [2]: https://github.com/apache/allura/commits/f403b8c4e44f2065e4d4529050d499252e914f25?author=rhnvrm | |||
| [3]: https://i.imgur.com/4gmxwcL.png | |||
| [4]: https://i.imgur.com/Qw2g7at.png | |||
| [5]: https://i.imgur.com/Ch77UNq.png | |||
| [6]: https://i.imgur.com/LoTab39.png | |||
| [7]: https://sourceforge.net/p/texstudio/bugs/1872/ | |||
| [8]: https://i.imgur.com/kvul0nB.png | |||
| [9]: https://i.imgur.com/iC3fGex.gif | |||
| [10]: https://i.imgur.com/tfTkcjR.png | |||
| [11]: https://i.imgur.com/izu38m5.png | |||
| [12]: https://i.imgur.com/rkjlglc.png | |||
| [13]: https://i.imgur.com/GycKCDW.png | |||
| [14]: https://forge-allura.apache.org/u/rhnvrm/allura/ref/master/branches/ | |||
| [15]: http://digitalocean.com | |||
| [16]: https://i.imgur.com/2VdVmnN.jpg | |||
| @@ -0,0 +1,13 @@ | |||
| --- | |||
| title: Hello WordPress | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-10-20T19:09:37+00:00 | |||
| url: blog/2016/10/20/hello-wordpress/ | |||
| categories: | |||
| - uncategorized | |||
| --- | |||
| <img class="alignleft" src="https://cdn.meme.am/instances/500x/66616518.jpg" width="214" height="214" />I’m back to using WordPress from Jekyll. I followed <a href="http://davidlynch.org/url: blog/2016/01/migrating-from-jekyll-to-wordpress/" target="_blank">David Lynch’s blog post</a> to import my posts from the jekyll blog hosted on github.io | |||
| Although, I did not use the plugins made by him, they might be useful if you had a lot of Disqus comments in your blog. | |||
| @@ -0,0 +1,35 @@ | |||
| --- | |||
| title: Labeled Tweet Generator and Galaxy Image Classifier featured in Sirajology’s Youtube Videos | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-10-22T18:57:59+00:00 | |||
| url: blog/2016/10/22/labeled-tweet-generator-and-galaxy-image-classifier-featured-in-sirajologys-youtube-videos/ | |||
| categories: | |||
| - projects | |||
| --- | |||
| I have been learning about machine learning and data science recently. Coincidentally, I found this cool Youtube channel called Sirajology and I must recommend it to any one who has also just begun his journey on this path like me. Each video has a challenge attached with it in the end. I participated in two of them by submitting my projects based on the specifications of the challenge and they were featured on the channel. | |||
| Siraj classified me as “Badass of the Week” in these videos. | |||
| The first project I made was a Galaxy Image Classifier (<https://github.com/rhnvrm/galaxy-image-classifier-tensorflow>), which I trained using a dataset I created myself. I believe the results could have been better if I had used better images. | |||
| It was based on this video: | |||
| <span class="embed-youtube" style="text-align:center; display: block;"></span> | |||
| And it was featured in the next video in the series: | |||
| <span class="embed-youtube" style="text-align:center; display: block;"></span> | |||
| The second project was a Labeled Tweet Dataset Generator (<https://github.com/rhnvrm/labeled-tweet-generator>). Using this project, a datascientist can open <https://twitter-sentiment-csv.herokuapp.com/> and type his query in the searchbox and look at the results and if he is happy with them he can click the download as csv button to save them and work on it. | |||
| It was based on this video: | |||
| <span class="embed-youtube" style="text-align:center; display: block;"></span> | |||
| and was featured in this one: | |||
| <span class="embed-youtube" style="text-align:center; display: block;"></span> | |||
| | |||
| @@ -0,0 +1,17 @@ | |||
| --- | |||
| title: Just installed a new theme for the blog… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-10-31T23:17:15+00:00 | |||
| url: blog/2016/10/31/just-installed-a-new-theme-for-the-blog/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - ajax | |||
| - wordPress | |||
| format: status | |||
| --- | |||
| Just installed a new theme for the blog called P2. I’m using a child theme called Mercury. Also installed and played with a bunch of plugins. Want to try micro blogging and also live blogging during my coding sessions. | |||
| Also, learnt that AJAX requests don’t seem to work behind proxies. P2 sends an initial Ajax request when you click on post from the front-end and it was failing, scourged the internet but couldn’t find a solution. So lesson learnt that you should always try a different device in such cases early on. | |||
| @@ -0,0 +1,26 @@ | |||
| --- | |||
| title: 'Today’s git tip In gitconfig url git@github…' | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-11-01T09:45:37+00:00 | |||
| url: blog/2016/11/01/todays-git-tip-in-gitconfig-url-gitgithub/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - git | |||
| format: quote | |||
| --- | |||
| Today’s git tip | |||
| In .gitconfig: | |||
| [url “[email protected]:”] | |||
| insteadOf = gh: | |||
| Now you can do, eg: | |||
| $ git clone gh:kisielk/errcheck | |||
| <cite>https://twitter.com/kisielk/status/793133952542191616</cite> | |||
| @@ -0,0 +1,16 @@ | |||
| --- | |||
| title: I wonder what Linus Torvald’s view is about… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-11-02T16:44:09+00:00 | |||
| url: blog/2016/11/02/i-wonder-what-linus-torvalds-view-is-about/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - git | |||
| format: link | |||
| --- | |||
| I wonder what Linus Torvald’s view is about “Gitless” | |||
| https://news.mit.edu/2016/gitless-making-it-easier-to-collaborate-on-code-1025 | |||
| @@ -0,0 +1,14 @@ | |||
| --- | |||
| title: A tip on using fsck when you are… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-11-07T22:24:09+00:00 | |||
| url: blog/2016/11/07/a-tip-on-using-fsck-when-you-are/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - linux | |||
| format: status | |||
| --- | |||
| A tip on using fsck when you are stuck in emergency mode. Whenever you are using \`fsck -y\` and it does not allow you to run because a certain device (say /dev/sdaX) is mounted, it does not mean you can’t run \`fsck -y /dev/sdaY\`. That is you don’t unmount that device. | |||
| @@ -0,0 +1,15 @@ | |||
| --- | |||
| title: Feeling excited about attending ApacheCon Big Data and… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-11-08T17:41:10+00:00 | |||
| url: blog/2016/11/08/feeling-excited-about-attending-apachecon-big-data-and/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - aceu16 | |||
| - allura | |||
| format: status | |||
| --- | |||
| I’m excited about attending ApacheCon Big Data and ApacheCon 16 at Seville, Spain. Only a few days are left. Talked with my mentor at Apache Allura, @brondsem today about his experiences at ApacheCon NA Denver 14 and what all I could do at ACEU 16. We’re hoping for improving the exposure of Apache Allura within the Apache community and trying to get some projects in the incubator to try Allura. I’ll try to present a lightning talk and host a demo session for Allura at the conference. Also, my work on the importer begins again tomorrow and hopefully it will be done before reaching Spain. Will share updates on this blog. | |||
| @@ -0,0 +1,28 @@ | |||
| --- | |||
| title: Some journal publications require you to put author… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-11-09T16:59:35+00:00 | |||
| url: blog/2016/11/09/some-journal-publications-require-you-to-put-author/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - latex | |||
| format: status | |||
| --- | |||
| Some journal publications require you to put author biography for each author with their pictures. For this I found the _picins _package. To install this package you can run the following commands | |||
| <pre class="brush: bash; title: ; notranslate" title="">sudo mkdir /usr/share/texmf/tex/latex/picins</pre> | |||
| <pre class="brush: bash; title: ; notranslate" title="">sudo wget -O /usr/share/texmf/tex/latex/picins/picins.sty http://ctan.imsc.res.in/macros/latex209/contrib/picins/picins.sty http://mirrors.ctan.org/macros/latex209/contrib/picins/picins.sty</pre> | |||
| <pre class="brush: bash; title: ; notranslate" title="">sudo /usr/bin/texconfig rehash</pre> | |||
| <div> | |||
| So, then you can use the following latex code for biography of an author: | |||
| </div> | |||
| <pre class="brush: latex; title: ; notranslate" title="">\parpic{\includegraphics[width=1in,clip,keepaspectratio]{figures/photo.eps}} | |||
| \noindent {\bf Lorem Ipsum} dolor sit amet, consectetur adipiscing elit. Vivamus at nulla velit. Aliquam neque purus, porta sit amet sodales non, scelerisque eu nibh. Nulla posuere accumsan dui nec dictum. Aliquam erat volutpat. Aliquam erat volutpat. In tristique, dolor et dignissim eleifend, diam eros sollicitudin odio, at consequat sapien odio nec velit. Aenean vel mi lacinia, viverra lorem et, venenatis velit. Duis fringilla purus nec tortor efficitur vestibulum. Donec vitae viverra diam, scelerisque bibendum magna. Nunc fringilla lobortis pharetra. Sed rhoncus arcu eget porta euismod. Vestibulum scelerisque, enim id condimentum sagittis, magna enim faucibus tortor, non volutpat tortor ipsum nec augue. Duis faucibus molestie dui, gravida vehicula ante porttitor et. Integer hendrerit ligula id magna ornare vestibulum. | |||
| </pre> | |||
| @@ -0,0 +1,18 @@ | |||
| --- | |||
| title: Reached the Melia Sevilla Spain tonight Pretty excited… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-11-12T21:42:21+00:00 | |||
| url: blog/2016/11/12/reached-the-melia-sevilla-spain-tonight-pretty-excited/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - aceu16 | |||
| format: status | |||
| --- | |||
| Reached the Melia Sevilla, Spain tonight. Pretty excited about ApacheCon. Am planning on finalizing the presentations about Allura by tomorrow night and discuss them with @brondsem on Monday. | |||
| It was a long trip to Sevilla via Madrid and London with @gauravsaini03, he will be speaking about Apache OFBiz which is a complete enterprise solution. | |||
| Met Dr Paul King(@paulk_asert), who is working on Apache Groovy and has worked on the “Groovy in Action” book by Manning publications. He has 3 back to back talks lined up at ApacheCon on Thursday about Groovy. | |||
| @@ -0,0 +1,18 @@ | |||
| --- | |||
| title: Toured Seville today thanks to https www feelthecitytours… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-11-13T22:12:21+00:00 | |||
| url: blog/2016/11/13/toured-seville-today-thanks-to-https-www-feelthecitytours/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - aceu16 | |||
| format: status | |||
| --- | |||
| Toured Seville today thanks to https://www.feelthecitytours.com/en/tours/sevilla/ . They are an amazing company with a great tour of this beautiful city. Got to learn a lot about the city along with a bunch of great stories about the city. One of them was the story of Carmen (http://www.geocities.jp/wakaru_opera/englishcarmen.html) which is a pretty nice story. | |||
| The TAC meeting was pretty nice and was followed by the TAC team dinner at a Tapas restaurant. | |||
| Excited about the first day tomorrow. | |||
| @@ -0,0 +1,96 @@ | |||
| --- | |||
| title: Day 1 – ApacheCon Big Data, Seville 2016 | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-11-14T21:59:52+00:00 | |||
| url: blog/2016/11/14/day-1-apachecon-big-data-seville-2016/ | |||
| categories: | |||
| - apache | |||
| tags: | |||
| - aceu16 | |||
| --- | |||
| It was fun to volunteer for today’s sessions at Apache Big Data 2016. My responsibilites included helping the speakers setup their laptops and introduce them to the audience, keep time and remind them when time was running short, and finally helping out with the Q&A at the end. I also liveblogged the sessions via twitter and interacted with the speakers as most of the sessions were of my choice as the volunteer team had a shared spreadsheet on which we could choose our sessions in a first come first serve manner. | |||
| The day began with the Keynote sessions at 9:30. Rich Bowen started the conference with his opening remarks followed by Stephan Ewen and Alan Gates who gave their talks.<figure class="embed-gphotos wp-caption"> | |||
| <a href="https://photos.google.com/share/AF1QipOEFJFeB19y-UtTlbVK-2ehuK8gR8x2UXTv2yMqI99GkaROfkoTw96JwDKXClDoDw?key=ckFJMml1VGdiLUtTdl9BV1VVNF9Lbjd1c2k4bWd3" target="_blank"><img src="https://lh3.googleusercontent.com/czAeIBz1XvS4cX3yC28wGJBhk4oolMcYlUTkvamzhbJxAfs0w3zSgcLFQIII0Lth-GTS4DN27J0hkt1cmD689SwZCSUKT46bINLgs_bT26zBA9ep_VH5dWFLshcmCMEEZ9kBp21IWbA=w640-h960" width="640" height="360" /></a><figcaption class="wp-caption-text"><a href="https://photos.google.com/share/AF1QipOEFJFeB19y-UtTlbVK-2ehuK8gR8x2UXTv2yMqI99GkaROfkoTw96JwDKXClDoDw?key=ckFJMml1VGdiLUtTdl9BV1VVNF9Lbjd1c2k4bWd3" target="_blank">New photo by Rohan Verma / Google Photos</a></figcaption></figure> | |||
| A small coffee break followed the keynote in which the TAC team met and all us of started to prepare for the breakout sessions that run in parallel in different conference rooms. | |||
| The first session I attended was about Apache Gearpump. It’s an interesting project and is a realtime big data streaming engine. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Talk on Apache Gearpump going on in Arenal 1 <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> Seville <a href="https://t.co/YxUxz9olVq">pic.twitter.com/YxUxz9olVq</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/798106997216395264?ref_src=twsrc%5Etfw">November 14, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| The second session was interesting and I got to learn a lot more about Apache Solr. I learnt about Faceting which was new to me and I feel would be very useful for projects that use Solr. Even Apache Allura might be able to use it somewhere, but for this I will have to think where it can be used. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Talk by <a href="https://twitter.com/anshumgupta?ref_src=twsrc%5Etfw">@anshumgupta</a> on <a href="https://twitter.com/ApacheSolr?ref_src=twsrc%5Etfw">@ApacheSolr</a> going on in Giralda V at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://twitter.com/hashtag/apachebigdata?src=hash&ref_src=twsrc%5Etfw">#apachebigdata</a> <a href="https://t.co/YqYggZtb2z">pic.twitter.com/YqYggZtb2z</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/798119936937906176?ref_src=twsrc%5Etfw">November 14, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| The next session was one which I was very interested in as I had worked on a similar project called [Blip][1]. I talked to the presenter, Thomas Burgess and told him about it as well. Their company, [indoo.rs][2] has works on the same thing of providing indoor positioning services. They have even deployed it in San Francisco Airport. Right now they are researching about the same and trying to find new ways using Big Data analytics to reduce the time it takes to deploy these solutions and wish to create ways to make the process automated. They are also looking into using some seed data points and then extrapolating them using crowdsourcing. Hopefully, I will try to get in touch with them and discuss the research that is going on at our University regarding the same. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Talk on Crowd Learning for Indoor Navigation by <a href="https://twitter.com/thomastburgess?ref_src=twsrc%5Etfw">@thomastburgess</a> going on at Carmona at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://twitter.com/hashtag/apachebigdata?src=hash&ref_src=twsrc%5Etfw">#apachebigdata</a> <a href="https://t.co/IY6MoHrkhl">pic.twitter.com/IY6MoHrkhl</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/798135019793510400?ref_src=twsrc%5Etfw">November 14, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| Next, was a talk by Tim Park from Microsoft. I did not anticipate that this would turn out to be one of my favorite talks of today’s sessions since I had not read much about what was going to be talked about in this talk. It turned out to be great for me as I got to learn a lot and was able to connect the dots. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Talk on "Processing Planetary Sized Datasets" by <a href="https://twitter.com/timpark?ref_src=twsrc%5Etfw">@timpark</a> is going on in Carmona at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> Seville <a href="https://twitter.com/hashtag/apachebigdata?src=hash&ref_src=twsrc%5Etfw">#apachebigdata</a> <a href="https://t.co/uLgZbQFA5A">pic.twitter.com/uLgZbQFA5A</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/798172286268403712?ref_src=twsrc%5Etfw">November 14, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| Since, the previous session ended a bit early, I was able to goto the central banquet area where I was able to socilize with a few Apache people like Jean-Frederic Clere and talked about the Bar Camp. Also, talked to some of the speakers and atendees that I had interacted with during the events. | |||
| Afterwards, the last session I attended was about Druid and Apache Hive. It was also pretty good, but I did not have much knowledge about what was being covered. Although, looking at the demonstration I was able to figure out what had been discussed earlier and the benefits. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Talk on "Interactive Analytics at Scale in Apache Hive using Druid" by <a href="https://twitter.com/jcamachor?ref_src=twsrc%5Etfw">@jcamachor</a> is going on in Arenal 3/4 at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://twitter.com/hashtag/apachebigdata?src=hash&ref_src=twsrc%5Etfw">#apachebigdata</a> <a href="https://t.co/iOzTt1TYYa">pic.twitter.com/iOzTt1TYYa</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/798187812772163584?ref_src=twsrc%5Etfw">November 14, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| Hoping for a great day again tomorrow. | |||
| [1]: https://github.com/rhnvrm/iot-hackerearth | |||
| [2]: http://indoo.rs/ | |||
| @@ -0,0 +1,99 @@ | |||
| --- | |||
| title: Day 2 – ApacheCon Big Data, Seville | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-11-15T23:37:36+00:00 | |||
| url: blog/2016/11/15/day-2-apachecon-big-data-seville/ | |||
| categories: | |||
| - apache | |||
| tags: | |||
| - aceu16 | |||
| --- | |||
| The second day of ApacheCon BigData was also successful and amazing. It was a long day that started with the Keynotes by Mayank Bansal from Uber who explained Uber’s big data stack and how they scaled up. | |||
| The next keynote was by Sean Owen from Cloudera who explained how Apache is more than just another Github where people just dump their code. It’s a place for building the community. It was also nice to hear his shoutout to Apache Allura which he talked about to explain the diversity and the reach of the projects. He said how we usually just think of ASF as a place for the HTTPd and Big Data projects but it’s more than that and how there are projects as big as these projects like Apache Allura. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| <a href="https://twitter.com/hashtag/Apache?src=hash&ref_src=twsrc%5Etfw">#Apache</a> <a href="https://twitter.com/hashtag/Allura?src=hash&ref_src=twsrc%5Etfw">#Allura</a> was featured in today's keynote by <a href="https://twitter.com/sean_r_owen?ref_src=twsrc%5Etfw">@sean_r_owen</a> at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://twitter.com/brondsem?ref_src=twsrc%5Etfw">@brondsem</a> <a href="https://twitter.com/hashtag/apachebigdata?src=hash&ref_src=twsrc%5Etfw">#apachebigdata</a> <a href="https://t.co/cASRUYchyN">pic.twitter.com/cASRUYchyN</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/798451375873073152?ref_src=twsrc%5Etfw">November 15, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| Then, I attended the session on Distributed and Native Machine Learning using Apache Mahout by Suneel Marthi from Redhat. The talk was Math Intensive and demonstrated how easy it is for Data Scientists to forget about the implementation of the stack below and just write the code for their Data projects in their favorite language. He demonstrated how easy it is with Apache Mahout-Samsara to do distributed Linear Algebra with an example of the EigenFaces classification problem. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Talk on Native and Distributed Machine Learning with <a href="https://twitter.com/ApacheMahout?ref_src=twsrc%5Etfw">@ApacheMahout</a> by <a href="https://twitter.com/suneelmarthi?ref_src=twsrc%5Etfw">@suneelmarthi</a> going on at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> EU 2016 <a href="https://twitter.com/hashtag/apachebigdata?src=hash&ref_src=twsrc%5Etfw">#apachebigdata</a> <a href="https://t.co/4kw5vrT8Ma">pic.twitter.com/4kw5vrT8Ma</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/798468603611901952?ref_src=twsrc%5Etfw">November 15, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| Another interesting talk was given by Clemens Valiente from the Trivago Development team who explained his company’s big data stack and how they moved from simple Java platform to the Big Data stack that reduced their query time from 5 seconds to less than a second. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Talk on Large ScaleOpen Source Data Processing Pipelines at <a href="https://twitter.com/trivago?ref_src=twsrc%5Etfw">@trivago</a> at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://twitter.com/hashtag/apachebigdata?src=hash&ref_src=twsrc%5Etfw">#apachebigdata</a> <a href="https://t.co/yBo7kf12ZW">pic.twitter.com/yBo7kf12ZW</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/798497479482363904?ref_src=twsrc%5Etfw">November 15, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| Then I spent some time with Melissa and Gaurav at the Apache Software Foundation Booth at the Showcase Foyer. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Do visit the <a href="https://twitter.com/TheASF?ref_src=twsrc%5Etfw">@TheASF</a> booth at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://twitter.com/hashtag/apachebigdata?src=hash&ref_src=twsrc%5Etfw">#apachebigdata</a> <a href="https://t.co/TTDO0fAZKH">pic.twitter.com/TTDO0fAZKH</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/798497777630269440?ref_src=twsrc%5Etfw">November 15, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| Julien Nioche gave a talk on Low Latency Web Crawling using Apache Storm. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Talk on Low Latency Web Crawling on Apache Storm by @JulienNioche at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://twitter.com/hashtag/apachebigdata?src=hash&ref_src=twsrc%5Etfw">#apachebigdata</a> <a href="https://t.co/IwOgFXi6xt">pic.twitter.com/IwOgFXi6xt</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/798539193270071296?ref_src=twsrc%5Etfw">November 15, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| Julien Herzen presented Meerkat, which is a system built at Swisscom to do real-time anomaly detection on time series. Meerkat uses a combination of machine learning and big data technologies in order to trigger alerts in case of problems in Swisscom network. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Meerkat: Anomaly Detection as a Service by Julien Herzen at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://twitter.com/hashtag/apachebigdata?src=hash&ref_src=twsrc%5Etfw">#apachebigdata</a> <a href="https://t.co/UEOaYYiB5q">pic.twitter.com/UEOaYYiB5q</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/798549857392656386?ref_src=twsrc%5Etfw">November 15, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| | |||
| @@ -0,0 +1,105 @@ | |||
| --- | |||
| title: Day 3 – ApacheCon Barcamp and ApacheCon | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-11-16T23:05:05+00:00 | |||
| url: blog/2016/11/16/day-3-apachecon-barcamp-and-apachecon/ | |||
| categories: | |||
| - apache | |||
| tags: | |||
| - aceu16 | |||
| --- | |||
| The morning began with me waking up a little later. The previous night, we had the Attendee Reception. The BarCamp began around 10 AM. A barcamp is an ‘unconference’ with no set schedule, facilitated by those involved in various Apache projects. It was organized by Jean Fredric Clere and Sharon Foga. | |||
| You can learn more about the BarCamp at: | |||
| https://wiki.apache.org/apachecon/BarCampApacheSeville | |||
| Since, most people don’t know what a barcamp is and might be confused I’d suggest reading up about it on https://en.wikipedia.org/wiki/BarCamp | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| <a href="https://twitter.com/hashtag/ApacheCon?src=hash&ref_src=twsrc%5Etfw">#ApacheCon</a> barcamp (done) topics <a href="https://t.co/r1d0YrnoO3">pic.twitter.com/r1d0YrnoO3</a> | |||
| </p> | |||
| <p> | |||
| — jfclere (@jfclere) <a href="https://twitter.com/jfclere/status/798919173845950464?ref_src=twsrc%5Etfw">November 16, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| A big Thanks to <a href="https://twitter.com/jfclere?ref_src=twsrc%5Etfw">@jfclere</a> and Sharon for organizing the <a href="https://twitter.com/hashtag/apachebarcamp?src=hash&ref_src=twsrc%5Etfw">#apachebarcamp</a> at <a href="https://twitter.com/hashtag/ApacheCon?src=hash&ref_src=twsrc%5Etfw">#ApacheCon</a> yesterday! Got to demonstrate <a href="https://twitter.com/hashtag/ApacheAllura?src=hash&ref_src=twsrc%5Etfw">#ApacheAllura</a> <a href="https://t.co/e63p6x0EnP">https://t.co/e63p6x0EnP</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/799210590766043136?ref_src=twsrc%5Etfw">November 17, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| The discussions were were nice and insightful, from all the attendees. I gave a presentation on Apache Allura and also a demonstration on what all can be done using Allura. | |||
| Afterwards, we had the sessions of ApacheCon. I attended Jim Jagielski’s talk on Inner Sourcing. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| .<a href="https://twitter.com/jimjag?ref_src=twsrc%5Etfw">@jimjag</a> is talking about Inner Sourcing 101 at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://twitter.com/hashtag/ApacheCon?src=hash&ref_src=twsrc%5Etfw">#ApacheCon</a> EU 2016 <a href="https://t.co/vOewHmLm5L">pic.twitter.com/vOewHmLm5L</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/798882868395130880?ref_src=twsrc%5Etfw">November 16, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| Here are his slides. I would recommend them to anyone who is trying to build Open Communities. | |||
| After a small break, it was time for the day’s keynotes and ApacheCon to officially begin. Rich Bowen gave the Opening Remarks and welcomed all the attendees and the speakers to the next set of days of ApacheCon. Jim Jagielski gave the State of the Feather speech. I was amazed to learn so much more about the Apache Software Foundation and it’s resolve to put Community First before Code. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| State of the Feather being delivered by <a href="https://twitter.com/jimjag?ref_src=twsrc%5Etfw">@jimjag</a> at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://twitter.com/hashtag/apachecon?src=hash&ref_src=twsrc%5Etfw">#apachecon</a> <a href="https://t.co/p7q81Fud8v">pic.twitter.com/p7q81Fud8v</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/798919771622412288?ref_src=twsrc%5Etfw">November 16, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| This was the same day as Microsoft joined the Linux Foundation as a Platinum member which was also an organizer for ApacheCon and ApacheCon BigData 2016. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| .<a href="https://twitter.com/Microsoft?ref_src=twsrc%5Etfw">@Microsoft</a> joins the <a href="https://twitter.com/linuxfoundation?ref_src=twsrc%5Etfw">@linuxfoundation</a> the same day <a href="https://twitter.com/googlecloud?ref_src=twsrc%5Etfw">@googlecloud</a> joins the <a href="https://twitter.com/dotnetfdn?ref_src=twsrc%5Etfw">@dotnetfdn</a><a href="https://twitter.com/hashtag/StrongerTogether?src=hash&ref_src=twsrc%5Etfw">#StrongerTogether</a> 👏🎉😃 <a href="https://t.co/XYBlyw33kW">pic.twitter.com/XYBlyw33kW</a> | |||
| </p> | |||
| <p> | |||
| — francesc (@francesc) <a href="https://twitter.com/francesc/status/798913992836018176?ref_src=twsrc%5Etfw">November 16, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| Then we had the Lightning Talks. They were amazing, one of the most memorable lightning talk was given by someone who had made a drinking game out of code reviews. Another memorable one was given by Shane Curcuru about how he got involved with Apache and how others should do the same. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Get involved with Apache – lighting talk by <a href="https://twitter.com/shanecurcuru?ref_src=twsrc%5Etfw">@shanecurcuru</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/798936101138419716?ref_src=twsrc%5Etfw">November 16, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| | |||
| @@ -0,0 +1,103 @@ | |||
| --- | |||
| title: Day 4 – ApacheCon and The Apache Way | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-11-17T23:28:01+00:00 | |||
| url: blog/2016/11/17/day-4-apachecon-and-the-apache-way/ | |||
| categories: | |||
| - apache | |||
| tags: | |||
| - aceu16 | |||
| --- | |||
| On day 4, I attended the Apache Way track as I felt that I should get to know more about the ASF and how Apache works. I got to learn a lot and feel that this has paved my way to further get involved with Apache projects. The first session was a panel discussion having panel members from the ASF. It was hosted by Nick Burch and the panelists were members of the ASF. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Insightful Panel Session of <a href="https://twitter.com/TheASF?ref_src=twsrc%5Etfw">@TheASF</a> members at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> about Apache Way. <a href="https://twitter.com/gagravarr?ref_src=twsrc%5Etfw">@gagravarr</a> <a href="https://twitter.com/bdelacretaz?ref_src=twsrc%5Etfw">@bdelacretaz</a> Lars Eilebrecht <a href="https://twitter.com/skr?ref_src=twsrc%5Etfw">@skr</a> <a href="https://twitter.com/hashtag/ApacheCon?src=hash&ref_src=twsrc%5Etfw">#ApacheCon</a> <a href="https://t.co/tmmwZilW2K">pic.twitter.com/tmmwZilW2K</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/799174675192496128?ref_src=twsrc%5Etfw">November 17, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| > The “Apache Way” is the process by which Apache Software Foundation projects are managed. It has evolved over many years and has produced over 100 highly successful open source projects. It generally works well! But not always.. | |||
| > | |||
| > In this session, we’ll follow on from the theory, and look more on the practice of how it works. We’ll look more at cases when it has worked well! And when it has had problems. We’ll see more of the boundaries, the things that can be changed, and those that are fixed firm rules. We’ll see how businesses can get involved, and where project independence means they need to step back. Licensing, Trademarks, Decisions, Marketing, Infrastructure and more. | |||
| Then was the session by Wen Ming who talked about how they built a Tech Community in China using the Apache Way and discussed all the problems they faced while doing so. It was nice to hear how different places in the world face the problem of accepting that Open Source is as important as normal work. Most asian countries face this problem that employers expect their employees to work 24/7 on the work done at the company and work done beyond that is considered to be somewhat illegal. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| .<a href="https://twitter.com/_WenMing?ref_src=twsrc%5Etfw">@_WenMing</a> tasks about building Tech Community in China using the <a href="https://twitter.com/hashtag/Apache?src=hash&ref_src=twsrc%5Etfw">#Apache</a> Way at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://t.co/sJxFSQfxY1">pic.twitter.com/sJxFSQfxY1</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/799184296951037952?ref_src=twsrc%5Etfw">November 17, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| Then I attended Apache 2.4 Reverse Proxy talk by Jim Jagielski. He talked about the new and unique features of Apache httpd’s reverse proxy. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Apache 2.4 Reverse proxy by <a href="https://twitter.com/jimjag?ref_src=twsrc%5Etfw">@jimjag</a> at <a href="https://twitter.com/hashtag/ApacheCon?src=hash&ref_src=twsrc%5Etfw">#ApacheCon</a> Europe 2016 <a href="https://t.co/ahhMKBSCo6">pic.twitter.com/ahhMKBSCo6</a> | |||
| </p> | |||
| <p> | |||
| — Daniel Oh (@danieloh30) <a href="https://twitter.com/danieloh30/status/799204236038930432?ref_src=twsrc%5Etfw">November 17, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| After that there was a talk on how a company can capitalize and successfully profit from Apache Products and Brands by Shane Curcuru | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Talk on Successfully Profiting From Apache Projects And Brands – <a href="https://twitter.com/shanecurcuru?ref_src=twsrc%5Etfw">@shanecurcuru</a>, <a href="https://twitter.com/TheASF?ref_src=twsrc%5Etfw">@TheASF</a> at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://twitter.com/hashtag/ApacheCon?src=hash&ref_src=twsrc%5Etfw">#ApacheCon</a> <a href="https://t.co/IrPRkUJ4gq">pic.twitter.com/IrPRkUJ4gq</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/799222118852521984?ref_src=twsrc%5Etfw">November 17, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| Afterwards, there was a lunch break and following was a talk by Bertrand Delacretaz in which he posed the question about whether Software Quality is a Cultural Thing or not. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| .<a href="https://twitter.com/bdelacretaz?ref_src=twsrc%5Etfw">@bdelacretaz</a> talking about Software Quality – Is it a cultural thing? at <a href="https://twitter.com/hashtag/ApacheCon?src=hash&ref_src=twsrc%5Etfw">#ApacheCon</a> <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/799269448091893760?ref_src=twsrc%5Etfw">November 17, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| Then, we had the Attendee reception for ApacheCon. It was nice to interact with the attendees. | |||
| It was followed by the PGP key signing event. It was nice to get to meet many people and get verified by them. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Met lots of people at the PGP key signing at <a href="https://twitter.com/hashtag/ApacheCon?src=hash&ref_src=twsrc%5Etfw">#ApacheCon</a>. It was a very nice event. Thanks to <a href="https://twitter.com/jfclere?ref_src=twsrc%5Etfw">@jfclere</a> and <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@apachecon</a> for organizing 🙂 <a href="https://t.co/I6N8q5CcPv">pic.twitter.com/I6N8q5CcPv</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/799310172531425280?ref_src=twsrc%5Etfw">November 17, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| | |||
| @@ -0,0 +1,113 @@ | |||
| --- | |||
| title: Day 5 – The final day of ApacheCon | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-11-18T23:52:10+00:00 | |||
| url: blog/2016/11/18/day-5-the-final-day-of-apachecon/ | |||
| categories: | |||
| - apache | |||
| tags: | |||
| - aceu16 | |||
| --- | |||
| The morning began with keynotes from Sebastian Blanc and Bertrand Delacretaz. After that I attended Jean Fredric Clere’s talk on HTTP/2 and SSL/TLS. He also demonstrated the new protocol and the extensions. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| .<a href="https://twitter.com/jfclere?ref_src=twsrc%5Etfw">@jfclere</a> speaking on HTTP/2 and SSL/TLS State of Art in Our Servers at <a href="https://twitter.com/hashtag/ApacheCon?src=hash&ref_src=twsrc%5Etfw">#ApacheCon</a> <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://t.co/olEkYsa15e">pic.twitter.com/olEkYsa15e</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/799556898789982208?ref_src=twsrc%5Etfw">November 18, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| Next, got to learn about security lessons from the Deserialization vulnerability in the Java Apache Commons Collections library and how prevalant they are by Tim Jarret. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| .<a href="https://twitter.com/tojarrett?ref_src=twsrc%5Etfw">@tojarrett</a> taking on Object Lessons: Deserialization After Apache Commons Collections – Tim Jarrett, Veracode at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://twitter.com/hashtag/ApacheCon?src=hash&ref_src=twsrc%5Etfw">#ApacheCon</a> <a href="https://t.co/Hfz4izfnIn">pic.twitter.com/Hfz4izfnIn</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/799569530112479232?ref_src=twsrc%5Etfw">November 18, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| After that was a talk on “If you build it, They won’t come” by Ruth Suehle. She talked about how UI/UX and documentation can make or break open source projects. She presented various examples of small and large open source projects. She also analyzed [Apache Infra’s new website][1] that will be coming up soon. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| .<a href="https://twitter.com/suehle?ref_src=twsrc%5Etfw">@suehle</a> is giving her talk on If You Build It, They Won't Come at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://twitter.com/hashtag/ApacheCon?src=hash&ref_src=twsrc%5Etfw">#ApacheCon</a> <a href="https://t.co/hn1JpOE1JS">https://t.co/hn1JpOE1JS</a> <a href="https://t.co/0eZ1GaxStF">pic.twitter.com/0eZ1GaxStF</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/799588483480322049?ref_src=twsrc%5Etfw">November 18, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| Next talk was from Rod Cope who talked about the need to build Offline First apps and presented some of the features of PouchDB/CouchDB. I got to learn about the new MongoDB and PouchDB and will try using that for my next projects. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| .<a href="https://twitter.com/RodCope?ref_src=twsrc%5Etfw">@RodCope</a> Speaking about going Offline First using tech like PouchDB at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://twitter.com/hashtag/ApacheCon?src=hash&ref_src=twsrc%5Etfw">#ApacheCon</a> <a href="https://t.co/pLduCRJcrT">pic.twitter.com/pLduCRJcrT</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/799622274257190912?ref_src=twsrc%5Etfw">November 18, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| The final talk was by fellow TACer Pedro Giffuni on how his experience with Random Numbers. One specific cool thing I took from his presentation were XORshift randomizers. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Talk by <a href="https://twitter.com/pgiffuni?ref_src=twsrc%5Etfw">@pgiffuni</a> on Random Numbers for Chaos in your Software <a href="https://t.co/NvhIfJek8F">https://t.co/NvhIfJek8F</a> at <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> <a href="https://twitter.com/hashtag/ApacheCon?src=hash&ref_src=twsrc%5Etfw">#ApacheCon</a> <a href="https://t.co/DmB8gYqFBe">pic.twitter.com/DmB8gYqFBe</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/799638530209284096?ref_src=twsrc%5Etfw">November 18, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| And finally, after this we had the TACers meet hosted by Mellissa and Cristofer Dutz where we talked about our experiences at the event. | |||
| In the end, I would like to thank the Apache Software Foundation, the Linux Foundation and the Apache Community for having me at the conference. Hope to keep connected with everyone I met at the conference and get more involved with the ASF. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Thanks for making ApacheCon Seville a great event. Join us in Miami, May 16-18 2017, for <a href="https://twitter.com/hashtag/ApacheCon?src=hash&ref_src=twsrc%5Etfw">#ApacheCon</a> North America. <a href="https://t.co/MLkvlAUIhp">https://t.co/MLkvlAUIhp</a> <a href="https://t.co/pydIXhsHLT">pic.twitter.com/pydIXhsHLT</a> | |||
| </p> | |||
| <p> | |||
| — ApacheCon (@ApacheCon) <a href="https://twitter.com/ApacheCon/status/799706248685953024?ref_src=twsrc%5Etfw">November 18, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Thanking the Apache community for a great <a href="https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw">@ApacheCon</a> under the guidance of <a href="https://twitter.com/rbowen?ref_src=twsrc%5Etfw">@rbowen</a> + production by <a href="https://twitter.com/linuxfoundation?ref_src=twsrc%5Etfw">@linuxfoundation</a>. See you in MIA in 2017! | |||
| </p> | |||
| <p> | |||
| — Apache – The ASF (@TheASF) <a href="https://twitter.com/TheASF/status/799981049316941824?ref_src=twsrc%5Etfw">November 19, 2016</a> | |||
| </p> | |||
| </blockquote> | |||
| | |||
| [1]: https://infra-test.apache.org/ | |||
| @@ -0,0 +1,12 @@ | |||
| --- | |||
| title: Getting ready for updating my system to Fedora… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-11-23T18:59:45+00:00 | |||
| url: blog/2016/11/23/getting-ready-for-updating-my-system-to-fedora/ | |||
| categories: | |||
| - uncategorized | |||
| format: status | |||
| --- | |||
| Getting ready for updating my system to Fedora 25. Updating and backing up Fedora 24. Side by side, studying for my final exams and trying to cope with submission deadlines. | |||
| @@ -0,0 +1,26 @@ | |||
| --- | |||
| title: I recently corrupted my zsh history and was… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-11-25T18:35:39+00:00 | |||
| url: blog/2016/11/25/i-recently-corrupted-my-zsh-history-and-was/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - zsh | |||
| format: status | |||
| --- | |||
| I recently corrupted my zsh history and was facing this error. | |||
| After a reboot, I started seeing a message when loading the shell: | |||
| zsh: corrupt history file /home/myusername/.zsh_history | |||
| I fixed it using: | |||
| mv .zsh\_history .zsh\_history_bad | |||
| strings .zsh\_history\_bad > .zsh_history | |||
| fc -R .zsh_history | |||
| @@ -0,0 +1,43 @@ | |||
| --- | |||
| title: OctoShark Browser Extension – DigitalOcean Cloud Hack Delhi Winner 2016 | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-11-29T01:03:43+00:00 | |||
| url: blog/2016/11/29/octoshark-hackathon/ | |||
| categories: | |||
| - projects | |||
| tags: | |||
| - google-chrome | |||
| - hackathon | |||
| - js | |||
| - python | |||
| --- | |||
| This product was built during the DigitalOcean Cloud Hack 2016 at 91springboard, Okhla New Delhi. These days, every cloud developer is using Docker. Docker has become the de-facto way for developers and system administrators to create lightweight images and deploy to cloud. A quick search on github returned more than 300,000 public projects with Dockerfiles. The idea behind OctoShark is to simplify the workflow of deploying and testing cloud projects. OctoShark aims to provide a one click solution to deploy any Docker Project directly to a new DigitalOcean Droplet. The OctoShark button would be visible on such github projects and it would allow users to spin up a server for that project in a jiffy. No developer now needs to think twice to test a project! Since OctoShark is a browser extension, it also provides real-time information about your existing droplets and enables you to perform actions on them. The most popular extension available online is deprecated because it was built to work with DO’s API V1 and not API V2. We believe with OctoShark, developers will be able to click and run the projects and not worry about anything else! We placed first in the Cloud Track in this hackathon.<figure id="attachment_123" style="width: 632px" class="wp-caption aligncenter"> | |||
| <img class="wp-image-123 size-large" src="/wp-content/uploads/2016/12/dohack-700x700.jpg" width="632" height="632" srcset="/wp-content/uploads/2016/12/dohack-700x700.jpg 700w, /wp-content/uploads/2016/12/dohack-150x150.jpg 150w, /wp-content/uploads/2016/12/dohack-300x300.jpg 300w, /wp-content/uploads/2016/12/dohack-768x768.jpg 768w, /wp-content/uploads/2016/12/dohack.jpg 960w" sizes="(max-width: 632px) 100vw, 632px" /><figcaption class="wp-caption-text">Team L to R – Karan Sharma, Rohan Verma, Manvendra Singh, Shubhang Arora, Vijay Nandwani</figcaption></figure> | |||
| ### [OctoShark Extension][1] | |||
| Our extension is built using the Kango Cross-Browser Extension Platform that connects GitHub with the DigitalOcean Platform. | |||
| It provides the user the ability to deploy projects having Dockerfile to a new Digital Ocean droplet in a single click and also see the status and manage the droplets using the extension. | |||
| ### [OctoShark Server][2] | |||
| The backend server of OctoShark on receiving a `GET` request on the `/create` endpoint creates a ubuntu docker’ droplet, clones the project into the droplet and builds the project using the Dockerfile. | |||
| ### Demo Video | |||
| <span class="embed-youtube" style="text-align:center; display: block;"></span> | |||
| ### Presentation Video | |||
| <span class="embed-youtube" style="text-align:center; display: block;"></span> | |||
| ### Future Work | |||
| Currently, we are planning on launching the extension on the Chrome Extension Store and Firefox and deploy the server on the Hasura platform using the credits that we won! | |||
| [1]: https://github.com/CapsLockHacks/OctoShark-Extension | |||
| [2]: https://github.com/CapsLockHacks/do-server | |||
| @@ -0,0 +1,14 @@ | |||
| --- | |||
| title: Sorting out my todo list for the next… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-12-12T20:19:26+00:00 | |||
| url: blog/2016/12/12/sorting-out-my-todo-list-for-the-next/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - misc | |||
| format: status | |||
| --- | |||
| Sorting out my todo list for the next 3 weeks. | |||
| @@ -0,0 +1,87 @@ | |||
| --- | |||
| title: Understanding the Undertones of Political Thought within the Politically Agnostic FOSS Movement | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-12-13T00:41:59+00:00 | |||
| url: blog/2016/12/13/understanding-the-undertones-of-political-thought-within-the-politically-agnostic-foss-movement/ | |||
| categories: | |||
| - projects | |||
| tags: | |||
| - foss | |||
| - gnu | |||
| - linux | |||
| - misc | |||
| - sociology | |||
| --- | |||
| ## **Introduction** | |||
| The Free and Open Source Software (FOSS) movement, which is now seen as an integral part of the technology sector, is now making its impact outside this domain in various dimensions. It has given rise to the three “Open” pillars – Open Source, Open Standards and Open Content. Ideas formulated during the rise of these new FOSS communities have been able to raise various questions about Intellectual Property, Information Production and other newly formulated concepts. In this paper, we will first discuss the history of FOSS and the creation of the two camps of the FOSS movement. It is important here to remind the reader that the word “Free” stands for free as in “Freedom” and not the economic freebie, but also to note that it has been carefully chosen to highlight that as well. We will analyze this bipartisan community and the implications of their ideology about freedom. Going ahead, we will discuss the copyleft licenses and it’s impact on intellectual property followed by the emerging future of the new ideologies. Although, FOSS developers and community members are agnostic about politics the aim of this paper is to bring out the underlying political thought behind this recent modern phenomenon. | |||
| ## History of FOSS | |||
| The concept of sharing technological information predates computers although this technology along with the internet have enabled sharing of information exponentially. Before the 1960s, most of the source code that was written was academic and usually available under the public domain. But with the advent of commercial software, came licenses for using and distributing software. In 1983, Richard Stallman started work on the GNU project to write a complete operating system free from any constraints on the usage of it’s source code. In 1985, Stallman published the GNU Manifesto and in 1989 he released the first version of the GNU General Public Licence (GPL) and it was the beginning of the Free Software Movement which would culminate with the creation of the Free Software Foundation (FSF). We should note here that the GNU GPL was a Copyleft license. It was a novel use of the existing copyright law that guaranteed the GPL licensed works to remain freely available even under derivative works and therefore saw extensive use by the community. As an aside, it is important to mention that this was one of the inspirations for the share-alike license provided by the Creative Commons which we will discuss ahead. There seems to be two major highlights for our discussion in context of this paper from Stallman’s work. First, being his definition of the “Free” in FOSS to be Free as in Freedom. The freedom he talks about is closer to the positive liberty – which according to Isaiah Berlin would be the possibility of acting and not the negative liberty. This positive liberty is attributed to the collective community behind the projects and the members of the community. Second, is his argument about the benefits of such projects. In essence, he breaks these benefits into the benefits to the contributors and the benefits to the community as a whole. His work has continued on to become one of the two major philosophies in the FOSS world. | |||
| The early 90s saw the rise of the permissive open source licenses, like the Apache License, that were commercially aligned. Permissive licenses allowed users to use these projects and modify them and earn profit without necessarily having to be bounded by the restrictions imposed by the GPL license. In 1999, Eric S Raymond published his essay about the two different software models, “The Cathedral and the Bazaar”. He describes the Cathedral model, in which source is available with each software release but code developed between the releases is restricted to an exclusive group of software developers whereas in the Bazaar model, code was being developed over the internet in view of the public. The bazaar model was only possible with the rise of the internet and now we see the emergence of a new human dynamic that is Peer to Peer which we discuss below. | |||
| In 1997, Netscape Navigator’s release of its source code, prompted Raymond and others to rethink about FSF’s social activism since it was not appealing to corporate companies and wanted to rebrand to highlight the business potential of sharing of source code. They adopted the label “open source” and the Open Source Initiative (OSI) was formed thereafter. | |||
| ## The Bipartisan Community | |||
| Two major philosophies exist today in the FOSS world today. Both are lead by the two major camps, the FSF camp and the OSI camp. According to the FSF, free software is meant to protect four user freedoms. They term programs that don’t give these freedoms to by “non-free”. Their argument here is that non-free programs control the users and this makes the program an instrument of unjust power. It is clearly evident how it shares a common vocabulary with Marx, when he talks about class struggle in the Communist Manifesto. Comparing the social groups identified by Marx, the Labour and the Capital, are comparable to the Users and the Developers. To give an example, computer programs developed by hobbyists in the 90’s grew into serious competitors to commercial software being produced by large companies. One such community project was the GNU/Linux operating system which is now one of the only competitors to the Microsoft Windows operating system. The question that the FSF’s philosophy was in a position to answer was what was whether the Windows ecosystem was ethical or not in its treatment of its users. | |||
| The FSF’s list of four freedoms are listed below: | |||
| ● The freedom to run the program as you wish, for any purpose (freedom 0). | |||
| ● The freedom to study how the program works, and change it so it does your computing as you wish (freedom 1). Access to the source code is a precondition for this. | |||
| ● The freedom to redistribute copies so you can help your neighbor (freedom 2). | |||
| ● The freedom to distribute copies of your modified versions to others (freedom 3). By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this. – (FOSS A General Introduction/Intellectual Property Rights and Licensing – Wikibooks) | |||
| It is hard not to notice the similarity between how this philosophy also calls for a certain set of negative freedoms in Isaiah Berlin’s terminology, just like Rawls lists out the primary goods for his first principle. Similar to Rawls use of arguments moral in nature to justify his argument, this philosophy is also justified on the basis of free software’s commitment to prevent limiting the freedom of others. The FSF’s main contention is the ethical use and creation of software, just like Rawls talks about the ethics of justice. | |||
| Another undertone that can be brought about by classifying the user as the labourer in Marxist terms allows us to understand is how free software is in a position to reduce the alienation between the users and the developers. Technology that is designed as a “black box” makes the user to be left without any influence over the functions that the machinery imposes. | |||
| OSI’s philosophy is a bit different from the FSF. They say, “When programmers can read, redistribute, and modify the source code for a piece of software, the software evolves. People improve it, people adapt it, people fix bugs. And this can happen at a speed that, if one is used to the slow pace of conventional software development, seems astonishing.” OSI is more focused on the technical values that make software powerful, reliable and business friendly. It bypasses FSF’s moral views on the subject and focuses on the practical advantages offered by FOSS’s distributed development model. Just like how Robert Nozick critiqued Rawls work, a similar argument like Nozick’s critique of pattern based principles can be extended to critique the FSF moral stand by the OSI. | |||
| Even though both FSF and OSI differ immensely in their fundamental philosophy, they both share the same space and cooperate on their common goal. Richard Stallman has himself said that they both are like two political parties in the same community. | |||
| ## Analyzing Copyleft and Intellectual Property | |||
| One of the biggest achievements of the FOSS movement is the Copyleft license. The purpose of the license as discussed above was to protect the four essential freedoms. Putting Copyleft in layman’s terms, it is a rule that when a program is redistributed, it must not add restrictions that deny others the four central freedoms. It has been successful in rupturing the naturalized form of intellectual property by inverting its singular by using intellectual property itself. This is similar to Marx’s inversion of Hegelian idealism, which retained Hegel’s dialectical method to repose history not as an expression of the “Absolute Idea” but as humanity’s collective creation through labor. By utilizing the existing copyright law, copyleft has been in a position to tell us that we are not mere subjects of an unchangeable law but in turn we can actually create and modify the laws to serve other ends. FOSS licenses can be understood as constitutions that serve to credit the researchers, protect them from liability, and then let people do what they want with the product. | |||
| Nowadays, a free software user and developer is confronted with a choice of licenses and moral codes. This choice, although, requires prioritizing one group’s freedoms over another. This ethical dilemma can be resolved by favoring the copyleft licenses as they have a better facilitation of freedoms, a broader appeal to the community, and their commitment to an ethical vision for the future. Hobbes is known to have famously defined freedom as the absence of restriction. Political thought from Aristotle to Heidegger has been at odds to differentiate freedom from license. Isaiah Berlin’s characterization of positive freedom as an alternative and negative freedom as the absence of restriction is again valuable here. There is often a critique of positive freedoms called the “paradox of economic freedom” where unfettered freedoms in the form of removing all restrictions on the rich would result in the total exploitation of the poor, and thereby their subsequent loss of economic freedoms. Similarly, non-copyleft licenses, although operating to grant protection, inevitably fail to provide any means against the exploitation possible. | |||
| ## Peer Production and the Gift Economy | |||
| Peer to Peer (P2P) is a newly emerging human dynamic which is giving rise to a third mode of production, governance and property. It is poised to have deeper impacts, even more than the impact of Marx’s identification of the manufacturing plants of Manchester as the blueprint for the new capitalist society. To understand what P2P is, we must first understand P2P processes. These processes produce use-value through the free cooperation of producers who have access to distributed capital and it is termed as the P2P production mode. These processes are governed by the producers themselves and make the use-value freely accessible universally. These processes occur in distributed networks where there is decentralization like the internet. P2P is often incorrectly described as a Gift Economy. This is because it is not based on equality matching but on reciprocity. Taking inspiration from Marx’s slogan “From each according to his ability, to each according to his needs” P2P does not involve obligatory reciprocity. Each contributes according to his capacities and willingness and each takes according to one’s needs. In the purest form of Peer Production, producers do not get any payment. P2P processes and P2P as a model itself might be important to read and understand and question as it might slowly but eventually be a factor for future economies and social policies. Take into account the emerging welfare states which might be able to sustain such individuals who partake in P2P processes since the current form of the economy cannot. | |||
| ## Creative Commons | |||
| The commons movement, another much recent phenomenon, is centered on the idea of creating public goods to reinvigorate democratic principles. FOSS has enabled like-minded projects in art, law, and science to release all their archives under a Creative Commons license. Commons are universally available and regulated by global cyber collectives. A license called the “Share-Alike” licenses provides a similar to the Copyleft licenses that allows redistribution and derivative works only if they are also released under a commons license. This commons phenomenon is in contrast to the Communal lands of the past which were localized and regulated by communities usually limited by location. Creative Commons have therefore given an example of the spreading of the ideology generated by the FOSS movement might eventually lead to a different future. | |||
| ## Summary | |||
| The Open Source Initiative’s efforts to popularize free software by divorcing it from politics seek to increase greater acceptance among corporate developers has although increased the exposure of FOSS to the world. Although, with this divorce, the underlying and foundational political and ethical message have been lost into the underground. Therefore, it is important to not forget these underlying message of liberty and revolution created by the origins of the FOSS movement. | |||
| ## Works Cited | |||
| * Benkler, Yochai, and Helen Nissenbaum. “Commons-based Peer Production and Virtue.” Journal of Political Philosophy 14.4 (2006): 394-419. Print. | |||
| * Berlin, Isaiah. “Two Concepts of Liberty.” Liberty (2002): 166-217. Print. | |||
| * Chopra, Samir, and Scott Dexter. Decoding Liberation: The Promise of Free and Open Source Software. New York: Routledge, 2008. Print. | |||
| * Cohen, G. A. Karl Marx’s Theory of History: A Defence. Princeton: Princeton UP, 1978. Print. | |||
| * Coleman, Gabriella. “The Political Agnosticism of Free and Open Source Software and the Inadvertent Politics of Contrast.” Anthropological Quarterly 77.3 (2004): 507-19. Print. | |||
| * “Copyleft vs. Copyright: A Marxist Critique | Söderberg | First Monday.” Copyleft vs. Copyright: A Marxist Critique | Söderberg | First Monday. Web. 11 Dec. 2016. | |||
| * “FOSS A General Introduction/Intellectual Property Rights and Licensing.” FOSS A General Introduction/Intellectual Property Rights and Licensing – Wikibooks, Open Books for an Open World. Web. 11 Dec. 2016. | |||
| * “FOSS A General Introduction/Introduction.” FOSS A General Introduction/Introduction – Wikibooks, Open Books for an Open World. Web. 11 Dec. 2016. | |||
| * “The Open Source Initiative” About | Open Source Initiative. Web. 11 Dec. 2016. | |||
| * Nozick, Robert. Anarchy, State, and Utopia. New York: Basic, 1974. Print. | |||
| * Rawls, John. A Theory of Justice. Cambridge, MA: Belknap of Harvard UP, 1971. Print. | |||
| * Weber, Steve. The Success of Open Source. Cambridge, MA: Harvard UP, 2004. Print. | |||
| * “Gnu.org.” The GNU Operating System and the Free Software Movement. Web. 11 Dec. 2016. | |||
| _This was a term paper I submitted for a course titled “Intro to Political Thought” at SNU under [Prof. Shekhar Singh][1]._ | |||
| [1]: http://snu.edu.in/humanitiessocialsciences/shekhar_singh_profile.aspx | |||
| @@ -0,0 +1,19 @@ | |||
| --- | |||
| title: At last I am now on Fedora 25… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-12-14T14:10:25+00:00 | |||
| url: blog/2016/12/14/at-last-i-am-now-on-fedora-25/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - linux | |||
| - misc | |||
| format: status | |||
| --- | |||
| At last, I am now on Fedora 25. It’s great to again be able to use VLC and TexStudio without having to do use any workarounds! Still need to test the Optimus improvements but can’t seem to be able to get Nvidia module to start. bbswitch is loaded. Need some time to figure this one out. I guess will have to try Dota 2 7.00 on WinDoze. | |||
| **Edit: **It now works perfectly. I’m happy. | |||
| Wow, wayland is seriously way smoother than X. One must-have gnome extension now is the “Gnome Shell Extension Reloader” since now you can’t simply reload X with \`ctrl+F2 r\` like in the old days. | |||
| @@ -0,0 +1,14 @@ | |||
| --- | |||
| title: If you are using os rename src dest… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2016-12-19T19:04:05+00:00 | |||
| url: blog/2016/12/19/if-you-are-using-os-rename-src-dest/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - python | |||
| format: status | |||
| --- | |||
| If you are using os.rename(src,dest) outside the current working directory, you can’t simply use os.rename(filename, “output.mp3”) since it will move the file to the current working directory. You should rather, path.dirname to get the file’s directory and then rename the file. For example you can use \`os.rename(file\_name, os.path.dirname(file\_name) + ‘/{song\_title}.mp3’.format(song\_title=song_title))\` | |||
| @@ -0,0 +1,12 @@ | |||
| --- | |||
| title: Twenty Sixteen | |||
| author: rhnvrm | |||
| type: post | |||
| date: -001-11-30T00:00:00+00:00 | |||
| draft: true | |||
| url: blog/?p=126 | |||
| categories: | |||
| - uncategorized | |||
| format: status | |||
| --- | |||
| @@ -0,0 +1,12 @@ | |||
| --- | |||
| title: Postmortem Week 1 – 2017 | |||
| author: rhnvrm | |||
| type: post | |||
| date: -001-11-30T00:00:00+00:00 | |||
| draft: true | |||
| url: blog/?p=128 | |||
| categories: | |||
| - uncategorized | |||
| format: status | |||
| --- | |||
| @@ -0,0 +1,12 @@ | |||
| --- | |||
| title: Tower of Hanoi | |||
| author: rhnvrm | |||
| type: post | |||
| date: -001-11-30T00:00:00+00:00 | |||
| draft: true | |||
| url: blog/?p=130 | |||
| categories: | |||
| - uncategorized | |||
| format: status | |||
| --- | |||
| @@ -0,0 +1,40 @@ | |||
| --- | |||
| title: How to Sign PGP Keys using GPG | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-01-07T13:49:07+00:00 | |||
| url: blog/2017/01/07/how-to-sign-pgp-keys-using-gpg/ | |||
| categories: | |||
| - apache | |||
| - foss | |||
| tags: | |||
| - aceu16 | |||
| - foss | |||
| - linux | |||
| - misc | |||
| --- | |||
| <figure style="width: 640px" class="wp-caption aligncenter">[<img class="size-medium" src="https://imgs.xkcd.com/comics/responsible_behavior.png" alt="xkcd #364: Responsible Behavior" width="640" height="198" />][1]<figcaption class="wp-caption-text">xkcd #364: Responsible Behavior</figcaption></figure> | |||
| I participated in ApacheCon EU 2016’s PGP Keysigning Party recently. Being a newbie about PGP keysigning, I made the mistake of not sending the keys back to the key server after signing as I was using a GUI tool called Seahorse. So today, after realizing this from searching my key on MIT’s PGP keyserver, I decided to do it again and send the keys this time using GnuPG. It is very easy to use GnuPG which is Gnu’s PGP implementation and it is well documented. I followed [this][2] article and am providing a list of simple commands below for those who already have setup GnuPG. Also, please not that you should not sign someone’s key until you verify someone. | |||
| Get the key | |||
| `$ gpg --keyserver pgp.mit.edu --recv-keys ` | |||
| Check the fingerprint | |||
| `$ gpg --fingerprint` | |||
| Sign the key | |||
| `$ gpg --sign-key` | |||
| Upload the key | |||
| `$ gpg --keyserver pgp.mit.edu --send-key` | |||
| | |||
| [1]: https://xkcd.com/364/ | |||
| [2]: http://linuxreviews.org/howtos/gnupg/signingparty/#ss3.8 | |||
| @@ -0,0 +1,71 @@ | |||
| --- | |||
| title: Notes on Regex | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-01-10T01:06:48+00:00 | |||
| url: blog/2017/01/10/notes-on-regex/ | |||
| categories: | |||
| - notes | |||
| tags: | |||
| - notes | |||
| - python | |||
| - regex | |||
| --- | |||
| I’m going to use python. Regex can be used by using the `re` library. You should not refer to this post as these are just notes, it would be better to follow the actual documentation of the [library][1]. | |||
| To use regex, which uses backslashes `\` we must use raw python strings like `r"\n".` | |||
| `.` matches anything but a newline | |||
| `\d` matches `0-9` while `\D` matches anything but digits. Similarly, `\w` matches word chars. Usually, capital letters are complement of these sets. | |||
| `\s` matches whitespace characters like return, newline, tab etc. | |||
| `\w{x}` would match word chars x times. | |||
| `^` matches start and `$` matches end. | |||
| This can be used for exact match. | |||
| `[]` matches a set. | |||
| Important point to note here would be to match `.` inside set, we should not use `\.` since slash will also be matched here, because special characters lose their special meaning here but character classes don’t like `\w`. | |||
| Inside, `^` means negated character set. | |||
| There are also ranges like, a-z, A-Z, 0-9 that can be used in the set. | |||
| `\{x,y} `matches repetitions between x and y inclusive.` w{3,5}` : It will match the character w 3,4 or 5 times. Leaving y means atleast x repetitions. | |||
| `\d*` will match digits 0 or more times. | |||
| `w+` will match w one or more times. | |||
| `?` match zero or one time. | |||
| `(?:...)` is a non capturing group, useful when you only need to check if it is there or not. | |||
| `()` is capturing, can be used with `\1` etc eg. `(\d)\1`: It can match `00`, `11`, `22`, `33`, `44`, `55`, `66`, `77`, `88` or `99`. This is called backreferencing. | |||
| Backreferencing can be used for conditionally checking `r"^\d{2}(-?)\d{2}\1\d{2}\1\d{2}$"` | |||
| `\b` means check if it is a word boundary which is first char of string, between word and not word char, or last char in string. note: don’t use `^$` with word boundary. | |||
| `(Bob|Kevin|Stuart)` will match either `Bob` or `Kevin` or `Stuart` | |||
| `r1(?=r2)` Positive lookahead checks if r1 is immediately followed by r2 | |||
| `r1(?!r2)` Negative lookahead checks if r1 is _not_ immediately followed by r2 | |||
| `(?<=r2)r1` Positive lookbehind | |||
| `(?<!r2)r1` negative lookbehind | |||
| Non greedy match – use `?` to perform non greedy match. `<.*>` will match `<a>b<c>`. To only match `<a>` use `<.*?>` | |||
| Detect HTML links and content: `r'<a href="(.*?)".*?>([\w ,./]*)(?=</)'` | |||
| findall matches in python: `re.findall(pattern, text)` | |||
| [1]: https://docs.python.org/3/library/re.html | |||
| @@ -0,0 +1,20 @@ | |||
| --- | |||
| title: SNU Datalimit Chrome Extension | |||
| author: rhnvrm | |||
| type: post | |||
| date: -001-11-30T00:00:00+00:00 | |||
| draft: true | |||
| url: blog/?p=144 | |||
| categories: | |||
| - projects | |||
| tags: | |||
| - api | |||
| - google-chrome | |||
| - js | |||
| --- | |||
| [<img class="aligncenter size-medium" src="https://github.com/rhnvrm/snu-data-limit/raw/master/screens/sample.png" width="640" height="400" />][1] | |||
| The | |||
| [1]: https://chrome.google.com/webstore/detail/snudatalimit/mfjinloagcpmfacpjnlabcflnkbajidd | |||
| @@ -0,0 +1,22 @@ | |||
| --- | |||
| title: Checking if a number is prime using Regex | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-01-12T11:17:48+00:00 | |||
| url: blog/2017/01/12/checking-if-a-number-is-prime-using-regex/ | |||
| categories: | |||
| - notes | |||
| tags: | |||
| - python | |||
| - regex | |||
| --- | |||
| <pre class="brush: python; title: ; notranslate" title="">def is_prime(n): | |||
| return not re.match(r'^.?$|^(..+?)\1+$', '1'*n) | |||
| </pre> | |||
| This works by first converting the number to unary, i.e. 5 will be ‘11111’ and 3 will be ‘111’ and so on. First, it tries to match 0 or 1 in the LHS and then uses backreferences to try and match multiples of 2, 3, 4 and so on until a match is found or string length is exceeded. | |||
| For a deeper analysis please read: https://iluxonchik.github.io/regular-expression-check-if-number-is-prime/ | |||
| | |||
| @@ -0,0 +1,16 @@ | |||
| --- | |||
| title: Today my phone was acting strange as it… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-01-25T19:32:40+00:00 | |||
| url: blog/2017/01/25/today-my-phone-was-acting-strange-as-it/ | |||
| categories: | |||
| - misc | |||
| tags: | |||
| - android | |||
| format: status | |||
| --- | |||
| Today my phone was acting strange, as it immediately crashed after opening the notification drawer. I was baffled with why this was happening as my phone was working perfectly fine until yesterday. Finally, I had no option but to attempt to see the logs using `adb shell logcat` and try to figure out what was going on. There was a peculiar error message relating to starting an event a `8:00 AM` and I was completely unable to figure out what was causing it. Finally, I read the logs one line at a time and found that it was saying that there was an error with SQLite trying something with the stock clock app which has alarms. This was probably because yesterday night I had not charged my phone and it had died at around 7 or 8 am I guess and there was some error that occured then causing the phone to report thousands of errors, taking all the memory and thereby crashing the phone as soon as it was unlocked and the clock widget on my home screen updated or I tried to open the notification drawer. | |||
| | |||
| @@ -0,0 +1,17 @@ | |||
| --- | |||
| title: I used to use the ` L` flag… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-02-04T18:21:25+00:00 | |||
| url: blog/2017/02/04/i-used-to-use-the-l-flag/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - foss | |||
| - linux | |||
| format: status | |||
| --- | |||
| I used to use the \`-L\` flag in SSH but today I was going through the man page and saw the \`-D\` flag. It can be used to make a SOCKS5 proxy easily. For eg. \`ssh -f -N -D 8080 [email protected]\` | |||
| Also, a big thanks to EliteBNC.org for giving a free ZNC node. Feels great to be back on IRC after so long. | |||
| @@ -0,0 +1,22 @@ | |||
| --- | |||
| title: You can get a free BNC account on EliteBNC… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-02-05T10:17:34+00:00 | |||
| url: blog/2017/02/05/elitebnc/ | |||
| categories: | |||
| - foss | |||
| - tutorials | |||
| tags: | |||
| - foss | |||
| - irc | |||
| - tutorial | |||
| format: status | |||
| --- | |||
| You can get a free [BNC][1] account on [EliteBNC][2]. It runs [ZNC][3] which you can run yourself if you have a spare VPS. All you need to do is login on [FreeNode][4] (you can use their webchat if you don’t have a client handy) and join #EliteBNC channel and issue the following command command: `!request <username> freenode <your email id>` and you will get the settings in your email if your request is approved. | |||
| [1]: https://en.wikipedia.org/wiki/BNC_(software) | |||
| [2]: https://www.elitebnc.org/ | |||
| [3]: http://znc.in/ | |||
| [4]: https://freenode.net/ | |||
| @@ -0,0 +1,47 @@ | |||
| --- | |||
| title: Working with J2ME on Linux in 2017 | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-02-07T20:18:16+00:00 | |||
| url: blog/2017/02/07/working-with-j2me-on-linux-in-2017/ | |||
| categories: | |||
| - tutorials | |||
| tags: | |||
| - fedora | |||
| - iot | |||
| - java | |||
| - linux | |||
| - notes | |||
| - productivity | |||
| - tutorial | |||
| --- | |||
| I recently had to work on the J2ME platform for a course at my university. It is an old technology and does not have many recent articles about using or installing J2ME on Linux. J2ME SDK has had no support for Linux for a long time. The SDK 3.x only has support for Mac and Windows. The last version available was by Sun which is called the Sun Java Wireless Toolkit 2.5.2. This comes bundled with NetBeans 7.2 version. But the emulator that comes with it does not seem to work. Although, another emulator availble on sourceforge called MicroEmulator is able to run the JAR files built using NetBeans for the Wireless Toolkit Platform. | |||
| Here is a list of all the requirements: | |||
| 1. [JDK 7][1] (Netbeans 7.2 does not work with JDK 8, [instructions on installing][2]) | |||
| 2. [NetBeans 7.2][3] | |||
| 3. [Sun Java Wireless Toolkit for CLDC 2.5.2 ML][4] (Optional, Explained Below) | |||
| 4. [MicroEmulator][5] | |||
| Steps: | |||
| 1. Install JDK 7. | |||
| 2. Install NetBeans 7.2 and make sure to use JDK 7 instead of JDK 8 during the installation. If you forgot to do so, you can edit the conf file in the etc folder. | |||
| 3. After installing NetBeans 7.2, you should create a new J2ME Mobile Application Project, check the CLDC 1.1 and MIDP 2.0 | |||
| 4. Press build to test if the project is built or not | |||
| 5. If the project builds successfully, great. Otherwise, there could be two problems. Run the Sun Java Wireless Toolkit 2.5.2 shell script and install it and add it as a Platform in NetBeans and try creating a new project with this platform instead. If it says that some libraries such as libXt.so are are missing in the preverify step, you need to install these (i686 versions) using your package manager. | |||
| 6. The emulator bundled with NetBeans will not work so we need to use MicroEmulator. For this you can extract the zip file somewhere and run the jar file using \`java -jar microemulator.jar\`. For making your life easier, you can modify your ANT build-impl.xml file to run the emulator after building the JAR file of your J2ME project. Here is the code which you can modify according to where you extracted microemulator: <pre class="brush: xml; title: modification in the post-jar target; notranslate" title="modification in the post-jar target"><target name="post-jar"> | |||
| <exec executable="/bin/sh"> | |||
| <arg value="-c"/> | |||
| <arg value="java -jar /home/rhnvrm/Software/microemulator/microemulator.jar ${dist.dir}/${dist.jar}" /> | |||
| </exec> | |||
| </target> | |||
| </pre> | |||
| [1]: http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html#jdk-7u80-oth-JPR | |||
| [2]: https://docs.oracle.com/javase/7/docs/webnotes/install/linux/linux-jdk.html#install-64 | |||
| [3]: https://netbeans.org/downloads/7.2/ | |||
| [4]: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javame-419430.html#sun_java_wireless_toolkit-2.5.2-ml-oth-JPR | |||
| [5]: https://sourceforge.net/projects/microemulator/ | |||
| @@ -0,0 +1,13 @@ | |||
| --- | |||
| title: I’m taking a class on Psychoanalysis of Films… | |||
| author: rhnvrm | |||
| type: post | |||
| date: -001-11-30T00:00:00+00:00 | |||
| draft: true | |||
| url: blog/?p=177 | |||
| categories: | |||
| - uncategorized | |||
| format: status | |||
| --- | |||
| I’m taking a class on Psychoanalysis of Films. One of the tasks of the course is to make a 10 page screenplay by the end of the course. I recently read about Lacan’s interpretation of Freud’s Vorstellungsrepräsentanz. | |||
| @@ -0,0 +1,51 @@ | |||
| --- | |||
| title: Vorstellungsrepräsentanz | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-02-09T13:11:59+00:00 | |||
| url: blog/2017/02/09/vorstellungsreprasentanz/ | |||
| client-modified: | |||
| - "1523384480" | |||
| dsq_thread_id: | |||
| - "7217770366" | |||
| categories: | |||
| - misc | |||
| tags: | |||
| - sociology | |||
| --- | |||
| <figure style="width: 230px" class="wp-caption alignright">[<img class="" src="https://upload.wikimedia.org/wikipedia/commons/9/99/Las_Meninas_01.jpg" width="230" height="265" />][1]<figcaption class="wp-caption-text">Las Meninas</figcaption></figure> | |||
| <span style="font-weight: 400;">In Lacan’s seminars, he discussed the artists Cézanne, Holbein and Velasquez. In each case the fil rouge which connected Lacan’s thought was the idea of shifts in perspective leading to ways in which the artist had produced a work that evoked the experience of the “gaze”. In Seminar XIII, in discussing Velasquez’ Las Meninas, Lacan identifies the “picture within the picture” which we see Velasquez working on, as the Vorstellungsrepräsentanz , the representative of the representation. Lacan very clearly distinguished representation as being on the side of signification, whereas the “representative of representation” as being on the side of the signifier. In Las Meninas the “picture in the picture” is painted by Velasquez at the conjunction of two perspectives which are impossible in one space. Lacan said the “picture in the picture” as the “representative of representation” casts uncertainty on other “representations” in the painting. These other “objects” take on this disturbance of perspective in a domino effect, which allows many elements of the painting to take on this “representative of the representation” effect. This destabilizing of the visual space of the painting allows for displacements and condensations of images in the painting. An endless series of questions arise about the relations between the elements in the painting. People have talked about this painting for 350 years! What grounds the artist’s ability to do this is a masterful knowledge of his craft and an appreciation of a beyond of representation. With Las Meninas, it is Velasquez’ ability to construct an impossible melding of perspectives that keep the viewer is suspense.</span> | |||
| <span style="font-weight: 400;">When serious artists use all of their knowledge as artists to attempt to render something beyond representation, they are structurally placing themselves in the position of evoking the gaze for their audience. They do not transmit their knowledge directly to the audience. Velasquez used his knowledge from the arts of perspective and from other domains of artistic technique. This is similar to the analyst who must have knowledge of many kinds which are transmitted to him in the learning of his craft. But he cannot use this knowledge directly, it only sustains his attempt to stay in the position of “objet petit a”. Similarly the artist cannot simply tell you what he means or transmit his knowledge directly.</span> | |||
| **An example of this in cinema is the ending of the movie 2001: A Space Odyssey by which was written and directed by Stanley Kubrick.** | |||
| <span class="embed-youtube" style="text-align:center; display: block;"></span> | |||
| <span style="font-weight: 400;">The trip through the wormhole takes our protagonist to a particularly ambiguous environment, adorned with luxurious furnishings but maintaining a clinical or rather detached, oddly misunderstood and superficial facsimile of luxury. Here Dave runs through his life, in fast forward until he dies and is reborn in the form of the ‘Star Child’. The cuts we see here have Dave observing himself in the third person, then we switch over to the other Dave and follow him. This device is an ingenious way that Kubrick elegantly side steps the use of the montage technique, simultaneously progressing time without resorting to fades, whilst furthering the artificiality of the environment (with) a deliberate manipulation of time.</span> | |||
| <span style="font-weight: 400;">In order to understand what’s brought us to this point it’s now necessary to consider the monolith. It’s arrival at the dawn of man spurred the next step in human development, man begins to use tools, and rapidly the balance of power shifts in his favour, even within his species. The famous moment of the bone being thrown into the air and the jump cut to the spaceship is making a parallel between the two tools, the bone and the spaceship, and this illustrates a defining moment on evolution where man begins to use tools, the rudimentary bludgeon to begin with through to the sophisticated space ship. The point at which the aliens have interacted with humans again coincides with the point that artificial intelligence, in the form of HAL, has arrived. HAL is the tool that becomes a threat to humanity, it’s sophistication approaching and reflecting, possibly fully achieving, the emotional capabilities and immaturities of humans, becoming sophisticated to the point where it almost becomes more human than the rather unemotional creators. As Dave’s journey approaches its end we see him observing the final stage of life as we know it, that of death. Once again the transition is seamless as we move into the dying moments of the current stage of human existence, an existence that must end to make way for the next step. The Monolith reappears again at the time of Dave’s impending death, when he dies the Star Child is born, the transcendent being that exists literally and in every way above humanity. The monolith then returns Dave back to Earth. The cycle of his trip and the cycle of the films arc is completed as we see the beginning of a new phase of humanity again. </span><figure style="width: 219px" class="wp-caption alignright"> | |||
| <img class="" src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/88/Hans_Holbein_the_Younger_-_The_Ambassadors_-_Google_Art_Project.jpg/1039px-Hans_Holbein_the_Younger_-_The_Ambassadors_-_Google_Art_Project.jpg" width="219" height="216" /><figcaption class="wp-caption-text">The Ambassadors</figcaption></figure> | |||
| <span style="font-weight: 400;">Jacques Lacan exemplified the presence, the encounter with the gaze with Hans Holbein’s painting “The Ambassadors”. The 16th century interior in which the two characters are represented is violently disrupted by a figure in the middle, which at a first sight resembles nothing and puzzles the viewer. The figure of the skull floating randomly between the painting’s borders annihilates everything the painting otherwise depicts. All the symbols of power, arts and science are disavowed by the view of the skull, which stresses the futility of everything in the symbolic order. I am bringing this 16th century painting into discussion because I find the skull’s intrusion, given as an example of the power of the gaze by Lacan himself, similar to the presence of Kubrick’s black monolith in the middle of the white neoclassical room, as well as in the African Savannah. This element’s presence is uncanny. The monolith is there but viewed from a rational perspective, shaped by the rules of the symbolic world, it is not supposed to be there. The image is complete without it and its presence only bothers, stirs and makes the viewer uncomfortable, exactly as the skull in Holbein’s painting. But in contrast to the skull, the monolith has a neutral shape, cannot be read as an imagistic symbol for anything. It is a black block with no traces of features to trigger any kind of connotative meaning, in the middle of an image which would make perfect sense otherwise. Unlike the skull which is immediately read as a symbol of death, as a memento mori, the monolith stands for nothing but itself. One cannot pinpoint its nature or its purpose, its beginning or its end, the only fact that one can know is that the monolith exists, it is real and it is present. Furthermore, it is literally a foreign body, an extraterrestrial entity. </span> | |||
| <span style="font-weight: 400;">In what concerns the last apparition of the monolith, it seems to force itself in the symbolic structure. The visual contrast between the white room and the black entity enforces the differences in the nature of the two. Bowman, the human subject is “trapped” in the room, he cannot escape the influence of the monolith. His behaviour does not change, but he involves in a silent dialogue with the monolith, a dialogue which is beyond words, which has no use or need for language. It is so powerful that defies language, and with it defies the worldly order and structure. The dialogue between the monolith and the character is out of reach for the spectator, but, nevertheless, the monolith’s power, the gaze, transcends the screen and proposes a different dialogue to every eyes which are set on it, because one cannot avoid the gaze. </span> | |||
| <span style="font-weight: 400;">Maybe the final encounter with the monolith is not meant to be deciphered like one would crack down a code, like it would be a conglomeration of symbols which read in the correct order and by the right pattern reflect the great truth. Maybe it is supposed to be felt, and it is itself an encounter with the great truth, with the big Other, an encounter with no need for words, or symbols, or meanings. Maybe it is so puzzling because of our need for structure, for meaning and because of our incapacity to accept the existence of non-sense and only of senses. It might just be a moment of freedom for the character and for the spectators and the movie closes to an end with the Star Childs gaze at the spectator. And therefore, the monolith is the “representative of the representation”. A monolith within a monolith. A fantasy.</span> | |||
| **From:** | |||
| 1. http://convergencia.aocc.free.fr/texte/simpson-a.htm | |||
| 2. http://cynicalcelluloid.blogspot.in/2012/01/2001-analysis-of-last-10-minutes.html?zx=e7fb7312030e1b83 | |||
| 3. http://mariabiancam.coventry.domains/screen-cultures-and-selves/kubricks-monolith-and-lacans-gaze/ | |||
| **Further Reading:** | |||
| 1. https://www.artsy.net/article/artsy-editorial-centuries-people-las-meninas | |||
| #sociology | |||
| [1]: https://en.wikipedia.org/wiki/Las_Meninas | |||
| @@ -0,0 +1,20 @@ | |||
| --- | |||
| title: Survey Paper on Security in Wireless Sensor Networks | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-02-14T12:46:54+00:00 | |||
| url: blog/2017/02/14/survey-paper-on-security-in-wireless-sensor-networks/ | |||
| categories: | |||
| - projects | |||
| - uncategorized | |||
| tags: | |||
| - iot | |||
| --- | |||
| Wireless Sensor Network is an emerging area that shows great future prospects. Today such networks are used in many industrial and consumer applications, such as military, industrial process, monitoring health and in automated and smart homes. So far, the researchers have only focused on making WSNs useful, feasible, and less emphasis was placed on security. The sensors used are susceptible to different types of attacks, denial of service, physical tampering. In hostile scenarios, it is very important to protect WSNs from malicious attacks. This is the reason we need better security against these challenges, threats and issues in WSN. The intent of this paper is to shed light on the security related issues and challenges in wireless sensor networks investigated by researchers in recent years and that shed light on future directions for WSN security. | |||
| | |||
| [View Fullscreen][1] | |||
| [1]: /wp-content/plugins/pdfjs-viewer-shortcode/pdfjs/web/viewer.php?file=http%3A%2F%2F13.232.63.7%2Fwp-content%2Fuploads%2F2017%2F07%2FTP_WSN2017_Group_15-1.pdf&download=true&print=true&openfile=false | |||
| @@ -0,0 +1,16 @@ | |||
| --- | |||
| title: Just discovered Xfce4 has an inbuilt Drop Down… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-03-12T08:14:17+00:00 | |||
| url: blog/2017/03/12/just-discovered-xfce4-has-an-inbuilt-drop-down/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - linux | |||
| - productivity | |||
| - xfce | |||
| format: status | |||
| --- | |||
| Just discovered Xfce4 has an inbuilt Drop Down Terminal which you can use by running the command \`xfce4-terminal –drop-down\` using an Application Shortcut. Applications – Settings – Keyboard. Select the Application Shortcuts tab, click on the Add button, type in the command and give a shortcut key. I used F12. | |||
| @@ -0,0 +1,21 @@ | |||
| --- | |||
| title: Retrofitting LED Lamps into Smart Lamps | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-04-20T12:59:05+00:00 | |||
| url: blog/2017/04/20/retrofitting-led-lamps-into-smart-lamps/ | |||
| categories: | |||
| - projects | |||
| tags: | |||
| - iot | |||
| --- | |||
| Objective of this project was to show as a proof of concept that we can pick up any off-the-shelf generic lamp and by implementing minor hardware changes using an arduino, convert it into a Smart Lamp. We have implemented lamp switching based on environmental factors (such as Temperature, Light intensity etc), hand gestures (such a clapping actions), which can be set up by the user by attaching triggers to various conditions in the User Dashboard which was made in Processing 3. | |||
| [View Fullscreen][1] | |||
| | |||
| [1]: /wp-content/plugins/pdfjs-viewer-shortcode/pdfjs/web/viewer.php?file=http%3A%2F%2F13.232.63.7%2Fwp-content%2Fuploads%2F2017%2F07%2FWSN-Project-Report.pdf&download=true&print=true&openfile=false | |||
| @@ -0,0 +1,884 @@ | |||
| --- | |||
| title: Rendezvous with a Reflection – Screenplay | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-05-06T16:38:45+00:00 | |||
| url: blog/2017/05/06/rendezvous-with-a-reflection-screenplay/ | |||
| categories: | |||
| - misc | |||
| tags: | |||
| - cinema | |||
| - psychology | |||
| - sociology | |||
| --- | |||
| <p align="center"> | |||
| “<span style="font-family: Courier\ New, serif;"><span style="font-size: x-large;">Rendezvous with a Reflection”</span></span> | |||
| </p> | |||
| <p align="center"> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;"><i>[First Draft]</i></span></span> | |||
| </p> | |||
| <p align="center"> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">by </span></span> | |||
| </p> | |||
| <p align="center"> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Padamja Gupta</span></span> | |||
| </p> | |||
| <p align="center"> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Rohan Verma</span></span> | |||
| </p> | |||
| <p align="center"> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">(Group – “Untitled”)</span></span> | |||
| </p> | |||
| <p align="center"> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">A girl, struggling to accept reality, confronted by her own reflection. </span></span> | |||
| </p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Instructor: Shrimoy Chaudhury<br /> Course: Psychoanalytic Films through Historical Lens</span></span> | |||
| | |||
| <p align="center"> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">ACT I</span></span> | |||
| </p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE IN: </span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">A long shot of New Delhi and the skyline. The sun is rising breaking dawn. </span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Camera pans to visuals of empty shopping streets being lit with the morning sunlight. Some shopkeepers can be seen opening their shutters and the silence breaks with the opening of the shutters. </span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Low key piano starts playing and the camera pans to a shot of birds flying across the sky.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE TO Apartment Complex</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Outside the gate of an apartment complex, heavy traffic can be seen. People rushing out of the complex. Streets are now filled with people who are getting on with their lives.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE TO Inside the Complex</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Camera shows a smaller, quieter street of the complex. We see a distinct, colorful door in this shot that is the home of our protagonist. It is on the ground floor of the apartment complex that towers 10-15 floors.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We see a shot of school children with their school bags waiting for the school bus just on the opposite side of the street.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">CUT TO shot of 7:00 on a digital alarm clock </span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Loud sound of beeping alarm starts playing over the low key piano which fades slowly. We can hear the cars outside and the sounds of traffic. Along with the simple noises of hustle and bustle of the city.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Hand comes into the frame to shut down the sound. </span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">As soon as the alarm is switched off, the radio starts playing pop music with positive beats. We are situated in a usual Indian students room. There are posters of movies and rock bands on the wall. The posters are adding color to the walls of the dusty pale white walls of the room. The girl is still half asleep and brushes her hand through her messy hair. She stares at the clock and listens to the music of the radio and stands up slowly from the bed. </span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">She appears to be in her early twenties in fair shape. She is in her pajamas.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Her feet touch the floor, shot of the magazines and random bits of rubbish lying around. The mess in the room adds to the vibrancy and color of the room.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE TO Bathroom</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">A mirror comes on screen. Sound of rinsing can be heard. Suddenly a face comes into the frame from the bottom. We can see NAINA’s face in the mirror and her messy, entangled and long hair and her back. She looks at the mirror, fixes her hair and smiles. </span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The shot still focusing on the mirror, we can see her turn around and leave the bathroom, and the mirror without a reflection.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE TO scene of the common area of apartment.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">It is a brightly lit room with windows. There are sofas and the windows let in the light from outside and fill the room.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We can see NAINA walking towards the kitchen from her room with a purse. She is dressed up casually in T shirt and jeans. </span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We can hear the sound of a pressure cooker coming from the kitchen. We can see rays of sunlight streaming in from the kitchen door. </span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE TO kitchen</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We see NAINA entering the kitchen through the door, she looks at her mother making breakfast. She seems enthusiastic for the coming day. We can see her mother breaking an egg on the frying pan. Sound of crackling egg whites on the frying pan can be heard.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA grabs two pieces of fresh bread from the 12 pack of bread that is on the table and pours out a glass of milk from the glass bottle of boiled milk.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA looks at her mother cutting onions for the omelette with a knife.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: </span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Good morning mummy! </span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">MOM:</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Good morning, had a good night’s sleep beta? You had those bad dreams again?</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA:</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Nothing bad mummy…</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA’s mother gives her the plate of cooked omelette and she starts eating it with the bread.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">CAMERA PANS TO NAINA </span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">She is taking the finished plate of her breakfast and washing it in the kitchen sink.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We see NAINA picking up her purse from beside the dining table.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA:</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Ok mummy, gotta go! Don’t want to be late for college! See you later.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">MOM:</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Have a nice day beta!</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE TO outside the apartment </span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We see NAINA walking out of the apartment complex.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The sun is now shining brightly, she is almost blinded by the bright light and crosses the street to the other side. </span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">In the shot we can see children waiting for their school bus in front of the street.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA begins to cross the street.</span></span> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Suddenly, we see a school bus crashing into NAINA.</p> | |||
| <p> | |||
| Sound of screeching tires can be heard.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;"><b>Immediately fade to black.</b></span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">ACT II</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE IN:</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Low key piano strokes play.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">CUT TO Digital Clock with alarm ringing at 7:00 AM. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Loud sound of beeping alarm starts.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We see NAINA jumping from the bed in fear. She looks around and finds herself back in her room.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">She shuts the alarm, this time bleaker music plays on the radio.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA:</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Seems like it was just a dream.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">She stands up from the bed, laying her feet on the ground. We see the same shot of the magazines and random bits of rubbish lying around. But now the color seems to be faded. The room and posters on the wall also look a bit less colorful. There is a tone of bleakness which can be seen.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE TO bathroom</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We see NAINA’s back and face in the mirror. She rinses her mouth and puts the toothbrush on the edge of the sink. She puts water from the faucet on her face to wash it. She rubs her eyes. She’s startled to find her reflection to be a bit different. She looks at her hand and then at the reflections hand. She then waves it.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA:</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">What is happen—</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">There is silence, except the sound of the flowing tap, which is also a bit lower in volume than in the previous scene.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Suddenly, we hear the sound of something falling, it’s the toothbrush. She looks at it but doesn’t pick it up. She again sees the reflection, and it is seems normal now. A look of being creeped out is visible on her face.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The shot still focusing on the mirror, we can see her turn around, this time frantically leave the bathroom but not the reflection in the mirror.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE TO scene of the common area of apartment.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We can see NAINA walking towards the kitchen from her room. This time she is not dressed up. She is still in her pajamas. We can hear the pressure cooker, but this time the cooker is having a higher pitch. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Fade to kitchen </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA enters the kitchen, her mom can be seen preparing the breakfast. NAINA sits down at the table. Her mom is making eggs on the frying pan. The crackling sound of the eggs is not heard as clearly as last time.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA grabs a single piece of bread from the 12 pack of bread that is on the table and looks at the bowl of boiled milk.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We see her mom turning and looking at her as soon as she grabs the bread.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA : Morning Mom</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Suddenly, she stops tending to the eggs that are being fried and with a concerned voice says </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">MOM: Good morning, beta.. you sound pretty tired. Did you sleep well?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">This time her voice is different, we hear some disturbances like cracking in the mother’s voice and it is a bit unclear. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: Bad dreams..</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA grabs the bread and was about to leave when her mom turns to her while cutting onions for the omlette. She looks at her mother who now looks a bit different. This makes her jump against the wall with an astonished and scared face. The bottle of milk falls on the ground and shatters into pieces. Her mother’s face was different, her lips seemed to be inside out, giving her face a look straight out of a nightmare.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Mom : What is wrong beta?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">She completely turn towards her, with the knife pointing towards NAINA.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE TO scene of the common room</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">It was way too much to handle for NAINA, she can be seen running out of the door and closing it. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">This time outside, it’s not that bright while also being a bit greyed out. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">She keeps running in panic.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">It was when she was running and crossing the street, we again see the same children waiting for their school bus</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Suddenly, we see the same school bus crashing into NAINA.</p> | |||
| <p> | |||
| Sound of screeching tires can be heard.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;"><b>The screen fades to black</b></span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE IN</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Low piano keystroke plays in the background</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">CUT TO Digital Clock showing 7:00 AM. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA wakes up with a jump this time. Scared on her bed, sweating like a pig. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The same shot of the magazines and her feet touching the ground. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Her room is very different this time, it is darker, greyer and messier. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE TO BATHROOM</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The water is running in the sink. NAINA is away from the mirror, toward the camera, lost and scared. She is blocking the reflection in the mirror for the camera.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Suddenly a </span></span><span style="font-family: Courier\ New, serif;"><span style="font-size: medium;"><i>voice over</i></span></span><span style="font-family: Courier\ New, serif;"><span style="font-size: medium;"> can be heard</span></span> | |||
| </p> | |||
| <p> | |||
| “<span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">What are you scared of?”</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA is shocked to her core listening to the voice. She immediately turns toward the mirror since the sound came from behind her. She sees a blurry figure. She rubs her eyes and leans forward. She can see the eyes of the figure which is making eye contact with NAINA. It was her own reflection. She is shocked to look at herself.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: BOOOO!!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA jumps back, away from the mirror in fear with no clue as to what is happening with her. She again looks into the mirror, checks if her reflection is mirroring her. It is!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA starts crying desperately. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: Thought that the “BOOOO!” would be clear enough..</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: Wh-What are you?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The “Reflection” was amazed by such a question. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: “Wh-wh-wh” Do I stutter out a question like this?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: What are you ?.. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The Reflection smiles.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: I am what we call a paradox, the question and the answer at the same time, a paradigm all together. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA : (shouts) It is not possible..</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: Or maybe not, may be I am just a product of your imagination or a part of your schizophrenic mind. Or it is also possible that I am a divine intervention, that’d be something unexpected, isn’t ?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: (shouts again) No.. this is not possible!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: Impossible is the kind of haircut you have. I look like a dork for God’s sake.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The Reflection starts playing with her hair looking at it in dislike. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA : What is it that you want?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: I want you to start asking the right questions.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA looks around, it is still her bathroom. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA : Where am I ? What is going on with me… Here ? I do not understand anything.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: Wow! One at a time.. I said the right questions not a multi questions pop quiz!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA : WHERE AM I?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: Look around from your point of view, it is still your bathroom! </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: It is not possible again.. It does not look like my home.. There.. There are no colors.. From where does this noise keep interrupting me?! Th-This is not anything I know. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: How can you be so sure? You must have heard the saying “Ignorance is a blessing”. I.. on the other hand..like to believe that “ Ignorance leads to knowledge”. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: Knowledge? </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: Yes! Knowledge! Look at yourself, lost in your own ignorance, asking yourself those questions: Where, What,.. But even except from me maybe..</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA : What do you mean?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: The further you fall away from knowledge the further you approach knowledge at its pure state!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: This is just a dream… I am just dreaming…</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The reflection continues her speech as if she never heard the last part.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: It is the knowledge about the truth, about the sins, your hidden memories… about you, me, us,.. And.. Her</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA:Her?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: Don’t you remember?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: Remember what?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The headache is getting worse for NAINA</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: Think harder! The headache is not gonna stop!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: I don’t remember!!!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: NAINA, NAINA…!! Do you see, where the knowledge leads you?! Leading you to forget! Leading you to meet me! Leading you to somewhere you do not have a clue about! Do you know how much pain she was in? How much she kept thinking and hoping? Do you? </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: I don’t know what are you talking about ?…</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Her headache grows stronger, she starts gripping her head hard!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: You don’t remember, do you? No, you don’t, otherwise you would not be here, now would you?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: I have had enough of this. Just tell me what has happened?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: It would be too easy to give all the answers on a plate, look at who you are talking to ? Look at me!! If you can’t remember, how can I possibly tell you ?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: What is that I have to remember ? How can I remember it?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The REFLECTION smiles again </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: Didn’t I tell you the answer already “Ignorance is a blessing”! In order to remember you have to forget! Isn’t it ironic?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The REFLECTION laughs. NAINA seems lost!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: What do you mean!! One moment, you are saying you can’t tell me, the other you say something completely opposite! You are playing with me! WHO ARE YOU??</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: OH GOD!!! Let’s not restart the whole conversation again!!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: How can I remember something I have forgotten!!! What are babbling about! Her, Her, Who is “Her”? </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: NAINA, innocent NAINA, why can’t you see the meaning of it? Forget to remember? One never forgets a thing, it is just that when one has stored so much information, learned so many things, year after year that eventually he starts forgetting the most important things, all those things when cumulated result in a sum of all our base memories, feelings and experiences, nothing more, nothing less. However, one chooses to suppress their innermost, traumatic experiences using everyday facts and figures, for reasons unknown to us. Maybe the truth is simply a bit too much for you to handle.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: Are you trying to say that the key of this place is my ability to remember? I had never asked to be here in the first place. I honestly do not understand what you want me to remember!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: I wonder, is it me that wants “you” to remember or is it you yourself? Tell me Naina, what are dreams? Taking the words of Shakespeare .. dreams are the “children of an idle mind”, and how right he was! Dreams are our thoughts themselves, one’s deep memories trying to come through, trying to escape! Trying to talk to you, Naina, but have you been listening? </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: It is a trick.. You are trying to trick me.. I am not supposed to be here!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: What were you dreaming last night, Naina?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Listening to this, Naina suddenly freezes, her headache is too much. She cannot think at all.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: You were dreaming about her. Think! Think harder! Naina… weren’t you? </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: Y..Yes, I think so, .. She was there all alone.. Waiting for someone… someone special.. But she does not seem to come…</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: How long she had been waiting, Naina ? How long has she been waiting?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: She has been waiting forever! She believes she will come. She does not give up hope.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: Why isn’t she coming ? Did she forget about her?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA:N-NO..</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Naina is silently looking into her reflection.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: How does she look like, Naina?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: She-</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Naina pauses in disbelief</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Naina: I do not remember… I cannot remember..</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: You can’t remember her face? (smiles) What happened Naina? Is there something else you can remember?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: I was with her.. It’s you!! It’s all you playing games with me </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">(Reflection laughs)</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: It seems you really do not want to listen do you? Just look at your hands….</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Naina looks at her hands, they are all covered with blood, dripping from her hands. Blood.. Not hers.. From someone else…</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: WHAT IS THIS ???</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: (laughs)</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;"> Oh-oh you tell me Naina!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Naina: I know it’s all you playing games with me! It’s all your fault! IT’S ALL YOU!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Naina tries to grab the reflection, but her hands just hit the mirror leaving bloody handprints on it.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: It’s all a dream…</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: Have you ever wondered that maybe that dream about her was not one, that it might have been reality? Maybe this is not a dream, maybe your so called “life” is a dream! Maybe you aren’t even alive at all! (laughs) Or maybe it’s a question of sanity Naina! I don’t think that talking to your reflection is what you call the sanest thing on the planet.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The REFLECTION smiles, Naina seems to be totally lost. The noise is getting louder, her heart beating faster and faster.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA: Where am I .. This isn’t a world!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: You are right.. In a way.. Different perspectives, different worlds.. Life is just a dream, Naina.. A dream..</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Blood starts dripping from the Reflection’s eyes!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION : That–</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Naina covers her eyes with her hands, two hands suddenly approach Naina…They come from the mirror…</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">–ends!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">They suddenly grab Naina and push her to the mirror, her face is pressed against the mirror! Face to face with herself!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">REFLECTION: Fading memories, new memories! And a dream Naina, a ream of you in a world without you! (smiles) Welcome to my world!</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">SCREAM</span></span> | |||
| </p> | |||
| <p align="center"> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">ACT III</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE IN:</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Low key piano strokes play.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">CUT TO Digital Clock showing 7:00 AM. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We are again inside the room.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA wakes up suddenly, this time she looks around her room, it is still bleak and the posters seem faded and colorless.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">She shuts off the alarm, the radio is playing static this time.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We see the same shot of her feet touching the ground. The magazines on the floor are colorless. There is no noise of the traffic or the hustle and bustle of city life. It’s all quiet.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE TO bathroom</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The camera is focused on the mirror.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA rushes inside the bathroom, we can only see her back and messy hair. She looks at herself in the mirror, the mirror reflects all her movements precisely.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">She knocks on the mirror.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA:</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">HELLO!!??</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">There is no reaction from the reflection. NAINA smiles.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA:</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Was nothing but a dream.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">She turns her back away from the mirror and walks away. She doesn’t notice the water that had been flowing from the water tap on the sink. The flow is fast but there is no noise. No sound.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The camera zooms in on the mirror and the door of the bathroom that is visible until the edges of the mirror are not visible.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">CUT TO Common Room</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We see NAINA walking in a fast pace from the bathroom toward the kitchen. We see her feet stomp on the ground but there is no noise. Only a grey and dark common room with curtains closed, no light coming in.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We can see the fluorescent white light from the kitchens tube light lighting up the common room area</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE TO camera inside the kitchen looking toward the kitchen door.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We can see the dining table, a pack of 12 pieces of bread that looks like it has been open since a few days. The bowl in which we saw boiled milk seems to be empty. We can see the pressure cooker on the stove, it seems to have been untouched since a few days.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA walks into the kitchen through the door with a smile on her paranoid face.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Her smile disappears as she doesn’t find her MOM in the kitchen. She walks toward the stove, glaring at the knife… The same knife that she was using to cut onions now lies next to finely diced stale onions. </span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The camera now pans and follows her face from not so far distance</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">She bumps herself on the dining table, causing the bottle of milk to fall down and make the glass shatter but there is no sound except muffled sound of something glass like falling for the audience. She doesn’t hear it and continues to see the half eaten omelette still on the plate.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">She then looks at the white milk that is flowing outward from the shattered glass to fill the dark floor.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">NAINA:</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">What… is going on?</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">She now panics and starts breathing heavily heading outside.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">FADE TO the common room</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We see NAINA now walking briskly towards the door that opens outside the apartment. She opens the door, and walks out.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">CUT TO Shot of Empty Street outside of Apartment facing the door</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">We can see the color of the door of the house has faded away. We see NAINA staring into oblivion. The towering apartment block looks dull. The street is empty, all gray, nothing but silence surrounds the once busy. Except the sound of wind blowing past NAINA.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">The children who were waiting for their bus are now no more waiting for their bus.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">CUT TO apartment complex</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Outside the gate, no traffic can be seen. There are no people rushing in and out of the complex. Visuals of empty shopping streets with their shutters down.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;">Low key piano starts playing with a shot of birds flying across the sky.</span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;"><b>Fade to black</b></span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;"><b>TEXT:</b></span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;"><b>A dream of you in a world without you…</b></span></span> | |||
| </p> | |||
| <p> | |||
| <span style="font-family: Courier\ New, serif;"><span style="font-size: medium;"><b>-FIN-</b></span></span> | |||
| </p> | |||
| @@ -0,0 +1,15 @@ | |||
| --- | |||
| title: "2016" | |||
| author: rhnvrm | |||
| type: post | |||
| date: -001-11-30T00:00:00+00:00 | |||
| draft: true | |||
| url: blog/?p=192 | |||
| categories: | |||
| - uncategorized | |||
| format: status | |||
| --- | |||
| 2017 has been a dull year. It has felt even more dull after the fast paced year that 2016 was. | |||
| | |||
| @@ -0,0 +1,34 @@ | |||
| --- | |||
| title: Adding xfce4 Keyboard Shortcuts for Clementine or Spotify | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-05-20T15:08:44+00:00 | |||
| url: blog/2017/05/20/xfce4-keyboard-shortcuts-for-clementine/ | |||
| categories: | |||
| - foss | |||
| - notes | |||
| - tutorials | |||
| - uncategorized | |||
| - xfce | |||
| tags: | |||
| - fedora | |||
| - foss | |||
| - linux | |||
| - music | |||
| - productivity | |||
| - tutorial | |||
| - xfce | |||
| --- | |||
| xfce4 has default media key settings for Pragha music player. Although, if you use clementine music player you can use keyboard shortcuts to control it with DBus and MPRIS. | |||
| Clementine is known as org.mpris.clementine and you can add the following entries to your Keyboard Settings > Application Shortcuts | |||
| If you use spotify, it is registered as org.mpris.MediaPlayer2.spotify on qdbus. | |||
| <pre>qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.Next | |||
| qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.Pause | |||
| qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.Prev | |||
| </pre> | |||
| <img class="alignleft size-medium" src="https://i.imgur.com/CyGBzYy.png" width="538" height="574" /> | |||
| @@ -0,0 +1,20 @@ | |||
| --- | |||
| title: Take out a moment and… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-06-26T09:12:19+00:00 | |||
| url: blog/2017/06/26/take-out-a-moment-and-think-are-you/ | |||
| client-modified: | |||
| - "1500191178" | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - psychology | |||
| format: status | |||
| --- | |||
| Take out a moment and think, are you going on the internet (reddit/youtube/dota2) because you want to be entertained or because you are really afraid of being bored? | |||
| Boredom comes from having a mind that wants to be entertained. Instead, strive for cultivating a creative mind that can entertain itself (and others). The key word here is “cultivate”. | |||
| #psychology | |||
| @@ -0,0 +1,24 @@ | |||
| --- | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-07-27T20:40:51+00:00 | |||
| url: blog/2017/07/27/216/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - misc | |||
| - sociology | |||
| format: status | |||
| --- | |||
| While conformity and the playing out of social roles can help shore-up our bridges of self-deception, this may in the end turn out to be more of a curse, than a blessing. For given the brevity of life it is far better to become aware of our deceptions while we still have time to change. But sadly, it is often only when one is at death’s doorstep that they come to recognize the vanity and falseness of their existence up to that point. | |||
| This idea is illustrated in The Death of Ivan Ilyich, one of Leo Tolstoy’s masterpieces. The main character in this work is a Russian magistrate who attains great success in rising to the top of Russian society. However, while enjoying the fruits of his labours, he becomes afflicted by a terminal illness and reflecting deeply on the meaning of life is haunted by a nagging feeling that his life was wasted: | |||
| > “It is as if I had been going downhill while I imagined I was going up. And that is really what it was. I was going up in public opinion, but to the same extent life was ebbing away from me. And now it is all done and there is only death.” (Leo Tolstoy, The Death of Ivan Ilyich) | |||
| This passage by Tolstoy strikes at the root of the danger of living at the mercy of our self-deceptions. Maintaining our illusions requires a massive amount of time and energy and often diverts our attention to vain pursuits. Therefore, our ability to engage in projects and strive after goals which would lead to a more fulfilling life is greatly restricted. To ensure that we don’t face a similar fate as Ivan Ilyich, it is crucial that we take a more honest look at ourselves and the life path that our deceptions have led us down. While most of us have spent years, if not decades, relying on our many self-deceptions, it is still within our ability to break down our false self. | |||
| _Source:_ | |||
| <http://academyofideas.com/2017/07/psychology-of-self-deception/> | |||
| @@ -0,0 +1,234 @@ | |||
| --- | |||
| title: HackTheNorth 2017 – University of Waterloo | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-09-20T14:25:42+00:00 | |||
| url: blog/2017/09/20/torogo/ | |||
| categories: | |||
| - projects | |||
| tags: | |||
| - datascience | |||
| - hackathon | |||
| - python | |||
| --- | |||
| [<img class="aligncenter wp-image-260 size-large" src="/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-700x467.jpg" alt="" width="700" height="467" srcset="/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-700x467.jpg 700w, /wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-300x200.jpg 300w, /wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-768x512.jpg 768w, /wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o.jpg 1500w" sizes="(max-width: 700px) 100vw, 700px" />][1] | |||
| I attended HackTheNorth, which is Canada’s Biggest Hackathon and takes place at University of Waterloo campus. I was glad to join over 1000 students from around the world at the University of Waterloo to collaborate and create something extraordinary in 36 hours. I didn’t go in as a team as the visa process was a bit delayed and so none of the participants from India knew if they would be able to go. Well, eventually, we were three people from different universities from New Delhi who formed a team when we met in Canada. | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| We are excited to announce that Canadian Prime Minister Justin Trudeau will be giving the welcoming remarks at opening ceremonies tonight! <a href="https://t.co/cWePNlFXYj">pic.twitter.com/cWePNlFXYj</a> | |||
| </p> | |||
| <p> | |||
| — Hack the North (@HackTheNorth) <a href="https://twitter.com/HackTheNorth/status/908767464087015424?ref_src=twsrc%5Etfw">September 15, 2017</a> | |||
| </p> | |||
| </blockquote> | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| On the way to <a href="https://twitter.com/hashtag/HacktheNorth?src=hash&ref_src=twsrc%5Etfw">#HacktheNorth</a> by the shuttle. Super excited! <a href="https://t.co/T2L3mYzb03">pic.twitter.com/T2L3mYzb03</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/908833939392839681?ref_src=twsrc%5Etfw">September 15, 2017</a> | |||
| </p> | |||
| </blockquote> | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| <a href="https://twitter.com/JustinTrudeau?ref_src=twsrc%5Etfw">@JustinTrudeau</a> kicking off <a href="https://twitter.com/HackTheNorth?ref_src=twsrc%5Etfw">@HackTheNorth</a> ! Proud to be Canadian 🇨🇦 <a href="https://t.co/3RaIHlJYWF">pic.twitter.com/3RaIHlJYWF</a> | |||
| </p> | |||
| <p> | |||
| — Yingning (@yingninggui) <a href="https://twitter.com/yingninggui/status/908856528144359426?ref_src=twsrc%5Etfw">September 16, 2017</a> | |||
| </p> | |||
| </blockquote> | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Finally found where we will be hacking for the weekend at <a href="https://twitter.com/HackTheNorth?ref_src=twsrc%5Etfw">@HackTheNorth</a>! Such an amazing space! <a href="https://twitter.com/hashtag/HacktheNorth?src=hash&ref_src=twsrc%5Etfw">#HacktheNorth</a> <a href="https://t.co/yxsWGv7oWr">pic.twitter.com/yxsWGv7oWr</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/908876181558177792?ref_src=twsrc%5Etfw">September 16, 2017</a> | |||
| </p> | |||
| </blockquote> | |||
| <blockquote class="twitter-tweet" data-width="550" data-dnt="true"> | |||
| <p lang="en" dir="ltr"> | |||
| Let Data Science decide the perfect neighborhood for you in Toronto<a href="https://t.co/LwisOhmlZV">https://t.co/LwisOhmlZV</a><a href="https://twitter.com/hashtag/HacktheNorth?src=hash&ref_src=twsrc%5Etfw">#HacktheNorth</a> <a href="https://t.co/0L9oIZVmfk">pic.twitter.com/0L9oIZVmfk</a> | |||
| </p> | |||
| <p> | |||
| — Rohan Verma (@rhnvrm) <a href="https://twitter.com/rhnvrm/status/909405725658685445?ref_src=twsrc%5Etfw">September 17, 2017</a> | |||
| </p> | |||
| </blockquote> | |||
| | |||
| # The Project | |||
| We built ToroGo, an app powered by Data Science to help newcomers decide the perfect neighborhood for someone moving to Toronto. I worked on writing the API for the backend and the entire data collection and analysis involved in the project. | |||
| <span class="embed-youtube" style="text-align:center; display: block;"></span> | |||
| <div> | |||
| <h2> | |||
| Inspiration | |||
| </h2> | |||
| <p> | |||
| We traveled all the way from India and while booking our AirBnb we were overwhelmed with the options available to us. Although, websites like tripadvisor help with reviews of an area, it is often not enough. Toronto welcomes over 40 million visitors annually, and is the leading tourism destination in Canada. So we decided to use the power of data science to help travelers like us solve where to stay. | |||
| </p> | |||
| <h2> | |||
| What it does | |||
| </h2> | |||
| <h3> | |||
| Find a Place | |||
| </h3> | |||
| <p> | |||
| In our discussions we came up with three important things that users look at while deciding where to live in a new city: | |||
| </p> | |||
| <ul> | |||
| <li> | |||
| Price | |||
| </li> | |||
| <li> | |||
| Safety | |||
| </li> | |||
| <li> | |||
| Reviews | |||
| </li> | |||
| </ul> | |||
| <p> | |||
| The app requests the user to enter his priority for the above mentioned features and suggests the top 5 suggested places that would suit the user based on data analysis. | |||
| </p> | |||
| <h3> | |||
| Currency Converter | |||
| </h3> | |||
| <p> | |||
| Along with that we provide the user easy access to check the live currency exchange rates using <strong>XE.com</strong> powerful api instantly from the app. It supports searching from 100s of currencies and can instantly give the live exchange rate. | |||
| </p> | |||
| <h2> | |||
| How we built it | |||
| </h2> | |||
| <p> | |||
| We used open datasets available from the Canadian Open Dataset website and Airbnb to build an aggregate score of around 130 sub-areas of Toronto City. We chose three parameters, | |||
| </p> | |||
| <ul> | |||
| <li> | |||
| <strong>Locality Ratings</strong> based on Sentiment Analysis of Reviews | |||
| </li> | |||
| <li> | |||
| <strong>Safety Ratings</strong> based on Crime Data such as Assaults | |||
| </li> | |||
| <li> | |||
| <strong>Priceyness Ratings</strong> based on the cost of listings of Airbnbs in a Neighborhood. | |||
| </li> | |||
| </ul> | |||
| <p> | |||
| The data analysis can be viewed in our <a href="https://github.com/rhnvrm/htn/tree/master/dataset" rel="nofollow">iPython Notebooks</a> | |||
| </p> | |||
| <p> | |||
| <a href="https://github.com/rhnvrm/htn/tree/master/dataset" rel="nofollow"><img src="https://res.cloudinary.com/devpost/image/fetch/s--BNTnZqxs--/c_limit,f_auto,fl_lossy,q_auto,w_900/https://i.imgur.com/gzjo6f2.png" alt="Imgur" data-canonical-url="https://i.imgur.com/gzjo6f2.png" /></a> | |||
| </p> | |||
| <p> | |||
| After this, we wrote an algorithm based on Euclidean Distance between these ratings and the user’s preferences to suggest the most suitable locations for the user. | |||
| </p> | |||
| <p> | |||
| The currency converter is powered by <strong>XE.com</strong>‘s API and we were able to make an intuitive UX for searching through the currencies. | |||
| </p> | |||
| <h2> | |||
| Challenges we ran into | |||
| </h2> | |||
| <ul> | |||
| <li> | |||
| Data was easy to find but aggregation was tough to do based on the neighborhood level. | |||
| </li> | |||
| <li> | |||
| Getting the heatmap to work based on neighborhood on Android | |||
| </li> | |||
| <li> | |||
| We tried to integrate the Microsoft Azure Chatbot API but were unable to integrate it with the app. | |||
| </li> | |||
| </ul> | |||
| <h2> | |||
| Accomplishments that we’re proud of | |||
| </h2> | |||
| <ul> | |||
| <li> | |||
| A full ranking of the neighborhoods based on reviews, safety and priceyness of Toronto | |||
| </li> | |||
| <li> | |||
| A fully functional App and API. | |||
| </li> | |||
| <li> | |||
| Firebase Authentication | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| <div id="built-with" class=""> | |||
| <h2> | |||
| Built With | |||
| </h2> | |||
| <ul class="no-bullet inline-list"> | |||
| <li> | |||
| <span class="cp-tag recognized-tag"><a href="https://devpost.com/software/built-with/python">python</a></span> | |||
| </li> | |||
| <li> | |||
| <span class="cp-tag">sentiment-analysis</span> | |||
| </li> | |||
| <li> | |||
| <span class="cp-tag recognized-tag"><a href="https://devpost.com/software/built-with/pandas">pandas</a></span> | |||
| </li> | |||
| <li> | |||
| <span class="cp-tag recognized-tag"><a href="https://devpost.com/software/built-with/flask">flask</a></span> | |||
| </li> | |||
| <li> | |||
| <span class="cp-tag recognized-tag"><a href="https://devpost.com/software/built-with/android">android</a></span> | |||
| </li> | |||
| <li> | |||
| <span class="cp-tag recognized-tag"><a href="https://devpost.com/software/built-with/firebase">firebase</a></span> | |||
| </li> | |||
| <li> | |||
| <span class="cp-tag">open-data</span> | |||
| </li> | |||
| <li> | |||
| <span class="cp-tag recognized-tag"><a href="https://devpost.com/software/built-with/airbnb">airbnb</a></span> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| [1]: https://www.facebook.com/hackthenorth/photos/rpd.100005363469781/1987147797978461/?type=3&theater | |||
| @@ -0,0 +1,12 @@ | |||
| --- | |||
| title: I’m moving back to Firefox | |||
| author: rhnvrm | |||
| type: post | |||
| date: -001-11-30T00:00:00+00:00 | |||
| draft: true | |||
| url: blog/?p=221 | |||
| categories: | |||
| - uncategorized | |||
| format: status | |||
| --- | |||
| @@ -0,0 +1,20 @@ | |||
| --- | |||
| title: yumex-dnf is locked | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-10-11T18:43:36+00:00 | |||
| url: blog/2017/10/11/yumex-dnf-is-locked/ | |||
| categories: | |||
| - foss | |||
| - notes | |||
| - uncategorized | |||
| - xfce | |||
| --- | |||
| I downloaded a .rpm and double clicked it to install it and it started yumex-dnf. But for some reason it crashed and dnf was locked. I fixed it using | |||
| `yumex-dnf --exit` | |||
| and installed the rpm using | |||
| `sudo dnf install cacher-1.1.10.x86_64.rpm` | |||
| @@ -0,0 +1,19 @@ | |||
| --- | |||
| title: Was codification of Odissi successful in capturing the true essence of the dance as it was prevalent or even as it was performed in the ancient era? | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-10-16T01:10:30+00:00 | |||
| url: blog/2017/10/16/was-codification-of-odissi-successful-in-capturing-the-true-essence-of-the-dance-as-it-was-prevalent-or-even-as-it-was-performed-in-the-ancient/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - odissi | |||
| --- | |||
| Was codification of Odissi successful in capturing the true essence of the dance as it was prevalent or even as it was performed in the ancient era? | |||
| | |||
| [View Fullscreen][1] | |||
| [1]: /wp-content/plugins/pdfjs-viewer-shortcode/pdfjs/web/viewer.php?file=http%3A%2F%2F13.232.63.7%2Fwp-content%2Fuploads%2F2017%2F11%2Fdoc.pdf&download=true&print=true&openfile=false | |||
| @@ -0,0 +1,23 @@ | |||
| --- | |||
| title: The male and female dress of Odissi Dance – An comment on the Literature on the web | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-10-28T21:15:43+00:00 | |||
| url: blog/2017/10/28/the-male-and-female-dress-of-odissi-dance-an-comment-on-the-literature-on-the-web/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - odissi | |||
| --- | |||
| I was reading an [article][1] about Odissi and I found that the perpetuation of stereotypes do actually come into picture in the case of the content that is written on it. The following is a description of the Dress worn by the dancers: | |||
| > The female dancers wear brightly coloured sari usually made of local silk adorned with traditional and local designs such as the Bomkai Saree and the Sambalpuri Saree. The front part of the sari is worn with pleats or a separate pleated cloth stitched in front to ensure flexibility of movements of the dancer while showcasing excellent footwork. Silver Jewellery adorns her head, ear, neck, arms and wrists. Musical anklets called ghunghru made of leather straps with small metallic bells attached to it are wrapped in her ankles while her waist is tied with an elaborate belt. Her feet and palms are brightened with red coloured dyes called alta. She wears a tikka on forehead and outlines her eyes prominently with Kajal so as to make her eye movements more visible. Her hair is tied in a bun and beautified with Seenthi. A moon shaped crest of white flowers or a Mukoot that is a reed crown with peacock feathers symbolising Lord Krishna may adorn the hairdo. | |||
| The same article describes the male dress in a single line. | |||
| > A male dancer wears a dhoti neatly pleated in the front and tucked between the legs that cover his lower body from waist while the upper body remains bare. A belt adorns his waist. | |||
| It is upto the reader how to interpret this. | |||
| [1]: http://www.culturalindia.net/indian-dance/classical/odissi.html | |||
| @@ -0,0 +1,456 @@ | |||
| --- | |||
| title: Vocabulary of Odissi | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-11-11T21:24:05+00:00 | |||
| url: blog/2017/11/11/vocabulary-of-odissi/ | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - odissi | |||
| --- | |||
| My argument is that dance can be seen through the lens of linguistics. It is nonetheless, composed of a vocabulary of poses and gestures that are codified within a set by masters to perform Abhinaya (acting) and tell stories similar to how a grammar and a vocabulary is used to write complicated sentences and paragraphs. | |||
| For example, Odissi has the following hand gestures in its vocabulary | |||
| <table border="0" cellspacing="0" cellpadding="2" align="center"> | |||
| <tr> | |||
| <td> | |||
| <span style="font-size: xx-small;"><b>Odissi Single Hand Mudras</b><br /> </span> | |||
| </td> | |||
| </tr> | |||
| </table> | |||
| <table border="0" cellspacing="0" cellpadding="2" align="center"> | |||
| <tr> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-315.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0315.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-316.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0316.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-317.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0317.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-318.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0318.jpg" /></a> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Pataka | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Tripataka | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Ardhapataka | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Kartarimukha | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-319.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0319.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-320.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0320.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-321.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0321.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-322.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0322.jpg" /></a> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Mayura | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Ardha Chandra | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Arala | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Sukhatundaka | |||
| </td> | |||
| </tr> | |||
| </table> | |||
| <table border="0" cellspacing="0" cellpadding="2" align="center"> | |||
| <tr> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-323.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0323.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-324.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0324.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-325.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0325.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-326.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0326.jpg" /></a> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Mushti | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Shikhara | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Kapittha | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Katakamukha | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-327.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0327.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-328.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0328.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-329.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0329.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-330.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0330.jpg" /></a> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Katakamukha | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Katakamukha | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Katakamukha | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Kapittha | |||
| </td> | |||
| </tr> | |||
| </table> | |||
| <table border="0" cellspacing="0" cellpadding="2" align="center"> | |||
| <tr> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-331.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0331.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-332.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0332.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-333.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0333.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-334.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0334.jpg" /></a> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Katakamukha | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Katakamukha | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Katakamukha | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Suchi | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-335.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0335.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-336.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0336.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-337.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0337.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-338.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0338.jpg" /></a> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Ardhasuchi | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Chandrakala | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Padmakosha | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Sarpasheesha | |||
| </td> | |||
| </tr> | |||
| </table> | |||
| <table border="0" cellspacing="0" cellpadding="2" align="center"> | |||
| <tr> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-339.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0339.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-340.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0340.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-341.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0341.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-342.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0342.jpg" /></a> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Simhamukha | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Kangula | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Alapadma | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Alapadma | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-343.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0343.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-344.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0344.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-345.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0345.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-346.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0346.jpg" /></a> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Chatura | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Chatura | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Bhrmara | |||
| </td> | |||
| <td align="center" valign="top" width="110" height="30"> | |||
| Sakata | |||
| </td> | |||
| </tr> | |||
| </table> | |||
| <table border="0" cellspacing="0" cellpadding="2" align="center"> | |||
| <tr> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-347.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0347.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-348.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0348.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-349.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0349.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-350.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0350.jpg" /></a> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="middle" width="110" height="30"> | |||
| Hamsasya | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="30"> | |||
| Hamsapakshaka | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="30"> | |||
| Mrigashirsha | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="30"> | |||
| Kangula | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-351.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0351.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-352.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0352.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-353.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0353.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-354.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0354.jpg" /></a> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="middle" width="110" height="30"> | |||
| Kapittha | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="30"> | |||
| Trishula | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="30"> | |||
| Tambula | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="30"> | |||
| Vardhamana | |||
| </td> | |||
| </tr> | |||
| </table> | |||
| <table border="0" cellspacing="0" cellpadding="2" align="center"> | |||
| <tr> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-355.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0355.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-356.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0356.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-357.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0357.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-358.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0358.jpg" /></a> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="middle" width="110" height="30"> | |||
| Vardhamana | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="30"> | |||
| Pushpa | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="30"> | |||
| Baana | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="30"> | |||
| Teera | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| <a href="https://www.odissivilas.org/Vishnu/Mudra-detail-359.htm"><img src="https://www.odissivilas.org/Vishnu/Mudra_images/SingleHand/T/Vishnu_0359.jpg" /></a> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| </td> | |||
| <td align="center" valign="middle" width="110" height="130"> | |||
| </td> | |||
| </tr> | |||
| </table> | |||
| | |||
| | |||
| The amazing thing in my opinion is how intuitive gestures are in comparison to words or letters and often signify such great amount of information than what would even comprise a sentence. Odissi repertoire sequentially includes an invocation followed by nritta, nritya, natya, and moksha. | |||
| > The invocation called Mangalacharana is performed followed by offering of flowers called Pushpanjali and salutation to mother earth referred as Bhumi Pranam. Next in line is performance of Batu or Batuka Bhairava or Battu Nrutya or Sthayee Nrutya which is pure dance or nritta dedicated to Lord Shiva. It is performed only on rhythmic music without any recitation or singing. The next part is nritya that encompass expressional dance or Abhinaya to communicate a story, song or poetry through hand gestures or mudras, emotions or bhavas and eye and body movements. The next part natya includes a dance drama based on Hindu mythological texts and epics. An Odissi performance is concluded with the dance movement referred as Moksha that aims to communicate a feeling of emancipation of the soul. | |||
| The most critical here being the pure dance that can be performed to highlight the structure and the vocabulary of the dance using choreography similar to what can be done using advanced penmenship of certain writers in their poems. | |||
| @@ -0,0 +1,45 @@ | |||
| --- | |||
| title: Emotive Adsense Project | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-11-30T19:59:36+00:00 | |||
| url: blog/2017/11/30/emotive-adsense-project/ | |||
| categories: | |||
| - projects | |||
| --- | |||
| <span class="embed-youtube" style="text-align:center; display: block;"></span> | |||
| ## Objective | |||
| Use Facial Expressions to find segments of the video where engagement is above a threshold and display advertisements during those segments. | |||
| | |||
| ## Domain Background | |||
| Internet Video Traffic will account for over 80% of all consumer internet traffic in the coming years. According to Cisco, by 2021, every second, a million minutes or almost 17,000 hours of video content will be uploaded on the internet. The whole video market is changing how businesses, brands or government communicate. Even though the bandwidth and internet speeds have increased, the attention span of users is still limited. With increasing number and length of videos, a system which can recommend video segments where the customers are highly engaged with the content can be used to lure customers to watch advertisements is becoming essential. Media corporations relying on getting their message to users must now rely on alternate measures to combat the information overload. Suggesting users with engaging or interesting content is one of those methods. For example, companies like Netflix who are actively pushing their own original content, need to suggest users with engaging clips to lure them into watching more of their content. | |||
| ## Problem Statement | |||
| Increasing bandwidth access of users with time has lead to the average youtube video length increasing from 2-5 minutes to 10-15 minutes within just a decade. A one hour video, which was once out of question for normal viewers, is now considered normal. Although, the time of videos has increased, any user can attest that most of the video content is just “fluff” or buffer content with the main content somewhere in the middle. Thereby, finding the most engaging part of a video will result in enabling platforms to suggest the most lucrative parts of the videos to place advertisements in. | |||
| | |||
| ## | |||
| ## Solution Statement | |||
| Our project solves this problem of segregating “fluff” from videos and recommending interesting parts of the video. By tagging videos with user reactions, and averaging over multiple users our system will be able to gain knowledge about the content in the video and hence, use the tagged content based on facial reactions of viewers, pick out segments inside a video to recommend to advertisers. The same segments can then be displayed as suggestions using autoplay, on the homepage, to lure viewers to click and view the whole video. | |||
| Finally, due to the large scope of the project, we were able to complete only 2 separate parts of the project. | |||
| | |||
| **Part 1. Training the Model for Emotion Recognition** | |||
| In this part, we trained a model (accuracy was very low due to limited GPU availability on our side) for Emotion Recognition. | |||
| **Part 2. Prototype UI – Applying Knowledge Engineering** | |||
| In this part, we developed a prototype UI which uses Affdex API for emotion recognition and displays advertisements when user engagement with video is above a chosen threshold. | |||
| @@ -0,0 +1,16 @@ | |||
| --- | |||
| title: What thefuck is wrong with… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-12-19T14:35:43+00:00 | |||
| url: blog/2017/12/19/what-thefuck-is-wrong-with/ | |||
| client-modified: | |||
| - "1513694143" | |||
| categories: | |||
| - uncategorized | |||
| format: aside | |||
| --- | |||
| **What thefuck is wrong with my zsh?** | |||
| Well, turns out, the reason it took so much time for my zsh to startup, was because of this program called **thefuck**. Used `zsh -xv` to figure out what took so long and did a `dnf remove thefuck` and fixed it. | |||
| @@ -0,0 +1,33 @@ | |||
| --- | |||
| title: Setting up LaTeX on Spacemacs | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-12-20T14:47:24+00:00 | |||
| url: blog/2017/12/20/setting-up-latex-on-spacemacs/ | |||
| categories: | |||
| - notes | |||
| tags: | |||
| - emacs | |||
| - foss | |||
| - latex | |||
| - linux | |||
| - spacemacs | |||
| - vim | |||
| --- | |||
| I have been using Vim for text editing and even Vim mode even in Sublime Text. Although, I wanted to use Org mode so I switched to Spacemacs with Evil mode that gives the best of both worlds. I had been using `TeXworks` and `TeXstudio` for editing and building LaTeX documents but now that I have Emacs, I wanted to try out the `pdf-tools` layer and `latex` layers so that all my work can be done from inside Spacemacs itself. Tomorrow, I even want to set up another tool that allows publishing to WordPress blogs through Emacs itself. Now that I have time to invest, I thought the best investment would be to invest it into saving more time in the future. | |||
| One of the great features about Emacs in my opinion is how much of the information is self documented inside the editor and how little I had to search on my browser as I could just press / and find out what I wanted to do. For example, I wanted to change the font size by one point, and I could easily do it by pressing `/` in my `.spacemacs` file and type font and edit a single line followed by simple restart. All of this without even having to search on the internet. Combine Vim’s excellent editing and maneuverability with the `Org mode` and `auto-completion`, Spacemacs turns out to a be a champion for any person who types for a living or even as a hobby. | |||
| The first step is to add the `latex` layer to the `.spacemacs` file which will automatically install everything required after pressing `SPC-f-e-R`. This, being a layer, will be automatically loaded on opening, say a tex file. | |||
| Then, all that needs to be done is press, `SPC-m-b` to build and `SPC-m-v` to view. | |||
| Although, by default, Emacs will open it in your default PDF viewer. Emacs also provides another layer, `pdf-tools`, briefly mentioned above, which allows rendering PDF files inside Emacs itself. Adding this layer to your config, you can add the following to your config file to set PDF tools to be your default PDF viewer inside Emacs. | |||
| <pre class="brush: plain; title: ; notranslate" title="">(setq TeX-view-program-selection '((output-pdf "PDF Tools")) | |||
| TeX-view-program-list '(("PDF Tools" TeX-pdf-tools-sync-view)) | |||
| TeX-source-correlate-start-server t | |||
| )</pre> | |||
| Similarly, we can also setup syncing between TeX and the PDF which I will cover sometime later when the need arises. | |||
| @@ -0,0 +1,18 @@ | |||
| --- | |||
| title: Switching to Spacemacs Based on… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-12-20T11:51:35+00:00 | |||
| url: blog/2017/12/20/switching-to-spacemacs-based-on/ | |||
| client-modified: | |||
| - "1513770694" | |||
| categories: | |||
| - uncategorized | |||
| tags: | |||
| - dgplug | |||
| format: aside | |||
| --- | |||
| **Switching to Spacemacs** | |||
| Based on mbuf (@shakthimaan)’s session in #dgplug about Reading and Writing habits, (https://dgplug.org/irclogs/2017/Logs-2017-12-18-13-23.txt) have decided to move to spacemacs from vim, just for Org mode. Let’s see how it goes! | |||
| @@ -0,0 +1,198 @@ | |||
| --- | |||
| title: Deep Learning Through the Lens of the Information Plane | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-12-21T14:31:58+00:00 | |||
| url: blog/2017/12/21/deep-learning-through-the-lens-of-the-information-plane/ | |||
| categories: | |||
| - projects | |||
| tags: | |||
| - datascience | |||
| - deeplearning | |||
| - informationtheory | |||
| - math | |||
| - neuralnetwork | |||
| - python | |||
| --- | |||
| The ridiculous effectiveness of Deep Learning has lead to research on tools that help to analyze these Deep Neural Network based “black boxes”. Recent research papers by the Information Theory community to analyze has rise to a new tool, The Information Plane, which can help analyze and answer various questions about these networks. This article, provides a brief overview of the concepts from information theory required to develop an understanding of the Information Plane, followed by a replication study of the implementation of the paper that introduces this theory with respect to Deep Neural Networks. | |||
| ## **1. Introduction** | |||
| Information Theory has long been considered marginal to Statistical Learning theory and has usually not been studied by Machine Learning researchers. It is considered to be an integral part of Communication Engineering and is often known to be the theory of Data Compression and Error Correcting Codes. With increased compute power enabled through GPUs, a new interest in Deep Learning (LeCun et al.[1]) has re-emerged. Although, Deep Learning provides ridiculous effectiveness, there is pretty much no fundamental theory behind these machines and they are often criticized for being used as mysterious “black boxes”[2]. This has lead to major corporations like Intel investing in research that focuses on building an understating of why deep networks work the way they do and has resulted in the recent paper on “Opening the Black Box of Deep Neural Networks via Information Theory” by Ravid Schwartz-Ziv and Naftali Tishby [2] which studies these by analyzing their information-theoretic properties and tries to provide a framework to study them using the Information Plane which have been based upon the work done by Naftali Tishby earlier [3]. The theory provides tools, such as the Information Plane, that can be used to reason about what happens during deep learning, a study of what happens during Deep Neural Network (DNN) learning during training and some hints for how the results can be applied to improve the efficiency of deep learning. | |||
| One of the observations from the paper [2] is that DNN training involves two distinct phases: First, the network trains to fully represent the input data and minimize the error in generalization and then, it learns to forget the irrelevant details by compressing the representation of the input. | |||
| Another observation is a potential explanation for why transfer learning works when the top most layers are retrained for similar tasks, but I skip it for further work as it is beyond the scope of this current study, although it has been mentioned while discussing the Asymptotic Equipartition Property. | |||
| From an engineering standpoint, the papers provide a very relevant theory which could help answer questions such as, if the trained model is optimal or not, if there exist any design principles for such machines, or if the layers or neurons represent anything and if the algorithms we use can be improved or not. | |||
| The following paper contributes via providing an overview of the fundamentals of Information Theory required to study these papers, followed by a detailed summary of the work related to the Information Plane and Deep Learning and finally a replication study containing a re implementation study and its results and comparison with the results of the original authors as well as the critics of the paper. The goal of the paper was to dive into cutting edge research and implement the state of the art and verify the results of both the original authors \[2\] \[3\] as well as the critique [4] submitted to ICML 2018. | |||
| ## **2. Concepts from Information Theory** | |||
| ### **2.1 Markov Chain** | |||
| A Markov process is a “memory-less” (also called “Markov Property”) stochastic process. A Markov chain is a type of Markov process containing multiple discrete states. That is being said, the conditional probability of future states of the process is only determined by the current state and does not depend on the past states. [5] | |||
| ### **2.2 KL Divergence** | |||
| KL divergence measures how one probability distribution <img src="//s0.wp.com/latex.php?latex=%7Bp%7D&bg=ffffff&fg=000000&s=0" alt="{p}" title="{p}" class="latex" />diverges from a second expected probability distribution <img src="//s0.wp.com/latex.php?latex=%7Bq%7D&bg=ffffff&fg=000000&s=0" alt="{q}" title="{q}" class="latex" />. It is asymmetric. [5] | |||
| <img src="//s0.wp.com/latex.php?latex=D_%7BKL%7D%28p+%5C%7C+q%29+%3D+%5Csum_x+p%28x%29+%5Clog+%5Cfrac%7Bp%28x%29%7D%7Bq%28x%29%7D+dx++%3D+-+%5Csum_x+p%28x%29%5Clog+q%28x%29+%2B+%5Csum_x+p%28x%29%5Clog+p%28x%29++%3D+H%28P%2C+Q%29+-+H%28P%29++&bg=ffffff&fg=000&s=0" alt="D_{KL}(p \| q) = \sum_x p(x) \log \frac{p(x)}{q(x)} dx = - \sum_x p(x)\log q(x) + \sum_x p(x)\log p(x) = H(P, Q) - H(P) " title="D_{KL}(p \| q) = \sum_x p(x) \log \frac{p(x)}{q(x)} dx = - \sum_x p(x)\log q(x) + \sum_x p(x)\log p(x) = H(P, Q) - H(P) " class="latex" /> | |||
| <img src="//s0.wp.com/latex.php?latex=%7BD_%7BKL%7D%7D&bg=ffffff&fg=000000&s=0" alt="{D_{KL}}" title="{D_{KL}}" class="latex" />achieves the minimum zero when <img src="//s0.wp.com/latex.php?latex=%7Bp%28x%29+%3D%3D+q%28x%29%7D&bg=ffffff&fg=000000&s=0" alt="{p(x) == q(x)}" title="{p(x) == q(x)}" class="latex" />everywhere. | |||
| ### **2.3 Mutual Information** | |||
| Mutual information measures the mutual dependence between two variables. It quantifies the “amount of information” obtained about one random variable through the other random variable. Mutual information is symmetric. [5] | |||
| <img src="//s0.wp.com/latex.php?latex=I%28X%3BY%29+%3D+D_%7BKL%7D%5Cleft%5B%7Ep%28x%2Cy%29+%7E%5C%7C%7E+p%28x%29p%28y%29%7E%5Cright%5D++%3D+%5Csum_%7Bx+%5Cin+X%2C+y+%5Cin+Y%7D+p%28x%2C+y%29+%5Clog%5Cleft%28%5Cfrac%7Bp%28x%2C+y%29%7D%7Bp%28x%29p%28y%29%7D%5Cright%29++%3D+%5Csum_%7Bx+%5Cin+X%2C+y+%5Cin+Y%7D+p%28x%2C+y%29+%5Clog%5Cleft%28%5Cfrac%7Bp%28x%7Cy%29%7D%7Bp%28x%29%7D%5Cright%29++%3D+H%28X%29+-+H%28X%7CY%29++&bg=ffffff&fg=000&s=0" alt="I(X;Y) = D_{KL}\left[~p(x,y) ~\|~ p(x)p(y)~\right] = \sum_{x \in X, y \in Y} p(x, y) \log\left(\frac{p(x, y)}{p(x)p(y)}\right) = \sum_{x \in X, y \in Y} p(x, y) \log\left(\frac{p(x|y)}{p(x)}\right) = H(X) - H(X|Y) " title="I(X;Y) = D_{KL}\left[~p(x,y) ~\|~ p(x)p(y)~\right] = \sum_{x \in X, y \in Y} p(x, y) \log\left(\frac{p(x, y)}{p(x)p(y)}\right) = \sum_{x \in X, y \in Y} p(x, y) \log\left(\frac{p(x|y)}{p(x)}\right) = H(X) - H(X|Y) " class="latex" /> | |||
| ### **2.4 Data Processing Inequality** | |||
| For any markov chain: <img src="//s0.wp.com/latex.php?latex=%7BX+%5Crightarrow+Y+%5Crightarrow+Z%7D&bg=ffffff&fg=000000&s=0" alt="{X \rightarrow Y \rightarrow Z}" title="{X \rightarrow Y \rightarrow Z}" class="latex" />, we would have [5] | |||
| <p align="center"> | |||
| <img src="//s0.wp.com/latex.php?latex=%5Cdisplaystyle+I%28X%3B+Y%29+%5Cgeq+I%28X%3B+Z%29+%5C+%5C+%5C+%5C+%5C+%281%29&bg=ffffff&fg=000000&s=0" alt="\displaystyle I(X; Y) \geq I(X; Z) \ \ \ \ \ (1)" title="\displaystyle I(X; Y) \geq I(X; Z) \ \ \ \ \ (1)" class="latex" /> | |||
| </p> | |||
| A deep neural network can be viewed as a Markov chain, and thus when we are moving down the layers of a DNN, the mutual information between the layer and the input can only decrease. | |||
| ### **2.5 Reparameterization Invariance** | |||
| For two invertible functions <img src="//s0.wp.com/latex.php?latex=%7B%5Cphi%7D&bg=ffffff&fg=000000&s=0" alt="{\phi}" title="{\phi}" class="latex" />, <img src="//s0.wp.com/latex.php?latex=%7B%5Cpsi%7D&bg=ffffff&fg=000000&s=0" alt="{\psi}" title="{\psi}" class="latex" />, the mutual information still holds: <a name="RepInv"></a> | |||
| <p align="center"> | |||
| <img src="//s0.wp.com/latex.php?latex=%5Cdisplaystyle+I%28X%3B+Y%29+%3D+I%28%5Cphi%28X%29%3B+%5Cpsi%28Y%29%29+%5C+%5C+%5C+%5C+%5C+%282%29&bg=ffffff&fg=000000&s=0" alt="\displaystyle I(X; Y) = I(\phi(X); \psi(Y)) \ \ \ \ \ (2)" title="\displaystyle I(X; Y) = I(\phi(X); \psi(Y)) \ \ \ \ \ (2)" class="latex" /> | |||
| </p> | |||
| | |||
| For example, if we shuffle the weights in one layer of DNN, it would not affect the mutual information between this layer and another. | |||
| ### **2.6 The Asymptotic Equipartition Property** | |||
| This theorem is a simple consequence of the weak law of large numbers. It states that if a set of values <img src="//s0.wp.com/latex.php?latex=%7BX_1%2C+X_2%2C+...%2C+X_n%7D&bg=ffffff&fg=000000&s=0" alt="{X_1, X_2, ..., X_n}" title="{X_1, X_2, ..., X_n}" class="latex" />is drawn independently from a random variable X distributed according to <img src="//s0.wp.com/latex.php?latex=%7BP%28x%29%7D&bg=ffffff&fg=000000&s=0" alt="{P(x)}" title="{P(x)}" class="latex" />, then the joint probability <img src="//s0.wp.com/latex.php?latex=%7BP%28X_1%2C...%2CX_n%29%7D&bg=ffffff&fg=000000&s=0" alt="{P(X_1,...,X_n)}" title="{P(X_1,...,X_n)}" class="latex" />satisfies [5] | |||
| <p align="center"> | |||
| <img src="//s0.wp.com/latex.php?latex=%5Cdisplaystyle+%5Cfrac%7B-1%7D%7Bn%7D+%5Clog_%7B2%7D%7BP%28X_1%2CX_2%2C...%2CX_n%29%7D+%5Crightarrow+H%28X%29+%5C+%5C+%5C+%5C+%5C+%283%29&bg=ffffff&fg=000000&s=0" alt="\displaystyle \frac{-1}{n} \log_{2}{P(X_1,X_2,...,X_n)} \rightarrow H(X) \ \ \ \ \ (3)" title="\displaystyle \frac{-1}{n} \log_{2}{P(X_1,X_2,...,X_n)} \rightarrow H(X) \ \ \ \ \ (3)" class="latex" /> | |||
| </p> | |||
| where <img src="//s0.wp.com/latex.php?latex=%7BH%28X%29%7D&bg=ffffff&fg=000000&s=0" alt="{H(X)}" title="{H(X)}" class="latex" />is the entropy of the random variable <img src="//s0.wp.com/latex.php?latex=%7BX%7D&bg=ffffff&fg=000000&s=0" alt="{X}" title="{X}" class="latex" />. | |||
| Although, this is out of bounds of the scope of this work, for the sake of completeness I would like to mention how the authors of [2] use this to argue that for a typical hypothesis class the size of <img src="//s0.wp.com/latex.php?latex=%7BX%7D&bg=ffffff&fg=000000&s=0" alt="{X}" title="{X}" class="latex" />is approximately <img src="//s0.wp.com/latex.php?latex=%7B2%5E%7BH%28X%29%7D%7D&bg=ffffff&fg=000000&s=0" alt="{2^{H(X)}}" title="{2^{H(X)}}" class="latex" />. Considering an <img src="//s0.wp.com/latex.php?latex=%7B%5Cepsilon%7D&bg=ffffff&fg=000000&s=0" alt="{\epsilon}" title="{\epsilon}" class="latex" />-partition, <img src="//s0.wp.com/latex.php?latex=%7BT_%5Cepsilon%7D&bg=ffffff&fg=000000&s=0" alt="{T_\epsilon}" title="{T_\epsilon}" class="latex" />, on <img src="//s0.wp.com/latex.php?latex=%7BX%7D&bg=ffffff&fg=000000&s=0" alt="{X}" title="{X}" class="latex" />, the cardinality of the hypothis class, <img src="//s0.wp.com/latex.php?latex=%7B%7CH_%5Cepsilon%7C%7D&bg=ffffff&fg=000000&s=0" alt="{|H_\epsilon|}" title="{|H_\epsilon|}" class="latex" />, can be written as <img src="//s0.wp.com/latex.php?latex=%7B%7CH_%5Cepsilon%7C+%5Csim+2%5E%7B%7CX%7C%7D+%5Crightarrow+2%5E%7B%7CT_%5Cepsilon%7C%7D%7D&bg=ffffff&fg=000000&s=0" alt="{|H_\epsilon| \sim 2^{|X|} \rightarrow 2^{|T_\epsilon|}}" title="{|H_\epsilon| \sim 2^{|X|} \rightarrow 2^{|T_\epsilon|}}" class="latex" />and therefore we have, | |||
| <p align="center"> | |||
| <img src="//s0.wp.com/latex.php?latex=%5Cdisplaystyle+%5Cvert+T_%5Cepsilon+%5Cvert+%5Csim+%5Cfrac%7B2%5E%7BH%28X%29%7D%7D%7B2%5E%7BH%28X+%5Cvert+T_%5Cepsilon%29%7D%7D+%3D+2%5E%7BI%28T_%5Cepsilon%3B+X%29%7D+%5C+%5C+%5C+%5C+%5C+%284%29&bg=ffffff&fg=000000&s=0" alt="\displaystyle \vert T_\epsilon \vert \sim \frac{2^{H(X)}}{2^{H(X \vert T_\epsilon)}} = 2^{I(T_\epsilon; X)} \ \ \ \ \ (4)" title="\displaystyle \vert T_\epsilon \vert \sim \frac{2^{H(X)}}{2^{H(X \vert T_\epsilon)}} = 2^{I(T_\epsilon; X)} \ \ \ \ \ (4)" class="latex" /> | |||
| </p> | |||
| Then the input compression bound, | |||
| <p align="center"> | |||
| <img src="//s0.wp.com/latex.php?latex=%5Cdisplaystyle+%5Cepsilon%5E2+%3C+%5Cfrac%7B%5Clog%7CH_%5Cepsilon%7C+%2B+%5Clog%7B1%2F%5Cdelta%7D%7D%7B2m%7D+%5C+%5C+%5C+%5C+%5C+%285%29&bg=ffffff&fg=000000&s=0" alt="\displaystyle \epsilon^2 < \frac{\log|H_\epsilon| + \log{1/\delta}}{2m} \ \ \ \ \ (5)" title="\displaystyle \epsilon^2 < \frac{\log|H_\epsilon| + \log{1/\delta}}{2m} \ \ \ \ \ (5)" class="latex" /> | |||
| </p> | |||
| becomes, | |||
| <p align="center"> | |||
| <img src="//s0.wp.com/latex.php?latex=%5Cdisplaystyle+%5Cepsilon%5E2+%3C+%5Cfrac%7B2%5E%7BI%28T_%5Cepsilon%3B+X%29%7D+%2B+%5Clog%7B1%2F%5Cdelta%7D%7D%7B2m%7D+%5C+%5C+%5C+%5C+%5C+%286%29&bg=ffffff&fg=000000&s=0" alt="\displaystyle \epsilon^2 < \frac{2^{I(T_\epsilon; X)} + \log{1/\delta}}{2m} \ \ \ \ \ (6)" title="\displaystyle \epsilon^2 < \frac{2^{I(T_\epsilon; X)} + \log{1/\delta}}{2m} \ \ \ \ \ (6)" class="latex" /> | |||
| </p> | |||
| The authors then further develop this to provide a general bound on learning by combining it with the Information Bottleneck theory [6]. | |||
| ## **3. Information Theory of Deep Learning** | |||
| ### **3.1 DNN Layers as Markov Chain** | |||
| In supervised learning, the training data contains sampled observations from the joint distribution of <img src="//s0.wp.com/latex.php?latex=%7BX%7D&bg=ffffff&fg=000000&s=0" alt="{X}" title="{X}" class="latex" />and <img src="//s0.wp.com/latex.php?latex=%7BY%7D&bg=ffffff&fg=000000&s=0" alt="{Y}" title="{Y}" class="latex" />. The input variable <img src="//s0.wp.com/latex.php?latex=%7BX%7D&bg=ffffff&fg=000000&s=0" alt="{X}" title="{X}" class="latex" />and weights of hidden layers are all high-dimensional random variable. The ground truth target <img src="//s0.wp.com/latex.php?latex=%7BY%7D&bg=ffffff&fg=000000&s=0" alt="{Y}" title="{Y}" class="latex" />and the predicted value <img src="//s0.wp.com/latex.php?latex=%7B%5Chat%7BY%7D%7D&bg=ffffff&fg=000000&s=0" alt="{\hat{Y}}" title="{\hat{Y}}" class="latex" />are random variables of smaller dimensions in the classification settings. Moreover, we want to efficiently learn such representations from an empirical sample of the (unknown) joint distribution <img src="//s0.wp.com/latex.php?latex=%7BP%28X%2CY%29%7D&bg=ffffff&fg=000000&s=0" alt="{P(X,Y)}" title="{P(X,Y)}" class="latex" />, in a way that provides good generalization. | |||
| <figure id="attachment_302" style="width: 700px" class="wp-caption aligncenter"><img class="wp-image-302 size-large" src="/wp-content/uploads/2017/12/fig1-700x442.png" alt="" width="700" height="442" srcset="/wp-content/uploads/2017/12/fig1-700x442.png 700w, /wp-content/uploads/2017/12/fig1-300x189.png 300w, /wp-content/uploads/2017/12/fig1-768x485.png 768w, /wp-content/uploads/2017/12/fig1.png 1382w" sizes="(max-width: 700px) 100vw, 700px" /><figcaption class="wp-caption-text">The structure of a deep neural network, which consists of the target label <img src="//s0.wp.com/latex.php?latex=%7BY%7D&bg=ffffff&fg=000000&s=0" alt="{Y}" title="{Y}" class="latex" />, input layer <img src="//s0.wp.com/latex.php?latex=%7BX%7D&bg=ffffff&fg=000000&s=0" alt="{X}" title="{X}" class="latex" />, hidden layers <img src="//s0.wp.com/latex.php?latex=%7Bh_1%2C%5Cdots%2Ch_m%7D&bg=ffffff&fg=000000&s=0" alt="{h_1,\dots,h_m}" title="{h_1,\dots,h_m}" class="latex" />and the final prediction <img src="//s0.wp.com/latex.php?latex=%7B%5Chat%7BY%7D%7D&bg=ffffff&fg=000000&s=0" alt="{\hat{Y}}" title="{\hat{Y}}" class="latex" />. (Image Source: Tishby 2015)[3]</figcaption></figure>If we label the hidden layers of a DNN as <img src="//s0.wp.com/latex.php?latex=%7Bh_1%2Ch_2%2C...%2Ch_m%7D&bg=ffffff&fg=000000&s=0" alt="{h_1,h_2,...,h_m}" title="{h_1,h_2,...,h_m}" class="latex" />as in Figure above, we can view each layer as one state of a Markov Chain: <img src="//s0.wp.com/latex.php?latex=%7Bh_i+%5Crightarrow+h_%7Bi%2B1%7D%7D&bg=ffffff&fg=000000&s=0" alt="{h_i \rightarrow h_{i+1}}" title="{h_i \rightarrow h_{i+1}}" class="latex" />. According to DPI, we would have: | |||
| <img src="//s0.wp.com/latex.php?latex=H%28X%29+%5Cgeq+I%28X%3B+h_1%29+%5Cgeq+I%28X%3B+h_2%29+%5Cgeq+...+%5Cgeq+I%28X%3B+h_m%29+%5Cgeq+I%28X%3B+%5Chat%7BY%7D%29++I%28X%3B+Y%29+%5Cgeq+I%28h_1%3B+Y%29+%5Cgeq+I%28h_2%3B+Y%29+%5Cgeq+...+%5Cgeq+I%28h_m%3B+Y%29+%5Cgeq+I%28%5Chat%7BY%7D%3B+Y%29++&bg=ffffff&fg=000&s=0" alt="H(X) \geq I(X; h_1) \geq I(X; h_2) \geq ... \geq I(X; h_m) \geq I(X; \hat{Y}) I(X; Y) \geq I(h_1; Y) \geq I(h_2; Y) \geq ... \geq I(h_m; Y) \geq I(\hat{Y}; Y) " title="H(X) \geq I(X; h_1) \geq I(X; h_2) \geq ... \geq I(X; h_m) \geq I(X; \hat{Y}) I(X; Y) \geq I(h_1; Y) \geq I(h_2; Y) \geq ... \geq I(h_m; Y) \geq I(\hat{Y}; Y) " class="latex" /> | |||
| A DNN is designed to learn how to describe <img src="//s0.wp.com/latex.php?latex=%7BX%7D&bg=ffffff&fg=000000&s=0" alt="{X}" title="{X}" class="latex" />to predict <img src="//s0.wp.com/latex.php?latex=%7BY%7D&bg=ffffff&fg=000000&s=0" alt="{Y}" title="{Y}" class="latex" />and eventually, to compress <img src="//s0.wp.com/latex.php?latex=%7BX%7D&bg=ffffff&fg=000000&s=0" alt="{X}" title="{X}" class="latex" />to only hold the information related to <img src="//s0.wp.com/latex.php?latex=%7BY%7D&bg=ffffff&fg=000000&s=0" alt="{Y}" title="{Y}" class="latex" />. Tishby describes this processing as “successive refinement of relevant information” [3]. | |||
| <figure id="attachment_303" style="width: 700px" class="wp-caption aligncenter"><img class="wp-image-303 size-large" src="/wp-content/uploads/2017/12/fig2-700x503.png" alt="" width="700" height="503" srcset="/wp-content/uploads/2017/12/fig2-700x503.png 700w, /wp-content/uploads/2017/12/fig2-300x216.png 300w, /wp-content/uploads/2017/12/fig2-768x552.png 768w, /wp-content/uploads/2017/12/fig2.png 869w" sizes="(max-width: 700px) 100vw, 700px" /><figcaption class="wp-caption-text">The DNN layers form a Markov chain of successive internal representations of the input layer <img src="//s0.wp.com/latex.php?latex=%7BX%7D&bg=ffffff&fg=000000&s=0" alt="{X}" title="{X}" class="latex" />. (Image Source: Schwartz-Ziv and Tishby 2017 [2])</figcaption></figure>As long as these transformations on <img src="//s0.wp.com/latex.php?latex=%7BX%7D&bg=ffffff&fg=000000&s=0" alt="{X}" title="{X}" class="latex" />in <img src="//s0.wp.com/latex.php?latex=%7BY%7D&bg=ffffff&fg=000000&s=0" alt="{Y}" title="{Y}" class="latex" />about <img src="//s0.wp.com/latex.php?latex=%7B%5Chat%7BY%7D%7D&bg=ffffff&fg=000000&s=0" alt="{\hat{Y}}" title="{\hat{Y}}" class="latex" />preserve information, we don’t really care which individual neurons within the layers encode which features of the input. This can be captured by finding the mutual information of <img src="//s0.wp.com/latex.php?latex=%7BT%7D&bg=ffffff&fg=000000&s=0" alt="{T}" title="{T}" class="latex" />with respect to <img src="//s0.wp.com/latex.php?latex=%7BX%7D&bg=ffffff&fg=000000&s=0" alt="{X}" title="{X}" class="latex" />and <img src="//s0.wp.com/latex.php?latex=%7B%5Chat%7BY%7D%7D&bg=ffffff&fg=000000&s=0" alt="{\hat{Y}}" title="{\hat{Y}}" class="latex" />. Schwartz-Ziv and Tishby (2017) treat the whole layer, <img src="//s0.wp.com/latex.php?latex=%7BT%7D&bg=ffffff&fg=000000&s=0" alt="{T}" title="{T}" class="latex" />, as a single random variable, charachterized by <img src="//s0.wp.com/latex.php?latex=%7BP%28T%7CX%29%7D&bg=ffffff&fg=000000&s=0" alt="{P(T|X)}" title="{P(T|X)}" class="latex" />and <img src="//s0.wp.com/latex.php?latex=%7BP%28Y%7CT%29%7D&bg=ffffff&fg=000000&s=0" alt="{P(Y|T)}" title="{P(Y|T)}" class="latex" />, the encoder and decoder distributions respectively, and use the Reparameterization Invariance given in [(2)][1] to argue that since layers related by invertible re-parameterization appear in the same point, each information path in the plane corresponds to many different DNN’s, with possibly very different architectures. [3] | |||
| <img src="//s0.wp.com/latex.php?latex=I%28X%3B+Y%29+%5Cgeq+I%28T_1%3B+Y%29+%5Cgeq+I%28T_2%3B+Y%29+%5Cgeq+...+%5Cgeq+I%28T_k%3B+Y%29+%5Cgeq+I%28%5Chat%7BY%7D%3B+Y%29++H%28X%29+%5Cgeq+I%28X%3B+T_1%29+%5Cgeq+I%28X%3B+T_2%29+%5Cgeq+...+%5Cgeq+I%28X%3B+T_k%29+%5Cgeq+I%28X%3B+%5Chat%7BY%7D%29++&bg=ffffff&fg=000&s=0" alt="I(X; Y) \geq I(T_1; Y) \geq I(T_2; Y) \geq ... \geq I(T_k; Y) \geq I(\hat{Y}; Y) H(X) \geq I(X; T_1) \geq I(X; T_2) \geq ... \geq I(X; T_k) \geq I(X; \hat{Y}) " title="I(X; Y) \geq I(T_1; Y) \geq I(T_2; Y) \geq ... \geq I(T_k; Y) \geq I(\hat{Y}; Y) H(X) \geq I(X; T_1) \geq I(X; T_2) \geq ... \geq I(X; T_k) \geq I(X; \hat{Y}) " class="latex" /> | |||
| This is to say that after training, when the trained network, the new input passes through the layers which form a Markov Chain, to the predicted output <img src="//s0.wp.com/latex.php?latex=%7B%5Chat%7BY%7D%7D&bg=ffffff&fg=000000&s=0" alt="{\hat{Y}}" title="{\hat{Y}}" class="latex" />. The information plane has been discussed further in Section [3][2]. | |||
| ### **3.2 The Information Plane** | |||
| <a name="ssecIP"></a> | |||
| Using the representation in Fig. [3][3], the encoder and decoder distributions; the encoder can be seen as a representation of <img src="//s0.wp.com/latex.php?latex=%7BX%7D&bg=ffffff&fg=000000&s=0" alt="{X}" title="{X}" class="latex" />, while the decoder translates the information in the current layer to the target output <img src="//s0.wp.com/latex.php?latex=%7BY%7D&bg=ffffff&fg=000000&s=0" alt="{Y}" title="{Y}" class="latex" />. | |||
| The information can be interpreted and visualized as a plot between the encoder mutual information <img src="//s0.wp.com/latex.php?latex=%7BI%28X%3BT_%7Bi%7D%29%7D&bg=ffffff&fg=000000&s=0" alt="{I(X;T_{i})}" title="{I(X;T_{i})}" class="latex" />and the decoder mutual information <img src="//s0.wp.com/latex.php?latex=%7BI%28T_%7Bi%7D%3BY%29%7D&bg=ffffff&fg=000000&s=0" alt="{I(T_{i};Y)}" title="{I(T_{i};Y)}" class="latex" />; | |||
| <figure id="attachment_304" style="width: 700px" class="wp-caption aligncenter"><img class="wp-image-304 size-large" src="/wp-content/uploads/2017/12/fig3-700x292.png" alt="" width="700" height="292" srcset="/wp-content/uploads/2017/12/fig3-700x292.png 700w, /wp-content/uploads/2017/12/fig3-300x125.png 300w, /wp-content/uploads/2017/12/fig3-768x320.png 768w, /wp-content/uploads/2017/12/fig3.png 1390w" sizes="(max-width: 700px) 100vw, 700px" /><figcaption class="wp-caption-text">The encoder vs decoder mutual information of DNN hidden layers of 50 experiments. Different layers are color-coded, with green being the layer right next to the input and the orange being the furthest. There are three snapshots, at the initial epoch, 400 epochs and 9000 epochs respectively. (Image source: Shwartz-Ziv and Tishby, 2017) [2])</figcaption></figure>Each dot in Fig. [3][4]. marks the encoder/ decoder mutual information of one hidden layer of one network simulation (no regularization is applied; no weights decay, no dropout, etc.). They move up as expected because the knowledge about the true labels is increasing (accuracy increases). At the early stage, the hidden layers learn a lot about the input X, but later they start to compress to forget some information about the input. Tishby believes that “the most important part of learning is actually forgetting”. [7] | |||
| Early on the points shoot up and to the right, as the hidden layers learn to retain more mutual information both with the input and also as needed to predict the output. But after a while, a phase shift occurs, and points move more slowly up and to the left. | |||
| <figure id="attachment_305" style="width: 761px" class="wp-caption aligncenter"><img class="wp-image-305 size-full" src="/wp-content/uploads/2017/12/fig4.png" alt="" width="761" height="289" srcset="/wp-content/uploads/2017/12/fig4.png 761w, /wp-content/uploads/2017/12/fig4-300x114.png 300w, /wp-content/uploads/2017/12/fig4-700x266.png 700w" sizes="(max-width: 761px) 100vw, 761px" /><figcaption class="wp-caption-text">The evolution of the layers with the training epochs in the information plane, for different training samples. On the left – 5% of the data, middle – 45% of the data, and right – 85% of the data. The colors indicate the number of training epochs with Stochastic Gradient Descent. (Image source: Shwartz-Ziv and Tishby, 2017) [2])</figcaption></figure>Schwartz-Ziv and Tishby name these two phases Empirical eRror Minimization (ERM) and the phase that follows as the Representation Compression Phase. Here the gradient means are much larger than their standard deviations, indicating small gradient stochasticity (high SNR). The increase in <img src="//s0.wp.com/latex.php?latex=%7BI_Y%7D&bg=ffffff&fg=000000&s=0" alt="{I_Y}" title="{I_Y}" class="latex" />is what we expect to see from cross-entropy loss minimization. The second diffusion phase minimizes the mutual information <img src="//s0.wp.com/latex.php?latex=%7BI%28X%3BT_i%29%7D&bg=ffffff&fg=000000&s=0" alt="{I(X;T_i)}" title="{I(X;T_i)}" class="latex" />– in other words, we’re discarding information in X that is irrelevant to the task at hand. | |||
| A consequence of this is pointed out by Schwartz-Ziv and Tishby indicating that there is a huge number of different networks with essentially optimal performance, and attempts to interpret single weights or even single neurons in such networks can be meaningless due to the randomised nature of the final weights of the DNN. [2] | |||
| ## **4. Experimental Setup and Results** | |||
| ### **4.1. Experimental Setup** | |||
| The experiments were done on a network with 7 fully connected hidden layers, and widths 12-10-7-5-4-3-2 neurons, similar to what had been done in the original paper. The network is trained using Stochiastic Gradient Descent and cross-entropy loss function, but no other explicit regularization. The activation functions are hyperbolic tangent in all layers but the final one, where a sigmoid function is used. The bin count was taken to be 24 for the mutual information calculation. Off the shelf python libraries such as Tensorflow[8], NumPy[9], ScikitLearn[9] were used for the re-implementation as described by the original paper. | |||
| Variations were made to the activation function to Rectified Linear Unit (ReLu) and Sigmoidal to verify the results of a recent paper [4] which is under open review for ICLR 2018 under the same conditions. | |||
| ### **4.2. Results** <figure id="attachment_310" style="width: 640px" class="wp-caption aligncenter"> | |||
| <img class="wp-image-310 size-full" src="/wp-content/uploads/2017/12/tanh-1.png" alt="" width="640" height="480" srcset="/wp-content/uploads/2017/12/tanh-1.png 640w, /wp-content/uploads/2017/12/tanh-1-300x225.png 300w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption class="wp-caption-text">Loss Function observed with a network having layers of 12-10-7-5-4-3-2 widths when trained with tanh as activation function. The X-Axis represents training losses and the Y-Axis represents steps</figcaption></figure> <figure id="attachment_316" style="width: 640px" class="wp-caption aligncenter"><img class="wp-image-316 size-full" src="/wp-content/uploads/2017/12/tanh-2.png" alt="" width="640" height="480" srcset="/wp-content/uploads/2017/12/tanh-2.png 640w, /wp-content/uploads/2017/12/tanh-2-300x225.png 300w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption class="wp-caption-text">Information Plane observed with a network having layers of 12-10-7-5-4-3-2 widths when trained with tanh as activation function. The X-Axis represents <img src="//s0.wp.com/latex.php?latex=%7BI%28X%3BT%29%7D&bg=ffffff&fg=000000&s=0" alt="{I(X;T)}" title="{I(X;T)}" class="latex" />and the Y-Axis represents <img src="//s0.wp.com/latex.php?latex=%7BI%28T%3BY%29%7D&bg=ffffff&fg=000000&s=0" alt="{I(T;Y)}" title="{I(T;Y)}" class="latex" /></figcaption></figure> | |||
| The results were plotted using the experimental setup and tanh as the activation function. It is important to note that it’s the lowest layer which appears in the top-right of this plot (maintains the most mutual information), and the top-most layer which appears in the bottom-left (has retained almost no mutual information before any training). So the information path being followed goes from the top-right corner to the bottom-left traveling down the slope. | |||
| Early on the points shoot up and to the right, as the hidden layers learn to retain more mutual information both with the input and also as needed to predict the output. But after a while, a phase shift occurs, and points move more slowly up and to the left.<figure id="attachment_306" style="width: 640px" class="wp-caption aligncenter"> | |||
| <img class="wp-image-306 size-full" src="/wp-content/uploads/2017/12/relu-1.png" alt="" width="640" height="480" srcset="/wp-content/uploads/2017/12/relu-1.png 640w, /wp-content/uploads/2017/12/relu-1-300x225.png 300w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption class="wp-caption-text">Loss Function observed with a network having layers of 12-10-7-5-4-3-2 widths when trained with ReLu as activation function. The X-Axis on the left represents training losses and the Y-Axis represents steps. The X-Axis represents for the figure on the right <img src="//s0.wp.com/latex.php?latex=%7BI%28X%3BT%29%7D&bg=ffffff&fg=000000&s=0" alt="{I(X;T)}" title="{I(X;T)}" class="latex" />and the Y-Axis represents <img src="//s0.wp.com/latex.php?latex=%7BI%28T%3BY%29%7D&bg=ffffff&fg=000000&s=0" alt="{I(T;Y)}" title="{I(T;Y)}" class="latex" /></figcaption></figure> <figure id="attachment_307" style="width: 640px" class="wp-caption aligncenter"><img class="wp-image-307 size-full" src="/wp-content/uploads/2017/12/relu-2.png" alt="" width="640" height="480" srcset="/wp-content/uploads/2017/12/relu-2.png 640w, /wp-content/uploads/2017/12/relu-2-300x225.png 300w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption class="wp-caption-text">Information Plane observed with a network having layers of 12-10-7-5-4-3-2 widths when trained with ReLu as activation function. The X-Axis on the left represents training losses and the Y-Axis represents steps. The X-Axis represents for the figure on the right <img src="//s0.wp.com/latex.php?latex=%7BI%28X%3BT%29%7D&bg=ffffff&fg=000000&s=0" alt="{I(X;T)}" title="{I(X;T)}" class="latex" />and the Y-Axis represents <img src="//s0.wp.com/latex.php?latex=%7BI%28T%3BY%29%7D&bg=ffffff&fg=000000&s=0" alt="{I(T;Y)}" title="{I(T;Y)}" class="latex" /></figcaption></figure> <figure id="attachment_309" style="width: 640px" class="wp-caption aligncenter"><img class="wp-image-309 size-full" src="/wp-content/uploads/2017/12/sigmoid-2.png" alt="" width="640" height="480" srcset="/wp-content/uploads/2017/12/sigmoid-2.png 640w, /wp-content/uploads/2017/12/sigmoid-2-300x225.png 300w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption class="wp-caption-text">Information Plane observed with a network having layers of 12-10-7-5-4-3-2 widths when trained with Sigmoid as activation function. The X-Axis on the left represents training losses and the Y-Axis represents steps. The X-Axis represents for the figure on the right <img src="//s0.wp.com/latex.php?latex=%7BI%28X%3BT%29%7D&bg=ffffff&fg=000000&s=0" alt="{I(X;T)}" title="{I(X;T)}" class="latex" />and the Y-Axis represents <img src="//s0.wp.com/latex.php?latex=%7BI%28T%3BY%29%7D&bg=ffffff&fg=000000&s=0" alt="{I(T;Y)}" title="{I(T;Y)}" class="latex" /></figcaption></figure> <figure id="attachment_308" style="width: 640px" class="wp-caption aligncenter"><img class="wp-image-308 size-full" src="/wp-content/uploads/2017/12/sigmoid-1.png" alt="" width="640" height="480" srcset="/wp-content/uploads/2017/12/sigmoid-1.png 640w, /wp-content/uploads/2017/12/sigmoid-1-300x225.png 300w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption class="wp-caption-text">Loss Function observed with a network having layers of 12-10-7-5-4-3-2 widths when trained with Sigmoid as activation function. The X-Axis on the left represents training losses and the Y-Axis represents steps. The X-Axis represents for the figure on the right <img src="//s0.wp.com/latex.php?latex=%7BI%28X%3BT%29%7D&bg=ffffff&fg=000000&s=0" alt="{I(X;T)}" title="{I(X;T)}" class="latex" />and the Y-Axis represents <img src="//s0.wp.com/latex.php?latex=%7BI%28T%3BY%29%7D&bg=ffffff&fg=000000&s=0" alt="{I(T;Y)}" title="{I(T;Y)}" class="latex" /></figcaption></figure> | |||
| ### **4.3. Analysis** | |||
| The results of using the hyperbolic tan function (tanh) as the choice for activation function corresponds with results obtained by Schwartz-Ziv and Tishby (2017) [2]. Although, the same can’t be said about the results obtained when ReLu or Sigmoid function was used as the activation function. The network seems to stabilize much faster when trained with ReLu but does not show any of the charachteristics mentioned by Schwartz-Ziv and Tishby (2017) such as compression and diffusion in the information plane. This is in line with [4], although the authors have commented in the open review [4] that they have used other strategies for binning during MI calculation which give correct results. The compression and diffusion phases can be clearly seen in Fig. [4][5]. The corresponding plot of the loss function also shows that the DNN actually learned the input variable <img src="//s0.wp.com/latex.php?latex=%7BX%7D&bg=ffffff&fg=000000&s=0" alt="{X}" title="{X}" class="latex" />with respect to the ground truth <img src="//s0.wp.com/latex.php?latex=%7BY%7D&bg=ffffff&fg=000000&s=0" alt="{Y}" title="{Y}" class="latex" />. | |||
| ## References | |||
| [1] Y. LeCun, Y. Bengio, and G. E. Hinton, “Deep learning,” Nature, vol. 521, no. 7553, pp. 436–444, 2015. [Online]. Available: <a href="http://sci-hub.tw/10.1038/nature14539" target="_blank" rel="noopener noreferrer">http://sci-hub.tw/10.1038/nature14539</a> | |||
| [2] R. Shwartz-Ziv and N. Tishby, “Opening the black box of deep neural networks via information,” CoRR, vol. abs/1703.00810, 2017. [Online]. Available: http://arxiv.org/abs/1703.00810 | |||
| [3] N. Tishby and N. Zaslavsky, “Deep learning and the information bottleneck principle,” CoRR, vol. abs/1503.02406, 2015. [Online]. Available: http://arxiv.org/abs/1503.02406 | |||
| [4] Anonymous, “On the information bottleneck theory of deep learning,” International Conference on Learning Representations, 2018. [Online]. Available: https://openreview.net/forum?id=ry WPG-A- | |||
| [5] T. M. Cover and J. A. Thomas, Elements of Information Theory (Wiley Series in Telecommunications and Signal Processing). Wiley-Interscience, 2006. | |||
| [6] N. Tishby, F. C. N. Pereira, and W. Bialek, “The information bottleneck method,” CoRR, vol. physics/0004057, 2000. [Online]. Available: http://arxiv.org/abs/physics/0004057 | |||
| [7] L.Weng. Anatomize deep learning with informa-tion theory. [Online]. Available: https://lilianweng.github.io/lillog/2017/09/28/anatomize-deep-learning-with-information-theory.html | |||
| [8] M. Abadi, A. Agarwal, P. Barham, E. Brevdo, Z. Chen, C. Citro, G. S. Corrado, A. Davis, J. Dean, M. Devin, S. Ghemawat, I. Goodfellow, A. Harp, G. Irving, M. Isard, Y. Jia, R. Jozefowicz, L. Kaiser, M. Kudlur, J. Levenberg, D. Mané, R. Monga, S. Moore, D. Murray, C. Olah, M. Schuster, J. Shlens, B. Steiner, I. Sutskever, K. Talwar, P. Tucker, V. Vanhoucke, V. Vasudevan, F. Viégas, O. Vinyals, P. Warden, M. Wattenberg, M. Wicke, Y. Yu, and X. Zheng, “TensorFlow: Large-scale machine learning on heterogeneous systems,” 2015, software available from tensorflow.org. [Online]. Available: https://www.tensorflow.org/ | |||
| [9] E. Jones, T. Oliphant, P. Peterson et al., “SciPy: Open source scientific tools for Python,” 2001–, [Online; accessed ¡today¿]. [Online]. Available: http://www.scipy.org/ | |||
| [10] S. Prabh. Prof. shashi prabh homepage. [Online]. Available: https://sites.google.com/a/snu.edu.in/shashi-prabh/home | |||
| [11] N. Wolchover. New theory cracks open the black box of deep learning — quanta magazine. Quanta Magazine. [On-line]. Available: https://www.quantamagazine.org/new-theory-cracks- | |||
| open-the-black-box-of-deep-learning-20170921/ | |||
| [12] Machine learning subreddit. [Online]. Available: https://www.reddit.com/r/MachineLearning/ | |||
| <span style="font-size: 8pt;"><em>This work has been undertaken in the Course Project component for the elective titled “Information Theory (Fall 2017)” [https://sites.google.com/a/snu.edu.in/shashi-prabh/teaching/information-theory-2017] at Shiv Nadar University under the guidance of Prof. Shashi Prabh</em></span> | |||
| | |||
| | |||
| [1]: #RepInv | |||
| [2]: #ssecIP | |||
| [3]: #encdec | |||
| [4]: #infoplane | |||
| [5]: #FigTanhIP | |||
| @@ -0,0 +1,43 @@ | |||
| --- | |||
| title: Setting up Python on Spacemacs and using Pyenv to use Python3 | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2017-12-21T12:55:34+00:00 | |||
| url: blog/2017/12/21/setting-up-python-on-spacemacs-and-using-pyenv-to-use-python3/ | |||
| categories: | |||
| - foss | |||
| - notes | |||
| - uncategorized | |||
| tags: | |||
| - fedora | |||
| - python | |||
| - spacemacs | |||
| --- | |||
| After diving into Spacemacs yesterday, I was able to setup LaTeX properly. Only SyncTeX is left to be setup although, right now I can live without it. After tweeting about it, I got a reply about setting up Python on Spacemacs. I had installed the python layer but had not tested it. There was no hitch, although I faced a small issue with having python2 as well as python3 on my system. Emacs recognized only python2. I ended up finding about pyvenv which I have discussed below. Also, am optimistic that I will be able to setup Pipenv as well through pipenv.el that is available on GitHub by tomorrow. Also, have commited my .spacemacs file to my dotfiles repository on github. | |||
| Getting started with the setup along with the basic packages etc. was easy by just adding the python layer into the `.spacemacs` file. Then, the only thing need to be done was install, by pressing `SPC-f-e-R`. I then tried to run a python interpreter in a new buffer by, going to the menu `SPC-SPC-` and typing `run-python.` After the `ipython` shell worked out fine, I decided to run a python file by entering one. Without any hitch, the python mode loaded and I could press `SPC-m-c-c` to run the file. | |||
| The problem I mentioned above about the python versions came into my view when I ran a simple print function, which gave an error as I did not have any shebang on top of the file. This made me realize a potential problem in the future as Python development heavily depends upon virtual environments. Thankfully, the python layer had already added pyvenv and pyenv. Although, pyenv only listed one `system` version, and that too it was of python2. So to solve this, I ran the following: | |||
| <pre class="brush: plain; title: ; notranslate" title="">pyenv virtualenv -p /usr/bin/python2 venv2 | |||
| pyenv virtualenv -p /usr/bin/python3 venv3 | |||
| </pre> | |||
| | |||
| The \`-p\` flag is documented in the virtualenv docs as: | |||
| > The Python interpreter to use, e.g., –python=python2.5 will use the python2.5 interpreter to create the new environment. The default is the interpreter that virtualenv was installed with (like <code class="docutils literal"><span class="pre">/usr/bin/python</span></code>) | |||
| Afterwards, it was easy to change the environment inside emacs using `SPC-m-v-s` and choose `venv3` for using python3 instead of python2. Similarly, `-V` can be used instead of `-v` to set virtualenvs using directories. | |||
| I’m looking forward to setting up the [Pipenv.el][1] to be able to use [pipenv][2] as well. | |||
| **References:** | |||
| * <https://github.com/pyenv/pyenv/issues/158#issuecomment-40888875> | |||
| * <https://stackoverflow.com/questions/47104498/how-to-run-pipenv-python-as-emacs-python-shell> | |||
| [1]: https://github.com/pwalsh/pipenv.el | |||
| [2]: http://pipenv.readthedocs.io/en/latest/ | |||
| @@ -0,0 +1,93 @@ | |||
| --- | |||
| title: Featured on Google’s Instagram | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2018-02-23T15:07:54+00:00 | |||
| url: blog/2018/02/23/featured-on-googles-instagram-instagram/ | |||
| client-modified: | |||
| - "1521385675" | |||
| categories: | |||
| - misc | |||
| - projects | |||
| - uncategorized | |||
| format: aside | |||
| --- | |||
| Featured on Google’s Instagram | |||
| <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-permalink="https://www.instagram.com/p/BfeH2m4HDd-/?utm_source=ig_embed&utm_medium=loading" data-instgrm-version="12" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:640px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"> | |||
| <div style="padding:16px;"> | |||
| <a href="https://www.instagram.com/p/BfeH2m4HDd-/?utm_source=ig_embed&utm_medium=loading" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;" target="_blank"> | |||
| <div style=" display: flex; flex-direction: row; align-items: center;"> | |||
| <div style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"> | |||
| </div> | |||
| <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;"> | |||
| <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"> | |||
| </div> | |||
| <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div style="padding: 19% 0;"> | |||
| </div> | |||
| <div style="display:block; height:50px; margin:0 auto 12px; width:50px;"> | |||
| <svg width="50px" height="50px" viewBox="0 0 60 60" version="1.1" xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-511.000000, -20.000000)" fill="#000000"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"></path></g></g></g></svg> | |||
| </div> | |||
| <div style="padding-top: 8px;"> | |||
| <div style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;"> | |||
| View this post on Instagram | |||
| </div> | |||
| </div> | |||
| <div style="padding: 12.5% 0;"> | |||
| </div> | |||
| <div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;"> | |||
| <div> | |||
| <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"> | |||
| </div> | |||
| <div style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"> | |||
| </div> | |||
| <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"> | |||
| </div> | |||
| </div> | |||
| <div style="margin-left: 8px;"> | |||
| <div style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"> | |||
| </div> | |||
| <div style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)"> | |||
| </div> | |||
| </div> | |||
| <div style="margin-left: auto;"> | |||
| <div style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"> | |||
| </div> | |||
| <div style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"> | |||
| </div> | |||
| <div style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"> | |||
| </div> | |||
| </div> | |||
| </div></a> | |||
| <p style=" margin:8px 0 0 0; padding:0 4px;"> | |||
| <a href="https://www.instagram.com/p/BfeH2m4HDd-/?utm_source=ig_embed&utm_medium=loading" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">Using our open-source machine learning framework TensorFlow, self-taught coder Rohan invented an app that provides nutritional info on food just by snapping a picture of it. See our story today for more on this computer science rockstar from New Delhi. #SearchOn</a> | |||
| </p> | |||
| <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"> | |||
| A post shared by <a href="https://www.instagram.com/google/?utm_source=ig_embed&utm_medium=loading" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;" target="_blank"> Google</a> (@google) on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2018-02-21T19:35:18+00:00">Feb 21, 2018 at 11:35am PST</time> | |||
| </p> | |||
| </div> | |||
| </blockquote> | |||
| @@ -0,0 +1,19 @@ | |||
| --- | |||
| title: Extract filenames without their extensions… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2018-03-18T15:03:10+00:00 | |||
| url: blog/2018/03/18/extract-filenames-without-their-extensions/ | |||
| client-modified: | |||
| - "1521385389" | |||
| categories: | |||
| - tutorials | |||
| - uncategorized | |||
| tags: | |||
| - linux | |||
| format: aside | |||
| --- | |||
| Extract filenames without their extensions and put it in the clipboard | |||
| <pre class="brush: plain; title: ; notranslate" title="">ls -C | awk -F"." '{print $1}' | xclip -selection c</pre> | |||
| @@ -0,0 +1,14 @@ | |||
| --- | |||
| title: Today I integrated the WordPress… | |||
| author: rhnvrm | |||
| type: post | |||
| date: 2018-03-20T18:01:32+00:00 | |||
| url: blog/2018/03/20/today-i-integrated-the-wordpress/ | |||
| client-modified: | |||
| - "1521568892" | |||
| categories: | |||
| - uncategorized | |||
| format: aside | |||
| --- | |||
| Today I integrated the WordPress API into my Homepage to display my projects. It now uses an Ajax call to fetch the latest posts in the Project category. Also, I removed the font-awesome icons which were messing up the profile links. | |||
| @@ -0,0 +1,18 @@ | |||
| --- | |||
| title: Genie – The Voice Enabled Coding Companion – Winner Dell Intern Hackathon | |||
| author: Rohan Verma | |||
| type: post | |||
| date: 2018-05-11T14:27:21+00:00 | |||
| url: blog/2018/05/11/genie-the-voice-enabled-coding-companion-winner-dell-intern-hackathon/ | |||
| categories: | |||
| - projects | |||
| tags: | |||
| - alexa | |||
| - hackathon | |||
| - productivity | |||
| - python | |||
| --- | |||
| <span class="embed-youtube" style="text-align:center; display: block;"></span> | |||
| Genie is a Voice Assistant made up of three agents who talk to you and help you automate software engineering tasks. Watch the video to understand what it can do for you. | |||
| @@ -0,0 +1,18 @@ | |||
| --- | |||
| title: My personal opinion about learning frameworks | |||
| author: Rohan Verma | |||
| type: post | |||
| date: 2018-05-11T14:19:01+00:00 | |||
| url: blog/2018/05/11/my-personal-opinion-about-learning/ | |||
| client-modified: | |||
| - "1526048340" | |||
| categories: | |||
| - uncategorized | |||
| format: aside | |||
| --- | |||
| My personal opinion about learning specific topics and frameworks is that it is not required to be done. In fact, it is only due to our education that we end up learning frameworks in the “learn first – then apply” kind of way. I would suggest trying a different approach. | |||
| Decide on what you want to automate. What I mean by this is think of your day to day activities that you do online which you can automate. After you have found a problem (you can also try to solve others problems), sit down and list down what tools you think might help you to solve said problem. It could be a simple python script. After you have written the script, think of how you can make it a product by having a User Interface. A simple web interface can be created using Flask that runs the script you wrote on the press of a button. Finally, you will want to deliver this product to users, for which you can use Heroku/Digital Ocean/Openshift etc. | |||
| In this way, you will always be motivated to find the solution and not waste much time in reading through things that will be essentially off-topic to you. | |||
| @@ -0,0 +1,56 @@ | |||
| --- | |||
| title: Reviving an old Samsung N150 Netbook and making it a solid Dev Environment | |||
| author: Rohan Verma | |||
| type: post | |||
| date: 2018-05-16T14:51:23+00:00 | |||
| url: blog/2018/05/16/reviving-an-old-samsung-n150-netbook-and-making-it-a-solid-dev-environment/ | |||
| categories: | |||
| - foss | |||
| - notes | |||
| - xfce | |||
| tags: | |||
| - archlinux | |||
| - foss | |||
| - gnu | |||
| - linux | |||
| - productivity | |||
| - xfce | |||
| --- | |||
| I had an old Samsung N150 netbook lying around in my parent’s house. It was an amazing netbook and I remember fondly using it when my parents were not using it to browse the internet and sometimes even use it for school work. It came with Windows Vista if I recall correctly but I had installed Windows XP service pack 3 on it because as we know, Vista sucked! Well, the netbook was very solid, it even ran small games such as Fifa Manager etc and came with a solid keyboard, ethernet and VGA as well for connecting to a big screen. Although, its current state is pretty dismal with Avast Antivirus beeping every other second with a “Threat has been detected” alert as it is riddled with loads of russian malware. | |||
| After thinking a lot, I decided to install Arch linux using Anarchy Linux as I always wanted to have an Arch machine. I have only ever used it before on my previous laptop but had again reverted to Fedora on it a few days later as I could not upgrade that often on University internet. | |||
| The first step was to download Anarchy from https://anarchy-linux.org/download/ | |||
| > ## Anarchy Linux is a distribution aimed at bringing the Linux revolution to the world. We believe that Linux is the way of the future for desktop computing and provide you with a platform to install a custom Arch based operating system just the way you like. Anarchy Linux is intended for both novice and advanced users alike. | |||
| To write to the USB drive, I used: | |||
| `sudo dd if=anarchy-1.0.0-x86_64.iso of=/dev/sdb1 bs=4M && sync` | |||
| The boot sequence worked properly and opened the Anarchy boot screen. I selected the option to start the live environment to start the installer. The installer however failed to start the GUI installer and instead started the text based installer. However, the experience in my opinion was much better than most GUI installers I have used like Anaconda for Fedora. The only thing that comes to mind is that one should connect to the wifi first before starting the installer using wifi-menu. Otherwise package installation will probably be something that would have to be done after booting for the first time. | |||
| My first attempt failed, I had selected the option to download a few custom packages like text editors but their download failed for some reason and the whole process had to be restarted. The download of around 700 MB was wasted along with 1 hour. In my second attempt I went with just the default packages and the download size came to be around 396 MB. | |||
| The problem, I figured, was due to a “improperly signed by the maintainer” (https://plus.google.com/108897040723051595529/posts/M3REzAKNWCf) on the numix circle package. I could not find the solution, but I tried to disable the sign checking by setting SigLevel to Never from Required in the pacman.conf options. This did not work and then I decided that it might be more suitable to boot into the OS first then try to solve the issue later. So I decided to skip installation of the DE as the failiure was happening with that. But even this did not work out. | |||
| What I figured was happening was nothing but the Anarchy installer failing to pacstrap as it did not retry the downloads which timedout. | |||
| None of this worked so I decided to do a manual install using Arch Linux ISO, as I had used that before successfully. I also knew that pacstrap retried the downloads instead of giving an error. | |||
| The steps I followed are given in Arch Wiki (https://wiki.archlinux.org/index.php/installation_guide) | |||
| We have to install the sudo package. It allows using | |||
| `pacman -S sudo` | |||
| Then run visudo command and add your user to the sudoers. | |||
| `rhnvrm ALL=(ALL) ALL` | |||
| The next step was to install XFCE4 and XFCE4 Goodies. | |||
| `pacman -S xfce4 xfce4-goodies` | |||
| After this, I started to set up the machine according to my liking. | |||
| @@ -0,0 +1,16 @@ | |||
| --- | |||
| title: Emacs starts a bit slow… | |||
| author: Rohan Verma | |||
| type: post | |||
| date: 2018-06-07T10:11:52+00:00 | |||
| url: blog/2018/06/07/emacs-starts-a-bit-slow/ | |||
| client-modified: | |||
| - "1528366312" | |||
| categories: | |||
| - uncategorized | |||
| format: aside | |||
| --- | |||
| Emacs starts a bit slow but it can be started as a daemon | |||
| <pre class="brush: plain; title: ; notranslate" title="">emacsclient -c -n -e '(switch-to-buffer nil)'</pre> | |||
| @@ -0,0 +1,101 @@ | |||
| --- | |||
| title: Functional Options for testing without mocks in Golang | |||
| author: Rohan Verma | |||
| type: post | |||
| date: 2018-07-30T16:55:48+00:00 | |||
| url: blog/2018/07/30/functional-options-for-testing-without-mocks-in-golang/ | |||
| categories: | |||
| - notes | |||
| tags: | |||
| - api | |||
| - golang | |||
| - notes | |||
| --- | |||
| Suppose you have a HTTP request to be sent but don’t care about the result or errors. This request is sent through a function which is usually called inside a goroutine and is not in any way a core aspect of your main logic. The only important part is forming the actual request and the payload. When you wrote this function, you did not write tests as it would be a pain to make the function return something and check it. Now that the core component is completed, you want to test that the request formed is actually in fact created properly and abides by a small set of rules expected by the reader of the payload packet. | |||
| Usually, structs are created with Option structs which hold parameters which are used inside New() constructors. These allow reducing the configurations down to initializing one config struct which can be set by the caller. Although, it is useful for the API creator, it can become cumbersome for the API user. As pointed out by [Dave Cheney][1], it obfuscates the API and causes problems with defaults. | |||
| Another way is to use Functional Options, for example | |||
| <pre><code class="language-go"> | |||
| type Server struct { | |||
| logger *logrus.Logger // optional | |||
| store databaste.Store // required | |||
| } | |||
| type ServerOption func(Server) Server | |||
| func WithLogger(logger *logrus.Logger) ServerOption { | |||
| return func(s Server) Server { | |||
| s.logger = logger | |||
| return s | |||
| } | |||
| } | |||
| func NewServer(store database.Store, options ...ServerOption) *Server { | |||
| s := Server{store: store} | |||
| for _, option := range options { | |||
| s = option(s) | |||
| } | |||
| return &s | |||
| } | |||
| func main() { | |||
| myServer := NewServer(myStore, WithLogger(myLogger)) | |||
| } | |||
| </code></pre> | |||
| In the above example, we can set the logger without having to depend on config structs and obfuscating the API. | |||
| Now that we have potentially solved configuration issues, we can move on to testing. To avoid writing mock functions, we can inject a function that actually performs the request. This way, the default method will be to use the actual implementation but the test can inject a function which simply returns the data we want to check in a way that would be easier for us to test with. | |||
| <pre><code class="language-go"> | |||
| // app.go | |||
| // WithRequestSender sets the RequestSender for MyStruct. | |||
| func WithRequestSender(fn func([]byte, *MyStruct)) Option { | |||
| return func(f *MyStruct) { | |||
| f.RequestSender = fn | |||
| } | |||
| } | |||
| // app_Test.go | |||
| func TestMyStruct_save(t *testing.T) { | |||
| var result string | |||
| getResult := func(s []byte, p *MyStruct) { | |||
| result = string(s) | |||
| } | |||
| p := New( | |||
| WithLogger(log.New(os.Stdout, "TEST: ", log.Ldate|log.Ltime|log.Lshortfile)), | |||
| WithQueueSize(1000), | |||
| WithRequestSender(getResult), | |||
| ) | |||
| Convey("Given some Content is created with some initial values", t, func() { | |||
| s := Content{ | |||
| Token: 123, | |||
| } | |||
| Convey("When the struct is inserted into the queue and save is called", func() { | |||
| q := *p.GetFromQueue() | |||
| q <- s | |||
| p.save() | |||
| Convey("Then the result created by struct to be sent to endpoint", func() { | |||
| Convey("The result should begin with [", func() { | |||
| So(result[0], ShouldEqual, '[') | |||
| }) | |||
| Convey("The result should end with ]", func() { | |||
| So(result[len(result)-1], ShouldEqual, ']') | |||
| }) | |||
| Convey("The result should contain statement", func() { | |||
| So(result, ShouldContainSubstring, string(MyStmt)) | |||
| }) | |||
| }) | |||
| }) | |||
| }) | |||
| } | |||
| </code></pre> | |||
| The above way, enables us to check data that might be coming to us in some convoluted way without ever having to write complicated unreadable code or having to modify much of the actual implementation. | |||
| [1]: https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis | |||