From c7c2b5ec6d83cb867bf5f0cdb44333b4f48993a2 Mon Sep 17 00:00:00 2001 From: ImgBotApp Date: Sun, 27 Jun 2021 19:31:51 +0000 Subject: [ImgBot] Optimize images *Total -- 15,212.49kb -> 9,233.95kb (39.3%) /Resources/assets/posts/swift-chatbot/carbon-3.png -- 92.06kb -> 46.32kb (49.68%) /docs/assets/posts/swift-chatbot/carbon-3.png -- 92.06kb -> 46.32kb (49.68%) /docs/assets/posts/swift-chatbot/carbon-2.png -- 242.16kb -> 129.66kb (46.46%) /Resources/assets/posts/swift-chatbot/carbon-2.png -- 242.16kb -> 129.66kb (46.46%) /Resources/assets/posts/swift-chatbot/carbon.png -- 184.56kb -> 99.23kb (46.24%) /docs/assets/posts/swift-chatbot/carbon.png -- 184.56kb -> 99.23kb (46.24%) /docs/assets/posts/swift-chatbot/carbon-4.png -- 210.43kb -> 113.61kb (46.01%) /Resources/assets/posts/swift-chatbot/carbon-4.png -- 210.43kb -> 113.61kb (46.01%) /docs/assets/posts/cheminformatics-web/postera-demo.png -- 960.20kb -> 558.80kb (41.8%) /Resources/assets/posts/cheminformatics-web/postera-demo.png -- 960.20kb -> 558.80kb (41.8%) /Resources/assets/posts/cheminformatics-web/rdkit-demo.png -- 872.13kb -> 511.26kb (41.38%) /docs/assets/posts/cheminformatics-web/rdkit-demo.png -- 872.13kb -> 511.26kb (41.38%) /Resources/assets/posts/swift-chatbot/create-intent.png -- 745.84kb -> 450.42kb (39.61%) /docs/assets/posts/swift-chatbot/create-intent.png -- 745.84kb -> 450.42kb (39.61%) /docs/assets/posts/swift-chatbot/output.png -- 129.59kb -> 78.41kb (39.49%) /Resources/assets/posts/swift-chatbot/output.png -- 129.59kb -> 78.41kb (39.49%) /docs/assets/posts/swift-chatbot/drugs-json.png -- 537.10kb -> 327.09kb (39.1%) /Resources/assets/posts/swift-chatbot/drugs-json.png -- 537.10kb -> 327.09kb (39.1%) /docs/assets/posts/swift-chatbot/create-tagger.png -- 763.90kb -> 466.04kb (38.99%) /Resources/assets/posts/swift-chatbot/create-tagger.png -- 763.90kb -> 466.04kb (38.99%) /docs/assets/posts/cheminformatics-web/webina-demo.png -- 2,130.01kb -> 1,362.28kb (36.04%) /Resources/assets/posts/cheminformatics-web/webina-demo.png -- 2,130.01kb -> 1,362.28kb (36.04%) /Resources/assets/posts/swift-chatbot/intent-csv.png -- 738.26kb -> 473.88kb (35.81%) /docs/assets/posts/swift-chatbot/intent-csv.png -- 738.26kb -> 473.88kb (35.81%) Signed-off-by: ImgBotApp --- .../posts/cheminformatics-web/postera-demo.png | Bin 983243 -> 572211 bytes .../posts/cheminformatics-web/rdkit-demo.png | Bin 893061 -> 523533 bytes .../posts/cheminformatics-web/webina-demo.png | Bin 2181135 -> 1394971 bytes Resources/assets/posts/swift-chatbot/carbon-2.png | Bin 247973 -> 132768 bytes Resources/assets/posts/swift-chatbot/carbon-3.png | Bin 94268 -> 47436 bytes Resources/assets/posts/swift-chatbot/carbon-4.png | Bin 215477 -> 116332 bytes Resources/assets/posts/swift-chatbot/carbon.png | Bin 188994 -> 101608 bytes .../assets/posts/swift-chatbot/create-intent.png | Bin 763744 -> 461226 bytes .../assets/posts/swift-chatbot/create-tagger.png | Bin 782235 -> 477220 bytes .../assets/posts/swift-chatbot/drugs-json.png | Bin 549991 -> 334936 bytes .../assets/posts/swift-chatbot/intent-csv.png | Bin 755977 -> 485249 bytes Resources/assets/posts/swift-chatbot/output.png | Bin 132696 -> 80290 bytes .../posts/cheminformatics-web/postera-demo.png | Bin 983243 -> 572211 bytes .../posts/cheminformatics-web/rdkit-demo.png | Bin 893061 -> 523533 bytes .../posts/cheminformatics-web/webina-demo.png | Bin 2181135 -> 1394971 bytes docs/assets/posts/swift-chatbot/carbon-2.png | Bin 247973 -> 132768 bytes docs/assets/posts/swift-chatbot/carbon-3.png | Bin 94268 -> 47436 bytes docs/assets/posts/swift-chatbot/carbon-4.png | Bin 215477 -> 116332 bytes docs/assets/posts/swift-chatbot/carbon.png | Bin 188994 -> 101608 bytes docs/assets/posts/swift-chatbot/create-intent.png | Bin 763744 -> 461226 bytes docs/assets/posts/swift-chatbot/create-tagger.png | Bin 782235 -> 477220 bytes docs/assets/posts/swift-chatbot/drugs-json.png | Bin 549991 -> 334936 bytes docs/assets/posts/swift-chatbot/intent-csv.png | Bin 755977 -> 485249 bytes docs/assets/posts/swift-chatbot/output.png | Bin 132696 -> 80290 bytes 24 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/assets/posts/cheminformatics-web/postera-demo.png b/Resources/assets/posts/cheminformatics-web/postera-demo.png index bc0268f..86c15e4 100644 Binary files a/Resources/assets/posts/cheminformatics-web/postera-demo.png and b/Resources/assets/posts/cheminformatics-web/postera-demo.png differ diff --git a/Resources/assets/posts/cheminformatics-web/rdkit-demo.png b/Resources/assets/posts/cheminformatics-web/rdkit-demo.png index a23881c..154ec0b 100644 Binary files a/Resources/assets/posts/cheminformatics-web/rdkit-demo.png and b/Resources/assets/posts/cheminformatics-web/rdkit-demo.png differ diff --git a/Resources/assets/posts/cheminformatics-web/webina-demo.png b/Resources/assets/posts/cheminformatics-web/webina-demo.png index 4bfea04..8760fbe 100644 Binary files a/Resources/assets/posts/cheminformatics-web/webina-demo.png and b/Resources/assets/posts/cheminformatics-web/webina-demo.png differ diff --git a/Resources/assets/posts/swift-chatbot/carbon-2.png b/Resources/assets/posts/swift-chatbot/carbon-2.png index 3f05e7f..aa8c358 100644 Binary files a/Resources/assets/posts/swift-chatbot/carbon-2.png and b/Resources/assets/posts/swift-chatbot/carbon-2.png differ diff --git a/Resources/assets/posts/swift-chatbot/carbon-3.png b/Resources/assets/posts/swift-chatbot/carbon-3.png index d02a85f..bdd6b94 100644 Binary files a/Resources/assets/posts/swift-chatbot/carbon-3.png and b/Resources/assets/posts/swift-chatbot/carbon-3.png differ diff --git a/Resources/assets/posts/swift-chatbot/carbon-4.png b/Resources/assets/posts/swift-chatbot/carbon-4.png index 0c17806..4834fdb 100644 Binary files a/Resources/assets/posts/swift-chatbot/carbon-4.png and b/Resources/assets/posts/swift-chatbot/carbon-4.png differ diff --git a/Resources/assets/posts/swift-chatbot/carbon.png b/Resources/assets/posts/swift-chatbot/carbon.png index 2ba1a48..d84616d 100644 Binary files a/Resources/assets/posts/swift-chatbot/carbon.png and b/Resources/assets/posts/swift-chatbot/carbon.png differ diff --git a/Resources/assets/posts/swift-chatbot/create-intent.png b/Resources/assets/posts/swift-chatbot/create-intent.png index 92413f5..b4a8d93 100644 Binary files a/Resources/assets/posts/swift-chatbot/create-intent.png and b/Resources/assets/posts/swift-chatbot/create-intent.png differ diff --git a/Resources/assets/posts/swift-chatbot/create-tagger.png b/Resources/assets/posts/swift-chatbot/create-tagger.png index 0e3363c..cd8174c 100644 Binary files a/Resources/assets/posts/swift-chatbot/create-tagger.png and b/Resources/assets/posts/swift-chatbot/create-tagger.png differ diff --git a/Resources/assets/posts/swift-chatbot/drugs-json.png b/Resources/assets/posts/swift-chatbot/drugs-json.png index adf9348..03fda82 100644 Binary files a/Resources/assets/posts/swift-chatbot/drugs-json.png and b/Resources/assets/posts/swift-chatbot/drugs-json.png differ diff --git a/Resources/assets/posts/swift-chatbot/intent-csv.png b/Resources/assets/posts/swift-chatbot/intent-csv.png index bba4d09..8737ab3 100644 Binary files a/Resources/assets/posts/swift-chatbot/intent-csv.png and b/Resources/assets/posts/swift-chatbot/intent-csv.png differ diff --git a/Resources/assets/posts/swift-chatbot/output.png b/Resources/assets/posts/swift-chatbot/output.png index 121f1fd..3295870 100644 Binary files a/Resources/assets/posts/swift-chatbot/output.png and b/Resources/assets/posts/swift-chatbot/output.png differ diff --git a/docs/assets/posts/cheminformatics-web/postera-demo.png b/docs/assets/posts/cheminformatics-web/postera-demo.png index bc0268f..86c15e4 100644 Binary files a/docs/assets/posts/cheminformatics-web/postera-demo.png and b/docs/assets/posts/cheminformatics-web/postera-demo.png differ diff --git a/docs/assets/posts/cheminformatics-web/rdkit-demo.png b/docs/assets/posts/cheminformatics-web/rdkit-demo.png index a23881c..154ec0b 100644 Binary files a/docs/assets/posts/cheminformatics-web/rdkit-demo.png and b/docs/assets/posts/cheminformatics-web/rdkit-demo.png differ diff --git a/docs/assets/posts/cheminformatics-web/webina-demo.png b/docs/assets/posts/cheminformatics-web/webina-demo.png index 4bfea04..8760fbe 100644 Binary files a/docs/assets/posts/cheminformatics-web/webina-demo.png and b/docs/assets/posts/cheminformatics-web/webina-demo.png differ diff --git a/docs/assets/posts/swift-chatbot/carbon-2.png b/docs/assets/posts/swift-chatbot/carbon-2.png index 3f05e7f..aa8c358 100644 Binary files a/docs/assets/posts/swift-chatbot/carbon-2.png and b/docs/assets/posts/swift-chatbot/carbon-2.png differ diff --git a/docs/assets/posts/swift-chatbot/carbon-3.png b/docs/assets/posts/swift-chatbot/carbon-3.png index d02a85f..bdd6b94 100644 Binary files a/docs/assets/posts/swift-chatbot/carbon-3.png and b/docs/assets/posts/swift-chatbot/carbon-3.png differ diff --git a/docs/assets/posts/swift-chatbot/carbon-4.png b/docs/assets/posts/swift-chatbot/carbon-4.png index 0c17806..4834fdb 100644 Binary files a/docs/assets/posts/swift-chatbot/carbon-4.png and b/docs/assets/posts/swift-chatbot/carbon-4.png differ diff --git a/docs/assets/posts/swift-chatbot/carbon.png b/docs/assets/posts/swift-chatbot/carbon.png index 2ba1a48..d84616d 100644 Binary files a/docs/assets/posts/swift-chatbot/carbon.png and b/docs/assets/posts/swift-chatbot/carbon.png differ diff --git a/docs/assets/posts/swift-chatbot/create-intent.png b/docs/assets/posts/swift-chatbot/create-intent.png index 92413f5..b4a8d93 100644 Binary files a/docs/assets/posts/swift-chatbot/create-intent.png and b/docs/assets/posts/swift-chatbot/create-intent.png differ diff --git a/docs/assets/posts/swift-chatbot/create-tagger.png b/docs/assets/posts/swift-chatbot/create-tagger.png index 0e3363c..cd8174c 100644 Binary files a/docs/assets/posts/swift-chatbot/create-tagger.png and b/docs/assets/posts/swift-chatbot/create-tagger.png differ diff --git a/docs/assets/posts/swift-chatbot/drugs-json.png b/docs/assets/posts/swift-chatbot/drugs-json.png index adf9348..03fda82 100644 Binary files a/docs/assets/posts/swift-chatbot/drugs-json.png and b/docs/assets/posts/swift-chatbot/drugs-json.png differ diff --git a/docs/assets/posts/swift-chatbot/intent-csv.png b/docs/assets/posts/swift-chatbot/intent-csv.png index bba4d09..8737ab3 100644 Binary files a/docs/assets/posts/swift-chatbot/intent-csv.png and b/docs/assets/posts/swift-chatbot/intent-csv.png differ diff --git a/docs/assets/posts/swift-chatbot/output.png b/docs/assets/posts/swift-chatbot/output.png index 121f1fd..3295870 100644 Binary files a/docs/assets/posts/swift-chatbot/output.png and b/docs/assets/posts/swift-chatbot/output.png differ -- cgit v1.2.3 From d23479efddb303591bd79f00c5578327c8a4f8b8 Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Mon, 28 Jun 2021 16:30:01 +0530 Subject: adding description to link previews --- templates/base.html | 22 +++++++++++----------- templates/post.html | 10 +++++++++- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/templates/base.html b/templates/base.html index 2a48404..378759b 100644 --- a/templates/base.html +++ b/templates/base.html @@ -8,20 +8,20 @@ Hey - {% block title %}{% endblock %} - - - - - - - - - + + + + + + + + + - - + + diff --git a/templates/post.html b/templates/post.html index 596ded2..fd3bd4c 100644 --- a/templates/post.html +++ b/templates/post.html @@ -1,5 +1,13 @@ {% extends "base.html" %} -{% block title %}Post{% endblock %} + +{% block title %}Post - {{content.metadata.title}}{% endblock %} +{% block ogtitle %}Post - {{content.metadata.title}}{% endblock %} +{% block twittertitle %}Post - {{content.metadata.title}}{% endblock %} + +{% block description %} {{content.metadata.description}} {% endblock %} +{% block ogdescription %} {{content.metadata.description}} {% endblock %} +{% block twitterdescription %} {{content.metadata.description}} {% endblock %} +{% block twitter2description %} {{content.metadata.description}} {% endblock %} {% block body %}
-- cgit v1.2.3 From 84727a677c10ad38c4acd68daf0f98f7a4706917 Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Mon, 28 Jun 2021 16:30:17 +0530 Subject: new generation --- docs/about/index.html | 22 ++++++++++---------- docs/feed.rss | 4 ++-- docs/index.html | 22 ++++++++++---------- docs/posts/2010-01-24-experiments.html | 24 +++++++++++----------- .../2019-05-05-Custom-Snowboard-Anemone-Theme.html | 24 +++++++++++----------- .../2019-12-04-Google-Teachable-Machines.html | 24 +++++++++++----------- .../2019-12-08-Image-Classifier-Tensorflow.html | 24 +++++++++++----------- docs/posts/2019-12-08-Splitting-Zips.html | 24 +++++++++++----------- .../2019-12-10-TensorFlow-Model-Prediction.html | 24 +++++++++++----------- ...019-12-16-TensorFlow-Polynomial-Regression.html | 24 +++++++++++----------- docs/posts/2019-12-22-Fake-News-Detector.html | 24 +++++++++++----------- .../2020-01-14-Converting-between-PIL-NumPy.html | 24 +++++++++++----------- ...-01-15-Setting-up-Kaggle-to-use-with-Colab.html | 24 +++++++++++----------- ...20-01-16-Image-Classifier-Using-Turicreate.html | 24 +++++++++++----------- ...onnect-To-Bluetooth-Devices-Linux-Terminal.html | 24 +++++++++++----------- docs/posts/2020-03-03-Playing-With-Android-TV.html | 24 +++++++++++----------- docs/posts/2020-03-08-Making-Vaporwave-Track.html | 24 +++++++++++----------- ...20-04-13-Fixing-X11-Error-AmberTools-macOS.html | 24 +++++++++++----------- .../2020-05-31-compiling-open-babel-on-ios.html | 24 +++++++++++----------- ...r-Docking-Workflow-AutoDock-Vina-and-PyMOL.html | 24 +++++++++++----------- .../2020-06-02-Compiling-AutoDock-Vina-on-iOS.html | 24 +++++++++++----------- docs/posts/2020-07-01-Install-rdkit-colab.html | 24 +++++++++++----------- .../2020-08-01-Natural-Feature-Tracking-ARJS.html | 24 +++++++++++----------- docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html | 24 +++++++++++----------- docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html | 24 +++++++++++----------- docs/posts/2020-12-1-HTML-JS-RSS-Feed.html | 24 +++++++++++----------- docs/posts/2021-06-25-Blog2Twitter-P1.html | 24 +++++++++++----------- .../2021-06-25-NFC-Music-Cards-Basic-iOS.html | 24 +++++++++++----------- ...2021-06-26-Cheminformatics-On-The-Web-2021.html | 24 +++++++++++----------- ...21-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html | 24 +++++++++++----------- docs/posts/hello-world.html | 24 +++++++++++----------- docs/posts/index.html | 22 ++++++++++---------- ...ing-and-Speeding-up-Post-Accident-Response.html | 24 +++++++++++----------- .../2020-03-14-generating-vaporwave.html | 24 +++++++++++----------- ...20-03-17-Possible-Drug-Candidates-COVID-19.html | 24 +++++++++++----------- docs/publications/index.html | 22 ++++++++++---------- 36 files changed, 418 insertions(+), 418 deletions(-) diff --git a/docs/about/index.html b/docs/about/index.html index 7b969d8..4ba0d3d 100644 --- a/docs/about/index.html +++ b/docs/about/index.html @@ -8,20 +8,20 @@ Hey - Section - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/feed.rss b/docs/feed.rss index 51f5890..7c5a1ea 100644 --- a/docs/feed.rss +++ b/docs/feed.rss @@ -4,8 +4,8 @@ Navan's Archive Rare Tips, Tricks and Posts https://web.navan.dev/en - Mon, 28 Jun 2021 00:52:32 -0000 - Mon, 28 Jun 2021 00:52:32 -0000 + Mon, 28 Jun 2021 16:28:22 -0000 + Mon, 28 Jun 2021 16:28:22 -0000 250 diff --git a/docs/index.html b/docs/index.html index 56e642e..66eee2a 100644 --- a/docs/index.html +++ b/docs/index.html @@ -8,20 +8,20 @@ Hey - Home - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2010-01-24-experiments.html b/docs/posts/2010-01-24-experiments.html index 68cd6cd..5ce97a2 100644 --- a/docs/posts/2010-01-24-experiments.html +++ b/docs/posts/2010-01-24-experiments.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Experiments - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html b/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html index 2dc1315..2e9c656 100644 --- a/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html +++ b/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Creating your own custom theme for Snowboard or Anemone - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2019-12-04-Google-Teachable-Machines.html b/docs/posts/2019-12-04-Google-Teachable-Machines.html index 1cd7897..3fe88c1 100644 --- a/docs/posts/2019-12-04-Google-Teachable-Machines.html +++ b/docs/posts/2019-12-04-Google-Teachable-Machines.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Image Classifier With Teachable Machines - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html b/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html index 44ce370..f50d6da 100644 --- a/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html +++ b/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Creating a Custom Image Classifier using Tensorflow 2.x and Keras for Detecting Malaria - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2019-12-08-Splitting-Zips.html b/docs/posts/2019-12-08-Splitting-Zips.html index 3d174f9..0bc4670 100644 --- a/docs/posts/2019-12-08-Splitting-Zips.html +++ b/docs/posts/2019-12-08-Splitting-Zips.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Splitting ZIPs into Multiple Parts - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html b/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html index 9112189..4163342 100644 --- a/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html +++ b/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Making Predictions using Image Classifier (TensorFlow) - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html b/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html index 46641c0..9d39c2b 100644 --- a/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html +++ b/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Polynomial Regression Using TensorFlow - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2019-12-22-Fake-News-Detector.html b/docs/posts/2019-12-22-Fake-News-Detector.html index bbf1510..7348705 100644 --- a/docs/posts/2019-12-22-Fake-News-Detector.html +++ b/docs/posts/2019-12-22-Fake-News-Detector.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Building a Fake News Detector with Turicreate - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html b/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html index bd265ce..9b7b469 100644 --- a/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html +++ b/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Converting between image and NumPy array - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html b/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html index 4059ea9..62568cf 100644 --- a/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html +++ b/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Setting up Kaggle to use with Google Colab - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html b/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html index e143271..bd51ae0 100644 --- a/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html +++ b/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Creating a Custom Image Classifier using Turicreate to detect Smoke and Fire - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html b/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html index 6d6ec1a..11a63c6 100644 --- a/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html +++ b/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - How to setup Bluetooth on a Raspberry Pi - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2020-03-03-Playing-With-Android-TV.html b/docs/posts/2020-03-03-Playing-With-Android-TV.html index 0f5d425..15d7656 100644 --- a/docs/posts/2020-03-03-Playing-With-Android-TV.html +++ b/docs/posts/2020-03-03-Playing-With-Android-TV.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Tinkering with an Android TV - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2020-03-08-Making-Vaporwave-Track.html b/docs/posts/2020-03-08-Making-Vaporwave-Track.html index fffed7d..3324411 100644 --- a/docs/posts/2020-03-08-Making-Vaporwave-Track.html +++ b/docs/posts/2020-03-08-Making-Vaporwave-Track.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Making My First Vaporwave Track (Remix) - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html b/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html index e507347..05b831f 100644 --- a/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html +++ b/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Fixing X11 Error on macOS Catalina for AmberTools 18/19 - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2020-05-31-compiling-open-babel-on-ios.html b/docs/posts/2020-05-31-compiling-open-babel-on-ios.html index f849418..44a8e02 100644 --- a/docs/posts/2020-05-31-compiling-open-babel-on-ios.html +++ b/docs/posts/2020-05-31-compiling-open-babel-on-ios.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Compiling Open Babel on iOS - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html b/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html index 470b465..3e25028 100644 --- a/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html +++ b/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Workflow for Lightning Fast Molecular Docking Part One - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html b/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html index 4de931b..5533d49 100644 --- a/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html +++ b/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Compiling AutoDock Vina on iOS - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2020-07-01-Install-rdkit-colab.html b/docs/posts/2020-07-01-Install-rdkit-colab.html index 52e9fa2..8812201 100644 --- a/docs/posts/2020-07-01-Install-rdkit-colab.html +++ b/docs/posts/2020-07-01-Install-rdkit-colab.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Installing RDKit on Google Colab - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html b/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html index f45c229..b2af848 100644 --- a/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html +++ b/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Introduction to AR.js and Natural Feature Tracking - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html b/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html index f354cbd..44374f5 100644 --- a/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html +++ b/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Trying Different Camera Setups - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html b/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html index 063e1fb..784d0e5 100644 --- a/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html +++ b/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Generating HTTPS Certificate using DNS a Challenge through Let's Encrypt - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html b/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html index 6e9c357..3c21452 100644 --- a/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html +++ b/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - RSS Feed written in HTML + JavaScript - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2021-06-25-Blog2Twitter-P1.html b/docs/posts/2021-06-25-Blog2Twitter-P1.html index 6950bae..3b30139 100644 --- a/docs/posts/2021-06-25-Blog2Twitter-P1.html +++ b/docs/posts/2021-06-25-Blog2Twitter-P1.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Posting Blog Posts as Twitter Threads Part 1/n - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html b/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html index 732ac68..94fb30b 100644 --- a/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html +++ b/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Basic NFC Music Cards for iOS - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html b/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html index 3324928..6c8ba85 100644 --- a/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html +++ b/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Cheminformatics on the Web (2021) - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html b/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html index 50c74a2..f002e9c 100644 --- a/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html +++ b/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Making a Crude ML Powered Chatbot in Swift using CoreML - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/hello-world.html b/docs/posts/hello-world.html index 9b5e320..d26fde9 100644 --- a/docs/posts/hello-world.html +++ b/docs/posts/hello-world.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Hello World - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/posts/index.html b/docs/posts/index.html index 6ee3224..bb704f8 100644 --- a/docs/posts/index.html +++ b/docs/posts/index.html @@ -8,20 +8,20 @@ Hey - Section - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html b/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html index 8109bc1..7a69f1c 100644 --- a/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html +++ b/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Detecting Driver Fatigue, Over-Speeding, and Speeding up Post-Accident Response - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/publications/2020-03-14-generating-vaporwave.html b/docs/publications/2020-03-14-generating-vaporwave.html index 0458505..1817215 100644 --- a/docs/publications/2020-03-14-generating-vaporwave.html +++ b/docs/publications/2020-03-14-generating-vaporwave.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Is it possible to programmatically generate Vaporwave? - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html b/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html index e9d301c..e550d15 100644 --- a/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html +++ b/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html @@ -6,22 +6,22 @@ - Hey - Post + Hey - Post - Possible Drug Candidates for COVID-19 - - - - - - - - - + + + + + + + + + - - + + diff --git a/docs/publications/index.html b/docs/publications/index.html index a0a8193..07880d6 100644 --- a/docs/publications/index.html +++ b/docs/publications/index.html @@ -8,20 +8,20 @@ Hey - Section - - - - - - - - - + + + + + + + + + - - + + -- cgit v1.2.3 From 23c67e4c2f6915feb10bb2ceaa8c6aabadd1795d Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Sun, 7 Nov 2021 17:30:09 -0700 Subject: removed resume --- "Resources/assets/r\303\251sum\303\251.pdf" | Bin 84216 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 "Resources/assets/r\303\251sum\303\251.pdf" diff --git "a/Resources/assets/r\303\251sum\303\251.pdf" "b/Resources/assets/r\303\251sum\303\251.pdf" deleted file mode 100644 index 8931b18..0000000 Binary files "a/Resources/assets/r\303\251sum\303\251.pdf" and /dev/null differ -- cgit v1.2.3 From ad5284e8808c6a462a809b2c2e631967ee7179c6 Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Sun, 7 Nov 2021 17:43:02 -0700 Subject: removed resume --- docs/feed.rss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/feed.rss b/docs/feed.rss index 7c5a1ea..2b53f53 100644 --- a/docs/feed.rss +++ b/docs/feed.rss @@ -4,8 +4,8 @@ Navan's Archive Rare Tips, Tricks and Posts https://web.navan.dev/en - Mon, 28 Jun 2021 16:28:22 -0000 - Mon, 28 Jun 2021 16:28:22 -0000 + Sun, 07 Nov 2021 17:42:49 -0000 + Sun, 07 Nov 2021 17:42:49 -0000 250 -- cgit v1.2.3 From 12700e08fb6aaed778e209b0292590912864688e Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Fri, 24 Dec 2021 22:58:16 -0700 Subject: added plausible analytics --- docs/feed.rss | 4 ++-- templates/head_tag.html | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/feed.rss b/docs/feed.rss index 2b53f53..d3bacbd 100644 --- a/docs/feed.rss +++ b/docs/feed.rss @@ -4,8 +4,8 @@ Navan's Archive Rare Tips, Tricks and Posts https://web.navan.dev/en - Sun, 07 Nov 2021 17:42:49 -0000 - Sun, 07 Nov 2021 17:42:49 -0000 + Fri, 24 Dec 2021 22:57:58 -0000 + Fri, 24 Dec 2021 22:57:58 -0000 250 diff --git a/templates/head_tag.html b/templates/head_tag.html index 586cbf8..498c3e2 100644 --- a/templates/head_tag.html +++ b/templates/head_tag.html @@ -16,4 +16,5 @@ - \ No newline at end of file + + -- cgit v1.2.3 From 568ea8263fce8ca30c080dd78e3ee15d734978af Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Fri, 24 Dec 2021 23:01:05 -0700 Subject: updated template --- templates/base.html | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/base.html b/templates/base.html index 378759b..b3cb1b1 100644 --- a/templates/base.html +++ b/templates/base.html @@ -25,6 +25,7 @@ + {% endblock %} -- cgit v1.2.3 From 8acc77e94eb207900b51d0182d51fc4e55104692 Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Fri, 24 Dec 2021 23:01:46 -0700 Subject: generated with plausible analytics --- docs/about/index.html | 1 + "docs/assets/r\303\251sum\303\251.pdf" | Bin 84216 -> 0 bytes docs/feed.rss | 4 ++-- docs/index.html | 1 + docs/posts/2010-01-24-experiments.html | 1 + .../2019-05-05-Custom-Snowboard-Anemone-Theme.html | 1 + docs/posts/2019-12-04-Google-Teachable-Machines.html | 1 + docs/posts/2019-12-08-Image-Classifier-Tensorflow.html | 1 + docs/posts/2019-12-08-Splitting-Zips.html | 1 + docs/posts/2019-12-10-TensorFlow-Model-Prediction.html | 1 + .../2019-12-16-TensorFlow-Polynomial-Regression.html | 1 + docs/posts/2019-12-22-Fake-News-Detector.html | 1 + docs/posts/2020-01-14-Converting-between-PIL-NumPy.html | 1 + .../2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html | 1 + .../2020-01-16-Image-Classifier-Using-Turicreate.html | 1 + ...-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html | 1 + docs/posts/2020-03-03-Playing-With-Android-TV.html | 1 + docs/posts/2020-03-08-Making-Vaporwave-Track.html | 1 + .../2020-04-13-Fixing-X11-Error-AmberTools-macOS.html | 1 + docs/posts/2020-05-31-compiling-open-babel-on-ios.html | 1 + ...ecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html | 1 + .../2020-06-02-Compiling-AutoDock-Vina-on-iOS.html | 1 + docs/posts/2020-07-01-Install-rdkit-colab.html | 1 + .../posts/2020-08-01-Natural-Feature-Tracking-ARJS.html | 1 + docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html | 1 + docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html | 1 + docs/posts/2020-12-1-HTML-JS-RSS-Feed.html | 1 + docs/posts/2021-06-25-Blog2Twitter-P1.html | 1 + docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html | 1 + .../2021-06-26-Cheminformatics-On-The-Web-2021.html | 1 + .../2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html | 1 + docs/posts/hello-world.html | 1 + docs/posts/index.html | 1 + ...Speeding-and-Speeding-up-Post-Accident-Response.html | 1 + docs/publications/2020-03-14-generating-vaporwave.html | 1 + .../2020-03-17-Possible-Drug-Candidates-COVID-19.html | 1 + docs/publications/index.html | 1 + 37 files changed, 37 insertions(+), 2 deletions(-) delete mode 100644 "docs/assets/r\303\251sum\303\251.pdf" diff --git a/docs/about/index.html b/docs/about/index.html index 4ba0d3d..1240d0b 100644 --- a/docs/about/index.html +++ b/docs/about/index.html @@ -25,6 +25,7 @@ + diff --git "a/docs/assets/r\303\251sum\303\251.pdf" "b/docs/assets/r\303\251sum\303\251.pdf" deleted file mode 100644 index 8931b18..0000000 Binary files "a/docs/assets/r\303\251sum\303\251.pdf" and /dev/null differ diff --git a/docs/feed.rss b/docs/feed.rss index d3bacbd..0e5299f 100644 --- a/docs/feed.rss +++ b/docs/feed.rss @@ -4,8 +4,8 @@ Navan's Archive Rare Tips, Tricks and Posts https://web.navan.dev/en - Fri, 24 Dec 2021 22:57:58 -0000 - Fri, 24 Dec 2021 22:57:58 -0000 + Fri, 24 Dec 2021 23:00:51 -0000 + Fri, 24 Dec 2021 23:00:51 -0000 250 diff --git a/docs/index.html b/docs/index.html index 66eee2a..648f888 100644 --- a/docs/index.html +++ b/docs/index.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2010-01-24-experiments.html b/docs/posts/2010-01-24-experiments.html index 5ce97a2..787e817 100644 --- a/docs/posts/2010-01-24-experiments.html +++ b/docs/posts/2010-01-24-experiments.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html b/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html index 2e9c656..74a634a 100644 --- a/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html +++ b/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2019-12-04-Google-Teachable-Machines.html b/docs/posts/2019-12-04-Google-Teachable-Machines.html index 3fe88c1..a11756e 100644 --- a/docs/posts/2019-12-04-Google-Teachable-Machines.html +++ b/docs/posts/2019-12-04-Google-Teachable-Machines.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html b/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html index f50d6da..4a8ece4 100644 --- a/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html +++ b/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2019-12-08-Splitting-Zips.html b/docs/posts/2019-12-08-Splitting-Zips.html index 0bc4670..bc39dd1 100644 --- a/docs/posts/2019-12-08-Splitting-Zips.html +++ b/docs/posts/2019-12-08-Splitting-Zips.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html b/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html index 4163342..6351561 100644 --- a/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html +++ b/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html b/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html index 9d39c2b..48c477a 100644 --- a/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html +++ b/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2019-12-22-Fake-News-Detector.html b/docs/posts/2019-12-22-Fake-News-Detector.html index 7348705..ea7fc41 100644 --- a/docs/posts/2019-12-22-Fake-News-Detector.html +++ b/docs/posts/2019-12-22-Fake-News-Detector.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html b/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html index 9b7b469..0b88665 100644 --- a/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html +++ b/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html b/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html index 62568cf..5341ba7 100644 --- a/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html +++ b/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html b/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html index bd51ae0..f81774e 100644 --- a/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html +++ b/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html b/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html index 11a63c6..25932db 100644 --- a/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html +++ b/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2020-03-03-Playing-With-Android-TV.html b/docs/posts/2020-03-03-Playing-With-Android-TV.html index 15d7656..8af2cb7 100644 --- a/docs/posts/2020-03-03-Playing-With-Android-TV.html +++ b/docs/posts/2020-03-03-Playing-With-Android-TV.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2020-03-08-Making-Vaporwave-Track.html b/docs/posts/2020-03-08-Making-Vaporwave-Track.html index 3324411..b862f03 100644 --- a/docs/posts/2020-03-08-Making-Vaporwave-Track.html +++ b/docs/posts/2020-03-08-Making-Vaporwave-Track.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html b/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html index 05b831f..d540e3b 100644 --- a/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html +++ b/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2020-05-31-compiling-open-babel-on-ios.html b/docs/posts/2020-05-31-compiling-open-babel-on-ios.html index 44a8e02..8f0c677 100644 --- a/docs/posts/2020-05-31-compiling-open-babel-on-ios.html +++ b/docs/posts/2020-05-31-compiling-open-babel-on-ios.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html b/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html index 3e25028..cf9ccfd 100644 --- a/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html +++ b/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html b/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html index 5533d49..e9cb84c 100644 --- a/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html +++ b/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2020-07-01-Install-rdkit-colab.html b/docs/posts/2020-07-01-Install-rdkit-colab.html index 8812201..b65ece1 100644 --- a/docs/posts/2020-07-01-Install-rdkit-colab.html +++ b/docs/posts/2020-07-01-Install-rdkit-colab.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html b/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html index b2af848..7322d04 100644 --- a/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html +++ b/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html b/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html index 44374f5..7a24e04 100644 --- a/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html +++ b/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html b/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html index 784d0e5..699d6b6 100644 --- a/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html +++ b/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html b/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html index 3c21452..206a463 100644 --- a/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html +++ b/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2021-06-25-Blog2Twitter-P1.html b/docs/posts/2021-06-25-Blog2Twitter-P1.html index 3b30139..af7586a 100644 --- a/docs/posts/2021-06-25-Blog2Twitter-P1.html +++ b/docs/posts/2021-06-25-Blog2Twitter-P1.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html b/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html index 94fb30b..2c541d8 100644 --- a/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html +++ b/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html b/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html index 6c8ba85..29ede6e 100644 --- a/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html +++ b/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html b/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html index f002e9c..0a67e76 100644 --- a/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html +++ b/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/hello-world.html b/docs/posts/hello-world.html index d26fde9..633d60d 100644 --- a/docs/posts/hello-world.html +++ b/docs/posts/hello-world.html @@ -25,6 +25,7 @@ + diff --git a/docs/posts/index.html b/docs/posts/index.html index bb704f8..b853aa9 100644 --- a/docs/posts/index.html +++ b/docs/posts/index.html @@ -25,6 +25,7 @@ + diff --git a/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html b/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html index 7a69f1c..800490a 100644 --- a/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html +++ b/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html @@ -25,6 +25,7 @@ + diff --git a/docs/publications/2020-03-14-generating-vaporwave.html b/docs/publications/2020-03-14-generating-vaporwave.html index 1817215..78368ef 100644 --- a/docs/publications/2020-03-14-generating-vaporwave.html +++ b/docs/publications/2020-03-14-generating-vaporwave.html @@ -25,6 +25,7 @@ + diff --git a/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html b/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html index e550d15..5ece207 100644 --- a/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html +++ b/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html @@ -25,6 +25,7 @@ + diff --git a/docs/publications/index.html b/docs/publications/index.html index 07880d6..bf382d3 100644 --- a/docs/publications/index.html +++ b/docs/publications/index.html @@ -25,6 +25,7 @@ + -- cgit v1.2.3 From a4c1783a8479be47614112f90c4e8c77aa1c3b9c Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Wed, 29 Dec 2021 16:08:08 -0700 Subject: added commentbox comments --- docs/feed.rss | 4 ++-- docs/posts/2010-01-24-experiments.html | 3 +++ docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html | 3 +++ docs/posts/2019-12-04-Google-Teachable-Machines.html | 3 +++ docs/posts/2019-12-08-Image-Classifier-Tensorflow.html | 3 +++ docs/posts/2019-12-08-Splitting-Zips.html | 3 +++ docs/posts/2019-12-10-TensorFlow-Model-Prediction.html | 3 +++ docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html | 3 +++ docs/posts/2019-12-22-Fake-News-Detector.html | 3 +++ docs/posts/2020-01-14-Converting-between-PIL-NumPy.html | 3 +++ docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html | 3 +++ docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html | 3 +++ .../posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html | 3 +++ docs/posts/2020-03-03-Playing-With-Android-TV.html | 3 +++ docs/posts/2020-03-08-Making-Vaporwave-Track.html | 3 +++ docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html | 3 +++ docs/posts/2020-05-31-compiling-open-babel-on-ios.html | 3 +++ ...peeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html | 3 +++ docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html | 3 +++ docs/posts/2020-07-01-Install-rdkit-colab.html | 3 +++ docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html | 3 +++ docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html | 3 +++ docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html | 3 +++ docs/posts/2020-12-1-HTML-JS-RSS-Feed.html | 3 +++ docs/posts/2021-06-25-Blog2Twitter-P1.html | 3 +++ docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html | 3 +++ docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html | 3 +++ docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html | 3 +++ docs/posts/hello-world.html | 3 +++ ...-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html | 3 +++ docs/publications/2020-03-14-generating-vaporwave.html | 3 +++ docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html | 3 +++ templates/post.html | 3 +++ 33 files changed, 98 insertions(+), 2 deletions(-) diff --git a/docs/feed.rss b/docs/feed.rss index 0e5299f..d477cbf 100644 --- a/docs/feed.rss +++ b/docs/feed.rss @@ -4,8 +4,8 @@ Navan's Archive Rare Tips, Tricks and Posts https://web.navan.dev/en - Fri, 24 Dec 2021 23:00:51 -0000 - Fri, 24 Dec 2021 23:00:51 -0000 + Wed, 29 Dec 2021 16:07:41 -0000 + Wed, 29 Dec 2021 16:07:41 -0000 250 diff --git a/docs/posts/2010-01-24-experiments.html b/docs/posts/2010-01-24-experiments.html index 787e817..71e454e 100644 --- a/docs/posts/2010-01-24-experiments.html +++ b/docs/posts/2010-01-24-experiments.html @@ -46,6 +46,9 @@ +
+ +
diff --git a/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html b/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html index 74a634a..c78a71e 100644 --- a/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html +++ b/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html @@ -458,6 +458,9 @@ Section: Themes

