From f60ed1ef6f26ad80cc30b8e31660865a0205e0d1 Mon Sep 17 00:00:00 2001 From: Navan Chauhan Date: Sun, 11 Oct 2020 16:23:07 +0530 Subject: Publish deploy 2020-10-11 16:23 --- .googlecb0897d479c87d97 7.html.icloud | Bin 0 -> 178 bytes assets/posts/obs/01-media-source.png | Bin 0 -> 144620 bytes assets/posts/obs/01-panel.png | Bin 0 -> 120308 bytes assets/posts/obs/01-pewdiepie.png | Bin 0 -> 3443183 bytes assets/posts/obs/02-remote.png | Bin 0 -> 930081 bytes assets/posts/obs/021-rotate.png | Bin 0 -> 725295 bytes assets/posts/obs/021-source.png | Bin 0 -> 91620 bytes assets/posts/obs/11.png | Bin 0 -> 3161115 bytes assets/posts/obs/3-usb.png | Bin 0 -> 9395165 bytes assets/posts/obs/5S.png | Bin 0 -> 2938273 bytes assets/posts/obs/dics.css | 229 ++++++++ assets/posts/obs/dics.js | 638 ++++++++++++++++++++++ assets/posts/obs/mirrorless.png | Bin 0 -> 3103912 bytes assets/posts/obs/normal.png | Bin 0 -> 3610888 bytes assets/posts/obs/usb.png | Bin 0 -> 2560671 bytes feed.rss | 18 +- index.html | 2 +- posts/2020-10-11-macOS-Virtual-Cam-OBS/index.html | 17 + posts/index.html | 2 +- sitemap.xml | 2 +- tags/index.html | 2 +- tags/review/index.html | 1 + tags/tutorial/index.html | 2 +- tags/webcam/index.html | 1 + 24 files changed, 908 insertions(+), 6 deletions(-) create mode 100644 .googlecb0897d479c87d97 7.html.icloud create mode 100644 assets/posts/obs/01-media-source.png create mode 100644 assets/posts/obs/01-panel.png create mode 100644 assets/posts/obs/01-pewdiepie.png create mode 100644 assets/posts/obs/02-remote.png create mode 100644 assets/posts/obs/021-rotate.png create mode 100644 assets/posts/obs/021-source.png create mode 100644 assets/posts/obs/11.png create mode 100644 assets/posts/obs/3-usb.png create mode 100644 assets/posts/obs/5S.png create mode 100644 assets/posts/obs/dics.css create mode 100644 assets/posts/obs/dics.js create mode 100644 assets/posts/obs/mirrorless.png create mode 100644 assets/posts/obs/normal.png create mode 100644 assets/posts/obs/usb.png create mode 100644 posts/2020-10-11-macOS-Virtual-Cam-OBS/index.html create mode 100644 tags/review/index.html create mode 100644 tags/webcam/index.html diff --git a/.googlecb0897d479c87d97 7.html.icloud b/.googlecb0897d479c87d97 7.html.icloud new file mode 100644 index 0000000..fa49def Binary files /dev/null and b/.googlecb0897d479c87d97 7.html.icloud differ diff --git a/assets/posts/obs/01-media-source.png b/assets/posts/obs/01-media-source.png new file mode 100644 index 0000000..cb9c90b Binary files /dev/null and b/assets/posts/obs/01-media-source.png differ diff --git a/assets/posts/obs/01-panel.png b/assets/posts/obs/01-panel.png new file mode 100644 index 0000000..ab5e9f3 Binary files /dev/null and b/assets/posts/obs/01-panel.png differ diff --git a/assets/posts/obs/01-pewdiepie.png b/assets/posts/obs/01-pewdiepie.png new file mode 100644 index 0000000..e6db0be Binary files /dev/null and b/assets/posts/obs/01-pewdiepie.png differ diff --git a/assets/posts/obs/02-remote.png b/assets/posts/obs/02-remote.png new file mode 100644 index 0000000..0ccf7c7 Binary files /dev/null and b/assets/posts/obs/02-remote.png differ diff --git a/assets/posts/obs/021-rotate.png b/assets/posts/obs/021-rotate.png new file mode 100644 index 0000000..2d7366d Binary files /dev/null and b/assets/posts/obs/021-rotate.png differ diff --git a/assets/posts/obs/021-source.png b/assets/posts/obs/021-source.png new file mode 100644 index 0000000..b848ac0 Binary files /dev/null and b/assets/posts/obs/021-source.png differ diff --git a/assets/posts/obs/11.png b/assets/posts/obs/11.png new file mode 100644 index 0000000..61dcf58 Binary files /dev/null and b/assets/posts/obs/11.png differ diff --git a/assets/posts/obs/3-usb.png b/assets/posts/obs/3-usb.png new file mode 100644 index 0000000..474c5c2 Binary files /dev/null and b/assets/posts/obs/3-usb.png differ diff --git a/assets/posts/obs/5S.png b/assets/posts/obs/5S.png new file mode 100644 index 0000000..de4f5af Binary files /dev/null and b/assets/posts/obs/5S.png differ diff --git a/assets/posts/obs/dics.css b/assets/posts/obs/dics.css new file mode 100644 index 0000000..81ab949 --- /dev/null +++ b/assets/posts/obs/dics.css @@ -0,0 +1,229 @@ +.b-dics { + width : 100%; + max-width : 100%; + position : relative; + overflow : hidden; + display : -webkit-box; + display : -ms-flexbox; + display : flex; + opacity : 0; +} + +.b-dics__section { + height : 100%; +} + +.b-dics__slider:hover :before { + color : #FFFFFF; + border-color : #FFFFFF; +} + +.b-dics__text { + position : absolute; + top : 0; + left : 50%; + padding : 5px 25px; + -webkit-transform : translateX(-50%); + -ms-transform : translateX(-50%); + transform : translateX(-50%); + background : #FFFFFF; + z-index : 11; + font-family : Arial, serif; + color : #3d3d3d; + -webkit-user-select : none; + -moz-user-select : none; + -ms-user-select : none; + user-select : none; + font-size : 13px; + text-align : center; + margin : 16px 0; + white-space : nowrap; + opacity : .7; + pointer-events : none; +} + +.b-dics__image-container { + width : 100%; + height : 100%; + display : block; + overflow : hidden; + position : relative; +} + +.b-dics__image { + height : 100%; + position : absolute; + left : 0; + top : 50%; + -webkit-transform : translateY(-50%); + -ms-transform : translateY(-50%); + transform : translateY(-50%); + -webkit-user-select : none; + -moz-user-select : none; + -ms-user-select : none; + user-select : none; + max-width : none; +} + +.b-dics__slider { + color : #FFFFFF; + position : absolute; + left : 100%; + top : 0; + cursor : pointer; + -webkit-transform : translateX(-50%); + -ms-transform : translateX(-50%); + transform : translateX(-50%); + height : 100%; + width : 3px; + padding : 0 30px; + z-index : 1; + -ms-touch-action : none; + touch-action : none; + line-height : normal; + opacity : .7; +} + +.b-dics__slider:before { + content : ''; + -webkit-mask : url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9PC9zdHlsZT48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTgwLjIsMTA4LjFsNjEuNy02Mi4yYzMuOC0zLjgsOC44LTUuOSwxNC4xLTUuOWM1LjMsMCwxMC40LDIuMSwxNC4xLDUuOWw2MS43LDYyLjJjMy45LDMuOSw5LjEsNS45LDE0LjIsNS45czEwLjItMS45LDE0LjEtNS44YzcuOC03LjgsNy45LTIwLjQsMC4xLTI4LjNsLTYxLjctNjIuMkMyODcuMiw2LjMsMjcyLjEsMCwyNTYsMHMtMzEuMiw2LjMtNDIuNSwxNy44TDE1MS44LDgwYy03LjgsNy44LTcuNywyMC41LDAuMSwyOC4zQzE1OS44LDExNiwxNzIuNCwxMTUuOSwxODAuMiwxMDguMXoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMzMxLjgsNDAzLjlsLTYxLjcsNjIuMmMtMy44LDMuOC04LjgsNS45LTE0LjEsNS45Yy01LjMsMC0xMC40LTIuMS0xNC4xLTUuOWwtNjEuNy02Mi4yYy03LjgtNy44LTIwLjQtNy45LTI4LjMtMC4xYy03LjgsNy44LTcuOSwyMC40LTAuMSwyOC4zbDYxLjcsNjIuMmMxMS40LDExLjQsMjYuNSwxNy44LDQyLjUsMTcuOHMzMS4yLTYuMyw0Mi41LTE3LjhsNjEuNy02Mi4yYzcuOC03LjgsNy43LTIwLjUtMC4xLTI4LjNDMzUyLjIsMzk2LDMzOS42LDM5Ni4xLDMzMS44LDQwMy45eiIvPjwvc3ZnPg==) no-repeat 100% 100%; + mask : url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9PC9zdHlsZT48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTgwLjIsMTA4LjFsNjEuNy02Mi4yYzMuOC0zLjgsOC44LTUuOSwxNC4xLTUuOWM1LjMsMCwxMC40LDIuMSwxNC4xLDUuOWw2MS43LDYyLjJjMy45LDMuOSw5LjEsNS45LDE0LjIsNS45czEwLjItMS45LDE0LjEtNS44YzcuOC03LjgsNy45LTIwLjQsMC4xLTI4LjNsLTYxLjctNjIuMkMyODcuMiw2LjMsMjcyLjEsMCwyNTYsMHMtMzEuMiw2LjMtNDIuNSwxNy44TDE1MS44LDgwYy03LjgsNy44LTcuNywyMC41LDAuMSwyOC4zQzE1OS44LDExNiwxNzIuNCwxMTUuOSwxODAuMiwxMDguMXoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMzMxLjgsNDAzLjlsLTYxLjcsNjIuMmMtMy44LDMuOC04LjgsNS45LTE0LjEsNS45Yy01LjMsMC0xMC40LTIuMS0xNC4xLTUuOWwtNjEuNy02Mi4yYy03LjgtNy44LTIwLjQtNy45LTI4LjMtMC4xYy03LjgsNy44LTcuOSwyMC40LTAuMSwyOC4zbDYxLjcsNjIuMmMxMS40LDExLjQsMjYuNSwxNy44LDQyLjUsMTcuOHMzMS4yLTYuMyw0Mi41LTE3LjhsNjEuNy02Mi4yYzcuOC03LjgsNy43LTIwLjUtMC4xLTI4LjNDMzUyLjIsMzk2LDMzOS42LDM5Ni4xLDMzMS44LDQwMy45eiIvPjwvc3ZnPg==) no-repeat 100% 100%; + mask-size : cover; + -webkit-mask-size : cover; + width : 26px; + height : 26px; + padding : 0; + background-color : currentColor; + position : absolute; + top : 50%; + left : 50%; + -webkit-transform : translate(-50%, -50%) rotate(90deg); + -ms-transform : translate(-50%, -50%) rotate(90deg); + transform : translate(-50%, -50%) rotate(90deg); + z-index : 2; + font-size : 0; +} + +.b-dics__slider:after { + content : ''; + position : absolute; + left : 50%; + top : 0; + -webkit-transform : translateX(-50%); + -ms-transform : translateX(-50%); + transform : translateX(-50%); + height : 100%; + width : 3px; + background-color : currentColor; + z-index : 1; +} + +.b-dics__image-container:hover .b-dics__text { + opacity : 1; +} + +.b-dics__slider:hover { + opacity : 1; +} + +/* Text Position + ****************************************************************************/ + +.b-dics--tp-center .b-dics__text { + top : 50%; + -webkit-transform : translate(-50%, -50%); + -ms-transform : translate(-50%, -50%); + transform : translate(-50%, -50%); + margin : 0; +} + +.b-dics--tp-bottom .b-dics__text { + top : initial; + bottom : 0; + -webkit-transform : translate(-50%, -50%); + -ms-transform : translate(-50%, -50%); + transform : translate(-50%, -50%); +} + +.b-dics--tp-left .b-dics__text { + left : 0; + top : 50%; + -webkit-transform : translateY(-50%); + -ms-transform : translateY(-50%); + transform : translateY(-50%); + margin : 0 16px; +} + +.b-dics--tp-right .b-dics__text { + left : initial; + right : 0; + top : 50%; + -webkit-transform : translateY(-50%); + -ms-transform : translateY(-50%); + transform : translateY(-50%); + margin : 0 16px; +} + +/* Hide texts + ****************************************************************************/ + +.b-dics--hide-texts .b-dics__text { + background : #ffffff; + opacity : 0; +} + +.b-dics--hide-texts .b-dics__image-container:hover .b-dics__text { + opacity : 1; +} + +/* Vertical Sliders + ****************************************************************************/ + +.b-dics--vertical { + -webkit-box-orient : vertical; + -webkit-box-direction : normal; + -ms-flex-direction : column; + flex-direction : column; +} + +.b-dics--vertical .b-dics__section { + height : auto; + width : 100%; +} + +.b-dics--vertical .b-dics__image { + left : 50%; + -webkit-transform : translateX(-50%); + -ms-transform : translateX(-50%); + transform : translateX(-50%); + top : 0; + width : 100%; + height : auto; +} + +.b-dics--vertical .b-dics__slider { + top : 100%; + -webkit-transform : translateY(-50%); + -ms-transform : translateY(-50%); + transform : translateY(-50%); + width : 100%; + height : 3px; + padding : 30px 0; + left : 0; +} + +.b-dics--vertical .b-dics__slider:after { + top : 50%; + left : 0; + -webkit-transform : translateY(-50%); + -ms-transform : translateY(-50%); + transform : translateY(-50%); + width : 100%; + height : 3px; +} + +.b-dics--vertical .b-dics__slider:before { + -webkit-transform : translate(-50%, -50%); + -ms-transform : translate(-50%, -50%); + transform : translate(-50%, -50%); +} \ No newline at end of file diff --git a/assets/posts/obs/dics.js b/assets/posts/obs/dics.js new file mode 100644 index 0000000..b739e36 --- /dev/null +++ b/assets/posts/obs/dics.js @@ -0,0 +1,638 @@ +"use strict"; + +/* + * Dics: Definitive image comparison slider. A multiple image vanilla comparison slider. + * + * By Abel Cabeza RomΓ‘n, a Codictados developer + * Src: https://github.com/abelcabezaroman/definitive-image-comparison-slider + * Example: http://codictados.com/portfolio/definitive-image-comparison-slider-demo/ + */ + +/** + * + */ + +/** + * + * @type {{container: null, filters: null, hideTexts: null, textPosition: string, linesOrientation: string, rotate: number, arrayBackgroundColorText: null, arrayColorText: null, linesColor: null}} + */ +var defaultOptions = { + container: null, + // **REQUIRED**: HTML container | `document.querySelector('.b-dics')` | + filters: null, + // Array of CSS string filters |`['blur(3px)', 'grayscale(1)', 'sepia(1)', 'saturate(3)']` | + hideTexts: null, + // Show text only when you hover the image container |`true`,`false`| + textPosition: 'top', + // Set the prefer text position |`'center'`,`'top'`, `'right'`, `'bottom'`, `'left'` | + linesOrientation: 'horizontal', + // Change the orientation of lines |`'horizontal'`,`'vertical'` | + rotate: 0, + // Rotate the image container (not too useful but it's a beatiful effect. String of rotate CSS rule) |`'45deg'`| + arrayBackgroundColorText: null, + // Change the bacground-color of sections texts with an array |`['#000000', '#FFFFFF']`| + arrayColorText: null, + // Change the color of texts with an array |`['#FFFFFF', '#000000']`| + linesColor: null // Change the lines and arrows color |`'rgb(0,0,0)'`| + +}; +/** + * + * @param options + * @constructor + */ + +var Dics = function Dics(options) { + this.options = utils.extend({}, [defaultOptions, options], { + clearEmpty: true + }); + this.container = this.options.container; + + if (this.container == null) { + console.error('Container element not found!'); + } else { + this._setOrientation(this.options.linesOrientation, this.container); + + this.images = this._getImages(); + this.sliders = []; + this._activeSlider = null; + + this._load(this.images[0]); + } +}; +/** + * + * @private + */ + + +Dics.prototype._load = function (firstImage) { + var _this = this; + + var maxCounter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000; + + if (firstImage.naturalWidth) { + this._buidAfterFirstImageLoad(firstImage); + } else { + if (maxCounter > 0) { + maxCounter--; + setTimeout(function () { + _this._load(firstImage, maxCounter); + }, 100); + } else { + console.error('error loading images'); + } + } +}; +/** + * + * @private + */ + + +Dics.prototype._buidAfterFirstImageLoad = function (firstImage) { + this._setContainerWidth(firstImage); + + this._build(); + + this._setEvents(); +}; +/** + * + * @private + */ + + +Dics.prototype._setContainerWidth = function (firstImage) { + this.options.container.style.height = "".concat(this._calcContainerHeight(firstImage), "px"); +}; +/** + * + * @private + */ + + +Dics.prototype._setOpacityContainerForLoading = function (opacity) { + this.options.container.style.opacity = opacity; +}; +/** + * Build HTML + * @private + */ + + +Dics.prototype._build = function () { + var dics = this; + + dics._applyGlobalClass(dics.options); + + var imagesLength = dics.images.length; + var initialImagesContainerWidth = dics.container.getBoundingClientRect()[dics.config.sizeField] / imagesLength; + + for (var i = 0; i < imagesLength; i++) { + var image = dics.images[i]; + + var section = dics._createElement('div', 'b-dics__section'); + + var imageContainer = dics._createElement('div', 'b-dics__image-container'); + + var slider = dics._createSlider(i, initialImagesContainerWidth); + + dics._createAltText(image, i, imageContainer); + + dics._applyFilter(image, i, dics.options.filters); + + dics._rotate(image, imageContainer); + + section.setAttribute('data-function', 'b-dics__section'); + section.style.flex = "0 0 ".concat(initialImagesContainerWidth, "px"); + image.classList.add('b-dics__image'); + section.appendChild(imageContainer); + imageContainer.appendChild(image); + + if (i < imagesLength - 1) { + section.appendChild(slider); + } + + dics.container.appendChild(section); + image.style[this.config.positionField] = "".concat(i * -initialImagesContainerWidth, "px"); + } + + this.sections = this._getSections(); + + this._setOpacityContainerForLoading(1); +}; +/** + * + * @returns {NodeListOf | NodeListOf | NodeListOf} + * @private + */ + + +Dics.prototype._getImages = function () { + return this.container.querySelectorAll('img'); +}; +/** + * + * @returns {NodeListOf | NodeListOf | NodeListOf} + * @private + */ + + +Dics.prototype._getSections = function () { + return this.container.querySelectorAll('[data-function="b-dics__section"]'); +}; +/** + * + * @param elementClass + * @param className + * @returns {HTMLElement | HTMLSelectElement | HTMLLegendElement | HTMLTableCaptionElement | HTMLTextAreaElement | HTMLModElement | HTMLHRElement | HTMLOutputElement | HTMLPreElement | HTMLEmbedElement | HTMLCanvasElement | HTMLFrameSetElement | HTMLMarqueeElement | HTMLScriptElement | HTMLInputElement | HTMLUnknownElement | HTMLMetaElement | HTMLStyleElement | HTMLObjectElement | HTMLTemplateElement | HTMLBRElement | HTMLAudioElement | HTMLIFrameElement | HTMLMapElement | HTMLTableElement | HTMLAnchorElement | HTMLMenuElement | HTMLPictureElement | HTMLParagraphElement | HTMLTableDataCellElement | HTMLTableSectionElement | HTMLQuoteElement | HTMLTableHeaderCellElement | HTMLProgressElement | HTMLLIElement | HTMLTableRowElement | HTMLFontElement | HTMLSpanElement | HTMLTableColElement | HTMLOptGroupElement | HTMLDataElement | HTMLDListElement | HTMLFieldSetElement | HTMLSourceElement | HTMLBodyElement | HTMLDirectoryElement | HTMLDivElement | HTMLUListElement | HTMLHtmlElement | HTMLAreaElement | HTMLMeterElement | HTMLAppletElement | HTMLFrameElement | HTMLOptionElement | HTMLImageElement | HTMLLinkElement | HTMLHeadingElement | HTMLSlotElement | HTMLVideoElement | HTMLBaseFontElement | HTMLTitleElement | HTMLButtonElement | HTMLHeadElement | HTMLParamElement | HTMLTrackElement | HTMLOListElement | HTMLDataListElement | HTMLLabelElement | HTMLFormElement | HTMLTimeElement | HTMLBaseElement} + * @private + */ + + +Dics.prototype._createElement = function (elementClass, className) { + var newElement = document.createElement(elementClass); + newElement.classList.add(className); + return newElement; +}; +/** + * Set need DOM events + * @private + */ + + +Dics.prototype._setEvents = function () { + var dics = this; + + dics._disableImageDrag(); + + dics._isGoingRight = null; + var oldx = 0; + + var listener = function listener(event) { + var xPageCoord = event.pageX ? event.pageX : event.touches[0].pageX; + + if (xPageCoord < oldx) { + dics._isGoingRight = false; + } else if (xPageCoord > oldx) { + dics._isGoingRight = true; + } + + oldx = xPageCoord; + + var position = dics._calcPosition(event); + + var beforeSectionsWidth = dics._beforeSectionsWidth(dics.sections, dics.images, dics._activeSlider); + + var calcMovePixels = position - beforeSectionsWidth; + dics.sliders[dics._activeSlider].style[dics.config.positionField] = "".concat(position, "px"); + + dics._pushSections(calcMovePixels, position); + }; + + dics.container.addEventListener('click', listener); + + var _loop = function _loop(i) { + var slider = dics.sliders[i]; + utils.setMultiEvents(slider, ['mousedown', 'touchstart'], function (event) { + dics._activeSlider = i; + dics._clickPosition = dics._calcPosition(event); + slider.classList.add('b-dics__slider--active'); + utils.setMultiEvents(dics.container, ['mousemove', 'touchmove'], listener); + }); + }; + + for (var i = 0; i < dics.sliders.length; i++) { + _loop(i); + } + + var listener2 = function listener2() { + var activeElements = dics.container.querySelectorAll('.b-dics__slider--active'); + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = activeElements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var activeElement = _step.value; + activeElement.classList.remove('b-dics__slider--active'); + utils.removeMultiEvents(dics.container, ['mousemove', 'touchmove'], listener); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return != null) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + }; + + utils.setMultiEvents(document.body, ['mouseup', 'touchend'], listener2); +}; +/** + * + * @param sections + * @param images + * @param activeSlider + * @returns {number} + * @private + */ + + +Dics.prototype._beforeSectionsWidth = function (sections, images, activeSlider) { + var width = 0; + + for (var i = 0; i < sections.length; i++) { + var section = sections[i]; + + if (i !== activeSlider) { + width += section.getBoundingClientRect()[this.config.sizeField]; + } else { + return width; + } + } +}; +/** + * + * @returns {number} + * @private + */ + + +Dics.prototype._calcContainerHeight = function (firstImage) { + var imgHeight = firstImage.naturalHeight; + var imgWidth = firstImage.naturalWidth; + var containerWidth = this.options.container.getBoundingClientRect().width; + return containerWidth / imgWidth * imgHeight; +}; +/** + * + * @param sections + * @param images + * @private + */ + + +Dics.prototype._setLeftToImages = function (sections, images) { + var size = 0; + + for (var i = 0; i < images.length; i++) { + var image = images[i]; + image.style[this.config.positionField] = "-".concat(size, "px"); + size += sections[i].getBoundingClientRect()[this.config.sizeField]; + this.sliders[i].style[this.config.positionField] = "".concat(size, "px"); + } +}; +/** + * + * @private + */ + + +Dics.prototype._disableImageDrag = function () { + for (var i = 0; i < this.images.length; i++) { + this.sliders[i].addEventListener('dragstart', function (e) { + e.preventDefault(); + }); + this.images[i].addEventListener('dragstart', function (e) { + e.preventDefault(); + }); + } +}; +/** + * + * @param image + * @param index + * @param filters + * @private + */ + + +Dics.prototype._applyFilter = function (image, index, filters) { + if (filters) { + image.style.filter = filters[index]; + } +}; +/** + * + * @param options + * @private + */ + + +Dics.prototype._applyGlobalClass = function (options) { + var container = options.container; + + if (options.hideTexts) { + container.classList.add('b-dics--hide-texts'); + } + + if (options.linesOrientation === 'vertical') { + container.classList.add('b-dics--vertical'); + } + + if (options.textPosition === 'center') { + container.classList.add('b-dics--tp-center'); + } else if (options.textPosition === 'bottom') { + container.classList.add('b-dics--tp-bottom'); + } else if (options.textPosition === 'left') { + container.classList.add('b-dics--tp-left'); + } else if (options.textPosition === 'right') { + container.classList.add('b-dics--tp-right'); + } +}; + +Dics.prototype._createSlider = function (i, initialImagesContainerWidth) { + var slider = this._createElement('div', 'b-dics__slider'); + + if (this.options.linesColor) { + slider.style.color = this.options.linesColor; + } + + slider.style[this.config.positionField] = "".concat(initialImagesContainerWidth * (i + 1), "px"); + this.sliders.push(slider); + return slider; +}; +/** + * + * @param image + * @param i + * @param imageContainer + * @private + */ + + +Dics.prototype._createAltText = function (image, i, imageContainer) { + var textContent = image.getAttribute('alt'); + + if (textContent) { + var text = this._createElement('p', 'b-dics__text'); + + if (this.options.arrayBackgroundColorText) { + text.style.backgroundColor = this.options.arrayBackgroundColorText[i]; + } + + if (this.options.arrayColorText) { + text.style.color = this.options.arrayColorText[i]; + } + + text.appendChild(document.createTextNode(textContent)); + imageContainer.appendChild(text); + } +}; +/** + * + * @param image + * @param imageContainer + * @private + */ + + +Dics.prototype._rotate = function (image, imageContainer) { + image.style.rotate = "-".concat(this.options.rotate); + imageContainer.style.rotate = this.options.rotate; +}; +/** + * + * @private + */ + + +Dics.prototype._removeActiveElements = function () { + var activeElements = Dics.container.querySelectorAll('.b-dics__slider--active'); + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = activeElements[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var activeElement = _step2.value; + activeElement.classList.remove('b-dics__slider--active'); + utils.removeMultiEvents(Dics.container, ['mousemove', 'touchmove'], Dics.prototype._removeActiveElements); + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return != null) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } +}; +/** + * + * @param linesOrientation + * @private + */ + + +Dics.prototype._setOrientation = function (linesOrientation) { + this.config = {}; + + if (linesOrientation === 'vertical') { + this.config.offsetSizeField = 'offsetHeight'; + this.config.offsetPositionField = 'offsetTop'; + this.config.sizeField = 'height'; + this.config.positionField = 'top'; + this.config.clientField = 'clientY'; + this.config.pageField = 'pageY'; + } else { + this.config.offsetSizeField = 'offsetWidth'; + this.config.offsetPositionField = 'offsetLeft'; + this.config.sizeField = 'width'; + this.config.positionField = 'left'; + this.config.clientField = 'clientX'; + this.config.pageField = 'pageX'; + } +}; +/** + * + * @param event + * @returns {number} + * @private + */ + + +Dics.prototype._calcPosition = function (event) { + var containerCoords = this.container.getBoundingClientRect(); + var pixel = !isNaN(event[this.config.clientField]) ? event[this.config.clientField] : event.touches[0][this.config.clientField]; + return containerCoords[this.config.positionField] < pixel ? pixel - containerCoords[this.config.positionField] : 0; +}; +/** + * + * @private + */ + + +Dics.prototype._pushSections = function (calcMovePixels, position) { + // if (this._rePosUnderActualSections(position)) { + this._setFlex(position, this._isGoingRight); + + var section = this.sections[this._activeSlider]; + var postActualSection = this.sections[this._activeSlider + 1]; + + var sectionWidth = postActualSection.getBoundingClientRect()[this.config.sizeField] - (calcMovePixels - this.sections[this._activeSlider].getBoundingClientRect()[this.config.sizeField]); + + section.style.flex = this._isGoingRight === true ? "2 0 ".concat(calcMovePixels, "px") : "1 1 ".concat(calcMovePixels, "px"); + postActualSection.style.flex = this._isGoingRight === true ? " ".concat(sectionWidth, "px") : "2 0 ".concat(sectionWidth, "px"); + + this._setLeftToImages(this.sections, this.images); // } + +}; +/** + * + * @private + */ + + +Dics.prototype._setFlex = function (position, isGoingRight) { + var beforeSumSectionsSize = 0; + + for (var i = 0; i < this.sections.length; i++) { + var section = this.sections[i]; + var sectionSize = section.getBoundingClientRect()[this.config.sizeField]; + beforeSumSectionsSize += sectionSize; + + if (isGoingRight && position > beforeSumSectionsSize - sectionSize && i > this._activeSlider || !isGoingRight && position < beforeSumSectionsSize && i < this._activeSlider) { + section.style.flex = "1 100 ".concat(sectionSize, "px"); + } else { + section.style.flex = "0 0 ".concat(sectionSize, "px"); + } + } +}; +/** + * + * @type {{extend: (function(*=, *, *): *), setMultiEvents: setMultiEvents, removeMultiEvents: removeMultiEvents, getConstructor: (function(*=): string)}} + */ + + +var utils = { + /** + * Native extend object + * @param target + * @param objects + * @param options + * @returns {*} + */ + extend: function extend(target, objects, options) { + for (var object in objects) { + if (objects.hasOwnProperty(object)) { + recursiveMerge(target, objects[object]); + } + } + + function recursiveMerge(target, object) { + for (var property in object) { + if (object.hasOwnProperty(property)) { + var current = object[property]; + + if (utils.getConstructor(current) === 'Object') { + if (!target[property]) { + target[property] = {}; + } + + recursiveMerge(target[property], current); + } else { + // clearEmpty + if (options.clearEmpty) { + if (current == null) { + continue; + } + } + + target[property] = current; + } + } + } + } + + return target; + }, + + /** + * Set Multi addEventListener + * @param element + * @param events + * @param func + */ + setMultiEvents: function setMultiEvents(element, events, func) { + for (var i = 0; i < events.length; i++) { + element.addEventListener(events[i], func); + } + }, + + /** + * + * @param element + * @param events + * @param func + */ + removeMultiEvents: function removeMultiEvents(element, events, func) { + for (var i = 0; i < events.length; i++) { + element.removeEventListener(events[i], func, false); + } + }, + + /** + * Get object constructor + * @param object + * @returns {string} + */ + getConstructor: function getConstructor(object) { + return Object.prototype.toString.call(object).slice(8, -1); + } +}; \ No newline at end of file diff --git a/assets/posts/obs/mirrorless.png b/assets/posts/obs/mirrorless.png new file mode 100644 index 0000000..67f6b49 Binary files /dev/null and b/assets/posts/obs/mirrorless.png differ diff --git a/assets/posts/obs/normal.png b/assets/posts/obs/normal.png new file mode 100644 index 0000000..a85aaf3 Binary files /dev/null and b/assets/posts/obs/normal.png differ diff --git a/assets/posts/obs/usb.png b/assets/posts/obs/usb.png new file mode 100644 index 0000000..c08a805 Binary files /dev/null and b/assets/posts/obs/usb.png differ diff --git a/feed.rss b/feed.rss index 6637b94..3cc95eb 100644 --- a/feed.rss +++ b/feed.rss @@ -1,4 +1,20 @@ -Navan ChauhanWelcome to my personal fragment of the internet. Majority of the posts should be complete.https://navanchauhan.github.io/enTue, 15 Sep 2020 15:53:16 +0530Tue, 15 Sep 2020 15:53:16 +0530250https://navanchauhan.github.io/posts/2020-08-01-Natural-Feature-Tracking-ARJSIntroduction to AR.js and Natural Feature TrackingAn introduction to AR.js and NFThttps://navanchauhan.github.io/posts/2020-08-01-Natural-Feature-Tracking-ARJSSat, 1 Aug 2020 15:43:00 +0530Introduction to AR.js and Natural Feature Tracking

AR.js

AR.js is a lightweight library for Augmented Reality on the Web, coming with features like Image Tracking, Location based AR and Marker tracking. It is the easiest option for cross-browser augmented reality.

The same code works for iOS, Android, Desktops and even VR Browsers!

It was initially created by Jerome Etienne and is now maintained by Nicolo Carpignoli and the AR-js Organisation

NFT

Usually for augmented reality you need specialised markers, like this Hiro marker (notice the thick non-aesthetic borders 🀒)

This is called marker based tracking where the code knows what to look for. NFT or Natural Feature Tracing converts normal images into markers by extracting 'features' from it, this way you can use any image of your liking!

I'll be using my GitHub profile picture

Creating the Marker!

First we need to create the marker files required by AR.js for NFT. For this we use Carnaux's repository 'NFT-Marker-Creator'.

$ git clone https://github.com/Carnaux/NFT-Marker-Creator +Navan ChauhanWelcome to my personal fragment of the internet. Majority of the posts should be complete.https://navanchauhan.github.io/enSun, 11 Oct 2020 16:21:21 +0530Sun, 11 Oct 2020 16:21:21 +0530250https://navanchauhan.github.io/posts/2020-10-11-macOS-Virtual-Cam-OBSDifferent Camera SetupsComparison of different cameras setups for using as a webcam and tutorials for the same.https://navanchauhan.github.io/posts/2020-10-11-macOS-Virtual-Cam-OBSSun, 11 Oct 2020 16:12:00 +0530Different Camera Setups
  1. Animated Overlays
  2. Using a modern camera as your webcam
  3. Using your phone's camera as your webcam
  4. Using a USB Camera

Comparison

Here are the results before you begin reading.

+ Normal Webcam + USB Webcam + Camo iPhone 5S + Camo iPhone 11 + Mirrorless Camera +

Prerequisites

I am running macOS and iOS but I will try to link the same steps for Windows as well. If you are running Arch, I assume you already know what you are doing and are using this post as an inspiration and not a how-to guide.

I assume that you have Homebrew installed.

OBS and OBS-Virtual-Cam

Description

brew cask install obs +brew cask install obs-virtualcam +

Windows users can install the latest version of the plugin from OBS-Forums

0. Animated Overlays

I have always liked PewDiePie's animated border he uses in his videos

Still grab from PewDiePie's video showing border

The border was apparently made by a YouTuber Sleepy Tanooki. He posted a link to a Google Drive folder containing the video file. (I will be using the video overlay for the example)

It is pretty simple to use overlays in OBS:

First, Create a new scene by clicking on the plus button on the bottom right corner.

Bottom Panel of OBS

Now, in the Sources section click on the add button -> Video Capture Device -> Create New -> Choose your webcam from the Device section.

You may, resize if you want

After this, again click on the add button, but this time choose the Media Source option

Media Source Option

and, locate and choose the downloaded overlay.

1. Using a Modern Camera (Without using a Capture Card)

I have a Sony mirrorless camera. Using Sony's Imaging Edge Desktop, you can use your laptop as a remote viewfinder and capture or record media.

After installing Image Edge Desktop or your Camera's equivalent, open the Remote application.

Remote showing available cameras

Once you are able to see the output of the camera on the application, switch to OBS. Create a new scene, and this time choose Window Capture in the Sources menu. After you have chosen the appropriate window, you may transform/crop the output using the properties/filters options.

2.1 Using your iPhone using Quicktime

Connect your iPhone via a USB cable, then Open Quicktime -> File -> New Movie Recording

In the Sources choose your device (No need to press record). You may open the camera app now.

Choose Source

Now, in OBS create a new scene, and in the sources choose the Window Capture option. You will need to rotate the source:

Rotation

2.2 Using your iPhone using an application like Camo

Install the Camo app on your phone through the app store -> connect to Mac using USB cable, install the companion app and you are done.

I tried both my current iPhone and an old iPhone 5S

3. A USB Webcam

The simplest solution, is to use a USB webcam. I used an old Logitech C310 that was collecting dust. I was surprised to find that Logitech is still selling it after years and proudly advertising it! (5MP)

It did not sit well on my laptop, so I placed it on my definitely-not-Joby Gorrila Pod i had bought on Amazon for ~β‚Ή500

USB Webcam + + +]]>
https://navanchauhan.github.io/posts/2020-08-01-Natural-Feature-Tracking-ARJSIntroduction to AR.js and Natural Feature TrackingAn introduction to AR.js and NFThttps://navanchauhan.github.io/posts/2020-08-01-Natural-Feature-Tracking-ARJSSat, 1 Aug 2020 15:43:00 +0530Introduction to AR.js and Natural Feature Tracking

AR.js

AR.js is a lightweight library for Augmented Reality on the Web, coming with features like Image Tracking, Location based AR and Marker tracking. It is the easiest option for cross-browser augmented reality.

The same code works for iOS, Android, Desktops and even VR Browsers!

It was initially created by Jerome Etienne and is now maintained by Nicolo Carpignoli and the AR-js Organisation

NFT

Usually for augmented reality you need specialised markers, like this Hiro marker (notice the thick non-aesthetic borders 🀒)

This is called marker based tracking where the code knows what to look for. NFT or Natural Feature Tracing converts normal images into markers by extracting 'features' from it, this way you can use any image of your liking!

I'll be using my GitHub profile picture

Creating the Marker!

First we need to create the marker files required by AR.js for NFT. For this we use Carnaux's repository 'NFT-Marker-Creator'.

$ git clone https://github.com/Carnaux/NFT-Marker-Creator Cloning into 'NFT-Marker-Creator'... remote: Enumerating objects: 79, done. diff --git a/index.html b/index.html index 2e2779f..dab15ff 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -πŸ‘‹ Hi! | Navan Chauhan

πŸ‘‹ Hi!

Welcome to my personal fragment of the internet. Majority of the posts should be complete.

Latest content

\ No newline at end of file +πŸ‘‹ Hi! | Navan Chauhan