You can share this with your friends :+1:

+
+ + diff --git a/docs/posts/2019-12-04-Google-Teachable-Machines.html b/docs/posts/2019-12-04-Google-Teachable-Machines.html index a11756e..62e3fe1 100644 --- a/docs/posts/2019-12-04-Google-Teachable-Machines.html +++ b/docs/posts/2019-12-04-Google-Teachable-Machines.html @@ -90,6 +90,9 @@

https://luminous-opinion.glitch.me

+
+ + diff --git a/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html b/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html index 4a8ece4..116e6ee 100644 --- a/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html +++ b/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html @@ -200,6 +200,9 @@ X_train = X_train/255.0

Link to Colab Notebook

+
+ + diff --git a/docs/posts/2019-12-08-Splitting-Zips.html b/docs/posts/2019-12-08-Splitting-Zips.html index bc39dd1..e0bb725 100644 --- a/docs/posts/2019-12-08-Splitting-Zips.html +++ b/docs/posts/2019-12-08-Splitting-Zips.html @@ -63,6 +63,9 @@
zip -F oodlesofnoodles.zip --out merged.zip
 
+
+ + diff --git a/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html b/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html index 6351561..1866c4c 100644 --- a/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html +++ b/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html @@ -86,6 +86,9 @@

Infected

+
+ + diff --git a/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html b/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html index 48c477a..60d6131 100644 --- a/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html +++ b/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html @@ -520,6 +520,9 @@ values using the X values. We then plot it to compare the actual data and predic

Basically if you train your machine learning model on a small dataset for a really large number of epochs, the model will learn all the deformities/noise in the data and will actually think that it is a normal part. Therefore when it will see some new data, it will discard that new data as noise and will impact the accuracy of the model in a negative manner

+
+ + diff --git a/docs/posts/2019-12-22-Fake-News-Detector.html b/docs/posts/2019-12-22-Fake-News-Detector.html index ea7fc41..2e1a76f 100644 --- a/docs/posts/2019-12-22-Fake-News-Detector.html +++ b/docs/posts/2019-12-22-Fake-News-Detector.html @@ -272,6 +272,9 @@ DescriptionThe bag-of-words model is a simplifying representation used in NLP, i } +
+ + diff --git a/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html b/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html index 0b88665..9fedcb5 100644 --- a/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html +++ b/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html @@ -62,6 +62,9 @@ img.save(destination, "JPEG", quality=80, optimize=True, progressive=True) +
+ + diff --git a/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html b/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html index 5341ba7..ba58f68 100644 --- a/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html +++ b/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html @@ -82,6 +82,9 @@

Voila! You can now download Kaggle datasets

+
+ + diff --git a/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html b/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html index f81774e..0ebc094 100644 --- a/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html +++ b/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html @@ -286,6 +286,9 @@

We just got an accuracy of 94% on Training Data and 97% on Validation Data!

+
+ + diff --git a/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html b/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html index 25932db..a594382 100644 --- a/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html +++ b/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html @@ -62,6 +62,9 @@

To Exit out of bluetoothctl anytime, just type exit