πŸ‘‹ Hi!

Welcome to my personal fragment of the internet. Majority of the posts should be complete.

Latest content

\ No newline at end of file diff --git a/posts/2020-10-11-macOS-Virtual-Cam-OBS/index.html b/posts/2020-10-11-macOS-Virtual-Cam-OBS/index.html new file mode 100644 index 0000000..e2cb732 --- /dev/null +++ b/posts/2020-10-11-macOS-Virtual-Cam-OBS/index.html @@ -0,0 +1,17 @@ +Different Camera Setups | Navan Chauhan
3 minute readCreated on October 11, 2020

Different Camera Setups

  1. Animated Overlays
  2. Using a modern camera as your webcam
  3. Using your phone's camera as your webcam
  4. Using a USB Camera

Comparison

Here are the results before you begin reading.

+ Normal Webcam + USB Webcam + Camo iPhone 5S + Camo iPhone 11 + Mirrorless Camera +

Prerequisites

I am running macOS and iOS but I will try to link the same steps for Windows as well. If you are running Arch, I assume you already know what you are doing and are using this post as an inspiration and not a how-to guide.

I assume that you have Homebrew installed.

OBS and OBS-Virtual-Cam

Description

brew cask install obs +brew cask install obs-virtualcam +

Windows users can install the latest version of the plugin from OBS-Forums