+
+ + diff --git a/docs/posts/2020-03-03-Playing-With-Android-TV.html b/docs/posts/2020-03-03-Playing-With-Android-TV.html index 8af2cb7..c8fa6bd 100644 --- a/docs/posts/2020-03-03-Playing-With-Android-TV.html +++ b/docs/posts/2020-03-03-Playing-With-Android-TV.html @@ -113,6 +113,9 @@
  • adb uninstall com.company.yourpackagename
  • +
    + + diff --git a/docs/posts/2020-03-08-Making-Vaporwave-Track.html b/docs/posts/2020-03-08-Making-Vaporwave-Track.html index b862f03..3f5101d 100644 --- a/docs/posts/2020-03-08-Making-Vaporwave-Track.html +++ b/docs/posts/2020-03-08-Making-Vaporwave-Track.html @@ -72,6 +72,9 @@

    The fact that there are steps on producing Vaporwave, this gave me the idea that Vaporwave can actually be made using programming, stay tuned for when I publish the program which I am working on ( Generating A E S T H E T I C artwork and remixes)

    +
    + + diff --git a/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html b/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html index d540e3b..48eb451 100644 --- a/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html +++ b/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html @@ -71,6 +71,9 @@ Configure failed due to the errors above!

    If you do not have XQuartz installed, you need to run brew cask install xquartz

    +
    + + diff --git a/docs/posts/2020-05-31-compiling-open-babel-on-ios.html b/docs/posts/2020-05-31-compiling-open-babel-on-ios.html index 8f0c677..b7658f7 100644 --- a/docs/posts/2020-05-31-compiling-open-babel-on-ios.html +++ b/docs/posts/2020-05-31-compiling-open-babel-on-ios.html @@ -157,6 +157,9 @@ export BABEL_LIBDIR="/usr/lib/openbabel/3.1.0"

    Edit 1: Added Screenshots, had to replicate the errors.

    +
    + + diff --git a/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html b/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html index cf9ccfd..ae6fd21 100644 --- a/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html +++ b/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html @@ -86,6 +86,9 @@ alias pbpaste='xclip -selection clipboard -o'

    This is just the docking command for AutoDock Vina. In the next part I will tell how to use PyMOL and a plugin to directly generate the coordinates in Vina format --center_x -9.7 --center_y 11.4 --center_z 68.9 --size_x 19.3 --size_y 29.9 --size_z 21.3 without needing to type them manually.

    +
    + + diff --git a/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html b/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html index e9cb84c..b3a2209 100644 --- a/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html +++ b/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html @@ -123,6 +123,9 @@ return path(str, boost::filesystem::native);

    The package is available on my repository and only depends on boost. ( Both, Vina and Vina-Split are part of the package)

    +
    + + diff --git a/docs/posts/2020-07-01-Install-rdkit-colab.html b/docs/posts/2020-07-01-Install-rdkit-colab.html index b65ece1..f4d7b5e 100644 --- a/docs/posts/2020-07-01-Install-rdkit-colab.html +++ b/docs/posts/2020-07-01-Install-rdkit-colab.html @@ -142,6 +142,9 @@ install() +
    + + diff --git a/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html b/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html index 7322d04..3092dbd 100644 --- a/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html +++ b/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html @@ -317,6 +317,9 @@ Serving HTTP on 0.0.0.0 port 8000 ...

    +
    + + diff --git a/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html b/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html index 7a24e04..3798da3 100644 --- a/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html +++ b/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html @@ -148,6 +148,9 @@ new Dics({ }); +
    + + diff --git a/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html b/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html index 699d6b6..8ffd418 100644 --- a/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html +++ b/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html @@ -108,6 +108,9 @@ navanspi.duckdns.org. 60 IN TXT + + diff --git a/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html b/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html index 206a463..d3fbee7 100644 --- a/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html +++ b/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html @@ -241,6 +241,9 @@ </body></html> +
    + + diff --git a/docs/posts/2021-06-25-Blog2Twitter-P1.html b/docs/posts/2021-06-25-Blog2Twitter-P1.html index af7586a..cb0fc1c 100644 --- a/docs/posts/2021-06-25-Blog2Twitter-P1.html +++ b/docs/posts/2021-06-25-Blog2Twitter-P1.html @@ -135,6 +135,9 @@ I am not handling lists or images right now.

    For the next part, I will try to append the code as well. I actually added the code to this post after running the program.

    +
    + + diff --git a/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html b/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html index 2c541d8..78b1ef5 100644 --- a/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html +++ b/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html @@ -69,6 +69,9 @@ So, I did not have to ensure this could work with any device. I settled with usi +
    + + diff --git a/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html b/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html index 29ede6e..c62ffc3 100644 --- a/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html +++ b/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html @@ -122,6 +122,9 @@ Hopefully, this encourages you to explore the world of cheminformatics on the we

    Getting Started with RDKit-JS

    +
    + + diff --git a/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html b/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html index 0a67e76..5cea0ea 100644 --- a/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html +++ b/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html @@ -207,6 +207,9 @@ Otherwise, it calls the custom action.

    If I ever release a part-2, it will either be about implementing this in Tensorflow.JS or an iOS app using SwiftUI ;)

    +
    + + diff --git a/docs/posts/hello-world.html b/docs/posts/hello-world.html index 633d60d..ac87c03 100644 --- a/docs/posts/hello-world.html +++ b/docs/posts/hello-world.html @@ -46,6 +46,9 @@

    Just re-did the entire website using Publish (Publish by John Sundell). So, a new hello world post :)

    +
    + + diff --git a/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html b/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html index 800490a..840e67e 100644 --- a/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html +++ b/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html @@ -62,6 +62,9 @@
    @article{chauhan_2019, title={Detecting Driver Fatigue, Over-Speeding, and Speeding up Post-Accident Response}, volume={6}, url={https://www.irjet.net/archives/V6/i5/IRJET-V6I5318.pdf}, number={5}, journal={International Research Journal of Engineering and Technology (IRJET)}, author={Chauhan, Navan}, year={2019}}
     
    +
    + + diff --git a/docs/publications/2020-03-14-generating-vaporwave.html b/docs/publications/2020-03-14-generating-vaporwave.html index 78368ef..128963f 100644 --- a/docs/publications/2020-03-14-generating-vaporwave.html +++ b/docs/publications/2020-03-14-generating-vaporwave.html @@ -76,6 +76,9 @@ } +
    + + diff --git a/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html b/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html index 5ece207..903177c 100644 --- a/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html +++ b/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html @@ -46,6 +46,9 @@

    Download paper here

    +
    + + diff --git a/templates/post.html b/templates/post.html index fd3bd4c..b21547f 100644 --- a/templates/post.html +++ b/templates/post.html @@ -12,5 +12,8 @@ {% block body %}
    {{ content}} +
    + +
    {% endblock %} \ No newline at end of file -- cgit v1.2.3 From 6c2b440d80034cb0c966fd03586dba8fa267b9b3 Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Mon, 3 Jan 2022 00:20:06 -0700 Subject: added comment box id --- docs/feed.rss | 4 ++-- docs/posts/2010-01-24-experiments.html | 2 +- docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html | 2 +- docs/posts/2019-12-04-Google-Teachable-Machines.html | 2 +- docs/posts/2019-12-08-Image-Classifier-Tensorflow.html | 2 +- docs/posts/2019-12-08-Splitting-Zips.html | 2 +- docs/posts/2019-12-10-TensorFlow-Model-Prediction.html | 2 +- docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html | 2 +- docs/posts/2019-12-22-Fake-News-Detector.html | 2 +- docs/posts/2020-01-14-Converting-between-PIL-NumPy.html | 2 +- docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html | 2 +- docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html | 2 +- .../posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html | 2 +- docs/posts/2020-03-03-Playing-With-Android-TV.html | 2 +- docs/posts/2020-03-08-Making-Vaporwave-Track.html | 2 +- docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html | 2 +- docs/posts/2020-05-31-compiling-open-babel-on-ios.html | 2 +- ...peeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html | 2 +- docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html | 2 +- docs/posts/2020-07-01-Install-rdkit-colab.html | 2 +- docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html | 2 +- docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html | 2 +- docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html | 2 +- docs/posts/2020-12-1-HTML-JS-RSS-Feed.html | 2 +- docs/posts/2021-06-25-Blog2Twitter-P1.html | 2 +- docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html | 2 +- docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html | 2 +- docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html | 2 +- docs/posts/hello-world.html | 2 +- ...-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html | 2 +- docs/publications/2020-03-14-generating-vaporwave.html | 2 +- docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html | 2 +- templates/post.html | 4 ++-- 33 files changed, 35 insertions(+), 35 deletions(-) diff --git a/docs/feed.rss b/docs/feed.rss index d477cbf..cbb3db7 100644 --- a/docs/feed.rss +++ b/docs/feed.rss @@ -4,8 +4,8 @@ Navan's Archive Rare Tips, Tricks and Posts https://web.navan.dev/en - Wed, 29 Dec 2021 16:07:41 -0000 - Wed, 29 Dec 2021 16:07:41 -0000 + Mon, 03 Jan 2022 00:19:52 -0000 + Mon, 03 Jan 2022 00:19:52 -0000 250 diff --git a/docs/posts/2010-01-24-experiments.html b/docs/posts/2010-01-24-experiments.html index 71e454e..afe4e12 100644 --- a/docs/posts/2010-01-24-experiments.html +++ b/docs/posts/2010-01-24-experiments.html @@ -48,7 +48,7 @@
    - + diff --git a/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html b/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html index c78a71e..6b1aee8 100644 --- a/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html +++ b/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html @@ -460,7 +460,7 @@ Section: Themes
    - + diff --git a/docs/posts/2019-12-04-Google-Teachable-Machines.html b/docs/posts/2019-12-04-Google-Teachable-Machines.html index 62e3fe1..6ca43f6 100644 --- a/docs/posts/2019-12-04-Google-Teachable-Machines.html +++ b/docs/posts/2019-12-04-Google-Teachable-Machines.html @@ -92,7 +92,7 @@
    - + diff --git a/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html b/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html index 116e6ee..99c1be1 100644 --- a/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html +++ b/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html @@ -202,7 +202,7 @@ X_train = X_train/255.0
    - + diff --git a/docs/posts/2019-12-08-Splitting-Zips.html b/docs/posts/2019-12-08-Splitting-Zips.html index e0bb725..06421e2 100644 --- a/docs/posts/2019-12-08-Splitting-Zips.html +++ b/docs/posts/2019-12-08-Splitting-Zips.html @@ -65,7 +65,7 @@
    - + diff --git a/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html b/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html index 1866c4c..81ee328 100644 --- a/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html +++ b/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html @@ -88,7 +88,7 @@
    - + diff --git a/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html b/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html index 60d6131..23da82f 100644 --- a/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html +++ b/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html @@ -522,7 +522,7 @@ values using the X values. We then plot it to compare the actual data and predic
    - + diff --git a/docs/posts/2019-12-22-Fake-News-Detector.html b/docs/posts/2019-12-22-Fake-News-Detector.html index 2e1a76f..c1bfd7d 100644 --- a/docs/posts/2019-12-22-Fake-News-Detector.html +++ b/docs/posts/2019-12-22-Fake-News-Detector.html @@ -274,7 +274,7 @@ DescriptionThe bag-of-words model is a simplifying representation used in NLP, i
    - + diff --git a/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html b/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html index 9fedcb5..2524bf4 100644 --- a/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html +++ b/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html @@ -64,7 +64,7 @@
    - + diff --git a/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html b/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html index ba58f68..9f4ac97 100644 --- a/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html +++ b/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html @@ -84,7 +84,7 @@
    - + diff --git a/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html b/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html index 0ebc094..f401d17 100644 --- a/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html +++ b/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html @@ -288,7 +288,7 @@
    - + diff --git a/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html b/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html index a594382..0909d92 100644 --- a/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html +++ b/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html @@ -64,7 +64,7 @@
    - + diff --git a/docs/posts/2020-03-03-Playing-With-Android-TV.html b/docs/posts/2020-03-03-Playing-With-Android-TV.html index c8fa6bd..536b2fb 100644 --- a/docs/posts/2020-03-03-Playing-With-Android-TV.html +++ b/docs/posts/2020-03-03-Playing-With-Android-TV.html @@ -115,7 +115,7 @@
    - + diff --git a/docs/posts/2020-03-08-Making-Vaporwave-Track.html b/docs/posts/2020-03-08-Making-Vaporwave-Track.html index 3f5101d..e9cbfcf 100644 --- a/docs/posts/2020-03-08-Making-Vaporwave-Track.html +++ b/docs/posts/2020-03-08-Making-Vaporwave-Track.html @@ -74,7 +74,7 @@
    - + diff --git a/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html b/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html index 48eb451..f79ac5c 100644 --- a/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html +++ b/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html @@ -73,7 +73,7 @@ Configure failed due to the errors above!
    - + diff --git a/docs/posts/2020-05-31-compiling-open-babel-on-ios.html b/docs/posts/2020-05-31-compiling-open-babel-on-ios.html index b7658f7..2ae1edc 100644 --- a/docs/posts/2020-05-31-compiling-open-babel-on-ios.html +++ b/docs/posts/2020-05-31-compiling-open-babel-on-ios.html @@ -159,7 +159,7 @@ export BABEL_LIBDIR="/usr/lib/openbabel/3.1.0"
    - + diff --git a/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html b/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html index ae6fd21..f5a87c0 100644 --- a/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html +++ b/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html @@ -88,7 +88,7 @@ alias pbpaste='xclip -selection clipboard -o'
    - + diff --git a/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html b/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html index b3a2209..6fd17c3 100644 --- a/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html +++ b/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html @@ -125,7 +125,7 @@ return path(str, boost::filesystem::native);
    - + diff --git a/docs/posts/2020-07-01-Install-rdkit-colab.html b/docs/posts/2020-07-01-Install-rdkit-colab.html index f4d7b5e..4271883 100644 --- a/docs/posts/2020-07-01-Install-rdkit-colab.html +++ b/docs/posts/2020-07-01-Install-rdkit-colab.html @@ -144,7 +144,7 @@
    - + diff --git a/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html b/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html index 3092dbd..9ab4ddb 100644 --- a/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html +++ b/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html @@ -319,7 +319,7 @@ Serving HTTP on 0.0.0.0 port 8000 ...
    - + diff --git a/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html b/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html index 3798da3..469bb29 100644 --- a/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html +++ b/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html @@ -150,7 +150,7 @@ new Dics({
    - + diff --git a/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html b/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html index 8ffd418..6e440cc 100644 --- a/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html +++ b/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html @@ -110,7 +110,7 @@ navanspi.duckdns.org. 60 IN TXT - + diff --git a/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html b/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html index d3fbee7..ab042be 100644 --- a/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html +++ b/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html @@ -243,7 +243,7 @@
    - + diff --git a/docs/posts/2021-06-25-Blog2Twitter-P1.html b/docs/posts/2021-06-25-Blog2Twitter-P1.html index cb0fc1c..65c9ffe 100644 --- a/docs/posts/2021-06-25-Blog2Twitter-P1.html +++ b/docs/posts/2021-06-25-Blog2Twitter-P1.html @@ -137,7 +137,7 @@ I actually added the code to this post after running the program.

    - + diff --git a/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html b/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html index 78b1ef5..b4143d7 100644 --- a/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html +++ b/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html @@ -71,7 +71,7 @@ So, I did not have to ensure this could work with any device. I settled with usi
    - + diff --git a/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html b/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html index c62ffc3..51dc2ca 100644 --- a/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html +++ b/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html @@ -124,7 +124,7 @@ Hopefully, this encourages you to explore the world of cheminformatics on the we
    - + diff --git a/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html b/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html index 5cea0ea..827b0ba 100644 --- a/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html +++ b/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html @@ -209,7 +209,7 @@ Otherwise, it calls the custom action.

    - + diff --git a/docs/posts/hello-world.html b/docs/posts/hello-world.html index ac87c03..ec4ff3c 100644 --- a/docs/posts/hello-world.html +++ b/docs/posts/hello-world.html @@ -48,7 +48,7 @@
    - + diff --git a/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html b/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html index 840e67e..9ab9bd4 100644 --- a/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html +++ b/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html @@ -64,7 +64,7 @@
    - + diff --git a/docs/publications/2020-03-14-generating-vaporwave.html b/docs/publications/2020-03-14-generating-vaporwave.html index 128963f..16ce6f6 100644 --- a/docs/publications/2020-03-14-generating-vaporwave.html +++ b/docs/publications/2020-03-14-generating-vaporwave.html @@ -78,7 +78,7 @@
    - + diff --git a/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html b/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html index 903177c..3740bc3 100644 --- a/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html +++ b/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html @@ -48,7 +48,7 @@
    - + diff --git a/templates/post.html b/templates/post.html index b21547f..7ee3975 100644 --- a/templates/post.html +++ b/templates/post.html @@ -14,6 +14,6 @@ {{ content}}
    - + -{% endblock %} \ No newline at end of file +{% endblock %} -- cgit v1.2.3 From 76ea3fd55278f681b652ce10043bd263864071d8 Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Sat, 23 Apr 2022 02:00:34 -0600 Subject: added plausible --- templates/base.html | 3 ++- templates/head_tag.html | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/templates/base.html b/templates/base.html index b3cb1b1..caca658 100644 --- a/templates/base.html +++ b/templates/base.html @@ -26,6 +26,7 @@ + {% endblock %} @@ -35,4 +36,4 @@ - \ No newline at end of file + diff --git a/templates/head_tag.html b/templates/head_tag.html index 498c3e2..778bf81 100644 --- a/templates/head_tag.html +++ b/templates/head_tag.html @@ -18,3 +18,5 @@ + + -- cgit v1.2.3 From e02575449cd89cb7916651089aea3911a1f6cda6 Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Sat, 23 Apr 2022 02:00:46 -0600 Subject: generated with plausible --- docs/about/index.html | 1 + docs/feed.rss | 4 ++-- docs/index.html | 1 + docs/posts/2010-01-24-experiments.html | 1 + docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html | 1 + docs/posts/2019-12-04-Google-Teachable-Machines.html | 1 + docs/posts/2019-12-08-Image-Classifier-Tensorflow.html | 1 + docs/posts/2019-12-08-Splitting-Zips.html | 1 + docs/posts/2019-12-10-TensorFlow-Model-Prediction.html | 1 + docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html | 1 + docs/posts/2019-12-22-Fake-News-Detector.html | 1 + docs/posts/2020-01-14-Converting-between-PIL-NumPy.html | 1 + docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html | 1 + docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html | 1 + .../posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html | 1 + docs/posts/2020-03-03-Playing-With-Android-TV.html | 1 + docs/posts/2020-03-08-Making-Vaporwave-Track.html | 1 + docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html | 1 + docs/posts/2020-05-31-compiling-open-babel-on-ios.html | 1 + ...peeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html | 1 + docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html | 1 + docs/posts/2020-07-01-Install-rdkit-colab.html | 1 + docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html | 1 + docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html | 1 + docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html | 1 + docs/posts/2020-12-1-HTML-JS-RSS-Feed.html | 1 + docs/posts/2021-06-25-Blog2Twitter-P1.html | 1 + docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html | 1 + docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html | 1 + docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html | 1 + docs/posts/hello-world.html | 1 + docs/posts/index.html | 1 + ...-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html | 1 + docs/publications/2020-03-14-generating-vaporwave.html | 1 + docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html | 1 + docs/publications/index.html | 1 + 36 files changed, 37 insertions(+), 2 deletions(-) diff --git a/docs/about/index.html b/docs/about/index.html index 1240d0b..ec5389c 100644 --- a/docs/about/index.html +++ b/docs/about/index.html @@ -26,6 +26,7 @@ + diff --git a/docs/feed.rss b/docs/feed.rss index cbb3db7..9e6e8f8 100644 --- a/docs/feed.rss +++ b/docs/feed.rss @@ -4,8 +4,8 @@ Navan's Archive Rare Tips, Tricks and Posts https://web.navan.dev/en - Mon, 03 Jan 2022 00:19:52 -0000 - Mon, 03 Jan 2022 00:19:52 -0000 + Sat, 23 Apr 2022 02:00:20 -0000 + Sat, 23 Apr 2022 02:00:20 -0000 250 diff --git a/docs/index.html b/docs/index.html index 648f888..e1b10c0 100644 --- a/docs/index.html +++ b/docs/index.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2010-01-24-experiments.html b/docs/posts/2010-01-24-experiments.html index afe4e12..c2caa33 100644 --- a/docs/posts/2010-01-24-experiments.html +++ b/docs/posts/2010-01-24-experiments.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html b/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html index 6b1aee8..5f4300c 100644 --- a/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html +++ b/docs/posts/2019-05-05-Custom-Snowboard-Anemone-Theme.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2019-12-04-Google-Teachable-Machines.html b/docs/posts/2019-12-04-Google-Teachable-Machines.html index 6ca43f6..f92786e 100644 --- a/docs/posts/2019-12-04-Google-Teachable-Machines.html +++ b/docs/posts/2019-12-04-Google-Teachable-Machines.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html b/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html index 99c1be1..b83190d 100644 --- a/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html +++ b/docs/posts/2019-12-08-Image-Classifier-Tensorflow.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2019-12-08-Splitting-Zips.html b/docs/posts/2019-12-08-Splitting-Zips.html index 06421e2..72a9176 100644 --- a/docs/posts/2019-12-08-Splitting-Zips.html +++ b/docs/posts/2019-12-08-Splitting-Zips.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html b/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html index 81ee328..795878b 100644 --- a/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html +++ b/docs/posts/2019-12-10-TensorFlow-Model-Prediction.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html b/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html index 23da82f..a469dd7 100644 --- a/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html +++ b/docs/posts/2019-12-16-TensorFlow-Polynomial-Regression.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2019-12-22-Fake-News-Detector.html b/docs/posts/2019-12-22-Fake-News-Detector.html index c1bfd7d..a5158e3 100644 --- a/docs/posts/2019-12-22-Fake-News-Detector.html +++ b/docs/posts/2019-12-22-Fake-News-Detector.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html b/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html index 2524bf4..e8b802f 100644 --- a/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html +++ b/docs/posts/2020-01-14-Converting-between-PIL-NumPy.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html b/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html index 9f4ac97..5675502 100644 --- a/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html +++ b/docs/posts/2020-01-15-Setting-up-Kaggle-to-use-with-Colab.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html b/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html index f401d17..a9f60ea 100644 --- a/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html +++ b/docs/posts/2020-01-16-Image-Classifier-Using-Turicreate.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html b/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html index 0909d92..f915e48 100644 --- a/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html +++ b/docs/posts/2020-01-19-Connect-To-Bluetooth-Devices-Linux-Terminal.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2020-03-03-Playing-With-Android-TV.html b/docs/posts/2020-03-03-Playing-With-Android-TV.html index 536b2fb..1e854f9 100644 --- a/docs/posts/2020-03-03-Playing-With-Android-TV.html +++ b/docs/posts/2020-03-03-Playing-With-Android-TV.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2020-03-08-Making-Vaporwave-Track.html b/docs/posts/2020-03-08-Making-Vaporwave-Track.html index e9cbfcf..01b39d2 100644 --- a/docs/posts/2020-03-08-Making-Vaporwave-Track.html +++ b/docs/posts/2020-03-08-Making-Vaporwave-Track.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html b/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html index f79ac5c..89203c2 100644 --- a/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html +++ b/docs/posts/2020-04-13-Fixing-X11-Error-AmberTools-macOS.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2020-05-31-compiling-open-babel-on-ios.html b/docs/posts/2020-05-31-compiling-open-babel-on-ios.html index 2ae1edc..a631c17 100644 --- a/docs/posts/2020-05-31-compiling-open-babel-on-ios.html +++ b/docs/posts/2020-05-31-compiling-open-babel-on-ios.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html b/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html index f5a87c0..ad72e96 100644 --- a/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html +++ b/docs/posts/2020-06-01-Speeding-Up-Molecular-Docking-Workflow-AutoDock-Vina-and-PyMOL.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html b/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html index 6fd17c3..63bd2d2 100644 --- a/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html +++ b/docs/posts/2020-06-02-Compiling-AutoDock-Vina-on-iOS.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2020-07-01-Install-rdkit-colab.html b/docs/posts/2020-07-01-Install-rdkit-colab.html index 4271883..bf1da97 100644 --- a/docs/posts/2020-07-01-Install-rdkit-colab.html +++ b/docs/posts/2020-07-01-Install-rdkit-colab.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html b/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html index 9ab4ddb..711b3ea 100644 --- a/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html +++ b/docs/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html b/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html index 469bb29..7a663e8 100644 --- a/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html +++ b/docs/posts/2020-10-11-macOS-Virtual-Cam-OBS.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html b/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html index 6e440cc..b58d0fc 100644 --- a/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html +++ b/docs/posts/2020-11-17-Lets-Encrypt-DuckDns.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html b/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html index ab042be..2f6f70c 100644 --- a/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html +++ b/docs/posts/2020-12-1-HTML-JS-RSS-Feed.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2021-06-25-Blog2Twitter-P1.html b/docs/posts/2021-06-25-Blog2Twitter-P1.html index 65c9ffe..6d92c75 100644 --- a/docs/posts/2021-06-25-Blog2Twitter-P1.html +++ b/docs/posts/2021-06-25-Blog2Twitter-P1.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html b/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html index b4143d7..d2d5e13 100644 --- a/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html +++ b/docs/posts/2021-06-25-NFC-Music-Cards-Basic-iOS.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html b/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html index 51dc2ca..1743268 100644 --- a/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html +++ b/docs/posts/2021-06-26-Cheminformatics-On-The-Web-2021.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html b/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html index 827b0ba..0eea323 100644 --- a/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html +++ b/docs/posts/2021-06-27-Crude-ML-AI-Powered-Chatbot-Swift.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/hello-world.html b/docs/posts/hello-world.html index ec4ff3c..126a388 100644 --- a/docs/posts/hello-world.html +++ b/docs/posts/hello-world.html @@ -26,6 +26,7 @@ + diff --git a/docs/posts/index.html b/docs/posts/index.html index b853aa9..223e6d3 100644 --- a/docs/posts/index.html +++ b/docs/posts/index.html @@ -26,6 +26,7 @@ + diff --git a/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html b/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html index 9ab9bd4..e64dcfa 100644 --- a/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html +++ b/docs/publications/2019-05-14-Detecting-Driver-Fatigue-Over-Speeding-and-Speeding-up-Post-Accident-Response.html @@ -26,6 +26,7 @@ + diff --git a/docs/publications/2020-03-14-generating-vaporwave.html b/docs/publications/2020-03-14-generating-vaporwave.html index 16ce6f6..5e10b74 100644 --- a/docs/publications/2020-03-14-generating-vaporwave.html +++ b/docs/publications/2020-03-14-generating-vaporwave.html @@ -26,6 +26,7 @@ + diff --git a/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html b/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html index 3740bc3..32cb6c6 100644 --- a/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html +++ b/docs/publications/2020-03-17-Possible-Drug-Candidates-COVID-19.html @@ -26,6 +26,7 @@ + diff --git a/docs/publications/index.html b/docs/publications/index.html index bf382d3..96b7e3c 100644 --- a/docs/publications/index.html +++ b/docs/publications/index.html @@ -26,6 +26,7 @@ + -- cgit v1.2.3 From 885747d29973e3a1b04a68bc40a3e72ca0b711e7 Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Sun, 22 May 2022 11:10:19 -0600 Subject: removed trailing comma --- templates/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/index.html b/templates/index.html index cc66cd3..a651ea2 100644 --- a/templates/index.html +++ b/templates/index.html @@ -14,7 +14,7 @@
  • Published On: {{post.date}}
  • Tags: {% for tag in post.tags %} - {{ tag }}, + {{ tag }}{{ ", " if not loop.last else "" }} {% endfor %} -- cgit v1.2.3 From d382b50c111f2f2867a4af0176285d0cea7b591a Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Sun, 22 May 2022 12:03:28 -0600 Subject: added new post movie recommender --- .../posts/2022-05-21-Similar-Movies-Recommender.md | 400 +++++++++++++++++++ Resources/assets/flixrec/filter.png | Bin 0 -> 242231 bytes Resources/assets/flixrec/home.png | Bin 0 -> 160255 bytes Resources/assets/flixrec/multiple.png | Bin 0 -> 251294 bytes Resources/assets/flixrec/results.png | Bin 0 -> 280362 bytes docs/feed.rss | 408 ++++++++++++++++++- docs/index.html | 195 ++++----- .../2022-05-21-Similar-Movies-Recommender.html | 438 +++++++++++++++++++++ docs/posts/index.html | 17 + 9 files changed, 1367 insertions(+), 91 deletions(-) create mode 100644 Content/posts/2022-05-21-Similar-Movies-Recommender.md create mode 100644 Resources/assets/flixrec/filter.png create mode 100644 Resources/assets/flixrec/home.png create mode 100644 Resources/assets/flixrec/multiple.png create mode 100644 Resources/assets/flixrec/results.png create mode 100644 docs/posts/2022-05-21-Similar-Movies-Recommender.html diff --git a/Content/posts/2022-05-21-Similar-Movies-Recommender.md b/Content/posts/2022-05-21-Similar-Movies-Recommender.md new file mode 100644 index 0000000..fbc9fdb --- /dev/null +++ b/Content/posts/2022-05-21-Similar-Movies-Recommender.md @@ -0,0 +1,400 @@ +--- +date: 2022-05-21 17:56 +description: Building a Content Based Similar Movies Recommender System +tags: Python, Transformers, Movies, Recommender-System +--- + +# Building a Simple Similar Movies Recommender System + +## Why? + +I recently came across a movie/tv-show recommender, [couchmoney.tv](https://couchmoney.tv/). I loved it. I decided that I wanted to build something similar, so I could tinker with it as much as I wanted. + +I also wanted a recommendation system I could use via a REST API. Although I have not included that part in this post, I did eventually create it. + + +## How? + +By measuring the cosine of the angle between two vectors, you can get a value in the range [0,1] with 0 meaning no similarity. Now, if we find a way to represent information about movies as a vector, we can use cosine similarity as a metric to find similar movies. + +As we are recommending just based on the content of the movies, this is called a content based recommendation system. + +## Data Collection + +Trakt exposes a nice API to search for movies/tv-shows. To access the API, you first need to get an API key (the Trakt ID you get when you create a new application). + +I decided to use SQL-Alchemy with a SQLite backend just to make my life easier if I decided on switching to Postgres anytime I felt like. + +First, I needed to check the total number of records in Trakt’s database. + +```python +import requests +import os + +trakt_id = os.getenv("TRAKT_ID") + +api_base = "https://api.trakt.tv" + +headers = { + "Content-Type": "application/json", + "trakt-api-version": "2", + "trakt-api-key": trakt_id +} + +params = { + "query": "", + "years": "1900-2021", + "page": "1", + "extended": "full", + "languages": "en" +} + +res = requests.get(f"{api_base}/search/movie",headers=headers,params=params) +total_items = res.headers["x-pagination-item-count"] +print(f"There are {total_items} movies") +``` + +``` +There are 333946 movies +``` + +First, I needed to declare the database schema in (`database.py`): + +```python +import sqlalchemy +from sqlalchemy import create_engine +from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey, PickleType +from sqlalchemy import insert +from sqlalchemy.orm import sessionmaker +from sqlalchemy.exc import IntegrityError + +meta = MetaData() + +movies_table = Table( + "movies", + meta, + Column("trakt_id", Integer, primary_key=True, autoincrement=False), + Column("title", String), + Column("overview", String), + Column("genres", String), + Column("year", Integer), + Column("released", String), + Column("runtime", Integer), + Column("country", String), + Column("language", String), + Column("rating", Integer), + Column("votes", Integer), + Column("comment_count", Integer), + Column("tagline", String), + Column("embeddings", PickleType) + +) + +# Helper function to connect to the db +def init_db_stuff(database_url: str): + engine = create_engine(database_url) + meta.create_all(engine) + Session = sessionmaker(bind=engine) + return engine, Session +``` + +In the end, I could have dropped the embeddings field from the table schema as I never got around to using it. + +### Scripting Time + +```python +from database import * +from tqdm import tqdm +import requests +import os + +trakt_id = os.getenv("TRAKT_ID") + +max_requests = 5000 # How many requests I wanted to wrap everything up in +req_count = 0 # A counter for how many requests I have made + +years = "1900-2021" +page = 1 # The initial page number for the search +extended = "full" # Required to get additional information +limit = "10" # No of entires per request -- This will be automatically picked based on max_requests +languages = "en" # Limit to English + +api_base = "https://api.trakt.tv" +database_url = "sqlite:///jlm.db" + +headers = { + "Content-Type": "application/json", + "trakt-api-version": "2", + "trakt-api-key": trakt_id +} + +params = { + "query": "", + "years": years, + "page": page, + "extended": extended, + "limit": limit, + "languages": languages +} + +# Helper function to get desirable values from the response +def create_movie_dict(movie: dict): + m = movie["movie"] + movie_dict = { + "title": m["title"], + "overview": m["overview"], + "genres": m["genres"], + "language": m["language"], + "year": int(m["year"]), + "trakt_id": m["ids"]["trakt"], + "released": m["released"], + "runtime": int(m["runtime"]), + "country": m["country"], + "rating": int(m["rating"]), + "votes": int(m["votes"]), + "comment_count": int(m["comment_count"]), + "tagline": m["tagline"] + } + return movie_dict + +# Get total number of items +params["limit"] = 1 +res = requests.get(f"{api_base}/search/movie",headers=headers,params=params) +total_items = res.headers["x-pagination-item-count"] + +engine, Session = init_db_stuff(database_url) + + +for page in tqdm(range(1,max_requests+1)): + params["page"] = page + params["limit"] = int(int(total_items)/max_requests) + movies = [] + res = requests.get(f"{api_base}/search/movie",headers=headers,params=params) + + if res.status_code == 500: + break + elif res.status_code == 200: + None + else: + print(f"OwO Code {res.status_code}") + + for movie in res.json(): + movies.append(create_movie_dict(movie)) + + with engine.connect() as conn: + for movie in movies: + with conn.begin() as trans: + stmt = insert(movies_table).values( + trakt_id=movie["trakt_id"], title=movie["title"], genres=" ".join(movie["genres"]), + language=movie["language"], year=movie["year"], released=movie["released"], + runtime=movie["runtime"], country=movie["country"], overview=movie["overview"], + rating=movie["rating"], votes=movie["votes"], comment_count=movie["comment_count"], + tagline=movie["tagline"]) + try: + result = conn.execute(stmt) + trans.commit() + except IntegrityError: + trans.rollback() + req_count += 1 +``` + +(Note: I was well within the rate-limit so I did not have to slow down or implement any other measures) + +Running this script took me approximately 3 hours, and resulted in an SQLite database of 141.5 MB + +## Embeddings! + +I did not want to put my poor Mac through the estimated 23 hours it would have taken to embed the sentences. I decided to use Google Colab instead. + +Because of the small size of the database file, I was able to just upload the file. + +For the encoding model, I decided to use the pretrained `paraphrase-multilingual-MiniLM-L12-v2` model for SentenceTransformers, a Python framework for SOTA sentence, text and image embeddings. I wanted to use a multilingual model as I personally consume content in various languages (natively, no dubs or subs) and some of the sources for their information do not translate to English. As of writing this post, I did not include any other database except Trakt. + +While deciding how I was going to process the embeddings, I came across multiple solutions: + +* [Milvus](https://milvus.io) - An open-source vector database with similar search functionality + +* [FAISS](https://faiss.ai) - A library for efficient similarity search + +* [Pinecone](https://pinecone.io) - A fully managed vector database with similar search functionality + +I did not want to waste time setting up the first two, so I decided to go with Pinecone which offers 1M 768-dim vectors for free with no credit card required (Our embeddings are 384-dim dense). + +Getting started with Pinecone was as easy as: + +* Signing up + +* Specifying the index name and vector dimensions along with the similarity search metric (Cosine Similarity for our use case) + +* Getting the API key + +* Installing the Python module (pinecone-client) + +```python +import pandas as pd +import pinecone +from sentence_transformers import SentenceTransformer +from tqdm import tqdm + +database_url = "sqlite:///jlm.db" +PINECONE_KEY = "not-this-at-all" +batch_size = 32 + +pinecone.init(api_key=PINECONE_KEY, environment="us-west1-gcp") +index = pinecone.Index("movies") + +model = SentenceTransformer("paraphrase-multilingual-MiniLM-L12-v2", device="cuda") +engine, Session = init_db_stuff(database_url) + +df = pd.read_sql("Select * from movies", engine) +df["combined_text"] = df["title"] + ": " + df["overview"].fillna('') + " - " + df["tagline"].fillna('') + " Genres:- " + df["genres"].fillna('') + +# Creating the embedding and inserting it into the database +for x in tqdm(range(0,len(df),batch_size)): + to_send = [] + trakt_ids = df["trakt_id"][x:x+batch_size].tolist() + sentences = df["combined_text"][x:x+batch_size].tolist() + embeddings = model.encode(sentences) + for idx, value in enumerate(trakt_ids): + to_send.append( + ( + str(value), embeddings[idx].tolist() + )) + index.upsert(to_send) +``` + +That's it! + +## Interacting with Vectors + +We use the `trakt_id` for the movie as the ID for the vectors and upsert it into the index. + +To find similar items, we will first have to map the name of the movie to its trakt_id, get the embeddings we have for that id and then perform a similarity search. It is possible that this additional step of mapping could be avoided by storing information as metadata in the index. + +```python +def get_trakt_id(df, title: str): + rec = df[df["title"].str.lower()==movie_name.lower()] + if len(rec.trakt_id.values.tolist()) > 1: + print(f"multiple values found... {len(rec.trakt_id.values)}") + for x in range(len(rec)): + print(f"[{x}] {rec['title'].tolist()[x]} ({rec['year'].tolist()[x]}) - {rec['overview'].tolist()}") + print("===") + z = int(input("Choose No: ")) + return rec.trakt_id.values[z] + return rec.trakt_id.values[0] + +def get_vector_value(trakt_id: int): + fetch_response = index.fetch(ids=[str(trakt_id)]) + return fetch_response["vectors"][str(trakt_id)]["values"] + +def query_vectors(vector: list, top_k: int = 20, include_values: bool = False, include_metada: bool = True): + query_response = index.query( + queries=[ + (vector), + ], + top_k=top_k, + include_values=include_values, + include_metadata=include_metada + ) + return query_response + +def query2ids(query_response): + trakt_ids = [] + for match in query_response["results"][0]["matches"]: + trakt_ids.append(int(match["id"])) + return trakt_ids + +def get_deets_by_trakt_id(df, trakt_id: int): + df = df[df["trakt_id"]==trakt_id] + return { + "title": df.title.values[0], + "overview": df.overview.values[0], + "runtime": df.runtime.values[0], + "year": df.year.values[0] + } +``` + +### Testing it Out + +```python +movie_name = "Now You See Me" + +movie_trakt_id = get_trakt_id(df, movie_name) +print(movie_trakt_id) +movie_vector = get_vector_value(movie_trakt_id) +movie_queries = query_vectors(movie_vector) +movie_ids = query2ids(movie_queries) +print(movie_ids) + +for trakt_id in movie_ids: + deets = get_deets_by_trakt_id(df, trakt_id) + print(f"{deets['title']} ({deets['year']}): {deets['overview']}") +``` + +Output: + +``` +55786 +[55786, 18374, 299592, 662622, 6054, 227458, 139687, 303950, 70000, 129307, 70823, 5766, 23950, 137696, 655723, 32842, 413269, 145994, 197990, 373832] +Now You See Me (2013): An FBI agent and an Interpol detective track a team of illusionists who pull off bank heists during their performances and reward their audiences with the money. +Trapped (1949): U.S. Treasury Department agents go after a ring of counterfeiters. +Brute Sanity (2018): An FBI-trained neuropsychologist teams up with a thief to find a reality-altering device while her insane ex-boss unleashes bizarre traps to stop her. +The Chase (2017): Some FBI agents hunt down a criminal +Surveillance (2008): An FBI agent tracks a serial killer with the help of three of his would-be victims - all of whom have wildly different stories to tell. +Marauders (2016): An untraceable group of elite bank robbers is chased by a suicidal FBI agent who uncovers a deeper purpose behind the robbery-homicides. +Miracles for Sale (1939): A maker of illusions for magicians protects an ingenue likely to be murdered. +Deceptors (2005): A Ghostbusters knock-off where a group of con-artists create bogus monsters to scare up some cash. They run for their lives when real spooks attack. +The Outfit (1993): A renegade FBI agent sparks an explosive mob war between gangster crime lords Legs Diamond and Dutch Schultz. +Bank Alarm (1937): A federal agent learns the gangsters he's been investigating have kidnapped his sister. +The Courier (2012): A shady FBI agent recruits a courier to deliver a mysterious package to a vengeful master criminal who has recently resurfaced with a diabolical plan. +After the Sunset (2004): An FBI agent is suspicious of two master thieves, quietly enjoying their retirement near what may - or may not - be the biggest score of their careers. +Down Three Dark Streets (1954): An FBI Agent takes on the three unrelated cases of a dead agent to track down his killer. +The Executioner (1970): A British intelligence agent must track down a fellow spy suspected of being a double agent. +Ace of Cactus Range (1924): A Secret Service agent goes undercover to unmask the leader of a gang of diamond thieves. +Firepower (1979): A mercenary is hired by the FBI to track down a powerful recluse criminal, a woman is also trying to track him down for her own personal vendetta. +Heroes & Villains (2018): an FBI agent chases a thug to great tunes +Federal Fugitives (1941): A government agent goes undercover in order to apprehend a saboteur who caused a plane crash. +Hell on Earth (2012): An FBI Agent on the trail of a group of drug traffickers learns that their corruption runs deeper than she ever imagined, and finds herself in a supernatural - and deadly - situation. +Spies (2015): A secret agent must perform a heist without time on his side +``` + +For now, I am happy with the recommendations. + +## Simple UI + +The code for the flask app can be found on GitHub: [navanchauhan/FlixRec](https://github.com/navanchauhan/FlixRec) or on my [Gitea instance](https://pi4.navan.dev/gitea/navan/FlixRec) + +I quickly whipped up a simple Flask App to deal with problems of multiple movies sharing the title, and typos in the search query. + +### Home Page + +![Home Page](/assets/flixrec/home.png) + +### Handling Multiple Movies with Same Title + +![Multiple Movies with Same Title](/assets/flixrec/multiple.png) + +### Results Page + +![Results Page](/assets/flixrec/results.png) + +Includes additional filter options + +![Advance Filtering Options](/assets/flixrec/filter.png) + +Test it out at [https://flixrec.navan.dev](https://flixrec.navan.dev) + +## Current Limittations + +* Does not work well with popular franchises +* No Genre Filter + +## Future Addons + +* Include Cast Data + * e.g. If it sees a movie with Tom Hanks and Meg Ryan, then it will boost similar movies including them + * e.g. If it sees the movie has been directed my McG, then it will boost similar movies directed by them +* REST API +* TV Shows +* Multilingual database +* Filter based on popularity: The data already exists in the indexed database \ No newline at end of file diff --git a/Resources/assets/flixrec/filter.png b/Resources/assets/flixrec/filter.png new file mode 100644 index 0000000..c1e4c52 Binary files /dev/null and b/Resources/assets/flixrec/filter.png differ diff --git a/Resources/assets/flixrec/home.png b/Resources/assets/flixrec/home.png new file mode 100644 index 0000000..2d6fb51 Binary files /dev/null and b/Resources/assets/flixrec/home.png differ diff --git a/Resources/assets/flixrec/multiple.png b/Resources/assets/flixrec/multiple.png new file mode 100644 index 0000000..f35d342 Binary files /dev/null and b/Resources/assets/flixrec/multiple.png differ diff --git a/Resources/assets/flixrec/results.png b/Resources/assets/flixrec/results.png new file mode 100644 index 0000000..a239ba4 Binary files /dev/null and b/Resources/assets/flixrec/results.png differ diff --git a/docs/feed.rss b/docs/feed.rss index 2b53f53..3f65a70 100644 --- a/docs/feed.rss +++ b/docs/feed.rss @@ -4,8 +4,8 @@ Navan's Archive Rare Tips, Tricks and Posts https://web.navan.dev/en - Sun, 07 Nov 2021 17:42:49 -0000 - Sun, 07 Nov 2021 17:42:49 -0000 + Sun, 22 May 2022 11:59:10 -0000 + Sun, 22 May 2022 11:59:10 -0000 250 @@ -565,6 +565,410 @@ export BABEL_LIBDIR="/usr/lib/openbabel/3.1.0" ]]> + + + https://web.navan.dev/posts/2022-05-21-Similar-Movies-Recommender.html + + + Building a Simple Similar Movies Recommender System + + + Building a Content Based Similar Movies Recommender System + + https://web.navan.dev/posts/2022-05-21-Similar-Movies-Recommender.html + Sat, 21 May 2022 17:56:00 -0000 + Building a Simple Similar Movies Recommender System + +

    Why?

    + +

    I recently came across a movie/tv-show recommender, couchmoney.tv. I loved it. I decided that I wanted to build something similar, so I could tinker with it as much as I wanted.

    + +

    I also wanted a recommendation system I could use via a REST API. Although I have not included that part in this post, I did eventually create it.

    + +

    How?

    + +

    By measuring the cosine of the angle between two vectors, you can get a value in the range [0,1] with 0 meaning no similarity. Now, if we find a way to represent information about movies as a vector, we can use cosine similarity as a metric to find similar movies.

    + +

    As we are recommending just based on the content of the movies, this is called a content based recommendation system.

    + +

    Data Collection

    + +

    Trakt exposes a nice API to search for movies/tv-shows. To access the API, you first need to get an API key (the Trakt ID you get when you create a new application).

    + +

    I decided to use SQL-Alchemy with a SQLite backend just to make my life easier if I decided on switching to Postgres anytime I felt like.

    + +

    First, I needed to check the total number of records in Trakt’s database.

    + +
    import requests
    +import os
    +
    +trakt_id = os.getenv("TRAKT_ID")
    +
    +api_base = "https://api.trakt.tv"
    +
    +headers = {
    +    "Content-Type": "application/json",
    +    "trakt-api-version": "2",
    +    "trakt-api-key": trakt_id
    +}
    +
    +params = {
    +    "query": "",
    +    "years": "1900-2021",
    +    "page": "1",
    +    "extended": "full",
    +    "languages": "en"
    +}
    +
    +res = requests.get(f"{api_base}/search/movie",headers=headers,params=params)
    +total_items = res.headers["x-pagination-item-count"]
    +print(f"There are {total_items} movies")
    +
    + +
    There are 333946 movies
    +
    + +

    First, I needed to declare the database schema in (database.py):

    + +
    import sqlalchemy
    +from sqlalchemy import create_engine
    +from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey, PickleType
    +from sqlalchemy import insert
    +from sqlalchemy.orm import sessionmaker
    +from sqlalchemy.exc import IntegrityError
    +
    +meta = MetaData()
    +
    +movies_table = Table(
    +    "movies",
    +    meta,
    +    Column("trakt_id", Integer, primary_key=True, autoincrement=False),
    +    Column("title", String),
    +    Column("overview", String),
    +    Column("genres", String),
    +    Column("year", Integer),
    +    Column("released", String),
    +    Column("runtime", Integer),
    +    Column("country", String),
    +    Column("language", String),
    +    Column("rating", Integer),
    +    Column("votes", Integer),
    +    Column("comment_count", Integer),
    +    Column("tagline", String),
    +    Column("embeddings", PickleType)
    +
    +)
    +
    +# Helper function to connect to the db
    +def init_db_stuff(database_url: str):
    +    engine = create_engine(database_url)
    +    meta.create_all(engine)
    +    Session = sessionmaker(bind=engine)
    +    return engine, Session
    +
    + +

    In the end, I could have dropped the embeddings field from the table schema as I never got around to using it.

    + +

    Scripting Time

    + +
    from database import *
    +from tqdm import tqdm
    +import requests
    +import os
    +
    +trakt_id = os.getenv("TRAKT_ID")
    +
    +max_requests = 5000 # How many requests I wanted to wrap everything up in
    +req_count = 0 # A counter for how many requests I have made
    +
    +years = "1900-2021" 
    +page = 1 # The initial page number for the search
    +extended = "full" # Required to get additional information 
    +limit = "10" # No of entires per request -- This will be automatically picked based on max_requests
    +languages = "en" # Limit to English
    +
    +api_base = "https://api.trakt.tv"
    +database_url = "sqlite:///jlm.db"
    +
    +headers = {
    +    "Content-Type": "application/json",
    +    "trakt-api-version": "2",
    +    "trakt-api-key": trakt_id
    +}
    +
    +params = {
    +    "query": "",
    +    "years": years,
    +    "page": page,
    +    "extended": extended,
    +    "limit": limit,
    +    "languages": languages
    +}
    +
    +# Helper function to get desirable values from the response
    +def create_movie_dict(movie: dict):
    +    m = movie["movie"]
    +    movie_dict = {
    +        "title": m["title"],
    +        "overview": m["overview"],
    +        "genres": m["genres"],
    +        "language": m["language"],
    +        "year": int(m["year"]),
    +        "trakt_id": m["ids"]["trakt"],
    +        "released": m["released"],
    +        "runtime": int(m["runtime"]),
    +        "country": m["country"],
    +        "rating": int(m["rating"]),
    +        "votes": int(m["votes"]),
    +        "comment_count": int(m["comment_count"]),
    +        "tagline": m["tagline"]
    +    }
    +    return movie_dict
    +
    +# Get total number of items
    +params["limit"] = 1
    +res = requests.get(f"{api_base}/search/movie",headers=headers,params=params)
    +total_items = res.headers["x-pagination-item-count"]
    +
    +engine, Session = init_db_stuff(database_url)
    +
    +
    +for page in tqdm(range(1,max_requests+1)):
    +    params["page"] = page
    +    params["limit"] = int(int(total_items)/max_requests)
    +    movies = []
    +    res = requests.get(f"{api_base}/search/movie",headers=headers,params=params)
    +
    +    if res.status_code == 500:
    +        break
    +    elif res.status_code == 200:
    +        None
    +    else:
    +        print(f"OwO Code {res.status_code}")
    +
    +    for movie in res.json():
    +        movies.append(create_movie_dict(movie))
    +
    +    with engine.connect() as conn:
    +        for movie in movies:
    +            with conn.begin() as trans:
    +                stmt = insert(movies_table).values(
    +                    trakt_id=movie["trakt_id"], title=movie["title"], genres=" ".join(movie["genres"]),
    +                    language=movie["language"], year=movie["year"], released=movie["released"],
    +                    runtime=movie["runtime"], country=movie["country"], overview=movie["overview"],
    +                    rating=movie["rating"], votes=movie["votes"], comment_count=movie["comment_count"],
    +                    tagline=movie["tagline"])
    +                try:
    +                    result = conn.execute(stmt)
    +                    trans.commit()
    +                except IntegrityError:
    +                    trans.rollback()
    +    req_count += 1
    +
    + +

    (Note: I was well within the rate-limit so I did not have to slow down or implement any other measures)

    + +

    Running this script took me approximately 3 hours, and resulted in an SQLite database of 141.5 MB

    + +

    Embeddings!

    + +

    I did not want to put my poor Mac through the estimated 23 hours it would have taken to embed the sentences. I decided to use Google Colab instead.

    + +

    Because of the small size of the database file, I was able to just upload the file.

    + +

    For the encoding model, I decided to use the pretrained paraphrase-multilingual-MiniLM-L12-v2 model for SentenceTransformers, a Python framework for SOTA sentence, text and image embeddings. I wanted to use a multilingual model as I personally consume content in various languages (natively, no dubs or subs) and some of the sources for their information do not translate to English. As of writing this post, I did not include any other database except Trakt.

    + +

    While deciding how I was going to process the embeddings, I came across multiple solutions:

    + +
      +
    • Milvus - An open-source vector database with similar search functionality

    • +
    • FAISS - A library for efficient similarity search

    • +
    • Pinecone - A fully managed vector database with similar search functionality

    • +
    + +

    I did not want to waste time setting up the first two, so I decided to go with Pinecone which offers 1M 768-dim vectors for free with no credit card required (Our embeddings are 384-dim dense).

    + +

    Getting started with Pinecone was as easy as:

    + +
      +
    • Signing up

    • +
    • Specifying the index name and vector dimensions along with the similarity search metric (Cosine Similarity for our use case)

    • +
    • Getting the API key

    • +
    • Installing the Python module (pinecone-client)

    • +
    + +
    import pandas as pd
    +import pinecone
    +from sentence_transformers import SentenceTransformer
    +from tqdm import tqdm 
    +
    +database_url = "sqlite:///jlm.db"
    +PINECONE_KEY = "not-this-at-all"
    +batch_size = 32
    +
    +pinecone.init(api_key=PINECONE_KEY, environment="us-west1-gcp")
    +index = pinecone.Index("movies")
    +
    +model = SentenceTransformer("paraphrase-multilingual-MiniLM-L12-v2", device="cuda")
    +engine, Session = init_db_stuff(database_url)
    +
    +df = pd.read_sql("Select * from movies", engine)
    +df["combined_text"] = df["title"] + ": " + df["overview"].fillna('') + " -  " + df["tagline"].fillna('') + " Genres:-  " + df["genres"].fillna('')
    +
    +# Creating the embedding and inserting it into the database
    +for x in tqdm(range(0,len(df),batch_size)):
    +    to_send = []
    +    trakt_ids = df["trakt_id"][x:x+batch_size].tolist()
    +    sentences = df["combined_text"][x:x+batch_size].tolist()
    +    embeddings = model.encode(sentences)
    +    for idx, value in enumerate(trakt_ids):
    +        to_send.append(
    +            (
    +                str(value), embeddings[idx].tolist()
    +            ))
    +    index.upsert(to_send)
    +
    + +

    That's it!

    + +

    Interacting with Vectors

    + +

    We use the trakt_id for the movie as the ID for the vectors and upsert it into the index.

    + +

    To find similar items, we will first have to map the name of the movie to its trakt_id, get the embeddings we have for that id and then perform a similarity search. It is possible that this additional step of mapping could be avoided by storing information as metadata in the index.

    + +
    def get_trakt_id(df, title: str):
    +  rec = df[df["title"].str.lower()==movie_name.lower()]
    +  if len(rec.trakt_id.values.tolist()) > 1:
    +    print(f"multiple values found... {len(rec.trakt_id.values)}")
    +    for x in range(len(rec)):
    +      print(f"[{x}] {rec['title'].tolist()[x]} ({rec['year'].tolist()[x]}) - {rec['overview'].tolist()}")
    +      print("===")
    +      z = int(input("Choose No: "))
    +      return rec.trakt_id.values[z]
    +  return rec.trakt_id.values[0]
    +
    +def get_vector_value(trakt_id: int):
    +  fetch_response = index.fetch(ids=[str(trakt_id)])
    +  return fetch_response["vectors"][str(trakt_id)]["values"]
    +
    +def query_vectors(vector: list, top_k: int = 20, include_values: bool = False, include_metada: bool = True):
    +  query_response = index.query(
    +      queries=[
    +          (vector),
    +      ],
    +      top_k=top_k,
    +      include_values=include_values,
    +      include_metadata=include_metada
    +  )
    +  return query_response
    +
    +def query2ids(query_response):
    +  trakt_ids = []
    +  for match in query_response["results"][0]["matches"]:
    +    trakt_ids.append(int(match["id"]))
    +  return trakt_ids
    +
    +def get_deets_by_trakt_id(df, trakt_id: int):
    +  df = df[df["trakt_id"]==trakt_id]
    +  return {
    +      "title": df.title.values[0],
    +      "overview": df.overview.values[0],
    +      "runtime": df.runtime.values[0],
    +      "year": df.year.values[0]
    +  }
    +
    + +

    Testing it Out

    + +
    movie_name = "Now You See Me"
    +
    +movie_trakt_id = get_trakt_id(df, movie_name)
    +print(movie_trakt_id)
    +movie_vector = get_vector_value(movie_trakt_id)
    +movie_queries = query_vectors(movie_vector)
    +movie_ids = query2ids(movie_queries)
    +print(movie_ids)
    +
    +for trakt_id in movie_ids:
    +  deets = get_deets_by_trakt_id(df, trakt_id)
    +  print(f"{deets['title']} ({deets['year']}): {deets['overview']}")
    +
    + +

    Output:

    + +
    [55786, 18374, 299592, 662622, 6054, 227458, 139687, 303950, 70000, 129307, 70823, 5766, 23950, 137696, 655723, 32842, 413269, 145994, 197990, 373832]
    +Now You See Me (2013): An FBI agent and an Interpol detective track a team of illusionists who pull off bank heists during their performances and reward their audiences with the money.
    +Trapped (1949): U.S. Treasury Department agents go after a ring of counterfeiters.
    +Brute Sanity (2018): An FBI-trained neuropsychologist teams up with a thief to find a reality-altering device while her insane ex-boss unleashes bizarre traps to stop her.
    +The Chase (2017): Some FBI agents hunt down a criminal
    +Surveillance (2008): An FBI agent tracks a serial killer with the help of three of his would-be victims - all of whom have wildly different stories to tell.
    +Marauders (2016): An untraceable group of elite bank robbers is chased by a suicidal FBI agent who uncovers a deeper purpose behind the robbery-homicides.
    +Miracles for Sale (1939): A maker of illusions for magicians protects an ingenue likely to be murdered.
    +Deceptors (2005): A Ghostbusters knock-off where a group of con-artists create bogus monsters to scare up some cash. They run for their lives when real spooks attack.
    +The Outfit (1993): A renegade FBI agent sparks an explosive mob war between gangster crime lords Legs Diamond and Dutch Schultz.
    +Bank Alarm (1937): A federal agent learns the gangsters he's been investigating have kidnapped his sister.
    +The Courier (2012): A shady FBI agent recruits a courier to deliver a mysterious package to a vengeful master criminal who has recently resurfaced with a diabolical plan.
    +After the Sunset (2004): An FBI agent is suspicious of two master thieves, quietly enjoying their retirement near what may - or may not - be the biggest score of their careers.
    +Down Three Dark Streets (1954): An FBI Agent takes on the three unrelated cases of a dead agent to track down his killer.
    +The Executioner (1970): A British intelligence agent must track down a fellow spy suspected of being a double agent.
    +Ace of Cactus Range (1924): A Secret Service agent goes undercover to unmask the leader of a gang of diamond thieves.
    +Firepower (1979): A mercenary is hired by the FBI to track down a powerful recluse criminal, a woman is also trying to track him down for her own personal vendetta.
    +Heroes & Villains (2018): an FBI agent chases a thug to great tunes
    +Federal Fugitives (1941): A government agent goes undercover in order to apprehend a saboteur who caused a plane crash.
    +Hell on Earth (2012): An FBI Agent on the trail of a group of drug traffickers learns that their corruption runs deeper than she ever imagined, and finds herself in a supernatural - and deadly - situation.
    +Spies (2015): A secret agent must perform a heist without time on his side
    +
    + +

    For now, I am happy with the recommendations.

    + +

    Simple UI

    + +

    The code for the flask app can be found on GitHub: navanchauhan/FlixRec or on my Gitea instance

    + +

    I quickly whipped up a simple Flask App to deal with problems of multiple movies sharing the title, and typos in the search query.

    + +

    Home Page

    + +

    Home Page

    + +

    Handling Multiple Movies with Same Title

    + +

    Multiple Movies with Same Title

    + +

    Results Page

    + +

    Results Page

    + +

    Includes additional filter options

    + +

    Advance Filtering Options

    + +

    Test it out at https://flixrec.navan.dev

    + +

    Current Limittations

    + +
      +
    • Does not work well with popular franchises
    • +
    • No Genre Filter
    • +
    + +

    Future Addons

    + +
      +
    • Include Cast Data +
        +
      • e.g. If it sees a movie with Tom Hanks and Meg Ryan, then it will boost similar movies including them
      • +
      • e.g. If it sees the movie has been directed my McG, then it will boost similar movies directed by them
      • +
    • +
    • REST API
    • +
    • TV Shows
    • +
    • Multilingual database
    • +
    • Filter based on popularity: The data already exists in the indexed database
    • +
    +]]>
    +
    + https://web.navan.dev/posts/2020-08-01-Natural-Feature-Tracking-ARJS.html diff --git a/docs/index.html b/docs/index.html index 66eee2a..d55f8ee 100644 --- a/docs/index.html +++ b/docs/index.html @@ -45,17 +45,34 @@
      +
    • Building a Simple Similar Movies Recommender System
    • +
        +
      • Building a Content Based Similar Movies Recommender System
      • +
      • Published On: 2022-05-21 17:56
      • +
      • Tags: + + Python, + + Transformers, + + Movies, + + Recommender-System + +
      + +
    • Making a Crude ML Powered Chatbot in Swift using CoreML
      • Writing a simple Machine-Learning powered Chatbot (or, daresay virtual personal assistant ) in Swift using CoreML.
      • Published On: 2021-06-27 23:26
      • Tags: - Swift, + Swift, - CoreML, + CoreML, - NLP, + NLP
      @@ -66,9 +83,9 @@
    • Published On: 2021-06-26 13:04
    • Tags: - Cheminformatics, + Cheminformatics, - JavaScript, + JavaScript
    @@ -79,11 +96,11 @@
  • Published On: 2021-06-25 16:20
  • Tags: - iOS, + iOS, - Shortcuts, + Shortcuts, - Fun, + Fun @@ -94,11 +111,11 @@
  • Published On: 2021-06-25 00:08
  • Tags: - Python, + Python, - Twitter, + Twitter, - Eh, + Eh @@ -109,13 +126,13 @@
  • Published On: 2020-12-01 20:52
  • Tags: - Tutorial, + Tutorial, - Code-Snippet, + Code-Snippet, - HTML, + HTML, - JavaScript, + JavaScript @@ -126,11 +143,11 @@
  • Published On: 2020-11-17 15:04
  • Tags: - Tutorial, + Tutorial, - Code-Snippet, + Code-Snippet, - Web-Development, + Web-Development @@ -141,11 +158,11 @@
  • Published On: 2020-10-11 16:12
  • Tags: - Tutorial, + Tutorial, - Review, + Review, - Webcam, + Webcam @@ -156,13 +173,13 @@
  • Published On: 2020-08-01 15:43
  • Tags: - Tutorial, + Tutorial, - AR.js, + AR.js, - JavaScript, + JavaScript, - Augmented-Reality, + Augmented-Reality @@ -173,11 +190,11 @@
  • Published On: 2020-07-01 14:23
  • Tags: - Tutorial, + Tutorial, - Code-Snippet, + Code-Snippet, - Colab, + Colab @@ -188,15 +205,15 @@
  • Published On: 2020-06-02 23:23
  • Tags: - iOS, + iOS, - Jailbreak, + Jailbreak, - Cheminformatics, + Cheminformatics, - AutoDock Vina, + AutoDock Vina, - Molecular-Docking, + Molecular-Docking @@ -207,15 +224,15 @@
  • Published On: 2020-06-01 13:10
  • Tags: - Code-Snippet, + Code-Snippet, - Molecular-Docking, + Molecular-Docking, - Cheminformatics, + Cheminformatics, - Open-Babel, + Open-Babel, - AutoDock Vina, + AutoDock Vina @@ -226,13 +243,13 @@
  • Published On: 2020-05-31 23:30
  • Tags: - iOS, + iOS, - Jailbreak, + Jailbreak, - Cheminformatics, + Cheminformatics, - Open-Babel, + Open-Babel @@ -243,9 +260,9 @@
  • Published On: 2020-04-13 11:41
  • Tags: - Molecular-Dynamics, + Molecular-Dynamics, - macOS, + macOS @@ -256,9 +273,9 @@
  • Published On: 2020-03-17 17:40
  • Tags: - publication, + publication, - pre-print, + pre-print @@ -269,9 +286,9 @@
  • Published On: 2020-03-14 22:23
  • Tags: - publication, + publication, - pre-print, + pre-print @@ -282,9 +299,9 @@
  • Published On: 2020-03-08 23:17
  • Tags: - Vaporwave, + Vaporwave, - Music, + Music @@ -295,9 +312,9 @@
  • Published On: 2020-03-03 18:37
  • Tags: - Android-TV, + Android-TV, - Android, + Android @@ -308,13 +325,13 @@
  • Published On: 2020-01-19 15:27
  • Tags: - Code-Snippet, + Code-Snippet, - tutorial, + tutorial, - Raspberry-Pi, + Raspberry-Pi, - Linux, + Linux @@ -325,11 +342,11 @@
  • Published On: 2020-01-16 10:36
  • Tags: - Tutorial, + Tutorial, - Colab, + Colab, - Turicreate, + Turicreate @@ -340,13 +357,13 @@
  • Published On: 2020-01-15 23:36
  • Tags: - Tutorial, + Tutorial, - Colab, + Colab, - Turicreate, + Turicreate, - Kaggle, + Kaggle @@ -357,9 +374,9 @@
  • Published On: 2020-01-14 00:10
  • Tags: - Code-Snippet, + Code-Snippet, - Tutorial, + Tutorial @@ -370,13 +387,13 @@
  • Published On: 2019-12-22 11:10
  • Tags: - Tutorial, + Tutorial, - Colab, + Colab, - SwiftUI, + SwiftUI, - Turicreate, + Turicreate @@ -387,11 +404,11 @@
  • Published On: 2019-12-16 14:16
  • Tags: - Tutorial, + Tutorial, - Tensorflow, + Tensorflow, - Colab, + Colab @@ -402,11 +419,11 @@
  • Published On: 2019-12-10 11:10
  • Tags: - Tutorial, + Tutorial, - Tensorflow, + Tensorflow, - Code-Snippet, + Code-Snippet @@ -417,11 +434,11 @@
  • Published On: 2019-12-08 14:16
  • Tags: - Tutorial, + Tutorial, - Tensorflow, + Tensorflow, - Colab, + Colab @@ -432,9 +449,9 @@
  • Published On: 2019-12-08 13:27
  • Tags: - Code-Snippet, + Code-Snippet, - Tutorial, + Tutorial @@ -445,7 +462,7 @@
  • Published On: 2019-12-04 18:23
  • Tags: - Tutorial, + Tutorial @@ -456,7 +473,7 @@
  • Published On: 2019-05-14 02:42
  • Tags: - publication, + publication @@ -467,15 +484,15 @@
  • Published On: 2019-05-05 12:34
  • Tags: - Tutorial, + Tutorial, - Jailbreak, + Jailbreak, - Designing, + Designing, - Snowboard, + Snowboard, - Anemone, + Anemone @@ -486,7 +503,7 @@
  • Published On: 2019-04-16 17:39
  • Tags: - hello-world, + hello-world @@ -497,7 +514,7 @@
  • Published On: 2010-01-24 23:43
  • Tags: - Experiment, + Experiment diff --git a/docs/posts/2022-05-21-Similar-Movies-Recommender.html b/docs/posts/2022-05-21-Similar-Movies-Recommender.html new file mode 100644 index 0000000..42b887a --- /dev/null +++ b/docs/posts/2022-05-21-Similar-Movies-Recommender.html @@ -0,0 +1,438 @@ + + + + + + + + + Hey - Post - Building a Simple Similar Movies Recommender System + + + + + + + + + + + + + + + + + + + + + + + +
    +

    Building a Simple Similar Movies Recommender System

    + +

    Why?

    + +

    I recently came across a movie/tv-show recommender, couchmoney.tv. I loved it. I decided that I wanted to build something similar, so I could tinker with it as much as I wanted.

    + +

    I also wanted a recommendation system I could use via a REST API. Although I have not included that part in this post, I did eventually create it.

    + +

    How?

    + +

    By measuring the cosine of the angle between two vectors, you can get a value in the range [0,1] with 0 meaning no similarity. Now, if we find a way to represent information about movies as a vector, we can use cosine similarity as a metric to find similar movies.

    + +

    As we are recommending just based on the content of the movies, this is called a content based recommendation system.

    + +

    Data Collection

    + +

    Trakt exposes a nice API to search for movies/tv-shows. To access the API, you first need to get an API key (the Trakt ID you get when you create a new application).

    + +

    I decided to use SQL-Alchemy with a SQLite backend just to make my life easier if I decided on switching to Postgres anytime I felt like.

    + +

    First, I needed to check the total number of records in Trakt’s database.

    + +
    import requests
    +import os
    +
    +trakt_id = os.getenv("TRAKT_ID")
    +
    +api_base = "https://api.trakt.tv"
    +
    +headers = {
    +    "Content-Type": "application/json",
    +    "trakt-api-version": "2",
    +    "trakt-api-key": trakt_id
    +}
    +
    +params = {
    +    "query": "",
    +    "years": "1900-2021",
    +    "page": "1",
    +    "extended": "full",
    +    "languages": "en"
    +}
    +
    +res = requests.get(f"{api_base}/search/movie",headers=headers,params=params)
    +total_items = res.headers["x-pagination-item-count"]
    +print(f"There are {total_items} movies")
    +
    + +
    There are 333946 movies
    +
    + +

    First, I needed to declare the database schema in (database.py):

    + +
    import sqlalchemy
    +from sqlalchemy import create_engine
    +from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey, PickleType
    +from sqlalchemy import insert
    +from sqlalchemy.orm import sessionmaker
    +from sqlalchemy.exc import IntegrityError
    +
    +meta = MetaData()
    +
    +movies_table = Table(
    +    "movies",
    +    meta,
    +    Column("trakt_id", Integer, primary_key=True, autoincrement=False),
    +    Column("title", String),
    +    Column("overview", String),
    +    Column("genres", String),
    +    Column("year", Integer),
    +    Column("released", String),
    +    Column("runtime", Integer),
    +    Column("country", String),
    +    Column("language", String),
    +    Column("rating", Integer),
    +    Column("votes", Integer),
    +    Column("comment_count", Integer),
    +    Column("tagline", String),
    +    Column("embeddings", PickleType)
    +
    +)
    +
    +# Helper function to connect to the db
    +def init_db_stuff(database_url: str):
    +    engine = create_engine(database_url)
    +    meta.create_all(engine)
    +    Session = sessionmaker(bind=engine)
    +    return engine, Session
    +
    + +

    In the end, I could have dropped the embeddings field from the table schema as I never got around to using it.

    + +

    Scripting Time

    + +
    from database import *
    +from tqdm import tqdm
    +import requests
    +import os
    +
    +trakt_id = os.getenv("TRAKT_ID")
    +
    +max_requests = 5000 # How many requests I wanted to wrap everything up in
    +req_count = 0 # A counter for how many requests I have made
    +
    +years = "1900-2021" 
    +page = 1 # The initial page number for the search
    +extended = "full" # Required to get additional information 
    +limit = "10" # No of entires per request -- This will be automatically picked based on max_requests
    +languages = "en" # Limit to English
    +
    +api_base = "https://api.trakt.tv"
    +database_url = "sqlite:///jlm.db"
    +
    +headers = {
    +    "Content-Type": "application/json",
    +    "trakt-api-version": "2",
    +    "trakt-api-key": trakt_id
    +}
    +
    +params = {
    +    "query": "",
    +    "years": years,
    +    "page": page,
    +    "extended": extended,
    +    "limit": limit,
    +    "languages": languages
    +}
    +
    +# Helper function to get desirable values from the response
    +def create_movie_dict(movie: dict):
    +    m = movie["movie"]
    +    movie_dict = {
    +        "title": m["title"],
    +        "overview": m["overview"],
    +        "genres": m["genres"],
    +        "language": m["language"],
    +        "year": int(m["year"]),
    +        "trakt_id": m["ids"]["trakt"],
    +        "released": m["released"],
    +        "runtime": int(m["runtime"]),
    +        "country": m["country"],
    +        "rating": int(m["rating"]),
    +        "votes": int(m["votes"]),
    +        "comment_count": int(m["comment_count"]),
    +        "tagline": m["tagline"]
    +    }
    +    return movie_dict
    +
    +# Get total number of items
    +params["limit"] = 1
    +res = requests.get(f"{api_base}/search/movie",headers=headers,params=params)
    +total_items = res.headers["x-pagination-item-count"]
    +
    +engine, Session = init_db_stuff(database_url)
    +
    +
    +for page in tqdm(range(1,max_requests+1)):
    +    params["page"] = page
    +    params["limit"] = int(int(total_items)/max_requests)
    +    movies = []
    +    res = requests.get(f"{api_base}/search/movie",headers=headers,params=params)
    +
    +    if res.status_code == 500:
    +        break
    +    elif res.status_code == 200:
    +        None
    +    else:
    +        print(f"OwO Code {res.status_code}")
    +
    +    for movie in res.json():
    +        movies.append(create_movie_dict(movie))
    +
    +    with engine.connect() as conn:
    +        for movie in movies:
    +            with conn.begin() as trans:
    +                stmt = insert(movies_table).values(
    +                    trakt_id=movie["trakt_id"], title=movie["title"], genres=" ".join(movie["genres"]),
    +                    language=movie["language"], year=movie["year"], released=movie["released"],
    +                    runtime=movie["runtime"], country=movie["country"], overview=movie["overview"],
    +                    rating=movie["rating"], votes=movie["votes"], comment_count=movie["comment_count"],
    +                    tagline=movie["tagline"])
    +                try:
    +                    result = conn.execute(stmt)
    +                    trans.commit()
    +                except IntegrityError:
    +                    trans.rollback()
    +    req_count += 1
    +
    + +

    (Note: I was well within the rate-limit so I did not have to slow down or implement any other measures)

    + +

    Running this script took me approximately 3 hours, and resulted in an SQLite database of 141.5 MB

    + +

    Embeddings!

    + +

    I did not want to put my poor Mac through the estimated 23 hours it would have taken to embed the sentences. I decided to use Google Colab instead.

    + +

    Because of the small size of the database file, I was able to just upload the file.

    + +

    For the encoding model, I decided to use the pretrained paraphrase-multilingual-MiniLM-L12-v2 model for SentenceTransformers, a Python framework for SOTA sentence, text and image embeddings. I wanted to use a multilingual model as I personally consume content in various languages (natively, no dubs or subs) and some of the sources for their information do not translate to English. As of writing this post, I did not include any other database except Trakt.

    + +

    While deciding how I was going to process the embeddings, I came across multiple solutions:

    + +
      +
    • Milvus - An open-source vector database with similar search functionality

    • +
    • FAISS - A library for efficient similarity search

    • +
    • Pinecone - A fully managed vector database with similar search functionality

    • +
    + +

    I did not want to waste time setting up the first two, so I decided to go with Pinecone which offers 1M 768-dim vectors for free with no credit card required (Our embeddings are 384-dim dense).

    + +

    Getting started with Pinecone was as easy as:

    + +
      +
    • Signing up

    • +
    • Specifying the index name and vector dimensions along with the similarity search metric (Cosine Similarity for our use case)

    • +
    • Getting the API key

    • +
    • Installing the Python module (pinecone-client)

    • +
    + +
    import pandas as pd
    +import pinecone
    +from sentence_transformers import SentenceTransformer
    +from tqdm import tqdm 
    +
    +database_url = "sqlite:///jlm.db"
    +PINECONE_KEY = "not-this-at-all"
    +batch_size = 32
    +
    +pinecone.init(api_key=PINECONE_KEY, environment="us-west1-gcp")
    +index = pinecone.Index("movies")
    +
    +model = SentenceTransformer("paraphrase-multilingual-MiniLM-L12-v2", device="cuda")
    +engine, Session = init_db_stuff(database_url)
    +
    +df = pd.read_sql("Select * from movies", engine)
    +df["combined_text"] = df["title"] + ": " + df["overview"].fillna('') + " -  " + df["tagline"].fillna('') + " Genres:-  " + df["genres"].fillna('')
    +
    +# Creating the embedding and inserting it into the database
    +for x in tqdm(range(0,len(df),batch_size)):
    +    to_send = []
    +    trakt_ids = df["trakt_id"][x:x+batch_size].tolist()
    +    sentences = df["combined_text"][x:x+batch_size].tolist()
    +    embeddings = model.encode(sentences)
    +    for idx, value in enumerate(trakt_ids):
    +        to_send.append(
    +            (
    +                str(value), embeddings[idx].tolist()
    +            ))
    +    index.upsert(to_send)
    +
    + +

    That's it!

    + +

    Interacting with Vectors

    + +

    We use the trakt_id for the movie as the ID for the vectors and upsert it into the index.

    + +

    To find similar items, we will first have to map the name of the movie to its trakt_id, get the embeddings we have for that id and then perform a similarity search. It is possible that this additional step of mapping could be avoided by storing information as metadata in the index.

    + +
    def get_trakt_id(df, title: str):
    +  rec = df[df["title"].str.lower()==movie_name.lower()]
    +  if len(rec.trakt_id.values.tolist()) > 1:
    +    print(f"multiple values found... {len(rec.trakt_id.values)}")
    +    for x in range(len(rec)):
    +      print(f"[{x}] {rec['title'].tolist()[x]} ({rec['year'].tolist()[x]}) - {rec['overview'].tolist()}")
    +      print("===")
    +      z = int(input("Choose No: "))
    +      return rec.trakt_id.values[z]
    +  return rec.trakt_id.values[0]
    +
    +def get_vector_value(trakt_id: int):
    +  fetch_response = index.fetch(ids=[str(trakt_id)])
    +  return fetch_response["vectors"][str(trakt_id)]["values"]
    +
    +def query_vectors(vector: list, top_k: int = 20, include_values: bool = False, include_metada: bool = True):
    +  query_response = index.query(
    +      queries=[
    +          (vector),
    +      ],
    +      top_k=top_k,
    +      include_values=include_values,
    +      include_metadata=include_metada
    +  )
    +  return query_response
    +
    +def query2ids(query_response):
    +  trakt_ids = []
    +  for match in query_response["results"][0]["matches"]:
    +    trakt_ids.append(int(match["id"]))
    +  return trakt_ids
    +
    +def get_deets_by_trakt_id(df, trakt_id: int):
    +  df = df[df["trakt_id"]==trakt_id]
    +  return {
    +      "title": df.title.values[0],
    +      "overview": df.overview.values[0],
    +      "runtime": df.runtime.values[0],
    +      "year": df.year.values[0]
    +  }
    +
    + +

    Testing it Out

    + +
    movie_name = "Now You See Me"
    +
    +movie_trakt_id = get_trakt_id(df, movie_name)
    +print(movie_trakt_id)
    +movie_vector = get_vector_value(movie_trakt_id)
    +movie_queries = query_vectors(movie_vector)
    +movie_ids = query2ids(movie_queries)
    +print(movie_ids)
    +
    +for trakt_id in movie_ids:
    +  deets = get_deets_by_trakt_id(df, trakt_id)
    +  print(f"{deets['title']} ({deets['year']}): {deets['overview']}")
    +
    + +

    Output:

    + +
    [55786, 18374, 299592, 662622, 6054, 227458, 139687, 303950, 70000, 129307, 70823, 5766, 23950, 137696, 655723, 32842, 413269, 145994, 197990, 373832]
    +Now You See Me (2013): An FBI agent and an Interpol detective track a team of illusionists who pull off bank heists during their performances and reward their audiences with the money.
    +Trapped (1949): U.S. Treasury Department agents go after a ring of counterfeiters.
    +Brute Sanity (2018): An FBI-trained neuropsychologist teams up with a thief to find a reality-altering device while her insane ex-boss unleashes bizarre traps to stop her.
    +The Chase (2017): Some FBI agents hunt down a criminal
    +Surveillance (2008): An FBI agent tracks a serial killer with the help of three of his would-be victims - all of whom have wildly different stories to tell.
    +Marauders (2016): An untraceable group of elite bank robbers is chased by a suicidal FBI agent who uncovers a deeper purpose behind the robbery-homicides.
    +Miracles for Sale (1939): A maker of illusions for magicians protects an ingenue likely to be murdered.
    +Deceptors (2005): A Ghostbusters knock-off where a group of con-artists create bogus monsters to scare up some cash. They run for their lives when real spooks attack.
    +The Outfit (1993): A renegade FBI agent sparks an explosive mob war between gangster crime lords Legs Diamond and Dutch Schultz.
    +Bank Alarm (1937): A federal agent learns the gangsters he's been investigating have kidnapped his sister.
    +The Courier (2012): A shady FBI agent recruits a courier to deliver a mysterious package to a vengeful master criminal who has recently resurfaced with a diabolical plan.
    +After the Sunset (2004): An FBI agent is suspicious of two master thieves, quietly enjoying their retirement near what may - or may not - be the biggest score of their careers.
    +Down Three Dark Streets (1954): An FBI Agent takes on the three unrelated cases of a dead agent to track down his killer.
    +The Executioner (1970): A British intelligence agent must track down a fellow spy suspected of being a double agent.
    +Ace of Cactus Range (1924): A Secret Service agent goes undercover to unmask the leader of a gang of diamond thieves.
    +Firepower (1979): A mercenary is hired by the FBI to track down a powerful recluse criminal, a woman is also trying to track him down for her own personal vendetta.
    +Heroes & Villains (2018): an FBI agent chases a thug to great tunes
    +Federal Fugitives (1941): A government agent goes undercover in order to apprehend a saboteur who caused a plane crash.
    +Hell on Earth (2012): An FBI Agent on the trail of a group of drug traffickers learns that their corruption runs deeper than she ever imagined, and finds herself in a supernatural - and deadly - situation.
    +Spies (2015): A secret agent must perform a heist without time on his side
    +
    + +

    For now, I am happy with the recommendations.

    + +

    Simple UI

    + +

    The code for the flask app can be found on GitHub: navanchauhan/FlixRec or on my Gitea instance

    + +

    I quickly whipped up a simple Flask App to deal with problems of multiple movies sharing the title, and typos in the search query.

    + +

    Home Page

    + +

    Home Page

    + +

    Handling Multiple Movies with Same Title

    + +

    Multiple Movies with Same Title

    + +

    Results Page

    + +

    Results Page

    + +

    Includes additional filter options

    + +

    Advance Filtering Options

    + +

    Test it out at https://flixrec.navan.dev

    + +

    Current Limittations

    + +
      +
    • Does not work well with popular franchises
    • +
    • No Genre Filter
    • +
    + +

    Future Addons

    + +
      +
    • Include Cast Data +
        +
      • e.g. If it sees a movie with Tom Hanks and Meg Ryan, then it will boost similar movies including them
      • +
      • e.g. If it sees the movie has been directed my McG, then it will boost similar movies directed by them
      • +
    • +
    • REST API
    • +
    • TV Shows
    • +
    • Multilingual database
    • +
    • Filter based on popularity: The data already exists in the indexed database
    • +
    + +
    + + + + + + \ No newline at end of file diff --git a/docs/posts/index.html b/docs/posts/index.html index bb704f8..d1e3bf4 100644 --- a/docs/posts/index.html +++ b/docs/posts/index.html @@ -48,6 +48,23 @@
      +
    • Building a Simple Similar Movies Recommender System
    • +
        +
      • Building a Content Based Similar Movies Recommender System
      • +
      • Published On: 2022-05-21 17:56
      • +
      • Tags: + + Python, + + Transformers, + + Movies, + + Recommender-System, + +
      + +
    • Making a Crude ML Powered Chatbot in Swift using CoreML
      • Writing a simple Machine-Learning powered Chatbot (or, daresay virtual personal assistant ) in Swift using CoreML.
      • -- cgit v1.2.3 From d96373570c7110e0b9e872b494a79c855b18b686 Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Sun, 22 May 2022 12:03:37 -0600 Subject: added new post movie recommender --- docs/assets/flixrec/filter.png | Bin 0 -> 242231 bytes docs/assets/flixrec/home.png | Bin 0 -> 160255 bytes docs/assets/flixrec/multiple.png | Bin 0 -> 251294 bytes docs/assets/flixrec/results.png | Bin 0 -> 280362 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/assets/flixrec/filter.png create mode 100644 docs/assets/flixrec/home.png create mode 100644 docs/assets/flixrec/multiple.png create mode 100644 docs/assets/flixrec/results.png diff --git a/docs/assets/flixrec/filter.png b/docs/assets/flixrec/filter.png new file mode 100644 index 0000000..c1e4c52 Binary files /dev/null and b/docs/assets/flixrec/filter.png differ diff --git a/docs/assets/flixrec/home.png b/docs/assets/flixrec/home.png new file mode 100644 index 0000000..2d6fb51 Binary files /dev/null and b/docs/assets/flixrec/home.png differ diff --git a/docs/assets/flixrec/multiple.png b/docs/assets/flixrec/multiple.png new file mode 100644 index 0000000..f35d342 Binary files /dev/null and b/docs/assets/flixrec/multiple.png differ diff --git a/docs/assets/flixrec/results.png b/docs/assets/flixrec/results.png new file mode 100644 index 0000000..a239ba4 Binary files /dev/null and b/docs/assets/flixrec/results.png differ -- cgit v1.2.3 From 1ca3a0abf3b1dad33ce5d5859253220e8b2205d1 Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Sun, 22 May 2022 12:13:58 -0600 Subject: change tags --- Content/posts/2022-05-21-Similar-Movies-Recommender.md | 2 +- docs/feed.rss | 4 ++-- docs/index.html | 4 +--- docs/posts/2022-05-21-Similar-Movies-Recommender.html | 5 +++++ docs/posts/index.html | 4 +--- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Content/posts/2022-05-21-Similar-Movies-Recommender.md b/Content/posts/2022-05-21-Similar-Movies-Recommender.md index fbc9fdb..e17cf15 100644 --- a/Content/posts/2022-05-21-Similar-Movies-Recommender.md +++ b/Content/posts/2022-05-21-Similar-Movies-Recommender.md @@ -1,7 +1,7 @@ --- date: 2022-05-21 17:56 description: Building a Content Based Similar Movies Recommender System -tags: Python, Transformers, Movies, Recommender-System +tags: Python, Transformers, Recommendation-System --- # Building a Simple Similar Movies Recommender System diff --git a/docs/feed.rss b/docs/feed.rss index 3f65a70..4ea732c 100644 --- a/docs/feed.rss +++ b/docs/feed.rss @@ -4,8 +4,8 @@ Navan's Archive Rare Tips, Tricks and Posts https://web.navan.dev/en - Sun, 22 May 2022 11:59:10 -0000 - Sun, 22 May 2022 11:59:10 -0000 + Sun, 22 May 2022 12:13:40 -0000 + Sun, 22 May 2022 12:13:40 -0000 250 diff --git a/docs/index.html b/docs/index.html index e2ccc9f..5d505c1 100644 --- a/docs/index.html +++ b/docs/index.html @@ -57,9 +57,7 @@ Transformers, - Movies, - - Recommender-System + Recommendation-System
      diff --git a/docs/posts/2022-05-21-Similar-Movies-Recommender.html b/docs/posts/2022-05-21-Similar-Movies-Recommender.html index 42b887a..1b105b9 100644 --- a/docs/posts/2022-05-21-Similar-Movies-Recommender.html +++ b/docs/posts/2022-05-21-Similar-Movies-Recommender.html @@ -25,6 +25,8 @@ + + @@ -429,6 +431,9 @@ Spies (2015): A secret agent must perform a heist without time on his side
    • Filter based on popularity: The data already exists in the indexed database
    +
    + + diff --git a/docs/posts/index.html b/docs/posts/index.html index 824554c..fea5b41 100644 --- a/docs/posts/index.html +++ b/docs/posts/index.html @@ -60,9 +60,7 @@ Transformers, - Movies, - - Recommender-System, + Recommendation-System, -- cgit v1.2.3 From 27dc62cf3bd9686f30d66071701b3d2558874090 Mon Sep 17 00:00:00 2001 From: navanchauhan Date: Sun, 22 May 2022 12:18:33 -0600 Subject: updated title --- Content/posts/2022-05-21-Similar-Movies-Recommender.md | 4 ++-- docs/feed.rss | 10 +++++----- docs/index.html | 4 ++-- docs/posts/2022-05-21-Similar-Movies-Recommender.html | 16 ++++++++-------- docs/posts/index.html | 4 ++-- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Content/posts/2022-05-21-Similar-Movies-Recommender.md b/Content/posts/2022-05-21-Similar-Movies-Recommender.md index e17cf15..b889002 100644 --- a/Content/posts/2022-05-21-Similar-Movies-Recommender.md +++ b/Content/posts/2022-05-21-Similar-Movies-Recommender.md @@ -1,10 +1,10 @@ --- date: 2022-05-21 17:56 -description: Building a Content Based Similar Movies Recommender System +description: Building a Content Based Similar Movies Recommendatiom System tags: Python, Transformers, Recommendation-System --- -# Building a Simple Similar Movies Recommender System +# Building a Similar Movies Recommendation System ## Why? diff --git a/docs/feed.rss b/docs/feed.rss index 4ea732c..11e6861 100644 --- a/docs/feed.rss +++ b/docs/feed.rss @@ -4,8 +4,8 @@ Navan's Archive Rare Tips, Tricks and Posts https://web.navan.dev/en - Sun, 22 May 2022 12:13:40 -0000 - Sun, 22 May 2022 12:13:40 -0000 + Sun, 22 May 2022 12:18:20 -0000 + Sun, 22 May 2022 12:18:20 -0000 250 @@ -570,14 +570,14 @@ export BABEL_LIBDIR="/usr/lib/openbabel/3.1.0" https://web.navan.dev/posts/2022-05-21-Similar-Movies-Recommender.html - Building a Simple Similar Movies Recommender System + Building a Similar Movies Recommendation System - Building a Content Based Similar Movies Recommender System + Building a Content Based Similar Movies Recommendatiom System https://web.navan.dev/posts/2022-05-21-Similar-Movies-Recommender.html Sat, 21 May 2022 17:56:00 -0000 - Building a Simple Similar Movies Recommender System + Building a Similar Movies Recommendation System

    Why?

    diff --git a/docs/index.html b/docs/index.html index 5d505c1..f244b6d 100644 --- a/docs/index.html +++ b/docs/index.html @@ -47,9 +47,9 @@
      -
    • Building a Simple Similar Movies Recommender System
    • +
    • Building a Similar Movies Recommendation System
      • -
      • Building a Content Based Similar Movies Recommender System
      • +
      • Building a Content Based Similar Movies Recommendatiom System
      • Published On: 2022-05-21 17:56
      • Tags: diff --git a/docs/posts/2022-05-21-Similar-Movies-Recommender.html b/docs/posts/2022-05-21-Similar-Movies-Recommender.html index 1b105b9..2c0b488 100644 --- a/docs/posts/2022-05-21-Similar-Movies-Recommender.html +++ b/docs/posts/2022-05-21-Similar-Movies-Recommender.html @@ -6,17 +6,17 @@ - Hey - Post - Building a Simple Similar Movies Recommender System + Hey - Post - Building a Similar Movies Recommendation System - - - - - - + + + + + + @@ -41,7 +41,7 @@
        -

        Building a Simple Similar Movies Recommender System

        +

        Building a Similar Movies Recommendation System

        Why?

        diff --git a/docs/posts/index.html b/docs/posts/index.html index fea5b41..43a9ee4 100644 --- a/docs/posts/index.html +++ b/docs/posts/index.html @@ -50,9 +50,9 @@