0. Animated Overlays

I have always liked PewDiePie's animated border he uses in his videos

Still grab from PewDiePie's video showing border

The border was apparently made by a YouTuber Sleepy Tanooki. He posted a link to a Google Drive folder containing the video file. (I will be using the video overlay for the example)

It is pretty simple to use overlays in OBS:

First, Create a new scene by clicking on the plus button on the bottom right corner.

Bottom Panel of OBS

Now, in the Sources section click on the add button -> Video Capture Device -> Create New -> Choose your webcam from the Device section.

You may, resize if you want

After this, again click on the add button, but this time choose the Media Source option

Media Source Option

and, locate and choose the downloaded overlay.

1. Using a Modern Camera (Without using a Capture Card)

I have a Sony mirrorless camera. Using Sony's Imaging Edge Desktop, you can use your laptop as a remote viewfinder and capture or record media.

After installing Image Edge Desktop or your Camera's equivalent, open the Remote application.

Remote showing available cameras

Once you are able to see the output of the camera on the application, switch to OBS. Create a new scene, and this time choose Window Capture in the Sources menu. After you have chosen the appropriate window, you may transform/crop the output using the properties/filters options.

2.1 Using your iPhone using Quicktime

Connect your iPhone via a USB cable, then Open Quicktime -> File -> New Movie Recording

In the Sources choose your device (No need to press record). You may open the camera app now.

Choose Source

Now, in OBS create a new scene, and in the sources choose the Window Capture option. You will need to rotate the source:

Rotation

2.2 Using your iPhone using an application like Camo

Install the Camo app on your phone through the app store -> connect to Mac using USB cable, install the companion app and you are done.

I tried both my current iPhone and an old iPhone 5S

3. A USB Webcam

The simplest solution, is to use a USB webcam. I used an old Logitech C310 that was collecting dust. I was surprised to find that Logitech is still selling it after years and proudly advertising it! (5MP)

It did not sit well on my laptop, so I placed it on my definitely-not-Joby Gorrila Pod i had bought on Amazon for ~β‚Ή500

USB Webcam + + +
Tagged with:
\ No newline at end of file diff --git a/posts/index.html b/posts/index.html index 532f920..aa98a76 100644 --- a/posts/index.html +++ b/posts/index.html @@ -1 +1 @@ -Posts | Navan Chauhan

Posts

Tips, tricks and tutorials which I think might be useful.

\ No newline at end of file +Posts | Navan Chauhan

Posts

Tips, tricks and tutorials which I think might be useful.

\ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 396a16e..948448b 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://navanchauhan.github.io/aboutdaily1.02020-07-16https://navanchauhan.github.io/postsdaily1.02020-08-01https://navanchauhan.github.io/posts/2010-01-24-experimentsmonthly0.52020-06-01https://navanchauhan.github.io/posts/2019-05-05-Custom-Snowboard-Anemone-Thememonthly0.52020-09-15https://navanchauhan.github.io/posts/2019-12-04-Google-Teachable-Machinesmonthly0.52020-09-15https://navanchauhan.github.io/posts/2019-12-08-Image-Classifier-Tensorflowmonthly0.52020-09-15https://navanchauhan.github.io/posts/2019-12-08-Splitting-Zipsmonthly0.52020-06-01https://navanchauhan.github.io/posts/2019-12-10-TensorFlow-Model-Predictionmonthly0.52020-06-01https://navanchauhan.github.io/posts/2019-12-16-TensorFlow-Polynomial-Regressionmonthly0.52020-09-15https://navanchauhan.github.io/posts/2019-12-22-Fake-News-Detectormonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-01-14-Converting-between-PIL-NumPymonthly0.52020-06-01https://navanchauhan.github.io/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colabmonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-01-16-Image-Classifier-Using-Turicreatemonthly0.52020-06-01https://navanchauhan.github.io/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminalmonthly0.52020-06-01https://navanchauhan.github.io/posts/2020-03-03-Playing-With-Android-TVmonthly0.52020-06-01https://navanchauhan.github.io/posts/2020-03-08-Making-Vaporwave-Trackmonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOSmonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-05-31-compiling-open-babel-on-iosmonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOLmonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOSmonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-07-01-Install-rdkit-colabmonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-08-01-Natural-Feature-Tracking-ARJSmonthly0.52020-09-15https://navanchauhan.github.io/posts/hello-worldmonthly0.52020-06-01https://navanchauhan.github.io/publicationsdaily1.02020-03-17https://navanchauhan.github.io/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Responsemonthly0.52020-03-14https://navanchauhan.github.io/publications/2020-03-14-generating-vaporwavemonthly0.52020-03-15https://navanchauhan.github.io/publications/2020-03-17-Possible-Drug-Candidates-COVID-19monthly0.52020-03-18 \ No newline at end of file +https://navanchauhan.github.io/aboutdaily1.02020-07-16https://navanchauhan.github.io/postsdaily1.02020-10-11https://navanchauhan.github.io/posts/2010-01-24-experimentsmonthly0.52020-06-01https://navanchauhan.github.io/posts/2019-05-05-Custom-Snowboard-Anemone-Thememonthly0.52020-09-15https://navanchauhan.github.io/posts/2019-12-04-Google-Teachable-Machinesmonthly0.52020-09-15https://navanchauhan.github.io/posts/2019-12-08-Image-Classifier-Tensorflowmonthly0.52020-09-15https://navanchauhan.github.io/posts/2019-12-08-Splitting-Zipsmonthly0.52020-06-01https://navanchauhan.github.io/posts/2019-12-10-TensorFlow-Model-Predictionmonthly0.52020-06-01https://navanchauhan.github.io/posts/2019-12-16-TensorFlow-Polynomial-Regressionmonthly0.52020-09-15https://navanchauhan.github.io/posts/2019-12-22-Fake-News-Detectormonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-01-14-Converting-between-PIL-NumPymonthly0.52020-06-01https://navanchauhan.github.io/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colabmonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-01-16-Image-Classifier-Using-Turicreatemonthly0.52020-06-01https://navanchauhan.github.io/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminalmonthly0.52020-06-01https://navanchauhan.github.io/posts/2020-03-03-Playing-With-Android-TVmonthly0.52020-06-01https://navanchauhan.github.io/posts/2020-03-08-Making-Vaporwave-Trackmonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOSmonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-05-31-compiling-open-babel-on-iosmonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOLmonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOSmonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-07-01-Install-rdkit-colabmonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-08-01-Natural-Feature-Tracking-ARJSmonthly0.52020-09-15https://navanchauhan.github.io/posts/2020-10-11-macOS-Virtual-Cam-OBSmonthly0.52020-10-11https://navanchauhan.github.io/posts/hello-worldmonthly0.52020-06-01https://navanchauhan.github.io/publicationsdaily1.02020-03-17https://navanchauhan.github.io/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Responsemonthly0.52020-03-14https://navanchauhan.github.io/publications/2020-03-14-generating-vaporwavemonthly0.52020-03-15https://navanchauhan.github.io/publications/2020-03-17-Possible-Drug-Candidates-COVID-19monthly0.52020-03-18 \ No newline at end of file diff --git a/tags/index.html b/tags/index.html index 6212147..3f09458 100644 --- a/tags/index.html +++ b/tags/index.html @@ -1 +1 @@ -Navan Chauhan
\ No newline at end of file +Navan Chauhan
\ No newline at end of file diff --git a/tags/review/index.html b/tags/review/index.html new file mode 100644 index 0000000..9dbd74a --- /dev/null +++ b/tags/review/index.html @@ -0,0 +1 @@ +Navan Chauhan

Tagged with Review

Browse all tags
\ No newline at end of file diff --git a/tags/tutorial/index.html b/tags/tutorial/index.html index 634da61..c3bfce4 100644 --- a/tags/tutorial/index.html +++ b/tags/tutorial/index.html @@ -1 +1 @@ -Navan Chauhan

Tagged with tutorial

Browse all tags
\ No newline at end of file +Navan Chauhan

Tagged with Tutorial

Browse all tags
\ No newline at end of file diff --git a/tags/webcam/index.html b/tags/webcam/index.html new file mode 100644 index 0000000..b940012 --- /dev/null +++ b/tags/webcam/index.html @@ -0,0 +1 @@ +Navan Chauhan

Tagged with Webcam

Browse all tags
\ No newline at end of file -- cgit v1.2.3