From c6dd4f2624af5f9a900ea8f004c5f412abb78b6f Mon Sep 17 00:00:00 2001 From: DidierRLopes Date: Mon, 18 Dec 2023 01:08:45 +0000 Subject: [PATCH] deploy: 4c3c390f3b81ff0288f88670656ba9796cfc8ae9 --- 404.html | 8 +++---- 404/index.html | 8 +++---- ...ed314.9f4c7118.js => 00aed314.19144518.js} | 2 +- assets/js/00dbd4fc.f625532b.js | 1 + ...affc9.fb2f0344.js => 035affc9.4f282b7b.js} | 2 +- ...b490a.1b2868f6.js => 13cb490a.d26a67db.js} | 2 +- assets/js/2a8c53bc.5a5d17c6.js | 1 - assets/js/2a8c53bc.c6cf5e20.js | 1 + ...0d905.6777a5ea.js => 2d40d905.75cbe9a6.js} | 2 +- ...029f4.fef347e6.js => 501029f4.8edc5b37.js} | 2 +- assets/js/56c42734.363d0541.js | 1 + assets/js/581493b4.83ed44ac.js | 1 + assets/js/60ca72a5.73385a70.js | 1 + assets/js/6502c807.7c25183e.js | 1 + ...e38e3.a90319ec.js => 6cbe38e3.95e8a5e8.js} | 2 +- ...a35c9.5a6df86b.js => 729a35c9.0c807030.js} | 2 +- assets/js/814f3328.466237b9.js | 1 - assets/js/814f3328.5a541b5b.js | 1 + assets/js/967ead12.6fbf45ca.js | 1 + assets/js/a7023ddc.4692bd01.js | 1 - assets/js/a7023ddc.76509c72.js | 1 + ...c6d72.f0bd6c62.js => ab4c6d72.2cac11bf.js} | 2 +- ...675dd.64e30abc.js => b2b675dd.82f819a9.js} | 2 +- assets/js/b2f554cd.a31f6f52.js | 1 + assets/js/b2f554cd.d62b68ca.js | 1 - assets/js/bcd3bfb0.08ac9183.js | 1 + assets/js/c6112feb.146723e6.js | 1 + assets/js/f06a1dfa.9a5c1a4b.js | 1 + ...fe326.e1825c19.js => f32fe326.d29bef46.js} | 2 +- assets/js/f4230d7a.17522c15.js | 1 + assets/js/main.d3dca393.js | 2 ++ ...CENSE.txt => main.d3dca393.js.LICENSE.txt} | 0 assets/js/main.d51706af.js | 2 -- assets/js/runtime~main.a815e6cd.js | 1 - assets/js/runtime~main.fcc9518c.js | 1 + .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- blog/archive/index.html | 10 ++++----- blog/atom.xml | 18 ++++++++++++++- blog/become-an-openbb-champion/index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- blog/customizable-meme-filter/index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- blog/fully-free-financial-chatbot/index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../gamestonk-terminal-ux-features/index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- blog/household-bills-program/index.html | 10 ++++----- .../index.html | 10 ++++----- blog/how-i-became-ceo-of-openbb/index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- blog/index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- blog/minion-recipes-program/index.html | 10 ++++----- blog/momentum-football-bets/index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- blog/neistpoint-project/index.html | 10 ++++----- blog/openbb-2-year-anniversary/index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- blog/ranking-99-mind-f-ck-movies/index.html | 10 ++++----- blog/remote-flexible-work-salary/index.html | 10 ++++----- .../index.html | 10 ++++----- blog/rss.xml | 18 ++++++++++++++- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- blog/tags/a-players/index.html | 10 ++++----- blog/tags/academia/index.html | 10 ++++----- blog/tags/achievements/index.html | 10 ++++----- blog/tags/agents/index.html | 12 +++++----- blog/tags/ai/index.html | 12 +++++----- blog/tags/airtable/index.html | 10 ++++----- blog/tags/algorithm/index.html | 10 ++++----- blog/tags/anniversary/index.html | 10 ++++----- blog/tags/ap-is/index.html | 10 ++++----- blog/tags/api-key-management/index.html | 10 ++++----- blog/tags/api/index.html | 10 ++++----- blog/tags/automation/index.html | 10 ++++----- blog/tags/bcg-matrix/index.html | 10 ++++----- blog/tags/beautiful-soup/index.html | 10 ++++----- blog/tags/betting/index.html | 10 ++++----- blog/tags/blockchain/index.html | 10 ++++----- blog/tags/bot/index.html | 10 ++++----- blog/tags/brand-awareness/index.html | 10 ++++----- blog/tags/c/index.html | 10 ++++----- blog/tags/card-memorisation/index.html | 10 ++++----- blog/tags/career-advice/index.html | 10 ++++----- blog/tags/career/index.html | 10 ++++----- blog/tags/carousel/index.html | 10 ++++----- blog/tags/chat-gpt/index.html | 10 ++++----- blog/tags/chatbots/index.html | 10 ++++----- blog/tags/clothing-brand/index.html | 10 ++++----- blog/tags/clustering/index.html | 10 ++++----- blog/tags/community-building/index.html | 10 ++++----- blog/tags/community/index.html | 10 ++++----- blog/tags/competitive-advantage/index.html | 10 ++++----- blog/tags/content-creation/index.html | 10 ++++----- blog/tags/core/index.html | 10 ++++----- blog/tags/cross-validation/index.html | 10 ++++----- blog/tags/crypto/index.html | 10 ++++----- blog/tags/cv/index.html | 10 ++++----- blog/tags/darkpool/index.html | 10 ++++----- blog/tags/data-access/index.html | 10 ++++----- blog/tags/data-analysis/index.html | 10 ++++----- blog/tags/data-customization/index.html | 10 ++++----- blog/tags/data-licensing/index.html | 10 ++++----- blog/tags/data-science/index.html | 10 ++++----- blog/tags/decentralization/index.html | 10 ++++----- blog/tags/deep-learning/index.html | 10 ++++----- blog/tags/developer/index.html | 10 ++++----- blog/tags/discord/index.html | 10 ++++----- blog/tags/docker/index.html | 10 ++++----- blog/tags/documentation/index.html | 10 ++++----- blog/tags/due-diligence/index.html | 10 ++++----- blog/tags/economy/index.html | 10 ++++----- blog/tags/education/index.html | 10 ++++----- blog/tags/efficiency/index.html | 10 ++++----- blog/tags/employee-compensation/index.html | 10 ++++----- blog/tags/employee-engagement/index.html | 10 ++++----- blog/tags/equity-top-ups/index.html | 10 ++++----- blog/tags/equity/index.html | 10 ++++----- blog/tags/extensions/index.html | 10 ++++----- blog/tags/face-recognition/index.html | 10 ++++----- blog/tags/feedback/index.html | 10 ++++----- blog/tags/finance-database/index.html | 10 ++++----- blog/tags/finance/index.html | 12 +++++----- blog/tags/financial-chatbot/index.html | 10 ++++----- blog/tags/financial-data/index.html | 10 ++++----- blog/tags/financial-world/index.html | 10 ++++----- blog/tags/flexible-hours/index.html | 10 ++++----- blog/tags/football/index.html | 10 ++++----- blog/tags/founder/index.html | 10 ++++----- blog/tags/free/index.html | 10 ++++----- blog/tags/future/index.html | 10 ++++----- blog/tags/gamestonk-terminal/index.html | 10 ++++----- blog/tags/ge-mc-kinsey-matrix/index.html | 10 ++++----- blog/tags/git-hub/index.html | 10 ++++----- blog/tags/giveaways/index.html | 10 ++++----- blog/tags/gps/index.html | 10 ++++----- blog/tags/growth/index.html | 10 ++++----- blog/tags/gui/index.html | 10 ++++----- blog/tags/hard-work/index.html | 10 ++++----- blog/tags/hiring/index.html | 10 ++++----- blog/tags/hugo-website/index.html | 10 ++++----- blog/tags/hybrid-work/index.html | 10 ++++----- blog/tags/i-os/index.html | 10 ++++----- blog/tags/icmla/index.html | 10 ++++----- blog/tags/im-db-py/index.html | 10 ++++----- blog/tags/image-processing/index.html | 10 ++++----- blog/tags/index.html | 10 ++++----- blog/tags/industry-analysis/index.html | 10 ++++----- blog/tags/infrastructure/index.html | 10 ++++----- blog/tags/insights/index.html | 10 ++++----- blog/tags/interactive-charts/index.html | 10 ++++----- blog/tags/interactive-tables/index.html | 10 ++++----- blog/tags/investment-research/index.html | 10 ++++----- blog/tags/investment/index.html | 10 ++++----- blog/tags/java/index.html | 10 ++++----- blog/tags/job-change/index.html | 10 ++++----- blog/tags/job-hunting/index.html | 10 ++++----- blog/tags/jupyter-lab/index.html | 10 ++++----- blog/tags/k-means/index.html | 10 ++++----- blog/tags/langchain/index.html | 22 +++++++++++++++++++ blog/tags/learning/index.html | 10 ++++----- blog/tags/linked-in/index.html | 10 ++++----- blog/tags/ll-ms/index.html | 10 ++++----- blog/tags/llamaindex/index.html | 22 +++++++++++++++++++ blog/tags/london/index.html | 10 ++++----- blog/tags/machine-learning/index.html | 10 ++++----- blog/tags/management/index.html | 10 ++++----- blog/tags/market-attractiveness/index.html | 10 ++++----- blog/tags/marketing/index.html | 10 ++++----- blog/tags/meme-bot/index.html | 10 ++++----- blog/tags/meme-filter/index.html | 10 ++++----- blog/tags/memory-palace/index.html | 10 ++++----- blog/tags/memory-training/index.html | 10 ++++----- blog/tags/metrics/index.html | 10 ++++----- blog/tags/mindsdb/index.html | 22 +++++++++++++++++++ blog/tags/ml/index.html | 10 ++++----- blog/tags/momentum/index.html | 10 ++++----- blog/tags/monetization/index.html | 10 ++++----- blog/tags/movies/index.html | 10 ++++----- blog/tags/neist-point/index.html | 10 ++++----- blog/tags/neural-networks/index.html | 10 ++++----- blog/tags/nft/index.html | 10 ++++----- blog/tags/nixtla/index.html | 22 +++++++++++++++++++ blog/tags/nurvv-run/index.html | 10 ++++----- blog/tags/office-work/index.html | 10 ++++----- blog/tags/open-ai/index.html | 10 ++++----- blog/tags/open-bb-bot/index.html | 10 ++++----- blog/tags/open-bb-champion/index.html | 10 ++++----- blog/tags/open-bb-hub/index.html | 10 ++++----- blog/tags/open-bb-sdk/index.html | 10 ++++----- blog/tags/open-bb-terminal-2-0/index.html | 10 ++++----- blog/tags/open-bb-terminal/index.html | 10 ++++----- blog/tags/open-bb/index.html | 10 ++++----- blog/tags/open-source/index.html | 10 ++++----- blog/tags/open-startup/index.html | 10 ++++----- blog/tags/openbb/index.html | 12 +++++----- blog/tags/options-fam-bot/index.html | 10 ++++----- blog/tags/options/index.html | 10 ++++----- blog/tags/package/index.html | 10 ++++----- blog/tags/pao-system/index.html | 10 ++++----- blog/tags/personalization/index.html | 10 ++++----- blog/tags/ph-d-thesis/index.html | 10 ++++----- blog/tags/platform/index.html | 10 ++++----- blog/tags/product-documentation/index.html | 10 ++++----- blog/tags/product/index.html | 10 ++++----- blog/tags/productivity/index.html | 10 ++++----- blog/tags/programming/index.html | 10 ++++----- blog/tags/project-management/index.html | 10 ++++----- blog/tags/publishing/index.html | 10 ++++----- blog/tags/pypi/index.html | 10 ++++----- blog/tags/python/index.html | 10 ++++----- blog/tags/recipes/index.html | 10 ++++----- blog/tags/reddit/index.html | 10 ++++----- blog/tags/relocation/index.html | 10 ++++----- blog/tags/remote-work/index.html | 10 ++++----- blog/tags/research/index.html | 10 ++++----- blog/tags/roadmap/index.html | 10 ++++----- blog/tags/routines/index.html | 10 ++++----- blog/tags/san-francisco/index.html | 10 ++++----- blog/tags/script-management/index.html | 10 ++++----- blog/tags/scriptable/index.html | 10 ++++----- blog/tags/sdk/index.html | 10 ++++----- blog/tags/sector-analysis/index.html | 10 ++++----- blog/tags/seed-stage/index.html | 10 ++++----- blog/tags/self-improvement/index.html | 10 ++++----- blog/tags/self-learning/index.html | 10 ++++----- blog/tags/sensor-fusion-engineer/index.html | 10 ++++----- blog/tags/side-project/index.html | 10 ++++----- blog/tags/silicon-valley/index.html | 10 ++++----- blog/tags/skills/index.html | 10 ++++----- blog/tags/slack-bot/index.html | 10 ++++----- blog/tags/slack/index.html | 10 ++++----- blog/tags/smart-contracts/index.html | 10 ++++----- blog/tags/software-development/index.html | 10 ++++----- blog/tags/software-engineering/index.html | 10 ++++----- blog/tags/sorting-algorithm/index.html | 10 ++++----- blog/tags/startup-team/index.html | 10 ++++----- blog/tags/startup/index.html | 10 ++++----- blog/tags/startups/index.html | 10 ++++----- blog/tags/stock-management/index.html | 10 ++++----- blog/tags/stock-market/index.html | 10 ++++----- blog/tags/stocks/index.html | 10 ++++----- blog/tags/success/index.html | 10 ++++----- blog/tags/sustainability/index.html | 10 ++++----- blog/tags/sweepstake/index.html | 10 ++++----- blog/tags/target-market-analysis/index.html | 10 ++++----- blog/tags/tattoo/index.html | 10 ++++----- blog/tags/team-building/index.html | 10 ++++----- blog/tags/team-happiness/index.html | 10 ++++----- blog/tags/team-survey/index.html | 10 ++++----- blog/tags/teamwork/index.html | 10 ++++----- blog/tags/tech-startups/index.html | 10 ++++----- blog/tags/telegram/index.html | 10 ++++----- blog/tags/terminal/index.html | 10 ++++----- blog/tags/thrillers/index.html | 10 ++++----- blog/tags/time-series-forecasting/index.html | 10 ++++----- blog/tags/time-series/index.html | 10 ++++----- blog/tags/trading/index.html | 10 ++++----- blog/tags/transparency/index.html | 10 ++++----- blog/tags/travel/index.html | 10 ++++----- blog/tags/tweepy/index.html | 10 ++++----- blog/tags/twitter-api/index.html | 10 ++++----- blog/tags/twitter/index.html | 10 ++++----- blog/tags/ux-ui/index.html | 10 ++++----- blog/tags/visa-process/index.html | 10 ++++----- blog/tags/web-3/index.html | 10 ++++----- blog/tags/web-scraping/index.html | 10 ++++----- blog/tags/work-culture/index.html | 10 ++++----- blog/tags/work-life-balance/index.html | 10 ++++----- blog/tags/world-cup-2022/index.html | 10 ++++----- blog/tags/writing/index.html | 10 ++++----- blog/tags/yfinance-api/index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- blog/the-new-finai-tech-stack/index.html | 22 +++++++++++++++++++ .../index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- blog/web3-symbols-and-community/index.html | 10 ++++----- .../index.html | 10 ++++----- .../index.html | 10 ++++----- blog/work-life-balance-is-bullsh-t/index.html | 10 ++++----- .../index.html | 10 ++++----- books/already-read/index.html | 10 ++++----- books/to-read/index.html | 10 ++++----- index.html | 8 +++---- markdown-page/index.html | 8 +++---- media/news-mentions/index.html | 8 +++---- media/podcasts/index.html | 8 +++---- media/videos/interviews/index.html | 8 +++---- media/videos/on-stage/index.html | 8 +++---- media/videos/openbb-champions/index.html | 8 +++---- media/videos/product-videos/index.html | 8 +++---- .../videos/webinars-presentations/index.html | 8 +++---- projects/index.html | 8 +++---- resume/articles/index.html | 8 +++---- resume/courses/index.html | 8 +++---- resume/education/index.html | 8 +++---- resume/experience/index.html | 8 +++---- sitemap.xml | 2 +- 330 files changed, 1605 insertions(+), 1453 deletions(-) rename assets/js/{00aed314.9f4c7118.js => 00aed314.19144518.js} (88%) create mode 100644 assets/js/00dbd4fc.f625532b.js rename assets/js/{035affc9.fb2f0344.js => 035affc9.4f282b7b.js} (59%) rename assets/js/{13cb490a.1b2868f6.js => 13cb490a.d26a67db.js} (59%) delete mode 100644 assets/js/2a8c53bc.5a5d17c6.js create mode 100644 assets/js/2a8c53bc.c6cf5e20.js rename assets/js/{2d40d905.6777a5ea.js => 2d40d905.75cbe9a6.js} (80%) rename assets/js/{501029f4.fef347e6.js => 501029f4.8edc5b37.js} (59%) create mode 100644 assets/js/56c42734.363d0541.js create mode 100644 assets/js/581493b4.83ed44ac.js create mode 100644 assets/js/60ca72a5.73385a70.js create mode 100644 assets/js/6502c807.7c25183e.js rename assets/js/{6cbe38e3.a90319ec.js => 6cbe38e3.95e8a5e8.js} (59%) rename assets/js/{729a35c9.5a6df86b.js => 729a35c9.0c807030.js} (88%) delete mode 100644 assets/js/814f3328.466237b9.js create mode 100644 assets/js/814f3328.5a541b5b.js create mode 100644 assets/js/967ead12.6fbf45ca.js delete mode 100644 assets/js/a7023ddc.4692bd01.js create mode 100644 assets/js/a7023ddc.76509c72.js rename assets/js/{ab4c6d72.f0bd6c62.js => ab4c6d72.2cac11bf.js} (58%) rename assets/js/{b2b675dd.64e30abc.js => b2b675dd.82f819a9.js} (58%) create mode 100644 assets/js/b2f554cd.a31f6f52.js delete mode 100644 assets/js/b2f554cd.d62b68ca.js create mode 100644 assets/js/bcd3bfb0.08ac9183.js create mode 100644 assets/js/c6112feb.146723e6.js create mode 100644 assets/js/f06a1dfa.9a5c1a4b.js rename assets/js/{f32fe326.e1825c19.js => f32fe326.d29bef46.js} (92%) create mode 100644 assets/js/f4230d7a.17522c15.js create mode 100644 assets/js/main.d3dca393.js rename assets/js/{main.d51706af.js.LICENSE.txt => main.d3dca393.js.LICENSE.txt} (100%) delete mode 100644 assets/js/main.d51706af.js delete mode 100644 assets/js/runtime~main.a815e6cd.js create mode 100644 assets/js/runtime~main.fcc9518c.js create mode 100644 blog/tags/langchain/index.html create mode 100644 blog/tags/llamaindex/index.html create mode 100644 blog/tags/mindsdb/index.html create mode 100644 blog/tags/nixtla/index.html create mode 100644 blog/the-new-finai-tech-stack/index.html diff --git a/404.html b/404.html index 30742ab33e..7b22f36b1f 100644 --- a/404.html +++ b/404.html @@ -10,13 +10,13 @@ - - + +

PAGE NOT FOUND

Sorry about that. In order to make up for it, here's Summer and Morty looking cute.
Morty and Summer - Didi and Meg doggos
- - + + \ No newline at end of file diff --git a/404/index.html b/404/index.html index 9c2b4bc06c..9ea0587a59 100644 --- a/404/index.html +++ b/404/index.html @@ -10,13 +10,13 @@ - - + +

PAGE NOT FOUND

Sorry about that. In order to make up for it, here's Summer and Morty looking cute.
Morty and Summer - Didi and Meg doggos
- - + + \ No newline at end of file diff --git a/assets/js/00aed314.9f4c7118.js b/assets/js/00aed314.19144518.js similarity index 88% rename from assets/js/00aed314.9f4c7118.js rename to assets/js/00aed314.19144518.js index 3b3c7deee9..d28478ca4d 100644 --- a/assets/js/00aed314.9f4c7118.js +++ b/assets/js/00aed314.19144518.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[25626],{79304:e=>{e.exports=JSON.parse('{"label":"openbb","permalink":"/blog/tags/openbb","allTagsPath":"/blog/tags","count":3}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[25626],{79304:e=>{e.exports=JSON.parse('{"label":"openbb","permalink":"/blog/tags/openbb","allTagsPath":"/blog/tags","count":4}')}}]); \ No newline at end of file diff --git a/assets/js/00dbd4fc.f625532b.js b/assets/js/00dbd4fc.f625532b.js new file mode 100644 index 0000000000..27ccf2396e --- /dev/null +++ b/assets/js/00dbd4fc.f625532b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[29079],{79609:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/llamaindex","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"This is where I drop my thoughts in the form of blogposts!","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/035affc9.fb2f0344.js b/assets/js/035affc9.4f282b7b.js similarity index 59% rename from assets/js/035affc9.fb2f0344.js rename to assets/js/035affc9.4f282b7b.js index c35fd7d994..41e05ec58b 100644 --- a/assets/js/035affc9.fb2f0344.js +++ b/assets/js/035affc9.4f282b7b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[62221],{2517:e=>{e.exports=JSON.parse('{"label":"Agents","permalink":"/blog/tags/agents","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[62221],{2517:e=>{e.exports=JSON.parse('{"label":"agents","permalink":"/blog/tags/agents","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/13cb490a.1b2868f6.js b/assets/js/13cb490a.d26a67db.js similarity index 59% rename from assets/js/13cb490a.1b2868f6.js rename to assets/js/13cb490a.d26a67db.js index 9dea006152..f31c550265 100644 --- a/assets/js/13cb490a.1b2868f6.js +++ b/assets/js/13cb490a.d26a67db.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[74788],{27810:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/openbb","page":1,"postsPerPage":3,"totalPages":1,"totalCount":3,"blogDescription":"This is where I drop my thoughts in the form of blogposts!","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[74788],{27810:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/openbb","page":1,"postsPerPage":4,"totalPages":1,"totalCount":4,"blogDescription":"This is where I drop my thoughts in the form of blogposts!","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2a8c53bc.5a5d17c6.js b/assets/js/2a8c53bc.5a5d17c6.js deleted file mode 100644 index ab55fc6d95..0000000000 --- a/assets/js/2a8c53bc.5a5d17c6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[28047],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=o.createContext({}),p=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},d=function(e){var t=p(e.components);return o.createElement(l.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=p(n),m=a,h=c["".concat(l,".").concat(m)]||c[m]||u[m]||i;return n?o.createElement(h,r(r({ref:t},d),{},{components:n})):o.createElement(h,r({ref:t},d))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,r=new Array(i);r[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:a,r[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var o=n(87462),a=(n(67294),n(3905));const i={slug:"goodbye-openbb-sdk-hello-openbb-platform",title:"Goodbye OpenBB SDK. Hello OpenBB Platform",date:new Date("2023-11-29T00:00:00.000Z"),image:"https://github.com/DidierRLopes/my-website/assets/25267873/628d34ee-a2a5-4be7-ae76-4b455bc2f1fd",tags:["openbb","platform","sdk","core","extensions"],description:"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions."},r=void 0,s={permalink:"/blog/goodbye-openbb-sdk-hello-openbb-platform",editUrl:"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-11-29-goodbye-openbb-sdk-hello-openbb-platform.md",source:"@site/blog/2023-11-29-goodbye-openbb-sdk-hello-openbb-platform.md",title:"Goodbye OpenBB SDK. Hello OpenBB Platform",description:"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions.",date:"2023-11-29T00:00:00.000Z",formattedDate:"November 29, 2023",tags:[{label:"openbb",permalink:"/blog/tags/openbb"},{label:"platform",permalink:"/blog/tags/platform"},{label:"sdk",permalink:"/blog/tags/sdk"},{label:"core",permalink:"/blog/tags/core"},{label:"extensions",permalink:"/blog/tags/extensions"}],readingTime:4.08,hasTruncateMarker:!0,authors:[],frontMatter:{slug:"goodbye-openbb-sdk-hello-openbb-platform",title:"Goodbye OpenBB SDK. Hello OpenBB Platform",date:"2023-11-29T00:00:00.000Z",image:"https://github.com/DidierRLopes/my-website/assets/25267873/628d34ee-a2a5-4be7-ae76-4b455bc2f1fd",tags:["openbb","platform","sdk","core","extensions"],description:"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions."},nextItem:{title:"OpenBB Bot - our new addition to the OpenBB open source family",permalink:"/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family"}},l={authorsImageUrls:[]},p=[{value:"OpenBB Core",id:"openbb-core",level:2},{value:"OpenBB Extensions",id:"openbb-extensions",level:2},{value:"Key advantage of new platform V4",id:"key-advantage-of-new-platform-v4",level:2},{value:"Inside OpenBB: A peek into our team emails",id:"inside-openbb-a-peek-into-our-team-emails",level:2}],d={toc:p},c="wrapper";function u(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,o.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",{align:"center"},(0,a.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/628d34ee-a2a5-4be7-ae76-4b455bc2f1fd"})),(0,a.kt)("br",null),(0,a.kt)("p",null,"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions."),(0,a.kt)("p",null,"The open source code is available ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/OpenBB-finance/OpenBBTerminal"},"here"),"."),(0,a.kt)("div",{style:{borderTop:"1px solid #0088CC",margin:"1.5em 0"}}),(0,a.kt)("p",null,"In the ever-evolving landscape of financial data integration and standardization, OpenBB has been revolutionizing the way individuals and organizations handle data from multiple data providers by utilizing our open-source products."),(0,a.kt)("p",null,"We have been talking about the OpenBB Platform v4 over the past few months. This is such a milestone for our team and for the financial world that we are renaming the OpenBB SDK into the OpenBB Platform."),(0,a.kt)("p",null,"The OpenBB Platform consists of the OpenBB Core and OpenBB Extensions."),(0,a.kt)("p",null,"Let\u2019s dive into each of these, individually."),(0,a.kt)("h2",{id:"openbb-core"},"OpenBB Core"),(0,a.kt)("p",null,'The OpenBB Core empowers quants and finance developers to create powerful data solutions, offering unparalleled simplicity, flexibility, and scalability. It follows the principle that "less is more."'),(0,a.kt)("p",null,"The core will consist of two main components:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Data Standardization Infrastructure:")," This ensures that regardless of the type of data processed by the core, users can expect consistent conventions and naming. This facilitates a seamless experience, even when the data comes from completely different data providers.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Data Source Integration:")," Developers will be able to effortlessly connect and integrate various data sources, including databases, APIs, and cloud storage systems."),(0,a.kt)("p",{parentName:"li"},"a) ",(0,a.kt)("strong",{parentName:"p"},"Official partner integrations")," will be available by having access to official endpoints from data vendors. This ensures the integrity of the data and provides a reference for what data is available to the end user. Our affiliate program will detail where commercial agreements are in place with OpenBB."),(0,a.kt)("p",{parentName:"li"},"b) Additionally, ",(0,a.kt)("strong",{parentName:"p"},"community provider integrations")," will be available, allowing the community to contribute their own integrations for specific use cases or share them with others through the open-source codebase."))),(0,a.kt)("h2",{id:"openbb-extensions"},"OpenBB Extensions"),(0,a.kt)("p",null,"OpenBB extensions enhance the capabilities of the OpenBB Core, allowing developers to create custom functionalities and customize the overall Platform according to their specific needs. It is important to note that these extensions can be used as a standalone or integrated with the rest of the openBB ecosystem."),(0,a.kt)("p",null,"These extensions can be classified into two categories:"),(0,a.kt)("ul",null,(0,a.kt)("li",null,(0,a.kt)("strong",null,"Official extensions")," developed and maintained by the OpenBB Team, such as the ML/AI Toolkit, Econometrics, and Reports;"),(0,a.kt)("li",null,(0,a.kt)("strong",null,"Community extensions")," developed by the open-source community. These extensions focus on enabling intelligent data processing and custom workflows that assist users in their investing decision-making process.")),(0,a.kt)("h2",{id:"key-advantage-of-new-platform-v4"},"Key advantage of new platform V4"),(0,a.kt)("p",null,"By combining the strengths of OpenBB Core and OpenBB Extensions, the OpenBB Platform offers unparalleled advantages for developers and organizations:"),(0,a.kt)("ol",null,(0,a.kt)("li",null,(0,a.kt)("strong",null,"Enhanced Flexibility:")," The modular architecture of the Platform allows developers to choose and integrate only the components they need, avoiding unnecessary complexity."),(0,a.kt)("li",null,(0,a.kt)("strong",null,"Scalability:")," The OpenBB Platform seamlessly scales with your data integration requirements, ensuring smooth performance even with large volumes of data."),(0,a.kt)("li",null,(0,a.kt)("strong",null,"Extensibility:")," Developers can create their own extensions and contribute to the OpenBB ecosystem, fostering collaboration and innovation."),(0,a.kt)("li",null,(0,a.kt)("strong",null,"Time and Cost Savings:")," With its intuitive interface and pre-built components, the OpenBB Platform accelerates development cycles, reducing time-to-market and costs associated with custom solutions.")),(0,a.kt)("br",null),(0,a.kt)("p",null,"The reimagined OpenBB SDK into OpenBB Platform (OpenBB Core and OpenBB Extensions), revolutionizes the data integration landscape."),(0,a.kt)("p",null,"By leveraging the power of OpenBB Core for data integration and standardization, and harnessing the capabilities of OpenBB Extensions for customization and advanced functionality, developers can unlock new possibilities and build cutting-edge data solutions."),(0,a.kt)("p",null,"Whether you are working with diverse data sources or performing complex data transformations, the OpenBB Platform empowers you to conquer any data challenge and propel your organization towards data-driven success."),(0,a.kt)("p",null,"We invite users and enthusiasts to explore the OpenBB Platform v4, now available for download and installation from the ",(0,a.kt)("a",{parentName:"p",href:"https://docs.openbb.co/platform/installation"},"OpenBB Hub"),", ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/OpenBB-finance/OpenBBTerminal/tree/develop/openbb_platform"},"Github"),", and ",(0,a.kt)("a",{parentName:"p",href:"https://pypi.org/project/openbb/"},"PyPI"),"."),(0,a.kt)("h2",{id:"inside-openbb-a-peek-into-our-team-emails"},"Inside OpenBB: A peek into our team emails"),(0,a.kt)("p",null,"In order to adhere to one of OpenBB's core values - Transparency - we want you to understand the journey we have undergone and the reason we have dedicated the past 9 months to this endeavor."),(0,a.kt)("p",null,"So, for the first time, we're sharing a confidential email thread that circulated among our entire team. This thread provides insight into our thought process when it comes to handling large projects at OpenBB."),(0,a.kt)("p",{align:"center"},(0,a.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/b95a1bc1-d256-472f-8458-6c56878fee1e"})),(0,a.kt)("p",{align:"center"},(0,a.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/8e54299f-df2e-40d8-9416-a03a7cb6b7b7"})),(0,a.kt)("p",{align:"center"},(0,a.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/e538c600-b717-496e-94e6-1d811b5ebd35"})),(0,a.kt)("p",{align:"center"},(0,a.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/72125cd9-d062-49f1-8496-533756b21fcd"})),(0,a.kt)("p",null,"Over the next few weeks we will keep iterating on our Platform, based on user feedback, so we can keep pushing for a platform that can be adopted by everyone - from professional investors, data scientists, quants, to students."),(0,a.kt)("p",null,"If you rely on financial data to do financial research or build apps, we want to hear from you!"),(0,a.kt)("p",null,"Reach out with feedback to ",(0,a.kt)("a",{parentName:"p",href:"mailto:support@openbb.finance"},"support@openbb.finance")," or join ",(0,a.kt)("a",{parentName:"p",href:"https://discord.com/invite/xPHTuHCmuV"},"our Discord"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2a8c53bc.c6cf5e20.js b/assets/js/2a8c53bc.c6cf5e20.js new file mode 100644 index 0000000000..8c11db5d1c --- /dev/null +++ b/assets/js/2a8c53bc.c6cf5e20.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[28047],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=o.createContext({}),p=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},d=function(e){var t=p(e.components);return o.createElement(l.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=p(n),u=a,h=c["".concat(l,".").concat(u)]||c[u]||m[u]||i;return n?o.createElement(h,r(r({ref:t},d),{},{components:n})):o.createElement(h,r({ref:t},d))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,r=new Array(i);r[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:a,r[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var o=n(87462),a=(n(67294),n(3905));const i={slug:"goodbye-openbb-sdk-hello-openbb-platform",title:"Goodbye OpenBB SDK. Hello OpenBB Platform",date:new Date("2023-11-29T00:00:00.000Z"),image:"https://github.com/DidierRLopes/my-website/assets/25267873/628d34ee-a2a5-4be7-ae76-4b455bc2f1fd",tags:["openbb","platform","sdk","core","extensions"],description:"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions."},r=void 0,s={permalink:"/blog/goodbye-openbb-sdk-hello-openbb-platform",editUrl:"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-11-29-goodbye-openbb-sdk-hello-openbb-platform.md",source:"@site/blog/2023-11-29-goodbye-openbb-sdk-hello-openbb-platform.md",title:"Goodbye OpenBB SDK. Hello OpenBB Platform",description:"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions.",date:"2023-11-29T00:00:00.000Z",formattedDate:"November 29, 2023",tags:[{label:"openbb",permalink:"/blog/tags/openbb"},{label:"platform",permalink:"/blog/tags/platform"},{label:"sdk",permalink:"/blog/tags/sdk"},{label:"core",permalink:"/blog/tags/core"},{label:"extensions",permalink:"/blog/tags/extensions"}],readingTime:4.08,hasTruncateMarker:!0,authors:[],frontMatter:{slug:"goodbye-openbb-sdk-hello-openbb-platform",title:"Goodbye OpenBB SDK. Hello OpenBB Platform",date:"2023-11-29T00:00:00.000Z",image:"https://github.com/DidierRLopes/my-website/assets/25267873/628d34ee-a2a5-4be7-ae76-4b455bc2f1fd",tags:["openbb","platform","sdk","core","extensions"],description:"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions."},prevItem:{title:"The new FinAI Tech Stack",permalink:"/blog/the-new-finai-tech-stack"},nextItem:{title:"OpenBB Bot - our new addition to the OpenBB open source family",permalink:"/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family"}},l={authorsImageUrls:[]},p=[{value:"OpenBB Core",id:"openbb-core",level:2},{value:"OpenBB Extensions",id:"openbb-extensions",level:2},{value:"Key advantage of new platform V4",id:"key-advantage-of-new-platform-v4",level:2},{value:"Inside OpenBB: A peek into our team emails",id:"inside-openbb-a-peek-into-our-team-emails",level:2}],d={toc:p},c="wrapper";function m(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,o.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",{align:"center"},(0,a.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/628d34ee-a2a5-4be7-ae76-4b455bc2f1fd"})),(0,a.kt)("br",null),(0,a.kt)("p",null,"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions."),(0,a.kt)("p",null,"The open source code is available ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/OpenBB-finance/OpenBBTerminal"},"here"),"."),(0,a.kt)("div",{style:{borderTop:"1px solid #0088CC",margin:"1.5em 0"}}),(0,a.kt)("p",null,"In the ever-evolving landscape of financial data integration and standardization, OpenBB has been revolutionizing the way individuals and organizations handle data from multiple data providers by utilizing our open-source products."),(0,a.kt)("p",null,"We have been talking about the OpenBB Platform v4 over the past few months. This is such a milestone for our team and for the financial world that we are renaming the OpenBB SDK into the OpenBB Platform."),(0,a.kt)("p",null,"The OpenBB Platform consists of the OpenBB Core and OpenBB Extensions."),(0,a.kt)("p",null,"Let\u2019s dive into each of these, individually."),(0,a.kt)("h2",{id:"openbb-core"},"OpenBB Core"),(0,a.kt)("p",null,'The OpenBB Core empowers quants and finance developers to create powerful data solutions, offering unparalleled simplicity, flexibility, and scalability. It follows the principle that "less is more."'),(0,a.kt)("p",null,"The core will consist of two main components:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Data Standardization Infrastructure:")," This ensures that regardless of the type of data processed by the core, users can expect consistent conventions and naming. This facilitates a seamless experience, even when the data comes from completely different data providers.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Data Source Integration:")," Developers will be able to effortlessly connect and integrate various data sources, including databases, APIs, and cloud storage systems."),(0,a.kt)("p",{parentName:"li"},"a) ",(0,a.kt)("strong",{parentName:"p"},"Official partner integrations")," will be available by having access to official endpoints from data vendors. This ensures the integrity of the data and provides a reference for what data is available to the end user. Our affiliate program will detail where commercial agreements are in place with OpenBB."),(0,a.kt)("p",{parentName:"li"},"b) Additionally, ",(0,a.kt)("strong",{parentName:"p"},"community provider integrations")," will be available, allowing the community to contribute their own integrations for specific use cases or share them with others through the open-source codebase."))),(0,a.kt)("h2",{id:"openbb-extensions"},"OpenBB Extensions"),(0,a.kt)("p",null,"OpenBB extensions enhance the capabilities of the OpenBB Core, allowing developers to create custom functionalities and customize the overall Platform according to their specific needs. It is important to note that these extensions can be used as a standalone or integrated with the rest of the openBB ecosystem."),(0,a.kt)("p",null,"These extensions can be classified into two categories:"),(0,a.kt)("ul",null,(0,a.kt)("li",null,(0,a.kt)("strong",null,"Official extensions")," developed and maintained by the OpenBB Team, such as the ML/AI Toolkit, Econometrics, and Reports;"),(0,a.kt)("li",null,(0,a.kt)("strong",null,"Community extensions")," developed by the open-source community. These extensions focus on enabling intelligent data processing and custom workflows that assist users in their investing decision-making process.")),(0,a.kt)("h2",{id:"key-advantage-of-new-platform-v4"},"Key advantage of new platform V4"),(0,a.kt)("p",null,"By combining the strengths of OpenBB Core and OpenBB Extensions, the OpenBB Platform offers unparalleled advantages for developers and organizations:"),(0,a.kt)("ol",null,(0,a.kt)("li",null,(0,a.kt)("strong",null,"Enhanced Flexibility:")," The modular architecture of the Platform allows developers to choose and integrate only the components they need, avoiding unnecessary complexity."),(0,a.kt)("li",null,(0,a.kt)("strong",null,"Scalability:")," The OpenBB Platform seamlessly scales with your data integration requirements, ensuring smooth performance even with large volumes of data."),(0,a.kt)("li",null,(0,a.kt)("strong",null,"Extensibility:")," Developers can create their own extensions and contribute to the OpenBB ecosystem, fostering collaboration and innovation."),(0,a.kt)("li",null,(0,a.kt)("strong",null,"Time and Cost Savings:")," With its intuitive interface and pre-built components, the OpenBB Platform accelerates development cycles, reducing time-to-market and costs associated with custom solutions.")),(0,a.kt)("br",null),(0,a.kt)("p",null,"The reimagined OpenBB SDK into OpenBB Platform (OpenBB Core and OpenBB Extensions), revolutionizes the data integration landscape."),(0,a.kt)("p",null,"By leveraging the power of OpenBB Core for data integration and standardization, and harnessing the capabilities of OpenBB Extensions for customization and advanced functionality, developers can unlock new possibilities and build cutting-edge data solutions."),(0,a.kt)("p",null,"Whether you are working with diverse data sources or performing complex data transformations, the OpenBB Platform empowers you to conquer any data challenge and propel your organization towards data-driven success."),(0,a.kt)("p",null,"We invite users and enthusiasts to explore the OpenBB Platform v4, now available for download and installation from the ",(0,a.kt)("a",{parentName:"p",href:"https://docs.openbb.co/platform/installation"},"OpenBB Hub"),", ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/OpenBB-finance/OpenBBTerminal/tree/develop/openbb_platform"},"Github"),", and ",(0,a.kt)("a",{parentName:"p",href:"https://pypi.org/project/openbb/"},"PyPI"),"."),(0,a.kt)("h2",{id:"inside-openbb-a-peek-into-our-team-emails"},"Inside OpenBB: A peek into our team emails"),(0,a.kt)("p",null,"In order to adhere to one of OpenBB's core values - Transparency - we want you to understand the journey we have undergone and the reason we have dedicated the past 9 months to this endeavor."),(0,a.kt)("p",null,"So, for the first time, we're sharing a confidential email thread that circulated among our entire team. This thread provides insight into our thought process when it comes to handling large projects at OpenBB."),(0,a.kt)("p",{align:"center"},(0,a.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/b95a1bc1-d256-472f-8458-6c56878fee1e"})),(0,a.kt)("p",{align:"center"},(0,a.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/8e54299f-df2e-40d8-9416-a03a7cb6b7b7"})),(0,a.kt)("p",{align:"center"},(0,a.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/e538c600-b717-496e-94e6-1d811b5ebd35"})),(0,a.kt)("p",{align:"center"},(0,a.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/72125cd9-d062-49f1-8496-533756b21fcd"})),(0,a.kt)("p",null,"Over the next few weeks we will keep iterating on our Platform, based on user feedback, so we can keep pushing for a platform that can be adopted by everyone - from professional investors, data scientists, quants, to students."),(0,a.kt)("p",null,"If you rely on financial data to do financial research or build apps, we want to hear from you!"),(0,a.kt)("p",null,"Reach out with feedback to ",(0,a.kt)("a",{parentName:"p",href:"mailto:support@openbb.finance"},"support@openbb.finance")," or join ",(0,a.kt)("a",{parentName:"p",href:"https://discord.com/invite/xPHTuHCmuV"},"our Discord"),"."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2d40d905.6777a5ea.js b/assets/js/2d40d905.75cbe9a6.js similarity index 80% rename from assets/js/2d40d905.6777a5ea.js rename to assets/js/2d40d905.75cbe9a6.js index 9cfa80a3db..696bd8eeeb 100644 --- a/assets/js/2d40d905.6777a5ea.js +++ b/assets/js/2d40d905.75cbe9a6.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[96100],{3905:(e,t,n)=>{n.d(t,{Zo:()=>b,kt:()=>f});var o=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=o.createContext({}),s=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},b=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,b=l(e,["components","mdxType","originalType","parentName"]),c=s(n),m=r,f=c["".concat(p,".").concat(m)]||c[m]||d[m]||a;return n?o.createElement(f,i(i({ref:t},b),{},{components:n})):o.createElement(f,i({ref:t},b))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[c]="string"==typeof e?e:r,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var o=n(87462),r=(n(67294),n(3905));const a={slug:"goodbye-openbb-sdk-hello-openbb-platform",title:"Goodbye OpenBB SDK. Hello OpenBB Platform",date:new Date("2023-11-29T00:00:00.000Z"),image:"https://github.com/DidierRLopes/my-website/assets/25267873/628d34ee-a2a5-4be7-ae76-4b455bc2f1fd",tags:["openbb","platform","sdk","core","extensions"],description:"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions."},i=void 0,l={permalink:"/blog/goodbye-openbb-sdk-hello-openbb-platform",editUrl:"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-11-29-goodbye-openbb-sdk-hello-openbb-platform.md",source:"@site/blog/2023-11-29-goodbye-openbb-sdk-hello-openbb-platform.md",title:"Goodbye OpenBB SDK. Hello OpenBB Platform",description:"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions.",date:"2023-11-29T00:00:00.000Z",formattedDate:"November 29, 2023",tags:[{label:"openbb",permalink:"/blog/tags/openbb"},{label:"platform",permalink:"/blog/tags/platform"},{label:"sdk",permalink:"/blog/tags/sdk"},{label:"core",permalink:"/blog/tags/core"},{label:"extensions",permalink:"/blog/tags/extensions"}],readingTime:4.08,hasTruncateMarker:!0,authors:[],frontMatter:{slug:"goodbye-openbb-sdk-hello-openbb-platform",title:"Goodbye OpenBB SDK. Hello OpenBB Platform",date:"2023-11-29T00:00:00.000Z",image:"https://github.com/DidierRLopes/my-website/assets/25267873/628d34ee-a2a5-4be7-ae76-4b455bc2f1fd",tags:["openbb","platform","sdk","core","extensions"],description:"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions."},nextItem:{title:"OpenBB Bot - our new addition to the OpenBB open source family",permalink:"/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family"}},p={authorsImageUrls:[]},s=[],b={toc:s},c="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(c,(0,o.Z)({},b,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/628d34ee-a2a5-4be7-ae76-4b455bc2f1fd"})),(0,r.kt)("br",null),(0,r.kt)("p",null,"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions."),(0,r.kt)("p",null,"The open source code is available ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/OpenBB-finance/OpenBBTerminal"},"here"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[96100],{3905:(e,t,n)=>{n.d(t,{Zo:()=>b,kt:()=>f});var o=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=o.createContext({}),s=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},b=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,b=l(e,["components","mdxType","originalType","parentName"]),c=s(n),m=r,f=c["".concat(p,".").concat(m)]||c[m]||d[m]||a;return n?o.createElement(f,i(i({ref:t},b),{},{components:n})):o.createElement(f,i({ref:t},b))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[c]="string"==typeof e?e:r,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var o=n(87462),r=(n(67294),n(3905));const a={slug:"goodbye-openbb-sdk-hello-openbb-platform",title:"Goodbye OpenBB SDK. Hello OpenBB Platform",date:new Date("2023-11-29T00:00:00.000Z"),image:"https://github.com/DidierRLopes/my-website/assets/25267873/628d34ee-a2a5-4be7-ae76-4b455bc2f1fd",tags:["openbb","platform","sdk","core","extensions"],description:"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions."},i=void 0,l={permalink:"/blog/goodbye-openbb-sdk-hello-openbb-platform",editUrl:"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-11-29-goodbye-openbb-sdk-hello-openbb-platform.md",source:"@site/blog/2023-11-29-goodbye-openbb-sdk-hello-openbb-platform.md",title:"Goodbye OpenBB SDK. Hello OpenBB Platform",description:"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions.",date:"2023-11-29T00:00:00.000Z",formattedDate:"November 29, 2023",tags:[{label:"openbb",permalink:"/blog/tags/openbb"},{label:"platform",permalink:"/blog/tags/platform"},{label:"sdk",permalink:"/blog/tags/sdk"},{label:"core",permalink:"/blog/tags/core"},{label:"extensions",permalink:"/blog/tags/extensions"}],readingTime:4.08,hasTruncateMarker:!0,authors:[],frontMatter:{slug:"goodbye-openbb-sdk-hello-openbb-platform",title:"Goodbye OpenBB SDK. Hello OpenBB Platform",date:"2023-11-29T00:00:00.000Z",image:"https://github.com/DidierRLopes/my-website/assets/25267873/628d34ee-a2a5-4be7-ae76-4b455bc2f1fd",tags:["openbb","platform","sdk","core","extensions"],description:"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions."},prevItem:{title:"The new FinAI Tech Stack",permalink:"/blog/the-new-finai-tech-stack"},nextItem:{title:"OpenBB Bot - our new addition to the OpenBB open source family",permalink:"/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family"}},p={authorsImageUrls:[]},s=[],b={toc:s},c="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(c,(0,o.Z)({},b,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/628d34ee-a2a5-4be7-ae76-4b455bc2f1fd"})),(0,r.kt)("br",null),(0,r.kt)("p",null,"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions."),(0,r.kt)("p",null,"The open source code is available ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/OpenBB-finance/OpenBBTerminal"},"here"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/501029f4.fef347e6.js b/assets/js/501029f4.8edc5b37.js similarity index 59% rename from assets/js/501029f4.fef347e6.js rename to assets/js/501029f4.8edc5b37.js index 7f548d5a05..03f220331d 100644 --- a/assets/js/501029f4.fef347e6.js +++ b/assets/js/501029f4.8edc5b37.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[11789],{24129:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/finance","page":1,"postsPerPage":7,"totalPages":1,"totalCount":7,"blogDescription":"This is where I drop my thoughts in the form of blogposts!","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[11789],{24129:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/finance","page":1,"postsPerPage":8,"totalPages":1,"totalCount":8,"blogDescription":"This is where I drop my thoughts in the form of blogposts!","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/56c42734.363d0541.js b/assets/js/56c42734.363d0541.js new file mode 100644 index 0000000000..6e514f38b0 --- /dev/null +++ b/assets/js/56c42734.363d0541.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[42358],{8882:e=>{e.exports=JSON.parse('{"label":"llamaindex","permalink":"/blog/tags/llamaindex","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/581493b4.83ed44ac.js b/assets/js/581493b4.83ed44ac.js new file mode 100644 index 0000000000..4fdbab3458 --- /dev/null +++ b/assets/js/581493b4.83ed44ac.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[45298],{88959:s=>{s.exports=JSON.parse('{"label":"mindsdb","permalink":"/blog/tags/mindsdb","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/60ca72a5.73385a70.js b/assets/js/60ca72a5.73385a70.js new file mode 100644 index 0000000000..d786f0a7d8 --- /dev/null +++ b/assets/js/60ca72a5.73385a70.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[49863],{65657:e=>{e.exports=JSON.parse('{"label":"nixtla","permalink":"/blog/tags/nixtla","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/6502c807.7c25183e.js b/assets/js/6502c807.7c25183e.js new file mode 100644 index 0000000000..dd531ab060 --- /dev/null +++ b/assets/js/6502c807.7c25183e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[51417],{85766:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/langchain","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"This is where I drop my thoughts in the form of blogposts!","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/6cbe38e3.a90319ec.js b/assets/js/6cbe38e3.95e8a5e8.js similarity index 59% rename from assets/js/6cbe38e3.a90319ec.js rename to assets/js/6cbe38e3.95e8a5e8.js index bfccb443e7..3f26227407 100644 --- a/assets/js/6cbe38e3.a90319ec.js +++ b/assets/js/6cbe38e3.95e8a5e8.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[71350],{31607:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/agents","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"This is where I drop my thoughts in the form of blogposts!","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[71350],{31607:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/agents","page":1,"postsPerPage":2,"totalPages":1,"totalCount":2,"blogDescription":"This is where I drop my thoughts in the form of blogposts!","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/729a35c9.5a6df86b.js b/assets/js/729a35c9.0c807030.js similarity index 88% rename from assets/js/729a35c9.5a6df86b.js rename to assets/js/729a35c9.0c807030.js index ccfcba38c8..40a360b9d3 100644 --- a/assets/js/729a35c9.5a6df86b.js +++ b/assets/js/729a35c9.0c807030.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[31394],{19783:e=>{e.exports=JSON.parse('{"label":"finance","permalink":"/blog/tags/finance","allTagsPath":"/blog/tags","count":7}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[31394],{19783:e=>{e.exports=JSON.parse('{"label":"finance","permalink":"/blog/tags/finance","allTagsPath":"/blog/tags","count":8}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.466237b9.js b/assets/js/814f3328.466237b9.js deleted file mode 100644 index 052a051638..0000000000 --- a/assets/js/814f3328.466237b9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[52535],{45641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Goodbye OpenBB SDK. Hello OpenBB Platform","permalink":"/blog/goodbye-openbb-sdk-hello-openbb-platform"},{"title":"OpenBB Bot - our new addition to the OpenBB open source family","permalink":"/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family"},{"title":"Revolutionizing AI at OpenBB with new leader, Michael Struwig","permalink":"/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig"},{"title":"Writing documentation, as a founder, is underrated.","permalink":"/blog/writing-documentation-as-a-founder-is-underrated"},{"title":"Building the world\u2019s investment research infrastructure","permalink":"/blog/building-the-worlds-investment-research-infrastructure"},{"title":"A $500k bet to build the best platform to do AI using financial data","permalink":"/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data"},{"title":"Work-life balance is bullsh*t","permalink":"/blog/work-life-balance-is-bullsh-t"},{"title":"Target Market Analysis with the help of LLMs","permalink":"/blog/target-market-analysis-with-the-help-of-llms"},{"title":"OpenBB 2 year anniversary","permalink":"/blog/openbb-2-year-anniversary"},{"title":"How to handle equity top-ups at a seed stage startup","permalink":"/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startup"},{"title":"How to handle equity at a seed-stage startup from Silicon Valley","permalink":"/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley"},{"title":"Keep track of your startup metrics using a custom iOS widget","permalink":"/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widget"},{"title":"How to Use OpenAI to Extract Insights from Team Survey","permalink":"/blog/how-to-use-openai-to-extract-insights-from-team-survey"},{"title":"Why the need for an open source investment research platform?","permalink":"/blog/why-the-need-for-an-open-source-investment-research-platform"},{"title":"From Open Source to Open Startup","permalink":"/blog/from-open-source-to-open-startup"},{"title":"Employees are leaving? Be proactive about employee feedback","permalink":"/blog/employees-are-leaving-be-proactive-about-employee-feedback"},{"title":"Hybrid work sucks. It\u2019s worse than remote and office.","permalink":"/blog/hybrid-work-sucks-its-worse-than-remote-and-office"},{"title":"Become an OpenBB Champion","permalink":"/blog/become-an-openbb-champion"},{"title":"Streamline your OpenBB Terminal experience with OpenBB Hub","permalink":"/blog/streamline-your-openbb-terminal-experience-with-openbb-hub"},{"title":"OpenBB Terminal 3.0 - a new interactive way to analyze data","permalink":"/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-data"},{"title":"Leaving London to live in San Francisco","permalink":"/blog/leaving-london-to-live-in-san-francisco"},{"title":"Fully free financial chatbot","permalink":"/blog/fully-free-financial-chatbot"},{"title":"Free investment research ecosystem to consistently beat the market","permalink":"/blog/free-investment-research-ecosystem-to-consistently-beat-the-market"},{"title":"The role of AI and OpenBB in the future of investment research","permalink":"/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-research"},{"title":"How I Used OpenAI API to improve our product documentation","permalink":"/blog/how-i-used-openai-api-to-improve-our-product-documentation"},{"title":"How to get hired by an exciting tech startup in 2023","permalink":"/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023"},{"title":"Financial chat bots are underrated, and here\u2019s why.","permalink":"/blog/financial-chat-bots-are-underrated-and-heres-why"},{"title":"Firing sucks. How to avoid doing so by hiring A players.","permalink":"/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-players"},{"title":"How ChatGPT allowed me to leverage Twitter API 10x faster","permalink":"/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster"},{"title":"How I wrote a machine learning paper in 1 week that got accepted to International Conference in Machine Learning Applications","permalink":"/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla"},{"title":"The future of finance with open source and AI","permalink":"/blog/the-future-of-finance-with-open-source-and-ai"},{"title":"Bloomberg Terminal is no more. OpenBB Terminal 2.0 has just been released.","permalink":"/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released"},{"title":"Sweepstake World Cup 2022 for your startup team","permalink":"/blog/sweepstake-world-cup-2022-for-your-startup-team"},{"title":"5 steps I used to change my job title in less than 1 year","permalink":"/blog/5-steps-i-used-to-change-my-job-title-in-less-than-1-year"},{"title":"How to grow your open source community from scratch","permalink":"/blog/how-to-grow-your-open-source-community-from-scratch.md"},{"title":"How to learn 10x faster than average","permalink":"/blog/how-to-learn-10x-faster-than-average"},{"title":"Twitter thread to LinkedIn carousel in python","permalink":"/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds"},{"title":"How I would do due diligence on $AMT using OpenBB Terminal","permalink":"/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminal"},{"title":"Stop doing your CV in Word or LaTeX","permalink":"/blog/stop-doing-your-cv-in-word-or-latex"},{"title":"Why you should drop yfinance API and adopt OpenBB SDK","permalink":"/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdk"},{"title":"How I became CEO of OpenBB","permalink":"/blog/how-i-became-ceo-of-openbb"},{"title":"Web3, symbols and community","permalink":"/blog/web3-symbols-and-community"},{"title":"Remote + Flexible work >> Salary","permalink":"/blog/remote-flexible-work-salary"},{"title":"Looking for a new tattoo? OpenBB has you covered\u2026 literally.","permalink":"/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literally"},{"title":"How I created the best discord meme bot","permalink":"/blog/how-i-created-the-best-discord-meme-bot"},{"title":"Meet the most advanced investment research platform","permalink":"/blog/meet-the-most-advanced-investment-research-platform"},{"title":"UX/UI is better than features","permalink":"/blog/gamestonk-terminal-ux-features"},{"title":"Sector and Industry Analysis \u2014 Gamestonk Terminal","permalink":"/blog/sector-and-industry-analysis-gamestonk-terminal"},{"title":"Handing your twitter account to your most avid community member","permalink":"/blog/handing-your-twitter-account-to-your-most-avid-community-member"},{"title":"The Start of my Machine Learning journey","permalink":"/blog/the-start-of-my-machine-learning-journey"},{"title":"An unusual journey learning about NNs for a PhD thesis","permalink":"/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesis"},{"title":"How I created a bot in python to participate in NFT giveaways","permalink":"/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveaways"},{"title":"Gamestonk Terminal \u2014 Can\u2019t Stop, Won\u2019t Stop","permalink":"/blog/gamestonk-terminal-cant-stop-won-t-stop"},{"title":"Time-Series CrossValidation for NN","permalink":"/blog/time-series-crossvalidation-for-nn"},{"title":"Ranking 99 Mind f*ck movies","permalink":"/blog/ranking-99-mind-f-ck-movies"},{"title":"K-means algorithm to visit a new city","permalink":"/blog/k-means-clustering-to-visit-a-new-city"},{"title":"Minion Recipes Program","permalink":"/blog/minion-recipes-program"},{"title":"Household bills Program","permalink":"/blog/household-bills-program"},{"title":"My journey of memorising a deck of 52 shuffled cards","permalink":"/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cards"},{"title":"Customizable Meme Filter","permalink":"/blog/customizable-meme-filter"},{"title":"NeistPoint Project","permalink":"/blog/neistpoint-project"},{"title":"Move over Bloomberg Terminal, here comes Gamestonk Terminal","permalink":"/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminal"},{"title":"Momentum Football Bets","permalink":"/blog/momentum-football-bets"},{"title":"Gamestonk Terminal - The next best thing after Bloomberg Terminal","permalink":"/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal"}]}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.5a541b5b.js b/assets/js/814f3328.5a541b5b.js new file mode 100644 index 0000000000..71855f23d6 --- /dev/null +++ b/assets/js/814f3328.5a541b5b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[52535],{45641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"The new FinAI Tech Stack","permalink":"/blog/the-new-finai-tech-stack"},{"title":"Goodbye OpenBB SDK. Hello OpenBB Platform","permalink":"/blog/goodbye-openbb-sdk-hello-openbb-platform"},{"title":"OpenBB Bot - our new addition to the OpenBB open source family","permalink":"/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family"},{"title":"Revolutionizing AI at OpenBB with new leader, Michael Struwig","permalink":"/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig"},{"title":"Writing documentation, as a founder, is underrated.","permalink":"/blog/writing-documentation-as-a-founder-is-underrated"},{"title":"Building the world\u2019s investment research infrastructure","permalink":"/blog/building-the-worlds-investment-research-infrastructure"},{"title":"A $500k bet to build the best platform to do AI using financial data","permalink":"/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data"},{"title":"Work-life balance is bullsh*t","permalink":"/blog/work-life-balance-is-bullsh-t"},{"title":"Target Market Analysis with the help of LLMs","permalink":"/blog/target-market-analysis-with-the-help-of-llms"},{"title":"OpenBB 2 year anniversary","permalink":"/blog/openbb-2-year-anniversary"},{"title":"How to handle equity top-ups at a seed stage startup","permalink":"/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startup"},{"title":"How to handle equity at a seed-stage startup from Silicon Valley","permalink":"/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley"},{"title":"Keep track of your startup metrics using a custom iOS widget","permalink":"/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widget"},{"title":"How to Use OpenAI to Extract Insights from Team Survey","permalink":"/blog/how-to-use-openai-to-extract-insights-from-team-survey"},{"title":"Why the need for an open source investment research platform?","permalink":"/blog/why-the-need-for-an-open-source-investment-research-platform"},{"title":"From Open Source to Open Startup","permalink":"/blog/from-open-source-to-open-startup"},{"title":"Employees are leaving? Be proactive about employee feedback","permalink":"/blog/employees-are-leaving-be-proactive-about-employee-feedback"},{"title":"Hybrid work sucks. It\u2019s worse than remote and office.","permalink":"/blog/hybrid-work-sucks-its-worse-than-remote-and-office"},{"title":"Become an OpenBB Champion","permalink":"/blog/become-an-openbb-champion"},{"title":"Streamline your OpenBB Terminal experience with OpenBB Hub","permalink":"/blog/streamline-your-openbb-terminal-experience-with-openbb-hub"},{"title":"OpenBB Terminal 3.0 - a new interactive way to analyze data","permalink":"/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-data"},{"title":"Leaving London to live in San Francisco","permalink":"/blog/leaving-london-to-live-in-san-francisco"},{"title":"Fully free financial chatbot","permalink":"/blog/fully-free-financial-chatbot"},{"title":"Free investment research ecosystem to consistently beat the market","permalink":"/blog/free-investment-research-ecosystem-to-consistently-beat-the-market"},{"title":"The role of AI and OpenBB in the future of investment research","permalink":"/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-research"},{"title":"How I Used OpenAI API to improve our product documentation","permalink":"/blog/how-i-used-openai-api-to-improve-our-product-documentation"},{"title":"How to get hired by an exciting tech startup in 2023","permalink":"/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023"},{"title":"Financial chat bots are underrated, and here\u2019s why.","permalink":"/blog/financial-chat-bots-are-underrated-and-heres-why"},{"title":"Firing sucks. How to avoid doing so by hiring A players.","permalink":"/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-players"},{"title":"How ChatGPT allowed me to leverage Twitter API 10x faster","permalink":"/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster"},{"title":"How I wrote a machine learning paper in 1 week that got accepted to International Conference in Machine Learning Applications","permalink":"/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla"},{"title":"The future of finance with open source and AI","permalink":"/blog/the-future-of-finance-with-open-source-and-ai"},{"title":"Bloomberg Terminal is no more. OpenBB Terminal 2.0 has just been released.","permalink":"/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released"},{"title":"Sweepstake World Cup 2022 for your startup team","permalink":"/blog/sweepstake-world-cup-2022-for-your-startup-team"},{"title":"5 steps I used to change my job title in less than 1 year","permalink":"/blog/5-steps-i-used-to-change-my-job-title-in-less-than-1-year"},{"title":"How to grow your open source community from scratch","permalink":"/blog/how-to-grow-your-open-source-community-from-scratch.md"},{"title":"How to learn 10x faster than average","permalink":"/blog/how-to-learn-10x-faster-than-average"},{"title":"Twitter thread to LinkedIn carousel in python","permalink":"/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds"},{"title":"How I would do due diligence on $AMT using OpenBB Terminal","permalink":"/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminal"},{"title":"Stop doing your CV in Word or LaTeX","permalink":"/blog/stop-doing-your-cv-in-word-or-latex"},{"title":"Why you should drop yfinance API and adopt OpenBB SDK","permalink":"/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdk"},{"title":"How I became CEO of OpenBB","permalink":"/blog/how-i-became-ceo-of-openbb"},{"title":"Web3, symbols and community","permalink":"/blog/web3-symbols-and-community"},{"title":"Remote + Flexible work >> Salary","permalink":"/blog/remote-flexible-work-salary"},{"title":"Looking for a new tattoo? OpenBB has you covered\u2026 literally.","permalink":"/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literally"},{"title":"How I created the best discord meme bot","permalink":"/blog/how-i-created-the-best-discord-meme-bot"},{"title":"Meet the most advanced investment research platform","permalink":"/blog/meet-the-most-advanced-investment-research-platform"},{"title":"UX/UI is better than features","permalink":"/blog/gamestonk-terminal-ux-features"},{"title":"Sector and Industry Analysis \u2014 Gamestonk Terminal","permalink":"/blog/sector-and-industry-analysis-gamestonk-terminal"},{"title":"Handing your twitter account to your most avid community member","permalink":"/blog/handing-your-twitter-account-to-your-most-avid-community-member"},{"title":"The Start of my Machine Learning journey","permalink":"/blog/the-start-of-my-machine-learning-journey"},{"title":"An unusual journey learning about NNs for a PhD thesis","permalink":"/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesis"},{"title":"How I created a bot in python to participate in NFT giveaways","permalink":"/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveaways"},{"title":"Gamestonk Terminal \u2014 Can\u2019t Stop, Won\u2019t Stop","permalink":"/blog/gamestonk-terminal-cant-stop-won-t-stop"},{"title":"Time-Series CrossValidation for NN","permalink":"/blog/time-series-crossvalidation-for-nn"},{"title":"Ranking 99 Mind f*ck movies","permalink":"/blog/ranking-99-mind-f-ck-movies"},{"title":"K-means algorithm to visit a new city","permalink":"/blog/k-means-clustering-to-visit-a-new-city"},{"title":"Minion Recipes Program","permalink":"/blog/minion-recipes-program"},{"title":"Household bills Program","permalink":"/blog/household-bills-program"},{"title":"My journey of memorising a deck of 52 shuffled cards","permalink":"/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cards"},{"title":"Customizable Meme Filter","permalink":"/blog/customizable-meme-filter"},{"title":"NeistPoint Project","permalink":"/blog/neistpoint-project"},{"title":"Move over Bloomberg Terminal, here comes Gamestonk Terminal","permalink":"/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminal"},{"title":"Momentum Football Bets","permalink":"/blog/momentum-football-bets"},{"title":"Gamestonk Terminal - The next best thing after Bloomberg Terminal","permalink":"/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal"}]}')}}]); \ No newline at end of file diff --git a/assets/js/967ead12.6fbf45ca.js b/assets/js/967ead12.6fbf45ca.js new file mode 100644 index 0000000000..93334e3f17 --- /dev/null +++ b/assets/js/967ead12.6fbf45ca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[32473],{19908:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/mindsdb","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"This is where I drop my thoughts in the form of blogposts!","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/a7023ddc.4692bd01.js b/assets/js/a7023ddc.4692bd01.js deleted file mode 100644 index 377f4e5954..0000000000 --- a/assets/js/a7023ddc.4692bd01.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[11713],{53457:a=>{a.exports=JSON.parse('[{"label":"openbb","permalink":"/blog/tags/openbb","count":3},{"label":"platform","permalink":"/blog/tags/platform","count":1},{"label":"sdk","permalink":"/blog/tags/sdk","count":2},{"label":"core","permalink":"/blog/tags/core","count":1},{"label":"extensions","permalink":"/blog/tags/extensions","count":1},{"label":"bot","permalink":"/blog/tags/bot","count":2},{"label":"open source","permalink":"/blog/tags/open-source","count":18},{"label":"discord","permalink":"/blog/tags/discord","count":6},{"label":"monetization","permalink":"/blog/tags/monetization","count":1},{"label":"ai","permalink":"/blog/tags/ai","count":5},{"label":"startup","permalink":"/blog/tags/startup","count":5},{"label":"finance","permalink":"/blog/tags/finance","count":7},{"label":"hiring","permalink":"/blog/tags/hiring","count":2},{"label":"documentation","permalink":"/blog/tags/documentation","count":1},{"label":"founder","permalink":"/blog/tags/founder","count":1},{"label":"writing","permalink":"/blog/tags/writing","count":1},{"label":"product","permalink":"/blog/tags/product","count":1},{"label":"investment","permalink":"/blog/tags/investment","count":2},{"label":"research","permalink":"/blog/tags/research","count":1},{"label":"infrastructure","permalink":"/blog/tags/infrastructure","count":1},{"label":"OpenBB","permalink":"/blog/tags/open-bb","count":15},{"label":"Financial Data","permalink":"/blog/tags/financial-data","count":3},{"label":"Data Access","permalink":"/blog/tags/data-access","count":1},{"label":"Agents","permalink":"/blog/tags/agents","count":1},{"label":"work-life balance","permalink":"/blog/tags/work-life-balance","count":2},{"label":"success","permalink":"/blog/tags/success","count":1},{"label":"career","permalink":"/blog/tags/career","count":3},{"label":"hard work","permalink":"/blog/tags/hard-work","count":2},{"label":"Target Market Analysis","permalink":"/blog/tags/target-market-analysis","count":1},{"label":"LLMs","permalink":"/blog/tags/ll-ms","count":1},{"label":"BCG Matrix","permalink":"/blog/tags/bcg-matrix","count":1},{"label":"GE McKinsey Matrix","permalink":"/blog/tags/ge-mc-kinsey-matrix","count":1},{"label":"Market Attractiveness","permalink":"/blog/tags/market-attractiveness","count":1},{"label":"Competitive Advantage","permalink":"/blog/tags/competitive-advantage","count":1},{"label":"Anniversary","permalink":"/blog/tags/anniversary","count":1},{"label":"Achievements","permalink":"/blog/tags/achievements","count":1},{"label":"Growth","permalink":"/blog/tags/growth","count":1},{"label":"equity","permalink":"/blog/tags/equity","count":3},{"label":"startups","permalink":"/blog/tags/startups","count":1},{"label":"seed stage","permalink":"/blog/tags/seed-stage","count":2},{"label":"equity top-ups","permalink":"/blog/tags/equity-top-ups","count":1},{"label":"employee compensation","permalink":"/blog/tags/employee-compensation","count":1},{"label":"Silicon Valley","permalink":"/blog/tags/silicon-valley","count":1},{"label":"iOS","permalink":"/blog/tags/i-os","count":1},{"label":"Metrics","permalink":"/blog/tags/metrics","count":1},{"label":"Scriptable","permalink":"/blog/tags/scriptable","count":1},{"label":"OpenAI","permalink":"/blog/tags/open-ai","count":3},{"label":"Team Survey","permalink":"/blog/tags/team-survey","count":1},{"label":"Insights","permalink":"/blog/tags/insights","count":1},{"label":"Automation","permalink":"/blog/tags/automation","count":3},{"label":"Slack","permalink":"/blog/tags/slack","count":1},{"label":"Airtable","permalink":"/blog/tags/airtable","count":1},{"label":"Investment Research","permalink":"/blog/tags/investment-research","count":6},{"label":"Data Licensing","permalink":"/blog/tags/data-licensing","count":1},{"label":"Transparency","permalink":"/blog/tags/transparency","count":2},{"label":"Community","permalink":"/blog/tags/community","count":3},{"label":"open-startup","permalink":"/blog/tags/open-startup","count":1},{"label":"financial world","permalink":"/blog/tags/financial-world","count":1},{"label":"employee engagement","permalink":"/blog/tags/employee-engagement","count":1},{"label":"feedback","permalink":"/blog/tags/feedback","count":1},{"label":"work culture","permalink":"/blog/tags/work-culture","count":2},{"label":"remote work","permalink":"/blog/tags/remote-work","count":3},{"label":"team happiness","permalink":"/blog/tags/team-happiness","count":1},{"label":"office work","permalink":"/blog/tags/office-work","count":1},{"label":"hybrid work","permalink":"/blog/tags/hybrid-work","count":1},{"label":"productivity","permalink":"/blog/tags/productivity","count":2},{"label":"OpenBB Champion","permalink":"/blog/tags/open-bb-champion","count":1},{"label":"OpenBB Hub","permalink":"/blog/tags/open-bb-hub","count":2},{"label":"Terminal","permalink":"/blog/tags/terminal","count":1},{"label":"API Key Management","permalink":"/blog/tags/api-key-management","count":1},{"label":"Data Customization","permalink":"/blog/tags/data-customization","count":1},{"label":"Personalization","permalink":"/blog/tags/personalization","count":1},{"label":"Script Management","permalink":"/blog/tags/script-management","count":1},{"label":"OpenBB Terminal","permalink":"/blog/tags/open-bb-terminal","count":4},{"label":"Interactive Charts","permalink":"/blog/tags/interactive-charts","count":1},{"label":"Interactive Tables","permalink":"/blog/tags/interactive-tables","count":1},{"label":"Data Analysis","permalink":"/blog/tags/data-analysis","count":1},{"label":"San Francisco","permalink":"/blog/tags/san-francisco","count":1},{"label":"London","permalink":"/blog/tags/london","count":2},{"label":"Relocation","permalink":"/blog/tags/relocation","count":1},{"label":"Visa Process","permalink":"/blog/tags/visa-process","count":1},{"label":"OpenBB Bot","permalink":"/blog/tags/open-bb-bot","count":3},{"label":"Financial Chatbot","permalink":"/blog/tags/financial-chatbot","count":1},{"label":"Free","permalink":"/blog/tags/free","count":1},{"label":"Telegram","permalink":"/blog/tags/telegram","count":1},{"label":"Crypto","permalink":"/blog/tags/crypto","count":1},{"label":"Options","permalink":"/blog/tags/options","count":1},{"label":"Darkpool","permalink":"/blog/tags/darkpool","count":1},{"label":"Economy","permalink":"/blog/tags/economy","count":1},{"label":"OpenBB SDK","permalink":"/blog/tags/open-bb-sdk","count":2},{"label":"future","permalink":"/blog/tags/future","count":2},{"label":"ChatGPT","permalink":"/blog/tags/chat-gpt","count":3},{"label":"API","permalink":"/blog/tags/api","count":1},{"label":"Product Documentation","permalink":"/blog/tags/product-documentation","count":1},{"label":"Career Advice","permalink":"/blog/tags/career-advice","count":2},{"label":"Tech Startups","permalink":"/blog/tags/tech-startups","count":1},{"label":"Job Hunting","permalink":"/blog/tags/job-hunting","count":1},{"label":"Software Engineering","permalink":"/blog/tags/software-engineering","count":1},{"label":"chatbots","permalink":"/blog/tags/chatbots","count":1},{"label":"OptionsFamBot","permalink":"/blog/tags/options-fam-bot","count":1},{"label":"Management","permalink":"/blog/tags/management","count":1},{"label":"A Players","permalink":"/blog/tags/a-players","count":1},{"label":"Twitter API","permalink":"/blog/tags/twitter-api","count":1},{"label":"Tweepy","permalink":"/blog/tags/tweepy","count":1},{"label":"Python","permalink":"/blog/tags/python","count":12},{"label":"Programming","permalink":"/blog/tags/programming","count":5},{"label":"Machine Learning","permalink":"/blog/tags/machine-learning","count":2},{"label":"Data Science","permalink":"/blog/tags/data-science","count":3},{"label":"Academia","permalink":"/blog/tags/academia","count":1},{"label":"ICMLA","permalink":"/blog/tags/icmla","count":1},{"label":"NURVV Run","permalink":"/blog/tags/nurvv-run","count":1},{"label":"OpenBB Terminal 2.0","permalink":"/blog/tags/open-bb-terminal-2-0","count":1},{"label":"ML","permalink":"/blog/tags/ml","count":1},{"label":"World Cup 2022","permalink":"/blog/tags/world-cup-2022","count":1},{"label":"Startup Team","permalink":"/blog/tags/startup-team","count":1},{"label":"Sweepstake","permalink":"/blog/tags/sweepstake","count":1},{"label":"Team Building","permalink":"/blog/tags/team-building","count":1},{"label":"Slack Bot","permalink":"/blog/tags/slack-bot","count":1},{"label":"job change","permalink":"/blog/tags/job-change","count":1},{"label":"sensor fusion engineer","permalink":"/blog/tags/sensor-fusion-engineer","count":1},{"label":"roadmap","permalink":"/blog/tags/roadmap","count":1},{"label":"Community Building","permalink":"/blog/tags/community-building","count":3},{"label":"Project Management","permalink":"/blog/tags/project-management","count":2},{"label":"learning","permalink":"/blog/tags/learning","count":1},{"label":"self-improvement","permalink":"/blog/tags/self-improvement","count":1},{"label":"skills","permalink":"/blog/tags/skills","count":1},{"label":"education","permalink":"/blog/tags/education","count":2},{"label":"LinkedIn","permalink":"/blog/tags/linked-in","count":1},{"label":"Twitter","permalink":"/blog/tags/twitter","count":2},{"label":"Carousel","permalink":"/blog/tags/carousel","count":1},{"label":"Content Creation","permalink":"/blog/tags/content-creation","count":1},{"label":"Stocks","permalink":"/blog/tags/stocks","count":1},{"label":"Due Diligence","permalink":"/blog/tags/due-diligence","count":1},{"label":"GitHub","permalink":"/blog/tags/git-hub","count":1},{"label":"CV","permalink":"/blog/tags/cv","count":1},{"label":"Developer","permalink":"/blog/tags/developer","count":1},{"label":"yfinance API","permalink":"/blog/tags/yfinance-api","count":1},{"label":"APIs","permalink":"/blog/tags/ap-is","count":1},{"label":"publishing","permalink":"/blog/tags/publishing","count":1},{"label":"package","permalink":"/blog/tags/package","count":1},{"label":"pypi","permalink":"/blog/tags/pypi","count":1},{"label":"Web3","permalink":"/blog/tags/web-3","count":1},{"label":"Decentralization","permalink":"/blog/tags/decentralization","count":1},{"label":"Blockchain","permalink":"/blog/tags/blockchain","count":1},{"label":"Smart Contracts","permalink":"/blog/tags/smart-contracts","count":1},{"label":"Flexible Hours","permalink":"/blog/tags/flexible-hours","count":1},{"label":"Marketing","permalink":"/blog/tags/marketing","count":1},{"label":"Tattoo","permalink":"/blog/tags/tattoo","count":1},{"label":"Brand Awareness","permalink":"/blog/tags/brand-awareness","count":1},{"label":"Meme Bot","permalink":"/blog/tags/meme-bot","count":1},{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal","count":7},{"label":"Routines","permalink":"/blog/tags/routines","count":1},{"label":"UX/UI","permalink":"/blog/tags/ux-ui","count":1},{"label":"Software Development","permalink":"/blog/tags/software-development","count":3},{"label":"Teamwork","permalink":"/blog/tags/teamwork","count":1},{"label":"Sector Analysis","permalink":"/blog/tags/sector-analysis","count":1},{"label":"Industry Analysis","permalink":"/blog/tags/industry-analysis","count":1},{"label":"FinanceDatabase","permalink":"/blog/tags/finance-database","count":1},{"label":"Self-Learning","permalink":"/blog/tags/self-learning","count":1},{"label":"PhD Thesis","permalink":"/blog/tags/ph-d-thesis","count":1},{"label":"Neural Networks","permalink":"/blog/tags/neural-networks","count":2},{"label":"Time Series Forecasting","permalink":"/blog/tags/time-series-forecasting","count":1},{"label":"NFT","permalink":"/blog/tags/nft","count":1},{"label":"Giveaways","permalink":"/blog/tags/giveaways","count":1},{"label":"Reddit","permalink":"/blog/tags/reddit","count":1},{"label":"Docker","permalink":"/blog/tags/docker","count":1},{"label":"Jupyter Lab","permalink":"/blog/tags/jupyter-lab","count":1},{"label":"Hugo Website","permalink":"/blog/tags/hugo-website","count":1},{"label":"Trading","permalink":"/blog/tags/trading","count":1},{"label":"Deep Learning","permalink":"/blog/tags/deep-learning","count":1},{"label":"Time Series","permalink":"/blog/tags/time-series","count":1},{"label":"Cross Validation","permalink":"/blog/tags/cross-validation","count":1},{"label":"Movies","permalink":"/blog/tags/movies","count":1},{"label":"Thrillers","permalink":"/blog/tags/thrillers","count":1},{"label":"IMDbPy","permalink":"/blog/tags/im-db-py","count":1},{"label":"Sorting Algorithm","permalink":"/blog/tags/sorting-algorithm","count":1},{"label":"K-means","permalink":"/blog/tags/k-means","count":1},{"label":"Algorithm","permalink":"/blog/tags/algorithm","count":1},{"label":"Travel","permalink":"/blog/tags/travel","count":1},{"label":"Efficiency","permalink":"/blog/tags/efficiency","count":1},{"label":"GPS","permalink":"/blog/tags/gps","count":1},{"label":"Clustering","permalink":"/blog/tags/clustering","count":1},{"label":"Recipes","permalink":"/blog/tags/recipes","count":1},{"label":"Java","permalink":"/blog/tags/java","count":1},{"label":"GUI","permalink":"/blog/tags/gui","count":1},{"label":"Side Project","permalink":"/blog/tags/side-project","count":1},{"label":"Memory Training","permalink":"/blog/tags/memory-training","count":1},{"label":"PAO System","permalink":"/blog/tags/pao-system","count":1},{"label":"Memory Palace","permalink":"/blog/tags/memory-palace","count":1},{"label":"Card Memorisation","permalink":"/blog/tags/card-memorisation","count":1},{"label":"Meme Filter","permalink":"/blog/tags/meme-filter","count":1},{"label":"Image Processing","permalink":"/blog/tags/image-processing","count":1},{"label":"Face Recognition","permalink":"/blog/tags/face-recognition","count":1},{"label":"NeistPoint","permalink":"/blog/tags/neist-point","count":1},{"label":"Clothing Brand","permalink":"/blog/tags/clothing-brand","count":1},{"label":"Sustainability","permalink":"/blog/tags/sustainability","count":1},{"label":"C++","permalink":"/blog/tags/c","count":1},{"label":"Stock Management","permalink":"/blog/tags/stock-management","count":1},{"label":"Stock Market","permalink":"/blog/tags/stock-market","count":2},{"label":"Football","permalink":"/blog/tags/football","count":1},{"label":"Betting","permalink":"/blog/tags/betting","count":1},{"label":"Momentum","permalink":"/blog/tags/momentum","count":1},{"label":"Web Scraping","permalink":"/blog/tags/web-scraping","count":1},{"label":"Beautiful Soup","permalink":"/blog/tags/beautiful-soup","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/a7023ddc.76509c72.js b/assets/js/a7023ddc.76509c72.js new file mode 100644 index 0000000000..ca35573c9a --- /dev/null +++ b/assets/js/a7023ddc.76509c72.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[11713],{53457:a=>{a.exports=JSON.parse('[{"label":"openbb","permalink":"/blog/tags/openbb","count":4},{"label":"finance","permalink":"/blog/tags/finance","count":8},{"label":"ai","permalink":"/blog/tags/ai","count":6},{"label":"agents","permalink":"/blog/tags/agents","count":2},{"label":"langchain","permalink":"/blog/tags/langchain","count":1},{"label":"llamaindex","permalink":"/blog/tags/llamaindex","count":1},{"label":"mindsdb","permalink":"/blog/tags/mindsdb","count":1},{"label":"nixtla","permalink":"/blog/tags/nixtla","count":1},{"label":"platform","permalink":"/blog/tags/platform","count":1},{"label":"sdk","permalink":"/blog/tags/sdk","count":2},{"label":"core","permalink":"/blog/tags/core","count":1},{"label":"extensions","permalink":"/blog/tags/extensions","count":1},{"label":"bot","permalink":"/blog/tags/bot","count":2},{"label":"open source","permalink":"/blog/tags/open-source","count":18},{"label":"discord","permalink":"/blog/tags/discord","count":6},{"label":"monetization","permalink":"/blog/tags/monetization","count":1},{"label":"startup","permalink":"/blog/tags/startup","count":5},{"label":"hiring","permalink":"/blog/tags/hiring","count":2},{"label":"documentation","permalink":"/blog/tags/documentation","count":1},{"label":"founder","permalink":"/blog/tags/founder","count":1},{"label":"writing","permalink":"/blog/tags/writing","count":1},{"label":"product","permalink":"/blog/tags/product","count":1},{"label":"investment","permalink":"/blog/tags/investment","count":2},{"label":"research","permalink":"/blog/tags/research","count":1},{"label":"infrastructure","permalink":"/blog/tags/infrastructure","count":1},{"label":"OpenBB","permalink":"/blog/tags/open-bb","count":15},{"label":"Financial Data","permalink":"/blog/tags/financial-data","count":3},{"label":"Data Access","permalink":"/blog/tags/data-access","count":1},{"label":"work-life balance","permalink":"/blog/tags/work-life-balance","count":2},{"label":"success","permalink":"/blog/tags/success","count":1},{"label":"career","permalink":"/blog/tags/career","count":3},{"label":"hard work","permalink":"/blog/tags/hard-work","count":2},{"label":"Target Market Analysis","permalink":"/blog/tags/target-market-analysis","count":1},{"label":"LLMs","permalink":"/blog/tags/ll-ms","count":1},{"label":"BCG Matrix","permalink":"/blog/tags/bcg-matrix","count":1},{"label":"GE McKinsey Matrix","permalink":"/blog/tags/ge-mc-kinsey-matrix","count":1},{"label":"Market Attractiveness","permalink":"/blog/tags/market-attractiveness","count":1},{"label":"Competitive Advantage","permalink":"/blog/tags/competitive-advantage","count":1},{"label":"Anniversary","permalink":"/blog/tags/anniversary","count":1},{"label":"Achievements","permalink":"/blog/tags/achievements","count":1},{"label":"Growth","permalink":"/blog/tags/growth","count":1},{"label":"equity","permalink":"/blog/tags/equity","count":3},{"label":"startups","permalink":"/blog/tags/startups","count":1},{"label":"seed stage","permalink":"/blog/tags/seed-stage","count":2},{"label":"equity top-ups","permalink":"/blog/tags/equity-top-ups","count":1},{"label":"employee compensation","permalink":"/blog/tags/employee-compensation","count":1},{"label":"Silicon Valley","permalink":"/blog/tags/silicon-valley","count":1},{"label":"iOS","permalink":"/blog/tags/i-os","count":1},{"label":"Metrics","permalink":"/blog/tags/metrics","count":1},{"label":"Scriptable","permalink":"/blog/tags/scriptable","count":1},{"label":"OpenAI","permalink":"/blog/tags/open-ai","count":3},{"label":"Team Survey","permalink":"/blog/tags/team-survey","count":1},{"label":"Insights","permalink":"/blog/tags/insights","count":1},{"label":"Automation","permalink":"/blog/tags/automation","count":3},{"label":"Slack","permalink":"/blog/tags/slack","count":1},{"label":"Airtable","permalink":"/blog/tags/airtable","count":1},{"label":"Investment Research","permalink":"/blog/tags/investment-research","count":6},{"label":"Data Licensing","permalink":"/blog/tags/data-licensing","count":1},{"label":"Transparency","permalink":"/blog/tags/transparency","count":2},{"label":"Community","permalink":"/blog/tags/community","count":3},{"label":"open-startup","permalink":"/blog/tags/open-startup","count":1},{"label":"financial world","permalink":"/blog/tags/financial-world","count":1},{"label":"employee engagement","permalink":"/blog/tags/employee-engagement","count":1},{"label":"feedback","permalink":"/blog/tags/feedback","count":1},{"label":"work culture","permalink":"/blog/tags/work-culture","count":2},{"label":"remote work","permalink":"/blog/tags/remote-work","count":3},{"label":"team happiness","permalink":"/blog/tags/team-happiness","count":1},{"label":"office work","permalink":"/blog/tags/office-work","count":1},{"label":"hybrid work","permalink":"/blog/tags/hybrid-work","count":1},{"label":"productivity","permalink":"/blog/tags/productivity","count":2},{"label":"OpenBB Champion","permalink":"/blog/tags/open-bb-champion","count":1},{"label":"OpenBB Hub","permalink":"/blog/tags/open-bb-hub","count":2},{"label":"Terminal","permalink":"/blog/tags/terminal","count":1},{"label":"API Key Management","permalink":"/blog/tags/api-key-management","count":1},{"label":"Data Customization","permalink":"/blog/tags/data-customization","count":1},{"label":"Personalization","permalink":"/blog/tags/personalization","count":1},{"label":"Script Management","permalink":"/blog/tags/script-management","count":1},{"label":"OpenBB Terminal","permalink":"/blog/tags/open-bb-terminal","count":4},{"label":"Interactive Charts","permalink":"/blog/tags/interactive-charts","count":1},{"label":"Interactive Tables","permalink":"/blog/tags/interactive-tables","count":1},{"label":"Data Analysis","permalink":"/blog/tags/data-analysis","count":1},{"label":"San Francisco","permalink":"/blog/tags/san-francisco","count":1},{"label":"London","permalink":"/blog/tags/london","count":2},{"label":"Relocation","permalink":"/blog/tags/relocation","count":1},{"label":"Visa Process","permalink":"/blog/tags/visa-process","count":1},{"label":"OpenBB Bot","permalink":"/blog/tags/open-bb-bot","count":3},{"label":"Financial Chatbot","permalink":"/blog/tags/financial-chatbot","count":1},{"label":"Free","permalink":"/blog/tags/free","count":1},{"label":"Telegram","permalink":"/blog/tags/telegram","count":1},{"label":"Crypto","permalink":"/blog/tags/crypto","count":1},{"label":"Options","permalink":"/blog/tags/options","count":1},{"label":"Darkpool","permalink":"/blog/tags/darkpool","count":1},{"label":"Economy","permalink":"/blog/tags/economy","count":1},{"label":"OpenBB SDK","permalink":"/blog/tags/open-bb-sdk","count":2},{"label":"future","permalink":"/blog/tags/future","count":2},{"label":"ChatGPT","permalink":"/blog/tags/chat-gpt","count":3},{"label":"API","permalink":"/blog/tags/api","count":1},{"label":"Product Documentation","permalink":"/blog/tags/product-documentation","count":1},{"label":"Career Advice","permalink":"/blog/tags/career-advice","count":2},{"label":"Tech Startups","permalink":"/blog/tags/tech-startups","count":1},{"label":"Job Hunting","permalink":"/blog/tags/job-hunting","count":1},{"label":"Software Engineering","permalink":"/blog/tags/software-engineering","count":1},{"label":"chatbots","permalink":"/blog/tags/chatbots","count":1},{"label":"OptionsFamBot","permalink":"/blog/tags/options-fam-bot","count":1},{"label":"Management","permalink":"/blog/tags/management","count":1},{"label":"A Players","permalink":"/blog/tags/a-players","count":1},{"label":"Twitter API","permalink":"/blog/tags/twitter-api","count":1},{"label":"Tweepy","permalink":"/blog/tags/tweepy","count":1},{"label":"Python","permalink":"/blog/tags/python","count":12},{"label":"Programming","permalink":"/blog/tags/programming","count":5},{"label":"Machine Learning","permalink":"/blog/tags/machine-learning","count":2},{"label":"Data Science","permalink":"/blog/tags/data-science","count":3},{"label":"Academia","permalink":"/blog/tags/academia","count":1},{"label":"ICMLA","permalink":"/blog/tags/icmla","count":1},{"label":"NURVV Run","permalink":"/blog/tags/nurvv-run","count":1},{"label":"OpenBB Terminal 2.0","permalink":"/blog/tags/open-bb-terminal-2-0","count":1},{"label":"ML","permalink":"/blog/tags/ml","count":1},{"label":"World Cup 2022","permalink":"/blog/tags/world-cup-2022","count":1},{"label":"Startup Team","permalink":"/blog/tags/startup-team","count":1},{"label":"Sweepstake","permalink":"/blog/tags/sweepstake","count":1},{"label":"Team Building","permalink":"/blog/tags/team-building","count":1},{"label":"Slack Bot","permalink":"/blog/tags/slack-bot","count":1},{"label":"job change","permalink":"/blog/tags/job-change","count":1},{"label":"sensor fusion engineer","permalink":"/blog/tags/sensor-fusion-engineer","count":1},{"label":"roadmap","permalink":"/blog/tags/roadmap","count":1},{"label":"Community Building","permalink":"/blog/tags/community-building","count":3},{"label":"Project Management","permalink":"/blog/tags/project-management","count":2},{"label":"learning","permalink":"/blog/tags/learning","count":1},{"label":"self-improvement","permalink":"/blog/tags/self-improvement","count":1},{"label":"skills","permalink":"/blog/tags/skills","count":1},{"label":"education","permalink":"/blog/tags/education","count":2},{"label":"LinkedIn","permalink":"/blog/tags/linked-in","count":1},{"label":"Twitter","permalink":"/blog/tags/twitter","count":2},{"label":"Carousel","permalink":"/blog/tags/carousel","count":1},{"label":"Content Creation","permalink":"/blog/tags/content-creation","count":1},{"label":"Stocks","permalink":"/blog/tags/stocks","count":1},{"label":"Due Diligence","permalink":"/blog/tags/due-diligence","count":1},{"label":"GitHub","permalink":"/blog/tags/git-hub","count":1},{"label":"CV","permalink":"/blog/tags/cv","count":1},{"label":"Developer","permalink":"/blog/tags/developer","count":1},{"label":"yfinance API","permalink":"/blog/tags/yfinance-api","count":1},{"label":"APIs","permalink":"/blog/tags/ap-is","count":1},{"label":"publishing","permalink":"/blog/tags/publishing","count":1},{"label":"package","permalink":"/blog/tags/package","count":1},{"label":"pypi","permalink":"/blog/tags/pypi","count":1},{"label":"Web3","permalink":"/blog/tags/web-3","count":1},{"label":"Decentralization","permalink":"/blog/tags/decentralization","count":1},{"label":"Blockchain","permalink":"/blog/tags/blockchain","count":1},{"label":"Smart Contracts","permalink":"/blog/tags/smart-contracts","count":1},{"label":"Flexible Hours","permalink":"/blog/tags/flexible-hours","count":1},{"label":"Marketing","permalink":"/blog/tags/marketing","count":1},{"label":"Tattoo","permalink":"/blog/tags/tattoo","count":1},{"label":"Brand Awareness","permalink":"/blog/tags/brand-awareness","count":1},{"label":"Meme Bot","permalink":"/blog/tags/meme-bot","count":1},{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal","count":7},{"label":"Routines","permalink":"/blog/tags/routines","count":1},{"label":"UX/UI","permalink":"/blog/tags/ux-ui","count":1},{"label":"Software Development","permalink":"/blog/tags/software-development","count":3},{"label":"Teamwork","permalink":"/blog/tags/teamwork","count":1},{"label":"Sector Analysis","permalink":"/blog/tags/sector-analysis","count":1},{"label":"Industry Analysis","permalink":"/blog/tags/industry-analysis","count":1},{"label":"FinanceDatabase","permalink":"/blog/tags/finance-database","count":1},{"label":"Self-Learning","permalink":"/blog/tags/self-learning","count":1},{"label":"PhD Thesis","permalink":"/blog/tags/ph-d-thesis","count":1},{"label":"Neural Networks","permalink":"/blog/tags/neural-networks","count":2},{"label":"Time Series Forecasting","permalink":"/blog/tags/time-series-forecasting","count":1},{"label":"NFT","permalink":"/blog/tags/nft","count":1},{"label":"Giveaways","permalink":"/blog/tags/giveaways","count":1},{"label":"Reddit","permalink":"/blog/tags/reddit","count":1},{"label":"Docker","permalink":"/blog/tags/docker","count":1},{"label":"Jupyter Lab","permalink":"/blog/tags/jupyter-lab","count":1},{"label":"Hugo Website","permalink":"/blog/tags/hugo-website","count":1},{"label":"Trading","permalink":"/blog/tags/trading","count":1},{"label":"Deep Learning","permalink":"/blog/tags/deep-learning","count":1},{"label":"Time Series","permalink":"/blog/tags/time-series","count":1},{"label":"Cross Validation","permalink":"/blog/tags/cross-validation","count":1},{"label":"Movies","permalink":"/blog/tags/movies","count":1},{"label":"Thrillers","permalink":"/blog/tags/thrillers","count":1},{"label":"IMDbPy","permalink":"/blog/tags/im-db-py","count":1},{"label":"Sorting Algorithm","permalink":"/blog/tags/sorting-algorithm","count":1},{"label":"K-means","permalink":"/blog/tags/k-means","count":1},{"label":"Algorithm","permalink":"/blog/tags/algorithm","count":1},{"label":"Travel","permalink":"/blog/tags/travel","count":1},{"label":"Efficiency","permalink":"/blog/tags/efficiency","count":1},{"label":"GPS","permalink":"/blog/tags/gps","count":1},{"label":"Clustering","permalink":"/blog/tags/clustering","count":1},{"label":"Recipes","permalink":"/blog/tags/recipes","count":1},{"label":"Java","permalink":"/blog/tags/java","count":1},{"label":"GUI","permalink":"/blog/tags/gui","count":1},{"label":"Side Project","permalink":"/blog/tags/side-project","count":1},{"label":"Memory Training","permalink":"/blog/tags/memory-training","count":1},{"label":"PAO System","permalink":"/blog/tags/pao-system","count":1},{"label":"Memory Palace","permalink":"/blog/tags/memory-palace","count":1},{"label":"Card Memorisation","permalink":"/blog/tags/card-memorisation","count":1},{"label":"Meme Filter","permalink":"/blog/tags/meme-filter","count":1},{"label":"Image Processing","permalink":"/blog/tags/image-processing","count":1},{"label":"Face Recognition","permalink":"/blog/tags/face-recognition","count":1},{"label":"NeistPoint","permalink":"/blog/tags/neist-point","count":1},{"label":"Clothing Brand","permalink":"/blog/tags/clothing-brand","count":1},{"label":"Sustainability","permalink":"/blog/tags/sustainability","count":1},{"label":"C++","permalink":"/blog/tags/c","count":1},{"label":"Stock Management","permalink":"/blog/tags/stock-management","count":1},{"label":"Stock Market","permalink":"/blog/tags/stock-market","count":2},{"label":"Football","permalink":"/blog/tags/football","count":1},{"label":"Betting","permalink":"/blog/tags/betting","count":1},{"label":"Momentum","permalink":"/blog/tags/momentum","count":1},{"label":"Web Scraping","permalink":"/blog/tags/web-scraping","count":1},{"label":"Beautiful Soup","permalink":"/blog/tags/beautiful-soup","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/ab4c6d72.f0bd6c62.js b/assets/js/ab4c6d72.2cac11bf.js similarity index 58% rename from assets/js/ab4c6d72.f0bd6c62.js rename to assets/js/ab4c6d72.2cac11bf.js index 4c28ba8bb6..5cffedca65 100644 --- a/assets/js/ab4c6d72.f0bd6c62.js +++ b/assets/js/ab4c6d72.2cac11bf.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[72332],{42446:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/ai","page":1,"postsPerPage":5,"totalPages":1,"totalCount":5,"blogDescription":"This is where I drop my thoughts in the form of blogposts!","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[72332],{42446:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/ai","page":1,"postsPerPage":6,"totalPages":1,"totalCount":6,"blogDescription":"This is where I drop my thoughts in the form of blogposts!","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b2b675dd.64e30abc.js b/assets/js/b2b675dd.82f819a9.js similarity index 58% rename from assets/js/b2b675dd.64e30abc.js rename to assets/js/b2b675dd.82f819a9.js index e1d4f05861..c15248979a 100644 --- a/assets/js/b2b675dd.64e30abc.js +++ b/assets/js/b2b675dd.82f819a9.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[90533],{28017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":64,"totalPages":1,"totalCount":64,"blogDescription":"This is where I drop my thoughts in the form of blogposts!","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[90533],{28017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":65,"totalPages":1,"totalCount":65,"blogDescription":"This is where I drop my thoughts in the form of blogposts!","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.a31f6f52.js b/assets/js/b2f554cd.a31f6f52.js new file mode 100644 index 0000000000..5add212f85 --- /dev/null +++ b/assets/js/b2f554cd.a31f6f52.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[11477],{30010:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"the-new-finai-tech-stack","metadata":{"permalink":"/blog/the-new-finai-tech-stack","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-12-15-the-new-finai-tech-stack.md","source":"@site/blog/2023-12-15-the-new-finai-tech-stack.md","title":"The new FinAI Tech Stack","description":"This blog post delves into how our collaboration with MindsDB, Nixtla, LlamaIndex, and Langchain is revolutionizing the financial world. Read on to learn all about the event \\"The New FinAI Tech Stack\\" held last week in SF, California.","date":"2023-12-15T00:00:00.000Z","formattedDate":"December 15, 2023","tags":[{"label":"openbb","permalink":"/blog/tags/openbb"},{"label":"finance","permalink":"/blog/tags/finance"},{"label":"ai","permalink":"/blog/tags/ai"},{"label":"agents","permalink":"/blog/tags/agents"},{"label":"langchain","permalink":"/blog/tags/langchain"},{"label":"llamaindex","permalink":"/blog/tags/llamaindex"},{"label":"mindsdb","permalink":"/blog/tags/mindsdb"},{"label":"nixtla","permalink":"/blog/tags/nixtla"}],"readingTime":5.01,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"the-new-finai-tech-stack","title":"The new FinAI Tech Stack","date":"2023-12-15T00:00:00.000Z","image":"https://github.com/DidierRLopes/my-website/assets/25267873/8dfd85c1-c1c3-4d7b-bd38-ce777c8a8dd7","tags":["openbb","finance","ai","agents","langchain","llamaindex","mindsdb","nixtla"],"description":"This blog post delves into how our collaboration with MindsDB, Nixtla, LlamaIndex, and Langchain is revolutionizing the financial world. Read on to learn all about the event \\"The New FinAI Tech Stack\\" held last week in SF, California."},"nextItem":{"title":"Goodbye OpenBB SDK. Hello OpenBB Platform","permalink":"/blog/goodbye-openbb-sdk-hello-openbb-platform"}},"content":"

\\n \\n

\\n\\n
\\n\\nThis blog post delves into how our collaboration with MindsDB, Nixtla, LlamaIndex, and Langchain is revolutionizing the financial world. Read on to learn all about the event \\"The New FinAI Tech Stack\\" held last week in SF, California.\\n\\n\x3c!-- truncate --\x3e\\n\\n
\\n\\n## Context\\n\\nIn early September, I attended a \u201cFuture of Finance\u201d event in NYC. Despite the presence of well-known financial professionals from top firms in the industry, I found the event lacked practical applications demonstrating how AI is impacting the financial sector.\\n\\nOnce I was back in the Bay Area, I had a barbecue with Jorge and Max from MindsDB and Nixtla, and I was commenting on that experience. To which Jorge promptly replied - why don\u2019t we do it ourselves? So following this discussion, we decided to put the AI in finance event in motion.\\n\\n

\\n \\n

\\n\\nAt OpenBB, AI has become a key component in our approach to refactoring the OpenBB Platform from the ground up. We\'ve recently recruited a Head of AI to help us build our strategy and work on this effort full-time.\\n\\nYou can find more details on this [here](/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig).\\n\\n

\\n \\n

\\n\\n## OpenBB x MindsDB\\n\\nA few days later, I visited the MindsDB office to discuss collaborating with Jorge on potential partnerships. I suggested the idea of gaining access to MindsDB\'s data, a proposal that seemed feasible to implement.\\n\\nEventually, we accomplished this, and I even showcased it during the event last week. The code for this endeavour is open source. Take a look [here](https://github.com/OpenBB-finance/backend-for-terminal-pro/tree/main/mindsdb_python).\\n\\n\\n\\nHowever, Jorge had an even bigger idea. He proposed the concept of granting MindsDB users access to OpenBB data via SQL and harnessing MindsDB\'s capabilities for machine learning. Essentially, we could convert the data frame in runtime into a virtual SQL table, since we have access to the Pydantic model from the OpenBB platform, and we can build that on the go.\\n\\nAfter [tweeting about this](https://twitter.com/didier_lopes/status/1710560436398264756?s=20), I received numerous messages, which validated that there was interest in OBB SQL. So, we set off to work on this. Together with the OpenBB team, we made it easy to access all available inputs/outputs for each endpoint, while the MindsDB team worked on virtualizing the tables. The result can be seen [here](https://github.com/mindsdb/mindsdb/tree/staging/mindsdb/integrations/handlers/openbb_handler).\\n\\nAt the event last week, Jorge shared this work. Additionally, in collaboration with LangChain, he successfully developed a Slack bot with direct access to this data, all accessible within Slack\\n\\n## OpenBB x Nixtla\\n\\nBack in August, Nixtla introduced the initial foundation generative AI model for temporal data at MindsDB. At that time, we received an invitation to showcase the practical applications of TimeGPT in production, and for the first time, we unveiled Terminal Pro briefly.\\n\\nI detailed this experience in a [blog post](https://openbb.co/blog/openbb-incorporates-the-first-generative-AI-model-for-temporal-data-timegpt) and shared a similar demo during the event last week.\\n\\n\\n\\nFollowing that, Max and Azul from Nixtla proceeded to share a presentation where they used OpenBB data to assess price targets from analysts and develop an approach on how it is possible to reduce the bias inherent to price estimates and produce better estimates.\\n\\n## OpenBB x LlamaIndex\\n\\nBack in July, we initiated the development of AskOBB, enabling users to interact with the open source [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal) using natural language. In this effort, we leveraged LlamaIndex and you can see more about it [here](https://openbb.co/blog/breaking-barriers-with-openbb-and-llamaIndex).\\n\\nSo when we started discussing an AI in Finance event, it only made sense to reach out to Jerry and Simon to invite their team to present at the event. And so we did. Jerry ended up presenting their [open source SEC insights repo](https://github.com/run-llama/sec-insights) that uses the Retrieval Augmented Generation (RAG) capabilities of LlamaIndex to answer questions about SEC 10-K & 10-Q documents.\\n\\nAs for the OpenBB Terminal Pro, we demonstrated how we are using LlamaIndex to chat with documents that are uploaded to the OpenBB Terminal Pro. The video below highlights these features.\\n\\n\\n\\n## OpenBB x Langchain\\n\\nAfter attending the AI Engineering Summit event, specifically Harrison\u2019s workshop on how to get started with agents using Langchain, I felt inspired to create an agent on top of the OpenBB platform.\\n\\nSo that very day, I went home and started to work on [this repo](https://github.com/DidierRLopes/openbb-agents). By the end of the day, the agent was already able to perform complex queries.\\n\\nOver time I iterated on it to make the agent more robust, but the improvement on the architecture started to happen after Michael joined OpenBB and he was able to focus on this full-time - the progress can be found on [this open source repo](https://github.com/OpenBB-finance/openbb-agents). An example of a prompt that the agent can answer is:\\n\\n> _Check what are TSLA peers. From those, check which one has the highest market cap. Then, on the ticker that has the highest market cap get the most recent price target estimate from an analyst, and tell me who it was and on what date the estimate was made._\\n\\n
\\n\\nSo at the event, Harrison presented this architecture which heavily relies on Langchain and OpenBB tools.\\n\\n

\\n \\n

\\n\\nLater on, I demonstrated how we can integrate this architecture into OpenBB Copilot and make it available from the OpenBB Terminal Pro.\\n\\n\\n\\n## Wrap up\\n\\nFinally, this was an amazing event organized by MindsDB and a team that put together 5 of the most prominent open-source companies working on problems at the intersection of AI and Finance.\\n\\nYou can rewatch the entire event here:\\n\\n
\\n \\n
\\n\\n
\\n\\nWe\'re considering organizing another event like this soon, possibly even in NYC.\\n\\nAnd if your firm is interested in early access to the OpenBB Terminal Pro, you can reach out to hello@openbb.finance, we\u2019d love to chat."},{"id":"goodbye-openbb-sdk-hello-openbb-platform","metadata":{"permalink":"/blog/goodbye-openbb-sdk-hello-openbb-platform","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-11-29-goodbye-openbb-sdk-hello-openbb-platform.md","source":"@site/blog/2023-11-29-goodbye-openbb-sdk-hello-openbb-platform.md","title":"Goodbye OpenBB SDK. Hello OpenBB Platform","description":"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions.","date":"2023-11-29T00:00:00.000Z","formattedDate":"November 29, 2023","tags":[{"label":"openbb","permalink":"/blog/tags/openbb"},{"label":"platform","permalink":"/blog/tags/platform"},{"label":"sdk","permalink":"/blog/tags/sdk"},{"label":"core","permalink":"/blog/tags/core"},{"label":"extensions","permalink":"/blog/tags/extensions"}],"readingTime":4.08,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"goodbye-openbb-sdk-hello-openbb-platform","title":"Goodbye OpenBB SDK. Hello OpenBB Platform","date":"2023-11-29T00:00:00.000Z","image":"https://github.com/DidierRLopes/my-website/assets/25267873/628d34ee-a2a5-4be7-ae76-4b455bc2f1fd","tags":["openbb","platform","sdk","core","extensions"],"description":"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions."},"prevItem":{"title":"The new FinAI Tech Stack","permalink":"/blog/the-new-finai-tech-stack"},"nextItem":{"title":"OpenBB Bot - our new addition to the OpenBB open source family","permalink":"/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family"}},"content":"

\\n \\n

\\n\\n
\\n\\nToday, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions.\\n\\nThe open source code is available [here](https://github.com/OpenBB-finance/OpenBBTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
\\n\\nIn the ever-evolving landscape of financial data integration and standardization, OpenBB has been revolutionizing the way individuals and organizations handle data from multiple data providers by utilizing our open-source products.\\n\\nWe have been talking about the OpenBB Platform v4 over the past few months. This is such a milestone for our team and for the financial world that we are renaming the OpenBB SDK into the OpenBB Platform.\\n\\nThe OpenBB Platform consists of the OpenBB Core and OpenBB Extensions.\\n\\nLet\u2019s dive into each of these, individually.\\n\\n## OpenBB Core\\n\\nThe OpenBB Core empowers quants and finance developers to create powerful data solutions, offering unparalleled simplicity, flexibility, and scalability. It follows the principle that \\"less is more.\\"\\n\\nThe core will consist of two main components:\\n\\n1. **Data Standardization Infrastructure:** This ensures that regardless of the type of data processed by the core, users can expect consistent conventions and naming. This facilitates a seamless experience, even when the data comes from completely different data providers.\\n\\n2. **Data Source Integration:** Developers will be able to effortlessly connect and integrate various data sources, including databases, APIs, and cloud storage systems.\\n\\n a) **Official partner integrations** will be available by having access to official endpoints from data vendors. This ensures the integrity of the data and provides a reference for what data is available to the end user. Our affiliate program will detail where commercial agreements are in place with OpenBB.\\n\\n b) Additionally, **community provider integrations** will be available, allowing the community to contribute their own integrations for specific use cases or share them with others through the open-source codebase.\\n\\n## OpenBB Extensions\\n\\nOpenBB extensions enhance the capabilities of the OpenBB Core, allowing developers to create custom functionalities and customize the overall Platform according to their specific needs. It is important to note that these extensions can be used as a standalone or integrated with the rest of the openBB ecosystem.\\n\\nThese extensions can be classified into two categories:\\n\\n
    \\n
  • Official extensions developed and maintained by the OpenBB Team, such as the ML/AI Toolkit, Econometrics, and Reports;
  • \\n
  • Community extensions developed by the open-source community. These extensions focus on enabling intelligent data processing and custom workflows that assist users in their investing decision-making process.
  • \\n
\\n\\n\\n## Key advantage of new platform V4\\n\\nBy combining the strengths of OpenBB Core and OpenBB Extensions, the OpenBB Platform offers unparalleled advantages for developers and organizations:\\n\\n
    \\n
  1. Enhanced Flexibility: The modular architecture of the Platform allows developers to choose and integrate only the components they need, avoiding unnecessary complexity.
  2. \\n\\n
  3. Scalability: The OpenBB Platform seamlessly scales with your data integration requirements, ensuring smooth performance even with large volumes of data.
  4. \\n\\n
  5. Extensibility: Developers can create their own extensions and contribute to the OpenBB ecosystem, fostering collaboration and innovation.
  6. \\n\\n
  7. Time and Cost Savings: With its intuitive interface and pre-built components, the OpenBB Platform accelerates development cycles, reducing time-to-market and costs associated with custom solutions.
  8. \\n
\\n\\n
\\n\\nThe reimagined OpenBB SDK into OpenBB Platform (OpenBB Core and OpenBB Extensions), revolutionizes the data integration landscape.\\n\\nBy leveraging the power of OpenBB Core for data integration and standardization, and harnessing the capabilities of OpenBB Extensions for customization and advanced functionality, developers can unlock new possibilities and build cutting-edge data solutions.\\n\\nWhether you are working with diverse data sources or performing complex data transformations, the OpenBB Platform empowers you to conquer any data challenge and propel your organization towards data-driven success.\\n\\nWe invite users and enthusiasts to explore the OpenBB Platform v4, now available for download and installation from the [OpenBB Hub](https://docs.openbb.co/platform/installation), [Github](https://github.com/OpenBB-finance/OpenBBTerminal/tree/develop/openbb_platform), and [PyPI](https://pypi.org/project/openbb/).\\n\\n## Inside OpenBB: A peek into our team emails\\n\\nIn order to adhere to one of OpenBB\'s core values - Transparency - we want you to understand the journey we have undergone and the reason we have dedicated the past 9 months to this endeavor.\\n\\nSo, for the first time, we\'re sharing a confidential email thread that circulated among our entire team. This thread provides insight into our thought process when it comes to handling large projects at OpenBB.\\n\\n

\\n \\n

\\n\\n

\\n \\n

\\n\\n

\\n \\n

\\n\\n

\\n \\n

\\n\\nOver the next few weeks we will keep iterating on our Platform, based on user feedback, so we can keep pushing for a platform that can be adopted by everyone - from professional investors, data scientists, quants, to students.\\n\\nIf you rely on financial data to do financial research or build apps, we want to hear from you!\\n\\nReach out with feedback to support@openbb.finance or join [our Discord](https://discord.com/invite/xPHTuHCmuV)."},{"id":"openbb-bot-our-new-addition-to-the-openbb-open-source-family","metadata":{"permalink":"/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-11-21-openbb-bot-our-new-addition-to-the-openbb-open-source-family.md","source":"@site/blog/2023-11-21-openbb-bot-our-new-addition-to-the-openbb-open-source-family.md","title":"OpenBB Bot - our new addition to the OpenBB open source family","description":"The OpenBB Bot architecture is now open source. Check out our Discord Bot architecture now on GitHub.","date":"2023-11-21T00:00:00.000Z","formattedDate":"November 21, 2023","tags":[{"label":"openbb","permalink":"/blog/tags/openbb"},{"label":"bot","permalink":"/blog/tags/bot"},{"label":"open source","permalink":"/blog/tags/open-source"},{"label":"discord","permalink":"/blog/tags/discord"},{"label":"monetization","permalink":"/blog/tags/monetization"}],"readingTime":4.385,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"openbb-bot-our-new-addition-to-the-openbb-open-source-family","title":"OpenBB Bot - our new addition to the OpenBB open source family","date":"2023-11-21T00:00:00.000Z","image":"https://github.com/DidierRLopes/my-website/assets/25267873/6cde7947-b57e-4863-879b-9032b280fbb9","tags":["openbb","bot","open source","discord","monetization"],"description":"The OpenBB Bot architecture is now open source. Check out our Discord Bot architecture now on GitHub."},"prevItem":{"title":"Goodbye OpenBB SDK. Hello OpenBB Platform","permalink":"/blog/goodbye-openbb-sdk-hello-openbb-platform"},"nextItem":{"title":"Revolutionizing AI at OpenBB with new leader, Michael Struwig","permalink":"/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig"}},"content":"

\\n \\n

\\n\\n
\\n\\nThe OpenBB Bot is now open source. Check out our Discord Bot architecture now on GitHub.\\n\\nThe open source code is available [here](https://github.com/OpenBB-finance/openbb-bot).\\n\\n\x3c!-- truncate --\x3e\\n\\n
\\n\\n## What is the OpenBB Bot, and why did we build it?\\n\\nWhen the OpenBB Terminal first went viral, users were writing online that one of the things missing from our product was a chat feature like other investment platforms provide.\\n\\nHowever, we didn\u2019t understand why the chatting experience needed to be centralized in the application where users research their financial data. Plus, with the ever-growing userbase of apps like Discord, Telegram, Slack, and others, combined with their capabilities to build apps on top, we thought we could do more.\\n\\nWe believe in a future where you can query financial data right from where you are. Meaning you can chat with colleagues, from any of the apps you\u2019re already using.\\n\\nThis is when we partnered with OptionsFamBot (the biggest Discord financial bot that was present in 15k+ servers, reaching 1 M+ users) to build the OpenBB Bot.\\n\\nYou can read more about our launch in August 2022 [here](https://openbb.co/blog/openbb-bot-launch).\\n\\n## Failing to monetize. Failing to grow user base.\\n\\nTo provide OpenBB Bot users with access to 100+ financial commands (including expensive datasets such as the options and dark pool ones) we had to pay not just the data vendors but also for the display rights.\\n\\nThis was relatively expensive, but we considered it a marketing cost since we expected exponential user growth. We expected that since the Bot could be deployed in any server in a few seconds, more users would be exposed to the Bot, bringing the Bot to other servers, and so on...\\n\\n**However, that didn\u2019t happen.**\\n\\nIn September 2022, Discord changed its command syntax to force commands to start with \u201c/\u201d and the user drop was noticeable.\\n\\n

\\n \\n

\\n\\nIn the meantime, with the end of the Covid-19 Pandemic, people started leaving their houses more and spending less time with communities investing online. Other companies with financial bots were experiencing the same: investors spending less time talking about investing on apps like Discord.\\n\\nWe saw a trend that these same companies started increasing their prices to balance out the number of users.\\n\\nThis is when we went in the other direction: we upgraded our free tier package and decreased the price of our paid version. That announcement can be found [here](https://openbb.co/blog/openbb-bot-price-change).\\n\\n

\\n \\n

\\n\\nThis happened at the same time as we added more innovative features to the bot. Features that OpenBB brought to market, while other bots copied from us today.\\n\\nWe created a codebase that was robust and scalable, but still flexible so that it could be quickly tweaked and deployed on other chatting apps.\\n\\nA couple of days after the price reduction, we announced OpenBB Bot for Telegram (read more about this announcement [here](https://openbb.co/blog/openbb-bot-arrives-on-telegram)).\\n\\nWith the growth of Telegram users and crypto communities, we were well posed to capture that market.\\n\\nOr so we thought. But our growth never achieved the numbers we had initially estimated.\\n\\n

\\n \\n

\\n\\nOur conclusion is that the market for financial chatbots is much smaller than what we had originally forecasted. This also meant that our goal with the OpenBB Bot as a marketing tool wasn\u2019t returning the ROI that we were expecting.\\n\\nSo in May 2023 we went pretty much all-in on considering the OpenBB Bot as a marketing expense, and removed the individual paid tier. You can see that announcement [here](https://openbb.co/blog/openbb-bot-free-for-individuals).\\n\\n

\\n \\n

\\n\\nNote that we maintained the control of the Billboard message. This is a feature that allows us to add OpenBB events and announcements to the top of these commands, hence increasing awareness. See below how it looks,\\n\\n

\\n \\n

\\n\\nHowever, even with that change and [adding an AI feature](https://openbb.co/blog/openbb-midjourney-for-investing) to the OpenBB Bot, the user base never grew past what we had hoped.\\n\\nSo we decided to open source the architecture behind the OpenBB Bot.\\n\\n## Decision to open source\\n\\nWhen talking with Roberto Talamas (check out his [OpenBB champion story](https://openbb.co/blog/openbb-champions-roberto-talamas)), he mentioned that he was building his own financial chatbot for his fund from scratch.\\n\\nThat was the trigger we needed to open source our architecture, so the \u201cRobertos\u201d of the world wouldn\u2019t have to start building their chatbot from scratch, but could piggyback on our architecture, which just works (it has never been down since launch and processed over 2.75 M Discord requests).\\n\\nSince we failed to monetize the Bot, and our adoption trajectory never grew past our expectations, open-sourcing the architecture behind the OpenBB Bot made a ton of sense.\\n\\nThis architecture utilizes data from the OpenBB platform (check out last week\u2019s [beta announcement](https://openbb.co/blog/celebrating-the-openbb-platform-v4-beta)) which means that developers can simultaneously get familiar with our platform while seeing how easy it is to pull financial data from OpenBB - effectively growing OpenBB\u2019s ecosystem.\\n\\n

\\n \\n

\\n\\nI\u2019m looking forward to seeing what products are built around the OpenBB Bot in the future.\\n\\nYou can check the repository [here](https://github.com/OpenBB-finance/openbb-bot).\\n\\nWelcome to the OpenBB open source family."},{"id":"revolutionizing-ai-at-openbb-with-new-leader-michael-struwig","metadata":{"permalink":"/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-11-07-revolutionizing-ai-at-openbb-with-new-leader-michael-struwig.md","source":"@site/blog/2023-11-07-revolutionizing-ai-at-openbb-with-new-leader-michael-struwig.md","title":"Revolutionizing AI at OpenBB with new leader, Michael Struwig","description":"With the launch of the OpenBB Terminal Pro approaching, we\'re excited to announce the hiring of Michael Struwig, a Ph.D. with expertise in AI and quantitative finance. Michael will help us to further our AI capabilities, reinforcing our commitment to innovation in the open-source finance space.","date":"2023-11-07T00:00:00.000Z","formattedDate":"November 7, 2023","tags":[{"label":"ai","permalink":"/blog/tags/ai"},{"label":"openbb","permalink":"/blog/tags/openbb"},{"label":"startup","permalink":"/blog/tags/startup"},{"label":"finance","permalink":"/blog/tags/finance"},{"label":"hiring","permalink":"/blog/tags/hiring"}],"readingTime":4.125,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"revolutionizing-ai-at-openbb-with-new-leader-michael-struwig","title":"Revolutionizing AI at OpenBB with new leader, Michael Struwig","date":"2023-11-07T00:00:00.000Z","image":"https://github.com/DidierRLopes/my-website/assets/25267873/e14614a5-7ec0-408d-9d49-85392d82ebeb","tags":["ai","openbb","startup","finance","hiring"],"description":"With the launch of the OpenBB Terminal Pro approaching, we\'re excited to announce the hiring of Michael Struwig, a Ph.D. with expertise in AI and quantitative finance. Michael will help us to further our AI capabilities, reinforcing our commitment to innovation in the open-source finance space."},"prevItem":{"title":"OpenBB Bot - our new addition to the OpenBB open source family","permalink":"/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family"},"nextItem":{"title":"Writing documentation, as a founder, is underrated.","permalink":"/blog/writing-documentation-as-a-founder-is-underrated"}},"content":"

\\n \\n

\\n\\n
\\n\\nWith the launch of the OpenBB Terminal Pro approaching, we\'re excited to announce the hiring of Michael Struwig, a Ph.D. with expertise in AI and quantitative finance. Michael will help us to further our AI capabilities, reinforcing our commitment to innovation in the open-source finance space.\\n\\n\x3c!-- truncate --\x3e\\n\\n
\\n\\nAI will be one of the technologies that will be looked back in hundreds of years as revolutionary, changing how humans live.\\n\\nWith the upcoming launch of the [OpenBB Terminal Pro](https://my.openbb.co/app/pro), we believe AI can push the limits of the way users do investment research.\\n\\nWe believe our ecosystem is positioned at the forefront of finance in terms of investment research. With the inception of the OpenBB Terminal Pro, we are standing at the cusp of a significant leap. Our journey began with [AskOBB](https://openbb.co/blog/breaking-barriers-with-openbb-and-llamaIndex), a tool that facilitated natural language interaction with financial data, but that was just the start.\\n\\nLast month, I wrote a [tweet](https://twitter.com/didier_lopes/status/1706731145776566399) explaining why we spent over $500,000 in revamping our core platform. We are committed to creating the best finance platform for quants/analysts to build with. Some key features are:\\n\\n
    \\n
  • We are data vendor agnostic - we enable them
  • \\n
  • We are open source - everyone can contribute data
  • \\n
  • We standardize data across close to 100 different data providers
  • \\n
  • We put a lot of effort into our documentation
  • \\n
\\n\\nThese features allow us to bring AI to our platform from the ground up, and think about how that will impact the user experience at the core level.\\n\\nFor instance this is an extension that James added to the OpenBB Platform.\\n\\n

\\n \\n

\\n\\nThere are a lot of products out there utilizing generative AI for finance. Most of these can be classified as:\\n\\n
    \\n
  • Startups built around a particular feature - e.g. chatting with news. With LLMs becoming a commodity, over time it will be easy to understand that this is a feature and not a product itself.
  • \\n
  • Larger companies that put a small team together to explore generative AI to be seen as leaders in the space - but without an intention to bring such to market. Often because of outdated tech stack.
  • \\n
\\n\\nWe are different. The [OpenBB Terminal Pro](https://my.openbb.co/app/pro) is the most customizable investment research platform for teams of quants and analysts. It contains generative AI features, but these are embodied inside the app, and treated as part of the user experience.\\n\\nSome examples below:\\n\\n
  • Summarize news articles in seconds
  • \\n
    \\n\\n

    \\n \\n

    \\n\\n
  • Ask more detailed questions to your widgets like earnings transcript or even insider trading
  • \\n
    \\n\\n

    \\n \\n

    \\n\\n
  • And more.
  • \\n
    \\n\\n
    \\n\\nMost of these generative AI features have been started as side projects by our team members, and once we validated the use case with financial professionals we incorporated it into the roadmap. However, we want to double down on this effort and therefore we\'re excited to welcome [Michael](https://twitter.com/MichaelNStruwig) to OpenBB.\\n\\n[Michael](https://twitter.com/MichaelNStruwig) has a PhD in Electrical and Electronic Engineering, has been doing AI for a few years, and prior to joining us was the CEO of Hudson & Thames Quantitative Research.\\n\\nI first heard him from his reading groups:\\n\\n
    \\n \\n
    \\n\\n
    \\n\\n
    \\n \\n
    \\n\\nFrom watching these videos it was clear that Michael is an expert in the field and was capable of understanding deep topics and not solely staying on the surface. So I was keen to have a chat with him. It turns out that he was a big supporter of OpenBB in particular due to our open-source approach to finance and the connection was immediate.\\n\\nMichael met a few of our team members, and a week later we had a signed contract.\\n\\nI couldn\u2019t be more excited to welcome him to the team and see the amazing products we are going to build at OpenBB.\\n\\nHere\u2019s what Michael has to say about joining OpenBB:\\n\\n> _\\"At OpenBB, I\'ve discovered the perfect blend of my core passions: ML/AI, Opensource, and, more recently, quantitative finance. Joining the OpenBB team truly feels like a fairytale come true. I\'ve never encountered a team so singularly-focused and driven. They genuinely \\"get it,\\" and working alongside such talented individuals is incredibly inspiring. I\'m ecstatic to be on board and am eager to help contribute to OpenBB\'s AI initiatives.\\"_\\n\\n
    \\n\\nIf you are excited about the field of open source, AI, and finance, and want to help - you can reach out to Michael on [Twitter](https://twitter.com/MichaelNStruwig)."},{"id":"writing-documentation-as-a-founder-is-underrated","metadata":{"permalink":"/blog/writing-documentation-as-a-founder-is-underrated","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-10-29-writing-documentation-as-a-founder-is-underrated.md","source":"@site/blog/2023-10-29-writing-documentation-as-a-founder-is-underrated.md","title":"Writing documentation, as a founder, is underrated.","description":"This blog post emphasizes the importance of writing documentation as a founder. It discusses how it can give an edge when pitching your product and how it can result in less customer support and a better user experience overall.","date":"2023-10-29T00:00:00.000Z","formattedDate":"October 29, 2023","tags":[{"label":"documentation","permalink":"/blog/tags/documentation"},{"label":"founder","permalink":"/blog/tags/founder"},{"label":"startup","permalink":"/blog/tags/startup"},{"label":"writing","permalink":"/blog/tags/writing"},{"label":"product","permalink":"/blog/tags/product"}],"readingTime":1.23,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"writing-documentation-as-a-founder-is-underrated","title":"Writing documentation, as a founder, is underrated.","date":"2023-10-29T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280558061-219994c7-2b9d-4aae-a661-7131583203e3.png","tags":["documentation","founder","startup","writing","product"],"description":"This blog post emphasizes the importance of writing documentation as a founder. It discusses how it can give an edge when pitching your product and how it can result in less customer support and a better user experience overall."},"prevItem":{"title":"Revolutionizing AI at OpenBB with new leader, Michael Struwig","permalink":"/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig"},"nextItem":{"title":"Building the world\u2019s investment research infrastructure","permalink":"/blog/building-the-worlds-investment-research-infrastructure"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post emphasizes the importance of writing documentation as a founder. It discusses how it can give an edge when pitching your product and how it can result in less customer support and a better user experience overall.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nA founder spending time writing documentation is f*king underrated.\\n\\nWorking on your product documentation may not be the most rewarding task, but I strongly believe that it gives you an edge when pitching your product.\\n\\nGood documentation needs to strike the perfect balance between having enough context and being straight to the point.\\n\\nThis week someone asked us how many people worked on our documentation.\\n\\nThere have been less than 3 people working on it. Our North Star metric has been common sense and putting out documentation that we would enjoy reading/learning from ourselves.\\n\\nEarlier this year I also heard suggestions of hiring a dedicated technical writer.\\n\\nI think that\u2019s BS, at least at the early stages of your company.\\n\\nIt\u2019s the equivalent of saying that you should hire someone to tell your company vision or that the first sales shouldn\u2019t come from the founders.\\n\\nNo one knows your product better than yourself. And users (particularly devs) will notice the love put into documentation. + This will result in less customer support and a better user experience overall.\\n\\nHonestly, a very underrated task if you ask me."},{"id":"building-the-worlds-investment-research-infrastructure","metadata":{"permalink":"/blog/building-the-worlds-investment-research-infrastructure","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-10-19-building-the-worlds-investment-research-infrastructure.md","source":"@site/blog/2023-10-19-building-the-worlds-investment-research-infrastructure.md","title":"Building the world\u2019s investment research infrastructure","description":"This blog post discusses the process and challenges of building the world\'s investment research infrastructure. It provides an insight into the products developed by the OpenBB team and their efficient operation.","date":"2023-10-19T00:00:00.000Z","formattedDate":"October 19, 2023","tags":[{"label":"investment","permalink":"/blog/tags/investment"},{"label":"research","permalink":"/blog/tags/research"},{"label":"infrastructure","permalink":"/blog/tags/infrastructure"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"}],"readingTime":0.955,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"building-the-worlds-investment-research-infrastructure","title":"Building the world\u2019s investment research infrastructure","date":"2023-10-19T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280558008-f9ddc301-9ff4-4a5e-b5b6-45d3726101a3.png","tags":["investment","research","infrastructure","OpenBB"],"description":"This blog post discusses the process and challenges of building the world\'s investment research infrastructure. It provides an insight into the products developed by the OpenBB team and their efficient operation."},"prevItem":{"title":"Writing documentation, as a founder, is underrated.","permalink":"/blog/writing-documentation-as-a-founder-is-underrated"},"nextItem":{"title":"A $500k bet to build the best platform to do AI using financial data","permalink":"/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post discusses the process and challenges of building the world\'s investment research infrastructure. It provides an insight into the products developed by the OpenBB team and their efficient operation.\\n\\nThe open source code is available [here](https://github.com/openbb-finance/OpenBBTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n[OpenBB](http://openbb.co) team is comprised of 18 FTE.\\n\\nWe have 8 products: [OpenBB Platform](https://my.openbb.co/app/platform), [OpenBB Terminal](https://my.openbb.co/app/terminal), [OpenBB Bot](https://my.openbb.co/app/bot), [OpenBB Terminal Pro](https://my.openbb.co/app/pro), OpenBB Excel Add-In, [OpenBB Hub](https://my.openbb.co/app/hub), [OpenBB Docs](https://docs.openbb.co) and [Marketing website](https://openbb.co).\\n\\nThis means that on average we have around 2 people working on each product.\\n\\nThis is particularly wild when you look into the complexity associated with each of these products and being at the forefront of innovation.\\n\\nThat average includes not only engineers but design, product, and marketing.\\n\\nIn addition, our [Discord community](https://openbb.co/discord) has 14k+ people and we often get praised regarding how good our support is.\\n\\nRegardless of our future, I am proud of the team we put together and how efficiently we operate.\\n\\nIt would take a much larger company well over 5 years to build what we built in 2."},{"id":"a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data","metadata":{"permalink":"/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-10-14-a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data.md","source":"@site/blog/2023-10-14-a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data.md","title":"A $500k bet to build the best platform to do AI using financial data","description":"This blog post discusses our $500k investment in building the best platform for AI using financial data. We focus on the rebranding of OpenBB SDK to OpenBB Platform, its features, and the potential payoff of this bet in 2024.","date":"2023-10-14T00:00:00.000Z","formattedDate":"October 14, 2023","tags":[{"label":"AI","permalink":"/blog/tags/ai"},{"label":"Financial Data","permalink":"/blog/tags/financial-data"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"Data Access","permalink":"/blog/tags/data-access"},{"label":"Agents","permalink":"/blog/tags/agents"}],"readingTime":1.9,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data","title":"A $500k bet to build the best platform to do AI using financial data","date":"2023-10-14T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280557960-f07a672a-3129-42ae-96c9-fecb7a88a325.png","tags":["AI","Financial Data","OpenBB","Data Access","Agents"],"description":"This blog post discusses our $500k investment in building the best platform for AI using financial data. We focus on the rebranding of OpenBB SDK to OpenBB Platform, its features, and the potential payoff of this bet in 2024."},"prevItem":{"title":"Building the world\u2019s investment research infrastructure","permalink":"/blog/building-the-worlds-investment-research-infrastructure"},"nextItem":{"title":"Work-life balance is bullsh*t","permalink":"/blog/work-life-balance-is-bullsh-t"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post discusses our $500k investment in building the best platform for AI using financial data. We focus on the rebranding of OpenBB SDK to OpenBB Platform, its features, and the potential payoff of this bet in 2024.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/openbb-agents/tree/main).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nEarlier this year we made a $500k bet.\\n\\nThe [OpenBB SDK](https://my.openbb.co/app/sdk) had access to over 500 data endpoints. But it was built as a second thought (after the Terminal) and it was extremely time-consuming to manage all dependencies.\\n\\nPlus, the SDK had more than just access to data and thus was bloated.\\n\\nSo we invested $500,000 to build it from the ground up and focus on data access.\\n\\nNow the OpenBB Platform (rebrand) is lean and scalable.\\n\\nIt can be used in Python (`pip install openbb==4.0.0a2`) but also for web development. More information [here](https://pypi.org/project/openbb/).\\n\\nAnd honestly, is the door to financial data.\\n\\n**Why am I saying all this?**\\n\\nBecause I predict that in 2024 this bet will have a massive payoff.\\n\\n**The reason?**\\n\\nAgents are going to be big.\\n\\nAnd when they are, financial firms that aren\u2019t leveraging them are going to have to spend a lot of resources to make up for the lack of efficiency.\\n\\n## Enter OpenBB Platform\\n\\n- We are data vendor agnostic (we enable them)\\n- We are open source (everyone can contribute data)\\n- We standardize data across close to 100 different data providers\\n- We put a lot of effort into our documentation\\n\\nThe last 3 points are key for agents, and why people will build agents on top of the OpenBB platform.\\n\\nIn a few hours, I was able to use the following prompt:\\n\\n```console\\n Check what are TSLA peers.\\n From those, check which one has the highest market cap. \\n Then, on the ticker that has the highest market cap get \\n the most recent rating from an analyst. And tell me who \\n was the analyst and what date was it that the rating was done\\n```\\n\\nTo have an agent execute this entire workflow in a 1/10th of the time that it would have taken an analyst to do.\\n\\nCheck for yourself the example below,\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f07a672a-3129-42ae-96c9-fecb7a88a325)"},{"id":"work-life-balance-is-bullsh-t","metadata":{"permalink":"/blog/work-life-balance-is-bullsh-t","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-09-16-work-life-balance-is-bullsh-t.md","source":"@site/blog/2023-09-16-work-life-balance-is-bullsh-t.md","title":"Work-life balance is bullsh*t","description":"This blog post challenges the concept of work-life balance, arguing that success often requires sacrifices in personal time and relationships. It suggests that true balance comes from finding joy in your work and surrounding yourself with like-minded individuals.","date":"2023-09-16T00:00:00.000Z","formattedDate":"September 16, 2023","tags":[{"label":"work-life balance","permalink":"/blog/tags/work-life-balance"},{"label":"success","permalink":"/blog/tags/success"},{"label":"career","permalink":"/blog/tags/career"},{"label":"hard work","permalink":"/blog/tags/hard-work"}],"readingTime":1.445,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"work-life-balance-is-bullsh-t","title":"Work-life balance is bullsh*t","date":"2023-09-16T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280557860-935e058c-7338-48b9-bd1c-bd0e39d85094.png","tags":["work-life balance","success","career","hard work"],"description":"This blog post challenges the concept of work-life balance, arguing that success often requires sacrifices in personal time and relationships. It suggests that true balance comes from finding joy in your work and surrounding yourself with like-minded individuals."},"prevItem":{"title":"A $500k bet to build the best platform to do AI using financial data","permalink":"/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data"},"nextItem":{"title":"Target Market Analysis with the help of LLMs","permalink":"/blog/target-market-analysis-with-the-help-of-llms"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post challenges the concept of work-life balance, arguing that success often requires sacrifices in personal time and relationships. It suggests that true balance comes from finding joy in your work and surrounding yourself with like-minded individuals.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n\\nFor successful individuals, achieving a work-life balance is a luxury often associated with those born into wealth.\\n\\nLet me explain.\\n\\nThere must be a clear inverse correlation between success (let\u2019s say measured by wealth) and the size of your circle of friends.\\n\\n**If you want to be at the top of a field, you must work hard.**\\n\\nEnd.\\n\\nRegardless of what BS people say about work-life balance.\\n\\nYou may be lucky \u2014 right place right time kind of thing. But by default, you need to work hard to expand your luck\u2019s surface.\\n\\nAnd that means that you need to spend your personal time working harder, to be above average.\\n\\nSince time is limited you need to sacrifice time spent outside working hours, otherwise you will only be average.\\n\\nPeople will soon realize that in order to optimize for a successful career, cutting time spent with friends is a necessary evil.\\n\\nPlus, as you become older you\u2019ll prioritize physical health (which impacts your longevity + performance) and your relationship with your partner (which provides the most significant ROI in terms of happiness).\\n\\nSo, I suggest 2 things:\\n\\n- Work on a problem and in a space that you truly enjoy so you don\u2019t consider it work\\n- Build with people who share the same values as you so you consider them friends Once that happens, work-life balance means nothing.\\n\\nWhat\u2019s your take?"},{"id":"target-market-analysis-with-the-help-of-llms","metadata":{"permalink":"/blog/target-market-analysis-with-the-help-of-llms","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-09-10-target-market-analysis-with-the-help-of-llms.md","source":"@site/blog/2023-09-10-target-market-analysis-with-the-help-of-llms.md","title":"Target Market Analysis with the help of LLMs","description":"This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.","date":"2023-09-10T00:00:00.000Z","formattedDate":"September 10, 2023","tags":[{"label":"Target Market Analysis","permalink":"/blog/tags/target-market-analysis"},{"label":"LLMs","permalink":"/blog/tags/ll-ms"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"BCG Matrix","permalink":"/blog/tags/bcg-matrix"},{"label":"GE McKinsey Matrix","permalink":"/blog/tags/ge-mc-kinsey-matrix"},{"label":"Market Attractiveness","permalink":"/blog/tags/market-attractiveness"},{"label":"Competitive Advantage","permalink":"/blog/tags/competitive-advantage"}],"readingTime":9.66,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"target-market-analysis-with-the-help-of-llms","title":"Target Market Analysis with the help of LLMs","date":"2023-09-10T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280557703-72bc62fd-6a65-40fe-a6e4-401ca5658b33.png","tags":["Target Market Analysis","LLMs","OpenBB","BCG Matrix","GE McKinsey Matrix","Market Attractiveness","Competitive Advantage"],"description":"This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage."},"prevItem":{"title":"Work-life balance is bullsh*t","permalink":"/blog/work-life-balance-is-bullsh-t"},"nextItem":{"title":"OpenBB 2 year anniversary","permalink":"/blog/openbb-2-year-anniversary"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/target-market-analysis/tree/main).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nAfter working on [OpenBB](https://openbb.co) for over 2 years, we learned which markets to go after and which markets to ignore. You may think that this is intuition, but it\u2019s actually the data that you gathered from talking with 100+ users and learning from others in the industry.\\n\\nHowever, people who don\u2019t know your business as well as you do (new joiners, advisors, or investors), don\u2019t understand why your target market is X and not Y. Hence, it\u2019s important to backtrace your \u201cexperience\u201d with data.\\n\\nThis blog post will focus on how you can perform target market analysis for your company. I will provide the framework and the code to leverage OpenAI to speed up that research process. All of this will be replicable, and you can do it for your own company.\\n\\n## Context\\n\\nThis framework is utilized for portfolio analysis in corporate strategy to analyze business units or product lines.\\n\\n### BCG Matrix\\n\\nInitially, BCG implemented its own framework, which you can read more about here. In a nutshell:\\n\\n_It uses two variables: relative market share and the market growth rate. By combining these two variables into a matrix, a corporation can plot their business units accordingly and determine where to allocate extra (financial) resources, where to cash out and where to divest._\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f956ae41-8397-4ac0-98a2-122824421888)\\n\\n### GE McKinsey Matrix\\n\\nThen, the GE McKinsey Matrix was invented, which you can read more about here. To put it briefly:\\n\\n_It uses two variables: industry attractiveness and the competitive strength of a business unit. By combining these two variables into a matrix, a corporation can plot their business units accordingly and determine where to invest, where to hold their position, and where to harvest or divest._\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/089f7474-e2c3-41a4-adf9-15956e4e6d06)\\n\\nAs per the blog post, the main difference between these comes from the fact that the latter uses multiple factors that are combined to determine the measure of the two variables: industry attractiveness and competitive strength. Whereas the BCG Matrix only uses 1 variable per axis \u2014 relative market share and market growth rate.\\n\\nThe GE McKinsey Matrix (also known as the Nine-box matrix) has industry attractiveness on the y-axis and competitive strength on the x-axis.\\n\\nFor industry attractiveness, factors to consider can be: Industry size; Long-run growth rate; Industry structure; Industry life cycle; Macro environment; and Market segmentation.\\n\\nFor competitive strength, factors to consider can be: Profitability; Market share; Business growth; Brand equity; Level of differentiation; Firm resources; Efficiency and effectiveness of internal linkages; and Customer loyalty.\\n\\n## How do you build your Matrix?\\n\\nAll the data will be hypothetical. The goal is to share the process and framework. Each company and market will have its own.\\n\\n### 1. Define your factors\\n\\nWhen we talk about market attractiveness, from your company\u2019s perspective, what makes a market attractive? Consider all those factors and list them. Try to list all the factors that have a weight in that equation, but try to keep them under 10; otherwise, it\u2019s too many to have to assess, and at some point, their weight into the attractiveness is negligible.\\n\\nNow do the same for the factors that give your company a competitive advantage.\\n\\n### 2. Weigh each factor\\n \\nNot all factors are created equal. Some factors will influence whether a market is attractive or not. Similarly, for your competitive advantage, what factors give your company a bigger edge?\\n\\nThe goal is to select a weight for each factor so that the sum of the weights for all the factors adds up to 1. The outcome should look something like:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/bbd38ef0-ee6e-4b9d-9f5c-d4871da5b0a9)\\n\\n### 3. Categorize each factor\\n\\nNow you need to decide how granular you want your assessment to be. Initially, at OpenBB, we started with a scale of 1\u20133 where 1 is low, 2 is medium, and 3 is high. However, soon we found this to not be good enough since there was not enough granularity. Thus, we increased the range from 1 to 5.\\n\\nOnce you decide on that range, you need to categorize it in a way that makes sense for each factor. This ensures that everyone on the team is on the same page when it comes to assessing a factor. For instance:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/8878402e-ca4c-4ff0-a769-89c7cd2eefb4)\\n\\nThis Google / Excel spreadsheet should look like:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/7beda8dc-c943-45d5-90f3-ffd19b7982e4)\\n\\n### 4. Select a list of target markets you want to evaluate\\n\\nCreate a new Google spreadsheet / Excel page for each of them. This will allow you to contain all details for each target market on the same page.\\n\\nFor the purposes of this demonstration, we will use \u201cTargetMarket1,\u201d \u201cTargetMarket2,\u201d and \u201cTargetMarket3.\u201d\\n\\n### 5. Assess a target market based on selected factors\\n\\nNow that we have decided on all the factors associated with the target market attractiveness, as well as the competitive advantage, you need to assess each of these based on the target markets that you have selected.\\n\\nEach target market page should look something like this:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/3a6b57aa-77dc-4f59-acd5-0bd0bf06bf27)\\n\\nThe factors and weights are automatically pulled from the \u201cFramework page\u201d built previously.\\n\\nHere you just need to set the rating from 1 to 5 (or according to the range you previously specified) based on the evaluation criteria defined. Each of these ratings is multiplied by the weight, and all of those values are summed up together. If your selected range is from 1 to 5, then it means that the minimum and maximum values are 1 and 5, since the weights add up to 1.\\n\\nNote that the last column allows you to add comments based on any additional information/criteria that you used to make a rating choice.\\n\\n### 6. Discover Total Addressable Market\\n\\nOn the spreadsheet above, you may have seen the total addressable market value. I will address how to find this value in a subsequent post.\\n\\nThis is extremely important because even if the market is really attractive, its size can dictate whether to pursue it or not. Most of the time, you don\u2019t want to be chasing a small market opportunity.\\n\\n### 7. Final matrix / chart\\n\\nOnce you have all this data, you can build the following for each of the target markets:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/72bc62fd-6a65-40fe-a6e4-401ca5658b33)\\n\\nNote that all you need from each target market is:\\n\\n**Competitive advantage** \u2014 the sum of all the factors and their levels multiplied by their weights gives the x-axis.\\n\\n**Target market attractiveness** \u2014 the sum of all the factors and their levels multiplied by their weights gives the y-axis.\\n\\n**Total Addressable Market (TAM)** \u2014 gives the bubble size on the chart.\\n\\nThen you are ready to make a decision on which market you wish to pursue, and you have data to back it up.\\n\\nNote: There are a lot of assumptions, and you\u2019ll never have it perfect. But with several iterations with your team, you\u2019ll gain more confidence in those assumptions over time, ensuring that you are on the right track and pursuing the right opportunity.\\n\\n## Using OpenAI to bounce ideas to assess a target market\\n\\nSometimes, it can be hard to provide a rating for each of the factors, or it would be better to bounce ideas off someone. This is where you can leverage OpenAI\u2019s GPT-4 to help you get started.\\n\\nI built a script that would read from an Excel spreadsheet all the information from the framework page that we have set. That basically means:\\n\\n- All the factors associated with target market attractiveness, and their levels of description\\n- All the factors associated with competitive advantage, and their levels of description\\n\\nThen I prompted GPT-4 to select a level for each of the factors of interest for both attractiveness and competitive advantage, based on what it knows about a specific target market.\\n\\nFor example, let\u2019s say we want to assess the competitive advantage for the target market \u201cHedge Funds\u201d \u2014 this is what the prompt looks like:\\n\\n We want to assess our competitive advantage based in relation \\n with factors where we are have an advantage. \\n \\n Can you classify those for the following target market: \'Hedge Funds\'\\n \\n The factors that we will access this market are presented below: \\n \\n When assessing Data Aggregation, these are the rules:\\n We attribute a value of 5 if We provide all data a market needs\\n We attribute a value of 4 if We provide most data a market needs\\n We attribute a value of 3 if We provide some data a market needs\\n We attribute a value of 2 if We provide very little data a market needs\\n We attribute a value of 1 if We provide no data a market needs\\n \\n When assessing Customization, these are the rules:\\n We attribute a value of 5 if Market will leverage our open source code\\n We attribute a value of 4 if Market will fully customize our platform to make it their own\\n We attribute a value of 3 if Market will customize a bit their platform\\n We attribute a value of 2 if Market will use platform as is and customize after some time\\n We attribute a value of 1 if Market will use platform as is\\n \\n When assessing Automation, these are the rules:\\n We attribute a value of 5 if Allows to save more than 70% of time\\n We attribute a value of 4 if Allows to save 50%-70% of time\\n We attribute a value of 3 if Allows to save 30%-50% of time\\n We attribute a value of 2 if Allows to save 15%-30% of time\\n We attribute a value of 1 if Doesn\'t save any time on automation\\n \\n When assessing Factor4, these are the rules:\\n We attribute a value of 5 if Very high\\n We attribute a value of 4 if High\\n We attribute a value of 3 if Medium\\n We attribute a value of 2 if Low\\n We attribute a value of 1 if Very low\\n \\n When assessing Factor5, these are the rules:\\n We attribute a value of 5 if Very high\\n We attribute a value of 4 if High\\n We attribute a value of 3 if Medium\\n We attribute a value of 2 if Low\\n We attribute a value of 1 if Very low\\n \\n Given this information, can you return a level for each of the factors \\n that is our competitive advantage from a viewpoint of Hedge Funds target market.\\n \\n Please return it in a json dictionary format with the factor and level only. \\n Do not add any other text apart from that. \\n Indent the json with 4 spaces.\\n\\nThen, using the following block of code, we can get OpenAI\u2019s GPT-4 to provide its input:\\n\\n```python\\n response = openai.ChatCompletion.create(\\n model=\\"gpt-4\\",\\n messages=[\\n {\\n \\"role\\": \\"system\\", \\n \\"content\\": \\n \\"\\"\\"\\n You are an outstanding financial analyst and were given the task \\n to perform market research on a possible market segment.\\n The company succces relies on your accuracy to categorize a \\n segment and classify according to the factors and levels specified.\\n \\"\\"\\"\\n },\\n {\\n \\"role\\": \\"user\\", \\n \\"content\\": prompt\\n },\\n ]\\n )\\n print(response.choices[0].message.content)\\n```\\n\\nThis is what the output looks like:\\n\\n```console\\n {\\n \\"Data Aggregation\\": 3,\\n \\"Customization\\": 4,\\n \\"Automation\\": 5,\\n \\"Factor4\\": 2,\\n \\"Factor5\\": 3\\n }\\n```\\n\\n**And that\u2019s it for today.**\\n\\nAll of this code is open source and available on my GitHub, here: https://github.com/DidierRLopes/target-market-analysis/tree/main\\n\\nI hope you find this insightful, I appreciate any feedback as always."},{"id":"openbb-2-year-anniversary","metadata":{"permalink":"/blog/openbb-2-year-anniversary","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-08-20-openbb-2-year-anniversary.md","source":"@site/blog/2023-08-20-openbb-2-year-anniversary.md","title":"OpenBB 2 year anniversary","description":"Two years of OpenBB. A look back at our achievements and growth in the world of open-source finance.","date":"2023-08-20T00:00:00.000Z","formattedDate":"August 20, 2023","tags":[{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"Anniversary","permalink":"/blog/tags/anniversary"},{"label":"Achievements","permalink":"/blog/tags/achievements"},{"label":"Growth","permalink":"/blog/tags/growth"},{"label":"Finance","permalink":"/blog/tags/finance"}],"readingTime":2.805,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"openbb-2-year-anniversary","title":"OpenBB 2 year anniversary","date":"2023-08-20T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280557086-2482411c-1588-41d4-ba7f-72506065f4b5.png","tags":["OpenBB","Anniversary","Achievements","Growth","Finance"],"description":"Two years of OpenBB. A look back at our achievements and growth in the world of open-source finance."},"prevItem":{"title":"Target Market Analysis with the help of LLMs","permalink":"/blog/target-market-analysis-with-the-help-of-llms"},"nextItem":{"title":"How to handle equity top-ups at a seed stage startup","permalink":"/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startup"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nTwo years of OpenBB: A look back at our achievements and growth in the world of open-source finance.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nToday is OpenBB 2 years anniversary of our incorporation. So it\u2019s important to look back and understand the magnitude of what we achieved in 24 months.\\n\\nIn that time we\u2019ve had:\\n\\n- 100k+ downloads of our installer since we started tracking it\\n- 2.5M bot commands have been run on Discord and Telegram from over 40k users\\n- GitHub project grew from 8k stars to 23k+, becoming #1 open source project in the topic of finance\\n- Our Discord group grew from 1k users to 13k+\\n- Our SDK has been pip installed over 25k times\\n- Our team grew from 3 to 19 around the globe\\n- For more, see http://openbb.co/open\\n\\nBut where were we 2 years ago?\\n\\n- Only Gamestonk Terminal, the name OpenBB only appeared when we came out of stealth mode in March 2022\\n- No OpenBB Hub (only launched in May 2023)\\n- No OpenBB SDK (only launched in Dec 2022)\\n- No OpenBB Bot (only launched in July 2022)\\n- No Terminal Pro or Excel Add-In early alpha (development started in 2023)\\n- No SDK v4 which allows community and data providers to build their own data connectors, easily (to be announced soon)\\n- No community routines \u2014 our first feature aimed at community with upvoting and sharing of routines\\n- No open source PyWry \u2014 A web-view rendering library in python we open source in Feb 2023\\n- No OpenBB Champions \u2014 Our way to highlight users that do impressive work on top of our ecosystem\\n- No partnerships with universities, financial societies or investment clubs\\n- No partnerships with data vendors \u2014 now we have close relationships with most vendors you would know\\n\\nIf we only focus on where Gamestonk Terminal was 2 years ago we had:\\n\\n- Static charts using matplotlib (Interactive ones using PyWry was launched in May 2023)\\n- No way for users to run routines from other users from the terminal directly (launched 3 days ago)\\n- No AskOBB feature with LlamaIndex (launched in June 2023)\\n- No way for users to customise the terminal, select default data sources and set their API keys \u2014 all from the Hub\\n- No way to double click an installer and get started in a few minutes \u2014 hassle free\\n- The documentation on markdown files across the repository, today people often praise our documentation in conversations\\n- No AI features, no reports menu, no dashboards menu, no fixed income, no futures, \u2026\\n- And the OpenBB Terminal charts looked like this\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/2c6890ec-f561-4303-8835-addb31590da5)\\n\\nBill Gates said the famous saying:\\n\\n> People overestimate what they can do in one year and underestimate what they can do in 10 years.\\n\\n
    \\n\\nIn fast-paced startups, I think a better sentence would be, \u201cPeople overestimate what they can do in one week and underestimate what they can do in 1 year\u201d.\\n\\nLooking forward to continue building the future of investment research, we\u2019re just getting started.\\n\\nPS: On a personal level within those 2 years: I quit my full-time job to build OpenBB, got 2 dogs, got married and moved to the Bay Area. Life is great \u2764\ufe0f"},{"id":"how-to-handle-equity-top-ups-at-a-seed-stage-startup","metadata":{"permalink":"/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startup","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-08-09-how-to-handle-equity-top-ups-at-a-seed-stage-startup.md","source":"@site/blog/2023-08-09-how-to-handle-equity-top-ups-at-a-seed-stage-startup.md","title":"How to handle equity top-ups at a seed stage startup","description":"In this post, we discuss how to handle equity top-ups at a seed stage startup, providing a step-by-step guide on the implementation process and including links to relevant spreadsheets.","date":"2023-08-09T00:00:00.000Z","formattedDate":"August 9, 2023","tags":[{"label":"equity","permalink":"/blog/tags/equity"},{"label":"startups","permalink":"/blog/tags/startups"},{"label":"seed stage","permalink":"/blog/tags/seed-stage"},{"label":"equity top-ups","permalink":"/blog/tags/equity-top-ups"},{"label":"employee compensation","permalink":"/blog/tags/employee-compensation"}],"readingTime":7.935,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-to-handle-equity-top-ups-at-a-seed-stage-startup","title":"How to handle equity top-ups at a seed stage startup","date":"2023-08-09T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280556975-db55c35d-e5f3-4cfc-b200-5fe2f2690285.png","tags":["equity","startups","seed stage","equity top-ups","employee compensation"],"description":"In this post, we discuss how to handle equity top-ups at a seed stage startup, providing a step-by-step guide on the implementation process and including links to relevant spreadsheets."},"prevItem":{"title":"OpenBB 2 year anniversary","permalink":"/blog/openbb-2-year-anniversary"},"nextItem":{"title":"How to handle equity at a seed-stage startup from Silicon Valley","permalink":"/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this post, we discuss how to handle equity top-ups at a seed stage startup, providing a step-by-step guide on the implementation process and including links to relevant spreadsheets.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nPreviously, I shared how we handle equity at OpenBB in [this post](http://didierlopes.com/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley).\\n\\nThis blog post will continue that discussion and go over how we approach equity top-ups at OpenBB. It will provide a step-by-step guide on the implementation process and include links to relevant spreadsheets that you can use for your own startup.\\n\\nI will continue using the purely fictional example that I introduced in the previous blog post with John Doe.\\n\\nLet\u2019s imagine that John Doe was indeed the right candidate for OpenBB, and on **June 15, 2021**, he was hired and accepted an offer with **2000 options** vesting over the next 4 years with a 1-year cliff. For simplicity, let\u2019s assume that he will vest the 2000 shares by July 1, 2025 (ignoring the additional 2 weeks).\\n\\nThis means that by the end of June 2022, John will have vested 542 shares (13 x 2000 / 48), and for every following month, he will vest 42 shares per month. Note that we only start showing the shares from June 2022 because before that, he was in his cliff period.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/6072f982-94a0-43c1-8183-c62439569d22)\\n\\nIf you do this calculation, you\u2019ll see that it adds up to 2022, whereas John was only granted 2000 shares. This is normal and is due to rounding, thus the shares associated with the last month are updated so that it matches the offer.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/5df51c85-512a-4c7b-8c7b-838a13892a90)\\n\\nIf any of the following situations arise:\\n\\n1. The initial assessment of the candidate was wrong, and they are not an IC but a Sr. IC.\\n2. The employee has exceeded expectations, and their equity no longer reflects the value they bring to the company.\\n3. The employee has other job offers, and you want to reinforce that they are an owner of the company and that their success is important.\\n4. The employee\u2019s vesting period is coming to an end, and they are considering leaving as they joined the company for the potential upside of an exit.\\n\\nOne option you have is to increase cash compensation. However, offering equity (ownership) is often a better option, especially for startups with limited cash resources.\\n\\nIn these situations, you need to consider an equity top-up. This means offering the employee a new equity grant on top of the shares they are currently vesting. There are multiple types of equity grants, but I will focus on the approach we use at [OpenBB](https://openbb.co) and explain how you can implement it as well.\\n\\nFirst, determine how many additional shares you want to grant to the individual and, more importantly, how many shares would be fair for them to vest each month. The former helps determine their stake in the company, while the latter helps assess their value compared to other team members.\\n\\nIn our case, let\u2019s assume it\u2019s February 2023, and John has been with the company for 20 months. We want to reward his contributions and bet on his future at the company, so we decide to grant him an additional 1,500 shares on top of his existing 2,000 shares.\\n\\nIn theory, some companies start a new 4-year vesting period with a 1-year cliff for the second grant. However, the issue with that approach is that the employee will start vesting two grants simultaneously: 2000/48 + 1500/48 shares per month. Once the first grant is fully vested, they will vest a lower amount of shares per month: 1500/48. This means the employee would have less incentive to stay when only the second grant is being executed.\\n\\nTo address this, we ensure that for the next 4 years from the vesting commencement date (VCD) of the second grant, the employee vests the same number of shares each month.\\n\\n## How can we do that?\\n\\n### Manual\\n\\nHere is the information we have:\\n\\n- 1st option grant VCD: **15 June 2021**\\n- 1st option grant shares: **2,000**\\n- 1st option grant schedule: **1/48 per month with 1 year cliff finishing on 30 June 2025**\\n\\nFrom here, we infer that in February 2023, John is vesting 42 shares per month and has already vested 542 shares (after the 1-year cliff) + 294 shares (7 x 42).\\n\\nNow, let\u2019s discuss the decisions we need to make for the second option grant:\\n\\n- 2nd option grant VCD: We want to start it ASAP, to retain employee \u2014 for instance **March 2023**\\n- 2nd option grant shares: **around 1,500**\\n- 2nd option grant schedule: **1/48 per month finishing on 30 March 2027**. Note that we removed the cliff since we know the value the employee brings and that \u201cprotection\u201d/\u201dretainer\u201d can be removed.\\n\\nBy utilizing maths, we can create the following equation:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/6fef3777-e0f4-4f6b-8aec-2beda3548d9e)\\n\\nBy filling in the information that we know, we get:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b6a45d13-ba87-4483-b978-c134de992535)\\n\\nAnd thus we know that we can get the value that makes this happen.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/a59b01d5-ae2f-46b7-8fa1-2ca271c683d1)\\n\\nHowever, we don\u2019t want to give the employee fractional shares each month, so we select a round number around the one that makes him receive around 1,500 additional shares over the course of 4 years.\\n\\nIn this case, that number could be 55. This means that the top-up number would be 13 (55\u201342), except on the last month of vesting for the 1st grant where we need the adjustment.\\n\\nWhen we multiply 55 shares per month for the next 48 months starting in March 2023, that adds up to **2,640**.\\n\\nHowever, the employee was awarded **1,500 shares** (2nd grant) and still has 27 months (from March 2023 to May 2025) to vest 1st grant shares, which corresponds to a total of **1,122 shares** (42 * 26 + 30, remembering the adjustment done for the last month). This total would be **2,622**, which obviously is different from the expected 2,640.\\n\\nTherefore, we update the value of the number of shares given on the 2nd grant so that John receives 55 shares per month. In this case, for that to happen, the 2nd grant has to have a value of 1,573.\\n\\nBut obviously, you don\u2019t need to pick up your calculator every time you do this. I mean, what kind of engineer would I be if I didn\u2019t somehow automate this?\\n\\n### Automated\\n\\nThe spreadsheet below demonstrates what an employee vesting schedule looks like, and below I will write a step-by-step guide so you can fully customize it to your needs.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/db55c35d-e5f3-4cfc-b200-5fe2f2690285)\\n\\n- As a result, **E5** will be updated with 11 months afterward to represent the month before the cliff terminates, which consequently leads to the following months being displayed in **column E**.\\n\\n2. Fill in the 1st grant shares in **B5**\\n\\n- As a result, **G6** is updated with the total shares from the 1st grants vested after the 1st year. The following rows in **column G** are automatically updated until the vesting schedule terminates.\\n\\n3. Adjust **G41** so that the sum of shares in **column G** match the shares from the 1st grant in **B5**.\\n\\n4. Fill in the top up grant vesting commencement date (VCD) in **C6**\\n\\n- As a result, **column H** will automatically get populated based on the value that, when added with the cells in **column G**, returns the value in cell **B19**.\\n\\n- This will also allow us to compute the months that have already been vested from the initial shares in **B11** and consequently calculate the overlap between shares coming from the 1st and 2nd grant in **B12**.\\n\\n5. Fill in the top-up grant shares that you are thinking about offering to the employee in **B6**.\\n\\n- As a result, the same computations that were explained earlier in theory will occur. This will result in a recommendation for the top-up shares in **B15** and consequently the amount of shares that the employee will vest monthly in **B16** so that the amount of top-up grant shares is met.\\n\\n6. It is very likely that the number in **B16** will not be rounded. Hence, we fill **B19** with a rounded version of that number.\\n\\n- As a result, **column H** will be updated so that the total shares (from both grants) in **column F** matches the selected value in **B19**.\\n\\nWhen looking at the total top-up shares in **H67**, that value will no longer match the total top-up shares that we wanted to grant to the employee and that we decided at the beginning in **B6**. This is because we rounded the value and thus impacted the number of shares necessary to achieve that.\\n\\nThe amount of shares needed to update the recommendation in **B16** to the rounded version in **B19** is displayed as an \u201cerror\u201d in **B21**.\\n\\n7. In order to fix that, we simply need to update B6 with the sum of B6 and the error value from B21.\\n\\n- As a result of this, all the values should now match, and the combined total amount of shares given to the employee in **B8** should match the sum of the shares spread across dates in **F67**. Plus, the error should now be null in cell **B21**.\\n\\nAnd that\u2019s it.\\n\\nI hope you found this useful and are able to use it internally to share with your employees so they understand how the top-ups happen at your startup.\\n\\nIf you want access to this Excel template, feel free to reach out to me on Twitter or LinkedIn."},{"id":"how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley","metadata":{"permalink":"/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-08-03-how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley.md","source":"@site/blog/2023-08-03-how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley.md","title":"How to handle equity at a seed-stage startup from Silicon Valley","description":"A step-by-step guide on how to handle equity at a seed-stage startup, using a fictional example from OpenBB.","date":"2023-08-03T00:00:00.000Z","formattedDate":"August 3, 2023","tags":[{"label":"startup","permalink":"/blog/tags/startup"},{"label":"equity","permalink":"/blog/tags/equity"},{"label":"Silicon Valley","permalink":"/blog/tags/silicon-valley"},{"label":"seed-stage","permalink":"/blog/tags/seed-stage"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"}],"readingTime":5.72,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley","title":"How to handle equity at a seed-stage startup from Silicon Valley","date":"2023-08-03T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280556768-c4d5f9ed-d2b4-4faf-802d-1de3e3e83d71.png","tags":["startup","equity","Silicon Valley","seed-stage","OpenBB"],"description":"A step-by-step guide on how to handle equity at a seed-stage startup, using a fictional example from OpenBB."},"prevItem":{"title":"How to handle equity top-ups at a seed stage startup","permalink":"/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startup"},"nextItem":{"title":"Keep track of your startup metrics using a custom iOS widget","permalink":"/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widget"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nA step-by-step guide on how to handle equity at a seed-stage startup, using a fictional example from OpenBB.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nAs a startup founder and CEO, you need to wear multiple hats, from engineering and product to design, marketing, and even finance.\\n\\nToday, I\u2019m going through the details of how we handle equity at OpenBB. This blog post provides a step-by-step guide on the implementation process, including links to relevant spreadsheets that you can reuse for your startup.\\n\\nTo make this post easier to follow, I will create a purely fictional example.\\n\\nJohn Doe, a software engineer from Portugal, has been contributing to the [open source OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal) for a few consecutive weeks. He not only fixes bugs but also adds features that the community has requested through pull requests and on Discord. Additionally, he is a fast learner and gets along well with the current team. This sparks the interest of the OpenBB team because having this open-source contributor work with us full-time would be great, rather than being limited by his current full-time job.\\n\\nFrom here, we set up an initial exploratory call to better understand John Doe as an individual \u2014 what he is passionate about, why he has contributed to the project, and more. We follow up the call with an interview involving engineers to assess his skills and experience. Finally, he joins a call with me, where I sell the vision of the company and explain why what OpenBB is doing matters. At this point, we extend him an offer. Up until this stage, the recruiting process is standard, except for the fact that we have a \u201cfiltered\u201d candidate coming from the open-source community.\\n\\nHowever, as a startup, that offer cannot (or at least should not) consist solely of cash compensation. A startup [operates at a much faster pace](http://www.paulgraham.com/growth.html) and is riskier than a company. Therefore, in exchange for hard work and long hours, you should offer part of the company through equity, allowing the employee to benefit from the upside in case the company achieves a successful exit (IPO or sale).\\n\\nSo, how do we decide on the equity to offer the new hire?\\n\\nIt\u2019s easy. You follow your company Option Guidelines.\\n\\n## Option Guidelines\\n\\nThe Option Guidelines are an Excel spreadsheet approved by the board. In this document, you explicitly create **bands (minimum and maximum range options)** based on the role and stage of the company. Board approval is crucial as it allows you to extend the offer directly without needing permission from the board since the guidelines have already been approved.\\n\\nHere\u2019s what the document looks like:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/c4d5f9ed-d2b4-4faf-802d-1de3e3e83d71)\\nThe total number of shares is random and not representative of OpenBB.\\n\\nFirst, you need to ask yourself what roles your company envisions needing. Within those roles, there are two things to consider:\\n\\n- **Departments:** You may differentiate between Engineering, Marketing, Operations, Sales, Finance, and HR/Admin. You can also add others such as Design, Product, etc. Note that having different departments does not necessarily mean you need different band structures.\\n\\n- **Titles:** You\u2019ll want to be able to \u201ccompare\u201d individuals based on their contributions. For instance, Vice President, Director, Manager, Senior Individual Contributor, and Individual Contributor. Note that if you have fewer titles, the bands should be wider to differentiate individuals with the same title. If you add five levels of Individual Contributors, you\u2019ll want narrower bands.\\n\\n I recommend starting with fewer titles, KISS: keep it simple stupid. Again, having different levels does not necessarily mean the bands need to be mutually exclusive. A Manager does not necessarily have a higher band than a Senior Individual Contributor; this depends on your own company culture.\\n\\nNext, you need to differentiate between **company stages**. This allows you to distinguish employees who join very early when the startup carries the most risk. We distinguish between three stages: Pre-production revenue, Pre-profit with production revenue, and Profitable.\\n\\nOnce all these categories are completed, you should have a similar table to the one shared above. Now, it\u2019s important to fill in the equity percentage. For privacy reasons, I will not provide the specific values for OpenBB but will create a random example.\\n\\nLet\u2019s imagine that OpenBB Charter has a total of 1 million shares (assuming only one class of stock for simplicity). If our priced round values the company at $10 million, this means that each share is valued at $10.\\n\\nOn the top left of the document, we will insert the number of shares, which is 1,000,000. Then, we adjust the % LOW and % HIGH columns, representing the range of company ownership we want to grant to this individual.\\n\\nLet\u2019s go through a fake example for the SW role:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/39ea2b1f-af4b-45b1-be7d-ba88f4c03c40)\\n\\nThe column \u201cLow Shrs\u201d is computed by multiplying the % LOW by the total number of shares. On the other hand, the column \u201cHigh Shrs\u201d is computed by multiplying the % HIGH by the total number of shares. This value is important as it represents the amount stipulated in the contract.\\n\\nLet\u2019s consider a scenario where the company is in the Pre-Profit stage with Production Revenue, and we want to hire an Engineering IC. Based on our assessment of their skillset and fairness in comparison to other team members, we would offer a contract that vests over time between 1000 and 2000 shares.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b84e4085-b26c-41a5-87cc-7667fe279d62)\\n\\nNext, you need to decide on the vesting calendar that the company supports. The most common option is a 4-year vesting schedule with a 1-year cliff. This means that while you begin vesting during your first year, you need to stay with the company for the entire year to be able to exercise those options. The 1-year cliff protects the company from employees leaving early or underperforming.\\n\\nCarta provides a good explanation on how stock options work [here](https://carta.com/blog/equity-101-stock-option-basics/) \u2014 which I recommend to everyone.\\n\\nPlease note that in theory, while the value of these options is $10 per share, the startup will need to conduct a 409a valuation to determine the fair market value of each option, which is likely to be much lower than the initial price, such as $1 per share. And this is the strike price that employees will need to pay to exercise the shares.\\n\\nNote: when selecting the number of shares, use a number that is divisible by the number of months that the employee is vesting, e.g., for a 4-year vesting period that would be 48 (4 x 12), which ensures that employees get the same amount of shares each month, and there\u2019s no need to account for floating numbers.\\n\\nThis is it for today.\\n\\nIn Part II, I will talk about how you can handle equity top-ups.\\n\\nSo follow me if you want to learn more about what that process may look like."},{"id":"keep-track-of-your-startup-metrics-using-a-custom-ios-widget","metadata":{"permalink":"/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widget","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-07-29-keep-track-of-your-startup-metrics-using-a-custom-ios-widget.md","source":"@site/blog/2023-07-29-keep-track-of-your-startup-metrics-using-a-custom-ios-widget.md","title":"Keep track of your startup metrics using a custom iOS widget","description":"Keep track of your startup metrics using a custom iOS widget. This blog post will guide you on how to build a custom iOS widget that displays your startup metrics at all times. The entire code is open source and requires minimal coding skills.","date":"2023-07-29T00:00:00.000Z","formattedDate":"July 29, 2023","tags":[{"label":"iOS","permalink":"/blog/tags/i-os"},{"label":"Startup","permalink":"/blog/tags/startup"},{"label":"Metrics","permalink":"/blog/tags/metrics"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"Scriptable","permalink":"/blog/tags/scriptable"},{"label":"Open Source","permalink":"/blog/tags/open-source"}],"readingTime":3.015,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"keep-track-of-your-startup-metrics-using-a-custom-ios-widget","title":"Keep track of your startup metrics using a custom iOS widget","date":"2023-07-29T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280556605-d5b174c3-2a30-4494-b5ae-a0639fe5374e.png","tags":["iOS","Startup","Metrics","OpenBB","Scriptable","Open Source"],"description":"Keep track of your startup metrics using a custom iOS widget. This blog post will guide you on how to build a custom iOS widget that displays your startup metrics at all times. The entire code is open source and requires minimal coding skills."},"prevItem":{"title":"How to handle equity at a seed-stage startup from Silicon Valley","permalink":"/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley"},"nextItem":{"title":"How to Use OpenAI to Extract Insights from Team Survey","permalink":"/blog/how-to-use-openai-to-extract-insights-from-team-survey"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nKeep track of your startup metrics using a custom iOS widget. This blog post will guide you on how to build a custom iOS widget that displays your startup metrics at all times. The entire code is open source and requires minimal coding skills.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/opensource-scriptable-widget/tree/main).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nIf you have a high level role in your organization, you are likely obsessed over a few metrics that act as the north star for your company. Whether that is MRR, number of customers, GitHub stars, AUM, .. depends on the type and stage of company, and what you are optimizing for.\\n\\nAt [OpenBB](https://openbb.co) we are currently optimizing for [OpenBB Hub](https://my.openbb.co) users, since this is the place where you have access to our entire suite of products. From [OpenBB Terminal](https://my.openbb.co/app/terminal), [OpenBB SDK](https://my.openbb.co/app/sdk), [OpenBB Bot](https://my.openbb.co/app/bot) and soon \u2014 the highly awaited [OpenBB Terminal Pro](https://my.openbb.co/app/pro).\\n\\nSo everyday I spent some time checking our startup [/open page](https://openbb.co/open). However, whenever I had to check these on mobile I had to open up the browser, type the link and then look for the metric of interest.\\n\\nHence, to save time, I built a custom iOS widget that displays these metrics of interest at all times. All I need to do is unlock my phone and *BAM*, they are right there.\\n\\nSo, today, I\u2019ll teach you how you can do the same with minimal coding skills required. I open source the entire code, so that you can get up to speed as fast as possible here: https://github.com/DidierRLopes/opensource-scriptable-widget\\n\\n## Track your open source metrics\\n\\nThis section will provide a plug-and-play example for your open source repository.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/9e9a483d-6264-41fa-afc3-aa4b4946e3e8)\\n\\nThese are the steps necessary to have it working on your iOS device:\\n\\n1/ Download Scriptable app to your iOS device\\n\\n2/ Open Scriptable app and click on the \u201c+\u201d on the top right corner\\n\\n3/ Rename that script to whatever repo you would like to track\\n\\n4/ Copy the code from the file opensource.js on this repository\\n\\n5/ Paste it into that new script on your phone\\n\\n6/ Change the 4 initial parameters from the file:\\n\\n```python\\n const WIDGET_TITLE = \\"openbb.co/open\\"\\n const GITHUB_REPO = \\"OpenBB-finance/OpenBBTerminal\\"\\n const PIP_PACKAGE_NAME = \\"openbb\\"\\n const CACHED_DATA_HOURS = 1\\n```\\n\\n- If you only want to track GitHub stats, do `PIP_PACKAGE_NAME=\\"\\"`.\\n- If you only want to track PiPy stats, do `GITHUB_REPO=\\"\\"`.\\n- The `CACHED_DATA_HOURS` corresponds to the amount of hours where the data is not updated.\\n\\n7/ Run script to make sure that it works using the \u201cplay button\u201d on the bottom right corner\\n\\n8/ Leave the app\\n\\n9/ Leave your finger pressed on the iOS homepage\\n\\n10/ Click on the \u201c+\u201d on the left top corner\\n\\n11/ In the \u201cSearch Widgets\u201d tab look for \u201cScriptable\u201d\\n\\n12/ You will see \u201cRun Script\u201d and there are 3 pages. Select the type of widget size that you are interested in\\n\\n13/ Select \u201cAdd Widget\u201d\\n\\n14/ The widget will appear with the sentence \u201cLong press and edit widget to select the script to run\u201d\\n\\n15/ Do that and then you will have 3 options:\\n\\n- Script \u2014 Select script name that you renamed to earlier\\n- When Interacting \u2014 Select \u201cOpen URL\u201d \u2014 A new field will appear with \u201cURL\u201d then provide the link you want to open you cick on the widget (e.g. http://openbb.co)\\n- Parameter \u2014 If there\u2019s any parameter needed to the script\\n\\n16/ Click outside the window, and you should be all set!\\n\\nFeel free to contribute to the repository with other examples / templates!"},{"id":"how-to-use-openai-to-extract-insights-from-team-survey","metadata":{"permalink":"/blog/how-to-use-openai-to-extract-insights-from-team-survey","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-07-21-how-to-use-openai-to-extract-insights-from-team-survey.md","source":"@site/blog/2023-07-21-how-to-use-openai-to-extract-insights-from-team-survey.md","title":"How to Use OpenAI to Extract Insights from Team Survey","description":"This blog post discusses how to use OpenAI to extract insights from team survey data. It covers the motivation behind the project, the requirements, and the implementation process, including the use of the Slack API and Airtable API for automation.","date":"2023-07-21T00:00:00.000Z","formattedDate":"July 21, 2023","tags":[{"label":"OpenAI","permalink":"/blog/tags/open-ai"},{"label":"Team Survey","permalink":"/blog/tags/team-survey"},{"label":"Insights","permalink":"/blog/tags/insights"},{"label":"Automation","permalink":"/blog/tags/automation"},{"label":"Slack","permalink":"/blog/tags/slack"},{"label":"Airtable","permalink":"/blog/tags/airtable"}],"readingTime":8.01,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-to-use-openai-to-extract-insights-from-team-survey","title":"How to Use OpenAI to Extract Insights from Team Survey","date":"2023-07-21T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280556043-a80c7f1b-f119-4a33-83e3-8eb5aa10e6f2.png","tags":["OpenAI","Team Survey","Insights","Automation","Slack","Airtable"],"description":"This blog post discusses how to use OpenAI to extract insights from team survey data. It covers the motivation behind the project, the requirements, and the implementation process, including the use of the Slack API and Airtable API for automation."},"prevItem":{"title":"Keep track of your startup metrics using a custom iOS widget","permalink":"/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widget"},"nextItem":{"title":"Why the need for an open source investment research platform?","permalink":"/blog/why-the-need-for-an-open-source-investment-research-platform"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post discusses how to use OpenAI to extract insights from team survey data. It covers the motivation behind the project, the requirements, and the implementation process, including the use of the Slack API and Airtable API for automation.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/insights-from-team-survey).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n## Motivation\\n\\nI\u2019ve been wanting to play with the OpenAI API for a while, but I\u2019ve had higher priority tasks. Yesterday, I thought that I could use the day to do this, but I didn\u2019t want to just try it in a notebook. Instead, I wanted to use it in a real project that could save me time.\\n\\nLast week, I posted about how at OpenBB we have developed a monthly team survey and automated the process of requesting information through Slack and Airtable. You can find more on that post [here](/blog/employees-are-leaving-be-proactive-about-employee-feedback).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e1c2c71d-6a6b-4c3b-a0ca-28e848e78e7a)\\n\\nThis made me think that even though I have access to all this data, which OpenBB has made fully available [here](https://openbb.co/open), I still have to spend some time looking at the data to extract insights.\\n\\n\\"Screenshot\\n\\nWhat if I could automate that analysis using OpenAI? This is what I set out to build, and this post will focus on how I went from idea to implementation.\\n\\n## Requirements\\n\\nI already had a notebook that I used to analyze our Airtable data with our team survey in it. However, that analysis was quite \u201cheavy,\u201d and it was not straightforward to extract insights. Thus, one of the requirements was to use OpenAI to analyze the team survey feedback for the current month and highlight anything worth mentioning.\\n\\nAdditionally, I wanted to compare the team\u2019s experience to the prior month to understand if we were improving or not, and identify areas for further improvement. Finally, based on these insights, I wanted OpenAI to suggest what OpenBB, as a company, could do to improve our culture.\\n\\nTo achieve this using an OpenAI model, I could either export the team survey responses from Airtable in CSV and copy-paste them into ChatGPT, or I could automate the data retrieval using the Airtable API. Being an engineer, why would I do something in 5 minutes when I can spend 1 day automating it? \ud83e\udd23\\n\\nLastly, I didn\u2019t want to run this script and have to copy-paste the output into our Slack group so that everyone on the team could have access to the overall analysis and provide feedback/suggestions. Therefore, I would like to have a Slack integration that sends the output in a specific formatted way to our Slack channel.\\n\\nSo, the idea is as follows:\\n\\n
      \\n
    1. Retrieve team feedback responses from Airtable
    2. \\n
    3. Extract insights from the team survey data using OpenAI
    4. \\n
    5. Send the insights output to the OpenBB Slack channel
    6. \\n
    \\n\\n## Implementation\\n\\n### Slack API\\n\\nFirst of all, I went to the [Slack API](https://api.slack.com/apps) page. There, I created an app named \u201cEmployee Voice\u201d and selected the \u201cOpenBB\u201d workspace, as shown below:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d2d88e11-f81b-472f-b073-0aa195e7d9d6)\\n\\nAfter clicking \u201cCreate App\u201d I proceeded to update the display information.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e11533e2-424c-4828-b520-3e5235cc69fb)\\n\\nThen I go into \u201cIncoming Webhooks\u201d and select the channel I\u2019m interested in posting messages to. That should be all the settings you need to configure for your app.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/ed08fcb7-43d7-4510-b43d-13606bcd5d1d)\\n\\nThe webhook URL will be necessary, so I copied it and added it to the following script. For the channel name, I used my personal name, \u201c_Didier Lopes_\u201d, since I was just testing if it worked. As for the message, I used the infamous \u201cHello World\u201d text.\\n\\nHere is a sample that you can use to test whether you can successfully send yourself a direct message using the Slack API.\\n\\n```python\\n SLACK_WEBHOOK_URL=\\n \\n insight=\\"Hello World\\"\\n \\n payload = {\\n \'text\': insight,\\n }\\n \\n req = Request(SLACK_WEBHOOK_URL, json.dumps(payload).encode(\'utf-8\'))\\n try:\\n response = urlopen(req)\\n response.read()\\n \\n print(\\"SUCCESS: Message with insights sent to slack\\\\n\\")\\n except HTTPError as e:\\n print(f\\"Request failed: {e.code} {e.reason}\\\\n\\")\\n except URLError as e:\\n print(f\\"Server connection failed: {e.reason}\\\\n\\")\\n```\\n\\n### Airtable API\\n\\nAt OpenBB, we are using Airtable to automate the monthly team survey questionnaire and store the associated data. I wrote more about that process in [this blog](/blog/employees-are-leaving-be-proactive-about-employee-feedback).\\n\\nNow, I want to have programmatic access to this data.\\n\\nFirstly, I need to obtain the Airtable API key, which you can get from the [Airtable Developer Hub](https://airtable.com/create/tokens). Secondly, I navigate to Airtable and locate the table that contains the data of interest, as shown below:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/91b2ac4a-d18a-4083-a422-bb9c85a3ae8c)\\n\\nThe name of the table, \u201c_OpenBB_monthly_\u201d, corresponds to the \u201cTABLE NAME\u201d that will be necessary. Additionally, when you are on this table view, your URL will have the following format: https://airtable.com/XXX. That XXX is your \u201cBASE ID,\u201d which will be the final element necessary to retrieve data from Airtable.\\n\\nNext, run the following script to ensure that you have access to this data.\\n\\n```python\\n AIRTABLE_API_KEY=\\n AIRTABLE_BASE_ID=\\n AIRTABLE_TABLE_NAME=\\"OpenBB_monthly\\"\\n \\n response = requests.get(\\n url=f\'https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/{AIRTABLE_TABLE_NAME}\',\\n headers={\'Authorization\': f\'Bearer {AIRTABLE_API_KEY}\'}\\n )\\n \\n Check if the data has been loaded correctly\\n if response.status_code == 200:\\n data = response.json()[\\"records\\"]\\n else:\\n print(f\\"Error: {response.status_code}\\")\\n \\n print(data)\\n```\\n\\n### OpenAI API\\n\\nFinally, go to [OpenAI Developer platform](https://platform.openai.com/account/api-keys) and grab your OpenAI API key.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e6e9b5b8-cb5e-4c34-aabb-2027c1f67ad1)\\n\\nOnce you have that, you are pretty much ready to test whether this works or not. In this case, we assume you have access to the data from Airtable, so you can test if the OpenAI code is set up correctly with the following:\\n\\n```python\\n data_previous_month=\\n data_current_month=\\n current_month=\\n \\n openai.api_key=\\n response = openai.ChatCompletion.create(\\n model=\\"gpt-4\\", # you can use a different model\\n messages=[\\n {\\"role\\": \\"system\\", \\"content\\": \\"You are a Chief of Staff with a MSc. in Data analysis and are trying to improve the culture of the company.\\"},\\n {\\"role\\": \\"user\\", \\n \\"content\\": \\n f\\"\\"\\"\\n This table represents the company survey for the previous month: {data_previous_month}\\n \\n This table represents the company survey for this month: {data_current_month}.\\n \\n Based on this data, can you do 3 things:\\n \\n 1. Summarize main differences since last month\\n 2. Summarize main highlights for current month\\n 3. Create suggestions for what could be done to improve those areas\\n \\n Please use the following format for the output:\\n As the title use the following: Insights from team survey in {current_month}.\\n Follow the title by 2 line breaks.\\n Use bullet points within each of the points mentioned above.\\n Between the 3 points, use 1 line breaks, a line with ----------------------- and another line break.\\n Use `` when referring to a component like `Reward` or `Growth`.\\n Do not use asterisks \'*\' or \'**\'.\\n When referring to to Engineering or Product, Marketing, Design, Finance wrap them around asterisk, e.g. _Engineering_.\\n \\"\\"\\"\\n },\\n ]\\n )\\n \\n print(response.choices[0].message.content)\\n```\\n\\n## Glue it together\\n\\nOnce you have the scripts, merging them is straightforward. I will show you what the input vs. output looks like.\\n\\nHere is [OpenBB](http://openbb.co/)\u2019s team survey data from June of 2023:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/cfadfada-6841-4f21-8cbe-689761aa1333)\\n\\nIf I run the script here, as shown below (yes, you guessed it right \u2014 I open-sourced this project as usual. I hope you and your team find it useful):\\n\\n```console\\n $ python extract_insights_from_last_team_survey.py\\n```\\n\\nThis is the expected output if the script runs successfully.\\n\\n```console\\n Loading environment variables...\\n Loading team survey data from Airtable...\\n Processing data from Airtable...\\n Extracting insights from team survey data...\\n Sending insights to Slack through a message...\\n SUCCESS: Message with insights sent to slack\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/17871455-02b0-4b30-867a-2b9efdd97b15)\\n\\n## Automate with GitHub workflow\\n\\nWe\u2019re almost there! It doesn\u2019t make sense for us to manually run this script every month. Plus, software engineers are known for their laziness (which is actually a [virtue of a great programmer](https://thethreevirtues.com/)), so let\u2019s create a GitHub action to automate this process.\\n\\nTo begin, create a file called \u201cmain.yml\u201d in the \u201c.github/workflows\u201d directory.\\n\\n[This workflow](https://github.com/DidierRLopes/insights-from-team-survey/blob/main/.github/workflows/main.yml) will be divided into three main sections:\\n\\n### When\\n\\nSpecifies when this GitHub action should run.\\n\\n```console\\n on:\\n push:\\n branches:\\n - main\\n schedule:\\n - cron: \'0 0 3 * *\'\\n```\\n\\nThe first section, \u201con: push: branches: [main]\u201d means that whenever there is a code push to the \u201cmain\u201d branch, this workflow will be triggered. This feature allows us to quickly test whether the action is functioning as expected.\\n\\nThe \u201cschedule-cron\u201d makes it so that the yaml gets run at a specific dates and times.\\n\\n### Secrets\\n\\nWhat do we need in advance for this to work?\\n\\n```console\\n env:\\n SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}\\n OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}\\n AIRTABLE_API_KEY: ${{ secrets.AIRTABLE_API_KEY }}\\n AIRTABLE_BASE_ID: ${{ secrets.AIRTABLE_BASE_ID }}\\n AIRTABLE_TABLE_NAME: ${{ secrets.AIRTABLE_TABLE_NAME }}\\n```\\n\\nAll of these variables need to be set as action secrets. You can do this by selecting the \u201cSettings\u201d tab above, then going into \u201cScripts and variables,\u201d and selecting \u201cNew repository secret.\u201d Fill in the information accordingly, as shown below:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b0f054a3-4b55-47ac-a34a-678b7edbed86)\\n\\n### Workflow\\n\\nWhat commands are we running with this GitHub action? In our case, these are the ones we are interested in.\\n\\n```console\\n jobs:\\n build:\\n runs-on: ubuntu-latest\\n \\n steps:\\n - name: checkout repo content\\n uses: actions/checkout@v2\\n \\n - name: setup python\\n uses: actions/setup-python@v2\\n with:\\n python-version: 3.9\\n \\n - name: install python packages\\n run: |\\n python -m pip install --upgrade pip\\n pip install python-dotenv\\n pip install pandas\\n pip install openai\\n \\n - name: extract insights from team feedback\\n run: |\\n python extract_insights_from_last_team_survey.py\\n```\\n\\nAnd that\u2019s it! You now have a complete automation pipeline from employee feedback to insights within seconds.\\n\\nI hope you enjoyed reading this post, and I would love to hear your feedback. Do you appreciate the level of technical detail I go into, or would you prefer less?\\n\\nAny comments are very helpful. Thank you!"},{"id":"why-the-need-for-an-open-source-investment-research-platform","metadata":{"permalink":"/blog/why-the-need-for-an-open-source-investment-research-platform","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-07-16-why-the-need-for-an-open-source-investment-research-platform.md","source":"@site/blog/2023-07-16-why-the-need-for-an-open-source-investment-research-platform.md","title":"Why the need for an open source investment research platform?","description":"OpenBB Terminal, an open-source investment research platform, is transforming the financial industry by addressing issues like data licensing, full-price bundle, lack of transparency and customization, and the need for a diverse community. This post explores why open source is crucial for us and the main problems in the space.","date":"2023-07-16T00:00:00.000Z","formattedDate":"July 16, 2023","tags":[{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Investment Research","permalink":"/blog/tags/investment-research"},{"label":"Data Licensing","permalink":"/blog/tags/data-licensing"},{"label":"Transparency","permalink":"/blog/tags/transparency"},{"label":"Community","permalink":"/blog/tags/community"}],"readingTime":4.47,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"why-the-need-for-an-open-source-investment-research-platform","title":"Why the need for an open source investment research platform?","date":"2023-07-16T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280555950-76a539bb-bb5a-46a8-b4ab-d2875a697921.png","tags":["Open Source","Investment Research","Data Licensing","Transparency","Community"],"description":"OpenBB Terminal, an open-source investment research platform, is transforming the financial industry by addressing issues like data licensing, full-price bundle, lack of transparency and customization, and the need for a diverse community. This post explores why open source is crucial for us and the main problems in the space."},"prevItem":{"title":"How to Use OpenAI to Extract Insights from Team Survey","permalink":"/blog/how-to-use-openai-to-extract-insights-from-team-survey"},"nextItem":{"title":"From Open Source to Open Startup","permalink":"/blog/from-open-source-to-open-startup"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nOpenBB Terminal, an open-source investment research platform, is transforming the financial industry by addressing issues like data licensing, full-price bundle, lack of transparency and customization, and the need for a diverse community. This post explores why open source is crucial for us and the main problems in the space.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nHaving a closed source OpenBB Terminal was never on the table.\\n\\nThe [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal) is the platform it is today due to its open source nature. Launched almost 2.5 years ago, the interest on this platform was clear \u2014 aggregating an impressive 4000 stars on GitHub in under 24 hours from launch.\\n\\nThis number kept on growing along with the community (most of which gathers on [our Discord server](http://openbb.co/discord)) and allowed us to create the company OpenBB, see the story [here](http://openbb.co/blog/gme-didnt-take-me-to-the-moon-but-gamestonk-terminal-did).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d7b91689-b820-40bb-88cd-e41e15a227f6)\\n\\nBut why is open source so important for us? To understand this, it\u2019s important for us go over the main problems in the space.\\n\\n
      \\n
    1. Data licensing
    2. \\n
    3. Full-price bundle
    4. \\n
    5. Transparency and customization
    6. \\n
    7. Community
    8. \\n
    \\n\\n## Data licensing\\n\\nCurrent monopolies spend an enormous amount of capital on financial data licensing. There are dozens of different asset classes (equities, options, crypto, NFTs, forex, bonds, ETFs, mutual funds, \u2026) and these often vary based on geography. In addition, alternative datasets have grown a lot in popularity as they can provide a hedge in the market (e.g. a hurricane can impact orange juice futures).\\n\\nThat makes the overall investment research industry a very tough market to compete. Startups cannot disrupt the space without a massive capital injection. Explaining why the data offered by startups usually focuses on a certain asset class, in a certain geography.\\n\\nThis is why OpenBB doesn\u2019t own the data (similar to Uber not owning cars, Airbnb not owning apartments, Deliveroo not owning restaurants). OpenBB wants to be the infrastructure layer between data sources and users.\\n\\nThis is the typical two-sided market, where on the one hand users benefit from having access to multiple datasets in one place, and on the other hand data sources benefit from having users on our platform as they can monetize their data. This allows us to focus on the product while our number of data integrations and users grows.\\n\\n## Full-price bundle\\n\\nCurrent incumbents pricing is usually a complete bundled offering. This means that regardless of what you are utilizing in terms of both breadth and depth, you pay the full price tag. A good analogy is like a restaurant ONLY having a buffet when all you want is a bottle of water, or some chips.\\n\\nWhat happens is that a user ends up paying for data that they are not using. In 2023, this is a very outdated take. Companies are looking to get leaner, and it doesn\u2019t make sense to pay for data that you aren\u2019t leveraging.\\n\\nBeing the infrastructure between users and data sources allows you to create value to both. Users will have access to all the data they want and pay for the ones they use, and data sources will have access to a big pool of users.\\n\\nIn addition some data providers (e.g. a team of machine learning engineers) will not need to create a dashboard for their users to visualize their data and hire a team to start a sales/marketing motion, as they will be able to rely on OpenBB\u2019s infrastructure.\\n\\n## Transparency and customization\\n\\nCurrent incumbents have built several in-house financial models. Although these are often customizable, their customization is typically limited. That is because what is usually customizable are the values/weights, but not necessarily the formulas \u2014 that is kept hidden in their source code. This is an issue because that code cannot be validated and users cannot modify it.\\n\\nWith open source, the story is completely different. Users can see every single line of code and therefore, not only audit the code quality but adapt the models/formulas to their own needs. At the end of the day, there is no point in re-inventing the wheel for financial theory that has been around for decades.\\n\\nBy having the code open source, users can rely on the fact that these formulas have been validated/tested by thousands or millions of users and therefore, there\u2019s a very low chance that these are wrong. In addition, users are more secure because they can investigate the code and check/fix any vulnerabilities.\\n\\n## Community\\n\\nOne of the best parts of open source is the integrated community that it creates. This attracts people from every background, gender or ethnicity. Such a pool of diversity allows for better ideas and pushes a project further. With people from the community being able to contribute, this also drives innovation.\\n\\nOpenBB has been driven a lot by the community so far. What started as a terminal mostly focused on equities, soon evolved into including a broad range of datasets and considering several geographies. For instance: A contributor from Sweeden integrated Avanza API to the mutual funds menu that would only appear if users were looking into mutual funds from Sweden \u2014 this shows the power of community.\\n\\n
    \\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/9c1b32d4-1efb-4dd4-b1fe-3b8be17f3fc4)\\n\\nWe are close to 23,000 stars. If you haven\u2019t already, starring our project would mean the world.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f285e5dc-7765-4aab-8bb8-2e1e58493e86)\\n\\nAny feedback is welcome \ud83d\ude4f\ud83c\udffd"},{"id":"from-open-source-to-open-startup","metadata":{"permalink":"/blog/from-open-source-to-open-startup","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-07-06-from-open-source-to-open-startup.md","source":"@site/blog/2023-07-06-from-open-source-to-open-startup.md","title":"From Open Source to Open Startup","description":"From Open Source to Open Startup. A journey of OpenBB towards transparency in the financial world.","date":"2023-07-06T00:00:00.000Z","formattedDate":"July 6, 2023","tags":[{"label":"open-source","permalink":"/blog/tags/open-source"},{"label":"open-startup","permalink":"/blog/tags/open-startup"},{"label":"transparency","permalink":"/blog/tags/transparency"},{"label":"financial world","permalink":"/blog/tags/financial-world"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"}],"readingTime":4.73,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"from-open-source-to-open-startup","title":"From Open Source to Open Startup","date":"2023-07-06T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280555755-5ae0c633-fe95-481c-85bb-eef15891481f.png","tags":["open-source","open-startup","transparency","financial world","OpenBB"],"description":"From Open Source to Open Startup. A journey of OpenBB towards transparency in the financial world."},"prevItem":{"title":"Why the need for an open source investment research platform?","permalink":"/blog/why-the-need-for-an-open-source-investment-research-platform"},"nextItem":{"title":"Employees are leaving? Be proactive about employee feedback","permalink":"/blog/employees-are-leaving-be-proactive-about-employee-feedback"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nFrom Open Source to Open Startup: A journey of OpenBB towards transparency in the financial world.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nBeing open source isn\u2019t enough, at OpenBB we want to accelerate the transparency in the financial world.\\n\\nI want to start this blogpost by introducing the concept of an open startup. As this phrase can often be interpreted differently, here\u2019s the standard definition that ChatGPT gave me:\\n\\n> _\u201cAn open startup is a company that practices open innovation and transparent communication with its stakeholders, including customers, employees, and investors. This means that the company is willing to share information about its products, services, and business operations with the public and is open to input and feedback from all stakeholders._\\n\\n
    \\n\\n> _Open startups typically have a strong focus on collaboration and community building, and they often use open source technology and principles in their operations. Some open startups may also be structured as cooperative or worker-owned enterprises, in which ownership and decision-making power are shared among employees.\u201d_\\n\\n## Why now?\\n\\nI\u2019ve been learning about the open startup movement for a while now and I always knew that I wanted OpenBB to follow this trend. At the end of the day, I want us to accelerate the openness and transparency in the financial world.\\n\\nBut until recently, this wasn\u2019t one of our top priorities. This all changed when the cryptocurrency exchange FTX collapsed. This was a house of cards and they stood for everything but transparency \u2014 not only with their users but also with their shareholders and team alike!\\n\\nJohn J. Ray III who has spent a career tackling large corporate failures involving allegations of criminal activity (like Enron), was appointed CEO of FTX to deal with the bankruptcy, and this is one of his quotes to the US congress:\\n\\n> _\u201cNever in my career have I seen such an utter failure of corporate controls at every level of an organization, from the lack of financial statements to a complete failure of any internal controls or governance whatsoever\u201d_\\n\\n
    \\n\\nOpenBB wants to pave the way of transparency in the financial world.\\n\\n## Why open?\\n\\n### Transparency\\n\\nTransparency across team, shareholders, users and new hires is key. Everyone can see our growth in the same location; A single source of truth accessible to everyone at all times. We already have our code open source, which shows transparency in our engineering, so it only makes sense for us to behave in the same way with our business.\\n\\n### Accountability\\n\\nEveryone will know how we\u2019re doing, for better or worse. This will make us feel responsible to show accurate sustainable growth as this information becomes public. Since everyone has equity in the company, this will be our own skin in the game.\\n\\nWhen people ask, \u201cHow is OpenBB going?\u201d, this can be answered with a single link to our open page.\\n\\n### Community building\\n\\nEvery company is trying to build a community these days, but building a community is hard. By having all of our information publicly available, anyone from the community will know how we are doing at all times \u2014 similar to what the team, shareholders and investors know.\\n\\nThis helps to build trust in OpenBB and allow us to attract and retain talented employees who value transparency and an open culture.\\n\\n### Marketing\\n\\nUsers will be able to share our open page to share OpenBB metrics with other users, which will help to increase awareness for us.\\n\\nIn addition, we want to become leaders of open culture in the financial world, which is known for being a very closed industry. We want to influence companies in this sector and start a movement.\\n\\n### Fundraising\\n\\nSince starting OpenBB, I\u2019ve met well over 50 different investors, even without actively fundraising. Whilst this is a great way to start relationships, it\u2019s not sustainable as it takes valuable time away from talking with users/customers (and let\u2019s be honest, even developing :slight_smile:). So by having an open page, we will be able to discuss our growth async and more efficiently. And then, when we are actively fundraising, we can focus on the details.\\n\\n## How will it be done?\\n\\nWe are adding all our metrics and stats to [/open](https://openbb.co/open).\\n\\nOur open metrics will contain 4 main distinct sections to start with:\\n\\n#### Social Media metrics\\n\\nTwitter followers, Discord users, LinkedIn followers, YouTube views, Reddit followers. Allows to understand the strength of our community in the social media channels that we focus on.\\n\\n#### Team stats\\n\\nTeam distribution and employee engagement coming soon. Allows to understand where we are based and employee experience at OpenBB\\n\\n#### Product metrics\\n\\nOpenBB Hub users, OpenBB Bot, OpenBB SDK and OpenBB Terminal. Allows to hold us accountable for our user growth and the usage that our products have\\n\\n#### Developer metrics\\n\\nStars, forks, merged pull-requests, closed issues, contributors. Keep up-to-date with our development speed and how engaged the open source community is.\\n\\n
    \\n\\nFor all the metrics that are open source, there will be an \u24d8 in the top right to share information on why this chart was made open source and why it\u2019s important to us.\\n\\nOnce a metric is open, we do not intend to close it ever again, that is why all the metrics we are making public have gone through a thorough reasoning process and there\u2019s enough contextual information to understand its meaning.\\n\\nIf you can think of a metric that you would like to see on our open page, please feel free to DM me."},{"id":"employees-are-leaving-be-proactive-about-employee-feedback","metadata":{"permalink":"/blog/employees-are-leaving-be-proactive-about-employee-feedback","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-06-29-employees-are-leaving-be-proactive-about-employee-feedback.md","source":"@site/blog/2023-06-29-employees-are-leaving-be-proactive-about-employee-feedback.md","title":"Employees are leaving? Be proactive about employee feedback","description":"Employees are leaving? Be proactive about employee feedback. This blogpost discusses the importance of employee feedback and how we at OpenBB are ensuring high employee engagement through a periodic feedback survey.","date":"2023-06-29T00:00:00.000Z","formattedDate":"June 29, 2023","tags":[{"label":"employee engagement","permalink":"/blog/tags/employee-engagement"},{"label":"feedback","permalink":"/blog/tags/feedback"},{"label":"work culture","permalink":"/blog/tags/work-culture"},{"label":"remote work","permalink":"/blog/tags/remote-work"},{"label":"team happiness","permalink":"/blog/tags/team-happiness"}],"readingTime":4.995,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"employees-are-leaving-be-proactive-about-employee-feedback","title":"Employees are leaving? Be proactive about employee feedback","date":"2023-06-29T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280555542-969ecadc-43f8-49ea-ad81-90dad5c3011a.png","tags":["employee engagement","feedback","work culture","remote work","team happiness"],"description":"Employees are leaving? Be proactive about employee feedback. This blogpost discusses the importance of employee feedback and how we at OpenBB are ensuring high employee engagement through a periodic feedback survey."},"prevItem":{"title":"From Open Source to Open Startup","permalink":"/blog/from-open-source-to-open-startup"},"nextItem":{"title":"Hybrid work sucks. It\u2019s worse than remote and office.","permalink":"/blog/hybrid-work-sucks-its-worse-than-remote-and-office"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nEmployees are leaving? Be proactive about employee feedback. This blogpost discusses the importance of employee feedback and how we at OpenBB are ensuring high employee engagement through a periodic feedback survey.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThis blogpost shows the measures we are taking to ensure we have high employee engagement at OpenBB through a periodic feedback survey.\\n\\nWhen we started OpenBB, I was absolutely obsessed about our product. All my focus and time was dedicated to building our suite of products (OpenBB Terminal, OpenBB SDK or OpenBB Bot), or talking about these with our users. I care deeply about the OpenBB team, but I expected everyone to be as motivated as me, 24/7.\\n\\nBut things just don\u2019t work that way. Although we always have a fun quarterly event online, that isn\u2019t enough. Everyone knows that I\u2019m a big fan of remote work, but one clear down side of it is the lack of contact and face to face conversations which makes employee engagement more volatile. I say this, because I believe that when your team is together in the same space, it\u2019s easier to thrive off each others excitement and motivation.\\n\\nSoon enough, I realized that _\u201calone you can go faster, but with a team you can go far\u201d_. This is when I started putting time into understanding what we could be doing better to improve our work culture.\\n\\nSome things that we have now put into place include:\\n\\n- We updated the company values as a team, based on what we currently had that they were proud of and where they would like us to be in the future. In a startup, where the pace is incredibly fast and the team is constantly changing, I strongly believe that the values change over time too.\\n\\n- We had an [OpenBB rap](https://www.youtube.com/watch?time_continue=48&v=ThtSC8s0h6I&embeds_referring_euri=https%3A%2F%2Fopenbb.co%2Fblog&source_ve_path=MzY4NDIsMjg2NjMsMjg2NjY&ab_channel=OpenBB) made by a freestyler for our OpenBB Christmas event.\\n\\n- We started pushing for more transparency. We were already very transparent internally, but now we started to push this value externally too. Everyone in the company has skin in the game, this allows the team to feel as accountable for the metrics as I do. I wrote more about this in this blogpost: [From open source to open startup](/blog/from-open-source-to-open-startup), and I am currently working on the OpenBB Handbook too.\\n\\n- I started having office hours, where I can spend the time with the team chatting about anything (product, strategy, engineering, storytelling, even fundraising). The team knows that I\u2019m usually available, but having that 1 hour blocked gives them the confidence to know that that time booked in the day.\\n\\nHowever, there was something critical missing. I will explain what it is by using what I learned at university (that way I can say that my MSc in Control Systems was indeed useful for OpenBB \ud83d\ude43).\\n\\nWhat we had built is an open loop control system, and it looks something like this:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/783ac9e6-a6e0-40bc-b209-4577e2d816fe)\\n\\nThe problem? open loop systems can be inaccurate and unreliable. More importantly, because there is no feedback mechanism to correct inputs as the controller (leadership) never gets the information that comes out of the system (team engagement).\\n\\nThe key word here is feedback. An office hour session is great, but it\u2019s a poor \u201csensor device\u201d. The reason being that you are opening the door for the team to communicate with you, but that data isn\u2019t significant to extrapolate through the whole team.\\n\\nWe needed feedback. We needed to have a closed-loop system instead of an open one. By that I mean:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/fe1c62a1-82c5-446b-95a2-b2736cea3085)\\n\\nThis allows us to constantly monitor our team happiness, and be able to react when the feedback doesn\u2019t match our desired culture.\\n\\nBut what is this feedback? What do we want to track? We didn\u2019t want to reinvent the wheel, so we looked up to how the best companies do it. In particular, we studied \u201cThe Psychology of Employee Engagement\u201d e-book from Workday written by Phillip Chambers.\\n\\nThis allowed us to come up with the following survey, where the team would reply anonymously to each of the questions with a rating from 1 to 10 where 1 corresponds to \u201cstrongly disagree\u201d and 10 corresponds to \u201cstrongly agree\u201d.\\n\\n- **Accomplishment:** I feel a regular sense of accomplishment\\n- **Autonomy:** I feel that I am given autonomy in the way I complete my tasks\\n- **Meetings:** I feel that I have a good amount of meetings every week. (this question was originally about environment, but due to our remote nature we felt that the amount of meetings was something more important to measure)\\n- **Freedom of Opinions:** I feel that I have a voice in the company and my opinion matters\\n- **Goal Setting:** I feel that both my goals and expectations are set clearly\\n- **Growth:** I feel that I have opportunities to grow professionally\\n- **Management Support:** I feel that my manager cares for me and empowers me\\n- **Meaningful Work:** I feel that my work matters\\n- **Organizational Fit:** I feel like the company values align with mine and we share the same goal\\n- **Peer relationships:** I feel connected with my colleagues and that I can be myself with them\\n- **Recognition:** I feel like I get recognized for my contributions\\n- **Reward:** I feel like I am rewarded fairly for my work\\n- **Strategy:** I feel like the company strategy is being communicated effectively\\n- **Workload:** I feel like I can manage my workload efficiently\\n\\nNow you may be wondering how we made this survey completely automated, the workflow is actually very straightforward and we were able to automate it. Here is what it looks like: Airtable + Slack \u2705\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/024bd126-f9c8-4097-bcaf-63adbea5614b)\\n\\nEven though our salaries don\u2019t compete with the MAMAAs of this world, we believe that: our mission, our innovative products and unique culture are what makes us OpenBB. And why we can retain our talent.\\n\\nYou can find our employee engagement index at: https://openbb.co/company/open/team"},{"id":"hybrid-work-sucks-its-worse-than-remote-and-office","metadata":{"permalink":"/blog/hybrid-work-sucks-its-worse-than-remote-and-office","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-06-12-hybrid-work-sucks-its-worse-than-remote-and-office.md","source":"@site/blog/2023-06-12-hybrid-work-sucks-its-worse-than-remote-and-office.md","title":"Hybrid work sucks. It\u2019s worse than remote and office.","description":"Hybrid work, a combination of remote and office work, is not as beneficial as it seems. This blog post discusses the pros and cons of remote and office work, and why hybrid work might not be the best solution.","date":"2023-06-12T00:00:00.000Z","formattedDate":"June 12, 2023","tags":[{"label":"remote work","permalink":"/blog/tags/remote-work"},{"label":"office work","permalink":"/blog/tags/office-work"},{"label":"hybrid work","permalink":"/blog/tags/hybrid-work"},{"label":"productivity","permalink":"/blog/tags/productivity"},{"label":"work culture","permalink":"/blog/tags/work-culture"}],"readingTime":11.715,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"hybrid-work-sucks-its-worse-than-remote-and-office","title":"Hybrid work sucks. It\u2019s worse than remote and office.","date":"2023-06-12T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280555261-f8b39c06-b71f-465b-b16f-b5d0e7cde1ca.png","tags":["remote work","office work","hybrid work","productivity","work culture"],"description":"Hybrid work, a combination of remote and office work, is not as beneficial as it seems. This blog post discusses the pros and cons of remote and office work, and why hybrid work might not be the best solution."},"prevItem":{"title":"Employees are leaving? Be proactive about employee feedback","permalink":"/blog/employees-are-leaving-be-proactive-about-employee-feedback"},"nextItem":{"title":"Become an OpenBB Champion","permalink":"/blog/become-an-openbb-champion"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nHybrid work, a combination of remote and office work, is not as beneficial as it seems. This blog post discusses the pros and cons of remote and office work, and why hybrid work might not be the best solution.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThis is my hot take for 2023, but bear with me.\\n\\n## Context\\n\\nEveryone on Twitter has been actively discussing that \u201cRemote work failed\u201d, e.g. [this tweet](https://twitter.com/DavidSacks/status/1663958149437743105?s=20) from David Sacks where he refers to [this blogpost](https://flocrivello.com/changing-my-mind-on-remote-about-being-in-san-francisco/), or [this tweet](https://twitter.com/paulg/status/1667580108247277570?s=20) from Paul Graham.\\n\\nWhile I\u2019m not going to pose as an expert on the topic, I feel like I\u2019ve experienced enough to have an opinion. My career so far has been:\\n\\n- 1 year of office work for a public company\\n- 1 year of remote work for a startup, plus a few months of hybrid work for the same startup\\n- 2 years of growing [OpenBB](https://openbb.co/) from 1 to 20 people, all fully remote.\\n\\nLet me first go over the advantages and disadvantages of remote and office work, so that I can focus this blog post on **why hybrid sucks**.\\n\\n## Remote work\\n\\nFirst of all, let\u2019s be pragmatic \u2014 remote works. (Before people comment, of course if you\u2019re a factory worker or similar, this doesn\u2019t apply).\\n\\n### Advantages\\n\\n
      \\n
    1. Increased employee retention and satisfaction: Remote work is seen as a desirable perk, improving job satisfaction and retention rates. You can check OpenBB team engagement here.
    2. \\n
    3. Expanded talent pool: It allows hiring from a global talent pool, resulting in a more diverse and skilled workforce, particularly in open source, where contributors come from all over the world.
    4. \\n
    5. Increased flexibility: Remote work offers employees more control over their schedules, leading to better work-life balance.
    6. \\n
    7. Improved productivity: There are fewer distractions and interruptions, which leads to increased productivity.
    8. \\n
    9. No commuting: Remote work eliminates the need to travel to the office, saving time, money, and energy.
    10. \\n
    11. Cost savings: It reduces expenses for both employees and employers, such as commuting and office-related costs.
    12. \\n
    \\n\\n### Disadvantages\\n\\n
      \\n
    1. Limited face-to-face interaction: Remote work reduces in-person collaboration and social connections among colleagues.
    2. \\n
    3. Communication challenges: Reliance on digital tools may lead to misunderstandings or misinterpretations. There may also be technical issues or connectivity problems.
    4. \\n
    5. Blurred work-life boundaries: Clear separation between work and personal life becomes challenging.
    6. \\n
    7. Potential distractions: Remote work environments expose individuals to various distractions.
    8. \\n
    9. Challenges with collaboration: Coordinating tasks and scheduling can be more difficult remotely.
    10. \\n
    11. Reduced visibility and career advancement opportunities: Remote workers may have limited visibility and access to career growth.
    12. \\n
    \\n\\n### Conclusion\\n\\nRemote works. It\u2019s not for everyone, but it works. It works particularly well when the company culture is built around it. For it to work exceptionally well, it boils down to two main arguments:\\n\\n
      \\n
    1. A strong leadership is necessary to keep the team aligned, motivated, and to create the company\u2019s culture. This helps mainly with the limited face-to-face interaction, challenges with collaboration, and reduced visibility and career advancement opportunities.
    2. \\n
    3. Do not track team members based on time but assess work based on output. Use meritocracy to reward the best team members and let go of low performers early. Remote work is not for everyone, and for those who cannot produce output/value to the company while working remotely, it means they weren\u2019t a good hire in the first place. In my personal opinion, the disadvantages of potential distractions and blurred work-life boundaries come down to the employee and their relationship with remote work, instead of the company.
    4. \\n
    \\n\\n
    \\n\\nSometimes someone may not be producing as much value as expected, for one reason or another. _When you are working remotely, you accept that you will add value to the company, and time is no longer a measure. Thus, the emphasis on output/value becomes much stronger._\\n\\n## Office Work\\n\\nOffice also works.\\n\\n### Advantages\\n\\n
      \\n
    1. Enhanced company culture: Offices contribute to a shared sense of identity and mission.
    2. \\n
    3. Face-to-face collaboration: It allows for immediate interaction, fostering effective teamwork and problem-solving.
    4. \\n
    5. Social interaction: Offices provide opportunities for building relationships with coworkers, enhancing camaraderie.
    6. \\n
    7. Clear work-life boundaries: Physical office spaces establish separation between work and personal life.
    8. \\n
    9. Mentorship and learning: In-person environments facilitate mentorship and hands-on learning.
    10. \\n
    11. Improved supervision: Physical presence aids in monitoring performance and providing timely feedback.
    12. \\n
    \\n\\n### Disadvantages\\n\\n
      \\n
    1. Commuting and transportation issues: Office work often involves commuting, which can lead to time-consuming and stressful travel, traffic congestion, and transportation expenses.
    2. \\n
    3. Lack of flexibility: Office work typically follows a fixed schedule, leaving less room for personal flexibility or adjustments to achieve work-life balance.
    4. \\n
    5. Office politics: Office environments can sometimes involve office politics, conflicts, or gossip that can affect productivity and job satisfaction.
    6. \\n
    7. High overhead costs: Maintaining physical office spaces can be costly for organizations, including expenses related to rent, utilities, and office supplies.
    8. \\n
    9. Limited geographic talent pool: Offices are often location-dependent, which may restrict access to a diverse and global talent pool, potentially limiting the variety of skills and perspectives within a workforce.
    10. \\n
    11. Distractions and interruptions: Open office layouts or noisy work environments can lead to frequent interruptions, reducing focus and productivity.
    12. \\n
    \\n\\n### Conclusion\\n\\nOffice works. Most workers are used to office work, and there\u2019s a reason why it works so well, because it is easy for both the employee and the employer.\\n\\n**From the employee standpoint:** The routine of waking up, commuting, working for eight hours, commuting back, and then enjoying the evening is straightforward and requires minimal scheduling or organization. The job begins when the employee arrives at the office and ends when they leave. However, it\u2019s important to note that this fixed schedule does not necessarily guarantee peak performance throughout the entire workday.\\n\\nFor senior engineers, mentorship and learning opportunities may lead to context switching, disrupting deep focused work. What some refer to social interaction, can be perceived as wasting company resources. While supervision can raise the bar for average workers, top performers do not require constant supervision to excel. So if you\u2019re aiming for top performers, perhaps supervision isn\u2019t really necessary at all?\\n\\n**From the employer standpoint:** Leaders and managers may find it easier to have everyone in the office for quick communication and check-ins. However, relying on in-person communication may result in less documentation, which can be challenging for new joiners. Supervision becomes simpler as managers can track attendance and check on employees throughout the day, but this can also lead to time wasted for both the manager and the person being supervised. (Plus even that supervision allowed \u201cA day in a life of\u201d viral TikToks to highlighted inefficiencies).\\n\\n**In conclusion, I\u2019d say that your average worker will be better in the office, while your top performers will excel further in a remote environment.**\\n\\n> _The question is whether you prefer your top engineers to become 10x more productive working remotely or prefer your average engineers to improve performance by 2x. Personally, I prefer to aim for 10x productivity with top engineers and let go of average ones._\\n\\n## Hybrid Work\\n\\nOk, now that we\u2019ve discussed remote and office work, let\u2019s go over why hybrid work sucks.\\n\\nPeople in general tend to associate hybrid work with the best of remote and the best of office, but I think that the worst of remote and office have more emphasis. Let\u2019s go over the biggest pain points:\\n\\n
      \\n
    1. Decreased productivity: When compared with remote or office, hybrid has lower productivity. This is due to the context switching associated with changing working environments. Personally, I have experienced this and found it frustrating to work until late at night, packing up and thinking about what I needed to carry for the next day, plus commuting. The next day, it took me much longer to get back into the flow of work compared to waking up and immediately continuing with the problem at hand.
    2. \\n
    3. Decreased flexibility: Hybrid work offers less flexibility than remote work but somewhat more than office work. However, this flexibility is often constrained by company policies, such as designated office and remote days or specific rules regarding remote work. When the company dictates the days employees can work remotely, the flexibility becomes somewhat artificial.
    4. \\n
    5. Communication challenges: As mentioned earlier, one of the reasons that office communication is a sword of 2 edges is because while in-person communication can be effective and fast, it often results in less documentation, which can impact new joiners. In a hybrid culture, this issue is so much worse, because it\u2019s hard to get the company aligned into the amount of level of documentation necessary. Plus, when WFH days rotate across divisions and teams, individuals working remotely may suffer from a lack of context that is shared among the team in the office, leading to silos and communication gaps.In addition to that in remote work employees can and expect to have to accommodate for different time zones but when you move people to hybrid the ones that need to go to the office will no longer adjust their times to match the ones WFH based on needs.
    6. \\n
    7. Blurred work-life boundaries: Hybrid work blurs the line between work and personal life. It no longer solely involves working from home and spending time with family but also includes being at work, interacting with co-workers, and commuting. This blurring can make it difficult to establish clear boundaries.
    8. \\n
    9. Limited geographic talent pool: Since you want employees to commute to the office a certain number of times per week or month, you can\u2019t hire them from anywhere. The geographic scope of talent acquisition becomes restricted, potentially limiting access to diverse skills and perspectives.
    10. \\n
    11. Many more distractions: Individuals face distractions both at home when working remotely and in the office from co-workers. PLUS, you get the distractions that come from your co-workers bringing you up to speed if something happened when you weren\u2019t in the office the day before (similar to the additional amount of chit chat that happens on Mondays due to weekend).
    12. \\n
    13. Costs and commuting: You may save some money with some WFH, but often the WFH days don\u2019t even justify going into a lower tier than a monthly subscription to public transports. So you end up spending the same, even if you travel less. This argument is less valid here in the Bay area where most people drive. Plus commuting those 3/4 days a week, is still a pain.When we talk about the employer costs then it\u2019s impossible to get it right. On the one hand you have too few people in the office which means you are overpaying for office space, on the other hand you cannot get everyone in. And this will always be impossible with a growing team + managing the WFH days of each team and division.
    14. \\n
    15. Decreased employee retention and satisfaction: In general, people tend to lean towards either remote work or office work. With hybrid work, those who prefer the office environment may work in the office most days, using WFH as an opportunity for personal tasks and potentially being less productive. On the other hand, those who prefer remote work will aim to WFH as much as possible and may feel dissatisfied with having to go to the office for the remaining days This can create a divide and decrease overall employee satisfaction. Additionally, this is even more pronounced when everyone in the leadership works in the office, since the company tends to follow culture from leaders and will have less incentives to accommodate team members that are not in the office.
    16. \\n
    17. Challenges with supervision: Physical presence in the office often aids in monitoring performance, but it becomes challenging to fairly evaluate the performance of team members in the office versus those working remotely in a hybrid setup. What is the basis that you use to evaluate them? Based on what you see when they are in the office? Do you still create ways to evaluate their output when WFH? Do you still check on them as often when the rest of your team is with you in the office? What about when you are WFH and have half of the team in the office and the other WFH? The amount of complexity that comes from managing this by itself, almost makes hybrid the worst choice.
    18. \\n
    \\n\\n## Conclusion\\n\\nI\u2019m not saying that hybrid work can\u2019t work, but my point is that people tend to use hybrid as the perfect solution between office and remote, and I don\u2019t think it is. In fact, I think for most companies, this is a way to sweep a problem under the rug with a half-baked solution.\\n\\nAs an engineer, I wouldn\u2019t be happy working in an office because I know I could contribute much more to the company by working from home. I\u2019d be \u201cokay\u201d with doing hybrid work in order to continue working for the company, but I would probably start looking elsewhere due to all the aforementioned issues.\\n\\nAs a leader, OpenBB has started as a remote company, and as a result, we have become highly efficient at working remotely, even when dealing with a 9-hour time difference. All team members understand that they need to make compromises with their working hours to accommodate the company\u2019s needs. _So, it ultimately comes down to the type of team you are building and how committed they are to the mission, as well as how you can cultivate such a culture internally._\\n\\nIf your team grew accustomed to working in an office and had to switch to remote due to COVID, and you are noticing a decrease in performance, it may be that your team was not prepared to work remotely. In that case, it makes sense to go back to the office. However, if your team grew while working remotely, and you are not satisfied with their performance, let me tell you that bringing the team back to the office is a half-baked solution. Instead, it would be better to investigate the issue and implement better processes or address underperforming individuals."},{"id":"become-an-openbb-champion","metadata":{"permalink":"/blog/become-an-openbb-champion","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-06-10-become-an-openbb-champion.md","source":"@site/blog/2023-06-10-become-an-openbb-champion.md","title":"Become an OpenBB Champion","description":"Become an OpenBB Champion and join our passionate community. Share your experiences with our innovative products and help us democratize investment research through an open source approach.","date":"2023-06-10T00:00:00.000Z","formattedDate":"June 10, 2023","tags":[{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"OpenBB Champion","permalink":"/blog/tags/open-bb-champion"},{"label":"Investment Research","permalink":"/blog/tags/investment-research"},{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Community","permalink":"/blog/tags/community"}],"readingTime":2.325,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"become-an-openbb-champion","title":"Become an OpenBB Champion","date":"2023-06-10T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280555162-2846370c-0bf8-4694-98e8-90a5c291fa64.png","tags":["OpenBB","OpenBB Champion","Investment Research","Open Source","Community"],"description":"Become an OpenBB Champion and join our passionate community. Share your experiences with our innovative products and help us democratize investment research through an open source approach."},"prevItem":{"title":"Hybrid work sucks. It\u2019s worse than remote and office.","permalink":"/blog/hybrid-work-sucks-its-worse-than-remote-and-office"},"nextItem":{"title":"Streamline your OpenBB Terminal experience with OpenBB Hub","permalink":"/blog/streamline-your-openbb-terminal-experience-with-openbb-hub"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nBecome an OpenBB Champion and join our passionate community. Share your experiences with our innovative products and help us democratize investment research through an open source approach.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nDo you find yourself unable to live without one of OpenBB\u2019s innovative products? Have you pushed the boundaries of our tools and unlocked their full potential? If you answered yes, then this blog post is tailor-made for you!\\n\\nAt [OpenBB](https://openbb.co), we are actively seeking out [OpenBB Champions](https://my.openbb.co/app/hub/champions) \u2014 passionate community members who share our vision of democratizing investment research through an open source approach.\\n\\nWhether you utilize the [OpenBB Terminal](https://my.openbb.co/app/terminal) to streamline your investment research workflow, leverage the [OpenBB SDK](https://my.openbb.co/app/sdk) to create your own internal dashboards and notebooks, or employ the [OpenBB Bot](https://my.openbb.co/app/bot) to extract financial data within your finance community, we want to hear from you!\\n\\nTo qualify as an OpenBB Champion, you need to be an active user of one of our products and be willing to share your valuable experiences with our team. We\u2019re eager to learn more about your journey with OpenBB and how our products have transformed your workflow.\\n\\n

    \\n \\n

    \\n\\n
    \\n\\n**Where\'s what we would like to know:**\\n\\n- Your background\\n- How you heard about OpenBB\\n- Workflow transformation since incorporating OpenBB into your toolkit\\n- Your favorite OpenBB product\\n- Your favorite feature within that product\\n- Future expectations from us\\n- Your end goal \u2014 ultimate objective or milestone\\n\\nAs an OpenBB Champion, your contribution will not go unnoticed. Here are the benefits you\u2019ll receive:\\n\\n### Exposure\\n\\nYour testimonial will be prominently featured on OpenBB\u2019s website, social media channels, and other marketing materials. This exposure will introduce your expertise to a wider audience, increasing your visibility within the investment research community.\\n\\n### Recognition\\n\\nYou will be officially recognized as an OpenBB Champion, highlighting your commitment to innovation and industry-leading practices. This recognition can bolster your credibility and authority in your field of expertise.\\n\\n### Networking\\n\\nAs part of the OpenBB Champion community, you will have exclusive access to networking opportunities with like-minded individuals who share your passion for OpenBB\u2019s products. Forge meaningful connections, exchange ideas, and collaborate with fellow champions to amplify your impact.\\n\\n### Merchandise\\n\\nTo show our appreciation for your support, the OpenBB team will send you exclusive OpenBB merchandise. Wear it proudly and let others know that you are part of our journey.\\n\\n
    \\n\\nIf you meet the requirements and are enthusiastic about becoming an [OpenBB Champion](https://openbb.co/blog?type=champions), we invite you to reach out to us at hello@openbb.finance. Our team will coordinate a podcast session with you.\\n\\nWe look forward to hearing from you."},{"id":"streamline-your-openbb-terminal-experience-with-openbb-hub","metadata":{"permalink":"/blog/streamline-your-openbb-terminal-experience-with-openbb-hub","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-05-25-streamline-your-openbb-terminal-experience-with-openbb-hub.md","source":"@site/blog/2023-05-25-streamline-your-openbb-terminal-experience-with-openbb-hub.md","title":"Streamline your OpenBB Terminal experience with OpenBB Hub","description":"Streamline your OpenBB Terminal experience with OpenBB Hub. Learn about its key features, including API key management, data customization, personalization, and script management.","date":"2023-05-25T00:00:00.000Z","formattedDate":"May 25, 2023","tags":[{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"OpenBB Hub","permalink":"/blog/tags/open-bb-hub"},{"label":"Terminal","permalink":"/blog/tags/terminal"},{"label":"API Key Management","permalink":"/blog/tags/api-key-management"},{"label":"Data Customization","permalink":"/blog/tags/data-customization"},{"label":"Personalization","permalink":"/blog/tags/personalization"},{"label":"Script Management","permalink":"/blog/tags/script-management"}],"readingTime":3.605,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"streamline-your-openbb-terminal-experience-with-openbb-hub","title":"Streamline your OpenBB Terminal experience with OpenBB Hub","date":"2023-05-25T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280555078-abca5151-99f4-4c07-860f-6de8be85125c.png","tags":["OpenBB","OpenBB Hub","Terminal","API Key Management","Data Customization","Personalization","Script Management"],"description":"Streamline your OpenBB Terminal experience with OpenBB Hub. Learn about its key features, including API key management, data customization, personalization, and script management."},"prevItem":{"title":"Become an OpenBB Champion","permalink":"/blog/become-an-openbb-champion"},"nextItem":{"title":"OpenBB Terminal 3.0 - a new interactive way to analyze data","permalink":"/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-data"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nStreamline your OpenBB Terminal experience with OpenBB Hub. Learn about its key features, including API key management, data customization, personalization, and script management.\\n\\nThe open source code is available [here](https://github.com/openbb-finance/OpenBBTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nIf you\u2019re using the OpenBB Terminal, there\u2019s an essential component you shouldn\u2019t miss out on: the [OpenBB Hub](https://my.openbb.co/). In this blog post, we\u2019ll explore the significance of OpenBB Hub and why it truly matters for OpenBB users.\\n\\nBy delving into its key features, we\u2019ll uncover how OpenBB Hub elevates your experience with the OpenBB Terminal, providing you with enhanced capabilities and customization options. Let\u2019s dive in!\\n\\n## Login\\n\\nAs highlighted in our previous blog post [Introducing the OpenBB Hub](https://openbb.co/blog/introducing-the-openbb-hub), the OpenBB Hub is more than just a platform to access the OpenBB product ecosystem; it adds value to each individual product. Specifically, when it comes to the OpenBB Terminal, having an OpenBB Hub account offers tremendous advantages.\\n\\nNotably, the settings and features you configure within the hub persist across terminal updates and even when you log in from a new machine, allowing for a seamless and personalized experience.\\n\\n
    \\n \\n
    \\n\\n## Streamlining API key management\\n\\nA common question we receive is about the source of our data. OpenBB doesn\u2019t own any data; instead, we enable users to access data from various vendors by signing up for plans on their respective websites. This approach allows us to focus on platform development and data standardization while giving users the freedom to pay for the high-quality datasets they desire.\\n\\nPreviously, managing API keys was only accessible through the terminal CLI, which could be suboptimal. To alleviate this, we introduced the capability to manage API keys directly from a web page, reducing friction and putting the focus back on what matters most: access to data.\\n\\n
    \\n \\n
    \\n\\n## Enhanced data customization\\n\\nWith OpenBB Hub, you have the power to set default data sources, enabling you to choose the data vendor that aligns best with your needs for each command within the terminal. This flexibility empowers you to curate your preferred data sources, providing a tailored experience that optimizes your decision-making process.\\n\\n## Infuse personal style into your terminal\\n\\nOpenBB Hub lets you personalize your terminal by customizing its colors to your liking. From the command line interface menu to interactive tables and even charting colors, you have the freedom to create your own custom color scheme. Whether you prefer soothing pastel shades or bold neon colors, the choice is yours.\\n\\nThis feature not only adds a touch of personalization but also ensures a comfortable and visually pleasing experience, reducing eye strain during extended usage. Say goodbye to the standard white background and say hello to a terminal that reflects your unique style.\\n\\n## Effortless routine scripts management\\n\\nWe\u2019ve noticed a growing trend among our users: the development and adoption of routine scripts. These .openbb files contain OpenBB commands and allow users to save their investment research workflows, as well as share them with others.\\n\\nWhile OpenBB Hub provides access to pre-defined scripts developed by our team, which have been extensively used in academia, it also allows you to manage your own scripts. In the near future, we will introduce a community scripts page, fostering script sharing and discussions on individual use cases.\\n\\n
    \\n \\n
    \\n\\n## Final thoughts\\n\\nThe OpenBB Hub has become the central platform where we closely engage with the community, continuously striving to add value to your experience when utilizing our suite of products. We encourage you to share your feedback and ideas with us to help shape the future of OpenBB.\\n\\nJoin the OpenBB Hub today, and spread the word among your peers, so we can grow together and create an even more vibrant community.\\n\\nCheck out the OpenBB Hub user metrics [here](https://openbb.co/company/open?type=hub), and if you missed our recent webinar, you can catch up on all the exciting new features in the video below.\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nWith the [OpenBB Hub](https://my.openbb.co/), you unlock a world of possibilities."},{"id":"openbb-terminal-3-0-a-new-interactive-way-to-analyze-data","metadata":{"permalink":"/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-data","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-05-20-openbb-terminal-3-0-a-new-interactive-way-to-analyze-data.md","source":"@site/blog/2023-05-20-openbb-terminal-3-0-a-new-interactive-way-to-analyze-data.md","title":"OpenBB Terminal 3.0 - a new interactive way to analyze data","description":"A game-changing update to OpenBB Terminal, introducing interactive charts and tables, empowering users with a new way to analyze data.","date":"2023-05-20T00:00:00.000Z","formattedDate":"May 20, 2023","tags":[{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"OpenBB Terminal","permalink":"/blog/tags/open-bb-terminal"},{"label":"Interactive Charts","permalink":"/blog/tags/interactive-charts"},{"label":"Interactive Tables","permalink":"/blog/tags/interactive-tables"},{"label":"Data Analysis","permalink":"/blog/tags/data-analysis"},{"label":"Open Source","permalink":"/blog/tags/open-source"}],"readingTime":3.635,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"openbb-terminal-3-0-a-new-interactive-way-to-analyze-data","title":"OpenBB Terminal 3.0 - a new interactive way to analyze data","date":"2023-05-20T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280555000-742ced72-3eab-4412-9002-27265c937b04.png","tags":["OpenBB","OpenBB Terminal","Interactive Charts","Interactive Tables","Data Analysis","Open Source"],"description":"A game-changing update to OpenBB Terminal, introducing interactive charts and tables, empowering users with a new way to analyze data."},"prevItem":{"title":"Streamline your OpenBB Terminal experience with OpenBB Hub","permalink":"/blog/streamline-your-openbb-terminal-experience-with-openbb-hub"},"nextItem":{"title":"Leaving London to live in San Francisco","permalink":"/blog/leaving-london-to-live-in-san-francisco"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nA game-changing update to OpenBB Terminal, introducing interactive charts and tables, empowering users with a new way to analyze data.\\n\\nThe open source code is available [here](https://github.com/openbb-finance/OpenBBTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nNothing has changed, yet everything is different. A game-changing update empowering users with interactive charts and tables\\n\\nOur commitment to listening to user feedback and continuously improving our platform has led to a major update that will revolutionize the way you analyze data.\\n\\nOne of the main requests from our community has been regarding the interactivity of the charts and tables output by the [OpenBB Terminal](https://my.openbb.co/app/terminal). We are happy to say that we have delivered on this request with a complete overhaul of the terminal plotting library.\\n\\nNot only that, but our engineering team wasn\u2019t happy with the technical solutions available to bring interactivity to the terminal. So, in a true open-source fashion, the team built our own open-source library which will be announced soon.\\n\\n## Interactive charts\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nOne of the most significant additions in this update is the introduction of interactive charts. Gone are the days of static data representations.\\n\\nWith the OpenBB Terminal, you can now immerse yourself in a dynamic visual experience. Hover over specific data points to reveal detailed information, or effortlessly adjust the charts using intuitive pan and zoom capabilities. But that\u2019s not all \u2014 our drawing tools and annotations allow you to highlight crucial data points and ranges, giving you complete control over your analysis.\\n\\nThrough our user interviews, we discovered that many users faced challenges when overlaying financial time series. Taking this into account, we\u2019ve designed our new charting feature to make this process seamless. With the ability to easily overlay time series data and combine it with our powerful data exporting capabilities, OpenBB Terminal empowers you to perform in-depth analysis with unparalleled ease and precision.\\n\\n## Interactive tables\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nWe listened to our users\u2019 concerns about readability when dealing with large tables, and we have addressed these challenges head-on. The OpenBB Terminal now boasts interactive tables that are as aesthetically pleasing as they are functional.\\n\\nLeveraging our innovative open-source project, we have crafted a state-of-the-art table that is easy on the eyes and effortlessly responsive. Sorting, filtering, and manipulating table data has never been easier. This game-changing feature enables you to quickly and efficiently extract insights from vast amounts of data, enhancing your productivity and saving valuable time.\\n\\n## New fixed income menu\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nIn addition to the remarkable advancements in interactivity, we have squashed bugs and introduced a new Fixed Income menu. This means you now have access to an even wider range of data to fuel your analysis. OpenBB Terminal ensures that you are equipped with the right tools to gain a competitive edge in your investment research.\\n\\n## Wrap up - embrace the future of data analysis\\n\\nWe firmly believe that these new features will take your user experience to new heights and unlock a realm of possibilities for data analysis. Our dedicated team has poured countless hours into bringing these cutting-edge features to life, and we cannot wait to witness the impact they will have on your work.\\n\\nTo further amplify our commitment to open source, we will open source a powerful project that taps into web browser functionality from Python, opening up endless opportunities for developers and data enthusiasts.\\n\\nWe value your feedback and are eager to iterate on the OpenBB Terminal to ensure it meets your evolving needs. Reach out to us via email at hello@openbb.finance, Twitter, or Discord and let us know how we can enhance your experience further.\\n\\nIf you missed our exciting webinar unveiling these transformative features, fear not! We\u2019ve got you covered. Watch the video below to catch up and witness firsthand the incredible new capabilities our team has unleashed.\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nWelcome to a new era of data analysis with OpenBB Terminal. Get ready to explore, discover, and gain a competitive edge like never before."},{"id":"leaving-london-to-live-in-san-francisco","metadata":{"permalink":"/blog/leaving-london-to-live-in-san-francisco","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-05-13-leaving-london-to-live-in-san-francisco.md","source":"@site/blog/2023-05-13-leaving-london-to-live-in-san-francisco.md","title":"Leaving London to live in San Francisco","description":"Leaving London to live in San Francisco. A personal journey of relocating and starting a tech company in the heart of Silicon Valley.","date":"2023-05-13T00:00:00.000Z","formattedDate":"May 13, 2023","tags":[{"label":"San Francisco","permalink":"/blog/tags/san-francisco"},{"label":"London","permalink":"/blog/tags/london"},{"label":"Relocation","permalink":"/blog/tags/relocation"},{"label":"Visa Process","permalink":"/blog/tags/visa-process"},{"label":"Startup","permalink":"/blog/tags/startup"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"}],"readingTime":17.515,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"leaving-london-to-live-in-san-francisco","title":"Leaving London to live in San Francisco","date":"2023-05-13T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280554923-1efd7b64-e1cc-474d-b117-f1575a090b13.png","tags":["San Francisco","London","Relocation","Visa Process","Startup","OpenBB"],"description":"Leaving London to live in San Francisco. A personal journey of relocating and starting a tech company in the heart of Silicon Valley."},"prevItem":{"title":"OpenBB Terminal 3.0 - a new interactive way to analyze data","permalink":"/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-data"},"nextItem":{"title":"Fully free financial chatbot","permalink":"/blog/fully-free-financial-chatbot"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nLeaving London to live in San Francisco: A personal journey of relocating and starting a tech company in the heart of Silicon Valley.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n## Background\\n\\nI was born in Geneva, and when I was 8 years old, we moved back to Portugal, which is where my parents are originally from. After spending most of my teenage years in Portugal, I left sunny Lisbon \u2600\ufe0f to pursue a MSc. degree at Imperial College London \ud83d\udcbb. That\u2019s where I\u2019ve been living and working up until now. The main reasons behind my desire to move to San Francisco \u2600\ufe0f \ud83d\udcbb are the weather and the thriving tech ecosystem that surrounds it.\\n\\nDuring the Covid pandemic while in London, I took the opportunity to build my own [personal open source investment research platform](https://github.com/OpenBB-finance/OpenBBTerminal). This project allowed me to secure VC funding and establish a company called [OpenBB](https://openbb.co/). As the CEO of this company, I feel privileged to have the chance to make a lasting impact on the financial industry. Embracing this adventure and collaborating with individuals who are much smarter than I am is the least I can do for our team and for OpenBB.\\n\\nAs a first-time founder, I often find myself feeling slightly behind, which is why I\u2019m eager to absorb as much experience and knowledge as possible from other successful entrepreneurs. This is also why I managed to convince my wife and our dogs to join me in packing our bags and embarking on this journey into the unknown, much like my Portuguese ancestors did centuries ago \ud83d\udea2.\\n\\nNow, let\u2019s dive into what truly matters. This will be a lengthy ride, so make sure you\u2019re prepared for the journey ahead.\\n\\n## VISA\\n\\nFirst of all, you need to determine which visa you are eligible for in order to live and work in the US. You can find more information on this topic [here](https://travel.state.gov/content/travel/en/us-visas.html).\\n\\nIn my case, I decided to apply for an \u201cO-1 Visa: Individuals with Extraordinary Ability or Achievement\u201d and specifically highlighted my extraordinary ability in the field of Computer Science, specifically within the subfield of Automated Systems. It is crucial to specify a particular field to make the defense process smoother.\\n\\nI had the privilege of working with an exceptional immigration lawyer who assisted me in crafting my case, significantly increasing my chances of a successful approval. Here is a portion of the O-1 Petition that was submitted:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/809bc844-503c-42c0-a4fe-fe26a1944d17)\\n\\nAs you can see, there is quite a bit of paperwork required to support your case. In my situation, I needed the following documents: Curriculum Vitae, university grades, transcripts and diplomas, LinkedIn and GitHub profiles, posts that gained viral attention on platforms like Reddit and HackerNews, podcasts and conferences where I had spoken, projects that received online praise, any media coverage I had received, scholarly scientific publications, expert opinion letters, and even emails or direct messages from venture capitalists or professionals in the industry.\\n\\nEssentially, any relevant evidence is used to strengthen your case. For me, the most crucial elements were the expert opinion letters provided by our lead investor, former colleagues, or respected individuals in the field who were familiar with my work, as well as the research papers I had published and the media coverage I had received.\\n\\nOnce my O-1 visa was approved, I simply needed to take my passport to the US embassy in London to obtain the visa stamp. It\u2019s worth noting that if the wait time at the US embassy is lengthy, you have the option to visit another US embassy in another country where the process may be faster.\\n\\n## Arriving to the country\\n\\nI arrived in California on my own initially, with the plan for my wife and dogs to join me later. Thankfully, I had some contacts in California who provided me with their phone number and house address, which was helpful for getting settled. Since I didn\u2019t have a phone before finding an apartment, I had to rely on roaming data using my plan from the UK, which resulted in additional expenses.\\n\\nI would suggest either having a good deal for data roaming and international calls outside your country or obtaining a prepaid US phone. The latter is especially important if you\u2019re traveling alone because I often encountered registration forms that didn\u2019t accept foreign phone numbers.\\n\\nRegarding payments, I used my Revolut VISA card, which offers excellent foreign exchange rates for converting pounds to dollars. It\u2019s worth noting that I couldn\u2019t open a US bank account without a Social Security Number (SSN).\\n\\n### Social Security Number (SSN)\\n\\nIf you know someone in the US, it is advisable to apply for a Social Security Number (SSN) as soon as possible and provide their address and contact information if you don\u2019t have a US address of your own. An SSN is necessary for various purposes, and it may take up to two weeks for the card to arrive. When going to you nearest Social Security Administration (SSA) office, I would suggest arriving 30 minutes before opening hours to avoid long queues.\\n\\nTo apply for an SSN, you will need to bring the following documents to the SSA office: your passport, the I-797 form (O-1 visa approval notice), and the I-94 form (arrival record in the US).\\n\\n### Transportation\\n\\nI had the fortunate opportunity of having a friend lend me a car as soon as I arrived in California, and it made my life ten times easier. I highly recommend having something lined up in terms of transportation, as having a car enables you to get anywhere you need to go much more efficiently. To ensure I was covered, I simply needed to arrange car insurance. I opted for [Progressive](https://www.progressive.com/), and the process was quick and straightforward.\\n\\nWhile settling in, I occasionally relied on public transportation instead of driving, especially when traveling to the center of San Francisco. It took me some time to adjust to driving in the US, so public transport was a convenient alternative. If you plan on using public transportation services like BART or Caltrain, I suggest visiting [this website](https://www.iliveinthebayarea.com/knowledge-center/transit/) that provides information on available transportation options. It\u2019s also a good idea to purchase a [Clipper card](https://www.clippercard.com/), which allows you to load funds and easily tap it when boarding.\\n\\nAdditionally, if you anticipate passing through tolls, bridges, or utilizing the fast lane on the freeway, I recommend looking into acquiring a [Fastrack transponder](https://www.thetollroads.com/accounts/fastrak/transponder/) for a more seamless experience.\\n\\n## Finding an apartment\\n\\nApartment hunting proved to be quite stressful, considering that every day spent searching meant unnecessary expenses piling up while I still had my company to manage.\\n\\nUsing Uber for transportation was convenient and efficient, but the costs could add up quickly with multiple trips. To save money, I recommend scheduling house viewings on the same day in specific areas of interest and simply walking from one location to another.\\n\\nWhile dealing with lease agents, I encountered a mix of competence levels. Some were highly efficient, while others were less so. If you\u2019re genuinely interested in a particular apartment, it\u2019s important to exert some pressure to keep the process moving forward. Don\u2019t hesitate to call and inquire about updates.\\n\\nI was fond of the first house we saw, so I promptly paid $300, which covered certain fees. These fees were refundable if we decided not to proceed, but more importantly, they ensured that the house would be taken off the market. At this stage, both the agents and I wanted the process to move as quickly as possible. In our case, the target timeframe was three business days; if the process exceeded that, the house would be made available again.\\n\\nEven if you believe you\u2019ve found the perfect apartment, I still recommend continuing your search until the lease contract is signed. It\u2019s crucial to secure the apartment before assuming it\u2019s yours.\\n\\nBefore obtaining the keys, we had several tasks to complete: making the first payment, setting up utilities ([PG&E](https://www.pge.com/) for Gas and Electricity, and [Conservice](https://utilitiesinfo.conservice.com/) for water), providing proof of renter\u2019s liability insurance (I used [Assurant](https://assurantrenters.com/)\u2019s as it was conveniently associated with the community), and undergoing a pet screening (note that certain dog breeds are considered more dangerous and may not be accepted).\\n\\nMost importantly, my salary alone wasn\u2019t sufficient to guarantee that we could afford the rent. I needed a guarantor to vouch for me, as Europe does not have the concept of credit ratings.\\n\\nFortunately, our lead investor graciously agreed to be our guarantor when I asked him. Without someone fulfilling this role, I would have had to rely on a third-party service and pay several thousands of dollars, which would have been non-refundable and solely for the right to lease the house. This arrangement seemed rather illogical.\\n\\n## After the apartment\\n\\nI needed to notify [USCIS](https://www.uscis.gov/) of my new address since the last one on file was associated with the hotel where I was staying. I informed them that my new residence would be the updated address.\\n\\nFollowing that, my dogs flew from the UK using [Pets abroad UK](https://www.petsabroaduk.co.uk/). To save money, my wife didn\u2019t accompany them on the flight; instead, she arranged for them to be transported in the cargo hold of the airplane while I waited at the destination.\\n\\nHowever, I must admit that I didn\u2019t enjoy the experience, and in hindsight, I would have been willing to pay more for my dogs to have a better and safer flight. Although flying them from London, meant that unfortunately cargo was the option due to UK requirements. When I picked them up, they were visibly scared, and both my wife and I held our breath with worry throughout their entire journey. Our dogs\u2019 well-being was of utmost importance to us.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e9a09f5a-fd83-4c35-b442-ed17d23c6fc1)\\n\\nThe house was mostly empty, so to save money, we acquired a lot of second-hand items for free. It was beneficial to know people in the area who were aware of others with unused items stored in their garages, which we were able to take. To retrieve this furniture and other objects, we either needed to rent a U-Haul (which wasn\u2019t possible without a California driver\u2019s license) or hire a moving company.\\n\\nOur next task was to search for second-hand items at significant discounts on websites such as [Craigslist](https://sfbay.craigslist.org/), [Nextdoor](https://nextdoor.com/) and [Facebook Marketplace](https://www.facebook.com/marketplace). However, we had to be cautious of scammers and remember that if a deal seemed too good to be true, it probably was.\\n\\nOnce we had gathered most of the second-hand items, we visited [Home Depot](https://www.homedepot.com/) to paint and improve the newly acquired furniture. For the items we couldn\u2019t find second-hand, we made purchases at [Costco](https://www.costco.com/).\\n\\nWe highly recommend getting an executive membership at Costco as it provides great value for money. Additionally, the gas prices at Costco are significantly cheaper compared to other places we\u2019ve seen.\\n\\n### Wi-Fi + Mobile plan\\n\\nAfter securing an apartment, I used my passport to visit an [AT&T](https://www.att.com/) store. Since I didn\u2019t have my SSN yet, they were accommodating and allowed me to use my passport for identification. However, if you choose a different service provider like Xfinity, you will need your SSN. Before selecting a plan, it\u2019s important to check the coverage in your area to ensure that 4G/5G works well.\\n\\nInitially, I set up Wi-Fi through Xfinity, but then I used that as leverage to negotiate a discount with AT&T. This worked because I was interested in a double play package, which included two phone plans and Wi-Fi. As a result, I obtained an e-sim with unlimited 5G data for both myself and my wife, along with Wi-Fi for our home, at a cost of approximately $150 per month.\\n\\n### Shopping\\n\\nThere\u2019s going to be a big shock in terms of prices; at least, we experienced one. Life in the Bay Area is over 2x more expensive than London.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/0ef8efba-bdd4-487c-ac63-5585205f5427)\\n\\nSo, we started learning how to buy things at a lower cost. Whole Foods is not a viable option as it\u2019s one of the most expensive stores. The 10 items above cost $69.34 on Whole Foods.\\n\\nInstead, we now tend to shop at Safeway and always try to time our visits to take advantage of discounts. Many shopping places offer coupons that can help you save a lot of money. Additionally, when you come across products on sale, it\u2019s better to buy them in larger quantities as it\u2019s usually worth it.\\n\\nMy wife is also a big fan of Trader Joe\u2019s with the prices there being quite reasonable too. They also have a great selection of cheeses which is a must being from Europe.\\n\\n## After obtaining an SSN\\n\\nAfter you obtain your SSN, there are a lot of new things that you are able to do since you are recognized as a \u201cperson.\u201d\\n\\n### Bank account\\n\\nCredit cards are recommended over debit cards, not just because of the security benefits, but also because of the credit rating associated with them. This is a concept that doesn\u2019t really exist in Europe but is significant in the US. Your credit score will determine whether you are approved for a loan and what interest rate you will be charged.\\n\\nThe agencies that handle your credit score are [Equifax.com](http://equifax.com/), [TransUnion.com](http://transunion.com/) and [Experian.com](http://experian.com/). It\u2019s free to register, and you should keep an eye on your credit files to ensure that your credit score doesn\u2019t decrease for any reason.\\n\\nWe ended up opening an account with [Bank of America](https://www.bankofamerica.com/). However, since we didn\u2019t have a credit score yet, we couldn\u2019t get a regular credit card. Instead, we had to apply for a secured credit card, where the maximum spending limit is determined by the amount of cash we use to back the credit card.\\n\\nWe also applied for an [AMEX card](https://www.americanexpress.com/us/credit-cards/card/blue-cash-everyday/?eep=26129&irgwc=1&veid=39E0XuRS3xyNT4BTy33WSUXYUkAwp0Tx32Qt0c0&affid=1193684&pid=IR&affname=NerdWallet%2C+Inc.&sid=14011830016&pmc=795&BUID=CCG&CRTV=controlaffcps&MPR=03) because [American Express](https://www.americanexpress.com/) has a partnership with the international credit-reporting startup Nova Credit. This allows immigrants to instantly translate credit reports from the UK to U.S.-equivalent credit reports when applying for AmEx consumer cards. However, it\u2019s important to note that AMEX cards are less widely accepted compared to VISA and MasterCard, so we were aware that they would only work in certain establishments.\\n\\nFor more information, these video were extremely helpful:\\n\\n- [Building credit and keeping yours healthy](https://bettermoneyhabits.bankofamerica.com/en/credit/building-credit)\\n- [How to build credit from scratch](https://bettermoneyhabits.bankofamerica.com/en/credit/start-building-credit)\\n- [Top 3 credit questions](https://bettermoneyhabits.bankofamerica.com/en/credit/top-credit-questions)\\n\\n### Car\\n\\nIt was now time for us to buy a car. We searched online for a few options. There are two things worth considering when buying a used car, as we did:\\n\\n- Firstly, you can use [https://www.kbb.com/car-values/](https://www.kbb.com/car-values/) to research the value of the car. This ensures that you don\u2019t get ripped off and provides an estimate of how much the car is worth based on the details you provide.\\n- Secondly, you can use [https://www.carfax.com/](https://www.carfax.com/) to research a car and its license plate. This helps you understand its accident history and any repairs it has undergone. It provides information about whether there have been major accidents in the car\u2019s history, frequent visits to the mechanic, and whether the repairs were done by authorized mechanics (e.g., BMW) or not.\\n\\nIf you prefer to play it safe, you can even bring a mechanic with you to the dealership to assess the car\u2019s condition.\\n\\nWe spoke with individuals, but ultimately decided to buy a car from a dealership because it offered fewer risks compared to buying from individuals. Moreover, the dealership took care of updating the vehicle records, ensuring that the vehicle would be registered under our name. This allowed us to update our car insurance with the Vehicle Identification Number (VIN) of the new vehicle.\\n\\nAfter a few months, we received the California Certificate of Title, which confirmed that I was the legal owner of the vehicle and included important vehicle identification information. Since this was my first car, I had to add an OpenBB reference to the front plate :)\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/8e786af6-b965-404f-a37d-47e5faeebedd)\\n\\nShoutouts to:\\n\\n- [Jiffy Lube](https://www.jiffylube.com/) for their car inspection services, tire inflation, oil changes, and more. They don\u2019t charge for the inspection and only charge for the services performed on the car. We had a great experience with them.\\n- [Costco gas station](https://www.costco.com/gasoline.html) for the cheapest gas we\u2019ve found so far.\\n\\n### Health Insurance\\n\\nCalifornia offers a portal called [Covered California](https://www.coveredca.com/), which provides state-approved health plans from various insurance companies. If your income is low, the state can subsidize your monthly premium. These plans fall into three categories, each with differences in costs and provider networks:\\n\\n
      \\n
    1. HMOs (Health Maintenance Organizations): Typically cheaper than PPOs, HMOs have smaller networks. You need to see your primary care physician before getting a referral to a specialist.
    2. \\n
    3. PPOs (Preferred Provider Organizations): Usually more expensive, PPOs offer a larger network and the ability to see providers outside of the network. You can also see specialists without a referral.
    4. \\n
    5. EPOS (Exclusive Provider Organizations): EPOS plans combine features of HMOs and PPOs. They have exclusive networks like HMOs, making them generally less expensive. However, you can make your own appointments with specialists, similar to PPOs.
    6. \\n
    \\n\\nIn our case, we chose an HMO called Kaiser. [Kaiser](https://healthy.kaiserpermanente.org/northern-california/front-door) is a not-for-profit, all-inclusive healthcare company with its own doctors and hospitals. When selecting the plan within Kaiser, we had to choose between Bronze, Silver, and Gold tiers. These tiers are influenced by three main factors:\\n\\n
      \\n
    1. Monthly premium: The amount you pay each month for health plan coverage. It may be subsidized based on your income and household size.
    2. \\n
    3. Annual deductible: The amount you must pay before your plan starts covering services.
    4. \\n
    5. Annual maximum out-of-pocket: The total amount you pay in a calendar year (in addition to monthly premiums) for most services covered by your health care plan.
    6. \\n
    \\n\\n### California Driving License\\n\\nThe Department of Motor Vehicles (DMV) is responsible for vehicle registrations and driving licenses in California. When you arrive in California, you can use a foreign driving license for only 10 days, after which you must obtain a California Driving License (CDL).\\n\\nTo apply for the CDL, you can start the process online by completing the driver\u2019s license application on the [DMV website](https://www.dmv.ca.gov/portal/). This online application saves time by allowing you to fill it out before visiting a DMV field office.\\n\\nWhen you visit the DMV, the employees will review your completed application and request certain documents, including:\\n\\n- Social Security Number (SSN)\\n- Unexpired foreign passport with a valid U.S. visa\\n- Approved I-94 form\\n- Bank and financial institution records\\n- Insurance documents\\n\\nAfter submitting the required documents, you will have your picture taken and then proceed to take the written driving test. It\u2019s advisable to practice for the test in advance. As I have many years of driving experience, I personally used practice tests available at [https://www.dmv-written-test.com/california/practice-test-1.html](https://www.dmv-written-test.com/california/practice-test-1.html).\\n\\nA few days later, I returned to the DMV to take the written test. The test consists of 36 multiple-choice questions, and you are allowed to fail up to 6 questions. You will immediately know whether you passed or not.\\n\\nUpon passing the written test, you will receive a document that allows you to schedule your driving exam. It is recommended to book the exam as soon as possible, as available slots may be several weeks away due to high demand.\\n\\nOn the day of the driving exam, you will need to bring someone who holds a CDL, the document provided after passing the written exam, and your passport.\\n\\nThe driving exam evaluates your performance, and you will receive a score sheet outlining the criteria and aspects that will be assessed during the exam. This will give you an idea of what to expect and what the examiners will be evaluating.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/8c5ebcd4-8c8c-4f9c-b4d2-7f5364be08d1)\\n\\nAfter successfully passing the driving exam, the DMV will issue you a temporary document that serves as your California Driving License (CDL). This temporary document will allow you to legally drive while you wait for your physical CDL to be sent to you by mail.\\n\\nIt typically takes a few months for the physical CDL to be processed and mailed to your designated address. During this time, you can use the temporary document as proof of your driving privileges in California. Once you receive the physical CDL, you should carry it with you whenever you are driving.\\n\\nIt\u2019s important to note that the temporary document and the physical CDL have the same validity and serve as official proof of your driver\u2019s license status.\\n\\n## Final thoughts\\n\\nI\u2019ve moved countries a few times within Europe, and those moves were much easier than moving to the USA.\\n\\nNonetheless, I think you can get settled within 3 months of moving to the country. So far, we are really enjoying our experience and can\u2019t wait to explore more of the area.\\n\\nIf you are looking to do the same and want some feedback, feel free to reach out. It helped us a lot to have people who could help us with the move, so I\u2019d love to be able to do the same for others."},{"id":"fully-free-financial-chatbot","metadata":{"permalink":"/blog/fully-free-financial-chatbot","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-05-09-fully-free-financial-chatbot.md","source":"@site/blog/2023-05-09-fully-free-financial-chatbot.md","title":"Fully free financial chatbot","description":"The OpenBB Bot is a financial chatbot that allows you to access financial data from Discord or Telegram along with other users. From equity data to crypto, options, darkpool, economy and much more! Now available for free to registered users.","date":"2023-05-09T00:00:00.000Z","formattedDate":"May 9, 2023","tags":[{"label":"OpenBB Bot","permalink":"/blog/tags/open-bb-bot"},{"label":"Financial Chatbot","permalink":"/blog/tags/financial-chatbot"},{"label":"Investment","permalink":"/blog/tags/investment"},{"label":"Free","permalink":"/blog/tags/free"},{"label":"Discord","permalink":"/blog/tags/discord"},{"label":"Telegram","permalink":"/blog/tags/telegram"},{"label":"Equity","permalink":"/blog/tags/equity"},{"label":"Crypto","permalink":"/blog/tags/crypto"},{"label":"Options","permalink":"/blog/tags/options"},{"label":"Darkpool","permalink":"/blog/tags/darkpool"},{"label":"Economy","permalink":"/blog/tags/economy"}],"readingTime":1.855,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"fully-free-financial-chatbot","title":"Fully free financial chatbot","date":"2023-05-09T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280554646-7c937b83-3087-4bf9-8c06-27f7e042ad04.png","tags":["OpenBB Bot","Financial Chatbot","Investment","Free","Discord","Telegram","Equity","Crypto","Options","Darkpool","Economy"],"description":"The OpenBB Bot is a financial chatbot that allows you to access financial data from Discord or Telegram along with other users. From equity data to crypto, options, darkpool, economy and much more! Now available for free to registered users."},"prevItem":{"title":"Leaving London to live in San Francisco","permalink":"/blog/leaving-london-to-live-in-san-francisco"},"nextItem":{"title":"Free investment research ecosystem to consistently beat the market","permalink":"/blog/free-investment-research-ecosystem-to-consistently-beat-the-market"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThe OpenBB Bot is a financial chatbot that allows you to access financial data from Discord or Telegram along with other users. From equity data to crypto, options, darkpool, economy and much more! Now available for free to registered users.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nWe know the market conditions haven\u2019t been great for anyone, particularly for investors. Instead of raising prices like trends, we have decided to offer our [OpenBB Bot](https://my.openbb.co/app/bot) individuals tier for free if you are a registered user.\\n\\n## What does this mean\\n\\nRegistered users for OpenBB Bot will see the following changes:\\n\\n- Users were limited to 100 options or dark pools commands per month. This limitation is completely removed.\\n- Users will no longer experience a 10s cooldown which means they can request investment research data sequentially and avoid breaking the conversation due to a delay imposed by the product\\n- Through our soon-to-be-announced new platform, you will be able to fully customize your charting style with up to 5 in chart technical indicators and 2 off charts. This is a big improvement over the 1 in chart and 1 off chart previously available.\\n- The number of custom alerts that the user can set for when certain threshold values are triggered has increased, from 3 to 10.\\n- Users can now set 10 watchlist tickers to pay close attention to and access data regarding them.\\n\\nBelow is a video of what the OpenBB Bot is capable of:\\n\\n![1_d1vD4AkwpYk42tdbHuMupQ](https://github.com/DidierRLopes/my-website/assets/25267873/b72852e8-ec33-4ec0-aa0e-6ea6290e3e20)\\n\\nThe interactive charts will open up within the [OpenBB Hub](https://my.openbb.co/) and in it you will be able to fully customize the technical analysis indicators that you see on the chart and even the candle chart color theme and type. A demo is shown below,\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nLike dozens of thousands of investors, join the OpenBB Hub so you can fully leverage the [OpenBB Bot](https://my.openbb.co/app/bot).\\n\\nYou can actually see how many users we have utilizing the bot on a daily basis on our [/open page](https://openbb.co/company/open/bot).\\n\\nWhile others zig, we zag. Here\u2019s the updated pricing:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/7c937b83-3087-4bf9-8c06-27f7e042ad04)\\n\\nLooking forward to feedback!"},{"id":"free-investment-research-ecosystem-to-consistently-beat-the-market","metadata":{"permalink":"/blog/free-investment-research-ecosystem-to-consistently-beat-the-market","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-05-05-free-investment-research-ecosystem-to-consistently-beat-the-market.md","source":"@site/blog/2023-05-05-free-investment-research-ecosystem-to-consistently-beat-the-market.md","title":"Free investment research ecosystem to consistently beat the market","description":"The OpenBB Hub is a comprehensive platform for managing all products, data, subscriptions, and content for users, aiming to empower investors globally with tools previously exclusive to institutions.","date":"2023-05-05T00:00:00.000Z","formattedDate":"May 5, 2023","tags":[{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"Investment Research","permalink":"/blog/tags/investment-research"},{"label":"OpenBB Terminal","permalink":"/blog/tags/open-bb-terminal"},{"label":"OpenBB Bot","permalink":"/blog/tags/open-bb-bot"},{"label":"OpenBB SDK","permalink":"/blog/tags/open-bb-sdk"},{"label":"OpenBB Hub","permalink":"/blog/tags/open-bb-hub"}],"readingTime":5.945,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"free-investment-research-ecosystem-to-consistently-beat-the-market","title":"Free investment research ecosystem to consistently beat the market","date":"2023-05-05T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280554509-bb80a9fd-e616-4c9f-b3e3-e123a3034e24.png","tags":["OpenBB","Investment Research","OpenBB Terminal","OpenBB Bot","OpenBB SDK","OpenBB Hub"]},"prevItem":{"title":"Fully free financial chatbot","permalink":"/blog/fully-free-financial-chatbot"},"nextItem":{"title":"The role of AI and OpenBB in the future of investment research","permalink":"/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-research"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThe OpenBB Hub is a comprehensive platform for managing all products, data, subscriptions, and content for users, aiming to empower investors globally with tools previously exclusive to institutions.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThe OpenBB Hub is the new one-stop-shop for managing all products, data, subscriptions, and content for users!\\n\\n## Introduction\\n\\nWhen we started this journey, we always wanted to empower investors across the globe to have access to tools previously only available to institutions.\\n\\nWe started by building the [OpenBB Terminal](https://my.openbb.co/app/terminal) which is an open source investment research platform that users can customize as they see fit and build on top of.\\n\\nIf you haven\u2019t starred the repo, now is a good chance to do so [here](https://github.com/OpenBB-finance/OpenBBTerminal) \u2b50\ufe0f.\\n\\nThen, we wanted to address the social nature of investing. Instead of adding the chat functionality to OpenBB Terminal, we brought investment research data where these communities were already having fruitful discussions (Discord and Telegram). This makes much more sense from a user-convenience standpoint, and that\u2019s how the OpenBB Bot was born. More information [here](https://my.openbb.co/app/bot).\\n\\nAs much customization as the OpenBB Terminal allowed, we didn\u2019t give creators as much freedom as we could have since they would need to download the source code of the terminal in order to leverage our core.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/bb80a9fd-e616-4c9f-b3e3-e123a3034e24)\\n\\nBut we we wanted to make this experience as seamless as possible so users could build on top of our foundation. Thus, we repurposed the core of the OpenBB Terminal into an OpenBB SDK that is \u201c_pip installable_\u201d from everywhere \u2014 [OpenBB](https://pypi.org/project/openbb/) . This means that all you need to have access to a universe of investment research data programmatically is python and running pip install openbb within a notebook.\\n\\nThis was a big win since the community reaction was very positive and we are now seeing it adopted by investors, educational courses, and even content creators. So much that we even created a tab to keep track of these on our [/open page](https://openbb.co/open).\\n\\nHowever, we focused too much on the products and didn\u2019t slow down to think about the user experience utilizing multiple OpenBB products. This is where OpenBB Hub comes into play. [OpenBB Hub](https://my.openbb.co/) is the platform we use to interact with our community, push OpenBB content, allow product management, and much more.\\n\\nTL;DR:\\n\\n- Allows to manage your OpenBB Terminal API keys, feature flags and settings. In addition, we allow users to save & share their openbb script routines\\n- Allows access to the OpenBB Terminal installer new versions\\n- Allows access to the OpenBB Bot dashboard \u2014 which allows fully customization from a user perspective. This improves your experience by 10x when using OpenBB Bot on Telegram or Discord.\\n- Allows to sign-up for early waitlist of OpenBB Terminal Pro\\n\\n## OpenBB Hub - OpenBB Terminal\\n\\nSince the beginning users have installed the OpenBB Terminal in multiple desktops due to its free nature. The issue? The API key management was a pain since there was not a way to sync these across different machines. Until now.\\n\\nWith [OpenBB Hub](https://my.openbb.co/) and using that account detail to log in the terminal, this problem gets fixed. Not only that, but users will benefit from default data sources, terminal color schema customization and even .openbb routines being manageable from Hub and more importantly accessible on a terminal instance as long as they login with their user details.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e6a2e177-ee76-4871-a534-c5002a2bfb96)\\n\\n## OpenBB Hub - OpenBB Bot\\n\\nToday we are also announcing the OpenBB Bot will be fully free for individuals. All you have to do is to register for the [OpenBB Hub](https://my.openbb.co/).\\n\\nFor users that were already users of our OpenBB Bot, the only change on the platform is pricing and an increase push towards better documentation and more tutorials. This is an initiative that we are taking company-wide to focus on better documentation and more content to fully leverage our suite of products.\\n\\nOpenBB bot is critical to us as we work hard towards making a full ecosystem for investment research. And now you can access this experience for free, and share investment research data with your friends / colleagues.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b444e233-f862-41f3-b1ae-2f1dac517d47)\\n\\n## OpenBB Hub - OpenBB SDK\\n\\nAs the OpenBB SDK is in its core a pip installable package with its [own page on PiPy](https://pypi.org/project/openbb/) there aren\u2019t a lot of functionalities that we can make available in this page. We allow the user to set their API keys similarly to what we do in the Terminal, to improve UX when utilizing the SDK.\\n\\nIn addition, we are going to display open source projects built by the community that leverage our core so that they can serve as an inspiration to you. If you are working on something that uses OpenBB at its core, tag your GitHub repository with \u201copenbb\u201d and we\u2019ll add you to the list of projects that rely on our foundation.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/2d1300f0-4c3d-45d8-af6d-bfe8125a28d6)\\n\\n## OpenBB Hub - OpenBB Terminal Pro (waitlist)\\n\\nIf all these features weren\u2019t enough, we have decided to open the [OpenBB Terminal Pro WAITLIST](https://my.openbb.co/app/pro/early-access) for users who register on our OpenBB Hub.\\n\\nThe OpenBB Terminal Pro is something that has been months in the works and is yet our most exciting product to date. We have been holding back on it because we believe this will change the way investors think about investing. This time we worked with design partners and had dozens of user interviews from financial professionals to understand their pain points and what role we could fill. So even being able to start creating a waitlist around it is something that the team is very excited about.\\n\\nWe will gradually roll out the OpenBB Terminal Pro to a few users from the waitlist to get early feedback.\\n\\nIf you are one of these, I look forward to onboarding you personally \ud83e\udd1d\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/0cec32eb-c5ab-4765-9c21-6c13943874db)\\n\\n## Final thoughts\\n\\nAlthough OpenBB Hub is not a product per se, the amount of work that the team put together to make this happen is something nothing short of extraordinary. This was the first project where the entire team (~20 people from engineering, product, design and marketing) had to work together as whole.\\n\\nThe OpenBB Terminal dashboard is completely new, the concept of login had to be invented and needed to function perfectly with the Hub. The SDK page is also new. The OpenBB Bot dashboard already existed, but we made the tier for individuals completely free, so we had to update it to reflect that big pricing change. And finally, we open the OpenBB Terminal Pro waitlist.\\n\\nThe [OpenBB Hub](https://my.openbb.co/) is completely free.\\n\\nAll you have to do is to register so we can know more information about yourself regarding your primary usage for our products (professional, academic, personal) \u2014 this allows us to understand what features to prioritize in the future and improve the quality of our products.\\n\\nIn case you missed the webinar, you can view it below so that you are up-to-date with all the exciting new features that the team has released.\\n\\n
    \\n \\n
    \\n\\n
    "},{"id":"the-role-of-ai-and-openbb-in-the-future-of-investment-research","metadata":{"permalink":"/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-research","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-04-03-the-role-of-ai-and-openbb-in-the-future-of-investment-research.md","source":"@site/blog/2023-04-03-the-role-of-ai-and-openbb-in-the-future-of-investment-research.md","title":"The role of AI and OpenBB in the future of investment research","description":"How OpenBB can lead the future of finance using AI on top of an open source investment research platform.","date":"2023-04-03T00:00:00.000Z","formattedDate":"April 3, 2023","tags":[{"label":"OpenAI","permalink":"/blog/tags/open-ai"},{"label":"future","permalink":"/blog/tags/future"},{"label":"ChatGPT","permalink":"/blog/tags/chat-gpt"},{"label":"Discord","permalink":"/blog/tags/discord"}],"readingTime":3.655,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"the-role-of-ai-and-openbb-in-the-future-of-investment-research","title":"The role of AI and OpenBB in the future of investment research","date":"2023-04-03T00:00:00.000Z","image":"https://github.com/DidierRLopes/my-website/assets/25267873/ed54bfac-5457-43a3-9235-b7f1ad46321f","tags":["OpenAI","future","ChatGPT","Discord"],"description":"How OpenBB can lead the future of finance using AI on top of an open source investment research platform."},"prevItem":{"title":"Free investment research ecosystem to consistently beat the market","permalink":"/blog/free-investment-research-ecosystem-to-consistently-beat-the-market"},"nextItem":{"title":"How I Used OpenAI API to improve our product documentation","permalink":"/blog/how-i-used-openai-api-to-improve-our-product-documentation"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nHow OpenBB can lead the future of finance using AI on top of an open source investment research platform.\\n\\nThe open source code is available [here](https://github.com/openbb-finance/OpenBBTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n## Introduction\\n\\nThis blogpost won\'t speak about what the OpenBB Terminal can offer today. Instead, we are going to share where we think AI can play a role in the future of investment research, and how through an open source platform, we can lead that wave.\\n\\nA lot of this blog is based on the fact that the OpenBB Terminal is an open source investment research platform, and therefore it\'s very relevant to read [our blogpost about why we are open source](/blog/why-the-need-for-an-open-source-investment-research-platform).\\n\\nNote: This blogpost will share several proof-of-concepts that are still within R&D and are not yet ready for production. Also, this blogpost will assume that you are aware of LLMs such as ChatGPT and WhisperAI.\\n\\n## ChatGPT as the interface\\n\\nAn edge that incumbents have is the fact that they have been around for a very long time and spent a lot on educating users about their product. As a result, users are used to their platform. This makes it harder for users to switch to an unknown product, meaning they need to be 10x better than the competition for them to do so.\\n\\nHowever, what if there was no learning curve? What if you could use a product for the first time and know how to access all the information you wanted without spending any time reading the documentation? In essence, the educational incumbent advantage would become obsolete.\\n\\nWith the new LLM advancements, such as ChatGPT. We are not far from this reality. Below is a proof-of-concept of what this could look like:\\n\\n
    \\n \\n
    \\n\\nPlus, if this is built on top of an open source project it means that the community can help in improving the model by providing more training data (e.g. provide a text as input and the corresponding command as output) or even confirm whether or not the chart that pops up was accurate.\\n\\nIn addition, along with data sources you can imagine that the community could start contributing with new languages for the GPT model. This makes using a new investment research platform easy, but more importantly makes retrieving information much faster and efficient.\\n\\nThe screenshot below shows that ChatGPT can accurately return the right OpenBB command when the user requests a certain type of data, as long as the model can be trained on our documentation:\\n\\n![image](https://cdn-images-1.medium.com/max/1600/1*IWnSMNhHDyiulxri_hEB0g.png)\\n\\nEDIT: Bloomberg introduced [BloombergGPT](https://openai.com/research/whisper) last week, and the following screenshot is taken from their research paper which validates the argument above.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/04734b1f-3fa9-4d30-86b3-1ea81b73983c)\\n\\n## WhisperAI as the interface\\n\\nIf we go one step further, instead of relying on text as input, the platform could rely on voice. With models such as [WhisperAI](https://www.bloomberg.com/company/press/bloomberggpt-50-billion-parameter-llm-tuned-finance) we will be able to speak with the platform in order to retrieve financial data.\\n\\nBelow is a proof-of-concept showing how you can retrieve this data through voice.\\n\\n
    \\n \\n
    \\n\\nOne of the advantages of an automatic speech recognition (ASR) system is the fact that it doesn\'t rely solely on english and therefore, it would welcome people from all over the world to interact with the platform. Note: WhisperAI is open source and you can find more information on it [here](https://github.com/openai/whisper).\\n\\n## GPT to build investment research reports\\n\\nOne of the new features that was announced with the [OpenBB Terminal 2.0](https://openbb.co/blog/openbb-terminal-2-acai) was the automated reports generation that utilizes [Netflix\'s papermill](https://netflixtechblog.com/notebook-innovation-591ee3221233) to leverage jupyter notebook templates.\\n\\n
    \\n \\n
    \\n\\nAs it stands creating one of these notebook templates requires some coding skills and reading [OpenBB documentation](https://docs.openbb.co) to understand how to retrieve the data of interest providing the correct function and necessary arguments.\\n\\nBut, for a second, imagine if you could build these notebook templates with almost no-code?\\n\\nThe proof-of-concept below in combination with the automated report generation should allow you to further understand the breakthrough that we may accomplish in the future.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/cd04a141-1ce6-4a20-80c5-f697ce83979d)\\n\\nMy prediction is that open source + AI will disrupt the financial sector in the upcoming years, and OpenBB will be leading that wave."},{"id":"how-i-used-openai-api-to-improve-our-product-documentation","metadata":{"permalink":"/blog/how-i-used-openai-api-to-improve-our-product-documentation","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-04-01-how-i-used-openai-api-to-improve-our-product-documentation.md","source":"@site/blog/2023-04-01-how-i-used-openai-api-to-improve-our-product-documentation.md","title":"How I Used OpenAI API to improve our product documentation","description":"In this blog post, I share how I used the OpenAI API to improve our product documentation. I used ChatGPT to generate more detailed descriptions for our OpenBB Bot Discord commands, making them more understandable for new users.","date":"2023-04-01T00:00:00.000Z","formattedDate":"April 1, 2023","tags":[{"label":"OpenAI","permalink":"/blog/tags/open-ai"},{"label":"API","permalink":"/blog/tags/api"},{"label":"Product Documentation","permalink":"/blog/tags/product-documentation"},{"label":"ChatGPT","permalink":"/blog/tags/chat-gpt"},{"label":"Discord","permalink":"/blog/tags/discord"},{"label":"OpenBB Bot","permalink":"/blog/tags/open-bb-bot"}],"readingTime":1.915,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-i-used-openai-api-to-improve-our-product-documentation","title":"How I Used OpenAI API to improve our product documentation","date":"2023-04-01T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280554411-32a1e101-4357-4a0a-852c-d184ad6a7104.png","tags":["OpenAI","API","Product Documentation","ChatGPT","Discord","OpenBB Bot"],"description":"In this blog post, I share how I used the OpenAI API to improve our product documentation. I used ChatGPT to generate more detailed descriptions for our OpenBB Bot Discord commands, making them more understandable for new users."},"prevItem":{"title":"The role of AI and OpenBB in the future of investment research","permalink":"/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-research"},"nextItem":{"title":"How to get hired by an exciting tech startup in 2023","permalink":"/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blog post, I share how I used the OpenAI API to improve our product documentation. I used ChatGPT to generate more detailed descriptions for our OpenBB Bot Discord commands, making them more understandable for new users.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/improve-documentation-using-openai).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThe [documentation](https://docs.openbb.co/bot/reference/discord) of our free OpenBB Bot was pretty simplistic for most of the commands.\\n\\nFor instance, the description for the command `/dp alldp` was: \\"Last 15 Darkpool Trades\\", as seen below:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/faf4a1e1-a5b5-4aeb-aec4-cd69c29842a7)\\n\\nFor more experienced traders, this may be enough. But for new users, these 4 words may not mean much.\\n\\nFor context, this is the output that a user would get if running `/dp alldp` on our [Discord server](https://openbb.co/discord).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/5752d06d-0515-46df-aeda-1425c79e7d2c)\\n\\nSo I talked with someone in our team about improving the documentation. Not only for the new users that wanted to utilize our free product but also so that we could train our own LLM on this better dataset.\\n\\nOver the weekend I had the idea: What if I provided ChatGPT with the current description and an example of how to use the command and asked it to provide a more detailed description?\\n\\nSo the next step was to try whether ChatGPT would indeed improve the current documentation.\\n\\nAfter a bit of prompt tweaking, I got a much better description than the one we currently had. See below:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/212114a0-033e-4f7d-98dc-ef22ee318227)\\n\\nThe next step was rather straightforward. I created a script that iterated [through all our OpenBB Bot Discord documentation](https://github.com/OpenBB-finance/OpenBBTerminal) files and updated the old description with a more detailed one.\\n\\nThis is the template prompt that I used:\\n\\n> _Context: You are a developer writing a detailed documentation for a function that allows the user to retrieve {desc} utilizing the command {example} how would you explain what this command does in a single paragraph\u201d_\\n\\nWhere **desc** and **example** corresponds to the current description and example that each of our commands have, respectively.\\n\\nThe results can be seen below (done on [this PR](https://github.com/OpenBB-finance/OpenBBTerminal/pull/4657)),\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/32a1e101-4357-4a0a-852c-d184ad6a7104)\\n\\nAs usual, I open source the script [here](https://github.com/DidierRLopes/improve-documentation-using-openai).\\n\\nThe funny thing is that I used an LLM output to improve our documentation. And we may use this data to train our own LLM.\\n\\nLLM-ception?"},{"id":"how-to-get-hired-by-an-exciting-tech-startup-in-2023","metadata":{"permalink":"/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-01-22-how-to-get-hired-by-an-exciting-tech-startup-in-2023.md","source":"@site/blog/2023-01-22-how-to-get-hired-by-an-exciting-tech-startup-in-2023.md","title":"How to get hired by an exciting tech startup in 2023","description":"The future is a strange place. We\u2019re not entirely sure what it will look like, but we do know that it will be shaped by the choices we make today. And while I can\u2019t tell you exactly how to get a job in 2023, I can help you set yourself up for success by showing you some of the best ways to build your career today.","date":"2023-01-22T00:00:00.000Z","formattedDate":"January 22, 2023","tags":[{"label":"Career Advice","permalink":"/blog/tags/career-advice"},{"label":"Tech Startups","permalink":"/blog/tags/tech-startups"},{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Job Hunting","permalink":"/blog/tags/job-hunting"},{"label":"Software Engineering","permalink":"/blog/tags/software-engineering"}],"readingTime":5.425,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-to-get-hired-by-an-exciting-tech-startup-in-2023","title":"How to get hired by an exciting tech startup in 2023","date":"2023-01-22T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280554207-496f62f8-bd60-4029-8560-1a4c25a5144a.png","tags":["Career Advice","Tech Startups","Open Source","Job Hunting","Software Engineering"],"description":"The future is a strange place. We\u2019re not entirely sure what it will look like, but we do know that it will be shaped by the choices we make today. And while I can\u2019t tell you exactly how to get a job in 2023, I can help you set yourself up for success by showing you some of the best ways to build your career today."},"prevItem":{"title":"How I Used OpenAI API to improve our product documentation","permalink":"/blog/how-i-used-openai-api-to-improve-our-product-documentation"},"nextItem":{"title":"Financial chat bots are underrated, and here\u2019s why.","permalink":"/blog/financial-chat-bots-are-underrated-and-heres-why"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThe future is a strange place. We\u2019re not entirely sure what it will look like, but we do know that it will be shaped by the choices we make today. And while I can\u2019t tell you exactly how to get a job in 2023, I can help you set yourself up for success by showing you some of the best ways to build your career today.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nEveryone is doing the same hacker tests. Being good at interviews will no longer suffice to get a job in top tech company. Conventional CVs are too boring. Recruiters may like what they read, but this doesn\u2019t make them think any further about a person and think \u201cwow, we really need someone like them\u201d.\\n\\nUltimately, a CV cannot demonstrate creativity and in my opinion, to be a top engineer you need to be creative. Often there isn\u2019t an easy straightforward solution and being creative is what distinguishes top tier engineers from medium. I wrote a post about this [here](/blog/stop-doing-your-cv-in-word-or-latex).\\n\\nBelow I will let you know my views on what I would do to get a job at an exciting tech startup.\\n\\n## Work on open source projects\\n\\nOpen source is a great way to build your skills and get your name out there. It\u2019s also a great way to make connections with other developers, which can lead to referrals and job opportunities. If you want to show that you\u2019re a good engineer, open source is an excellent opportunity. This is because it allows you to demonstrate your problem-solving abilities, while also improving the codebase of a project that is potentially used by thousands of users \u2014 and because the project is open source, it never dies.\\n\\n**But which open source projects should you choose?**\\n\\nI\u2019d say that there are two routes that you can take here. You can select the project based on your **own use case** or you can **be strategic** about it.\\n\\n### Own use case\\n\\nDon\u2019t overthink it. The world of software is built on top of open source. If it weren\u2019t for open source, we would be living in the year 2000 or less. This means that your favorite apps are relying on open source projects, which you can be a part of!\\n\\nThis means that you can:\\n\\n- Contribute to an open source library that is used by a project that you like. E.g. someone from our team is a [cpython](https://github.com/python/cpython) contributor.\\n- Contribute to a product that you use that is Open Source. The advantage here is that you are able to literally customize the product that you are using.\\n\\nWith Red Hat in the 90s this open source movement is starting to be a very hot topic. [Joseph Jacks](https://twitter.com/JosephJacks_) from OSS Capital is one of the best investors (if not the best) in this space. The chart below that he put together illustrates well the growth of open source (shared in [this tweet](https://twitter.com/JosephJacks_/status/1494840009882361859?s=20))\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/496f62f8-bd60-4029-8560-1a4c25a5144a)\\n\\n### Strategic\\n\\nIf you\u2019re reading this, there\u2019s a good chance that you want to make a positive impact on the future of technology. If so, it can be helpful to consider how your work will affect the lives of others. Take some time and think about what kind of role you would like to play in shaping those futures \u2014 are you someone who wants to improve people\u2019s physical well-being through health innovations? Or maybe achieve more efficient energy use through new technologies? This will help determine which companies or projects might be best suited for any given career path.\\n\\nOnce you figure out what motivates you, select an industry where you wish to find a job.\\n\\nThen there are multiple paths that you can take:\\n\\n- Look into the signals provided by top venture capital firms in that selected industry. I.e. see what open source companies are being backed in that space.\\n- Look into the developer engagement around the open source projects in that industry. You can not only use GitHub stars and forks, but you can use tools such as [https://analyzemyrepo.com](https://analyzemyrepo.com/analyze/OpenBB-finance/OpenBBTerminal) or [https://ossinsight.io/](https://ossinsight.io/)\\n- Cold email VCs to ask them about which open source products they are excited about. I say VCs because often their job is to find these startups early, so usually they have more recent information. But talking with devs or listening to people that you respect in the industry is equally valid.\\n\\nNote: By being an early contributor of a promising open source startup, you can become a core maintainer of a project and even make it to the founding team. This is how I met James, OpenBB\u2019s co-founder. He was an active developer in my own open source project, and I invited him to be part of the main maintainers of the project. When we built a company, he became a founding member.\\n\\n## Develop your own open source project\\n\\nI strongly believe that being able to successfully build your own open source project is severely underrated. There are so many components that you need to get right from so many departments that it shows a lot about your strengths as an individual and a preview of the value you could add to the team.\\n\\nYou may think that the only thing that you are demonstrating is your ability to write high-quality code since it will be open to the public. Well that\u2019s wrong. Here is a non-exhaustive list of skills that you show off\\n\\n- Solution to a real-world problem\\n- Design around the product\\n- User experience\\n- How you prioritize task and how fast you can ship high-quality code\\n- Interaction with others\\n- Marketing\\n- Listening to feedback from users\\n\\nThis is what I did with OpenBB Terminal: [https://github.com/OpenBB-finance/OpenBBTerminal](https://github.com/OpenBB-finance/OpenBBTerminal) and it has single handedly changed my life.\\n\\n## Conclusion\\n\\nIf you\u2019re looking for a job in 2023, the best thing you can do is to contribute to/develop open source projects.\\n\\nYou should be aware that you can also add value to an open source project by reporting bugs. You can even do more than just report a bug, but suggest a solution or workaround for the problem \u2014 this shows that not only are you paying attention to what\u2019s going on around you, but also that you have some ideas about how things could be improved \u2014 a combination that any hiring manager would love!\\n\\nI hope you found this post insightful.\\n\\nAny feedback is welcome."},{"id":"financial-chat-bots-are-underrated-and-heres-why","metadata":{"permalink":"/blog/financial-chat-bots-are-underrated-and-heres-why","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-01-05-financial-chat-bots-are-underrated-and-heres-why.md","source":"@site/blog/2023-01-05-financial-chat-bots-are-underrated-and-heres-why.md","title":"Financial chat bots are underrated, and here\u2019s why.","description":"In this blog post, we discuss the underrated potential of financial chat bots, our collaboration with OptionsFamBot, and why chat bots are becoming increasingly popular.","date":"2023-01-05T00:00:00.000Z","formattedDate":"January 5, 2023","tags":[{"label":"chatbots","permalink":"/blog/tags/chatbots"},{"label":"finance","permalink":"/blog/tags/finance"},{"label":"AI","permalink":"/blog/tags/ai"},{"label":"Discord","permalink":"/blog/tags/discord"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"OptionsFamBot","permalink":"/blog/tags/options-fam-bot"}],"readingTime":4.12,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"financial-chat-bots-are-underrated-and-heres-why","title":"Financial chat bots are underrated, and here\u2019s why.","date":"2023-01-05T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280554064-a1352f75-9bfd-4a70-8129-d72bc4e720b5.png","tags":["chatbots","finance","AI","Discord","OpenBB","OptionsFamBot"],"description":"In this blog post, we discuss the underrated potential of financial chat bots, our collaboration with OptionsFamBot, and why chat bots are becoming increasingly popular."},"prevItem":{"title":"How to get hired by an exciting tech startup in 2023","permalink":"/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023"},"nextItem":{"title":"Firing sucks. How to avoid doing so by hiring A players.","permalink":"/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-players"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blog post, we discuss the underrated potential of financial chat bots, our collaboration with OptionsFamBot, and why chat bots are becoming increasingly popular.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nAt OpenBB, earlier this year we [joined forces with OptionsFamBot](https://openbb.co/products/bot). This was a bot that had a reach of over 1 Million users on Discord.\\n\\nToday, [OpenBB Bot](https://openbb.co/products/bot) is one of our more powerful products and I still think a lot of people are sleeping on it.\\n\\n### What is a chatting bot platform?\\n\\nAccording to [ChatGPT](https://chat.openai.com/chat):\\n\\n> _\u201cA chatbot platform is a software service or tool that enables the creation, management, and deployment of chatbots. These platforms typically provide a variety of tools and features for building, testing, and deploying chatbots, as well as options for integrating chatbots with other systems or services. Some chatbot platforms are designed to support the development of chatbots for specific industries or use cases, such as customer service, e-commerce, or marketing. Others are more general purpose, and can be used to build chatbots for a wide range of applications.\u201d_\\n\\n
    \\n\\n### Why are chat bots not engaging?\\n\\nI believe that one of the reasons for this is because people usually associate chatbots with customer service or marketing. Not as a finalized product but as a feature.\\n\\nIf I ask ChatGPT about this, the main reasons are: Lack of personalized conversation, limited capabilities, poor design and high error rate.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/fb23b0b4-70db-42c4-91be-00acec6cb57e)\\n\\nBut wait.. ChatGPT is **LITERALLY** a chat bot. Everything happens through a chat interface, which shows that you can build a successful product as a bot, as long as it adds enough value to the user.\\n\\nOne could argue that ChatGPT is not done in an established chatting platform, and that is **partially true**. The reason I say partially is because ChatGPT has an API, so developers can use it to develop their own chatting bots and deploy it in whatever chatting app they are interested in.\\n\\n## Examples of good chatting platforms\\n\\nI believe that Discord is in the forefront here due to: Free, easy to use, allows customizing servers with roles/channels/permissions, high-quality voice chat, strong communities.\\n\\nA testament to this is the fact that [midjourney](https://midjourney.com/) has built a successful chat bot that generates images from text prompts using AI, **SOLELY** relying on Discord. If you go into their website, the button \u201c**Join the Beta**\u201d takes you to their Discord server which has over **7 million users**!\\n\\nAs far as I know, this is the only example of a company that distributes their product solely through a chatting platform in a successful way.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/514207d5-12cb-4103-8437-5883c4fd1d8f)\\n\\n## Why are chat bots getting more popular?\\n\\nIn my opinion, there are a few factors why chat bots are becoming more popular:\\n\\n### Interactivity\\n\\nThe bots are becoming more interactive, almost working like an application within a chatting platform.\\n\\n![interactivity](https://github.com/DidierRLopes/my-website/assets/25267873/5986adc9-66d3-45cb-80b1-ddf2419eaacf)\\n\\n### Speed\\n\\nThe speed of interaction is increasing over time, making the experience more seamless.\\n\\n![speed](https://github.com/DidierRLopes/my-website/assets/25267873/c90f5a56-1bd5-4ed7-92ce-69bb730e8434)\\n\\n### Customization\\n\\nThe level of customization allowed for these bots keeps on increasing.\\n\\n![customization](https://github.com/DidierRLopes/my-website/assets/25267873/9107c913-c619-4e95-adef-16171e32da9f)\\n\\n### Automation\\n\\nYou are starting to be able to create automated workflows. Not only for you, but for entire communities.\\n\\n![automation](https://github.com/DidierRLopes/my-website/assets/25267873/05f5b4ee-09cc-4d30-b72a-3fa6e766a348)\\n\\n### Notifications\\n\\nIt has notification features that can ping you similarly as if a friend sent you a message.\\n\\n![notifications](https://github.com/DidierRLopes/my-website/assets/25267873/ecd85467-e63c-4093-b185-deb5a3967905)\\n\\n### Monetization\\n\\nYou are going to start to be able to monetize products through it.\\n\\n![monetization](https://github.com/DidierRLopes/my-website/assets/25267873/ecdfd4f4-ef5e-4e2e-a8f9-c6d0152e317a)\\n\\n### Community\\n\\nYou can use it within a server with friends/colleagues, and unlock a better user experience.\\n\\n![community](https://github.com/DidierRLopes/my-website/assets/25267873/a36bd629-813f-4678-b6bf-6008cdc7b8f5)\\n\\n### Standardization\\n\\nThe product can work similarly on multiple chatting platforms. By keeping the same method of interaction / commands, the user is allowed to pick their favourite chatting platform or even use it in more than 1.\\n\\n![standardization](https://github.com/DidierRLopes/my-website/assets/25267873/533b579d-9283-4d0e-a1bf-bd233ce2814f)\\n\\n### Accessibility\\n\\nThese chatting platforms are developed for all devices and operating systems, making it a very powerful distribution system.\\n\\n![last](https://github.com/DidierRLopes/my-website/assets/25267873/0d240921-fde4-4f38-98a9-fa68911d6344)\\n\\n## Why Finance?\\n\\nI\u2019ve spoke with over 100 people in the financial world in 2022. Over 50 are Bloomberg users. From those, 90% agree that their chatting feature is the most attractive feature \u2014 some of them going further and saying that that is the reason why they pay for it.\\n\\nBut what if you didn\u2019t need to pay $26 k / year for such feature. What if you could pay to have access to servers with big names in the industry? Or what if you could create your own servers? What if while you were talking with Cathie Wood about ARK performance, you could also access financial data from ARK to back up your arguments? All this while not leaving the chat.\\n\\nThis is the reason why I believe that financial chatting bots will become popular in 2023. And [OpenBB Bot](https://openbb.co/products/bot) will be leading that wave.\\n\\nTry it out for free on [OpenBB Discord server](https://openbb.co/discord) by using a command such as `/chart TSLA` and let me know what you think."},{"id":"firing-sucks-how-to-avoid-doing-so-by-hiring-a-players","metadata":{"permalink":"/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-players","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-01-02-firing-sucks-how-to-avoid-doing-so-by-hiring-a-players.md","source":"@site/blog/2023-01-02-firing-sucks-how-to-avoid-doing-so-by-hiring-a-players.md","title":"Firing sucks. How to avoid doing so by hiring A players.","description":"Firing is tough. This blogpost discusses how to avoid it by hiring A players, improving the hiring process, and understanding the importance of a scorecard in recruitment.","date":"2023-01-02T00:00:00.000Z","formattedDate":"January 2, 2023","tags":[{"label":"Hiring","permalink":"/blog/tags/hiring"},{"label":"Management","permalink":"/blog/tags/management"},{"label":"A Players","permalink":"/blog/tags/a-players"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"Career Advice","permalink":"/blog/tags/career-advice"}],"readingTime":18.91,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"firing-sucks-how-to-avoid-doing-so-by-hiring-a-players","title":"Firing sucks. How to avoid doing so by hiring A players.","date":"2023-01-02T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280553099-c13a3c1f-b347-4703-b23b-1247c8fcf01e.png","tags":["Hiring","Management","A Players","OpenBB","Career Advice"],"description":"Firing is tough. This blogpost discusses how to avoid it by hiring A players, improving the hiring process, and understanding the importance of a scorecard in recruitment."},"prevItem":{"title":"Financial chat bots are underrated, and here\u2019s why.","permalink":"/blog/financial-chat-bots-are-underrated-and-heres-why"},"nextItem":{"title":"How ChatGPT allowed me to leverage Twitter API 10x faster","permalink":"/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nFiring is tough. This blogpost discusses how to avoid it by hiring A players, improving the hiring process, and understanding the importance of a scorecard in recruitment.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nIn 2022, [OpenBB](http://openbb.co/) grew to 20 people. But amongst all of our hiring, we also had to let some people go.\\n\\nBefore 2022, I had never fired anyone in my life but in my new role, I had to learn how to do it. If you\u2019re a manager, you know that this is the hardest part of the job.\\n\\nHaving that said, I wanted to use my Christmas holidays to understand how we can avoid letting people go. For this, I needed to start from the beginning and improve our overall hiring process.\\n\\nThis blogpost will be highly based on the book **\u201cWho: The A Method for Hiring\u201d by Geoff Smart and Randy Street**, which I highly recommend.\\n\\n## A method for hiring\\n\\nWhat is an A player? _A candidate who has at least a 90 percent chance of achieving a set of outcomes that only the top 10 percent of possible candidates could achieve.\\n\\nIn this post, I will go over the steps to get an A team.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/476a3287-d591-4ab2-b261-0c1fed53ca45)\\n\\n## Scorecard\\n\\nThis is a document that describes the mission for the position, outcomes that must be accomplished, and competencies that fit with both the company culture and the role.\\n\\nThis is an example of what a scorecard should look like:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e513bd3d-ea16-4d5e-828e-5243846f2161)\\n\\nLet\u2019s go through each of the sections in this document.\\n\\n### Mission\\n\\nThe mission is an executive summary of the job\u2019s core purpose. It boils the job down to its essence so everybody understands why you need to hire someone in this role.\\n\\nThe book talks about how you should avoid hiring a generalist. In my opinion, it depends on the stage of the company. At OpenBB, we are able to ship fast with a small team because we have a lot of generalists that are A players. However, finding a generalist A player is a much harder task than finding an A player specialist. Here, we benefit from having an open source project, since we get to build with candidates before we hire them.\\n\\n**How to:** _Develop a short statement of one to five sentences that describe why a role exists._\\n\\n### Outcomes\\n\\nDescribes what a person needs to accomplish in a role.\\n\\n> _\u201cWhile typical job descriptions break down because they focus on activities, or a list of things a person will be doing, scorecards succeed because they focus on outcomes, or what a person must get done.\u201d_\\n\\n
    \\n\\n**How to:** _Develop 3 to 8 specific objective outcomes that a person must accomplish to achieve an A performance, ranked by order of importance._\\n\\n### Competencies\\n\\nDefine how you expect a new hire to operate in the fulfilment of the job and how they can achieve their objectives. What competencies really count?\\n\\n#### Ensure behavioural fit\\n\\nCritical competencies for A players are: Efficiency, honesty/integrity, organization, aggressiveness, follow-through, intelligence, analytical skills, attention to detail, persistence, proactivity.\\n\\nOthers may include: Ability to hire A players, ability to develop people, flexibility/adaptability, calm under pressure, strategic thinking/visioning, creativity/innovation, enthusiasm, work ethic, high standards, listening skills, openness. to criticism and ideas, communications, team work and persuasion.\\n\\n#### Ensure organizational fit\\n\\nEvaluating cultural fit begins with evaluating your company\u2019s values against the ones of the candidate.\\n\\nRecently, at OpenBB, I asked everyone to share with me a list of values that we currently had and they were proud of, and/or values that they would like to use instead. In a startup, where the pace is incredibly fast and the team is in constant change, I strongly believe values change over time. So I looked at everyone\u2019s inputs, and summarized them into the following OpenBB values: **Autonomy and Ownership, Innovation and Excellence, Transparent and Trustworthy, Diversity and Inclusion, Purpose and Passion, User Focused and Community Oriented.**\\n\\n**How to:** _Identify as many role-based competencies that you think are appropriate to describe the behaviors that someone must demonstrate to achieve the outcomes. Next, identify 5 to 8 competencies that describe your culture and place those on every scorecard._\\n\\n### From scorecard to strategy\\nThe beauty of a document like this is that they become the blueprint that links the theory of strategy to the reality of execution. They translate your business plans into role-by-role outcomes, create alignment among your team, unify your culture and ensure people understand your expectations.\\n\\nIn addition, they allow you to monitor employee progress over time in your annual review system and to rate your team as part of their talent review progress.\\n\\n**How to:** _Pressure-test your scorecard by comparing it with the business plan and scorecards of the people who will interface with the role. Ensure that there is consistency and alignment. Then share the scorecard with relevant parties, including peers and recruiters._\\n\\n## Source\\n\\nSystematic sourcing before you have slots to fill ensures you have high-quality candidates waiting when you need them.\\n\\n### Referrals from your professional and personal networks\\n\\nCreate a list of the ten most talented people you know and commit to speaking with at least one of them per week for the next ten weeks. At the end of each conversation ask \u201cWho are the most talented people you know?\u201d. Continue to build your list and continue to talk with at least one person per week. \u201c_Of all the ways to source candidates, the number one method is to ask for referrals from your personal and professional networks_\u201d.\\n\\n### Referrals from your employees\\n\\nAdd sourcing as an outcome on every scorecard for your team. Encourage employees to ask people in their networks. Offer a referral bonus. In-house referrals often provide better-targeted sourcing, this is because employees already know our needs and culture.\\n\\n### Deputizing friends of the firm\\n\\nConsider offering a referral bounty to select friends of the firm. It could be as inexpensive as merchandise or as expensive as a significant cash bonus. When talking with someone new at a party or a VC, always ask \u201c_who do you know who might be a good fit for my company?_\u201d\\n\\n### Sourcing system\\n\\nCreate a system that (1) captures the names and the contact information on everybody you source and (2) schedules weekly time on your calendar to follow up. Try to spend 30 minute every week sending messages or having calls with candidates from this database of A players.\\n\\n### Hiring external recruiters or hiring recruiting researchers\\n\\nThe book speaks about both, but from my experience of having an open company with an exciting mission that builds in public, these have not been relevant to us yet.\\n\\n## Select\\n\\nCreate a series of structured interviews which build on each other so you can rate your scorecard.\\n\\n### Screening Interview\\n\\nShort, phone-based interview designed to clear out B and C players from your roster of candidates.\\n\\n1. **What are your career goals?** If no goals echo your own website goals, screen them out. Ideally candidate will speak with passion and energy about their goals which are aligned with the role.\\n\\n2. **What are you really good at professionally?** Make sure that with the list of strengths, there are always examples to backup the claim. Ensure that those strengths are relevant to the competencies required in the scorecard, if not, screen them out.\\n\\n3. **What are you not good at or not interested in doing professionally?** Ignore strengths disguised as weakness. Ask again \u201cwhat are you really not good at or not interested in doing?\u201d, talented people will catch the hint. If you\u2019re still struggling to get a proper answer, put the fear of a reference check into the person \u2014 \u201cif you advance to the next step in our process, we will ask for your help in setting up some references. (\u2026) What would these references say are something things you are not good at or not interested in?\u201d\\n\\n4. **Who were your last five bosses, and what would they each rate your performance on a scale of 1\u201310 WHEN we talk to them?** The word \u2018when\u2019 is the key to unlock the truth. A rating of 7 is neutral, we are looking for 8 and above. After the rating answer always press for details.\\n\\n
    \\n\\nIf you are happy with the interview so far, conclude the call by offering the candidate an opportunity to ask questions. Otherwise just thank them for their time.\\n\\n**Tips:**\\n\\n- Always compare the person\u2019s strengths with the ones on the scorecard.\\n- When in doubt, there\u2019s no doubt. You need to have the feeling that you have found the one.\\n- Get curious: What, How, Tell me more. Keep using this framework until you are clear about what the person is really saying.\\n- Hit the gong fast. If an answer automatically rules out a candidate, just end up the interview earlier and use your precious time to focus on A players.\\n\\n### Who to Interview\\n\\nChronological walk-through of a person\u2019s career.\\n\\nYou can begin by asking about the highs and lows of a person\u2019s educational experience to gain insight into their background. After this, ask them 5 simple questions for each job they had in the past.\\n\\n#### What were you hired to do?\\n\\nYou are trying to discover what their scorecard might have been if they had one for that role. Ask them \u201chow was your success measured in the role? What was the mission and key outcomes? What competencies mattered?\u201d.\\n\\n#### What accomplishments are you most proud of?\\n\\nIdeally, candidates will tell you about accomplishments that match the job outcomes they just described to you. Even better if they match the ones of the scorecard for the position you are trying to fill.\\n\\nNote: _A players tend to talk about outcomes linked to expectations, B and C players talk generally about events, people they met, or aspects of the job they liked without ever getting into results._\\n\\n#### What were some of the low points during that job?\\n\\nPeople can be hesitant to share their lows at first. Keep reframing the question over and over until the candidate gets the message. E.g. \u201c_What went really wrong? Biggest mistake? done differently? parts you didn\u2019t like? peers stronger than you?_\u201d\\n\\n#### Who were the people you worked with?\\n\\n- **What was your boss\u2019s name and how do you spell that?**\\n\\nForcing candidates to spell the name out no matter how common it might be sends a powerful message: you are going to call, so they should tell the truth. This is referred as the \u201cthreat of reference check (TORC)\u201d.\\n\\n- **What was it like working with them?**\\n\\nIdeally, you expect high praise for their bosses and how they received mentoring and coaching from them over the years. A neutral answer will sound somewhat more reserved \u2014 not positive nor negative.\\n\\n- **What WILL they tell me about your biggest strengths and areas to improve?**\\n\\nUse \u201cwill\u201d instead of \u201cwould\u201d so candidates know you mean business, and are therefore, more likely to tell you the truth since you will learn it from reference calls anyways. Dig in as much as you can.\\n\\n- **How would you rate the team you inherited on an A, B, C scale? What changes did you make? Did you hire anybody? Fire anybody? How would you rate the team when you left it on A,B,C scale.**\\n\\nThis is applicable to managers. And allows you to understand how they approach building a strong team. Do they accept the hand they have been dealt with or do they make changes to make a better hand? What changes do they make? How long does it take?\\n\\nApply TORC here too: _\u201cWhen we speak with team members of your team, what will they say were your biggest strengths and weaknesses as manager?\u201d_\\n\\n#### Why did you leave that job?\\n\\nWas the candidate promoted, recruited or fired from each job? How did they feel about it? How did their boss react to the news? E.g. A players are highly valued by their bosses.\\n\\nGet curious. Find out why and stick with it until you have a clear picture of what actually happened.\\n\\n**Conducting an effective who interview**\\n\\n- The hiring manager should conduct this interview. They own the hire, and are the ones who will suffer the consequences of making a mistake. Their career and job happiness depend on finding A players.\\n- Conduct an interview with a colleague (e.g. someone from HR, another manager or member of your team), this allows you to focus on questions and someone else to take notes.\\n- Kick off the interview by setting expectations, e.g. _\u201cWe are going to walk through each job you have held, for each job I am going to ask you five core questions. At the end we will discuss your career goals and aspirations and you will have a chance to ask me questions. If we mutually decide to continue, we will conduct reference calls to complete the process\u201d._\\n\\n**Master tactics**\\n\\n1. **Interrupting.** You have to interrupt the candidate, there is no avoiding it. At least once every 3/4 minutes. Smile broadly, match their enthusiasm level, and use reflective listening to get them to stop talking without demoralizing them.\\n2. **The three P\u2019s.** This helps you understand how valuable an accomplishment was in any context. (1) How did the performance compare to the previous year\u2019s performance; (2) How did your performance compare to the plan?; (3) How did your performance compare to that of peers?\\n3. **Push versus Pull.** People who perform are generally pulled to greater opportunities. People who perform poorly are often pushed out of their jobs.\\n4. **Painting a picture.** You\u2019ll only understand what a candidate is saying when you can literally see a picture of it in your mind. Always try to put yourself in their shoes.\\n5. **Stopping at the Stop signs.** Look for shifts in body language and other inconsistencies. \u201cWe did great in that role\u201d while shifting in their chair, looking down and covering their mouth may be a stop sign. When that happens, get curious and understand how \u201cgreat\u201d they actually did. What was actually their contribution?\\n\\n### Focused Interview\\n\\nGetting to know more. This is NOT another Who interview. It provides the chance to invite other team member to get their opinion, but the script should be followed. Think of this interview as the \u201codds enhancer\u201d to truly focus on the outcomes and/or competencies on the scorecard.\\n\\n1. The purpose of this interview is to talk about [specific outcome or competency]\\n2. What are your biggest accomplishments in this area during your career\\n3. What are your insights into your biggest mistakes and lessons learned in this area?\\n\\n
    \\n\\nDon\u2019t be scared to use the \u201cWhat? How? Tell me more\u201d framework until you understand what the person did and how they did it.\\n\\nFeel free to have multiple shorter focused interviews to understand particular outcome/competencies.\\n\\n**Double-check the cultural fit.** Final gauge on the cultural fit \u2014 **critical!** Include competencies and outcomes that go beyond the specifics of the job to embrace the larger values of your company.\\n\\n### Reference Interview\\n\\nTesting what you learned. Don\u2019t skip the references!\\n\\n1. Pick the right references. Review your notes from the Who interview and pick the bosses, peers, and subordinates with whom you would like to speak. Don\u2019t just use the reference list the candidate gives you.\\n2. Ask the candidate to contact the references to set up the calls. Some companies have a policy that prevents employees from serving as references, so you can increase your chances of talking with a reference if the candidate sets this up.\\n3. Conduct the right number of reference interviews. The book recommends 3 past bosses, 2 peers/customers and 2 subordinates.\\n\\n
    \\n\\n**Reference interview guide:**\\n\\n1. **In what context did you work with the person?** Conversation starter and memory jogger.\\n2. **What were the person\u2019s biggest strengths?** Ask for multiple examples to put strengths and development areas into context. Don\u2019t forget to get curious by using \u201cWhat? How? Tell me more\u201d framework to clarify responses.\\n3. **What were the person\u2019s biggest areas for improvement back then?** The wording \u2018back then\u2019 liberates the reference to talk about weaknesses that existed in the past. \u201cIn truth, we believe, people don\u2019t change that much. People aren\u2019t mutual funds. Past performance really is an indicator of future performance.\u201d\\n4. **How would you rate their overall performance in that job on a 1\u201310 scale?** What about their performance causes you to give that rating? Remember that 6 is really a 2. How does this rating compare with what the candidate said in advance? Wide discrepancy is alarming.\\n5. **The person mentioned that they struggled with ____ on that job. Can you talk more about that?** Test something the candidate told you by framing it as a question for the reference. E.g. \u201cthe person mentioned that you MIGHT SAY he was disorganized. Can you tell me more about that?\u201d the wording is again very important as \u2018might say\u2019 suggests to the reference that they have permission to talk about the subject because the candidate raised it.\\n\\n
    \\n\\nThese questions follow the same pattern as the other interviews. This makes it very easy to merge what you hear with what you have already learned about a candidate.\\n\\n**Tips:**\\n\\n- **Avoid accepting a candidate\u2019s reference list at face value.** E.g. either use your own network for gathering objective unbiased data or try to reach out to subordinates or people two levels below who interacted with the candidate to get a more honest answer.\\n- **Hearing or understanding the code for risky candidates.** Be able to read between lines. People don\u2019t like to give negative reference, so your best defense is to pay close attention to what people say and how they say it. Examples of bad signs: If they just confirm dates of employment, um\u2019s and er\u2019s is hesitation, absence of enthusiasm (faint praise).\\n\\n### Decide who to hire\\n\\n**Skill-Will Bull\u2019s Eye**\\n\\nDoes somebody\u2019s skill (what they can do) and will (what they want to do) match your scorecard? This is a person\u2019s skill-will profile.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/9bc79e6d-34b8-41da-8fd2-57b6d9ffdc75)\\n\\nYou should have plenty of data at this stage to make this assessment.\\n\\n- **Skill has to do with a candidate\u2019s ability to achieve the individual outcomes on your scorecard.** If you believe a candidate has a 90% or better chance to achieve a certain outcome based on the data gathered, rate them an A, otherwise a B or a C. Repeat for each outcome.\\n- **Will has to do with the motivations and competencies a candidate brings to the table.** For each competency, does the data suggest there is a 90% or better chance that the candidate will display that competency? If so rate them an A, otherwise a B or C. Repeat for each competency.\\n\\nAn A player is someone whose skill and will match your scorecard. Anything less is a B or C, no matter the experience or seeming talent level.\\n\\n**Red Flags: When to dive beneath the surface**\\n\\nThese flags may not be deal killers, but they are likely to signal that there is something worth exploring beneath the surface:\\n\\n- Does not mention past failures\\n- Exaggerates their answers\\n- Takes credit for the work of others\\n- Speaks poorly of past bosses\\n- Cannot explain job moves\\n- People most important to the candidate are unsupportive of a change\\n- For managerial hires, never had to hire or fire anybody\\n- Seems more interested in compensation and benefits than in the job itself\\n- Tries too hard to look like an expert\\n- Self-absorbed\\n\\nMore behavioral warning signs:\\n\\n- Winning too much\\n- Adding too much value\\n- Starting a sentence with \u2018no\u2019, \u2018but\u2019, or \u2018however\u2019\\n- Telling the world how smart we are\\n- Making destructive comments about previous colleagues\\n- Blaming others\\n- Making excuses\\n- The excessive need to \u2018be me\u2019\\n\\n**How to decide:**\\n\\n1. Take out your scorecards that you have completed on each candidate\\n2. Make sure you have rated all of the candidates on the scorecard. If you have not given each candidate an overall A, B or C grade, do so now. Make any updates you need to based on the reference interviews. Look at the data, consider the opinions and observations of the interview team, and give a final grade.\\n3. If you have no A\u2019s, then restart your process and the second step: source.\\n4. If you have one A, decide to hire that person.\\n5. If you have multiple A\u2019s, then rank them and decide to hire the best A among them.\\n\\n## Sell\\n\\nOnce candidates pass the selection, persuade them to join. The key to successfully selling your candidate to your company is putting yourself in their shoes.\\n\\n### Five F\u2019s of selling\\n\\nThere are 5 areas that candidates tend to care about, make sure to address each of these 5 areas until you get the person onboard.\\n\\n1. **Selling Fit:** This ties together the company\u2019s vision, needs and culture with the candidate\u2019s goals, strengths and values.\\n2. **Selling Family:** Takes into account the broader trauma of changing jobs.\\n3. **Selling Freedom:** The autonomy the candidate will have to make their own decisions.\\n4. **Selling Fortune:** Reflects the stability of your company and the overall financial upside.\\n5. **Selling Fun:** Describes the work environment and personal relationships the candidate will make.\\n\\n### Five waves of selling\\n\\nSelling should be something that happens throughout the entire hiring process. In particular, there are five distinct phases that merit increased selling effort:\\n\\n1. When you source\\n2. When you interview\\n3. The time between your offer and the candidate acceptance\\n4. The time between the candidate\u2019s acceptance and their first day\\n5. The new hire\u2019s first one hundred days on the job\\n\\n### Persistent pays off\\n\\nOnce you have identified the right candidate, you must be persistent and do whatever you can to sign the deal.\\n\\n### How to: sell A Players\\n\\n1. Identify which of the five F\u2019s really matter to the candidate.\\n2. Create and execute a plan to address the relevant F\u2019s during the five waves of selling.\\n3. Be persistent. Don\u2019t give up until you have your A player on board.\\n\\n## Conclusion\\n\\nIn a more simplistic image, this is what the A method boils down too.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/3b6c111c-1c92-4819-ba71-7251bb21e69f)\\n\\nI really enjoyed reading this book and I am taking a lot of these learnings to improve the hiring processes at OpenBB."},{"id":"how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster","metadata":{"permalink":"/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-12-11-how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster.md","source":"@site/blog/2022-12-11-how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster.md","title":"How ChatGPT allowed me to leverage Twitter API 10x faster","description":"Leveraging the power of ChatGPT to interact with Twitter API for real-time financial news updates.","date":"2022-12-11T00:00:00.000Z","formattedDate":"December 11, 2022","tags":[{"label":"ChatGPT","permalink":"/blog/tags/chat-gpt"},{"label":"Twitter API","permalink":"/blog/tags/twitter-api"},{"label":"Tweepy","permalink":"/blog/tags/tweepy"},{"label":"Python","permalink":"/blog/tags/python"},{"label":"Programming","permalink":"/blog/tags/programming"}],"readingTime":2.4,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster","title":"How ChatGPT allowed me to leverage Twitter API 10x faster","date":"2022-12-11T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280552939-af9954fe-c1ff-4fc7-802a-a81c82adb86d.png","tags":["ChatGPT","Twitter API","Tweepy","Python","Programming"],"description":"Leveraging the power of ChatGPT to interact with Twitter API for real-time financial news updates."},"prevItem":{"title":"Firing sucks. How to avoid doing so by hiring A players.","permalink":"/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-players"},"nextItem":{"title":"How I wrote a machine learning paper in 1 week that got accepted to International Conference in Machine Learning Applications","permalink":"/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nLeveraging the power of ChatGPT to interact with Twitter API for real-time financial news updates.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nFor a while now, users have been asking for adding real-time financial news on [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal).\\n\\nSince OpenBB Terminal is a command line interface for the world\u2019s financial data, and there is no threading going on \u2014 there was never a very straightforward way to do this.\\n\\n**Until today.**\\n\\nAfter recalling [this tweet](https://twitter.com/elonmusk/status/1591121142961799168?s=20&t=j-cjTu-XA9SNcY8PBrbUnQ) from Elon earlier in November, I realized that I\u2019ve been using Twitter for news substantially more than MSM.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d7c7a808-90d6-4cea-8128-8edc95262664)\\n\\nSo, my next train of thought was; What if I was able to somehow display the latest tweets from Twitter accounts that I trust. In particular, accounts that have up-to-date information and usually mention the words \u201cJUST IN\u201d or \u201cBREAKING\u201d. E.g. [@WatcherGuru](https://twitter.com/WatcherGuru) or [@unusual_whales](https://twitter.com/unusual_whales).\\n\\nBy doing this, I could then use the bottom of the OpenBB Terminal to highlight the news. An example of this is below:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/5335cbf9-eebe-44e4-8944-7284e8797abe)\\n\\n## Coding and ChatGPT\\n\\nThe next step for me was to implement the code!\\n\\nFirst, I needed to understand how I could have access to the last tweet of a specific user account. I already had a Twitter API account created, which meant I already had the key, token and secrets, therefore, I just needed to read documentation to understand how to use the Twitter API. Hence, I started reading [Twitter\u2019s developer documentation](https://developer.twitter.com/en/docs/twitter-api/tweets/search/api-reference/get-tweets-search-recent).\\n\\nThe day before I had been playing around with ChatGPT. And like everyone else, I was very impressed. One of the things that surprised me the most was how good it was at outputting working code with an explanation along the lines.\\n\\nSo, while I was reading the documentation, I was thinking \u201cI wish there was a way for me to just be able to get the last N tweets of an account without needing to dig in the developer documentation\u201d. Could ChatGPT be the answer?\\n\\nSo I tried\u2026\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/dd94a0f4-20a1-4bb5-92dc-fa598fb095ac)\\n\\nThis was already amazing. But I\u2019m lazy and didn\u2019t want to copy all the cells individually to put it into a Jupyter notebook, so asked ChatGPT to provide the code output as a single block. I wasn\u2019t convinced it was going to work. **But it did**.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/4294d79a-fdaf-4593-8621-686db0dc13af)\\n\\n\u2026 it just worked. \ud83e\udd2f\\n\\nAfter that, I needed the timestamp associated with the tweet, to see how old it was. As usual, I started looking into [Tweepy documentation](https://docs.tweepy.org/en/latest/authentication.html#twitter-api-v2).\\n\\n**Ups, what was I doing again?**\\n\\nAfter a couple of seconds, I went onto ChatGPT and asked how I could get the timestamp of a tweet using Tweepy library.\\n\\n**And \ud83e\ude84, it worked again!!!**\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/af9954fe-c1ff-4fc7-802a-a81c82adb86d)\\n\\nOne thing that is for sure: ChatGPT is going to truly disrupt many industries. And I will be here for it.\\n\\nPS: The PR with this addition is in development [here](https://github.com/OpenBB-finance/OpenBBTerminal/pull/3757)."},{"id":"how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla","metadata":{"permalink":"/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-12-07-how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla.md","source":"@site/blog/2022-12-07-how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla.md","title":"How I wrote a machine learning paper in 1 week that got accepted to International Conference in Machine Learning Applications","description":"How I wrote a machine learning paper in 1 week that got accepted to ICMLA while working full time and raised $8.8 million for OpenBB Terminal.","date":"2022-12-07T00:00:00.000Z","formattedDate":"December 7, 2022","tags":[{"label":"Machine Learning","permalink":"/blog/tags/machine-learning"},{"label":"Data Science","permalink":"/blog/tags/data-science"},{"label":"Academia","permalink":"/blog/tags/academia"},{"label":"ICMLA","permalink":"/blog/tags/icmla"},{"label":"NURVV Run","permalink":"/blog/tags/nurvv-run"},{"label":"Open Source","permalink":"/blog/tags/open-source"}],"readingTime":10.895,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla","title":"How I wrote a machine learning paper in 1 week that got accepted to International Conference in Machine Learning Applications","date":"2022-12-07T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280552697-4de8034a-3530-43f3-8b3f-1c703c6dd001.png","tags":["Machine Learning","Data Science","Academia","ICMLA","NURVV Run","Open Source"],"description":"How I wrote a machine learning paper in 1 week that got accepted to ICMLA while working full time and raised $8.8 million for OpenBB Terminal."},"prevItem":{"title":"How ChatGPT allowed me to leverage Twitter API 10x faster","permalink":"/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster"},"nextItem":{"title":"The future of finance with open source and AI","permalink":"/blog/the-future-of-finance-with-open-source-and-ai"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nHow I wrote a machine learning paper in 1 week that got accepted to ICMLA while working full time and raised $8.8 million for OpenBB Terminal.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/step-detection-ML).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nOne year ago, I raised $ 8.8 millions to build [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal) full time. But since I was working at a startup in the UK, I had a 3 month notice period.\\n\\nDuring that time I worked on documenting pretty much everything I had been working on, BUT that felt short. I felt like the data that came out of our [NURVV Run](http://www.nurvv.com/) product could be used with a machine learning algorithm in order to detect a foot strike quite efficiently.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/cc98a4d3-8540-4510-9a0c-04716ae1f965)\\n\\nSo I asked my company:\\n\\n> _If I use my spare time to work on this paper will you sponsor me if I get accepted?_\\n\\n
    \\n\\n**My goal was to increase the visibility of our product in academia.** And given I spent some time reading papers in the area, I knew that what I had in mind had a shot at working.\\n\\n**My background is not data science, and this was my first time \u201cofficially\u201d working on machine learning.** I wasn\u2019t 100% sure that my idea would work, but after spending more than 1 year at the company, I knew how the data behaved. I thought I could build an algorithm robust enough to be able to detect a foot strike more efficiently than what others had.\\n\\nAfter some time, the company accepted my proposal, and between the time to decide to apply to [International Conference on Machine Learning and Applications (ICMLA)](https://www.icmla-conference.org/icmla21/) and getting ready to start working on the paper, there was 1 week left.\\n\\nI thought that this window was rather tight given that I had to clean the data, work on the entire code behind the paper from idea to implementation, and write the damn paper. **I knew this was gonna be tight, but oh boy.** I had one of the harshest weeks of my life. I barely slept for 7 straight days, and skipped the company team event in order to make it through the deadline.\\n\\nBecause of that, I will go into what happened at each step along the way with images. I will skip the cleaning data and boring parts, don\u2019t worry. If you just want to read the final paper, you can find it here: [\u201dStep Detection using SVM on NURVV Trackers\u201d](https://ieeexplore.ieee.org/abstract/document/9680024).\\n\\nAlso, if you\u2019ve been following me, you know how much I love open source. Owing to that I open source the code behind the project [here](https://github.com/DidierRLopes/step-detection-ML).\\n\\n## Exploratory Data Analysis\\n\\nThe Nurvv trackers have an **Inertial Measurement Unit (IMU) tracks linear acceleration (accelerometer) and rotational rate (gyroscope)**. Sometimes it also contains a magnetometer. And Nurvv gave me access to 6 runs from 6 different runners.\\n\\nMy first step was to look into how this data looked. On the left you can see the acceleration (m/s\xb2) and the angular velocity (rad/s).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/6d4bf022-e6d3-43f2-971f-55977766ed7e)\\n\\nI knew that our **IMU had a sampling rate of 1125 Hz** (which means that each data point gets sampled at approximately every 888.89\u03bcs) and **this was critical in order to detect the oscillations that occur when a foot strike occurs** (i.e. impact of the foot on the floor makes the IMU oscillate). Thus I zoomed in the zone of impact and used a scatter plot to understand if we were \u201cmissing\u201d information.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/20921a7e-9407-4ff0-9d81-b36de1358231)\\n\\nI found it interesting that **the distance between the samples were larger at the time of the impact**. So I plotted the IMU accelerometer data and the IMU gyroscope data in a 3D plot interactively as a function of time (below you can see a snapshot).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/10936207-7a13-4ab8-8988-3a6b8c1caa22)\\n\\nFrom here it was interesting to note that when the foot is in the air, the samples are somehow concentrated (darker blue), whereas when a step occurs (more sparse) they behave erratically. The plot above was snapshotted with 3 steps that occurred.\\n\\nFrom that 3D plot I had the intuition that by utilizing a **principal component analysis (PCA**)**, I could reduce the dimensionality without losing much information. The result is shown below,\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/3b97fb32-fdc3-4f12-aca2-fc9feecc5b1d)\\n\\nThis made me think that I could use a **support vector machine (SVM)** in order to detect whether a foot strike has occurred or not. And what I was most excited about it was:\\n\\n- **This model isn\u2019t time-dependant.** Meaning that it would be fascinating to be able to predict whether a step occurred or not without the notion of time, but the current IMU data.\\n- We can develop an SVM model for each runner style. Then create an **ensemble model with hard voting** which allowed for the model that has seen more similar data, to be more confident in the classification of foot strike vs not foot strike.\\n\\nBut this was all a theory, I needed to prove it.\\n\\nThe first issue I had was: **SVM is a supervised learning model**. This meant that for the sampling data I was providing the model, I would have to classify whether those samples corresponded to a foot strike or not.\\n\\n**The issue?** Although the product had **force sensitive resistors (FSR)** in the insoles, I didn\u2019t have access to the samples that corresponded with these IMU samples.\\n\\nSo I knew that I would have to classify the data myself. Manually would have been a nightmare and not reliable enough, so I needed to build an algorithm that could classify the data quite reliably. **Signal processing theory, here I go.**\\n\\n### Labelling data for a supervised learning problem\\n\\n1. Get the raw IMU samples (accelerometer and gyroscope)\\n2. Do the difference in magnitude between the accelerometers samples and then the gyroscope samples\\n3. Apply root sum squared to the magnitude difference of accelerometer data, and then similarly to gyroscope data\\n4. Standardize the accelerometer data and the gyroscope data. This is so the data can be somehow compared with each other since the magnitude varies as one represents linear acceleration and the other angular rate.\\n5. Do the average between these 2 signals. This makes the data more robust.\\n6. Finally, apply a convolution to the resulting signal with a rectangular pulse. This allows to remove \u201cdrops\u201d from the signal and ensures a smoother signal.\\n\\n
    \\n\\nBelow you can see the formulas and signal changes that were made in order to obtain the final result:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/c3d365a4-ac66-402f-8584-ce2892c7805c)\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/48edd37d-cc62-4960-831f-0c676ed3884e)\\n\\nAfter this, I selected a sensible value of 0.3 to be used as a threshold on the resulting signal to classify step vs no-step.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/8c7185c4-21f6-410d-9334-1f58df71d151)\\n\\nI applied the difference between each first foot strike detected in order to make sure that there was no missed step. As you can see above the stride time is around 700ms which is what is expected of a runner jogging.\\n\\nSomeone might be wondering; If this gives such a great result, why did I need machine learning in the first place? **The reason is because standardization and convolution (steps 4 and steps 6) are a post-processing signal technique.** Therefore, it cannot be deployed in running time, and relies on data that happens in the future.\\n\\nFor illustration purposes, here is how the initial raw IMU data behaves against the labelling from signal processing approach (red background means no step, while green background means step).\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/394a59f7-6fe5-4272-85c0-a91b427bd22a)\\n\\n## Support Vector Machine for classification\\n\\nFor the model, SVM was selected because:\\n\\n- It works well with high dimensional data (6 IMU samples) because it only uses a few of these points (called support vectors) to create this hyperplane (decision boundary) between classes.\\n- SVM is ideal for binary classification problems.\\n- RBF kernel allows to handle non-linear data.\\n\\nThis is the type of classification that SVM is capable of (this is the raw acceleration data with a PCA applied, and the SVM classification on the background for a model that was trained using that same data).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/4de8034a-3530-43f3-8b3f-1c703c6dd001)\\n\\n### C and gamma hyperparameters\\n\\n- Given each dataset is rather large to perform **grid search optimization** on C and gamma, a subset of each of the datasets is used to extract these parameters.\\n- Each dataset subset is now split: 80% for training data and 20% for validation.\\n- Thus, 80% of the data subset is used to apply SVM with different combinations of C and gamma over a 2D grid. The remaining 20% is used to test the logistic loss and assess optimal hyperparameters.\\n\\n### Training and testing\\n\\n- 80% of data is used for training and 20% is used for testing.\\n- Although the testing is done **out-of-sample**, given the nature of the data (where it comes from the same distribution) it is almost as if it was an **in-sample**.\\n- In our case this is ideal as we want each model to perform very well on its own dataset. We want each model to generalize well for that very specific type of data (runner style, speed and terrain).\\n- A 5-sample moving average is applied before assessing the classification of our model, this is to remove spurious samples. A small window needs to be selected to not introduce a delay in the recognition of a step.\\n- Since our data set is imbalanced (i.e. there are more samples being no-step than step samples) we\u2019ll use **Geometric Mean (G-Mean) evaluation score**, since this measure tries to maximize the accuracy on each of the classes while keeping their accuracies balanced.\\n\\n### Result\\n\\nIn the same dataset where we trained our SVM, we were able to achieve a G-Mean of 0.9645. This is rather expected since this is a powerful model and it was trained on that same data.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/4988fec5-7d2a-4234-b172-dcd6490a6088)\\n\\nFrom the graph above this result is very positive given that the mislabelling always occurs at the boundary of a step / no-step detection. And since the sampling occurs very fast, we have some margin of error.\\n\\n## Ensemble SVM model architecture\\n\\nThis model as expected had a poor performance in an unseen dataset. This is normal as the data came from a different runner, running at a different speed in a different terrain. Thus, in order to create a more robust model, we built this ensemble SVM model architecture.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/28bf71ae-cd2c-4c15-8711-5d74b8164f45)\\n\\nEach dataset has the signal processing technique applied in order to obtain the labelling. With this labels, an SVM model can be trained.\\n\\nThen, an **unseen dataset** (not used for training) will be used as input for all the trained SVM models. I.e. each input (3 accelerometer samples and 3 gyroscope samples) will be given to each SVM model which will output 0 or 1 to denote no-step or step, respectively.\\n\\nMy rationale there was: _I could do a major voting approach, BUT because of how I trained the data. It could happen that one of the models had the sample being very inside the boundary, whereas 2 others had it just outside, and the later would win. This is not what I was looking for._\\n\\nBecause of this boundary approach associated with SVMs, I knew that although SVM doesn\u2019t provide probability estimates directly, these could be calculated. So I took advantage of that. And used that probability estimate to select whether the input was considered a stop or not. My rationale was: the model that has seen more similar IMU samples is likely to have a higher confidence in their output and as output they will have what I provided as a label in advance.\\n\\nFinally, I applied a **5-sample moving average** to the step (1) / no-step (0) output and round the value to be classified as step and no-step. This allowed to remove spurious samples.\\n\\n### Results\\n\\nThe prediction for a single SVM was extremely accurate because the model was trained on data samples from that same run (i.e. distribution). On the other hand, the ensemble prediction didn\u2019t run on data from that distribution, hence, making this problem much more complex. However, even with that constraint, a G-Mean of 0.8756 was still achieved.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/57d14bdc-336d-4f59-845f-438d7c2bb2c0)\\n\\n## Future work\\n\\n- Employ the data coming from the \u201dsmart\u201d insoles as an alternative ground-truth for determining step versus no-step conditions.\\n- The diversity of the data set can also be expanded to account for more surfaces, running speeds and styles.\\n- Explore whether the characteristics of the PCA plot of IMU data can be used to categorize different running styles.\\n- The exploration of different classification algorithms for the step detection problem, e.g. applying a long-short term memory (LTSM) neural network algorithm to exploit the time-dependency between samples.\\n- Implement this proof-of-concept code on the production NURVV Run system, to test the prediction technique in a real-life scenario and consider computational time.\\n\\n## Final remarks\\n\\nThis was my first most technical blogpost where I went into details in how I wrote a ML paper that was accepted in a major conference in 1 week. Would love to know your thoughts on it.\\n\\nFeel free to check the full paper version here: https://ieeexplore.ieee.org/abstract/document/9680024"},{"id":"the-future-of-finance-with-open-source-and-ai","metadata":{"permalink":"/blog/the-future-of-finance-with-open-source-and-ai","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-12-04-the-future-of-finance-with-open-source-and-ai.md","source":"@site/blog/2022-12-04-the-future-of-finance-with-open-source-and-ai.md","title":"The future of finance with open source and AI","description":"The future of finance is being reshaped by open source and AI. This post discusses the potential of these technologies in disrupting the financial industry, the advantages of open source, and the role of AI in user interface.","date":"2022-12-04T00:00:00.000Z","formattedDate":"December 4, 2022","tags":[{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"AI","permalink":"/blog/tags/ai"},{"label":"Finance","permalink":"/blog/tags/finance"},{"label":"Future","permalink":"/blog/tags/future"}],"readingTime":5.57,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"the-future-of-finance-with-open-source-and-ai","title":"The future of finance with open source and AI","date":"2022-12-04T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280552376-81f97180-abdd-41fa-a422-becefc8fd5cd.png","tags":["Open Source","AI","Finance","Future"],"description":"The future of finance is being reshaped by open source and AI. This post discusses the potential of these technologies in disrupting the financial industry, the advantages of open source, and the role of AI in user interface."},"prevItem":{"title":"How I wrote a machine learning paper in 1 week that got accepted to International Conference in Machine Learning Applications","permalink":"/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla"},"nextItem":{"title":"Bloomberg Terminal is no more. OpenBB Terminal 2.0 has just been released.","permalink":"/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThe future of finance is being reshaped by open source and AI. This post discusses the potential of these technologies in disrupting the financial industry, the advantages of open source, and the role of AI in user interface.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThis post will talk about my (very) u\u0336n\u0336biased opinion about the future of finance built on top of open source and AI.\\n\\n## Open Source platform\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/61585c8f-085f-4697-9714-4fe02296053d)\\n\\n### Data licensing vs Marketplace\\n\\nCurrent monopolies spend an enormous amount of cash on financial data licensing. There are dozens of different asset classes (stocks, options, crypto, NFTs, currencies, bonds, ETFs, mutual funds, \u2026) and these often vary based on geography. **That makes the overall investment research industry a very tough market to compete.** Startups cannot disrupt the space without a massive capital injection. This is also why startups usually focus on a certain asset class in a certain geography.\\n\\n**In my opinion, the only shot we have to disrupt incumbents is by not owning the data but becoming the infra layer between data sources and users.** _This is no different than Uber not owning cars, Airbnb not owning apartments or Deliveroo not owning restaurants._\\n\\n**This also has a great advantage which is being able to integrate new data sources very fast and easily.** Plus, owing to open source, anyone can add it. On the other hand, it\u2019s very unlikely that an incumbent will add data that you require. Plus, if they do, they will need to license the data and therefore decrease their margins \u2014 unless they increase the price to users.\\n\\n### Full-price bundle\\n\\nCurrent incumbents pricing is usually a complete bundled offering. **This means that regardless of what you are utilizing in terms of both breadth and depth, you pay the full price tag.** A good analogy is like a restaurant ONLY having a buffet when all you want is a bottle of water, or some chips. What happens is that a user ends up paying for data that they are not using.\\n\\nIn 2022, this is a very outdated take. Companies are looking to get leaner, and it doesn\u2019t make sense to pay for data that you aren\u2019t going to leverage. **Being the infrastructure between users and data sources allows you to create value to both**; Since users will have access to all the data they want and pay for the ones they use, and data sources will have access to a big pool of users and may not need to create a dashboard product to monetize their offerings.\\n\\n### Transparency & Customization\\n\\nCurrent incumbents have built several in-house financial models. **Although these are often customizable, their customization is typically limited.** That is because what is usually customizable are the values/weights, but not necessarily the formulas \u2014 that is kept hidden in their source code. This is an issue because that code cannot be validated and users cannot modify it.\\n\\nWith open source, the story is completely different. **Users can see every single line of code, and therefore not only audit the code quality but adapt the models/formulas to their own needs.** At the end of the day, there is no point in re-inventing the wheel for financial theory that has been around for decades.\\n\\nBy having the code open source, users can rely on the fact that these formulas have been validated/tested by thousands or millions of users and, therefore, there\u2019s a very low chance that these are wrong. **In addition, users are more secure because they can investigate the code and check/fix any vulnerabilities.**\\n\\n### Community\\n\\nOne of the best parts of open source is the integrated community that it creates. This attracts people from every background, gender or ethnicity. Such a pool of diversity tends to allow for better ideas and pushes a project further. With people from the community being able to contribute, this also drives innovation.\\n\\n[OpenBB](http://my.openbb.co/app/terminal/community-routines) has been driven a lot by the community so far. What started as a terminal mostly focused on stocks, soon evolved into including a broad range of datasets and considering several geographies. E.g. A contributor from Sweeden integrated Avanza API to the mutual funds menu that would only appear if users were looking into mutual funds from Sweden. This shows the power of community.\\n\\nHaving the platform be _open source_ is key.\\n\\n## GPT as the interface\\n\\n**One of the hedges that incumbents have is the fact that they have been around for a very long time and spent a lot on educating users about their product.** As a result, users are used to their platform. This makes them harder to switch to an unknown product. This is also why a product needs to be 10x better than competition for users to switch.\\n\\n**However, what if there was no learning curve?** What if you could use a product for the first time and knew how to access all the data without spending any time reading the documentation. **In essence, the educational incumbent advantage would become obsolete.**\\n\\nWith the new LLM advancements, such as [ChatGPT](https://chat.openai.com/chat). We are not far from this reality.\\n\\n![cool1](https://github.com/DidierRLopes/my-website/assets/25267873/be035d48-18c5-4f62-b367-f32ec3034a0a)\\n\\nPlus, if this is built on top of an open source project it means that the **community can help in improving the model** by providing more training data (e.g. provide a text as input and the corresponding command as output) or even confirm whether or not the chart that pops up was accurate. In addition, along with data sources you can imagine that the community could start contributing with new languages for the GPT model.\\n\\nYou can easily imagine that such interface would work well with a speech recognition model (something like [whisper](https://github.com/openai/whisper) but that allowed real-time).\\n\\n**This makes using a new investment research platform easy, but more importantly makes retrieving information much faster and efficient.**\\n\\n## GPT to build investment research reports\\n\\nOne of the new features that were announced with [OpenBB Terminal 2.0](https://openbb.co/blog/openbb-terminal-2-acai) was the automated reports generation that utilizes [papermill](https://github.com/nteract/papermill) to leverage jupyter notebook templates.\\n\\n![cool2](https://github.com/DidierRLopes/my-website/assets/25267873/655d11ad-4069-4886-8f54-b080bfc2b7f1)\\n\\nAs it stands creating one of these notebook templates requires some coding skills and reading [OpenBB documentation](https://docs.openbb.co/) to understand how to retrieve the data of interest providing the correct function and necessary arguments.\\n\\n**But, for a second, imagine if you could build these notebook templates with almost no-code?**\\n\\nThe proof-of-concept below in combination with the automated report generation should allow you to further understand the breakthrough that we may accomplish in the following few months.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/81f97180-abdd-41fa-a422-becefc8fd5cd)\\n\\n**My prediction is that open source + AI will disrupt the financial sector in the upcoming years.**\\n\\n[OpenBB](https://openbb.co/) will be leading that wave.\\n\\nThanks for reading!"},{"id":"bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released","metadata":{"permalink":"/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-11-29-bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released.md","source":"@site/blog/2022-11-29-bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released.md","title":"Bloomberg Terminal is no more. OpenBB Terminal 2.0 has just been released.","description":"OpenBB Terminal 2.0 has been released. This blog post discusses the new features and improvements, including the release of OpenBB SDK, a state-of-the-art AI/ML toolkit for the financial industry, and the vision for a community-driven investment research platform.","date":"2022-11-29T00:00:00.000Z","formattedDate":"November 29, 2022","tags":[{"label":"OpenBB Terminal 2.0","permalink":"/blog/tags/open-bb-terminal-2-0"},{"label":"Investment Research","permalink":"/blog/tags/investment-research"},{"label":"Financial Data","permalink":"/blog/tags/financial-data"},{"label":"AI","permalink":"/blog/tags/ai"},{"label":"ML","permalink":"/blog/tags/ml"},{"label":"SDK","permalink":"/blog/tags/sdk"}],"readingTime":1.725,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released","title":"Bloomberg Terminal is no more. OpenBB Terminal 2.0 has just been released.","date":"2022-11-29T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280552161-b13ac1ec-2ffd-4f25-846a-ce0fff4465d3.png","tags":["OpenBB Terminal 2.0","Investment Research","Financial Data","AI","ML","SDK"],"description":"OpenBB Terminal 2.0 has been released. This blog post discusses the new features and improvements, including the release of OpenBB SDK, a state-of-the-art AI/ML toolkit for the financial industry, and the vision for a community-driven investment research platform."},"prevItem":{"title":"The future of finance with open source and AI","permalink":"/blog/the-future-of-finance-with-open-source-and-ai"},"nextItem":{"title":"Sweepstake World Cup 2022 for your startup team","permalink":"/blog/sweepstake-world-cup-2022-for-your-startup-team"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nOpenBB Terminal 2.0 has been released. This blog post discusses the new features and improvements, including the release of OpenBB SDK, a state-of-the-art AI/ML toolkit for the financial industry, and the vision for a community-driven investment research platform.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nAlmost 2 years ago, I started building my own investment research platform. 2 months later I named it Gamestonk Terminal, made it open source and shared it on Reddit. The rest is history.\\n\\nSince then, we surpassed [17,800 stars on Github](https://github.com/OpenBB-finance/OpenBBTerminal). Raised $ 8.8 million in our seed round. Build a very competitive team and our OpenBB brand is now recognized by most in the financial space. You can read more about our story [here](https://openbb.co/blog/gme-didnt-take-me-to-the-moon-but-gamestonk-terminal-did).\\n\\n**Our mission to democratize investment research has not changed.** Over the past few months we have been heads down and building and today I\u2019m excited to share with you the announcement of OpenBB Terminal 2.0.\\n\\nThe headline is:\\n\\n> _OpenBB Terminal 2.0 is more than an application, it\u2019s a platform._\\n\\n
    \\n\\nA summary:\\n- We are releasing OpenBB SDK which allows developers to use a single API to access the world\u2019s raw financial data in order to build their own products / dashboards.\\n\\nThe SDK will allow users to create report templates in a matter of minutes and run them for custom tickers at any time in a matter of seconds; Instead of spending hours and starting a report from scratch every single time. We envision a world where the community can share these and help each other at becoming better investors.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/1223b162-6742-4cf8-a052-6f949873a0dd)\\n\\n- We are also bringing a state-of-the-art AI / ML toolkit to the financial industry, to be used alongside all the data sources our platform has access to (stocks, crypto, NFTs, options, forex, ETFs, mutual funds, macro economic data and even alternative data).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f2994ea5-759c-4d5a-9e17-28658f093515)\\n\\nFor more information, you can read our announcement here: https://openbb.co/blog/openbb-terminal-2-acai\\n\\nOr even better, watch the announcement [here](https://openbb.co/blog/openbb-terminal-2-event)!"},{"id":"sweepstake-world-cup-2022-for-your-startup-team","metadata":{"permalink":"/blog/sweepstake-world-cup-2022-for-your-startup-team","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-11-26-sweepstake-world-cup-2022-for-your-startup-team.md","source":"@site/blog/2022-11-26-sweepstake-world-cup-2022-for-your-startup-team.md","title":"Sweepstake World Cup 2022 for your startup team","description":"In this blogpost, we share how we organized a World Cup 2022 sweepstake for our startup team as a team building activity, and how we built a slack bot to facilitate discussions around the event.","date":"2022-11-26T00:00:00.000Z","formattedDate":"November 26, 2022","tags":[{"label":"World Cup 2022","permalink":"/blog/tags/world-cup-2022"},{"label":"Startup Team","permalink":"/blog/tags/startup-team"},{"label":"Sweepstake","permalink":"/blog/tags/sweepstake"},{"label":"Team Building","permalink":"/blog/tags/team-building"},{"label":"Slack Bot","permalink":"/blog/tags/slack-bot"}],"readingTime":2.07,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"sweepstake-world-cup-2022-for-your-startup-team","title":"Sweepstake World Cup 2022 for your startup team","date":"2022-11-26T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280552072-ba486af7-2579-4c00-a575-278cb74faeb6.png","tags":["World Cup 2022","Startup Team","Sweepstake","Team Building","Slack Bot"],"description":"In this blogpost, we share how we organized a World Cup 2022 sweepstake for our startup team as a team building activity, and how we built a slack bot to facilitate discussions around the event."},"prevItem":{"title":"Bloomberg Terminal is no more. OpenBB Terminal 2.0 has just been released.","permalink":"/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released"},"nextItem":{"title":"5 steps I used to change my job title in less than 1 year","permalink":"/blog/5-steps-i-used-to-change-my-job-title-in-less-than-1-year"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, we share how we organized a World Cup 2022 sweepstake for our startup team as a team building activity, and how we built a slack bot to facilitate discussions around the event.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/worldcup2022-sweepstake-slackbot).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nAt [OpenBB](https://openbb.co/), the team puts in so much hard work for [our product](https://github.com/OpenBB-finance/OpenBBTerminal) that doing a team event is like a breath of fresh air. With the World Cup 2022 now taking place and more than half of the team being from Europe (where football is the main sport), we thought that it would be nice to run an OpenBB sweepstake.\\n\\nWe decided to offer a prize to the teams that end up on the podium. 1st place gets X, 2nd place gets Y and 3rd place gets Z - with $ X > $ Y > $Z.\\n\\nThe next step was to assign teams to each employee, so at the end of our all hands meeting we did just that. For that we used this free website: https://spinnerwheel.com/fifa-world-cup-sweepstake-generator.\\n\\nThis allowed us to spin the wheel of team members and then spin wheel of countries, and get a 1:1 match \u2014 it was quite funny to have everyone involved and see the reactions as the wheel was slowing down.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/ab35cfc3-143f-43bf-b345-0999289a4442)\\n\\n**Most companies stop here.**\\n\\n...\\n\\nThe best part about the sweepstake for me, is that the team members that don\u2019t usually interact with each other on a day to day basis have the opportunity to talk amongst themselves for this.\\n\\nSo, to encourage these team interactions, the first step was to create a slack channel #worldcup-2022 that we could use to discuss each game.\\n\\n**But that isn\u2019t enough**, because sometimes you require a trigger to start a discussion about the results and the next fixtures.\\n\\nI looked for a slack bot that achieved this, but **I didn\u2019t find one**.\\n\\nSo I built one using Python which you can find [here](https://github.com/DidierRLopes/worldcup2022-sweepstake-slackbot).\\n\\nThis is the notification that the #worldcup-2022 receives everyday after all the matches have been played.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/7e91f7e9-b085-455f-9768-4da69d409c52)\\n\\nThe outcome has been great so far! Our team engagement is even higher than usual and we see team members that don\u2019t work directly with each other having the opportunity to get to know others better.\\n\\nIf you want to do the same for your team, follow the instructions highlighted [here](https://github.com/DidierRLopes/worldcup2022-sweepstake-slackbot).\\n\\nAny feedback is appreciated!"},{"id":"5-steps-i-used-to-change-my-job-title-in-less-than-1-year","metadata":{"permalink":"/blog/5-steps-i-used-to-change-my-job-title-in-less-than-1-year","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-11-14-5-steps-i-used-to-change-my-job-title-in-less-than-1-year.md","source":"@site/blog/2022-11-14-5-steps-i-used-to-change-my-job-title-in-less-than-1-year.md","title":"5 steps I used to change my job title in less than 1 year","description":"This blog post outlines the five steps I took to change my job title from an Embedded Firmware Engineer to a Sensor Fusion Engineer in less than a year. It provides a roadmap for others who may be looking to make a similar career transition.","date":"2022-11-14T00:00:00.000Z","formattedDate":"November 14, 2022","tags":[{"label":"career","permalink":"/blog/tags/career"},{"label":"job change","permalink":"/blog/tags/job-change"},{"label":"sensor fusion engineer","permalink":"/blog/tags/sensor-fusion-engineer"},{"label":"roadmap","permalink":"/blog/tags/roadmap"},{"label":"hard work","permalink":"/blog/tags/hard-work"}],"readingTime":5.61,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"5-steps-i-used-to-change-my-job-title-in-less-than-1-year","title":"5 steps I used to change my job title in less than 1 year","date":"2022-11-14T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280500184-fd343f2a-7508-488a-a705-a716af395bb2.png","tags":["career","job change","sensor fusion engineer","roadmap","hard work"],"description":"This blog post outlines the five steps I took to change my job title from an Embedded Firmware Engineer to a Sensor Fusion Engineer in less than a year. It provides a roadmap for others who may be looking to make a similar career transition."},"prevItem":{"title":"Sweepstake World Cup 2022 for your startup team","permalink":"/blog/sweepstake-world-cup-2022-for-your-startup-team"},"nextItem":{"title":"How to grow your open source community from scratch","permalink":"/blog/how-to-grow-your-open-source-community-from-scratch.md"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post outlines the five steps I took to change my job title from an Embedded Firmware Engineer to a Sensor Fusion Engineer in less than a year. It provides a roadmap for others who may be looking to make a similar career transition.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nIn March 2020, I joined a startup as an Embedded Firmware Engineer. The startup\u2019s product focuses on smart running insoles with lightweight trackers that fit any running shoes.\\n\\nThe company was small, and the firmware team was myself and 2 Senior Embedded Firmware Engineers.\\n\\nWhat I liked the most about this team was that our interests complemented each other very well. One of the Senior Embedded Firmware Engineers was very strong at wireless communications (BLE, ANT) while the other was great at communication protocols (SPI, I2C). On my end, my strength was from my MSc in Control Systems and my past experience with GNSS. In addition, I had a very high interest in learning about Inertial Navigation System (INS). My goal was to become a Sensor Fusion Engineer.\\n\\nSo what did I do to become a Sensor Fusion Engineer?\\n\\n## Declare your intent\\n\\nSince day 1 in the company, my team lead knew that my goal was to become a Sensor Fusion Engineer.\\n\\nThis is very important, as your manager can keep this in the back of their mind when assigning tasks to you. For instance, my team lead was giving me a lot of material around the way our product processed external samples as this was critical to the INS.\\n\\n## Define a roadmap\\n\\nI asked my manager: \u201c_What do I need to do to be recognized as a Sensor Fusion Engineer_\u201d.\\n\\nKnowing about the matter is not enough, you want to have the credentials so that you can jump faster in your career.\\n\\nMy team lead was not aware of the capabilities I would need to have to become a Sensor Fusion Engineer, so he spent quite some time doing due diligence on this. Good managers will go out of their way to help you grow.\\n\\nAfter some time, we discussed what I would need to do at the company to be recognized as Sensor Fusion Engineer and built a roadmap in order to get there.\\n\\n## Work hard\\n\\nWork extremely hard towards that roadmap.\\n\\nI was not only working towards that roadmap, but I was also working towards it at 2.5x the average speed. I was working 80h \u2014 100h / weeks during that time.\\n\\nI was being pulled into all meetings that discussed sensor fusion, I was reading old documentation to understand the decisions that I made, I was reading codebase and questioning all code (which allowed me to find some issues) and I was taking online courses on top of this.\\n\\nMore importantly, I was experimenting with the product. Theory will only help you so much, you need to get your hands dirty or you will never be able to fully master a skill.\\n\\n## Frequently revise your roadmap\\n\\nThroughout all my 1:1 with my manager, we always revisited the roadmap \u2014 even if briefly. This made sure that he knew how serious I was about this topic, and allowed me to demonstrate my progress.\\n\\nThis also allowed myself to look back and realize my own progress. I would spend time educating him on what I had learned and how we could apply that in our product, including some simulations I had done in Python.\\n\\n## Prove yourself\\n\\nDon\u2019t miss an opportunity to prove yourself.\\n\\nThis is the most critical point, you need to prove that you are capable of delivering by actually demonstrating a real example.\\n\\nThis is the egg or chicken first problem. When you don\u2019t have the initial experience, your company won\u2019t trust you to apply your knowledge. But if your company doesn\u2019t give you the chance you will never get the experience.\\n\\nIn our case, users started getting weird jumps in altitude reported by the trackers. And we needed to figure out the issue fast as this was increasing the churn. I immediately knew I was able to solve this, and knew I had to grab this opportunity.\\n\\nOur trackers were not taking the GPS location in the estimation of user altitude, and I knew that considering that would substantially improve the estimation as the altitude has less chances to change drastically over a small distance.\\n\\nFinally, my degree and hundreds of hours of work were paying off. That day, I wrote our C/C++ altitude estimation algorithm in Python and provided with an input that had a spurious jump in pressure readings \u2014 i.e. I recreated how the issue was happening.\\n\\nI proceeded to implement a Kalman Filter solution to consider GPS readings as well, and the result was a massive improvement. The jump in altitude was non-existant now.\\n\\nIn the daily standup the next day, I had accomplished most of my tasks for the sprint and asked the product owner if I could take a shot at fixing the altitude issue. He was a bit hesitant, but I had a notebook ready to show the problem recreated and my proposed solution in Python.\\n\\nHe accepted and gave me the next 3 days to work on it and to present results on Monday. I didn\u2019t sleep until that Monday. Implementing from Python to C++ was the easy part. The hard part was debugging + optimizing the weights of the Kalman Filter.\\n\\nI was touching the code. Performing an over the air upgrade. Going outside for a run in a track with a bridge where I knew the altitude. Analyzing results at home. Iterate.\\n\\nMonday arrived and I presented results, and they looked so much better. The proposed solution was accepted. Our INS algorithm hadn\u2019t changed in a long time, so a lot of testing was needed.\\n\\nAfter that, the company accepted to offer me the title of Sensor Fusion engineer. Without a pay rise, but that was fine as for me it was about speeding up my career.\\n\\n## Conclusion\\n\\n- Declare intent\\n- Define roadmap\\n- Work towards that roadmap\\n- Frequently revise roadmap\\n- Don\u2019t miss an opportunity to prove yourself\\n\\n**Note:** If the company doesn\u2019t give you a chance to prove yourself, you should interview for that position with other companies. And if another company offers you that job, you will have the leverage that another company perceives you as that.\\n\\nI like [this video](https://youtube.com/shorts/x71Rm0MWVHY?si=BvtmjrE31d6U1bpV) about understanding your market value. And I think it can be extended in terms of your skillset if you want to change your role.\\n\\nFeedback as always is welcome :)"},{"id":"how-to-grow-your-open-source-community-from-scratch.md","metadata":{"permalink":"/blog/how-to-grow-your-open-source-community-from-scratch.md","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-11-10-how-to-grow-your-open-source-community-from-scratch.md","source":"@site/blog/2022-11-10-how-to-grow-your-open-source-community-from-scratch.md","title":"How to grow your open source community from scratch","description":"Growing an open source community from scratch is a challenging task. This blogpost shares insights and strategies on how to effectively build and manage an open source community, using the example of the OpenBB Terminal project.","date":"2022-11-10T00:00:00.000Z","formattedDate":"November 10, 2022","tags":[{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Community Building","permalink":"/blog/tags/community-building"},{"label":"Project Management","permalink":"/blog/tags/project-management"},{"label":"OpenBB Terminal","permalink":"/blog/tags/open-bb-terminal"}],"readingTime":3.92,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-to-grow-your-open-source-community-from-scratch.md","title":"How to grow your open source community from scratch","date":"2022-11-10T00:00:00.000Z","image":"https://github.com/Meg1211/my-website/assets/88618738/ce69575c-01b5-4757-bd0d-6de67a9f5c57","tags":["Open Source","Community Building","Project Management","OpenBB Terminal"],"description":"Growing an open source community from scratch is a challenging task. This blogpost shares insights and strategies on how to effectively build and manage an open source community, using the example of the OpenBB Terminal project."},"prevItem":{"title":"5 steps I used to change my job title in less than 1 year","permalink":"/blog/5-steps-i-used-to-change-my-job-title-in-less-than-1-year"},"nextItem":{"title":"How to learn 10x faster than average","permalink":"/blog/how-to-learn-10x-faster-than-average"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nGrowing an open source community from scratch is a challenging task. This blogpost shares insights and strategies on how to effectively build and manage an open source community, using the example of the OpenBB Terminal project.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n### Project naming\\n\\nThe name should be short, memorable, unique and related with the project.\\n\\nWhen I started what we call OpenBB Terminal today, the name of the project was \u201cStock Market Bot\u201d or something silly like that. I knew that wouldn\u2019t be the last name, but I didn\u2019t have any inspiration and in the meantime I was focused on building the platform.\\n\\nI am an Elon Musk fan, and was a GameStop investor. This meant that once I saw [this tweet](https://twitter.com/elonmusk/status/1354174279894642703) \u2014 I didn\u2019t blink twice and knew this was the name I was waiting for.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/ce69575c-01b5-4757-bd0d-6de67a9f5c57)\\n\\nThat\u2019s when Gamestonk Terminal (now OpenBB Terminal) was born.\\n\\n### Keep the project private until MVP\\n\\n- There will be less pressure than building in public, and you will be able to iterate much faster.\\n- No users asking for features or reporting bugs when MVP is still under development.\\n- Most importantly, this guarantees that when the users see the MVP they know where you are heading with the project.\\n\\nI worked on Gamestonk Terminal for 2 months on my own. The code architecture changed several times as I was in this experimental phase. And if you look into the source code I even committed API keys accidentally. But I had no pressure, so I was able to ship extremely fast.\\n\\n### Prepare to onboard the community\\n\\n- Make the documentation standout (not only \u201cgetting started\u201d but also \u201ccontributing\u201d).\\n- Create \u201cquick win\u201d tickets that the community can address quickly.\\n- Start a group channel on Discord or Slack, which allows you to interact with contributors and discuss features / roadmap and keep them engaged.\\n- Mention \u201cstarring\u201d the project. As simple as this sounds, this helps with growth as its easy to forget to star the project, even though you were interested in what you saw.\\n\\nSome people from our current team told me recently that they fell in love with the README of the project the first time they saw it. In particular with this quote:\\n\\n> _\u201cGamestonk Terminal is an awesome stock and crypto market terminal that has been developed for fun, while I saw my GME shares tanking. But hey, I like the stock.\u201d_\\n\\n
    \\n\\nThis allowed me to gain not only contributors, but maintainers. And nowadays, team members.\\n\\n### Change the project visibility to public\\n\\n- This allows everyone to have a first look into the project, it\u2019s the \u201cHello World\u201d moment.\\n- When sharing the project, describe the problem you are trying to solve and make sure your audience relates with that problem.\\n- Share your project on relevant channels (e.g. Reddit, HackerNews, ProductHunt) \u2014 where your audience is.\\n\\nI have been building in open source for a while, without much success. Until Gamestonk Terminal.\\n\\nThe difference? I shared Gamestonk Terminal on:\\n\\n- Reddit r/SuperStonk \u2014 where the retail traders with the same issue as me were gathered\\n- Reddit r/python \u2014 where the community shares projects built in python\\n- HackerNews \u2014 where I leveraged the name of a known brand in the same industry and insinuated that my tool was similar but affordable. The title was: \u201c[Can\u2019t afford Bloomberg Terminal? No prob, I built the next best thing](https://news.ycombinator.com/item?id=26258773)\u201d.\\n\\n### Keep developing in public\\n\\n- Keep the community updated on the roadmap and progress. You can do this by doing demos of what you have accomplished as you add new features (e.g. [on YouTube](https://www.youtube.com/watch?v=fqGPK8OVHLk) or [on Twitter](https://twitter.com/didier_lopes/status/1567117888590340098)) which allows the community to understand what sort of tasks you are working on, and what they would learn if they were to contribute. It basically gives the community a hindsight into what a contributor will be able to work on / achieve.\\n- Get early feedback and prioritise accordingly.\\n- Occasionally go back to the same channels (e.g. Reddit, Hackernews) to report progress. This guarantees that they know the project is not dead and helps your project staying relevant and on their minds.\\n- Develop in public through livestreams (e.g. [live Coding](https://www.youtube.com/watch?v=9BMI9cleTTg)) or by sharing what you are working on through social media (e.g. [adding a futures menu](https://twitter.com/didier_lopes/status/1579414220256387072)).\\n\\n
    \\n\\nTL;DR: On how to grow your open source project:\\n\\n- Project naming\\n- Keep project private until MVP\\n- Prepare to onboard the community\\n- Change the project visibility to public\\n- Keep developing in public"},{"id":"how-to-learn-10x-faster-than-average","metadata":{"permalink":"/blog/how-to-learn-10x-faster-than-average","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-10-27-how-to-learn-10x-faster-than-average.md","source":"@site/blog/2022-10-27-how-to-learn-10x-faster-than-average.md","title":"How to learn 10x faster than average","description":"Learn how to accelerate your learning process and become 10x faster than average. This blog post provides practical steps to enhance your self-learning abilities and master new skills effectively.","date":"2022-10-27T00:00:00.000Z","formattedDate":"October 27, 2022","tags":[{"label":"learning","permalink":"/blog/tags/learning"},{"label":"self-improvement","permalink":"/blog/tags/self-improvement"},{"label":"skills","permalink":"/blog/tags/skills"},{"label":"education","permalink":"/blog/tags/education"}],"readingTime":2.98,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-to-learn-10x-faster-than-average","title":"How to learn 10x faster than average","date":"2022-10-27T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280500003-e310841f-bc8b-433b-aa79-1debc6e40ef9.png","tags":["learning","self-improvement","skills","education"],"description":"Learn how to accelerate your learning process and become 10x faster than average. This blog post provides practical steps to enhance your self-learning abilities and master new skills effectively."},"prevItem":{"title":"How to grow your open source community from scratch","permalink":"/blog/how-to-grow-your-open-source-community-from-scratch.md"},"nextItem":{"title":"Twitter thread to LinkedIn carousel in python","permalink":"/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nLearn how to accelerate your learning process and become 10x faster than average. This blog post provides practical steps to enhance your self-learning abilities and master new skills effectively.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nEveryone is a self learner. But people\u2019s rhythm of self learning can be vastly different.\\n\\n### Have a good reason to learn this new skill\\n\\nWhat is the main fundamental reason why you want to learn this skill? If you don\u2019t have a one sentence answer, you probably don\u2019t need to learn it.\\n\\nUniversity teaches you hundreds of topics that you end up not being good at because you have no interest in it.\\n\\nAvoid spending your precious time on developing a skill that you have no interest or purpose in. Avoid trends too for this reason.\\n\\n### Research and read about the best way to learn the basics\\n\\nThis should take no longer than one afternoon. Avoid promoted content.\\n\\nUsually, you\u2019re able to find a course/book/video that is acclaimed by the community to be the best to get started with.\\n\\nSo we are looking for the equivalent of \u201cMachine Learning from Andrew Ng\u201d for the skill you want to master.\\n\\n### Consume the basics like your life depends on it\\n\\nThis will be the foundation of all your subsequent learning in this new area. Put your phone away, and take notes.\\n\\nRevisit those notes, and if necessary go back in time to understand the basics.\\n\\nIt took me above average time to finish Machine Learning from Andrew Ng.\\n\\nHowever, since this, whenever I learn or even think about AI problems this is now easier because of that laid out work.\\n\\n### Test your knowledge with a real problem (aka get your hands dirty)\\n\\nAnd no, I don\u2019t mean do an exercise that you find online.\\n\\nDefine a problem that you can solve with the skills you acquired and work on it.\\n\\nDon\u2019t ask for the answer. Don\u2019t Google for the solution, but Google for something that is a current impediment on your solution.\\n\\nIf you are struggling on formulating the Google prompt, revisit your first notes on the skill.\\n\\n### Keep learning about the topic\\n\\nThe getting started foundation will only get you so far. It\u2019s likely that soon you will grow out of that and need to expand your knowledge.\\n\\nDon\u2019t jump on this step too early. Make sure your basics are covered before you move on.\\n\\nGo back to the real problem you worked on, and see how the new learned skills could be applied for that same problem.\\n\\nIf those skills aren\u2019t necessarily in that first problem, it\u2019s also a good sign. It\u2019s a sign that you learned not only the skill but when it is and it isn\u2019t used.\\n\\n### Iterate\\n\\nKeep iterating between using this new skill to solve a real problem and learning from courses/videos/books.\\n\\nThere isn\u2019t a \u201cyou made it\u201d badge. But you know you did, once you\u2019re able to look for a specific piece of information on a video/book to fill in the gap for something you needed for your real problem.\\n\\n
    \\n\\nTL;DR on how to learn 10x faster than average\\n\\n1. Have a good reason to learn this new skill.\\n2. Research and read about the best way to learn the basics.\\n3. Consume the basics like your life depended on it.\\n4. Test your knowledge with a real problem.\\n5. Keep learning about the topic.\\n6. Iterate."},{"id":"how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds","metadata":{"permalink":"/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-10-23-how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds.md","source":"@site/blog/2022-10-23-how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds.md","title":"Twitter thread to LinkedIn carousel in python","description":"In this blog post, I share how I built a Python tool that converts a Twitter thread into a LinkedIn carousel in seconds. This tool is open source and contributions for improvements are welcome.","date":"2022-10-23T00:00:00.000Z","formattedDate":"October 23, 2022","tags":[{"label":"Python","permalink":"/blog/tags/python"},{"label":"LinkedIn","permalink":"/blog/tags/linked-in"},{"label":"Twitter","permalink":"/blog/tags/twitter"},{"label":"Carousel","permalink":"/blog/tags/carousel"},{"label":"Content Creation","permalink":"/blog/tags/content-creation"}],"readingTime":1.775,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds","title":"Twitter thread to LinkedIn carousel in python","date":"2022-10-23T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499955-3f34f9d5-d1b2-426f-8b8d-e6d26a5367da.png","tags":["Python","LinkedIn","Twitter","Carousel","Content Creation"]},"prevItem":{"title":"How to learn 10x faster than average","permalink":"/blog/how-to-learn-10x-faster-than-average"},"nextItem":{"title":"How I would do due diligence on $AMT using OpenBB Terminal","permalink":"/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminal"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blog post, I share how I built a Python tool that converts a Twitter thread into a LinkedIn carousel in seconds. This tool is open source and contributions for improvements are welcome.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/thread-to-carousel/tree/master).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nAs content creators, it would be good if the same content could be utilised across every platform easily. Sometimes you need some tweaks based on audience, but often the same content is used across all platforms.\\n\\nI noticed recently that LinkedIn carousels have been picking a lot of traction, and given I have some nice Twitter threads ([example](https://twitter.com/didier_lopes/status/1570731358204600323?s=20&t=SAO9fD7FR7jeTE-6kem6Mg)) I thought that it would be great if I could convert them into a LinkedIn carousel.\\n\\nSo, I looked for free tools and didn\u2019t find anything good enough. I ended up using [canvas](https://canvas.apps.chrome/) to re-create the thread \u2014 which you can find [here](https://www.linkedin.com/posts/didier-lopes_due-diligence-on-amt-using-openbb-terminal-activity-6977569279395176448-TFMn?utm_source=share&utm_medium=member_desktop). It worked well, but it was time consuming and for most cases, I don\u2019t want to be messing around with the design side of things.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/3f34f9d5-d1b2-426f-8b8d-e6d26a5367da)\\n\\nAs a true software engineer and pythonist, I obtained the Twitter API keys and built a tool that would convert a Twitter thread into a LinkedIn carousel in a matter of seconds.\\n\\nAnd as usual, I open sourced it: https://github.com/DidierRLopes/thread-to-carousel.\\n\\nThis tool is far from perfect, and a lot can be improved on the design side of things to: Recognize emojis; Highlight mentions; Change the size of the box based on the text; Better text placement when images attached; Better URL link display.\\n\\nThe goal for me wasn\u2019t to build a perfect tool, but something easy enough that did the job. And, as the project is open source, I expect to have users contributing to the script so that it can be improved over time.\\n\\nToday I run it using:\\n\\n```console\\npython convert2carousel.py https://twitter.com/didier_lopes/status/1581247044228100096\\n```\\n\\nAnd the result can be found [here](https://www.linkedin.com/posts/didier-lopes_football-momentum-indicator-carousel-activity-6989972573782482944-nM9s?utm_source=share&utm_medium=member_desktop).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/67efec99-d219-47c5-8d83-f19e97a44d76)\\n\\nFeel free to check the project here and I look forward to having contributors helping me improve it!\\n\\nAs always, any feedback welcome \ud83d\ude4f\ud83c\udffd"},{"id":"how-i-would-do-due-diligence-on-amt-using-openbb-terminal","metadata":{"permalink":"/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminal","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-10-20-how-i-would-do-due-diligence-on-amt-using-openbb-terminal.md","source":"@site/blog/2022-10-20-how-i-would-do-due-diligence-on-amt-using-openbb-terminal.md","title":"How I would do due diligence on $AMT using OpenBB Terminal","description":"This blog post provides a detailed walkthrough on how to conduct due diligence on $AMT using the OpenBB Terminal, a free and open source platform for financial data analysis.","date":"2022-10-20T00:00:00.000Z","formattedDate":"October 20, 2022","tags":[{"label":"OpenBB Terminal","permalink":"/blog/tags/open-bb-terminal"},{"label":"Investment Research","permalink":"/blog/tags/investment-research"},{"label":"Stocks","permalink":"/blog/tags/stocks"},{"label":"Due Diligence","permalink":"/blog/tags/due-diligence"}],"readingTime":1.785,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-i-would-do-due-diligence-on-amt-using-openbb-terminal","title":"How I would do due diligence on $AMT using OpenBB Terminal","date":"2022-10-20T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499804-4572fe2a-b0b0-487f-9dee-6c08b0e4c965.png","tags":["OpenBB Terminal","Investment Research","Stocks","Due Diligence"],"description":"This blog post provides a detailed walkthrough on how to conduct due diligence on $AMT using the OpenBB Terminal, a free and open source platform for financial data analysis."},"prevItem":{"title":"Twitter thread to LinkedIn carousel in python","permalink":"/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds"},"nextItem":{"title":"Stop doing your CV in Word or LaTeX","permalink":"/blog/stop-doing-your-cv-in-word-or-latex"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post provides a detailed walkthrough on how to conduct due diligence on $AMT using the OpenBB Terminal, a free and open source platform for financial data analysis.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nLast month someone on Twitter asked me to do a thread on how I would do due diligence on $AMT using the free and open source [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal).\\n\\nBelow I demonstrate what you can expect from using that platform.\\n\\nWe could go much deeper, but this shows examples of output that you can expect. With over 800 commands and over 100 data sources, this is a very small subset of what you can achieve through this platform.\\n\\nIn addition, this will only be in relation with stocks data, but the terminal also has access to options, crypto, ETFs, mutual funds, NFTs, macro economy, futures and even alternative data!\\n\\nMore information on the platform and how to install it [here](https://my.openbb.co/app/terminal/download).\\n\\nStrap in.\\n\\n```console\\n$ /stocks/load AMT/candle\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/4572fe2a-b0b0-487f-9dee-6c08b0e4c965)\\n\\n```console\\n$ /stocks/fa/mktcap\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/2b91a74c-624a-4044-b9e1-9b7138bdcd1e)\\n\\n```console\\n$ /stocks/fa/mgmt\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/2e26ebbf-e26b-4423-87de-a1aace322fa6)\\n\\n```console\\n$ /stocks/fa/income/balance/cash\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b2a496aa-18e5-4fc3-a3c4-cdf92b3e1cf4)\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/9ab0529c-7344-47ca-9868-32cd633bb53a)\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/788cd233-e8a3-4d21-8d6b-8090409950cc)\\n\\n```console\\n$ /stocks/fa/shrs\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/bed6ac95-f76b-487f-b1ee-05783a53c840)\\n\\n```console\\n$ /stocks/fa/sust\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/fd2b31f4-b29c-4d9a-a521-c1a82e870b68)\\n\\n```console\\n$ /stocks/fa/divs\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/45056b50-8210-40eb-b671-463fbd9dfd6b)\\n\\n```console\\n$ /stocks/fa/dcf\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/77086bcf-b2f3-4ca5-a431-9d6e10ed7b0f)\\n\\n```console\\n$ /stocks/ins/stats\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/28ab99a8-c9e0-48f5-80a0-f37383cde28c)\\n\\n```console\\n$ /stocks/dps/psi\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/0fc8870d-83bc-4413-97a9-c214cb0046cc)\\n\\n```console\\n$ /stocks/gov/histcont\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/5de70c19-55fb-437e-95d8-a17f4a9b9f36)\\n\\n```console\\n$ /stocks/dd/rating\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d965a0b6-a169-49f5-88f1-87eac4ae9f42)\\n\\n```console\\n$ /stocks/dd/pt\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f656a805-009c-4751-9842-b7638a459522)\\n\\n```console\\n$ /stocks/dd/est\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/a2bff0b4-69ed-4df0-99a0-f928220d9f2d)\\n\\n```console\\n$ /stocks/ta/sma\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/06996ce2-b1bb-4b21-936a-66b9df3b6a1d)\\n\\n```console\\n$ /stocks/ta/recom/summary\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/015f7839-de0b-45bb-9703-42f986b01d57)\\n\\n```console\\n$ /stocks/ba/sentiment\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/dee84012-741b-4db1-9755-b87afb4da3b5)\\n\\n```console\\n$ /stocks/sia/metric tc\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/bef4daa3-3b93-4a39-82a6-e60d6c3f1dcd)\\n\\n```console\\n$ /stocks/sia/metric fcf\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/c9ad6e51-d9f5-4753-813e-f6d34b697602)\\n\\n```console\\n$ /stocks/sia/vis oi\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e33cd4a1-f333-490e-8829-16474fa05e0f)\\n\\n```console\\n$ /stocks/ca/historical/hcorr\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d339e6bc-6dfe-4059-afb6-5152beab6301)\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/ae3bca4c-0a07-436a-a6c6-f9262f692df2)\\n\\n```console\\n$ /stocks/ca/cashflow/income/balance\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/8c0bda7a-a35b-43e7-9f22-1a1774ba1425)\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/673bd87e-aede-4917-a3b8-b2ef5f092b18)\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/3eeacc24-e9e8-479e-becc-5dd763420b2c)\\n\\nI know this can be overwhelming information and it takes some time to run all these commands.\\n\\nHence I created a [script](https://github.com/OpenBB-finance/OpenBBTerminal/blob/main/openbb_terminal/miscellaneous/routines/due_diligence_stock.openbb). So now you can run all of these commands in one go, with:\\n\\n```console\\n$ /exe due_diligence_stock.openbb -i AMT\\n```\\n\\nAny feedback is welcome!\\n\\nAnd if you want to ask questions about the product before installing it, feel free to join us on Discord here: https://openbb.co/discord"},{"id":"stop-doing-your-cv-in-word-or-latex","metadata":{"permalink":"/blog/stop-doing-your-cv-in-word-or-latex","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-10-15-stop-doing-your-cv-in-word-or-latex.md","source":"@site/blog/2022-10-15-stop-doing-your-cv-in-word-or-latex.md","title":"Stop doing your CV in Word or LaTeX","description":"The future of CVs for engineers and developers lies within GitHub. This post discusses why GitHub profiles are becoming the new CVs and how they can provide a more comprehensive view of a candidate\'s skills and contributions.","date":"2022-10-15T00:00:00.000Z","formattedDate":"October 15, 2022","tags":[{"label":"GitHub","permalink":"/blog/tags/git-hub"},{"label":"CV","permalink":"/blog/tags/cv"},{"label":"Career","permalink":"/blog/tags/career"},{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Developer","permalink":"/blog/tags/developer"}],"readingTime":2.695,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"stop-doing-your-cv-in-word-or-latex","title":"Stop doing your CV in Word or LaTeX","date":"2022-10-15T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499727-cfdd5535-25eb-4573-ba5a-aa7cbafb1255.png","tags":["GitHub","CV","Career","Open Source","Developer"],"description":"The future of CVs for engineers and developers lies within GitHub. This post discusses why GitHub profiles are becoming the new CVs and how they can provide a more comprehensive view of a candidate\'s skills and contributions."},"prevItem":{"title":"How I would do due diligence on $AMT using OpenBB Terminal","permalink":"/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminal"},"nextItem":{"title":"Why you should drop yfinance API and adopt OpenBB SDK","permalink":"/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdk"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThe future of CVs for engineers and developers lies within GitHub. This post discusses why GitHub profiles are becoming the new CVs and how they can provide a more comprehensive view of a candidate\'s skills and contributions.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThe purpose of a CV is to summarize someone\u2019s career, qualifications and education. **As an engineer or developer, I strongly believe that the future of CVs lies within GitHub.**\\n\\nIn fact, GitHub has realized this and they now allow you to create your own \u201c_profile page_\u201d by creating a repository with the same name as your GitHub username. E.g. https://github.com/DidierRLopes\\n\\nIn my humble opinion, this isn\u2019t being talked enough. Previously, you needed a CV document to talk about your background, education, previous jobs and could rely on your GitHub profile to show your projects. With this update, CVs have become obsolete. When hiring for [OpenBB](https://openbb.co/), I put a lot of weight into the public GitHub of each engineer.\\n\\nThis is my current [GitHub profile page](https://github.com/DidierRLopes).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/97106218-c1d7-4f54-ae7d-e566bb126b71)\\n\\nMy profile page is now much simpler since I\u2019ve worked on my [own personal website](https://didierrlopes.github.io/personal-website/), but you can see [here](https://github.com/DidierRLopes/DidierRLopes/tree/98c27cfb087fc8ce6986f4ea8136e76ca14f145b) what my GitHub profile page looked like before. Creating your own personalized website for me is the next step after GitHub, as you can be as creative as you want while showing off your coding skills.\\n\\nMy repository is my way of showing the world what I can do on my own. From a blank sheet to a finalized project. **Sometimes useful, sometimes for fun, but always with the intention to learn more and challenge myself.**\\n\\nThe reason I think that GitHub profile\u2019s are the CVs of the future for engineers/developers, is not only because you can now both talk about yourself in it and display your portfolio, but because of its open source nature.\\n\\nWith products like: https://ossinsight.io/analyze/DidierRLopes, you will be able to dive deeper on engineering skills than ever before.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/cfdd5535-25eb-4573-ba5a-aa7cbafb1255)\\n\\nCompanies will be able to assess a candidate based on their open source work:\\n\\n- How do they interact with the community? What are their communication skills?\\n- Do they practice teamwork? And mentor more junior developers?\\n- Are they leaving comments in the code? Is their code readable in the first place?\\n- What about testing? Are they following good practices?\\n- What\u2019s their time to reply to issues? Or to review PRs from peers?\\n- Activity? What are their working hour patterns like?\\n- \u2026\\n\\nImagine a world where everyone develops in the wild. You can see everything and be part of any project. You have your own profile, you talk with others through issues or PRs, you build together. There is no gender, no race, no nationality,.. people are conneced through projects they believe in. **In essence, this is the developer metaverse, and I\u2019m all here for it.**\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d98a8384-4230-42d8-8ea3-0d43e0199735)\\n\\n**EDIT:** The reader should be aware that nowadays a properly formatted resume is still critical when added to a job board. This is because automated resume readers expect a certain format in order to recommend candidates to companies and vice-versa.\\n\\nHope you enjoyed this post. As always, any feedback welcome! \ud83d\ude4f"},{"id":"why-you-should-drop-yfinance-api-and-adopt-openbb-sdk","metadata":{"permalink":"/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdk","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-10-01-why-you-should-drop-yfinance-api-and-adopt-openbb-sdk.md","source":"@site/blog/2022-10-01-why-you-should-drop-yfinance-api-and-adopt-openbb-sdk.md","title":"Why you should drop yfinance API and adopt OpenBB SDK","description":"Why you should consider switching from yfinance API to OpenBB SDK for financial data retrieval. OpenBB SDK offers access to multiple data sources, potential for unlimited data, and incentives for data source partners.","date":"2022-10-01T00:00:00.000Z","formattedDate":"October 1, 2022","tags":[{"label":"OpenBB SDK","permalink":"/blog/tags/open-bb-sdk"},{"label":"yfinance API","permalink":"/blog/tags/yfinance-api"},{"label":"Financial Data","permalink":"/blog/tags/financial-data"},{"label":"APIs","permalink":"/blog/tags/ap-is"},{"label":"Open Source","permalink":"/blog/tags/open-source"}],"readingTime":2.11,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"why-you-should-drop-yfinance-api-and-adopt-openbb-sdk","title":"Why you should drop yfinance API and adopt OpenBB SDK","date":"2022-10-01T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499631-0a3d1183-aeff-441b-96ad-88c8b8c49280.png","tags":["OpenBB SDK","yfinance API","Financial Data","APIs","Open Source"],"description":"Why you should consider switching from yfinance API to OpenBB SDK for financial data retrieval. OpenBB SDK offers access to multiple data sources, potential for unlimited data, and incentives for data source partners."},"prevItem":{"title":"Stop doing your CV in Word or LaTeX","permalink":"/blog/stop-doing-your-cv-in-word-or-latex"},"nextItem":{"title":"How I became CEO of OpenBB","permalink":"/blog/how-i-became-ceo-of-openbb"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nWhy you should consider switching from yfinance API to OpenBB SDK for financial data retrieval. OpenBB SDK offers access to multiple data sources, potential for unlimited data, and incentives for data source partners.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nOpenBB SDK will be released later this month \ud83d\udc40.\\n\\n[yfinance API](https://github.com/ranaroussi/yfinance) is an unofficial (not affiliated) API around [Yahoo Finance website](https://finance.yahoo.com/).\\n\\nAlthough it is used in over 12,600 projects on GitHub and is downloaded on average 90,000 per week. This is still an unofficial wrapper. As you can see from Yahoo Finance website, it uses an ad revenue business model. This means that Yahoo Finance doesn\u2019t has any incentive from having users utilizing it through Yfinance API.\\n\\nIf one day Yahoo Finance website adds a paywall through an API key, then Yahoo Finance would:\\n\\n1. Either become obsolete\\n2. Or adopt the same architecture of OpenBB where an API key from a data source is necessary\\n\\n
    \\n\\nRegardless, Yfinance API retrieves data that exists on a third-party website: Yahoo Finance website. This means that this API is limited by the data Yahoo Finance is currently paying for redistribution. And thus, users get only what data is supported through the website.\\n\\nOn the other hand, OpenBB SDK allows you to retrieve data from over 50 different APIs (and growing). With yfinance being one of these APIs.\\n\\nSince OpenBB SDK requires API keys from most of the data sources, these have incentives to partner with OpenBB. Because:\\n\\n1. Marketing opportunity due to significant larger pool of users\\n2. New revenue stream\\n\\n
    \\n\\nIn essence, Yfinance API:\\n\\n- Not officially supported by Yahoo Finance\\n- No incentive for Yahoo Finance\\n- Limited data by what Yahoo Finance displays\\n- May become obsolete\\n\\nOn the other hand, OpenBB SDK:\\n\\n- Marketing for new data sources\\n- New revenue stream for partners through premium API keys\\n- (Almost) unlimited data - open source project that keeps on adding new data sources\\n- Multiple data sources for same data (user has choices)\\n\\nAs counter-intuitive as it sounds:\\n\\nThe shutting down of yfinance API (which is one of the data sources that OpenBB SDK has access to) would be beneficial to OpenBB adoption. This is because users would need to migrate to OpenBB SDK as that\u2019s the most mature and maintained open source financial API.\\n\\nIf you have any questions, feel free to drop me a message!"},{"id":"how-i-became-ceo-of-openbb","metadata":{"permalink":"/blog/how-i-became-ceo-of-openbb","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-08-14-how-i-became-ceo-of-openbb.md","source":"@site/blog/2022-08-14-how-i-became-ceo-of-openbb.md","title":"How I became CEO of OpenBB","description":"This post talks about my story of becoming the CEO of OpenBB, the company behind the fastest growing open source project in\xa0finance.","date":"2022-08-14T00:00:00.000Z","formattedDate":"August 14, 2022","tags":[{"label":"python","permalink":"/blog/tags/python"},{"label":"publishing","permalink":"/blog/tags/publishing"},{"label":"package","permalink":"/blog/tags/package"},{"label":"pypi","permalink":"/blog/tags/pypi"}],"readingTime":3.655,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-i-became-ceo-of-openbb","title":"How I became CEO of OpenBB","date":"2022-08-14T00:00:00.000Z","image":"https://github.com/DidierRLopes/my-website/assets/25267873/6fa08dae-061c-47be-9faf-8fdf4d8d530e","tags":["python","publishing","package","pypi"],"description":"This post talks about my story of becoming the CEO of OpenBB, the company behind the fastest growing open source project in\xa0finance."},"prevItem":{"title":"Why you should drop yfinance API and adopt OpenBB SDK","permalink":"/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdk"},"nextItem":{"title":"Web3, symbols and community","permalink":"/blog/web3-symbols-and-community"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis post talks about my story of becoming the CEO of OpenBB, the company behind the fastest growing open source project in\xa0finance.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nBoth my parents are Portuguese and emigrated to Switzerland for better conditions. This is where my brother and I were born. We moved back to our small hometown in Portugal when I was 8 years old.\\n\\nWhen I was 21 years old I moved to London to pursue my MSc in control systems at the Imperial College. I also joined a semiconductor company as a Software Design Engineer.\\n\\n![ezgif com-optimize (5)](https://github.com/DidierRLopes/my-website/assets/25267873/89dae2b2-d0c2-4826-b0c2-f2d764509e98)\\n\\nIn my spare time I learned Python so I could become more proficient in machine learning and artificial intelligence. When my mathematics professor learned of my interest in Python he challenged me to write the [code behind his PhD thesis](https://github.com/DidierRLopes/UnivariateTimeSeriesForecast) on \\"_Data Science in the Modeling and Forecasting of Financial Time Series: from Classic methodologies to Deep Learning_\\" which combined open source, ML/AI and finance. This was when I first started to realize my passion for financial data.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/dae2965f-447f-4c15-973e-9e9c1a6f1c80)\\n\\nI was inspired by books like \\"_Rich dad Poor dad_\\" which allowed me to understand that the only way to build true generational wealth is through investing. Now that I started to accumulate more savings through my professional pursuits, and with my finance interest increasing from my thesis work, I wanted to invest my own capital.\\n\\nWhat I learned was that investing was a highly cumbersome process. Unlike coding where the tooling (e.g. VSCode) is optimized for efficiency and allows us to automate a lot of processes, investing was highly inefficient and impossible to automate.\\n\\nI was spending hours doing my own investment research (multiple tabs open researching several different sources on a ticker, screenshot the data to put on a document or share with friends, write my thoughts, and repeat), and this had to be done for every single ticker at different instances of time otherwise the data would become irrelevant.\\n\\nI learned from Reddit users how they gained insights and performed due diligence. I quickly realized their \\"workflow\\" was just as inefficient as mine. I concluded that the only aspect of research that should require user input is the interpretation. As far as I was concerned, all data gathering should be automated.\\n\\nI began investigating potential investment research tools that allowed automation and couldn\'t find any, not even the mythical $24k/year Bloomberg terminal. I looked for platforms on GitHub where I could build on top of with no success.\\n\\nDuring Covid Christmas break, the flight to visit my parents was cancelled, so I ended up staying at home and sketching/building what would become my own investment research platform. I noticed that there were hundreds of data providers offering free data tiers where the data provided didn\'t correlate with each other. If I wanted access to paid datasets or more requests per minute it would be as simple as to upgrade my API key to a paid plan.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/b7715556-1094-497d-9f86-aaa97ca090c2)\\n\\nOver the next two months I built a python based command line interface in my spare time for and released the first lines of code as Open Source under the name \\"Gamestonk Terminal\\" since I was an investor in Gamestop and Elon Musk had recently tweeted his now infamous [\\"Gamestonk\\" tweet](https://twitter.com/elonmusk/status/1354174279894642703?s=20).\\n\\nThe project went viral in a couple of minutes on [Reddit](https://www.reddit.com/r/Python/comments/m515yk/gamestonk_terminal_the_equivalent_to_an/) and [HackerNews](https://news.ycombinator.com/item?id=26258773). In under 24h we had over 4,000 stars on [GitHub](https://github.com/OpenBB-finance/OpenBBTerminal), and hundreds of messages requesting features, thanking me for the tool, or reporting bugs.\\n\\nThe number of issues and feature requests was overwhelming for a single person working part-time, so I created a [Discord group](https://openbb.co/discord) and started building a community of users. Many of those same first users went on to become core maintainers of the project. The community started adding new data sources, new features and even new asset classes to the project\u200a-\u200asoon after we were supporting crypto, ETFs, options, forex, and macro economy.\\n\\nMy goal was never to build a business/company with this product. My motivation was to create a better investment research platform that was unavailable until then. When we got approached by JJ (from OSS Capital), it was a no-brainer to create OpenBB, as this would allow me to accelerate the product vision and build the world\'s leading investment research platform."},{"id":"web3-symbols-and-community","metadata":{"permalink":"/blog/web3-symbols-and-community","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-06-28-web3-symbols-and-community.md","source":"@site/blog/2022-06-28-web3-symbols-and-community.md","title":"Web3, symbols and community","description":"This blog post discusses the importance of strong communities in the Web 3.0 space, the role of decentralization, and how voting frameworks based on smart contracts can empower users.","date":"2022-06-28T00:00:00.000Z","formattedDate":"June 28, 2022","tags":[{"label":"Web3","permalink":"/blog/tags/web-3"},{"label":"Community","permalink":"/blog/tags/community"},{"label":"Decentralization","permalink":"/blog/tags/decentralization"},{"label":"Blockchain","permalink":"/blog/tags/blockchain"},{"label":"Smart Contracts","permalink":"/blog/tags/smart-contracts"}],"readingTime":5.48,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"web3-symbols-and-community","title":"Web3, symbols and community","date":"2022-06-28T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499534-10b469e9-60ba-4458-b5b9-853cbffa5680.png","tags":["Web3","Community","Decentralization","Blockchain","Smart Contracts"],"description":"This blog post discusses the importance of strong communities in the Web 3.0 space, the role of decentralization, and how voting frameworks based on smart contracts can empower users."},"prevItem":{"title":"How I became CEO of OpenBB","permalink":"/blog/how-i-became-ceo-of-openbb"},"nextItem":{"title":"Remote + Flexible work >> Salary","permalink":"/blog/remote-flexible-work-salary"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post discusses the importance of strong communities in the Web 3.0 space, the role of decentralization, and how voting frameworks based on smart contracts can empower users.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nIf you have been paying attention to the Web 3.0 space, you should have realized that most of the projects in the space rely on strong communities.\\n\\n### Why on Web 3.0?\\n\\nOn a centralized concept (Web 2), there is usually a regulatory entity that decides whether something is True or False on a project/product. This means that there\u2019s a single centralized company responsible for making a decision and users must trust that this entity is acting on their best interests.\\n\\nFurthermore, the users do not stand to win anything whether the decision is True or False. They may identify more with one of the outcomes, but there is no personal incentive to the user. Even if a user can relate with the outcomes they never feel a sense of belonging, as deep down they are aware that their opinion is not being taken into account.\\n\\nOn a decentralized concept (Web 3), the story is the very different. A decentralized community is responsible for deciding the True or False, based on a voting framework defined a-priori. This means that the group of users, based on smart contracts executed on the blockchain, can vote on a particular decision. **This is where the importance of a strong community kicks in.**\\n\\nOn Web 2 the users must trust that such entity is acting on user\u2019s best interests. That trust, on Web 3, occurs in form of a strong community. The best way for a user to trust the decisions of a group of people is to know that a group shares the same values and has incentives towards the success of the same project/product.\\n\\n**In fact, I believe that in general when these votes occur, the more unanimous the decisions are, the stronger the community is.**\\n\\n> **NOTE:** Although Web 3 communities are stronger than Web 2 ones, I believe that when something goes wrong the Web 3 communities break faster as they don\u2019t have a common enemy due to the decentralized concept (e.g. LUNA debacle). On the other hand, Web 2 communities can \u201chold\u201d onto the fact that their common enemy is now the entity that they trusted to act on their best interests (e.g. Robinhood vs wallstreetbets).\\n\\n### Why build strong communities?\\n\\n_The Web 3.0 concept doesn\u2019t only benefit from strong communities but is built on top of it._ For worldwide adoption in products/projects/companies the space need strong communities.\\n\\nWhy does money have value? Because people believe that they will be able to exchange it for goods/services in the future. Why do people believe that? Because they trust the entity that is managing such currency.\\n\\nAnalogously, for a digital asset to have value, people need to believe that they will be able to exchange it for goods/services in the future. Since there is no entity to trust, people need to believe that the community will believe that a certain digital asset has value. This belief exists because there are incentives (usually financial or status) for its members.\\n\\nOnce this happens we enter into the law of supply and demand where the value of digital asset goes up as there is either less supply or more demand.\\n\\nThese communities can easily be found on CT or Discord/Telegram servers.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/10b469e9-60ba-4458-b5b9-853cbffa5680)\\n\\n### How are strong communities created?\\n\\nIf we learn from history, we see that the most loyal and bigger communities **always recurred at symbology** to achieve such, some examples: sports clubs, religion, countries, clans, societies, \u2026\\n\\nThe truth is that we humans constantly seek this sense of belonging (or are afraid of being alone). When we see multiple people on social media utilizing the same symbols to represent their beliefs, we want to be part of that group, of that community.\\n\\nThis can be seen over and over again on Web3, particularly in CT:\\n\\n- Changing the eyes\u2019 color of your twitter\u2019s pfp which represents being bullish on crypto (usually red for BTC and blue for ETH)\\n- Emojis after the username\\n- Utilizing the NFT you acquired from a collection that you believe in\\n- Adding a \u201c.eth\u201d at the end of the username\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/360569e7-4168-40ac-add3-096000691e87)\\n\\n### Why does this matter?\\n\\nCompanies outside of the Web 3.0 space will start picking up on this to build stronger communities and have a stronger identity (e.g. Notion and their employees pfp on social media). This is even more relevant for open source companies (Web 2.5 if you will), which rely on their communities to build a successful company (e.g. Hugging Face \ud83e\udd17 ).\\n\\n> _I believe that companies will start thinking about the emojis that their community can use while coming up with the name of the brand and logo._\\n\\n
    \\n\\nAs for OpenBB, we are a fintech open source company that focuses on providing better investment research for everyone, anywhere. The finance sector we are in is composed of multiple players that have been on the top of the industry for decades. We come in with a radical different approach, bottom-up.\\n\\n> _Being open source for us is not a choice but a need if we are to disrupt traditional investment research platforms with years of head start._\\n\\n
    \\n\\nOnce we knew that we wanted the logo to be extracted from the \u201cBB\u201d, it was immediate that the butterfly emoji (\ud83e\udd8b) would be used. Furthermore, a butterfly is a metaphor for transformation, which in our context, represents OpenBB Terminal allowing each investor to evolve and finally fly (i.e. achieve financial freedom).\\n\\nIn order for our users to start relating to the butterfly emoji (\ud83e\udd8b) with our brand we have several cues:\\n\\n- On the landing page\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d491e338-8570-4a86-a8a6-48ac95264121)\\n\\n- Official social media channels\\n- Our team members use it in their socials\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/cbfca912-0c96-40f5-b8f6-3c1e9645ee82)\\n\\n- On the OpenBB Terminal as the default flair,\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/7d8dcf03-c340-4b35-8255-920b75daac71)\\n\\nAnd even to replace the asterisk (*) when inserting the password to enter our OpenBB Bot platform, **because details matter.**\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b6088f2a-5ec2-42f8-adef-e4dcf1e6e812)\\n\\nAnd that is what we are doing at OpenBB to build a stronger community? Do you have any other tips/tricks? Feel free to share them!\\n\\nHope you enjoyed this post and as always, am looking to hear feedback!\\n\\n_PS: I\u2019d like to take this chance to say that our OpenBB Bot launch will occur in the coming weeks, you won\u2019t have to wait much longer \ud83e\udd8b_"},{"id":"remote-flexible-work-salary","metadata":{"permalink":"/blog/remote-flexible-work-salary","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-05-03-remote-flexible-work-salary.md","source":"@site/blog/2022-05-03-remote-flexible-work-salary.md","title":"Remote + Flexible work >> Salary","description":"This blog post discusses the importance of remote and flexible work hours, and how it can significantly improve work-life balance and productivity.","date":"2022-05-03T00:00:00.000Z","formattedDate":"May 3, 2022","tags":[{"label":"Remote Work","permalink":"/blog/tags/remote-work"},{"label":"Flexible Hours","permalink":"/blog/tags/flexible-hours"},{"label":"Work Life Balance","permalink":"/blog/tags/work-life-balance"},{"label":"Productivity","permalink":"/blog/tags/productivity"}],"readingTime":4.785,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"remote-flexible-work-salary","title":"Remote + Flexible work >> Salary","date":"2022-05-03T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499305-ad97cd9d-c836-443c-b333-78a193b3ac99.png","tags":["Remote Work","Flexible Hours","Work Life Balance","Productivity"],"description":"This blog post discusses the importance of remote and flexible work hours, and how it can significantly improve work-life balance and productivity."},"prevItem":{"title":"Web3, symbols and community","permalink":"/blog/web3-symbols-and-community"},"nextItem":{"title":"Looking for a new tattoo? OpenBB has you covered\u2026 literally.","permalink":"/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literally"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post discusses the importance of remote and flexible work hours, and how it can significantly improve work-life balance and productivity.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nI was thinking about remote + flexible hours, and I don\u2019t think I would ever work for a company without these. At least by choice \ud83d\ude43\\n\\nI mean, who would tell Morty and Sum Sum that I wouldn\u2019t be at home to play?\\n\\n**I\u2019m a strong believer that work should wrap around your lifestyle and not vice-versa.**\\n\\nOn average, a person works 40 hours a week and sleeps 8 hours a day. This means that out of 168h per week you have 72h for personal time. In terms of percentage we have: 24% for work, 33% for sleep, and 43% for personal time.\\n\\nSo how come most people have almost 2x as much personal time compared to work time and they still feel like they are in this 9\u20135 rat race and their life revolves around work?\\n\\nWell, here\u2019s the 4 scenarios as I see it\u2026\\n\\n**1. The work is not remote (and not flexible).**\\n\\n - If we account for the commute and stress associated with, personal time gets directly transferred into work time.\\n - E.g. with a daily 2 hour commute Mon-Fri, which is very typical, this means that your personal time is divided into 30% for work and 37% for personal. This isn\u2019t event including the part where you have to prepare to leave the house, and the tiredness resultant from the commute.\\n\\n**2. The work is remote but not flexible.**\\n\\n - This is much better than the previous. But it\u2019s still not good enough. The argument here is not due to absolute time but performance and state of mind.\\n - Life is not straightforward. We, as individuals, are very different between ourselves. Our bodies, mind, brain, relationships, \u2026 work very differently. By not being flexible on the working hours you are basically ignoring all of that diversity and grouping everyone into a single 9\u20135 + Mon-Fri category.\\n - _The \u201cironic\u201d part is that most companies promote diversity and don\u2019t think about this. Which just shows that the diversity topic has become very much a marketing vehicle._\\n - In my case, I\u2019m a night owl, I don\u2019t usually wake up too early, because I am much more productive when I stay awake until 3/4 am. If I have to wake up early because someone decided that 8:30am was the time that everyone needed to \u201ccheck in\u201d you are basically not getting the most out of me.\\n - One may wonder, well, this is a company problem because they are paying for an employee that is not performing as much as they could. Unfortunately, that\u2019s not true, it\u2019s a much bigger problem to the employee. This is because when an employee excels at a job they tend to have a much happier life which in turn increases performance, which increases happiness, and so on and so forth.\\n\\n**3. There is no mention for not remote but flexible because, in my opinion, that makes very little sense.**\\n\\n**4. Now, let\u2019s imagine the scenario where the work is remote and flexible.**\\n\\n - This is where it gets interesting. When we fall on this scenario your job perspective changes drastically. This is because at this point you put yourself first and can define your own priorities while having a pool of time to get a job done at your own time.\\n - E.g. you can plan activities with friends, do exercise, meditate, \u2026 whatever suits your lifestyle. Which will give you a boost of energy to perform even better at your job. On top of this, you don\u2019t need to squash the work within Mon-Fri, once you are in this flexible regime you may use the weekend to your advantage. Flights at 20 Euros on Tuesday to come back Thursday? Fine, I\u2019ll work during weekend to make up for this time\\n - There are people that love a 9\u20135 Mon-Fri schedule and that is fine. For those it means that the 9\u20135 Mon-Fri system implemented got it right. In fact, I would argue, that they are still wrapping work around lifestyle, it\u2019s just that their lifestyle is working 9\u20135 Mon-Fri and enjoying time outside these hours.\\n\\nThe downsides of this fully flexible work are:\\n\\n- Interaction with coworkers and communication. But with us going global due to remote work, it doesn\u2019t really matter, since the 9\u20135 hours of different countries would already lead to this problem\\n- Tracking employee timesheet. I think that a company shouldn\u2019t track an employee timesheet because results are far more important than working hours, and can be just as measurable.\\n\\n
    \\n\\nAll of this to say that at OpenBB we have:\\n\\n- **REMOTE WORK:** As long as you are in a location with internet access, we are not worried. This allows us to build a strong diverse team with different backgrounds and ideas.\\n- **FLEXIBLE HOURS:** We believe that your work should wrap around your lifestyle and not vice-versa. As long as you excel, you will not be asked why you woke up at noon.\\n- **UNLIMITED HOLIDAYS:** Who has time to track holidays when building such an exciting project? We trust in our people to manage their own PTO and keep performing at the highest level.\\n\\nAND this is how I sleep at night having no idea at what time John logged in and out:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/dbf48e0f-b711-4e57-988a-26a791f8bdaf)\\n\\nOhhh, and we\u2019re hiring!\\n\\nIf you provide a referral to someone that ends up joining OpenBB, I will transfer you $100 as a token of appreciation \ud83e\udd8b"},{"id":"looking-for-a-new-tattoo-openbb-has-you-covered-literally","metadata":{"permalink":"/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literally","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-04-21-looking-for-a-new-tattoo-openbb-has-you-covered-literally.md","source":"@site/blog/2022-04-21-looking-for-a-new-tattoo-openbb-has-you-covered-literally.md","title":"Looking for a new tattoo? OpenBB has you covered\u2026 literally.","description":"Exploring unconventional ways to increase brand visibility, OpenBB\'s co-founder gets a tattoo of the company logo. This blog post discusses the thought process behind this unique marketing strategy.","date":"2022-04-21T00:00:00.000Z","formattedDate":"April 21, 2022","tags":[{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"Marketing","permalink":"/blog/tags/marketing"},{"label":"Tattoo","permalink":"/blog/tags/tattoo"},{"label":"Brand Awareness","permalink":"/blog/tags/brand-awareness"}],"readingTime":3.125,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"looking-for-a-new-tattoo-openbb-has-you-covered-literally","title":"Looking for a new tattoo? OpenBB has you covered\u2026 literally.","date":"2022-04-21T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499252-fa6ca582-187b-4ddf-9ecf-1e259939f26f.png","tags":["OpenBB","Marketing","Tattoo","Brand Awareness"],"description":"Exploring unconventional ways to increase brand visibility, OpenBB\'s co-founder gets a tattoo of the company logo. This blog post discusses the thought process behind this unique marketing strategy."},"prevItem":{"title":"Remote + Flexible work >> Salary","permalink":"/blog/remote-flexible-work-salary"},"nextItem":{"title":"How I created the best discord meme bot","permalink":"/blog/how-i-created-the-best-discord-meme-bot"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nExploring unconventional ways to increase brand visibility, OpenBB\'s co-founder gets a tattoo of the company logo. This blog post discusses the thought process behind this unique marketing strategy.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nWhen [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal) started last year, I went from having your typical career as a Software Engineer to becoming a co-founder & CEO of a C-Corporation overnight. One thing that I\u2019ve really learnt from this change, is I can no longer code for 12\u201316 hours a day straight as my role now involves so much more than this\u2026 and most interestingly, one of those things is marketing.\\n\\nDuring Easter in Lisbon, I was thinking about how to increase the visability of [OpenBB](https://openbb.co/). _An investment research platform for everyone, anywhere_. Seems self-explanatory and something most of us would relate to, but the problem is reaching a bigger audience.\\n\\nDue to [our $8.5M funding](https://openbb.co/blog/gme-didnt-take-me-to-the-moon-but-gamestonk-terminal-did) we have money in the bank, which means we can afford to do some ads campaigns. However, I very much dislike the traditional type of ads, whether that is with Google, Instagram, Twitter or YouTube. Particularly YouTube ones, when I see an ad there I immediately think less of the product being advertised due to how intrusive these are.\\n\\nThat\u2019s why I started thinking of ways to share our OpenBB brand in a non-intrusive way. In fact, I went one step further and started thinking when I personally would welcome ads.\\n\\nFunnily enough, the first thing that came to my mind was when I go to the bathroom without my phone. Although there\u2019s no ads on the back of shampoos/shower gel/soap/spray, I would very much welcome them.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/0a8000e0-1a19-4c63-813d-caeb6fd67c9a)\\n\\nIt\u2019s not like knowing the %s of ingredients that makes up cleaning products has a lot of use cases\u2026\\n\\nThis brought me to the conclusion that I would only welcome ads if I was bored and didn\u2019t have anything keeping me \u201ctoo busy\u201d. This immediately made me think of London underground ads (the most effective type of DOOH imho). I always read those ads. The main reason being that I don\u2019t have WiFi underground and the noise is too loud to listen to a podcast. Hence, I imagined the underground looking like:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/af42f60a-799c-468e-a5e1-b8faf1daf2ad)\\n\\nWhen I checked for the prices, I was looking at a marketing campaign for a couple of days in a couple of stations costing over 5 digits, which is quite expensive for the short time-span.\\n\\nTherefore, I started to think of cheaper alternatives that yielded a better ROI. The next thing that passed through my mind was wearing OpenBB swag (yet to be revealed, [subscribe to our newsletter](https://openbb.co/newsletter) to know more). However, I feel like nowadays everyone has a t-shirt with a different logo and these aren\u2019t as noticeable as before \u2014 at least that\u2019s my perspective.\\n\\nThis lead me to think: **What about a tattoo?** It\u2019s a similar concept than OpenBB clothes but more powerful. In addition, when wearing OpenBB clothes with a visible tattoo, this will create a \u201ccuriosity\u201d effect since the symbol is repeated (clothes and tattoo). In addition, I\u2019ve not come across anyone using their body to express their brand.\\n\\nLater that day I booked a tattoo slot, paid 100 euros, and got the OpenBB logo on the back of my arm as shown below,\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/fa6ca582-187b-4ddf-9ecf-1e259939f26f)\\n\\nI will let you know on my socials how many people ask about this tattoo over the course of my life.\\n\\nAnd if you like [our logo](https://www.openbb.design/9242dc28c/p/809a44-logo) and [our values](https://www.openbb.design/9242dc28c/p/91bbcc-our-values), OpenBB will pay you for the tattoo.\\n\\n**One things for sure, now I can definitely put the gym membership as a company expense since I\u2019m a walking billboard \ud83d\ude04**\\n\\nThe first walking/running/coding/eating/drinking OpenBB billboard."},{"id":"how-i-created-the-best-discord-meme-bot","metadata":{"permalink":"/blog/how-i-created-the-best-discord-meme-bot","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-04-09-how-i-created-the-best-discord-meme-bot.md","source":"@site/blog/2022-04-09-how-i-created-the-best-discord-meme-bot.md","title":"How I created the best discord meme bot","description":"In this blog post, I share my journey of creating a Discord meme bot, the role it played in building a vibrant community around our open source project, and how you can add your own memes to the bot.","date":"2022-04-09T00:00:00.000Z","formattedDate":"April 9, 2022","tags":[{"label":"Discord","permalink":"/blog/tags/discord"},{"label":"Meme Bot","permalink":"/blog/tags/meme-bot"},{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Community Building","permalink":"/blog/tags/community-building"}],"readingTime":3.89,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-i-created-the-best-discord-meme-bot","title":"How I created the best discord meme bot","date":"2022-04-09T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499097-f324321b-d438-4838-b0a0-e3155611538a.png","tags":["Discord","Meme Bot","Open Source","Community Building"],"description":"In this blog post, I share my journey of creating a Discord meme bot, the role it played in building a vibrant community around our open source project, and how you can add your own memes to the bot."},"prevItem":{"title":"Looking for a new tattoo? OpenBB has you covered\u2026 literally.","permalink":"/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literally"},"nextItem":{"title":"Meet the most advanced investment research platform","permalink":"/blog/meet-the-most-advanced-investment-research-platform"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blog post, I share my journey of creating a Discord meme bot, the role it played in building a vibrant community around our open source project, and how you can add your own memes to the bot.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/discord-memes).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n## Background\\n\\nOver the past few weeks, life has been very chaotic on my end, mostly due to the announcement of [OpenBB](http://www.openbb.co/) last week which you can read the full story on [here](https://openbb.co/blog/gme-didnt-take-me-to-the-moon-but-gamestonk-terminal-did).\\n\\nWhen I started [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal), all my focus was on building, building and building. Once I made the project open source and contributors started to appear, I slowly saw my time shifting **from building a product to building a community**. This community ultimately would end up building the product, but from my end, I need to be able to pass on my passion to the project and vision.\\n\\nDeveloping features for the terminal only took me a couple of minutes, whereas the connection with the community is a long-time game. You don\u2019t become close with someone you\u2019ve never met within couple of minutes. Instead you need to put effort into the relationship and **consistency is key**.\\n\\nThe community on our Discord was growing day by day. And so was my relationship with the people in it. The truth is, we were not only sharing insights about the platform, but were laughing and bonding together whilst building it. **And memes/gifs are a big part of these interactions.**\\n\\nFor people who know me, they know how much I love memes and how I can always create memes for every situation (honestly, all the time I spent on Instagram is finally paying off).\\n\\nAlthough I believe that we have one of the most exciting open source projects going on, I also strongly believe that our fun culture (i.e. memes) is what makes contributors want to work in this particualr environment. **Building the future of investment research can be fun and this is what we\u2019re proving.**\\n\\nAt this stage, I think I\u2019ve spent more time interacting with people than I have working on the platform. The funny thing is that **the platform is 10x better than what it would be if I was working on my own**. Creating a strong community pays off and this is why since the start I was having calls with literally everyone to help them install our platform. Today, most of the team at OpenBB was met on Discord whilst working on the platform. **I didn\u2019t need any interviews, they weren\u2019t candidates anymore but people that I enjoyed to work with** and wanted on the team.\\n\\nSorry for the background story, but it was important to me to explain why I worked on this. **The interesting part of the article starts now.**\\n\\n## Development\\n\\n**The idea of Discord Memes is to avoid to open [imgflip](https://imgflip.com/) everytime I wanted to add text to a meme.** Personally, I love the gifs available through Discord but I think a meme with text is much more powerful (and funny).\\n\\nWhen I started coding this here and there, I wanted the code to be super straightforward so it was very simple and fast to add a new meme to the pool. And so I did.\\n\\nThe process to add new memes is incredibly easy. Go to the [project](https://github.com/DidierRLopes/discord-memes) and star it for starters (also [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal) since you\u2019re at it). Then,\\n\\n1. Add the meme you want to the `memes/` folder, e.g. `spongebob.jpg`\\n\\n2. Then create a function with the same name of the image (e.g. `spongebob`) with the following format\\n\\n
    \\n\\n```python\\n@create_and_send_meme()\\ndef spongebob(inter, text: str = None, _=None):\\n if text:\\n _.text(\\n 0.5,\\n 0.2,\\n \\"\\\\n\\".join(wrap(\'\'.join(choice((str.upper, str.lower))(c) for c in text), 40)),\\n fontsize=20,\\n color=\\"white\\",\\n alpha=0.9,\\n horizontalalignment=\\"center\\",\\n path_effects=[pe.withStroke(linewidth=4, foreground=\\"black\\")]\\n )\\n return _\\n```\\n\\n3. That\u2019s it.\\n\\n
    \\n\\n**Note:** I created a python decorator `@create_and_send_meme()` that basically abstracts all the memes created and picks up the image on memes with the same name of the function. This way, the person adding a meme just needs to focus on the text on the image, i.e. it\'s location, size, where it wraps, colours and alignment.\\n\\nI used a playground.ipynb notebook, which is also on the repo, to increase the speed of the text placement on each of the memes I added.\\n\\nThis is how it looks,\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f6b1ea15-40f8-4ebc-bbf8-209b502f943d)\\n\\nOR\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f324321b-d438-4838-b0a0-e3155611538a)\\n\\nAs you can see, our Discord server just stepped up. [Join us](https://openbb.co/discord) to try out the meme bot, build the future of investment research or just to say hi.\\n\\nWe\u2019ll be waiting for you. \ud83e\udd8b"},{"id":"meet-the-most-advanced-investment-research-platform","metadata":{"permalink":"/blog/meet-the-most-advanced-investment-research-platform","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-03-21-meet-the-most-advanced-investment-research-platform.md","source":"@site/blog/2022-03-21-meet-the-most-advanced-investment-research-platform.md","title":"Meet the most advanced investment research platform","description":"Meet the most advanced investment research platform. This blog post introduces Gamestonk Terminal, an advanced investment research platform, and discusses its features and automation capabilities.","date":"2022-03-21T00:00:00.000Z","formattedDate":"March 21, 2022","tags":[{"label":"Investment Research","permalink":"/blog/tags/investment-research"},{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal"},{"label":"Automation","permalink":"/blog/tags/automation"},{"label":"Routines","permalink":"/blog/tags/routines"}],"readingTime":1.42,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"meet-the-most-advanced-investment-research-platform","title":"Meet the most advanced investment research platform","date":"2022-03-21T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280498967-0cd2335e-3099-43a5-996e-27bb34903348.png","tags":["Investment Research","Gamestonk Terminal","Automation","Routines"],"description":"Meet the most advanced investment research platform. This blog post introduces Gamestonk Terminal, an advanced investment research platform, and discusses its features and automation capabilities."},"prevItem":{"title":"How I created the best discord meme bot","permalink":"/blog/how-i-created-the-best-discord-meme-bot"},"nextItem":{"title":"UX/UI is better than features","permalink":"/blog/gamestonk-terminal-ux-features"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nMeet the most advanced investment research platform. This blog post introduces Gamestonk Terminal, an advanced investment research platform, and discusses its features and automation capabilities.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nSeveral people have asked me why [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal) doesn\u2019t have release versions, and the main reason is because at the pace the team codes and the rate that new features / bug fixes appear it doesn\u2019t yet makes sense to do so.\\n\\nTo give you an example, recently I shared the first **DEMO of what the terminal can do**, and I mention about our \u201croutines\u201d automation concept.\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nOne week later, using the latest version of the terminal, on top of that simplistic routine type you are able to:\\n\\n1. Provide variable input variables when calling the routine using $ARGV[i] (I used Perl convention here eheh)\\n2. Execute routines from within the terminal directly\\n3. Add comments to the routines so the process is more clear\\n4. Exporting data to a folder of choice is now possible\\n5. Exporting a file with a pre-defined name is now possible\\n6. Allow for the first line of the routines to be selecting a folder to export ALL the data\\n\\n
    \\n\\nSee below a 1 minute video of what these routine automated scripts look like!\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nReach out if you have any question to the team, there\u2019s very little we can\u2019t do!\\n\\nThis is the way!"},{"id":"gamestonk-terminal-ux-features","metadata":{"permalink":"/blog/gamestonk-terminal-ux-features","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-01-06-gamestonk-terminal-ux-features.md","source":"@site/blog/2022-01-06-gamestonk-terminal-ux-features.md","title":"UX/UI is better than features","description":"Gamestonk Terminal\'s UX/UI features and the teamwork behind their implementation.","date":"2022-01-06T00:00:00.000Z","formattedDate":"January 6, 2022","tags":[{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal"},{"label":"UX/UI","permalink":"/blog/tags/ux-ui"},{"label":"Software Development","permalink":"/blog/tags/software-development"},{"label":"Teamwork","permalink":"/blog/tags/teamwork"}],"readingTime":4.19,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"gamestonk-terminal-ux-features","title":"UX/UI is better than features","date":"2022-01-06T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280497759-9d698e1e-6ee1-4856-a6af-48cee6b2eb34.png","tags":["Gamestonk Terminal","UX/UI","Software Development","Teamwork"],"description":"Gamestonk Terminal\'s UX/UI features and the teamwork behind their implementation."},"prevItem":{"title":"Meet the most advanced investment research platform","permalink":"/blog/meet-the-most-advanced-investment-research-platform"},"nextItem":{"title":"Sector and Industry Analysis \u2014 Gamestonk Terminal","permalink":"/blog/sector-and-industry-analysis-gamestonk-terminal"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nGamestonk Terminal\'s UX/UI features and the teamwork behind their implementation.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n**Features attract users, UX/UI conquers them \u2694\ufe0f**\\n\\nThroughout month of December, me and 3 of the most active maintainers of [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal) had a meeting where we discussed shifting our focus from adding features, to improving the terminal UX/UI to make it even more attractive. The main outcomes of these meeting were:\\n\\n1. Relative and Absolute menu jumping, e.g. if i\u2019m in crypto/ta and want to go to stocks/ta I can do:\\n\\n a. Absolute: `/stocks/load tsla/ta`\\n\\n b. Relative: `../../stocks/load tsla/ta`\\n\\n3. Scripting feature. You can now interact with the terminal through a sequence of commands, e.g.: `stocks/disc/ugs -l 3/gtech/active`.\\n\\n4. `reset` command everywhere to allow for faster development as it exits from the terminal and comes to the same menu running new terminal code and its API keys.\\n\\n5. Auto-completion in commands with choices.\\n\\n6. When misspelling a command name, if it\u2019s similar enough that the terminal recognises the right command, it will replace it, to speed up interaction.\\n\\n
    \\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e1f039d6-f75e-41e2-88f5-7b0f16564093)\\n\\n6. Running a `.gst` job, like `python terminal.py scripts/test_stocks_disc.gst` which allows to run a sequence of commands of the terminal. In the future we can take advantage of this for integration tests. The user can build their own daily routines to speed up the investment process.\\n\\n
    \\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/68974111-8cb5-4866-ad14-caae7517d869)\\n\\nNow, I know what you\u2019re thinking. This is a massive improvement over the terminal usage up until now, and that\u2019s a **LOT** of code changes. Which is very much true, to be specific, this engineering effort resulted in:\\n\\n> **370 files changed with 44,875 additions and 18,463 deletions**\\n\\n
    \\n\\nAnd you may be wondering how long did this take us to do. Nope, it wasn\u2019t months but\u2026\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/8fc95c85-9c40-46b0-88e0-68700c3bfb9b)\\n\\n**1 week. Yup, a single f*king week.** You can see that it was finalised with these PRs ([#1049](https://github.com/GamestonkTerminal/GamestonkTerminal/pull/1049), [#1041](https://github.com/GamestonkTerminal/GamestonkTerminal/pull/1041), [#1048](https://medium.com/@dro-lopes/gamestonk-terminal-ux-features-f9754b484919#1048)).\\n\\nIn that week we split work, did pair programming, we called each other to discuss better implementation practices, we changed the architecture 2/3 more times\u2026 On top of that, I was feeling overwhelmed with the stocks menu, I clearly underestimated how many features we have (how naive\u2026), so the 3 other maintainers jumped on it and helped me out. In 3 or so years of software engineering, this was** teamwork like I\u2019ve not felt before**.\\n\\nThat weekend I was so happy as we accomplished this task that I think I didn\u2019t even work on the terminal that Sunday! Doesn\u2019t happen often these days!\\n\\nHowever, as a good friend of mine told me:\\n\\n> _**\u201cThe entertainment industry hasn\u2019t found yet something more appealing than developing code towards a product I believe in and with people I like\u201d**_\\n\\n
    \\n\\nI still think about this often, and this is what I tell my girlfriend, to explain why I\u2019m coding and not playing Mario Kart 8 Deluxe with her. (the fact she always beats me at it also may be considered as a factor \ud83e\udd23).\\n\\nYou may be thinking this is a one off, the reality is that **it isn\u2019t**. Another example can be seen in [this blog post](https://dev.to/northern64bit/aspiring-16-year-old-quant-developer-contributing-to-open-source-application-16k4). This goes over the story of the development of our discord bot where it all started from a message from a **16yo contributor that wants to become a quant**. He wanted to not only improve his python skills with us but also bring the terminal features to a bigger audience. Working with us in an open-source project is helping him towards achieving his life-goal dream.\\n\\nWhile I write this post another contributor, finishing his CPA, is working on [improving the code resulting from that UX effort by creating a base class](https://github.com/OpenBB-finance/OpenBBTerminal/pull/1141) so that new developers can add controllers much easily (he estimates a reduction of 11% of codebase size based on \u201cnapkin maths\u201d as he puts it).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/165db265-f583-4842-b9ef-8beed2348aa2)\\n\\nWhile user experience is critical, so is user interface. And that is why our next engineering effort will be around it. We already have something in the works in [this PR](https://github.com/GamestonkTerminal/GamestonkTerminal/pull/1140), where we can draw lines and write text! Almost like TradingView (almost\u2026 \ud83d\ude2c).\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/c3703249-5d78-469a-b3b7-611f04dec6e1)\\n\\nSo, keep on the lookout because 2022 is gonna be a big year for us!! \ud83e\udd8b \ud83d\ude80\\n\\nOhh, before I say thanks for the read and all that, it\u2019s also worth mentioning that there\u2019s a PR in the queue for a new context called \u201c**alternative data**\u201d, which already has a **COVID menu** to factor that data into account on your investments.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/9d698e1e-6ee1-4856-a6af-48cee6b2eb34)\\n\\n_PS: The blue text is because we are transitioning towards [rich package](https://github.com/Textualize/rich) which gives a lot more freedom when it comes to improving our user interface._\\n\\n
    \\n\\nThanks for your read, and if you enjoy Gamestonk Terminal, please reach out to [our discord](https://discord.gg/ptYabd8w) to say thank you, or ideally: for **@terp340** to change date format to dd/MM/YYYY \u2014 **the only correct one**!\\n\\nHappy 2022 with lots of love \u2764\ufe0f"},{"id":"sector-and-industry-analysis-gamestonk-terminal","metadata":{"permalink":"/blog/sector-and-industry-analysis-gamestonk-terminal","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-12-02-sector-and-industry-analysis-gamestonk-terminal.md","source":"@site/blog/2021-12-02-sector-and-industry-analysis-gamestonk-terminal.md","title":"Sector and Industry Analysis \u2014 Gamestonk Terminal","description":"The development journey of a new Sector and Industry Analysis feature for Gamestonk Terminal, integrating the FinanceDatabase package.","date":"2021-12-02T00:00:00.000Z","formattedDate":"December 2, 2021","tags":[{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal"},{"label":"Sector Analysis","permalink":"/blog/tags/sector-analysis"},{"label":"Industry Analysis","permalink":"/blog/tags/industry-analysis"},{"label":"FinanceDatabase","permalink":"/blog/tags/finance-database"},{"label":"Open Source","permalink":"/blog/tags/open-source"}],"readingTime":4.01,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"sector-and-industry-analysis-gamestonk-terminal","title":"Sector and Industry Analysis \u2014 Gamestonk Terminal","date":"2021-12-02T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280497500-a8730909-278e-4186-9139-0b08f7ed88c0.png","tags":["Gamestonk Terminal","Sector Analysis","Industry Analysis","FinanceDatabase","Open Source"],"description":"The development journey of a new Sector and Industry Analysis feature for Gamestonk Terminal, integrating the FinanceDatabase package."},"prevItem":{"title":"UX/UI is better than features","permalink":"/blog/gamestonk-terminal-ux-features"},"nextItem":{"title":"Handing your twitter account to your most avid community member","permalink":"/blog/handing-your-twitter-account-to-your-most-avid-community-member"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThe development journey of a new Sector and Industry Analysis feature for Gamestonk Terminal, integrating the FinanceDatabase package.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThe end-to-end story of developing a new **Sector and Industry Analysis** for [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal) from scratch.\\n\\nOn the 13th of October, [Jeroen Bouma](https://github.com/JerBouma) (a ALM advisor and python enthusiast) reached out in order to integrate his [FinanceDatabase package](https://github.com/JerBouma/FinanceDatabase) into [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e98a2b76-8113-461e-a69f-48a706971adb)\\n\\nAfter having a call with Jeroen to bounce ideas, it was clear that our terminal needed such capability to be even more powerful (as if **over 500 features** already and counting didn\u2019t already do the trick eheh). However, at the time I was too busy to work on the concept so I asked Jeroen if he could sketch something up on a jupyter notebook.\\n\\nWithin the following week, Jeroen sent a Jupyter notebook explaining the FinanceDatabase module and what we could have in a Sector and Industry analysis.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f8402594-0d19-4017-bb7b-cd61a593fd2d)\\n\\nIn addition, he also mentioned his [PassiveInvestor package](https://github.com/JerBouma/ThePassiveInvestor), and ended up [implementing it on his own in Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal/pull/857)! This was a great addition, as it strengthened our **ETF context** and provided a slick Excel report for the Excel fans out there! See his [LinkedIn post](https://www.linkedin.com/feed/update/urn:li:activity:6859887432532291584/) on the experience.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/9ce2dfd0-c891-44f0-b0ae-1a774203bdb7)\\n\\n...\\n\\nForward to last weekend (1.5 months later), I had a free Sunday afternoon so started working on the development of this menu. I started by thinking about what would make this menu more flexible and powerful.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/942f3089-6cb1-4062-b1be-2bb204a7133d)\\n\\nThese were my thoughts about what it needs:\\n\\n- **Several filtering parameters** as the number of companies in the database is pretty huge with 155.705 tickers, 16 sectors, 242 industries, 111 countries and 82 exchanges. These were the filters selected: Country, Sector, Industry, Market Cap and Flag to include/exclude international exchanges.\\n- **To be able to do some statistics on the sector**, industries and countries (e.g. companies per sector/industry with a specified country and market cap) which allows users to better understand companies landscape of a sector and industry.\\n- **To get the financials of the companies that fall under that filter subset** (e.g. return on assets, quick ratio, debt to equity), and then compare these in order to get the best performers.\\n- Since one of the previous financials isn\u2019t enough to understand which company would be best to invest in, I wanted the filtered companies to have the capability to jump onto the comparison analysis menu so you could get all the capabilities of comparing historical price data, volume data, income/balance/cash flow, sentiment, or even technical indicators.\\n- If in the stocks context I had Tesla loaded, I wanted to go into this sia menu and get all the filtering parameters to be ready to filter for companies similar to Tesla in terms of (Sector, Industry, Country and Market Cap).\\n\\nBy Sunday night, I created the [pull request for this](https://github.com/GamestonkTerminal/GamestonkTerminal/pull/995). Due to the due diligent reviews performed by the main contributors of the project, the menu got a lot of improvements. Some of them were:\\n- Do not display companies that account for under a certain threshold (1%) and therefore sum them in an \u201cOthers\u201d slice.\\n- Allow to export all the data as a table.\\n- After filtering and getting financials, save the data for faster data retrieval if the same filters are used.\\n- Minor bug fixes.\\n\\nAfter a lot of comments and feedback from the main maintainers, and everyone being happy with this first iteration, the PR got merged. In fact, one of the main maintainers found a hidden gem while testing it.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e5897fb5-88f2-47c7-88a0-cacb97b15695)\\n\\nIn the meantime, I\u2019ve been in contact with Jeroen about adding some more capabilities to his FinanceDatabase package so that everyone could benefit from them. Some examples are:\\n- When an industry is selected, the corresponding sector should be automatically filled.\\n- If I select a country and a market cap for filtering, my sector choices should be bounded by what exists within those.\\n- I should be able to query about companies landscape in terms of a country. E.g. I want to understand what countries have the most large cap companies within the Financial Services sector.\\n\\nThis would not only make the FinanceDatabase a more powerful Package, which would in turn benefit Gamestonk Terminal sia menu, and ultimately our thousands of users!\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/1d0b37e4-6283-4d9e-87cf-a9c547434278)\\n\\nThis is an example of how the Sector and Industry Analysis menu looks (as a bonus I show how you can go into the Comparison Analysis menu):\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/f3fac679-0f9f-45fe-9f77-c97b7351e05e)\\n\\nNext time you know, it all starts with an e-mail. At Gamestonk Terminal we are on a role to have the best investment research terminal, and hope this story reflects it.\\n\\nTry it now, it\u2019s free. \u2764\ufe0f"},{"id":"handing-your-twitter-account-to-your-most-avid-community-member","metadata":{"permalink":"/blog/handing-your-twitter-account-to-your-most-avid-community-member","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-11-17-handing-your-twitter-account-to-your-most-avid-community-member.md","source":"@site/blog/2021-11-17-handing-your-twitter-account-to-your-most-avid-community-member.md","title":"Handing your twitter account to your most avid community member","description":"Handing over the Twitter account of Gamestonk Terminal to an active community member and the impact it had on the project\'s growth and engagement.","date":"2021-11-17T00:00:00.000Z","formattedDate":"November 17, 2021","tags":[{"label":"Community Building","permalink":"/blog/tags/community-building"},{"label":"Twitter","permalink":"/blog/tags/twitter"},{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal"}],"readingTime":4.305,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"handing-your-twitter-account-to-your-most-avid-community-member","title":"Handing your twitter account to your most avid community member","date":"2021-11-17T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280497451-edb5650f-8c33-4f81-8df5-eb4ee4d48166.png","tags":["Community Building","Twitter","Open Source","Gamestonk Terminal"],"description":"Handing over the Twitter account of Gamestonk Terminal to an active community member and the impact it had on the project\'s growth and engagement."},"prevItem":{"title":"Sector and Industry Analysis \u2014 Gamestonk Terminal","permalink":"/blog/sector-and-industry-analysis-gamestonk-terminal"},"nextItem":{"title":"The Start of my Machine Learning journey","permalink":"/blog/the-start-of-my-machine-learning-journey"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nHanding over the Twitter account of Gamestonk Terminal to an active community member and the impact it had on the project\'s growth and engagement.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nWhen I started [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal) I had no idea of the reach and impact it would have. From getting **over 3.5k stars on GitHub on the first single day alone**, to trending [on Reddit](https://www.reddit.com/r/algotrading/comments/lrndzi/cant_afford_the_bloomberg_terminal_no_worries_i/) and receiving overwhelming feedback, to receiving a message from an ex-colleague based in Switzerland about my name being [top 1 on Hackernews](https://news.ycombinator.com/item?id=26258773). As if this wasn\u2019t enough, a couple of days later the project got featured by [VICE Magazine](https://www.vice.com/en/article/qjp9vp/gamestonk-terminal-is-a-diy-meme-stock-version-of-bloomberg-terminal) and [Daily Fintech](https://dailyfintech.com/2021/02/25/never-underestimate-bloomberg-but-here-are-5-reasons-why-the-gamestonk-terminal-is-a-contender/).\\n\\nAs a result, my social life was impacted and had little time to even cuddle my puppy, due to the amount of feature requests, issues\u2026 the usual somehow ungrateful life of an open-source maintainer\u2026 I\u2019m not complaining though, as I live for this.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/4cede88f-3d77-4457-ad21-ea68a40b3b20)\\n\\nMoving forward a couple of weeks, it became clear to myself that I was building a strong community around what can/will/should be a leading product in the emerging fintech industry and Internet 3.0. Therefore, I knew that github issues and discussions wouldn\u2019t be enough to interact with all members of the community, so Discord turned out to be the best option going forward (let\u2019s be honest: mostly because of the convenience that Discord offers to share memes, feel free to check my creations on [our Discord](https://discord.gg/2KnVnkDTxM), you can thank me later).\\n\\nMy next rookie mistake was thinking I could use Discord announcements and @ everyone, as a means for updating the community on new features. Being the #1 investment research free and open-source project on github gets you several PRs a day being merged, so in all the fairness the announcements were recurrent with constant several new features. You can check my [one hour live programming stream](https://www.youtube.com/watch?v=9BMI9cleTTg) of adding a feature to the terminal.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/6ec95ad8-3fc8-4c16-9fd3-ca07e305270d)\\n\\nThis is when I realized that Discord wasn\u2019t the best place for this type of communication. I needed a platform where I could share these features ad-hoc and that only alerted users who wanted to be up-to-date with our latest features. And this is when I created our [Twitter account](https://twitter.com/gamestonkt), @gamestonkt.\\n\\nReviewing the history of our Twitter feed, you can see that this is exclusively what our handle was used for. It just shared new features every day. It felt like I was always playing catchup to the growing number of features piling up in the queue waiting to be announced on Twitter. With the project already having **over 500 features** in less 1 year, this inevitable outcome would be a surprise to no one. (**yup, I repeat, over 500**).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/1259b899-af0d-4b21-af6e-755408668956)\\n\\nHowever, I felt like **it missed personality**... With time being a limiting factor \u2014 time was more efficiently used improving the terminal \u2014 the public facing demonstrations were a lower priority. When you believe this much in a product, the product ends up speaking for itself.\\n\\n> _\u201cIf you build it, they will come\u201d \u2014 Field of Dreams_\\n\\n
    \\n\\nIt then occurred to me, why am I handling our Twitter? Why not leave this up to one of our most avid and vocal users that has been with project since beginning?\\n\\nAs Jim from \u201cThe Office\u201d would do, let\u2019s do a PROS & CONS table.\\n\\n### Pros\\n\\n- The user represents the community that the twitter content is targeted at.\\n- The user is an active daily user and will help to demonstrate features in the terminal.\\n- The user is keen on learning the ins and outs of the product.\\n- This user is not only a user anymore but a friend given his interaction with the maintainers.\\n- Lastly, I get to spend time doing what I enjoy: coding and meme content on our Discord.\\n\\n### Cons\\n\\n- The user finds out my mother\u2019s maiden name and the name of my first pet.\\n\\nThis is really a no brainer the more you think about it. I think it depends a lot on the type of people you have in your community and how confident you are on this individual .\\n\\nWe were lucky, because we had the **perfect fit**: an active Discord user **@Danglewood**, who had built an engaged audience, generating over 130K+ in Reddit karma over Q2 2021. It was clear that **@Danglewood** was having an impact on driving traffic and user engagement by posting data and his personal research with screenshots of Gamestonk Terminal.\\n\\nIn the future, **our report feature will allow easy sharing of this information**, I already can\u2019t wait for this. Through a combination of humour and truths, he was engaging the audience\u2019s curiosity by providing them with ways to filter out the ever-present noise within stock market information.\\n\\nIt made sense to bring this approach to [our Twitter](https://twitter.com/gamestonkt) feed which has since transformed and now offers insights, educational nuggets, and data as well as presenting new features. The end result speaks for itself!\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/edb5650f-8c33-4f81-8df5-eb4ee4d48166)\\n\\nOn your end, what is your opinion? And why do you 100% agree that this was the best decision?"},{"id":"the-start-of-my-machine-learning-journey","metadata":{"permalink":"/blog/the-start-of-my-machine-learning-journey","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-11-07-the-start-of-my-machine-learning-journey.md","source":"@site/blog/2021-11-07-the-start-of-my-machine-learning-journey.md","title":"The Start of my Machine Learning journey","description":"The start of my journey into the world of Machine Learning, from learning Python to understanding the underlying mathematics of ML algorithms.","date":"2021-11-07T00:00:00.000Z","formattedDate":"November 7, 2021","tags":[{"label":"Machine Learning","permalink":"/blog/tags/machine-learning"},{"label":"Python","permalink":"/blog/tags/python"},{"label":"Data Science","permalink":"/blog/tags/data-science"},{"label":"Education","permalink":"/blog/tags/education"},{"label":"Self-Learning","permalink":"/blog/tags/self-learning"}],"readingTime":4.62,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"the-start-of-my-machine-learning-journey","title":"The Start of my Machine Learning journey","date":"2021-11-07T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280497284-2322ff06-a803-458c-9402-6c8ed5cdde27.png","tags":["Machine Learning","Python","Data Science","Education","Self-Learning"],"description":"The start of my journey into the world of Machine Learning, from learning Python to understanding the underlying mathematics of ML algorithms."},"prevItem":{"title":"Handing your twitter account to your most avid community member","permalink":"/blog/handing-your-twitter-account-to-your-most-avid-community-member"},"nextItem":{"title":"An unusual journey learning about NNs for a PhD thesis","permalink":"/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesis"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThe start of my journey into the world of Machine Learning, from learning Python to understanding the underlying mathematics of ML algorithms.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nDuring my studies at [Imperial College London](https://www.imperial.ac.uk/) - 3ish years ago - I was introduced to the topic of Machine Learning, an area that I had always been interested about.\\n\\nAt that time, not only I didn\'t know python, as `from sklearn.decomposition import PCA` wasn\u2019t allowed. Therefore, we had to write the PCA (and other) algorithms in Matlab from scratch, which was great because it exposed us to the maths behind each algorithm.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/2e527f60-8df6-47e3-bc54-bd10327e8df9)\\n\\nThe gif above is from my graduation at Royal Albert Hall with a MSc. in Control Systems with Distinction.\\n\\nAfter concluding my thesis (and paper): \\"[Energy savings from an Ecological Cooperative Adaptive Cruise Control: a Battery Electric Vehicle platoon investigation](https://ieeexplore.ieee.org/abstract/document/8796226)\\", which was presented at the 2019 European Control Conference in Napoli, I had finally time to focus on Machine Learning topics during my spare time through late hours and into weekends.\\n\\nI started by doing the famous MOOC **\u201cMachine Learning - Andrew Ng\u201d**. Saying that the course was good is an understatement. I ended up spending a long time on the course as I was taking notes and revising daily; I was still behaving like a university student even without the exam at the end! Not only the theory is really detailed, but the coursework in Matlab allowed me to understand what\u2019s going on under the hood. Given that I was already a heavy Matlab user, due to its usage throughout my entire academic journey, I could focus on the ML section.\\n\\nAfter this course, I knew that I had learnt a lot, but I also knew that if I wanted to use ML for real-applications, I\u2019d have to learn Python. Given that I knew Matlab, I choose to start reading a python book that had Data Science application in mind. Hence, I started reading **\u201cPython Data Science Handbook\u201d**. This, along with several hours of practicing on available datasets, has taught me pretty much all I know about Numpy, Pandas and Matplotlib. Although this book also contains a last chapter with ML algorithms, these are rather brief.\\n\\n> _In my previous job at Nurvv, where I worked as Sensor Fusion Engineer, I developed a python analysis tool that parsed all the raw data from a running session and conveyed that information into meaningful plots. This allowed us to analyse whether a run was successful from the Firmware side of things, and this was critical for our development. This tool was created mainly from the knowledged gathered from the book mentioned above._\\n\\n
    \\n\\nFollowing this, I was rather confident with my Python skills. Therefore, I wanted to crack-on learning how to use ML algorithms with Python through the beauty of imports. It comes without saying that I had to start from the best-seller **\u201cHands-on Machine Learning with Scikit-Learn, Keras and TensorFlow\u201d**. This book was what I was expecting and more. From time to time, when I\u2019m working on personal projects, I still flick through it. This book also allowed me to develop many more personal projects (most of them public in [my GitHub](https://github.com/DidierRLopes), as I\u2019m a big Open-Source fan \u2014 you should know that as I made [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal) repository public).\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/bc7121c1-9c30-4766-8c83-e8b2ff82b4f9)\\n\\nThe project that has been my biggest challenge was working with a friend on his PhD thesis entitled _\u201cModelling and Forecasting of Time-Series: A data science approach that compares classic methodologies with deep learning methodologies\u201d_. Not only interpreting and discussing results but writing the code behind it. S/O to the resources: **\u201cForecasting: Principles and Practice\u201d** and **\u201chttps://machinelearningmastery.com\u201d**. Without these, this work would have been much harder.\\n\\nThroughout my short journey, I followed many people related with DS. People that I thought that in some shape or form added value through their posts. One of these, was Andriy Burkov. I remember when he started talking about creating the **\u201cThe Hundred-Page Machine Learning Book\u201d** and specifically, I remember his Linkedin\'s poll to select the colour of one of the bubbles for his books\' cover. I voted purple; the result was yellow. So, I took the freedom to fix the cover of his book, as you can see below.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/2322ff06-a803-458c-9402-6c8ed5cdde27)\\n\\nMy gecko Reidid on \u201cThe Hundred-Page Machine Learning Book\u201d\u200b, in order to keep industry standards of ML books with reptiles.\\n\\nI really enjoyed his book since it can explain everything, while keeping it simple and short. As I learned at University, _Keep It Simple, Stupid_. Also, his book is distributed in a \u201cread first, buy later\u201d principle. This meant that I was able to flick through the content of the book before buying it. Personally, I think this should be adopted more often, at least for technical books.\\n\\nFinally, last summer, while on holiday in Portugal, I read **\u201cApproaching (almost) any machine learning\u201d**, which I found to be great for people that have read about the theory but were wondering where/how to apply it.\\n\\nThe next ML books in my list are:\\n- **Deep Learning** \u2014 Aaron Courville, Ian Goodfellow, and Yoshua Bengio\\n- **The Elements of Statistical Learning** \u2014 Jerome H. Friedman, Robert Tibshirani e Trevor Hastie\\n- **Pattern Recognition and Machine Learning** \u2014 Christopher Bishop\\n- **Understanding Machine Learning: From Theory to Algorithms** \u2014 Shai Ben-David and Shai Shalev-Shwartz\\n\\nLet me know if you think these are good books, or if there are others that you\u2019d recommend."},{"id":"an-unusual-journey-learning-about-nns-for-a-phd-thesis","metadata":{"permalink":"/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesis","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-10-22-an-unusual-journey-learning-about-nns-for-a-phd-thesis.md","source":"@site/blog/2021-10-22-an-unusual-journey-learning-about-nns-for-a-phd-thesis.md","title":"An unusual journey learning about NNs for a PhD thesis","description":"An unusual journey of learning about Neural Networks for a PhD thesis. This blog post details the author\'s experience of assisting in the programming aspect of a PhD thesis, focusing on the study of various models and their forecasting performance.","date":"2021-10-22T00:00:00.000Z","formattedDate":"October 22, 2021","tags":[{"label":"PhD Thesis","permalink":"/blog/tags/ph-d-thesis"},{"label":"Neural Networks","permalink":"/blog/tags/neural-networks"},{"label":"Python","permalink":"/blog/tags/python"},{"label":"Time Series Forecasting","permalink":"/blog/tags/time-series-forecasting"}],"readingTime":3.625,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"an-unusual-journey-learning-about-nns-for-a-phd-thesis","title":"An unusual journey learning about NNs for a PhD thesis","date":"2021-10-22T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280497057-46ba8ff7-2f83-4fc4-8fed-350fc18246da.png","tags":["PhD Thesis","Neural Networks","Python","Time Series Forecasting"]},"prevItem":{"title":"The Start of my Machine Learning journey","permalink":"/blog/the-start-of-my-machine-learning-journey"},"nextItem":{"title":"How I created a bot in python to participate in NFT giveaways","permalink":"/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveaways"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nAn unusual journey of learning about Neural Networks for a PhD thesis. This blog post details the author\'s experience of assisting in the programming aspect of a PhD thesis, focusing on the study of various models and their forecasting performance.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/UnivariateTimeSeriesForecast).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nOn 14th February of 2019, my previous Maths and Statistics teacher \u2014 [Filipe](https://www.linkedin.com/in/filipe-r-ramos-a66242143/) - sent me a messaged because of a Linkedin post I shared about work I was doing in python.\\n\\nIt turns out that Filipe was looking for someone to help him with his PhD thesis, in specific, with the programming side of it. The challenge was to study diverse models (from classical to neural networks) and assess their forecasting performance. Since time series prediction was always a topic that I found fascinating and hadn\u2019t had time to study, I thought this would be the perfect timing to do so.\\n\\nSo from February 2019 onwards, this exciting journey started. I was working full-time so in order to be able to take part in this, I was only sleeping 4/5h a day. I started reading a lot of books and practicing my python coding skills in order to be more helpful. Then around June, we started working together on the code. We had around 2\u20133h discussions a couple times a week where we would discuss the point of the situation code-wise and where we wanted to be, we kept in touch about this every day.\\n\\nFrom the repo, which is open source [here](https://github.com/DidierRLopes/UnivariateTimeSeriesForecast), you can see that we explored: Exploratory Data Analysis; ARIMA and SARIMA; Exponential Smoothing; Deep Neural Network. The final part of this work consisted in an innovative approach to tackle an univariate time series, which you can find [here](https://github.com/DidierRLopes/UnivariateTimeSeriesForecast/blob/master/DNN_ourApproach.ipynb). On top of that, a library of cross-validation for Neural Networks was developed, which is now being used in real data science applications, see [here](https://github.com/DidierRLopes/timeseries-cv).\\n\\nThe work, which took around 1 year to complete, can be divided into 3 distinct phases:\\n\\n- The **coding** phase lasted around 3 months. I would write the code, test the code and then touch base with Filipe to ensure we were going in the right direction.\\n- The **tweaking and analysis phase** took around another 3 months. Here, Filipe took the code I had completed and analysed multiple time series with different trends and seasonalities; tweaked different models; trained and validated these; and started interpreting results. In this phase, me and Filipe would discuss the code from a pragmatic point of view, and improve it based on what Filipe wanted to see/analyse. This phase was so intense that Filipe flew out to London twice to meet me, almost over a period of 1 month.\\n- The **writing of the thesis phase** took an additional 6 months. Here Filipe basically translated the results and analysis seen on the notebook of the thesis, wrote a full theoretical background on the models used and interpreted the applicability of these.\\n\\nThe full work, _\u201cData Science in the Modeling and Forecasting of Financial timeseries: from Classic methodologies to Deep Learning\u201d_, can be found in [here](https://ciencia.iscte-iul.pt/publications/data-science-na-modelacao-e-previsao-de-series-economico-financeiras-das-metodologias-classicas-ao/82703) or stored in [here](https://repositorio.iscte-iul.pt/handle/10071/22964).\\n\\nDuring this time, Filipe was also working full-time as he was a teaching assistant in three different universities. In spite of the adversities, Filipe achieved an impressive approved with \u201c_unanimous distinction_\u201d (maximum classification) from ISCTE Business School, Lisbon, Portugal.\\n\\nMy character waiting for people to join my chatroom to discuss our poster.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/9222b0c5-4620-4eb1-88d3-a68a2eb71e1b)\\n\\nLast week, at XXV Congress of the Portuguese Statistical Society (SPE 2021), we presented:\\n\\n- A poster that you can find [here](https://www.researchgate.net/publication/355360806_Forecasting_models_for_time-series_a_comparative_study_between_classical_methodologies_and_Deep_Learning), titled: _\u201cForecasting models for time-series: a comparative study between classical methodologies and Deep Learning\u201d_\\n- A presentation that you can find [here](https://www.researchgate.net/publication/355360897_Explorando_o_poder_da_memoria_das_redes_neuronais_LSTM_na_modelacao_e_previsao_do_PSI_20), titled: _\u201cExplorando o poder da mem\xf3ria das redes neuronais LSTM na modela\xe7\xe3o e previs\xe3o do PSI 20\u201d_\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/c5921349-99d1-46bf-878f-0ecfaedf2b1e)\\n\\nThe poster above was presented at XXV Congress of the Portuguese Statistical Society (SPE 2021).\\n\\nI started this journey with my previous maths teacher and ended it with a close friend! Excited to see what other articles/publications we\u2019ll be working on together in the future.\\n\\nPS: The ARIMA/ETS/MLP/RNN/LSTM models learned from this work, consisted the basis of the prediction menu on [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal).\\n\\nAs always, feel free to provide feedback!"},{"id":"how-i-created-a-bot-in-python-to-participate-in-nft-giveaways","metadata":{"permalink":"/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveaways","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-09-30-how-i-created-a-bot-in-python-to-participate-in-nft-giveaways.md","source":"@site/blog/2021-09-30-how-i-created-a-bot-in-python-to-participate-in-nft-giveaways.md","title":"How I created a bot in python to participate in NFT giveaways","description":"In this blogpost, I share how I created a bot in Python to automate participation in NFT giveaways on Reddit. The bot simplifies tasks such as upvoting posts, commenting, and opening Opensea links to favourite artwork.","date":"2021-09-30T00:00:00.000Z","formattedDate":"September 30, 2021","tags":[{"label":"Python","permalink":"/blog/tags/python"},{"label":"Bot","permalink":"/blog/tags/bot"},{"label":"NFT","permalink":"/blog/tags/nft"},{"label":"Giveaways","permalink":"/blog/tags/giveaways"},{"label":"Reddit","permalink":"/blog/tags/reddit"},{"label":"Automation","permalink":"/blog/tags/automation"}],"readingTime":2.82,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-i-created-a-bot-in-python-to-participate-in-nft-giveaways","title":"How I created a bot in python to participate in NFT giveaways","date":"2021-09-30T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280496989-d965410f-6a4d-40b1-92d1-2e3fb4e24462.png","tags":["Python","Bot","NFT","Giveaways","Reddit","Automation"],"description":"In this blogpost, I share how I created a bot in Python to automate participation in NFT giveaways on Reddit. The bot simplifies tasks such as upvoting posts, commenting, and opening Opensea links to favourite artwork."},"prevItem":{"title":"An unusual journey learning about NNs for a PhD thesis","permalink":"/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesis"},"nextItem":{"title":"Gamestonk Terminal \u2014 Can\u2019t Stop, Won\u2019t Stop","permalink":"/blog/gamestonk-terminal-cant-stop-won-t-stop"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share how I created a bot in Python to automate participation in NFT giveaways on Reddit. The bot simplifies tasks such as upvoting posts, commenting, and opening Opensea links to favourite artwork.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GiveawayNFTbot).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nLately I\u2019ve been looking into NFTs. I\u2019ve observed that more and more people are trying to innovate and create their own pieces of art. Some of them are impressive, some of them aren\u2019t. But,\\n\\n> _Beauty is in the eye of the beholder \u2014 Margaret Wolfe Hungerford_\\n\\n
    \\n\\nHowever, in my humble opinion, what distinguishes some art from others, is most of the time not the art itself but the community around it. For example, when everyone starts talking about the \u2018new best thing\u2019 you feel more pressure to get involved.\\n\\nBecause of this dynamic, creators are investing in ways to increase their collectibles popularity by building their community. A great example is [ParallelNFT](https://parallel.life/) and the dystopic story that is being created around their cards \u2014 in their case, it\u2019s fairly easy to understand that once a big community is formed around such cards, video games, movies and even series are on the table. For the first time ever, we would go from selling collectibles to creating some form of entertainment. A whole new industry in the making.\\n\\nHowever, not every digital creator has the resources to create a full concept around their cards. Does this mean that they can\u2019t create a community around it? No. But they must find other ways. One of the most popular ways I\u2019ve seen is through giveaways. Similar to what small clothing brands do to increase their popularity. This is a great tactic in my opinion, since giveaway not only give you a bigger audience (people that participate and re-share content) but it makes the cards have multiple owners. This, as a result, makes the collection more attractive for NFT collectors.\\n\\n_When demand exceeds supply_, **prices tend to rise.**\\n\\nAnd these creators are using Reddit as the platform of their giveaways.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d965410f-6a4d-40b1-92d1-2e3fb4e24462)\\n\\nWhen scrolling through reddit you will notice that all these posts have certain things in common:\\n- They ask for an up-vote on the post\\n- A comment with your wallet address\\n- To favourite their artwork\\n- They may also ask to you to join their Discord\\n- For a follow on their Twitter or Instagram\\n- If you can retweet or share a story\\n\\nThese are things that take time, and a bot can perfectly do this. Therefore, I wrote a [giveaway NFT bot](https://github.com/DidierRLopes/GiveawayNFTbot) to simplify my work. Now I just sit down and read robot vacuum reviews while the bot: upvotes, comments and opens their Opensea link for me to favourite their artwork.\\n\\nI\u2019ve already won multiple NFTs with this, which is exciting\u2014 you never know where the next [CryptoPunks](https://twitter.com/cryptopunksbot) are at.\\n\\nThere\u2019s actually 1 collection that I particularly like and believe has a lot of potential, it\u2019s called [CryptoCartoonEaters](https://opensea.io/collection/crypto-cartooneaters) and due to the uniqueness of each collectible (only 100 made), I really think it has a great potential. I acquired my favourite cartoon as a kid: Goku Eating a Burger.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/c9c9f994-8fe8-401c-9b86-ad4f413da741)\\n\\nLet me know if you find this article interesting, and if you used the bot as well!"},{"id":"gamestonk-terminal-cant-stop-won-t-stop","metadata":{"permalink":"/blog/gamestonk-terminal-cant-stop-won-t-stop","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-09-16-gamestonk-terminal-cant-stop-won-t-stop.md","source":"@site/blog/2021-09-16-gamestonk-terminal-cant-stop-won-t-stop.md","title":"Gamestonk Terminal \u2014 Can\u2019t Stop, Won\u2019t Stop","description":"Gamestonk Terminal\'s latest updates including Docker integration, Jupyter Lab integration, a new Hugo website, and new features. A summary of the recent developments and future plans for the open-source financial tool.","date":"2021-09-16T00:00:00.000Z","formattedDate":"September 16, 2021","tags":[{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal"},{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Docker","permalink":"/blog/tags/docker"},{"label":"Jupyter Lab","permalink":"/blog/tags/jupyter-lab"},{"label":"Hugo Website","permalink":"/blog/tags/hugo-website"},{"label":"Python","permalink":"/blog/tags/python"},{"label":"Finance","permalink":"/blog/tags/finance"},{"label":"Trading","permalink":"/blog/tags/trading"}],"readingTime":3.175,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"gamestonk-terminal-cant-stop-won-t-stop","title":"Gamestonk Terminal \u2014 Can\u2019t Stop, Won\u2019t Stop","date":"2021-09-16T00:00:00.000Z","image":"https://github.com/Meg1211/my-website/assets/88618738/e6c5b30f-e2d9-4aed-bf13-e62f6021caf1","tags":["Gamestonk Terminal","Open Source","Docker","Jupyter Lab","Hugo Website","Python","Finance","Trading"],"description":"Gamestonk Terminal\'s latest updates including Docker integration, Jupyter Lab integration, a new Hugo website, and new features. A summary of the recent developments and future plans for the open-source financial tool."},"prevItem":{"title":"How I created a bot in python to participate in NFT giveaways","permalink":"/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveaways"},"nextItem":{"title":"Time-Series CrossValidation for NN","permalink":"/blog/time-series-crossvalidation-for-nn"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nGamestonk Terminal\'s latest updates including Docker integration, Jupyter Lab integration, a new Hugo website, and new features. A summary of the recent developments and future plans for the open-source financial tool.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nHey all,\\n\\nDo any of you know what **Docker, Jupyter Lab integration, features website and new features** have in common? Well this is what has been happening in [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal) world since last month, and **MORE**!\\n\\n### Docker\\n\\n- This has been a highly requested feature from our more experienced dev users, as it allows you to run our code in a container, pull the image and then get going with a smooth installation process. You will also be able to run Jupyer Lab from our Docker container.\\n\\n### Jupyter Lab Integration\\n\\n- Jupyter is on course to take over the world (see [here](https://netflixtechblog.com/notebook-innovation-591ee3221233)).\\n- Big investment banks like JP Morgan use Jupyter too, see [this](https://github.com/jpmorganchase/jupyterlab_templates).\\n- Professionals in the industry such as Data Scientists, Data Analysts and Machine Learning engineers are familiar with the combo dockers+notebooks. Therefore, it makes our terminal an attractive Open-Source project to devote time to.\\n- Academia students and universities will be able to use terminal data through a notebook for their projects and coursework. We\u2019re on track to be able to achieve something on this soon!\\n\\n### Hugo Website\\n\\n- Link [here](https://gamestonkterminal.github.io/GamestonkTerminal/).\\n- This will not only simplify a contributor\u2019s documentation process, but it will also let non-Gamestonkers now see the vast number of features we offer and yes, when you read \u201coffer\u201d this is actually an offer since the tool is **completely free** to use.\\n\\n### Main New features\\n\\n- New Dark Pool Shorts menu\\n- Refactored and improved Crypto menu!!!\\n- Dark Pool and Crypto report generation\\n- Excel Discounted Cash Flow created by a MBA student\\n- Big code refactoring to allow for contributors to easily get started with our codebase\\n- Contributing document (click here).\\n\\n### Tier 2 features\\n- [Sentiment Investor](https://sentimentinvestor.com/) data features implemented by the SI team themselves\\n- Feature/fraud indicators implemented by a MBA student\\n- Multiple plotting for economy data for more insight extraction\\n- Screener presets to not miss out on promising tickers\\n- Several new Technical Analysis indicators, e.g. Fibonacci, Fisher transform, Centre of gravity, zlma, Donchian channels\u2026\\n- Unusual options activity\\n- Hot penny stocks in discovery menu\\n- A contributor implementation of a realtime earnings expected move, from [The Geek of Wallstreet](https://thegeekofwallstreet.com/2021/08/03/realtime-earnings-data/)\\n- Several new YahooFinance commands to discover promising tickers\\n- Refactor Exploratory Data Analysis and Residual Analysis menus into a Quantitative Analysis one\\n\\nAs if this wasn\u2019t enough, we\u2019re also working towards a [Discord bot](https://github.com/GamestonkTerminal/DiscordBot) so you can make best use of our terminal when discussing trading strategies with your friends. This was an initiative from a contributor, which just goes to show how much **we rely on our community to drive our project**.\\n\\nIf you appreciate what we\u2019re doing and want a better free and Open-Source financial tool, you should definitely star the project on our github [here](https://github.com/GamestonkTerminal/GamestonkTerminal), join [our Discord channel](https://discord.gg/Up2QGbMKHY), and follow our [twitter account](https://twitter.com/gamestonkt?lang=en). Not necessarily in that order! :)\\n\\nHave you been following our project and want to join our growing community? Here are a few tips on how to get started:\\n- Join our Discord and tell us about your experience so far\\n- Let us know what else you would like to see in the terminal\\n- You can help to improve our crypto terminal, which is 99% taken care of from our contributors!\\n- Help us add any features! You don\u2019t know python? This may be your cue to learn with our team!\\n\\nMuch love!\\nGST Team & Community"},{"id":"time-series-crossvalidation-for-nn","metadata":{"permalink":"/blog/time-series-crossvalidation-for-nn","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-09-04-time-series-crossvalidation-for-nn.md","source":"@site/blog/2021-09-04-time-series-crossvalidation-for-nn.md","title":"Time-Series CrossValidation for NN","description":"This blog post discusses the creation of a Python module for splitting univariate time-series data using cross-validation techniques. The module is designed to prepare data for training, validation, and testing in a Deep Neural Network (DNN).","date":"2021-09-04T00:00:00.000Z","formattedDate":"September 4, 2021","tags":[{"label":"Python","permalink":"/blog/tags/python"},{"label":"Data Science","permalink":"/blog/tags/data-science"},{"label":"Deep Learning","permalink":"/blog/tags/deep-learning"},{"label":"Time Series","permalink":"/blog/tags/time-series"},{"label":"Cross Validation","permalink":"/blog/tags/cross-validation"},{"label":"Neural Networks","permalink":"/blog/tags/neural-networks"}],"readingTime":2.66,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"time-series-crossvalidation-for-nn","title":"Time-Series CrossValidation for NN","date":"2021-09-04T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280496785-19a411e1-bb34-44bf-a9b8-b2a3ba4dd5f6.png","tags":["Python","Data Science","Deep Learning","Time Series","Cross Validation","Neural Networks"],"description":"This blog post discusses the creation of a Python module for splitting univariate time-series data using cross-validation techniques. The module is designed to prepare data for training, validation, and testing in a Deep Neural Network (DNN)."},"prevItem":{"title":"Gamestonk Terminal \u2014 Can\u2019t Stop, Won\u2019t Stop","permalink":"/blog/gamestonk-terminal-cant-stop-won-t-stop"},"nextItem":{"title":"Ranking 99 Mind f*ck movies","permalink":"/blog/ranking-99-mind-f-ck-movies"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post discusses the creation of a Python module for splitting univariate time-series data using cross-validation techniques. The module is designed to prepare data for training, validation, and testing in a Deep Neural Network (DNN).\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/timeseries-cv).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n2 years ago, [Filipe Ramos](https://www.linkedin.com/in/ACoAACK9n24BrpxWf0HMa9bL7MSHleu2YVXpI5E) my previous maths and probability teacher, knowing that I had a special interest in Data Science, challenged me to help him in his PhD thesis \u201c_Data Science na Modela\xe7\xe3o e Previs\xe3o de S\xe9ries Econ\xf3mico-financeiras: das Metodologias Cl\xe1ssicas ao Deep Learning_\u201d.\\n\\nAlthough we have been discussing theory, analysis and results, my main contribution was to write the Python code behind the thesis.\\n\\nAs a result, I have written a python module that splits a given univariate time-series based on cross-validation techniques so that these can be fed to a Deep Neural Network (DNN) to extract training/validation/test errors.\\n\\nI know that there are examples of these online, but this was made from scratch so that we could personalise it according to the thesis\u2019 needs, and grasp better what was at stake when performing different cross-validation techniques.\\n\\n**The idea is given a training dataset, the package will split it into Train, Validation and Test sets, by means of either Forward Chaining, K-Fold or Group K-Fold.**\\n\\nAs parameters the user can not only select the number of inputs (`n_steps_input`) and outputs (`n_steps_forecast`), but also the number of samples (`n_steps_jump`) to jump in the data to train.\\n\\nThe best way to install the package is as follows: `pip install timeseries-cv` and then use it with `import tsxv`. See the module developed [here](https://pypi.org/project/timeseries-cv/).\\n\\nThis can be seen more intuitively using the jupyter notebook: \u201c_example.ipynb_\u201d Below you can find an example of the usage of each function for the following Time-Series:\\n\\n```python\\ntimeSeries = array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26])\\n```\\n\\n## Split Train\\n\\n```python\\nfrom tsxv.splitTrain import \\nsplit_train, \\nsplit_train_variableInput\\nX, y = split_train(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)\\nX, y = split_train_variableInput(timeSeries, minSamplesTrain=10, n_steps_forecast=3, n_steps_jump=3)\\n```\\n\\n
    \\n \\n \\n
    \\n\\n## Split Train Val\\n\\n```python\\nfrom tsxv.splitTrainVal import \\nsplit_train_val_forwardChaining, \\nsplit_train_val_kFold, \\nsplit_train_val_groupKFold\\nX, y, Xcv, ycv = split_train_val_forwardChaining(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)\\nX, y, Xcv, ycv = split_train_val_kFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)\\nX, y, Xcv, ycv = split_train_val_groupKFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)\\n```\\n\\n
    \\n \\n \\n
    \\n\\n
    \\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/24cfab68-28cb-4652-9196-fa53ac8d3ed4)\\n\\n## Split Train Val Test\\n\\n```python\\nfrom tsxv.splitTrainValTest import split_train_val_test_forwardChaining, \\nsplit_train_val_test_kFold,\\nsplit_train_val_test_groupKFold\\nX, y, Xcv, ycv, Xtest, ytest = split_train_val_test_forwardChaining(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)\\nX, y, Xcv, ycv, Xtest, ytest = split_train_val_test_kFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)\\nX, y, Xcv, ycv, Xtest, ytest = split_train_val_test_groupKFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)\\n```\\n\\n
    \\n \\n \\n
    \\n\\n
    \\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/19a411e1-bb34-44bf-a9b8-b2a3ba4dd5f6)\\n\\nThis module has not only been used for my friends\u2019 thesis but also for a Data Science company and [Gamestonk Terminal](/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal), that I know of :)\\n\\nYou can check the stats of the module [here](https://pypistats.org/packages/timeseries-cv)."},{"id":"ranking-99-mind-f-ck-movies","metadata":{"permalink":"/blog/ranking-99-mind-f-ck-movies","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-08-15-ranking-99-mind-f-ck-movies.md","source":"@site/blog/2021-08-15-ranking-99-mind-f-ck-movies.md","title":"Ranking 99 Mind f*ck movies","description":"Ranking and sorting a list of 99 mind-bending thriller movies using IMDbPy API in Python.","date":"2021-08-15T00:00:00.000Z","formattedDate":"August 15, 2021","tags":[{"label":"Movies","permalink":"/blog/tags/movies"},{"label":"Thrillers","permalink":"/blog/tags/thrillers"},{"label":"IMDbPy","permalink":"/blog/tags/im-db-py"},{"label":"Python","permalink":"/blog/tags/python"},{"label":"Sorting Algorithm","permalink":"/blog/tags/sorting-algorithm"}],"readingTime":2.135,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"ranking-99-mind-f-ck-movies","title":"Ranking 99 Mind f*ck movies","date":"2021-08-15T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280496558-cccaf22e-5d70-4a6d-bb80-d6b728b2d500.png","tags":["Movies","Thrillers","IMDbPy","Python","Sorting Algorithm"],"description":"Ranking and sorting a list of 99 mind-bending thriller movies using IMDbPy API in Python."},"prevItem":{"title":"Time-Series CrossValidation for NN","permalink":"/blog/time-series-crossvalidation-for-nn"},"nextItem":{"title":"K-means algorithm to visit a new city","permalink":"/blog/k-means-clustering-to-visit-a-new-city"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nRanking and sorting a list of 99 mind-bending thriller movies using IMDbPy API in Python.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/SortMoviesPerRating).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nDuring the Christmas holidays, me and my girlfriend, after watching The Office [US] twice in a row, and knowing most of Dwight\u2019s pranks off by heart, decided that it was time to find something worth watching.\\n\\nAlthough there\u2019s lots of tempting series out there, we didn\u2019t want to follow that path as we don\u2019t like the \u201caddiction\u201d effect that a series has. Also, we have the same taste regarding movies, where **we both enjoy complex thriller plots**, that leave your mind to resonate about them long after being done with it. Personally, I consider a movie great when it still crosses my mind when trying to sleep or the day after. So, thriller movies it was.\\n\\nAfter doing a little research work I came across this list of movies on Reddit: [99 mind f*ck movies](https://www.reddit.com/r/coolguides/comments/geipee/99_mindfck_movies/). I knew this list was good because most of my favourite movies were there, e.g. _The Prestige, Inception, The Usual Suspects, Primal Fear_, and _Ex Machina_.\\n\\nSo, the movie list was decided, and with that, also our new year\u2019s resolution.\\n\\nHowever, this list had 2 issues:\\n\\n**1. The list didn\u2019t have any particular order.** We would like to have the list ranked from best to worst, so that watching the best ones first will keep our motivation levels up to finish the list.\\n\\n**2. The movie title didn\u2019t have the released year.** Although we don\u2019t particularly mind old movies, sometimes we\u2019re just not in the mood to watch a B&W screen, or poor image resolution.\\n\\nTherefore, while Meg was busy, I was on a role to hack something that would both sort the list based on IMDB ranking, and add the release years to the titles.\\n\\nIn a couple of minutes, I was already playing with [IMDbPy API](https://imdbpy.github.io/). This allowed me to have the sorting algorithm running in the background pretty quick. Within the hour, we already had our sorted movie list. Which I have attached below for future reference.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/3c01a3fc-fa84-483a-98d2-7cb2edf69084)\\n\\nThe first movie of the list that none of us had already watched was the movie [Incendies](https://www.imdb.com/title/tt1255953/). After having watched this movie, I can already tell you that sorting out this list was worth it. Definitely mind blowing, and a great watch.\\n\\nAs usual, you can find the source code on my github: [SortMoviesPerRating](https://github.com/DidierRLopes/SortMoviesPerRating).\\n\\nHope you enjoyed this read!"},{"id":"k-means-clustering-to-visit-a-new-city","metadata":{"permalink":"/blog/k-means-clustering-to-visit-a-new-city","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-08-01-k-means-clustering-to-visit-a-new-city.md","source":"@site/blog/2021-08-01-k-means-clustering-to-visit-a-new-city.md","title":"K-means algorithm to visit a new city","description":"In this blogpost, I share how I used the K-means algorithm to plan a visit to London. The algorithm helps to decide which attractions to visit based on the number of days of the visit and the GPS coordinates of the attractions.","date":"2021-08-01T00:00:00.000Z","formattedDate":"August 1, 2021","tags":[{"label":"K-means","permalink":"/blog/tags/k-means"},{"label":"Algorithm","permalink":"/blog/tags/algorithm"},{"label":"Travel","permalink":"/blog/tags/travel"},{"label":"Efficiency","permalink":"/blog/tags/efficiency"},{"label":"London","permalink":"/blog/tags/london"},{"label":"GPS","permalink":"/blog/tags/gps"},{"label":"Clustering","permalink":"/blog/tags/clustering"}],"readingTime":2.69,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"k-means-clustering-to-visit-a-new-city","title":"K-means algorithm to visit a new city","date":"2021-08-01T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280496512-1085caea-fe72-439a-ba05-b0f6d5883719.png","tags":["K-means","Algorithm","Travel","Efficiency","London","GPS","Clustering"],"description":"In this blogpost, I share how I used the K-means algorithm to plan a visit to London. The algorithm helps to decide which attractions to visit based on the number of days of the visit and the GPS coordinates of the attractions."},"prevItem":{"title":"Ranking 99 Mind f*ck movies","permalink":"/blog/ranking-99-mind-f-ck-movies"},"nextItem":{"title":"Minion Recipes Program","permalink":"/blog/minion-recipes-program"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share how I used the K-means algorithm to plan a visit to London. The algorithm helps to decide which attractions to visit based on the number of days of the visit and the GPS coordinates of the attractions.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/LondonVisit).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nUsually when I book a weekend getaway, I spend quite some time doing 2 things:\\n\\n- Writing down the main attractions I want to see\\n- Depicting the travel path to maximise efficiency and see the most in less time (I\u2019m a bit of an efficiency freak myself, sorry)\\n\\n**This repository aims to decide which attractions to visit in London as a function of the number of days that you will be visiting, by applying K-means algorithm.**\\n\\nAs input you need to give the GPS coordinates of the main attractions you want to visit during your stay, and the number of days you are planning to visit. Notice that attractions that are not within the map screenshot boundaries will be discarded. See disclaimer below.\\n\\nThe K-means algorithm will interpret: List of GPS coordinates of the main attractions that you want to visit as 2D samples, after converting to UTM. Number of days of the visit as Number of clusters.\\n\\nOf course, this is rather unrealistic because of several reasons, such as:\\n\\n- Not taking into account if they want to just pass by the London Eye, or have a ride on it;\\n- Assumes that we are in a no man\u2019s land since it completely bypasses the existence of other buildings, roads, \u2026;\\n- Does not consider altitude, even though London is rather plane;\\n- Does not consider the number of attractions that one can possibly do per day;\\n- Plus, if there was to be an attraction really far from the centre, it may happen that the algorithm considers an entire day for it (this would depend upon kernel initialisation)\\n\\nNonetheless, I think this is a funny exercise, and if I were to select the areas to visit by myself, **it would most likely be a similar choice to the one taken by K-means**.\\n\\n**Disclaimer**: I did not know how to use Google API (neither wanted to pay for a key to be fair) hence I just took a screenshot of google maps and wrote down the coordinate of the lower left corner, so that I could use it as my origin. I also took the right top corner coordinate so that I could give the map with an \u201caccurate\u201d scaling.\\n\\n**Note**: GPS coordinates (latitude, longitude) have degrees has units, thus, explaining why the conversion to UTM coordinates, which uses meters.\\n\\nImmediately below you can see the result of a visit to London for 2, 3 and 4 days.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/1085caea-fe72-439a-ba05-b0f6d5883719)\\n\\n
    \\n \\n \\n
    \\n\\n
    \\n\\nThis project was done for fun. However, I believe that by creating a tuple per location with coordinates and estimate of time taken on each attraction, something nice could come out of this.\\n\\nHope you find this interesting. Let me know your thoughts."},{"id":"minion-recipes-program","metadata":{"permalink":"/blog/minion-recipes-program","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-07-23-minion-recipes-program.md","source":"@site/blog/2021-07-23-minion-recipes-program.md","title":"Minion Recipes Program","description":"In this blogpost, I share how I developed a program to help my mum manage her recipes. The program allows for adding, editing, and removing recipes, and even includes fun minion icons.","date":"2021-07-23T00:00:00.000Z","formattedDate":"July 23, 2021","tags":[{"label":"Python","permalink":"/blog/tags/python"},{"label":"Programming","permalink":"/blog/tags/programming"},{"label":"Recipes","permalink":"/blog/tags/recipes"},{"label":"Software Development","permalink":"/blog/tags/software-development"}],"readingTime":2.535,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"minion-recipes-program","title":"Minion Recipes Program","date":"2021-07-23T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280496377-5fb7c215-ec70-40dd-99dc-8ebc5b8b3eba.png","tags":["Python","Programming","Recipes","Software Development"],"description":"In this blogpost, I share how I developed a program to help my mum manage her recipes. The program allows for adding, editing, and removing recipes, and even includes fun minion icons."},"prevItem":{"title":"K-means algorithm to visit a new city","permalink":"/blog/k-means-clustering-to-visit-a-new-city"},"nextItem":{"title":"Household bills Program","permalink":"/blog/household-bills-program"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share how I developed a program to help my mum manage her recipes. The program allows for adding, editing, and removing recipes, and even includes fun minion icons.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/RecipesProgram).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nOnce I developed the [Housebills program](/blog/household-bills-program), I really enjoyed the feeling of being able to create usable software from scratch. Therefore, that year during Christmas, I wanted to challenge myself to see if I could find any interesting project to do in only 1 week.\\n\\nI started by nagging my dad and brother for them to tell me something that would be useful to them in their daily lives. Sadly, none of them had any idea. Then, I went to the kitchen to ask my mum the same. She was busy searching recipes for xmas on her messy notebook, so she also said no.\\n\\nI sat there next to her thinking about what I could do, while she kept on going back and forth in her notebook searching. I don\u2019t know if she had been reading about the binary search algorithm, or if she was just opening pages randomly. What I know is that 1 week later I did a program for her to keep her recipes. Safe to say that I saved Christmas, I guess.\\n\\nNote: Before the end of that year, I still upgraded the software for its version 2.0, which included more than 20 minion icons. To this day, I think she opens the program to see the minion icons more than the recipes themselves.\\n\\nBelow it displays the interfaces used, and these correspond to: Red-Visualize; Add; Blue-Add; Green-Edit; and Yellow-Remove recipes.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/5fb7c215-ec70-40dd-99dc-8ebc5b8b3eba)\\n\\nPS: Any resemblance with the Microsoft colour scheme is pure coincidence eheh.\\n\\nWhen adding a recipe, the following window will be displayed.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/07ff39c6-92b7-4da0-ae5d-6d7547ffb40f)\\n\\nThis allows you to add both a recipe, and a category (i.e. the \u201cTiramisu\u201d recipe would be within \u201cDesserts\u201d category).\\n\\nThe recipe content would include:\\n\\n- Name of the recipe\\n- Ingredients\\n- Preparation\\n- Comment\\n\\nWhen visualising a recipe, the following window will be displayed.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/2cc28d31-8c91-4dda-8e0c-b4073fdb2236)\\n\\nWhere the recipe dialog box would prompt the recipes based on the category chosen on its left. Then, after selecting a recipe, the ingredients, preparation and comment would be filled out.\\n\\nWhen editing a recipe, the following window will be displayed. This is similar to the visualisation window, with the difference that the text boxes are editable, and therefore, the recipe can be improved.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/10c8d22f-cf19-4eab-98b7-eb70eb700b07)\\n\\nNote: throughout the program there are Message Dialog boxes (as shown above) that tell the user whether the recipe has been successfully (or not) edited, added or removed.\\n\\nFinally, in order to remove a recipe, the following window would be displayed. Where you can either delete a single recipe, or the entire category.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b5b01518-00d2-4f5f-a4e1-6fa1381b5d47)\\n\\nThe recipe database is handled in the most robust way: **with plain text files**, obviously.\\n\\nAs always, hope you had a nice read."},{"id":"household-bills-program","metadata":{"permalink":"/blog/household-bills-program","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-07-17-household-bills-program.md","source":"@site/blog/2021-07-17-household-bills-program.md","title":"Household bills Program","description":"In this blogpost, I share my journey of creating a program to split household bills. This was my first side project where I used Java to create a GUI application.","date":"2021-07-17T00:00:00.000Z","formattedDate":"July 17, 2021","tags":[{"label":"Java","permalink":"/blog/tags/java"},{"label":"Programming","permalink":"/blog/tags/programming"},{"label":"GUI","permalink":"/blog/tags/gui"},{"label":"Software Development","permalink":"/blog/tags/software-development"},{"label":"Side Project","permalink":"/blog/tags/side-project"}],"readingTime":4.56,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"household-bills-program","title":"Household bills Program","date":"2021-07-17T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280496297-529b3c6f-e8d2-446f-8c22-2db738ce4769.png","tags":["Java","Programming","GUI","Software Development","Side Project"],"description":"In this blogpost, I share my journey of creating a program to split household bills. This was my first side project where I used Java to create a GUI application."},"prevItem":{"title":"Minion Recipes Program","permalink":"/blog/minion-recipes-program"},"nextItem":{"title":"My journey of memorising a deck of 52 shuffled cards","permalink":"/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cards"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share my journey of creating a program to split household bills. This was my first side project where I used Java to create a GUI application.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/HouseholdBills).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n**My first side project.**\\n\\nBefore University, I spent most of my spare time playing counter-strike (my steam account had **more than 1000 hours played**, that\u2019s more than 41 entire days playing in a row). I was a decent player I\u2019d say, you can see a compilation of \u201calmosts\u201d I\u2019ve done [here](https://www.youtube.com/watch?v=ocsJzNJJB50).\\n\\nHowever, I knew this wasn\u2019t the way. I realised that if I used the amount of time I was spending on online games for learning, I would have a much bigger satisfaction return. And, in the long term, my life would be better.\\n\\n**So I started studying hard.** I started valuing my time more, and declined most of the parties I was invited to because I was busy working late hours. Don\u2019t get me wrong, I\u2019m an easy person. I like to think I make friends easily. However, I just had different priorities, and partying just wasn\u2019t one of them. As my parents say: _\u201cEverything has its own time\u201d_.\\n\\nIn my 2nd year of University, I was getting really good grades, which means that I started having discussions with the other best students in the course. **That\u2019s how I met one of the smartest people I know to this day**. This guy was a proper hands-on person, he didn\u2019t study half the time I did, but he was always busy with something.\\n\\nHe had a band, developed his own personalised guitar pedals and amplifiers, and developed some apps for fun. He did this all while having excellent results at University, which is insane. That\u2019s when I realised that he was not only giving more priority to these hobbies in relation to partying or meeting people, **BUT also in relation to doing courseworks or studying for exams**. He\u2019d never fail a coursework/exam, but that further study could have bumped a grade from 17 to a 19 out of 20.\\n\\nOne day, we were meant to meet at his place to work on a coursework together, and he shown me an app that he had developed for him and his girlfriend. The app was a simple command line interface that was able to split their usual household bills (rent, water bill, food shop, cat food, etc). **I found that fascinating.**\\n\\nI told him I would create one for myself. Since I had read about how to use Java to make a pretty GUI, I thought why not give this a go (although I had no idea about OOP). In addition, I didn\u2019t want my program to look the same as his, so I thought my version could be as if it was an upgrade.\\n\\n...\\n\\nAfter that, I was on a mission. Little did I know that after this, I never really stopped having an interest in working on new side projects.\\n\\nThe planning steps were:\\n\\n**1. Decide main features.**\\n Add new household bills to split, Give money, and See bills.\\n\\n**2.Sketch what the GUI should look like**\\n\\n**3. Devise data structure associated with a new Household bill split.**\\n This was important for both coding, and also database management.\\n\\n**4. Work out the math associated with the splitting and giving**\\n\\nThe development process was to **\u201cdivide to conquer\u201d**. I split the tasks into several sub-tasks, and after every new little code change I was testing the code to make sure that nothing was broken. I re-iterate through design and code several times, until I was happy with my solution. Then I did some clean-up/improvements, such as: Adding pictures of the users, Login password, Frenchies as icons.\\n\\n**On a funny side note:** As I didn\u2019t know how to work with DBs at that time, I used text files to save and load all the information. Meaning that if my brother ever opened one of those text files (which weren\u2019t properly hidden\u2026), I could have passed from him owing me 100 euros to me owing him 10 million. The software was on his laptop, and I had an hardcoded password, so in theory he couldn\u2019t manually add any bill without my presence \u2014 I guess that was enough for him to think that the product was bullet-proof.\\n\\nSee images below of the program:\\n\\n
    \\n \\n \\n
    \\n\\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n\\nYou can find more information about this on my GitHub, [here](https://github.com/DidierRLopes/HouseholdBills).\\n\\n**The program ended up being used for more than 3 years.** Since I lived with other people other than my brother, I had to update the name/image on the program to represent that. Since I was new to coding, I didn\u2019t think about the future. Therefore, when that time came, I had to manually replace the names one by one in the code. I also had friends requesting to use the program, which lead to me adapting this to their names/figures.\\n\\nIt was a fun project and I definitely learned loads from it. The most important thing was that I was able to do whatever **I wanted software-wise as long as I dedicated enough time for it.**\\n\\nHope you had a fun read. Thanks!"},{"id":"my-journey-of-memorising-a-deck-of-52-shuffled-cards","metadata":{"permalink":"/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cards","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-06-26-my-journey-of-memorising-a-deck-of-52-shuffled-cards.md","source":"@site/blog/2021-06-26-my-journey-of-memorising-a-deck-of-52-shuffled-cards.md","title":"My journey of memorising a deck of 52 shuffled cards","description":"In this blogpost, I share my journey of memorising a deck of 52 shuffled cards using the PAO system and Memory Palace technique.","date":"2021-06-26T00:00:00.000Z","formattedDate":"June 26, 2021","tags":[{"label":"Memory Training","permalink":"/blog/tags/memory-training"},{"label":"PAO System","permalink":"/blog/tags/pao-system"},{"label":"Memory Palace","permalink":"/blog/tags/memory-palace"},{"label":"Card Memorisation","permalink":"/blog/tags/card-memorisation"}],"readingTime":9.175,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"my-journey-of-memorising-a-deck-of-52-shuffled-cards","title":"My journey of memorising a deck of 52 shuffled cards","date":"2021-06-26T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280495771-e58ecbfe-5718-4960-9911-fb7ff146efc4.png","tags":["Memory Training","PAO System","Memory Palace","Card Memorisation"],"description":"In this blogpost, I share my journey of memorising a deck of 52 shuffled cards using the PAO system and Memory Palace technique."},"prevItem":{"title":"Household bills Program","permalink":"/blog/household-bills-program"},"nextItem":{"title":"Customizable Meme Filter","permalink":"/blog/customizable-meme-filter"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share my journey of memorising a deck of 52 shuffled cards using the PAO system and Memory Palace technique.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nA few years back, I wanted to read a book about memory and found the best-selling book **\u201cMoonwalking with Einstein: The Art and Science of Remembering Everything\u201d** an ideal choice. I won\u2019t go into too much detail about the book which is a great read, if you don\u2019t trust me, trust Bill Gates, who called the book \u201c_absolutely phenomenal_\u201d. But let me give you a brief sequence of events from the author and journalist of the book, Joshua Foer:\\n\\n- It starts by observing the extraordinary accomplishments of mental athletes at a memory championship.\\n- Foer meets Tony Buzan, the trim 67-year-old English self-help guru who founded the [World Memory Championships](http://www.worldmemorychampionships.com/) in 1991 and who insists the brain is \u201clike a muscle\u201d: exercise it and it gets stronger.\\n- Foer learns the art of memory training.\\n- He practices his memory muscles for 1 year with help of a shambling 24-year-old from Oxford who becomes his mentor.\\n- He then finds himself in the finals of the US Memory Championships, alongside \u2018mental athletes\u2019 who could memorise the precise order of ten shuffled decks of cards in under an hour.\\n\\nIf you\u2019re interested, here\u2019s a [nice review](https://www.theguardian.com/science/2012/nov/21/moonwalking-einstein-joshua-foer-review) on the book.\\n\\n## My thoughts after reading book\\n\\nAfter finishing this book, more than anything I was curious. Unlike Joshua Foer, I didn\u2019t want to dedicate a full year to the cause, but I still wanted to give it a go so I could look back and think: \u201cHere\u2019s something pretty useless for the day-to-day. Yet, how cool is that I can memorise 52 random cards?\u201d.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/86f89618-060b-493f-bb66-9c9decbb54e5)\\n\\nFor people who know me, they know how much I hate to leave things unfinished. Whether that\u2019s a task that I set myself, or \u2018just\u2019 not leaving any pizza leftover. Therefore, I knew that if I really wanted to do this, I\u2019d have to set aside time for it, and so I did. The text under is my journey to memorise a shuffled deck of 52 cards.\\n\\n## Technique (PAO + Memory Palace)\\n\\nThe mnemonic \u201c**Memory Palace**\u201d technique that I was about to use was referred to on the aforementioned book. The ancient mnemonic technique was first practiced by Simonides of Ceos over 2,500 years ago. When googling the term, the definition is:\\n\\n_A Memory Palace is an imaginary location in your mind where you can store mnemonic images. The most common type of memory palace involves making a journey through a place you know well, like a building or town. Along that journey there are specific locations that you always visit in the same order._\\n\\nThe mnemonic images would be conceived using the famous PAO system. This term means:\\n\\n_The Person-Action-Object System (or \u201cPAO\u201d System) is a popular method for memorising long random numbers and decks of playing cards. \u2026 Some people assign arbitrary images to the numbers without any phonetic conversion. The digits are usually chunked in 2 or 3 digits and then placed into loci in a Memory Palace._\\n\\nThe idea is to take advantage of what we humans are best at, photographic memory.\\n\\n## The journey of memorising a shuffled deck of 52 cards\\n\\n### 1. Create your own personal PAO system.\\n\\nFor each card of the deck you have to have an associated _Person_, _Action_ and _Object_. It\u2019s useful to have the least possible rules, and have these intersecting simultaneous cards, so that there\u2019s less to memorise. Here\u2019s how I did it:\\n\\n- Define a **category** for each **suit** (e.g. Hearts represents friends)\\n- Define **something** for each **type**.\\n - From 1 to 10 I\u2019ve defined the starting letter of the person (e.g. Card 7 represents a person with name starting with letter K or C).\\n - For the court (Queen, Jack, King) I\u2019ve defined them as a powerful male/female. (e.g. King is the GOAT of the category).\\n\\nBelow you can see what the table looks like:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/eb7e2b47-e1df-419c-b08d-a5b3d1cc3614)\\n\\n**Note:** The Person is the main existing link, hence it needs to be something that you think of immediately when the category and the type of the card is known.\\n\\nI had to change my cards several times as some of the PAO\u2019s I had weren\u2019t memorable enough, either because the name was too common, or because I didn\u2019t relate that much to this person.\\n\\n### 2. Memorise each card with it\u2019s PAO system\\n\\nOnce the table above is filled in, the next step is to associate each card with it\u2019s **Person-Action-Object**. I find that as long as you can remember the person name of the card by doing the cross between category and type, the action-object comes easily.\\n\\nFor instance:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f5f1bc1d-58fd-4561-85db-06587cfc602f)\\n\\n**Jack \u2666: Einstein \u2014 Writing Equations \u2014 Blackboard**\\n\\n- When I see a **Diamond**, I know we are in the **Celebrities** category. Since this is a **Jack** I know it\u2019s an **important person**. I\u2019ve selected Musk to be my GOAT, so this has to be **Einstein**. The **writing equations** and **blackboard** comes trivially when thinking about Einstein.\\n\\n**8 \u2663: Floyd Mayweather \u2014 Skipping \u2014 Rope**\\n\\n- When a **Club** appears, I know we are in the **Athletes** category. Since this is an **8** I know the name starts with an **F or V**. This promptly reminds me of **Floyd**. The **skipping** and **rope** come immediately, due to my own personal experiences from improving my skipping skills and looking at videos of Mayweather. I find that the more the personal and creative you get with this, the easier it is to remember.\\n\\n**King \u2660: Goku \u2014 Powering up \u2014 Blonde Hair**\\n\\n- If I see a **Spade**, I know we are in the **Cartoon** category. Since this is a King I know that this character is the **GOAT**. Which immediately triggers my brain to Goku, since it used to be my favourite cartoon as a kid. Trivially, comes the powering up as action, and the blonde hair as object.\\n\\nIn order to remember all the cards, my trick was to have a deck of cards where on the back of each card I wrote its own PAO. So that if I didn\u2019t remember, instead of looking at the table, I could look at the back of the card. However, I find it important to sometimes not quit trying to remember immediately, as when you initially struggle to remember a card, when you eventually do, your brain retains this information so much better.\\n\\n**Note: At this step you may realise that you keep forgetting the same PAO card. I recommend you going back to step 1 and re-defining it.** Once I did this to the cards I kept forgetting, I was in a much better position.\\n\\n### 3. Create your own memory palace\\n\\nThis is the easiest step. I used the house I grew up in in Portugal, and decided to place 4 PAO instruments (i.e. 12 cards) per house division. Meaning that by the time I was in the first room upstairs, I was already 36 cards down the deck.\\n\\nSince I\u2019m not living in Portugal, let me show you what I mean by using a picture of my current living room in London. The spots I would select in here would have been: 1. Top of table with candles; 2. Top of side table; 3. Inside my gecko\u2019s vivarium; 4. As a program on the TV.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b00c7f9a-8d84-43a5-8397-c952bd5ae031)\\n\\n**Note: Make sure you always remember your memory palace spots, otherwise you may overlook them once looking for the next 3 set of cards.** The way I think about this is imagining that I lost my keys, and mentally going back in time to try to understand where they could be.\\n\\n### 4. Practice memorising each set of 3 cards PAO\\n\\nThis is where the creativity comes in. **When picking 3 cards from the deck, you picture the Person of the 1st card, the Action of the 2nd one, and the Object of the 3rd one.**\\n\\nLet\u2019s imagine we\u2019ve got the cards aforementioned.\\n\\n**- Card 1: Jack \u2666**\\n * Einstein \u2014 Writing Equations \u2014 Blackboard\\n\\n**- Card 2: 8 \u2663**\\n * Floyd Mayweather \u2014 Skipping \u2014 Rope\\n\\n**- Card 3: King \u2660**\\n * Goku \u2014 Powering up \u2014 Blonde Hair\\n\\nIn my brain, this would lead to\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/a585347e-f9ff-47ac-9324-54ceaf04390f)\\n\\n**Note: At this point you may realise that some combos of cards don\u2019t work well together. **If this is bad enough to not make you remember the 3 card PAO, I recommend updating your PAO system to something that\u2019s easier to generalise.\\n\\n### 5. Place each 3 cards PAO onto the memory palace\\n\\nFor instance, if I were to place the **Einstein Skipping with Blonde Hair** on the **3rd spot of my living room (my gecko\u2019s vivarium)**, in my head, I would picture something like this:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/a3730268-363c-4993-a258-d1ed6bd76000)\\n\\n**Note: I recommend trying to have the 3 card PAO interacting with the environment to improve memory.** In this case, I would have thought about the Blonde Skipping Einstein having to do skipping so fast that the gecko coudn\u2019t come close because the rope was going too fast. The more original/different, the more chances you have to remember this scenario.\\n\\n### 6. Re-iterate the memory palace with new 3 card PAO every time\\n\\nInstead of memorising a new 3 card PAO in a memory palace location and then moving on, I always go back to the start and think about all the previous 3 card PAO\u2019s from start. This will ensure you don\u2019t forget the oldest 3 card PAO. In fact, it will make it so that the oldest 3 card PAO are repeated more times than the newer ones, so it\u2019s all balanced out.\\n\\n### 7. Practice and Practice\\n\\nI found out that after memorising my PAO system (which took a long time) and the memory palace, it was fairly easy to memorise the shuffled 52 deck of cards. However, it was taking me way too long to memorise it AND say it out loud.\\n\\nOnce I started practicing more and more time started decreasing. The last time I tried, I managed to do it under 10 minutes, which is not great but I\u2019ll take it. As I mentioned, I just wanted to be able to do it, I didn\u2019t care much about the time.\\n\\nAlso, I still needed to think about the category + type of the card every-time, I think the time to memorise the deck of cards decreases exponentially once you actually associate each card image to it\u2019s PAO. But for that you need to practice more, which for me was getting boring.\\n\\n...\\n\\nThis is a different post than the ones I usually do, but I find it extremely interesting. Hence why I was keen on sharing it.\\n\\nLet me know if you\u2019ve heard about it, or want to give this a go.\\n\\nThanks for reading!"},{"id":"customizable-meme-filter","metadata":{"permalink":"/blog/customizable-meme-filter","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-06-12-customizable-meme-filter.md","source":"@site/blog/2021-06-12-customizable-meme-filter.md","title":"Customizable Meme Filter","description":"In this blogpost, I share my journey of creating a customizable meme filter using Python. This filter selects a random meme based on the number of people on the screen and assigns each person to a character in the meme.","date":"2021-06-12T00:00:00.000Z","formattedDate":"June 12, 2021","tags":[{"label":"Python","permalink":"/blog/tags/python"},{"label":"Meme Filter","permalink":"/blog/tags/meme-filter"},{"label":"Image Processing","permalink":"/blog/tags/image-processing"},{"label":"Face Recognition","permalink":"/blog/tags/face-recognition"}],"readingTime":2.54,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"customizable-meme-filter","title":"Customizable Meme Filter","date":"2021-06-12T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280495694-b123cf98-3411-4edc-9597-7b8c6d0c7e73.png","tags":["Python","Meme Filter","Image Processing","Face Recognition"],"description":"In this blogpost, I share my journey of creating a customizable meme filter using Python. This filter selects a random meme based on the number of people on the screen and assigns each person to a character in the meme."},"prevItem":{"title":"My journey of memorising a deck of 52 shuffled cards","permalink":"/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cards"},"nextItem":{"title":"NeistPoint Project","permalink":"/blog/neistpoint-project"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share my journey of creating a customizable meme filter using Python. This filter selects a random meme based on the number of people on the screen and assigns each person to a character in the meme.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/meme-filter).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nFor the people who know me, they know how much I enjoy memes. I\u2019ve got to admit, whenever I go to museums I have a lot of fun captioning artwork as memes. **As I like to say, I go for the art, and I stay for the memes.**\\n\\nOne day while commuting to work (you can still see the [first commit](https://github.com/DidierRLopes/meme-filter/commit/59be427571c96350d9652922b3ab2ba52ddf18af) which dates back to 10 February of 2020 and has only notes of the sketch of this idea in Portuguese) I thought:\\n\\n> \u201cIt would be funny if there was a snapchat kind of filter where given the number of people on the screen, a random meme was selected and each person would be one of its characters\u201d.\\n\\n
    \\n\\nSince I was still improving my Python skills, I thought why not do it in Python. After 1 month, I already had the working code, however, since I was switching jobs at the time my commute time reduced drastically and so did my time to work on this. It took around 1 more month to finish the cleaning up of the script (324 lines) to be more readable, and at the same time Covid happened. **The latter explains why my hair is blonde on the demo below** :)\\n\\nUsage:\\n\\n```console\\n./didifilter.py \u2014 location=memes \u2014 caption=\u2019Which meme am I?\u2019 \u2014 initial=30 \u2014 final=50 -b \u2014 max=3\\n```\\n\\n![hair_1](https://github.com/DidierRLopes/my-website/assets/25267873/100b62e1-9c40-4532-af0d-bdfc7ada697e)\\n\\n**To sum up:** This program is meant to be an advanced version of the known snapchat filter where there are random images spinning on top of people\u2019s heads. The main improvement is that you can not only select the images you want to choose from and the caption, but you can also play it with friends (recognizing more than 1 face at the same time).\\n\\nThe best part of the script is that it is meant to be easily customizable. Any person is able to create their own filter by creating a folder with the images they want within a folder with 1, 2, \u2026 based on the number of people they are meant to be used (apart from when backwardCompatible flag is enabled), and select/specify different types of flags/parameters, e.g.:\\n\\n```console\\n./didifilter.py \u2014 locationFolder=celebrities \u2014 caption=\u2019What celeb am I?\u2019 \u2014 max=2 -v \u2014 video=\u201dexampleVideo\u201d\\n```\\n\\n```console\\n./didifilter.py --locationFolder=pokemons --caption=\\"Who\'s this pokemon?\\" --width=250 --height=150 --max=1 -p\\n```\\n\\n**AND**, you can also quickly tweak the code to adapt it to do something else. Here\u2019s me **pranking** my girlfriend with a psyduck when the query was: \u201c_Who do I look like?_\u201d\\n\\n![hair_2](https://github.com/DidierRLopes/my-website/assets/25267873/826e8bdc-39b9-4db0-a4f4-f94178d4c746)\\n\\nHope you have a nice read and enjoy the filter. You can find the code [here](https://github.com/DidierRLopes/meme-filter).\\n\\nFeel free to provide feedback, as always!"},{"id":"neistpoint-project","metadata":{"permalink":"/blog/neistpoint-project","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-05-23-neistpoint-project.md","source":"@site/blog/2021-05-23-neistpoint-project.md","title":"NeistPoint Project","description":"In this blogpost, I share my journey of starting a sustainable clothing brand, managing the project, and developing a stock management tool in C++.","date":"2021-05-23T00:00:00.000Z","formattedDate":"May 23, 2021","tags":[{"label":"NeistPoint","permalink":"/blog/tags/neist-point"},{"label":"Clothing Brand","permalink":"/blog/tags/clothing-brand"},{"label":"Sustainability","permalink":"/blog/tags/sustainability"},{"label":"Project Management","permalink":"/blog/tags/project-management"},{"label":"C++","permalink":"/blog/tags/c"},{"label":"Stock Management","permalink":"/blog/tags/stock-management"}],"readingTime":3.025,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"neistpoint-project","title":"NeistPoint Project","date":"2021-05-23T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280495631-c2282aa1-115e-451f-b0c0-af1351936c37.png","tags":["NeistPoint","Clothing Brand","Sustainability","Project Management","C++","Stock Management"],"description":"In this blogpost, I share my journey of starting a sustainable clothing brand, managing the project, and developing a stock management tool in C++."},"prevItem":{"title":"Customizable Meme Filter","permalink":"/blog/customizable-meme-filter"},"nextItem":{"title":"Move over Bloomberg Terminal, here comes Gamestonk Terminal","permalink":"/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminal"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share my journey of starting a sustainable clothing brand, managing the project, and developing a stock management tool in C++.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/NeistpointCLI).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n## Context\\n\\nMore than 2 years ago, me and some friends started a clothing brand - **NeistPoint**. The logo and name is inspired by the Neist Point Lighthouse in the Isle of Skye. The motto was \u201c**For a greener future and a bluer ocean**\u201d, and the goal was to raise awareness to contribute for a sustainable environment.\\n\\nAt **Neist**, we tried to not be yet another clothing brand, but actually to fill the current gap in the retail industry by producing high-quality, eco-friendly clothes at affordable prices. And we achieved that. For instance, our t-shirts are made of 100% organic ring-spun combed cotton, and they last longer than my Lacoste t-shirts \u2014 seriously.\\n\\nThe problem is that to be profitable, you need to either increase the prices of your products, or decrease the quality, which were not things we wanted to do since they didn\u2019t represent the value of our brand. Due to that, and the fact that the team behind our brand no longer has time/resources, we\u2019re dropping our **last ever** season now.\\n\\nAnyway, no regrets from my side, it has been a great learning experience to understand what is involved around the creation of a brand, being a project manager internally, and doing something other than coding in my spare time. _Also, most importantly, ending up with a full new wardrobe of pieces that I love and that will probably last for my kids._\\n\\nSorry for this rambling, just wanted to share this context with everyone.\\n\\n## Implementation\\n\\nGiven that our team had no experience in clothing whatsoever, and based on our needs, our steps to make this a high-quality product were:\\n\\n1. Get the best (environmentaly friendly) clothing material\\n2. Send it to the best embroidery store in Portugal\\n3. Package it and forward it onto the customer\\n\\n
    \\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d614045b-39b0-408a-bbd8-11006c55efc5)\\n\\nThis process was **far from being optimised**. In fact, pretty much everything was manual. Apart from the creation of the clothes. Therefore, we needed a Software to keep track of the products at each of it\u2019s stages: _material to request, material shipping, material in stock, product to create, product creating, product in stock, and product sent_.\\n\\nSince I didn\u2019t find anything that I liked online, and I knew how to code, I thought the best solution was to develop something myself. This way it could be adapted to perfectly fit my own requirements (advantages of being your own product owner eheh). In addition, I wanted to improve my C++ skills, so I thought, **why not?**\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e0dd7c35-d7f4-4175-a80e-be881ff03141)\\n\\nFor 1 week or so, during my commute I worked on the [NeistPoint Stock Managemen](https://github.com/DidierRLopes/NeistpointCLI) tool. To be honest, I think it took longer to devise the architecture behind it than to actually write the code, as there were lots of things that I wanted to be taken into account. Also, the fact that the \u201cdatabase\u201d is a .csv file, was intentional. This way, we could share this file between the team members.\\n\\nHope someone finds this tool interesting, and gets inspired to develop their own software to meet their own project requirements. In the meantime, feel free to check us one last time on [our website](https://neistclothing.com/) or [instagram](https://www.instagram.com/neistclothing/). You may even spot me in some of the pictures!\\n\\nThe repository for the code can be found here: https://github.com/DidierRLopes/NeistpointCLI\\n\\nThanks for reading, as always!"},{"id":"move-over-bloomberg-terminal-here-comes-gamestonk-terminal","metadata":{"permalink":"/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminal","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-04-23-move-over-bloomberg-terminal-here-comes-gamestonk-terminal.md","source":"@site/blog/2021-04-23-move-over-bloomberg-terminal-here-comes-gamestonk-terminal.md","title":"Move over Bloomberg Terminal, here comes Gamestonk Terminal","description":"In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.","date":"2021-04-23T00:00:00.000Z","formattedDate":"April 23, 2021","tags":[{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal"},{"label":"Finance","permalink":"/blog/tags/finance"},{"label":"Stock Market","permalink":"/blog/tags/stock-market"},{"label":"Programming","permalink":"/blog/tags/programming"},{"label":"Open Source","permalink":"/blog/tags/open-source"}],"readingTime":2.375,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"move-over-bloomberg-terminal-here-comes-gamestonk-terminal","title":"Move over Bloomberg Terminal, here comes Gamestonk Terminal","date":"2021-04-23T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280495527-a0760645-db19-4d5e-bf8a-089865eb12b3.png","tags":["Gamestonk Terminal","Finance","Stock Market","Programming","Open Source"],"description":"In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more."},"prevItem":{"title":"NeistPoint Project","permalink":"/blog/neistpoint-project"},"nextItem":{"title":"Momentum Football Bets","permalink":"/blog/momentum-football-bets"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nHey all,\\n\\n2 months ago I made a terminal that I had been working on my spare time, to help me on my stock research, open-source. See [here](/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal).\\n\\n## The motto\\n\\nGamestonk Terminal provides a modern Python-based integrated environment for investment research, that allows the average joe retail trader to leverage state-of-the-art Data Science and Machine Learning technologies.\\n\\nAs a modern Python-based environment, Gamestonk Terminal opens access to numerous Python data libraries in Data Science (Pandas, Numpy, Scipy, Jupyter), Machine Learning (Pytorch, Tensorflow, Sklearn, Flair), and Data Acquisition (Beautiful Soup, and numerous third-party APIs).\\n\\nAs of today, and thanks to all your help and the traction created around it, the terminal is looking better than ever. Now it\u2019s no longer only me taking care of the repo, but also 2 other experienced devs, who are adding features on a daily basis and increasing the robustness of the codebase. Feel free to wander through the FEATURES page to see what you would get out of this tool!\\n\\nIf some of you thought it was amazing 2 months ago, you won\u2019t believe what it looks like now. You can check out the ROADMAP for all the features that have been added since, but let me list some of them:\\n\\n- **New** Screener for stocks, which allows users to save their presets and share them\\n- **New** Options menu\\n- **New** Comparison Analysis to compare several tickers in their historical price, sentiment, or fundamental analysis\\n- **New** Portfolio Optimisation that assigns stocks weights based on risk level specified by the user\\n- **New** Exploratory Data Analysis menu that looks at historical data from a statistic point of view\\n- **New** Residual Analysis after using a statistical model for prediction\\n- **New** menu to provide access to your portfolio (supports Robinhood, Ally invest, Alpaca, and Degiro)\\n- **New** Cryptocurrency, Forex, and FRED menus\\n- Prediction with backtesting\\n- Technical analysis that includes a score and a summary\\n- Due Diligence menu with data from Dark Pools, and also Failure to Deliver\\n- Sentiment analysis from news provided from collaboration with a company that provides this feature paid. Free for us!\\n\\nAs always feedback is appreciated, and contributions even more so!\\n\\nLet\u2019s try to reduce the gap between the amount of information that the Hedge Funds have access to in comparison with the usual retail trader.\\n\\nBloomberg Terminal, we\u2019re coming for you.\\n\\nFeel free to join our discord at https://discord.gg/Up2QGbMKHY."},{"id":"momentum-football-bets","metadata":{"permalink":"/blog/momentum-football-bets","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-04-07-momentum-football-bets.md","source":"@site/blog/2021-04-07-momentum-football-bets.md","title":"Momentum Football Bets","description":"In this blogpost, I share how I developed an automated task to estimate the momentum of football teams for betting purposes using Beautiful Soup and Python.","date":"2021-04-07T00:00:00.000Z","formattedDate":"April 7, 2021","tags":[{"label":"Football","permalink":"/blog/tags/football"},{"label":"Betting","permalink":"/blog/tags/betting"},{"label":"Momentum","permalink":"/blog/tags/momentum"},{"label":"Web Scraping","permalink":"/blog/tags/web-scraping"},{"label":"Beautiful Soup","permalink":"/blog/tags/beautiful-soup"},{"label":"Python","permalink":"/blog/tags/python"}],"readingTime":3.275,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"momentum-football-bets","title":"Momentum Football Bets","date":"2021-04-07T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280495392-fbf8e3ee-21a6-47c0-95f7-97b535a07dd0.png","tags":["Football","Betting","Momentum","Web Scraping","Beautiful Soup","Python"],"description":"In this blogpost, I share how I developed an automated task to estimate the momentum of football teams for betting purposes using Beautiful Soup and Python."},"prevItem":{"title":"Move over Bloomberg Terminal, here comes Gamestonk Terminal","permalink":"/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminal"},"nextItem":{"title":"Gamestonk Terminal - The next best thing after Bloomberg Terminal","permalink":"/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share how I developed an automated task to estimate the momentum of football teams for betting purposes using Beautiful Soup and Python.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/momentum-football-bets).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThis Easter, I spoke with my girlfriend\u2019s father and there were several football matches happening that weekend, he started talking about betting on some of those matches.\\n\\nHe carried on to explain me his betting routine, which consisted of:\\n\\n1. Checking the next fixtures for a specific competition: https://www.skysports.com/premier-league-fixtures\\n2. Checking the last results of each of the team and \u201cestimate\u201d their momentum (e.g. https://www.skysports.com/football/wolverhampton-wanderers-vs-liverpool/stats/429116)\\n\\n
    \\n\\nThen, iterate these 2 steps for all the fixtures happening, from Premier League, Championship, League One, and League Two.\\n\\nSince I recently learned how to use Beautiful Soup to scrap data from web pages (see [GamestonkTerminal](https://dro-lopes.medium.com/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal-a263c001a61f)), I thought that I could create an automated task that would do all of these steps with a simple double click executable. After checking that I could extract such data from SkySports, I let him know that by the next day I would have something working.\\n\\nAfter dinner, I started working on the project, and before I went to sleep I had the first prototype working, which you can see in [here](https://github.com/DidierRLopes/momentum-football-bets).\\n\\nOn top of \u201chis\u201d automated task, I created a \u201cmomentum score\u201d which tries to estimate the momentum score based on what my girlfriend\u2019s father told me that he does. He looks into the last games of the team and see if they have a positive momentum by looking to see if they come from a winning series.\\n\\nSo, I thought it would be good to attribute a weight to each of the last matches where the most recent match would have the biggest weight, and last one from the 6 provided from SkySports stats would have the lowest weight. Together with this weight, I thought we could use the sum of the weight to the score in case of a win, subtract in case of loss, and don\u2019t do anything in case of a draw.\\n\\nSo, in simple terms, if score is positive the team is likely to have been winning their last matches, if score is negative the team is likely to have loss their last matches.\\n\\nBut then, I thought:\\n\\n_\u201cOk, this is nice. But when you bet, you don\u2019t bet on a single team, but on the result between the 2 teams that are playing each other.\u201d_ I.e. if team A has an amazing momentum, and so has team B, the bet will \u2014 in theory \u2014 be risky.\\n\\nHence, the next step was to address this concern. This was done by checking the momentum score difference between the teams, the bigger the momentum score, the less risky \u2014 in theory \u2014 a bet would be. What we want to see is a team that has been doing amazing for the past 6 games, and one that has been performing consistently bad.\\n\\nLastly, I added a confidence filter so that the terminal would only output the games that shown at least a certain X confidence. And also, an argument that would select the number of days in the future that we could look for fixtures.\\n\\nAfter having this implemented, the day after was about polishing the code, adding some colouring and emojis, creating a repository for it, a README, discussing the binning of the momentum score and bet confidence terms, creating a logo for it, and creating an executable + adding the logo which my girlfriend did.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/4e16ec33-ae1a-4ade-88a0-c985fe8b8c12)\\n\\nAfter this, we were quite excited to backtest the app. We filtered the next features with a big confidence bet score (to have less risk), and put 20 pounds on 3 different accumulators. [And it\u2019s gone.](https://www.youtube.com/watch?v=-DT7bX-B1Mg)\\n\\nHope you had a good read. Feedback is always appreciated."},{"id":"gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal","metadata":{"permalink":"/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-03-14-gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal.md","source":"@site/blog/2021-03-14-gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal.md","title":"Gamestonk Terminal - The next best thing after Bloomberg Terminal","description":"In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.","date":"2021-03-14T00:00:00.000Z","formattedDate":"March 14, 2021","tags":[{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal"},{"label":"Finance","permalink":"/blog/tags/finance"},{"label":"Stock Market","permalink":"/blog/tags/stock-market"},{"label":"Programming","permalink":"/blog/tags/programming"},{"label":"Open Source","permalink":"/blog/tags/open-source"}],"readingTime":3.2,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal","title":"Gamestonk Terminal - The next best thing after Bloomberg Terminal","date":"2021-03-14T00:00:00.000Z","image":"https://github.com/DidierRLopes/my-website/assets/88618738/f9508a33-fcee-4056-a611-a4422890bf8b","tags":["Gamestonk Terminal","Finance","Stock Market","Programming","Open Source"],"description":"In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more."},"prevItem":{"title":"Momentum Football Bets","permalink":"/blog/momentum-football-bets"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nIf you like stocks and are careful with the way you spend your money, (me saying it seems counter-intuitive given that I bought GME at the peak, I know) you know how much time goes into buying shares of a stock.\\n\\nYou need to: Find stocks that are somehow undervalued; Research on the company, and its competitors; Check that the financials are healthy; Look into different technical indicators; Investigate SEC fillings and Insider activity; Look up for next earnings date and analysts estimates; Estimate market\u2019s sentiment through Reddit, Twitter, Stocktwits; Read news;. \u2026 the list goes on.\\n\\nIt\u2019s tedious and I don\u2019t have 24k for a Bloomberg terminal. Which led me to the idea during xmas break to spend the time creating my own terminal. I introduce you to \u201cGamestonk Terminal\u201d (probably should\u2019ve sent 1 tweet everyday to Elon Musk for copyrights permission eheh).\\n\\nAs someone mentioned, this is meant to be like a swiss army knife for finance.\\n\\nIt contains the following functionalities:\\n\\n- **Discover Stocks**: Some features are: Top gainers; Sectors performance; upcoming earnings releases; top high shorted interest stocks; top stocks with low float; top orders on fidelity; and some SPAC websites with news/calendars.\\n\\n- **Market Sentiment**: Main features are: Scrolling through Reddit main posts, and most tickers mentions; Extracting trending symbols on stocktwits, or even stocktwit sentiment based on bull/bear flags; Twitter in-depth sentiment prediction using AI; Google mentions over time.\\n\\n- **Research Web pages**: List of good pages to do research on a stock, e.g. macroaxis, zacks, macrotrends, ..\\n\\n- **Fundamental Analysis**: Read financials from a company from Market Watch, Yahoo Finance, Alpha Vantage, and Financial Modeling Prep API. Since I only rely on free data, I added the information from all of these, so that the user can get it from the source it trusts the most. Also exports management team behind stock, along with their pages on Google, to speed up research process.\\n\\n- **Technical Analysis**: The usual technical indicators: sma, rsi, macd, adx, bbands, and more.\\n\\n- **Due Diligence**: It has several features that I found to be really useful. Some of them are: Latest news of the company; Analyst prices and ratings; Price target from several analysts plot over time vs stock price; Insider activity, and these timestamps marked on the stock price historical data; Latest SEC fillings; Short interest over time; A check for financial warnings based on Sean Seah book.\\n\\n- **Prediction Techniques**: The one I had more fun with. It tries to predict the stock price, from simple models like sma and arima to complex neural network models, like LSTM. The additional capability here is that all of these are easy to configure. Either through command line arguments, or even in form of a configuration file to define your NN. It also allows backtesting.\\n\\n- **Reports**: Allows you to run several jobs functionalities and write daily notes on a stock, so that you can assess what you thought about the stock in the past, to perform better decisions.\\n\\n- **Comparison Analysis**: Allows to compare different stocks.\\n\\n- **On the ROADMAP**: Cryptocurrencies, Portfolio Analysis, Credit Analysis. Feel free to add the features you\u2019d like and we would happily work on it.\\n\\nThis project will always remain open-source, and the idea is that it can grow substantially over-time so that more and more people start taking advantage of it.\\n\\nFeel free to contribute towards the project.\\n\\nFeedback is extremely welcome!"}]}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.d62b68ca.js b/assets/js/b2f554cd.d62b68ca.js deleted file mode 100644 index adf7d10d90..0000000000 --- a/assets/js/b2f554cd.d62b68ca.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[11477],{30010:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"goodbye-openbb-sdk-hello-openbb-platform","metadata":{"permalink":"/blog/goodbye-openbb-sdk-hello-openbb-platform","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-11-29-goodbye-openbb-sdk-hello-openbb-platform.md","source":"@site/blog/2023-11-29-goodbye-openbb-sdk-hello-openbb-platform.md","title":"Goodbye OpenBB SDK. Hello OpenBB Platform","description":"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions.","date":"2023-11-29T00:00:00.000Z","formattedDate":"November 29, 2023","tags":[{"label":"openbb","permalink":"/blog/tags/openbb"},{"label":"platform","permalink":"/blog/tags/platform"},{"label":"sdk","permalink":"/blog/tags/sdk"},{"label":"core","permalink":"/blog/tags/core"},{"label":"extensions","permalink":"/blog/tags/extensions"}],"readingTime":4.08,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"goodbye-openbb-sdk-hello-openbb-platform","title":"Goodbye OpenBB SDK. Hello OpenBB Platform","date":"2023-11-29T00:00:00.000Z","image":"https://github.com/DidierRLopes/my-website/assets/25267873/628d34ee-a2a5-4be7-ae76-4b455bc2f1fd","tags":["openbb","platform","sdk","core","extensions"],"description":"Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions."},"nextItem":{"title":"OpenBB Bot - our new addition to the OpenBB open source family","permalink":"/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nToday, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions.\\n\\nThe open source code is available [here](https://github.com/OpenBB-finance/OpenBBTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nIn the ever-evolving landscape of financial data integration and standardization, OpenBB has been revolutionizing the way individuals and organizations handle data from multiple data providers by utilizing our open-source products.\\n\\nWe have been talking about the OpenBB Platform v4 over the past few months. This is such a milestone for our team and for the financial world that we are renaming the OpenBB SDK into the OpenBB Platform.\\n\\nThe OpenBB Platform consists of the OpenBB Core and OpenBB Extensions.\\n\\nLet\u2019s dive into each of these, individually.\\n\\n## OpenBB Core\\n\\nThe OpenBB Core empowers quants and finance developers to create powerful data solutions, offering unparalleled simplicity, flexibility, and scalability. It follows the principle that \\"less is more.\\"\\n\\nThe core will consist of two main components:\\n\\n1. **Data Standardization Infrastructure:** This ensures that regardless of the type of data processed by the core, users can expect consistent conventions and naming. This facilitates a seamless experience, even when the data comes from completely different data providers.\\n\\n2. **Data Source Integration:** Developers will be able to effortlessly connect and integrate various data sources, including databases, APIs, and cloud storage systems.\\n\\n a) **Official partner integrations** will be available by having access to official endpoints from data vendors. This ensures the integrity of the data and provides a reference for what data is available to the end user. Our affiliate program will detail where commercial agreements are in place with OpenBB.\\n\\n b) Additionally, **community provider integrations** will be available, allowing the community to contribute their own integrations for specific use cases or share them with others through the open-source codebase.\\n\\n## OpenBB Extensions\\n\\nOpenBB extensions enhance the capabilities of the OpenBB Core, allowing developers to create custom functionalities and customize the overall Platform according to their specific needs. It is important to note that these extensions can be used as a standalone or integrated with the rest of the openBB ecosystem.\\n\\nThese extensions can be classified into two categories:\\n\\n
      \\n
    • Official extensions developed and maintained by the OpenBB Team, such as the ML/AI Toolkit, Econometrics, and Reports;
    • \\n
    • Community extensions developed by the open-source community. These extensions focus on enabling intelligent data processing and custom workflows that assist users in their investing decision-making process.
    • \\n
    \\n\\n\\n## Key advantage of new platform V4\\n\\nBy combining the strengths of OpenBB Core and OpenBB Extensions, the OpenBB Platform offers unparalleled advantages for developers and organizations:\\n\\n
      \\n
    1. Enhanced Flexibility: The modular architecture of the Platform allows developers to choose and integrate only the components they need, avoiding unnecessary complexity.
    2. \\n\\n
    3. Scalability: The OpenBB Platform seamlessly scales with your data integration requirements, ensuring smooth performance even with large volumes of data.
    4. \\n\\n
    5. Extensibility: Developers can create their own extensions and contribute to the OpenBB ecosystem, fostering collaboration and innovation.
    6. \\n\\n
    7. Time and Cost Savings: With its intuitive interface and pre-built components, the OpenBB Platform accelerates development cycles, reducing time-to-market and costs associated with custom solutions.
    8. \\n
    \\n\\n
    \\n\\nThe reimagined OpenBB SDK into OpenBB Platform (OpenBB Core and OpenBB Extensions), revolutionizes the data integration landscape.\\n\\nBy leveraging the power of OpenBB Core for data integration and standardization, and harnessing the capabilities of OpenBB Extensions for customization and advanced functionality, developers can unlock new possibilities and build cutting-edge data solutions.\\n\\nWhether you are working with diverse data sources or performing complex data transformations, the OpenBB Platform empowers you to conquer any data challenge and propel your organization towards data-driven success.\\n\\nWe invite users and enthusiasts to explore the OpenBB Platform v4, now available for download and installation from the [OpenBB Hub](https://docs.openbb.co/platform/installation), [Github](https://github.com/OpenBB-finance/OpenBBTerminal/tree/develop/openbb_platform), and [PyPI](https://pypi.org/project/openbb/).\\n\\n## Inside OpenBB: A peek into our team emails\\n\\nIn order to adhere to one of OpenBB\'s core values - Transparency - we want you to understand the journey we have undergone and the reason we have dedicated the past 9 months to this endeavor.\\n\\nSo, for the first time, we\'re sharing a confidential email thread that circulated among our entire team. This thread provides insight into our thought process when it comes to handling large projects at OpenBB.\\n\\n

    \\n \\n

    \\n\\n

    \\n \\n

    \\n\\n

    \\n \\n

    \\n\\n

    \\n \\n

    \\n\\nOver the next few weeks we will keep iterating on our Platform, based on user feedback, so we can keep pushing for a platform that can be adopted by everyone - from professional investors, data scientists, quants, to students.\\n\\nIf you rely on financial data to do financial research or build apps, we want to hear from you!\\n\\nReach out with feedback to support@openbb.finance or join [our Discord](https://discord.com/invite/xPHTuHCmuV)."},{"id":"openbb-bot-our-new-addition-to-the-openbb-open-source-family","metadata":{"permalink":"/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-11-21-openbb-bot-our-new-addition-to-the-openbb-open-source-family.md","source":"@site/blog/2023-11-21-openbb-bot-our-new-addition-to-the-openbb-open-source-family.md","title":"OpenBB Bot - our new addition to the OpenBB open source family","description":"The OpenBB Bot architecture is now open source. Check out our Discord Bot architecture now on GitHub.","date":"2023-11-21T00:00:00.000Z","formattedDate":"November 21, 2023","tags":[{"label":"openbb","permalink":"/blog/tags/openbb"},{"label":"bot","permalink":"/blog/tags/bot"},{"label":"open source","permalink":"/blog/tags/open-source"},{"label":"discord","permalink":"/blog/tags/discord"},{"label":"monetization","permalink":"/blog/tags/monetization"}],"readingTime":4.385,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"openbb-bot-our-new-addition-to-the-openbb-open-source-family","title":"OpenBB Bot - our new addition to the OpenBB open source family","date":"2023-11-21T00:00:00.000Z","image":"https://github.com/DidierRLopes/my-website/assets/25267873/6cde7947-b57e-4863-879b-9032b280fbb9","tags":["openbb","bot","open source","discord","monetization"],"description":"The OpenBB Bot architecture is now open source. Check out our Discord Bot architecture now on GitHub."},"prevItem":{"title":"Goodbye OpenBB SDK. Hello OpenBB Platform","permalink":"/blog/goodbye-openbb-sdk-hello-openbb-platform"},"nextItem":{"title":"Revolutionizing AI at OpenBB with new leader, Michael Struwig","permalink":"/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThe OpenBB Bot is now open source. Check out our Discord Bot architecture now on GitHub.\\n\\nThe open source code is available [here](https://github.com/OpenBB-finance/openbb-bot).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n## What is the OpenBB Bot, and why did we build it?\\n\\nWhen the OpenBB Terminal first went viral, users were writing online that one of the things missing from our product was a chat feature like other investment platforms provide.\\n\\nHowever, we didn\u2019t understand why the chatting experience needed to be centralized in the application where users research their financial data. Plus, with the ever-growing userbase of apps like Discord, Telegram, Slack, and others, combined with their capabilities to build apps on top, we thought we could do more.\\n\\nWe believe in a future where you can query financial data right from where you are. Meaning you can chat with colleagues, from any of the apps you\u2019re already using.\\n\\nThis is when we partnered with OptionsFamBot (the biggest Discord financial bot that was present in 15k+ servers, reaching 1 M+ users) to build the OpenBB Bot.\\n\\nYou can read more about our launch in August 2022 [here](https://openbb.co/blog/openbb-bot-launch).\\n\\n## Failing to monetize. Failing to grow user base.\\n\\nTo provide OpenBB Bot users with access to 100+ financial commands (including expensive datasets such as the options and dark pool ones) we had to pay not just the data vendors but also for the display rights.\\n\\nThis was relatively expensive, but we considered it a marketing cost since we expected exponential user growth. We expected that since the Bot could be deployed in any server in a few seconds, more users would be exposed to the Bot, bringing the Bot to other servers, and so on...\\n\\n**However, that didn\u2019t happen.**\\n\\nIn September 2022, Discord changed its command syntax to force commands to start with \u201c/\u201d and the user drop was noticeable.\\n\\n

    \\n \\n

    \\n\\nIn the meantime, with the end of the Covid-19 Pandemic, people started leaving their houses more and spending less time with communities investing online. Other companies with financial bots were experiencing the same: investors spending less time talking about investing on apps like Discord.\\n\\nWe saw a trend that these same companies started increasing their prices to balance out the number of users.\\n\\nThis is when we went in the other direction: we upgraded our free tier package and decreased the price of our paid version. That announcement can be found [here](https://openbb.co/blog/openbb-bot-price-change).\\n\\n

    \\n \\n

    \\n\\nThis happened at the same time as we added more innovative features to the bot. Features that OpenBB brought to market, while other bots copied from us today.\\n\\nWe created a codebase that was robust and scalable, but still flexible so that it could be quickly tweaked and deployed on other chatting apps.\\n\\nA couple of days after the price reduction, we announced OpenBB Bot for Telegram (read more about this announcement [here](https://openbb.co/blog/openbb-bot-arrives-on-telegram)).\\n\\nWith the growth of Telegram users and crypto communities, we were well posed to capture that market.\\n\\nOr so we thought. But our growth never achieved the numbers we had initially estimated.\\n\\n

    \\n \\n

    \\n\\nOur conclusion is that the market for financial chatbots is much smaller than what we had originally forecasted. This also meant that our goal with the OpenBB Bot as a marketing tool wasn\u2019t returning the ROI that we were expecting.\\n\\nSo in May 2023 we went pretty much all-in on considering the OpenBB Bot as a marketing expense, and removed the individual paid tier. You can see that announcement [here](https://openbb.co/blog/openbb-bot-free-for-individuals).\\n\\n

    \\n \\n

    \\n\\nNote that we maintained the control of the Billboard message. This is a feature that allows us to add OpenBB events and announcements to the top of these commands, hence increasing awareness. See below how it looks,\\n\\n

    \\n \\n

    \\n\\nHowever, even with that change and [adding an AI feature](https://openbb.co/blog/openbb-midjourney-for-investing) to the OpenBB Bot, the user base never grew past what we had hoped.\\n\\nSo we decided to open source the architecture behind the OpenBB Bot.\\n\\n## Decision to open source\\n\\nWhen talking with Roberto Talamas (check out his [OpenBB champion story](https://openbb.co/blog/openbb-champions-roberto-talamas)), he mentioned that he was building his own financial chatbot for his fund from scratch.\\n\\nThat was the trigger we needed to open source our architecture, so the \u201cRobertos\u201d of the world wouldn\u2019t have to start building their chatbot from scratch, but could piggyback on our architecture, which just works (it has never been down since launch and processed over 2.75 M Discord requests).\\n\\nSince we failed to monetize the Bot, and our adoption trajectory never grew past our expectations, open-sourcing the architecture behind the OpenBB Bot made a ton of sense.\\n\\nThis architecture utilizes data from the OpenBB platform (check out last week\u2019s [beta announcement](https://openbb.co/blog/celebrating-the-openbb-platform-v4-beta)) which means that developers can simultaneously get familiar with our platform while seeing how easy it is to pull financial data from OpenBB - effectively growing OpenBB\u2019s ecosystem.\\n\\n

    \\n \\n

    \\n\\nI\u2019m looking forward to seeing what products are built around the OpenBB Bot in the future.\\n\\nYou can check the repository [here](https://github.com/OpenBB-finance/openbb-bot).\\n\\nWelcome to the OpenBB open source family."},{"id":"revolutionizing-ai-at-openbb-with-new-leader-michael-struwig","metadata":{"permalink":"/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-11-07-revolutionizing-ai-at-openbb-with-new-leader-michael-struwig.md","source":"@site/blog/2023-11-07-revolutionizing-ai-at-openbb-with-new-leader-michael-struwig.md","title":"Revolutionizing AI at OpenBB with new leader, Michael Struwig","description":"With the launch of the OpenBB Terminal Pro approaching, we\'re excited to announce the hiring of Michael Struwig, a Ph.D. with expertise in AI and quantitative finance. Michael will help us to further our AI capabilities, reinforcing our commitment to innovation in the open-source finance space.","date":"2023-11-07T00:00:00.000Z","formattedDate":"November 7, 2023","tags":[{"label":"ai","permalink":"/blog/tags/ai"},{"label":"openbb","permalink":"/blog/tags/openbb"},{"label":"startup","permalink":"/blog/tags/startup"},{"label":"finance","permalink":"/blog/tags/finance"},{"label":"hiring","permalink":"/blog/tags/hiring"}],"readingTime":4.125,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"revolutionizing-ai-at-openbb-with-new-leader-michael-struwig","title":"Revolutionizing AI at OpenBB with new leader, Michael Struwig","date":"2023-11-07T00:00:00.000Z","image":"https://github.com/DidierRLopes/my-website/assets/25267873/e14614a5-7ec0-408d-9d49-85392d82ebeb","tags":["ai","openbb","startup","finance","hiring"],"description":"With the launch of the OpenBB Terminal Pro approaching, we\'re excited to announce the hiring of Michael Struwig, a Ph.D. with expertise in AI and quantitative finance. Michael will help us to further our AI capabilities, reinforcing our commitment to innovation in the open-source finance space."},"prevItem":{"title":"OpenBB Bot - our new addition to the OpenBB open source family","permalink":"/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family"},"nextItem":{"title":"Writing documentation, as a founder, is underrated.","permalink":"/blog/writing-documentation-as-a-founder-is-underrated"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nWith the launch of the OpenBB Terminal Pro approaching, we\'re excited to announce the hiring of Michael Struwig, a Ph.D. with expertise in AI and quantitative finance. Michael will help us to further our AI capabilities, reinforcing our commitment to innovation in the open-source finance space.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nAI will be one of the technologies that will be looked back in hundreds of years as revolutionary, changing how humans live.\\n\\nWith the upcoming launch of the [OpenBB Terminal Pro](https://my.openbb.co/app/pro), we believe AI can push the limits of the way users do investment research.\\n\\nWe believe our ecosystem is positioned at the forefront of finance in terms of investment research. With the inception of the OpenBB Terminal Pro, we are standing at the cusp of a significant leap. Our journey began with [AskOBB](https://openbb.co/blog/breaking-barriers-with-openbb-and-llamaIndex), a tool that facilitated natural language interaction with financial data, but that was just the start.\\n\\nLast month, I wrote a [tweet](https://twitter.com/didier_lopes/status/1706731145776566399) explaining why we spent over $500,000 in revamping our core platform. We are committed to creating the best finance platform for quants/analysts to build with. Some key features are:\\n\\n
      \\n
    • We are data vendor agnostic - we enable them
    • \\n
    • We are open source - everyone can contribute data
    • \\n
    • We standardize data across close to 100 different data providers
    • \\n
    • We put a lot of effort into our documentation
    • \\n
    \\n\\nThese features allow us to bring AI to our platform from the ground up, and think about how that will impact the user experience at the core level.\\n\\nFor instance this is an extension that James added to the OpenBB Platform.\\n\\n

    \\n \\n

    \\n\\nThere are a lot of products out there utilizing generative AI for finance. Most of these can be classified as:\\n\\n
      \\n
    • Startups built around a particular feature - e.g. chatting with news. With LLMs becoming a commodity, over time it will be easy to understand that this is a feature and not a product itself.
    • \\n
    • Larger companies that put a small team together to explore generative AI to be seen as leaders in the space - but without an intention to bring such to market. Often because of outdated tech stack.
    • \\n
    \\n\\nWe are different. The [OpenBB Terminal Pro](https://my.openbb.co/app/pro) is the most customizable investment research platform for teams of quants and analysts. It contains generative AI features, but these are embodied inside the app, and treated as part of the user experience.\\n\\nSome examples below:\\n\\n
  • Summarize news articles in seconds
  • \\n
    \\n\\n

    \\n \\n

    \\n\\n
  • Ask more detailed questions to your widgets like earnings transcript or even insider trading
  • \\n
    \\n\\n

    \\n \\n

    \\n\\n
  • And more.
  • \\n
    \\n\\n
    \\n\\nMost of these generative AI features have been started as side projects by our team members, and once we validated the use case with financial professionals we incorporated it into the roadmap. However, we want to double down on this effort and therefore we\'re excited to welcome [Michael](https://twitter.com/MichaelNStruwig) to OpenBB.\\n\\n[Michael](https://twitter.com/MichaelNStruwig) has a PhD in Electrical and Electronic Engineering, has been doing AI for a few years, and prior to joining us was the CEO of Hudson & Thames Quantitative Research.\\n\\nI first heard him from his reading groups:\\n\\n
    \\n \\n
    \\n\\n
    \\n\\n
    \\n \\n
    \\n\\nFrom watching these videos it was clear that Michael is an expert in the field and was capable of understanding deep topics and not solely staying on the surface. So I was keen to have a chat with him. It turns out that he was a big supporter of OpenBB in particular due to our open-source approach to finance and the connection was immediate.\\n\\nMichael met a few of our team members, and a week later we had a signed contract.\\n\\nI couldn\u2019t be more excited to welcome him to the team and see the amazing products we are going to build at OpenBB.\\n\\nHere\u2019s what Michael has to say about joining OpenBB:\\n\\n> _\\"At OpenBB, I\'ve discovered the perfect blend of my core passions: ML/AI, Opensource, and, more recently, quantitative finance. Joining the OpenBB team truly feels like a fairytale come true. I\'ve never encountered a team so singularly-focused and driven. They genuinely \\"get it,\\" and working alongside such talented individuals is incredibly inspiring. I\'m ecstatic to be on board and am eager to help contribute to OpenBB\'s AI initiatives.\\"_\\n\\n
    \\n\\nIf you are excited about the field of open source, AI, and finance, and want to help - you can reach out to Michael on [Twitter](https://twitter.com/MichaelNStruwig)."},{"id":"writing-documentation-as-a-founder-is-underrated","metadata":{"permalink":"/blog/writing-documentation-as-a-founder-is-underrated","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-10-29-writing-documentation-as-a-founder-is-underrated.md","source":"@site/blog/2023-10-29-writing-documentation-as-a-founder-is-underrated.md","title":"Writing documentation, as a founder, is underrated.","description":"This blog post emphasizes the importance of writing documentation as a founder. It discusses how it can give an edge when pitching your product and how it can result in less customer support and a better user experience overall.","date":"2023-10-29T00:00:00.000Z","formattedDate":"October 29, 2023","tags":[{"label":"documentation","permalink":"/blog/tags/documentation"},{"label":"founder","permalink":"/blog/tags/founder"},{"label":"startup","permalink":"/blog/tags/startup"},{"label":"writing","permalink":"/blog/tags/writing"},{"label":"product","permalink":"/blog/tags/product"}],"readingTime":1.23,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"writing-documentation-as-a-founder-is-underrated","title":"Writing documentation, as a founder, is underrated.","date":"2023-10-29T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280558061-219994c7-2b9d-4aae-a661-7131583203e3.png","tags":["documentation","founder","startup","writing","product"],"description":"This blog post emphasizes the importance of writing documentation as a founder. It discusses how it can give an edge when pitching your product and how it can result in less customer support and a better user experience overall."},"prevItem":{"title":"Revolutionizing AI at OpenBB with new leader, Michael Struwig","permalink":"/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig"},"nextItem":{"title":"Building the world\u2019s investment research infrastructure","permalink":"/blog/building-the-worlds-investment-research-infrastructure"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post emphasizes the importance of writing documentation as a founder. It discusses how it can give an edge when pitching your product and how it can result in less customer support and a better user experience overall.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nA founder spending time writing documentation is f*king underrated.\\n\\nWorking on your product documentation may not be the most rewarding task, but I strongly believe that it gives you an edge when pitching your product.\\n\\nGood documentation needs to strike the perfect balance between having enough context and being straight to the point.\\n\\nThis week someone asked us how many people worked on our documentation.\\n\\nThere have been less than 3 people working on it. Our North Star metric has been common sense and putting out documentation that we would enjoy reading/learning from ourselves.\\n\\nEarlier this year I also heard suggestions of hiring a dedicated technical writer.\\n\\nI think that\u2019s BS, at least at the early stages of your company.\\n\\nIt\u2019s the equivalent of saying that you should hire someone to tell your company vision or that the first sales shouldn\u2019t come from the founders.\\n\\nNo one knows your product better than yourself. And users (particularly devs) will notice the love put into documentation. + This will result in less customer support and a better user experience overall.\\n\\nHonestly, a very underrated task if you ask me."},{"id":"building-the-worlds-investment-research-infrastructure","metadata":{"permalink":"/blog/building-the-worlds-investment-research-infrastructure","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-10-19-building-the-worlds-investment-research-infrastructure.md","source":"@site/blog/2023-10-19-building-the-worlds-investment-research-infrastructure.md","title":"Building the world\u2019s investment research infrastructure","description":"This blog post discusses the process and challenges of building the world\'s investment research infrastructure. It provides an insight into the products developed by the OpenBB team and their efficient operation.","date":"2023-10-19T00:00:00.000Z","formattedDate":"October 19, 2023","tags":[{"label":"investment","permalink":"/blog/tags/investment"},{"label":"research","permalink":"/blog/tags/research"},{"label":"infrastructure","permalink":"/blog/tags/infrastructure"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"}],"readingTime":0.955,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"building-the-worlds-investment-research-infrastructure","title":"Building the world\u2019s investment research infrastructure","date":"2023-10-19T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280558008-f9ddc301-9ff4-4a5e-b5b6-45d3726101a3.png","tags":["investment","research","infrastructure","OpenBB"],"description":"This blog post discusses the process and challenges of building the world\'s investment research infrastructure. It provides an insight into the products developed by the OpenBB team and their efficient operation."},"prevItem":{"title":"Writing documentation, as a founder, is underrated.","permalink":"/blog/writing-documentation-as-a-founder-is-underrated"},"nextItem":{"title":"A $500k bet to build the best platform to do AI using financial data","permalink":"/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post discusses the process and challenges of building the world\'s investment research infrastructure. It provides an insight into the products developed by the OpenBB team and their efficient operation.\\n\\nThe open source code is available [here](https://github.com/openbb-finance/OpenBBTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n[OpenBB](http://openbb.co) team is comprised of 18 FTE.\\n\\nWe have 8 products: [OpenBB Platform](https://my.openbb.co/app/platform), [OpenBB Terminal](https://my.openbb.co/app/terminal), [OpenBB Bot](https://my.openbb.co/app/bot), [OpenBB Terminal Pro](https://my.openbb.co/app/pro), OpenBB Excel Add-In, [OpenBB Hub](https://my.openbb.co/app/hub), [OpenBB Docs](https://docs.openbb.co) and [Marketing website](https://openbb.co).\\n\\nThis means that on average we have around 2 people working on each product.\\n\\nThis is particularly wild when you look into the complexity associated with each of these products and being at the forefront of innovation.\\n\\nThat average includes not only engineers but design, product, and marketing.\\n\\nIn addition, our [Discord community](https://openbb.co/discord) has 14k+ people and we often get praised regarding how good our support is.\\n\\nRegardless of our future, I am proud of the team we put together and how efficiently we operate.\\n\\nIt would take a much larger company well over 5 years to build what we built in 2."},{"id":"a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data","metadata":{"permalink":"/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-10-14-a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data.md","source":"@site/blog/2023-10-14-a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data.md","title":"A $500k bet to build the best platform to do AI using financial data","description":"This blog post discusses our $500k investment in building the best platform for AI using financial data. We focus on the rebranding of OpenBB SDK to OpenBB Platform, its features, and the potential payoff of this bet in 2024.","date":"2023-10-14T00:00:00.000Z","formattedDate":"October 14, 2023","tags":[{"label":"AI","permalink":"/blog/tags/ai"},{"label":"Financial Data","permalink":"/blog/tags/financial-data"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"Data Access","permalink":"/blog/tags/data-access"},{"label":"Agents","permalink":"/blog/tags/agents"}],"readingTime":1.9,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data","title":"A $500k bet to build the best platform to do AI using financial data","date":"2023-10-14T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280557960-f07a672a-3129-42ae-96c9-fecb7a88a325.png","tags":["AI","Financial Data","OpenBB","Data Access","Agents"],"description":"This blog post discusses our $500k investment in building the best platform for AI using financial data. We focus on the rebranding of OpenBB SDK to OpenBB Platform, its features, and the potential payoff of this bet in 2024."},"prevItem":{"title":"Building the world\u2019s investment research infrastructure","permalink":"/blog/building-the-worlds-investment-research-infrastructure"},"nextItem":{"title":"Work-life balance is bullsh*t","permalink":"/blog/work-life-balance-is-bullsh-t"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post discusses our $500k investment in building the best platform for AI using financial data. We focus on the rebranding of OpenBB SDK to OpenBB Platform, its features, and the potential payoff of this bet in 2024.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/openbb-agents/tree/main).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nEarlier this year we made a $500k bet.\\n\\nThe [OpenBB SDK](https://my.openbb.co/app/sdk) had access to over 500 data endpoints. But it was built as a second thought (after the Terminal) and it was extremely time-consuming to manage all dependencies.\\n\\nPlus, the SDK had more than just access to data and thus was bloated.\\n\\nSo we invested $500,000 to build it from the ground up and focus on data access.\\n\\nNow the OpenBB Platform (rebrand) is lean and scalable.\\n\\nIt can be used in Python (`pip install openbb==4.0.0a2`) but also for web development. More information [here](https://pypi.org/project/openbb/).\\n\\nAnd honestly, is the door to financial data.\\n\\n**Why am I saying all this?**\\n\\nBecause I predict that in 2024 this bet will have a massive payoff.\\n\\n**The reason?**\\n\\nAgents are going to be big.\\n\\nAnd when they are, financial firms that aren\u2019t leveraging them are going to have to spend a lot of resources to make up for the lack of efficiency.\\n\\n## Enter OpenBB Platform\\n\\n- We are data vendor agnostic (we enable them)\\n- We are open source (everyone can contribute data)\\n- We standardize data across close to 100 different data providers\\n- We put a lot of effort into our documentation\\n\\nThe last 3 points are key for agents, and why people will build agents on top of the OpenBB platform.\\n\\nIn a few hours, I was able to use the following prompt:\\n\\n```console\\n Check what are TSLA peers.\\n From those, check which one has the highest market cap. \\n Then, on the ticker that has the highest market cap get \\n the most recent rating from an analyst. And tell me who \\n was the analyst and what date was it that the rating was done\\n```\\n\\nTo have an agent execute this entire workflow in a 1/10th of the time that it would have taken an analyst to do.\\n\\nCheck for yourself the example below,\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f07a672a-3129-42ae-96c9-fecb7a88a325)"},{"id":"work-life-balance-is-bullsh-t","metadata":{"permalink":"/blog/work-life-balance-is-bullsh-t","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-09-16-work-life-balance-is-bullsh-t.md","source":"@site/blog/2023-09-16-work-life-balance-is-bullsh-t.md","title":"Work-life balance is bullsh*t","description":"This blog post challenges the concept of work-life balance, arguing that success often requires sacrifices in personal time and relationships. It suggests that true balance comes from finding joy in your work and surrounding yourself with like-minded individuals.","date":"2023-09-16T00:00:00.000Z","formattedDate":"September 16, 2023","tags":[{"label":"work-life balance","permalink":"/blog/tags/work-life-balance"},{"label":"success","permalink":"/blog/tags/success"},{"label":"career","permalink":"/blog/tags/career"},{"label":"hard work","permalink":"/blog/tags/hard-work"}],"readingTime":1.445,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"work-life-balance-is-bullsh-t","title":"Work-life balance is bullsh*t","date":"2023-09-16T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280557860-935e058c-7338-48b9-bd1c-bd0e39d85094.png","tags":["work-life balance","success","career","hard work"],"description":"This blog post challenges the concept of work-life balance, arguing that success often requires sacrifices in personal time and relationships. It suggests that true balance comes from finding joy in your work and surrounding yourself with like-minded individuals."},"prevItem":{"title":"A $500k bet to build the best platform to do AI using financial data","permalink":"/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data"},"nextItem":{"title":"Target Market Analysis with the help of LLMs","permalink":"/blog/target-market-analysis-with-the-help-of-llms"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post challenges the concept of work-life balance, arguing that success often requires sacrifices in personal time and relationships. It suggests that true balance comes from finding joy in your work and surrounding yourself with like-minded individuals.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n\\nFor successful individuals, achieving a work-life balance is a luxury often associated with those born into wealth.\\n\\nLet me explain.\\n\\nThere must be a clear inverse correlation between success (let\u2019s say measured by wealth) and the size of your circle of friends.\\n\\n**If you want to be at the top of a field, you must work hard.**\\n\\nEnd.\\n\\nRegardless of what BS people say about work-life balance.\\n\\nYou may be lucky \u2014 right place right time kind of thing. But by default, you need to work hard to expand your luck\u2019s surface.\\n\\nAnd that means that you need to spend your personal time working harder, to be above average.\\n\\nSince time is limited you need to sacrifice time spent outside working hours, otherwise you will only be average.\\n\\nPeople will soon realize that in order to optimize for a successful career, cutting time spent with friends is a necessary evil.\\n\\nPlus, as you become older you\u2019ll prioritize physical health (which impacts your longevity + performance) and your relationship with your partner (which provides the most significant ROI in terms of happiness).\\n\\nSo, I suggest 2 things:\\n\\n- Work on a problem and in a space that you truly enjoy so you don\u2019t consider it work\\n- Build with people who share the same values as you so you consider them friends Once that happens, work-life balance means nothing.\\n\\nWhat\u2019s your take?"},{"id":"target-market-analysis-with-the-help-of-llms","metadata":{"permalink":"/blog/target-market-analysis-with-the-help-of-llms","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-09-10-target-market-analysis-with-the-help-of-llms.md","source":"@site/blog/2023-09-10-target-market-analysis-with-the-help-of-llms.md","title":"Target Market Analysis with the help of LLMs","description":"This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.","date":"2023-09-10T00:00:00.000Z","formattedDate":"September 10, 2023","tags":[{"label":"Target Market Analysis","permalink":"/blog/tags/target-market-analysis"},{"label":"LLMs","permalink":"/blog/tags/ll-ms"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"BCG Matrix","permalink":"/blog/tags/bcg-matrix"},{"label":"GE McKinsey Matrix","permalink":"/blog/tags/ge-mc-kinsey-matrix"},{"label":"Market Attractiveness","permalink":"/blog/tags/market-attractiveness"},{"label":"Competitive Advantage","permalink":"/blog/tags/competitive-advantage"}],"readingTime":9.66,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"target-market-analysis-with-the-help-of-llms","title":"Target Market Analysis with the help of LLMs","date":"2023-09-10T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280557703-72bc62fd-6a65-40fe-a6e4-401ca5658b33.png","tags":["Target Market Analysis","LLMs","OpenBB","BCG Matrix","GE McKinsey Matrix","Market Attractiveness","Competitive Advantage"],"description":"This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage."},"prevItem":{"title":"Work-life balance is bullsh*t","permalink":"/blog/work-life-balance-is-bullsh-t"},"nextItem":{"title":"OpenBB 2 year anniversary","permalink":"/blog/openbb-2-year-anniversary"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/target-market-analysis/tree/main).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nAfter working on [OpenBB](https://openbb.co) for over 2 years, we learned which markets to go after and which markets to ignore. You may think that this is intuition, but it\u2019s actually the data that you gathered from talking with 100+ users and learning from others in the industry.\\n\\nHowever, people who don\u2019t know your business as well as you do (new joiners, advisors, or investors), don\u2019t understand why your target market is X and not Y. Hence, it\u2019s important to backtrace your \u201cexperience\u201d with data.\\n\\nThis blog post will focus on how you can perform target market analysis for your company. I will provide the framework and the code to leverage OpenAI to speed up that research process. All of this will be replicable, and you can do it for your own company.\\n\\n## Context\\n\\nThis framework is utilized for portfolio analysis in corporate strategy to analyze business units or product lines.\\n\\n### BCG Matrix\\n\\nInitially, BCG implemented its own framework, which you can read more about here. In a nutshell:\\n\\n_It uses two variables: relative market share and the market growth rate. By combining these two variables into a matrix, a corporation can plot their business units accordingly and determine where to allocate extra (financial) resources, where to cash out and where to divest._\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f956ae41-8397-4ac0-98a2-122824421888)\\n\\n### GE McKinsey Matrix\\n\\nThen, the GE McKinsey Matrix was invented, which you can read more about here. To put it briefly:\\n\\n_It uses two variables: industry attractiveness and the competitive strength of a business unit. By combining these two variables into a matrix, a corporation can plot their business units accordingly and determine where to invest, where to hold their position, and where to harvest or divest._\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/089f7474-e2c3-41a4-adf9-15956e4e6d06)\\n\\nAs per the blog post, the main difference between these comes from the fact that the latter uses multiple factors that are combined to determine the measure of the two variables: industry attractiveness and competitive strength. Whereas the BCG Matrix only uses 1 variable per axis \u2014 relative market share and market growth rate.\\n\\nThe GE McKinsey Matrix (also known as the Nine-box matrix) has industry attractiveness on the y-axis and competitive strength on the x-axis.\\n\\nFor industry attractiveness, factors to consider can be: Industry size; Long-run growth rate; Industry structure; Industry life cycle; Macro environment; and Market segmentation.\\n\\nFor competitive strength, factors to consider can be: Profitability; Market share; Business growth; Brand equity; Level of differentiation; Firm resources; Efficiency and effectiveness of internal linkages; and Customer loyalty.\\n\\n## How do you build your Matrix?\\n\\nAll the data will be hypothetical. The goal is to share the process and framework. Each company and market will have its own.\\n\\n### 1. Define your factors\\n\\nWhen we talk about market attractiveness, from your company\u2019s perspective, what makes a market attractive? Consider all those factors and list them. Try to list all the factors that have a weight in that equation, but try to keep them under 10; otherwise, it\u2019s too many to have to assess, and at some point, their weight into the attractiveness is negligible.\\n\\nNow do the same for the factors that give your company a competitive advantage.\\n\\n### 2. Weigh each factor\\n \\nNot all factors are created equal. Some factors will influence whether a market is attractive or not. Similarly, for your competitive advantage, what factors give your company a bigger edge?\\n\\nThe goal is to select a weight for each factor so that the sum of the weights for all the factors adds up to 1. The outcome should look something like:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/bbd38ef0-ee6e-4b9d-9f5c-d4871da5b0a9)\\n\\n### 3. Categorize each factor\\n\\nNow you need to decide how granular you want your assessment to be. Initially, at OpenBB, we started with a scale of 1\u20133 where 1 is low, 2 is medium, and 3 is high. However, soon we found this to not be good enough since there was not enough granularity. Thus, we increased the range from 1 to 5.\\n\\nOnce you decide on that range, you need to categorize it in a way that makes sense for each factor. This ensures that everyone on the team is on the same page when it comes to assessing a factor. For instance:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/8878402e-ca4c-4ff0-a769-89c7cd2eefb4)\\n\\nThis Google / Excel spreadsheet should look like:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/7beda8dc-c943-45d5-90f3-ffd19b7982e4)\\n\\n### 4. Select a list of target markets you want to evaluate\\n\\nCreate a new Google spreadsheet / Excel page for each of them. This will allow you to contain all details for each target market on the same page.\\n\\nFor the purposes of this demonstration, we will use \u201cTargetMarket1,\u201d \u201cTargetMarket2,\u201d and \u201cTargetMarket3.\u201d\\n\\n### 5. Assess a target market based on selected factors\\n\\nNow that we have decided on all the factors associated with the target market attractiveness, as well as the competitive advantage, you need to assess each of these based on the target markets that you have selected.\\n\\nEach target market page should look something like this:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/3a6b57aa-77dc-4f59-acd5-0bd0bf06bf27)\\n\\nThe factors and weights are automatically pulled from the \u201cFramework page\u201d built previously.\\n\\nHere you just need to set the rating from 1 to 5 (or according to the range you previously specified) based on the evaluation criteria defined. Each of these ratings is multiplied by the weight, and all of those values are summed up together. If your selected range is from 1 to 5, then it means that the minimum and maximum values are 1 and 5, since the weights add up to 1.\\n\\nNote that the last column allows you to add comments based on any additional information/criteria that you used to make a rating choice.\\n\\n### 6. Discover Total Addressable Market\\n\\nOn the spreadsheet above, you may have seen the total addressable market value. I will address how to find this value in a subsequent post.\\n\\nThis is extremely important because even if the market is really attractive, its size can dictate whether to pursue it or not. Most of the time, you don\u2019t want to be chasing a small market opportunity.\\n\\n### 7. Final matrix / chart\\n\\nOnce you have all this data, you can build the following for each of the target markets:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/72bc62fd-6a65-40fe-a6e4-401ca5658b33)\\n\\nNote that all you need from each target market is:\\n\\n**Competitive advantage** \u2014 the sum of all the factors and their levels multiplied by their weights gives the x-axis.\\n\\n**Target market attractiveness** \u2014 the sum of all the factors and their levels multiplied by their weights gives the y-axis.\\n\\n**Total Addressable Market (TAM)** \u2014 gives the bubble size on the chart.\\n\\nThen you are ready to make a decision on which market you wish to pursue, and you have data to back it up.\\n\\nNote: There are a lot of assumptions, and you\u2019ll never have it perfect. But with several iterations with your team, you\u2019ll gain more confidence in those assumptions over time, ensuring that you are on the right track and pursuing the right opportunity.\\n\\n## Using OpenAI to bounce ideas to assess a target market\\n\\nSometimes, it can be hard to provide a rating for each of the factors, or it would be better to bounce ideas off someone. This is where you can leverage OpenAI\u2019s GPT-4 to help you get started.\\n\\nI built a script that would read from an Excel spreadsheet all the information from the framework page that we have set. That basically means:\\n\\n- All the factors associated with target market attractiveness, and their levels of description\\n- All the factors associated with competitive advantage, and their levels of description\\n\\nThen I prompted GPT-4 to select a level for each of the factors of interest for both attractiveness and competitive advantage, based on what it knows about a specific target market.\\n\\nFor example, let\u2019s say we want to assess the competitive advantage for the target market \u201cHedge Funds\u201d \u2014 this is what the prompt looks like:\\n\\n We want to assess our competitive advantage based in relation \\n with factors where we are have an advantage. \\n \\n Can you classify those for the following target market: \'Hedge Funds\'\\n \\n The factors that we will access this market are presented below: \\n \\n When assessing Data Aggregation, these are the rules:\\n We attribute a value of 5 if We provide all data a market needs\\n We attribute a value of 4 if We provide most data a market needs\\n We attribute a value of 3 if We provide some data a market needs\\n We attribute a value of 2 if We provide very little data a market needs\\n We attribute a value of 1 if We provide no data a market needs\\n \\n When assessing Customization, these are the rules:\\n We attribute a value of 5 if Market will leverage our open source code\\n We attribute a value of 4 if Market will fully customize our platform to make it their own\\n We attribute a value of 3 if Market will customize a bit their platform\\n We attribute a value of 2 if Market will use platform as is and customize after some time\\n We attribute a value of 1 if Market will use platform as is\\n \\n When assessing Automation, these are the rules:\\n We attribute a value of 5 if Allows to save more than 70% of time\\n We attribute a value of 4 if Allows to save 50%-70% of time\\n We attribute a value of 3 if Allows to save 30%-50% of time\\n We attribute a value of 2 if Allows to save 15%-30% of time\\n We attribute a value of 1 if Doesn\'t save any time on automation\\n \\n When assessing Factor4, these are the rules:\\n We attribute a value of 5 if Very high\\n We attribute a value of 4 if High\\n We attribute a value of 3 if Medium\\n We attribute a value of 2 if Low\\n We attribute a value of 1 if Very low\\n \\n When assessing Factor5, these are the rules:\\n We attribute a value of 5 if Very high\\n We attribute a value of 4 if High\\n We attribute a value of 3 if Medium\\n We attribute a value of 2 if Low\\n We attribute a value of 1 if Very low\\n \\n Given this information, can you return a level for each of the factors \\n that is our competitive advantage from a viewpoint of Hedge Funds target market.\\n \\n Please return it in a json dictionary format with the factor and level only. \\n Do not add any other text apart from that. \\n Indent the json with 4 spaces.\\n\\nThen, using the following block of code, we can get OpenAI\u2019s GPT-4 to provide its input:\\n\\n```python\\n response = openai.ChatCompletion.create(\\n model=\\"gpt-4\\",\\n messages=[\\n {\\n \\"role\\": \\"system\\", \\n \\"content\\": \\n \\"\\"\\"\\n You are an outstanding financial analyst and were given the task \\n to perform market research on a possible market segment.\\n The company succces relies on your accuracy to categorize a \\n segment and classify according to the factors and levels specified.\\n \\"\\"\\"\\n },\\n {\\n \\"role\\": \\"user\\", \\n \\"content\\": prompt\\n },\\n ]\\n )\\n print(response.choices[0].message.content)\\n```\\n\\nThis is what the output looks like:\\n\\n```console\\n {\\n \\"Data Aggregation\\": 3,\\n \\"Customization\\": 4,\\n \\"Automation\\": 5,\\n \\"Factor4\\": 2,\\n \\"Factor5\\": 3\\n }\\n```\\n\\n**And that\u2019s it for today.**\\n\\nAll of this code is open source and available on my GitHub, here: https://github.com/DidierRLopes/target-market-analysis/tree/main\\n\\nI hope you find this insightful, I appreciate any feedback as always."},{"id":"openbb-2-year-anniversary","metadata":{"permalink":"/blog/openbb-2-year-anniversary","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-08-20-openbb-2-year-anniversary.md","source":"@site/blog/2023-08-20-openbb-2-year-anniversary.md","title":"OpenBB 2 year anniversary","description":"Two years of OpenBB. A look back at our achievements and growth in the world of open-source finance.","date":"2023-08-20T00:00:00.000Z","formattedDate":"August 20, 2023","tags":[{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"Anniversary","permalink":"/blog/tags/anniversary"},{"label":"Achievements","permalink":"/blog/tags/achievements"},{"label":"Growth","permalink":"/blog/tags/growth"},{"label":"Finance","permalink":"/blog/tags/finance"}],"readingTime":2.805,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"openbb-2-year-anniversary","title":"OpenBB 2 year anniversary","date":"2023-08-20T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280557086-2482411c-1588-41d4-ba7f-72506065f4b5.png","tags":["OpenBB","Anniversary","Achievements","Growth","Finance"],"description":"Two years of OpenBB. A look back at our achievements and growth in the world of open-source finance."},"prevItem":{"title":"Target Market Analysis with the help of LLMs","permalink":"/blog/target-market-analysis-with-the-help-of-llms"},"nextItem":{"title":"How to handle equity top-ups at a seed stage startup","permalink":"/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startup"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nTwo years of OpenBB: A look back at our achievements and growth in the world of open-source finance.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nToday is OpenBB 2 years anniversary of our incorporation. So it\u2019s important to look back and understand the magnitude of what we achieved in 24 months.\\n\\nIn that time we\u2019ve had:\\n\\n- 100k+ downloads of our installer since we started tracking it\\n- 2.5M bot commands have been run on Discord and Telegram from over 40k users\\n- GitHub project grew from 8k stars to 23k+, becoming #1 open source project in the topic of finance\\n- Our Discord group grew from 1k users to 13k+\\n- Our SDK has been pip installed over 25k times\\n- Our team grew from 3 to 19 around the globe\\n- For more, see http://openbb.co/open\\n\\nBut where were we 2 years ago?\\n\\n- Only Gamestonk Terminal, the name OpenBB only appeared when we came out of stealth mode in March 2022\\n- No OpenBB Hub (only launched in May 2023)\\n- No OpenBB SDK (only launched in Dec 2022)\\n- No OpenBB Bot (only launched in July 2022)\\n- No Terminal Pro or Excel Add-In early alpha (development started in 2023)\\n- No SDK v4 which allows community and data providers to build their own data connectors, easily (to be announced soon)\\n- No community routines \u2014 our first feature aimed at community with upvoting and sharing of routines\\n- No open source PyWry \u2014 A web-view rendering library in python we open source in Feb 2023\\n- No OpenBB Champions \u2014 Our way to highlight users that do impressive work on top of our ecosystem\\n- No partnerships with universities, financial societies or investment clubs\\n- No partnerships with data vendors \u2014 now we have close relationships with most vendors you would know\\n\\nIf we only focus on where Gamestonk Terminal was 2 years ago we had:\\n\\n- Static charts using matplotlib (Interactive ones using PyWry was launched in May 2023)\\n- No way for users to run routines from other users from the terminal directly (launched 3 days ago)\\n- No AskOBB feature with LlamaIndex (launched in June 2023)\\n- No way for users to customise the terminal, select default data sources and set their API keys \u2014 all from the Hub\\n- No way to double click an installer and get started in a few minutes \u2014 hassle free\\n- The documentation on markdown files across the repository, today people often praise our documentation in conversations\\n- No AI features, no reports menu, no dashboards menu, no fixed income, no futures, \u2026\\n- And the OpenBB Terminal charts looked like this\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/2c6890ec-f561-4303-8835-addb31590da5)\\n\\nBill Gates said the famous saying:\\n\\n> People overestimate what they can do in one year and underestimate what they can do in 10 years.\\n\\n
    \\n\\nIn fast-paced startups, I think a better sentence would be, \u201cPeople overestimate what they can do in one week and underestimate what they can do in 1 year\u201d.\\n\\nLooking forward to continue building the future of investment research, we\u2019re just getting started.\\n\\nPS: On a personal level within those 2 years: I quit my full-time job to build OpenBB, got 2 dogs, got married and moved to the Bay Area. Life is great \u2764\ufe0f"},{"id":"how-to-handle-equity-top-ups-at-a-seed-stage-startup","metadata":{"permalink":"/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startup","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-08-09-how-to-handle-equity-top-ups-at-a-seed-stage-startup.md","source":"@site/blog/2023-08-09-how-to-handle-equity-top-ups-at-a-seed-stage-startup.md","title":"How to handle equity top-ups at a seed stage startup","description":"In this post, we discuss how to handle equity top-ups at a seed stage startup, providing a step-by-step guide on the implementation process and including links to relevant spreadsheets.","date":"2023-08-09T00:00:00.000Z","formattedDate":"August 9, 2023","tags":[{"label":"equity","permalink":"/blog/tags/equity"},{"label":"startups","permalink":"/blog/tags/startups"},{"label":"seed stage","permalink":"/blog/tags/seed-stage"},{"label":"equity top-ups","permalink":"/blog/tags/equity-top-ups"},{"label":"employee compensation","permalink":"/blog/tags/employee-compensation"}],"readingTime":7.935,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-to-handle-equity-top-ups-at-a-seed-stage-startup","title":"How to handle equity top-ups at a seed stage startup","date":"2023-08-09T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280556975-db55c35d-e5f3-4cfc-b200-5fe2f2690285.png","tags":["equity","startups","seed stage","equity top-ups","employee compensation"],"description":"In this post, we discuss how to handle equity top-ups at a seed stage startup, providing a step-by-step guide on the implementation process and including links to relevant spreadsheets."},"prevItem":{"title":"OpenBB 2 year anniversary","permalink":"/blog/openbb-2-year-anniversary"},"nextItem":{"title":"How to handle equity at a seed-stage startup from Silicon Valley","permalink":"/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this post, we discuss how to handle equity top-ups at a seed stage startup, providing a step-by-step guide on the implementation process and including links to relevant spreadsheets.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nPreviously, I shared how we handle equity at OpenBB in [this post](http://didierlopes.com/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley).\\n\\nThis blog post will continue that discussion and go over how we approach equity top-ups at OpenBB. It will provide a step-by-step guide on the implementation process and include links to relevant spreadsheets that you can use for your own startup.\\n\\nI will continue using the purely fictional example that I introduced in the previous blog post with John Doe.\\n\\nLet\u2019s imagine that John Doe was indeed the right candidate for OpenBB, and on **June 15, 2021**, he was hired and accepted an offer with **2000 options** vesting over the next 4 years with a 1-year cliff. For simplicity, let\u2019s assume that he will vest the 2000 shares by July 1, 2025 (ignoring the additional 2 weeks).\\n\\nThis means that by the end of June 2022, John will have vested 542 shares (13 x 2000 / 48), and for every following month, he will vest 42 shares per month. Note that we only start showing the shares from June 2022 because before that, he was in his cliff period.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/6072f982-94a0-43c1-8183-c62439569d22)\\n\\nIf you do this calculation, you\u2019ll see that it adds up to 2022, whereas John was only granted 2000 shares. This is normal and is due to rounding, thus the shares associated with the last month are updated so that it matches the offer.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/5df51c85-512a-4c7b-8c7b-838a13892a90)\\n\\nIf any of the following situations arise:\\n\\n1. The initial assessment of the candidate was wrong, and they are not an IC but a Sr. IC.\\n2. The employee has exceeded expectations, and their equity no longer reflects the value they bring to the company.\\n3. The employee has other job offers, and you want to reinforce that they are an owner of the company and that their success is important.\\n4. The employee\u2019s vesting period is coming to an end, and they are considering leaving as they joined the company for the potential upside of an exit.\\n\\nOne option you have is to increase cash compensation. However, offering equity (ownership) is often a better option, especially for startups with limited cash resources.\\n\\nIn these situations, you need to consider an equity top-up. This means offering the employee a new equity grant on top of the shares they are currently vesting. There are multiple types of equity grants, but I will focus on the approach we use at [OpenBB](https://openbb.co) and explain how you can implement it as well.\\n\\nFirst, determine how many additional shares you want to grant to the individual and, more importantly, how many shares would be fair for them to vest each month. The former helps determine their stake in the company, while the latter helps assess their value compared to other team members.\\n\\nIn our case, let\u2019s assume it\u2019s February 2023, and John has been with the company for 20 months. We want to reward his contributions and bet on his future at the company, so we decide to grant him an additional 1,500 shares on top of his existing 2,000 shares.\\n\\nIn theory, some companies start a new 4-year vesting period with a 1-year cliff for the second grant. However, the issue with that approach is that the employee will start vesting two grants simultaneously: 2000/48 + 1500/48 shares per month. Once the first grant is fully vested, they will vest a lower amount of shares per month: 1500/48. This means the employee would have less incentive to stay when only the second grant is being executed.\\n\\nTo address this, we ensure that for the next 4 years from the vesting commencement date (VCD) of the second grant, the employee vests the same number of shares each month.\\n\\n## How can we do that?\\n\\n### Manual\\n\\nHere is the information we have:\\n\\n- 1st option grant VCD: **15 June 2021**\\n- 1st option grant shares: **2,000**\\n- 1st option grant schedule: **1/48 per month with 1 year cliff finishing on 30 June 2025**\\n\\nFrom here, we infer that in February 2023, John is vesting 42 shares per month and has already vested 542 shares (after the 1-year cliff) + 294 shares (7 x 42).\\n\\nNow, let\u2019s discuss the decisions we need to make for the second option grant:\\n\\n- 2nd option grant VCD: We want to start it ASAP, to retain employee \u2014 for instance **March 2023**\\n- 2nd option grant shares: **around 1,500**\\n- 2nd option grant schedule: **1/48 per month finishing on 30 March 2027**. Note that we removed the cliff since we know the value the employee brings and that \u201cprotection\u201d/\u201dretainer\u201d can be removed.\\n\\nBy utilizing maths, we can create the following equation:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/6fef3777-e0f4-4f6b-8aec-2beda3548d9e)\\n\\nBy filling in the information that we know, we get:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b6a45d13-ba87-4483-b978-c134de992535)\\n\\nAnd thus we know that we can get the value that makes this happen.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/a59b01d5-ae2f-46b7-8fa1-2ca271c683d1)\\n\\nHowever, we don\u2019t want to give the employee fractional shares each month, so we select a round number around the one that makes him receive around 1,500 additional shares over the course of 4 years.\\n\\nIn this case, that number could be 55. This means that the top-up number would be 13 (55\u201342), except on the last month of vesting for the 1st grant where we need the adjustment.\\n\\nWhen we multiply 55 shares per month for the next 48 months starting in March 2023, that adds up to **2,640**.\\n\\nHowever, the employee was awarded **1,500 shares** (2nd grant) and still has 27 months (from March 2023 to May 2025) to vest 1st grant shares, which corresponds to a total of **1,122 shares** (42 * 26 + 30, remembering the adjustment done for the last month). This total would be **2,622**, which obviously is different from the expected 2,640.\\n\\nTherefore, we update the value of the number of shares given on the 2nd grant so that John receives 55 shares per month. In this case, for that to happen, the 2nd grant has to have a value of 1,573.\\n\\nBut obviously, you don\u2019t need to pick up your calculator every time you do this. I mean, what kind of engineer would I be if I didn\u2019t somehow automate this?\\n\\n### Automated\\n\\nThe spreadsheet below demonstrates what an employee vesting schedule looks like, and below I will write a step-by-step guide so you can fully customize it to your needs.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/db55c35d-e5f3-4cfc-b200-5fe2f2690285)\\n\\n- As a result, **E5** will be updated with 11 months afterward to represent the month before the cliff terminates, which consequently leads to the following months being displayed in **column E**.\\n\\n2. Fill in the 1st grant shares in **B5**\\n\\n- As a result, **G6** is updated with the total shares from the 1st grants vested after the 1st year. The following rows in **column G** are automatically updated until the vesting schedule terminates.\\n\\n3. Adjust **G41** so that the sum of shares in **column G** match the shares from the 1st grant in **B5**.\\n\\n4. Fill in the top up grant vesting commencement date (VCD) in **C6**\\n\\n- As a result, **column H** will automatically get populated based on the value that, when added with the cells in **column G**, returns the value in cell **B19**.\\n\\n- This will also allow us to compute the months that have already been vested from the initial shares in **B11** and consequently calculate the overlap between shares coming from the 1st and 2nd grant in **B12**.\\n\\n5. Fill in the top-up grant shares that you are thinking about offering to the employee in **B6**.\\n\\n- As a result, the same computations that were explained earlier in theory will occur. This will result in a recommendation for the top-up shares in **B15** and consequently the amount of shares that the employee will vest monthly in **B16** so that the amount of top-up grant shares is met.\\n\\n6. It is very likely that the number in **B16** will not be rounded. Hence, we fill **B19** with a rounded version of that number.\\n\\n- As a result, **column H** will be updated so that the total shares (from both grants) in **column F** matches the selected value in **B19**.\\n\\nWhen looking at the total top-up shares in **H67**, that value will no longer match the total top-up shares that we wanted to grant to the employee and that we decided at the beginning in **B6**. This is because we rounded the value and thus impacted the number of shares necessary to achieve that.\\n\\nThe amount of shares needed to update the recommendation in **B16** to the rounded version in **B19** is displayed as an \u201cerror\u201d in **B21**.\\n\\n7. In order to fix that, we simply need to update B6 with the sum of B6 and the error value from B21.\\n\\n- As a result of this, all the values should now match, and the combined total amount of shares given to the employee in **B8** should match the sum of the shares spread across dates in **F67**. Plus, the error should now be null in cell **B21**.\\n\\nAnd that\u2019s it.\\n\\nI hope you found this useful and are able to use it internally to share with your employees so they understand how the top-ups happen at your startup.\\n\\nIf you want access to this Excel template, feel free to reach out to me on Twitter or LinkedIn."},{"id":"how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley","metadata":{"permalink":"/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-08-03-how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley.md","source":"@site/blog/2023-08-03-how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley.md","title":"How to handle equity at a seed-stage startup from Silicon Valley","description":"A step-by-step guide on how to handle equity at a seed-stage startup, using a fictional example from OpenBB.","date":"2023-08-03T00:00:00.000Z","formattedDate":"August 3, 2023","tags":[{"label":"startup","permalink":"/blog/tags/startup"},{"label":"equity","permalink":"/blog/tags/equity"},{"label":"Silicon Valley","permalink":"/blog/tags/silicon-valley"},{"label":"seed-stage","permalink":"/blog/tags/seed-stage"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"}],"readingTime":5.72,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley","title":"How to handle equity at a seed-stage startup from Silicon Valley","date":"2023-08-03T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280556768-c4d5f9ed-d2b4-4faf-802d-1de3e3e83d71.png","tags":["startup","equity","Silicon Valley","seed-stage","OpenBB"],"description":"A step-by-step guide on how to handle equity at a seed-stage startup, using a fictional example from OpenBB."},"prevItem":{"title":"How to handle equity top-ups at a seed stage startup","permalink":"/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startup"},"nextItem":{"title":"Keep track of your startup metrics using a custom iOS widget","permalink":"/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widget"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nA step-by-step guide on how to handle equity at a seed-stage startup, using a fictional example from OpenBB.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nAs a startup founder and CEO, you need to wear multiple hats, from engineering and product to design, marketing, and even finance.\\n\\nToday, I\u2019m going through the details of how we handle equity at OpenBB. This blog post provides a step-by-step guide on the implementation process, including links to relevant spreadsheets that you can reuse for your startup.\\n\\nTo make this post easier to follow, I will create a purely fictional example.\\n\\nJohn Doe, a software engineer from Portugal, has been contributing to the [open source OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal) for a few consecutive weeks. He not only fixes bugs but also adds features that the community has requested through pull requests and on Discord. Additionally, he is a fast learner and gets along well with the current team. This sparks the interest of the OpenBB team because having this open-source contributor work with us full-time would be great, rather than being limited by his current full-time job.\\n\\nFrom here, we set up an initial exploratory call to better understand John Doe as an individual \u2014 what he is passionate about, why he has contributed to the project, and more. We follow up the call with an interview involving engineers to assess his skills and experience. Finally, he joins a call with me, where I sell the vision of the company and explain why what OpenBB is doing matters. At this point, we extend him an offer. Up until this stage, the recruiting process is standard, except for the fact that we have a \u201cfiltered\u201d candidate coming from the open-source community.\\n\\nHowever, as a startup, that offer cannot (or at least should not) consist solely of cash compensation. A startup [operates at a much faster pace](http://www.paulgraham.com/growth.html) and is riskier than a company. Therefore, in exchange for hard work and long hours, you should offer part of the company through equity, allowing the employee to benefit from the upside in case the company achieves a successful exit (IPO or sale).\\n\\nSo, how do we decide on the equity to offer the new hire?\\n\\nIt\u2019s easy. You follow your company Option Guidelines.\\n\\n## Option Guidelines\\n\\nThe Option Guidelines are an Excel spreadsheet approved by the board. In this document, you explicitly create **bands (minimum and maximum range options)** based on the role and stage of the company. Board approval is crucial as it allows you to extend the offer directly without needing permission from the board since the guidelines have already been approved.\\n\\nHere\u2019s what the document looks like:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/c4d5f9ed-d2b4-4faf-802d-1de3e3e83d71)\\nThe total number of shares is random and not representative of OpenBB.\\n\\nFirst, you need to ask yourself what roles your company envisions needing. Within those roles, there are two things to consider:\\n\\n- **Departments:** You may differentiate between Engineering, Marketing, Operations, Sales, Finance, and HR/Admin. You can also add others such as Design, Product, etc. Note that having different departments does not necessarily mean you need different band structures.\\n\\n- **Titles:** You\u2019ll want to be able to \u201ccompare\u201d individuals based on their contributions. For instance, Vice President, Director, Manager, Senior Individual Contributor, and Individual Contributor. Note that if you have fewer titles, the bands should be wider to differentiate individuals with the same title. If you add five levels of Individual Contributors, you\u2019ll want narrower bands.\\n\\n I recommend starting with fewer titles, KISS: keep it simple stupid. Again, having different levels does not necessarily mean the bands need to be mutually exclusive. A Manager does not necessarily have a higher band than a Senior Individual Contributor; this depends on your own company culture.\\n\\nNext, you need to differentiate between **company stages**. This allows you to distinguish employees who join very early when the startup carries the most risk. We distinguish between three stages: Pre-production revenue, Pre-profit with production revenue, and Profitable.\\n\\nOnce all these categories are completed, you should have a similar table to the one shared above. Now, it\u2019s important to fill in the equity percentage. For privacy reasons, I will not provide the specific values for OpenBB but will create a random example.\\n\\nLet\u2019s imagine that OpenBB Charter has a total of 1 million shares (assuming only one class of stock for simplicity). If our priced round values the company at $10 million, this means that each share is valued at $10.\\n\\nOn the top left of the document, we will insert the number of shares, which is 1,000,000. Then, we adjust the % LOW and % HIGH columns, representing the range of company ownership we want to grant to this individual.\\n\\nLet\u2019s go through a fake example for the SW role:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/39ea2b1f-af4b-45b1-be7d-ba88f4c03c40)\\n\\nThe column \u201cLow Shrs\u201d is computed by multiplying the % LOW by the total number of shares. On the other hand, the column \u201cHigh Shrs\u201d is computed by multiplying the % HIGH by the total number of shares. This value is important as it represents the amount stipulated in the contract.\\n\\nLet\u2019s consider a scenario where the company is in the Pre-Profit stage with Production Revenue, and we want to hire an Engineering IC. Based on our assessment of their skillset and fairness in comparison to other team members, we would offer a contract that vests over time between 1000 and 2000 shares.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b84e4085-b26c-41a5-87cc-7667fe279d62)\\n\\nNext, you need to decide on the vesting calendar that the company supports. The most common option is a 4-year vesting schedule with a 1-year cliff. This means that while you begin vesting during your first year, you need to stay with the company for the entire year to be able to exercise those options. The 1-year cliff protects the company from employees leaving early or underperforming.\\n\\nCarta provides a good explanation on how stock options work [here](https://carta.com/blog/equity-101-stock-option-basics/) \u2014 which I recommend to everyone.\\n\\nPlease note that in theory, while the value of these options is $10 per share, the startup will need to conduct a 409a valuation to determine the fair market value of each option, which is likely to be much lower than the initial price, such as $1 per share. And this is the strike price that employees will need to pay to exercise the shares.\\n\\nNote: when selecting the number of shares, use a number that is divisible by the number of months that the employee is vesting, e.g., for a 4-year vesting period that would be 48 (4 x 12), which ensures that employees get the same amount of shares each month, and there\u2019s no need to account for floating numbers.\\n\\nThis is it for today.\\n\\nIn Part II, I will talk about how you can handle equity top-ups.\\n\\nSo follow me if you want to learn more about what that process may look like."},{"id":"keep-track-of-your-startup-metrics-using-a-custom-ios-widget","metadata":{"permalink":"/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widget","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-07-29-keep-track-of-your-startup-metrics-using-a-custom-ios-widget.md","source":"@site/blog/2023-07-29-keep-track-of-your-startup-metrics-using-a-custom-ios-widget.md","title":"Keep track of your startup metrics using a custom iOS widget","description":"Keep track of your startup metrics using a custom iOS widget. This blog post will guide you on how to build a custom iOS widget that displays your startup metrics at all times. The entire code is open source and requires minimal coding skills.","date":"2023-07-29T00:00:00.000Z","formattedDate":"July 29, 2023","tags":[{"label":"iOS","permalink":"/blog/tags/i-os"},{"label":"Startup","permalink":"/blog/tags/startup"},{"label":"Metrics","permalink":"/blog/tags/metrics"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"Scriptable","permalink":"/blog/tags/scriptable"},{"label":"Open Source","permalink":"/blog/tags/open-source"}],"readingTime":3.015,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"keep-track-of-your-startup-metrics-using-a-custom-ios-widget","title":"Keep track of your startup metrics using a custom iOS widget","date":"2023-07-29T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280556605-d5b174c3-2a30-4494-b5ae-a0639fe5374e.png","tags":["iOS","Startup","Metrics","OpenBB","Scriptable","Open Source"],"description":"Keep track of your startup metrics using a custom iOS widget. This blog post will guide you on how to build a custom iOS widget that displays your startup metrics at all times. The entire code is open source and requires minimal coding skills."},"prevItem":{"title":"How to handle equity at a seed-stage startup from Silicon Valley","permalink":"/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley"},"nextItem":{"title":"How to Use OpenAI to Extract Insights from Team Survey","permalink":"/blog/how-to-use-openai-to-extract-insights-from-team-survey"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nKeep track of your startup metrics using a custom iOS widget. This blog post will guide you on how to build a custom iOS widget that displays your startup metrics at all times. The entire code is open source and requires minimal coding skills.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/opensource-scriptable-widget/tree/main).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nIf you have a high level role in your organization, you are likely obsessed over a few metrics that act as the north star for your company. Whether that is MRR, number of customers, GitHub stars, AUM, .. depends on the type and stage of company, and what you are optimizing for.\\n\\nAt [OpenBB](https://openbb.co) we are currently optimizing for [OpenBB Hub](https://my.openbb.co) users, since this is the place where you have access to our entire suite of products. From [OpenBB Terminal](https://my.openbb.co/app/terminal), [OpenBB SDK](https://my.openbb.co/app/sdk), [OpenBB Bot](https://my.openbb.co/app/bot) and soon \u2014 the highly awaited [OpenBB Terminal Pro](https://my.openbb.co/app/pro).\\n\\nSo everyday I spent some time checking our startup [/open page](https://openbb.co/open). However, whenever I had to check these on mobile I had to open up the browser, type the link and then look for the metric of interest.\\n\\nHence, to save time, I built a custom iOS widget that displays these metrics of interest at all times. All I need to do is unlock my phone and *BAM*, they are right there.\\n\\nSo, today, I\u2019ll teach you how you can do the same with minimal coding skills required. I open source the entire code, so that you can get up to speed as fast as possible here: https://github.com/DidierRLopes/opensource-scriptable-widget\\n\\n## Track your open source metrics\\n\\nThis section will provide a plug-and-play example for your open source repository.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/9e9a483d-6264-41fa-afc3-aa4b4946e3e8)\\n\\nThese are the steps necessary to have it working on your iOS device:\\n\\n1/ Download Scriptable app to your iOS device\\n\\n2/ Open Scriptable app and click on the \u201c+\u201d on the top right corner\\n\\n3/ Rename that script to whatever repo you would like to track\\n\\n4/ Copy the code from the file opensource.js on this repository\\n\\n5/ Paste it into that new script on your phone\\n\\n6/ Change the 4 initial parameters from the file:\\n\\n```python\\n const WIDGET_TITLE = \\"openbb.co/open\\"\\n const GITHUB_REPO = \\"OpenBB-finance/OpenBBTerminal\\"\\n const PIP_PACKAGE_NAME = \\"openbb\\"\\n const CACHED_DATA_HOURS = 1\\n```\\n\\n- If you only want to track GitHub stats, do `PIP_PACKAGE_NAME=\\"\\"`.\\n- If you only want to track PiPy stats, do `GITHUB_REPO=\\"\\"`.\\n- The `CACHED_DATA_HOURS` corresponds to the amount of hours where the data is not updated.\\n\\n7/ Run script to make sure that it works using the \u201cplay button\u201d on the bottom right corner\\n\\n8/ Leave the app\\n\\n9/ Leave your finger pressed on the iOS homepage\\n\\n10/ Click on the \u201c+\u201d on the left top corner\\n\\n11/ In the \u201cSearch Widgets\u201d tab look for \u201cScriptable\u201d\\n\\n12/ You will see \u201cRun Script\u201d and there are 3 pages. Select the type of widget size that you are interested in\\n\\n13/ Select \u201cAdd Widget\u201d\\n\\n14/ The widget will appear with the sentence \u201cLong press and edit widget to select the script to run\u201d\\n\\n15/ Do that and then you will have 3 options:\\n\\n- Script \u2014 Select script name that you renamed to earlier\\n- When Interacting \u2014 Select \u201cOpen URL\u201d \u2014 A new field will appear with \u201cURL\u201d then provide the link you want to open you cick on the widget (e.g. http://openbb.co)\\n- Parameter \u2014 If there\u2019s any parameter needed to the script\\n\\n16/ Click outside the window, and you should be all set!\\n\\nFeel free to contribute to the repository with other examples / templates!"},{"id":"how-to-use-openai-to-extract-insights-from-team-survey","metadata":{"permalink":"/blog/how-to-use-openai-to-extract-insights-from-team-survey","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-07-21-how-to-use-openai-to-extract-insights-from-team-survey.md","source":"@site/blog/2023-07-21-how-to-use-openai-to-extract-insights-from-team-survey.md","title":"How to Use OpenAI to Extract Insights from Team Survey","description":"This blog post discusses how to use OpenAI to extract insights from team survey data. It covers the motivation behind the project, the requirements, and the implementation process, including the use of the Slack API and Airtable API for automation.","date":"2023-07-21T00:00:00.000Z","formattedDate":"July 21, 2023","tags":[{"label":"OpenAI","permalink":"/blog/tags/open-ai"},{"label":"Team Survey","permalink":"/blog/tags/team-survey"},{"label":"Insights","permalink":"/blog/tags/insights"},{"label":"Automation","permalink":"/blog/tags/automation"},{"label":"Slack","permalink":"/blog/tags/slack"},{"label":"Airtable","permalink":"/blog/tags/airtable"}],"readingTime":8.01,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-to-use-openai-to-extract-insights-from-team-survey","title":"How to Use OpenAI to Extract Insights from Team Survey","date":"2023-07-21T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280556043-a80c7f1b-f119-4a33-83e3-8eb5aa10e6f2.png","tags":["OpenAI","Team Survey","Insights","Automation","Slack","Airtable"],"description":"This blog post discusses how to use OpenAI to extract insights from team survey data. It covers the motivation behind the project, the requirements, and the implementation process, including the use of the Slack API and Airtable API for automation."},"prevItem":{"title":"Keep track of your startup metrics using a custom iOS widget","permalink":"/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widget"},"nextItem":{"title":"Why the need for an open source investment research platform?","permalink":"/blog/why-the-need-for-an-open-source-investment-research-platform"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post discusses how to use OpenAI to extract insights from team survey data. It covers the motivation behind the project, the requirements, and the implementation process, including the use of the Slack API and Airtable API for automation.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/insights-from-team-survey).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n## Motivation\\n\\nI\u2019ve been wanting to play with the OpenAI API for a while, but I\u2019ve had higher priority tasks. Yesterday, I thought that I could use the day to do this, but I didn\u2019t want to just try it in a notebook. Instead, I wanted to use it in a real project that could save me time.\\n\\nLast week, I posted about how at OpenBB we have developed a monthly team survey and automated the process of requesting information through Slack and Airtable. You can find more on that post [here](/blog/employees-are-leaving-be-proactive-about-employee-feedback).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e1c2c71d-6a6b-4c3b-a0ca-28e848e78e7a)\\n\\nThis made me think that even though I have access to all this data, which OpenBB has made fully available [here](https://openbb.co/open), I still have to spend some time looking at the data to extract insights.\\n\\n\\"Screenshot\\n\\nWhat if I could automate that analysis using OpenAI? This is what I set out to build, and this post will focus on how I went from idea to implementation.\\n\\n## Requirements\\n\\nI already had a notebook that I used to analyze our Airtable data with our team survey in it. However, that analysis was quite \u201cheavy,\u201d and it was not straightforward to extract insights. Thus, one of the requirements was to use OpenAI to analyze the team survey feedback for the current month and highlight anything worth mentioning.\\n\\nAdditionally, I wanted to compare the team\u2019s experience to the prior month to understand if we were improving or not, and identify areas for further improvement. Finally, based on these insights, I wanted OpenAI to suggest what OpenBB, as a company, could do to improve our culture.\\n\\nTo achieve this using an OpenAI model, I could either export the team survey responses from Airtable in CSV and copy-paste them into ChatGPT, or I could automate the data retrieval using the Airtable API. Being an engineer, why would I do something in 5 minutes when I can spend 1 day automating it? \ud83e\udd23\\n\\nLastly, I didn\u2019t want to run this script and have to copy-paste the output into our Slack group so that everyone on the team could have access to the overall analysis and provide feedback/suggestions. Therefore, I would like to have a Slack integration that sends the output in a specific formatted way to our Slack channel.\\n\\nSo, the idea is as follows:\\n\\n
      \\n
    1. Retrieve team feedback responses from Airtable
    2. \\n
    3. Extract insights from the team survey data using OpenAI
    4. \\n
    5. Send the insights output to the OpenBB Slack channel
    6. \\n
    \\n\\n## Implementation\\n\\n### Slack API\\n\\nFirst of all, I went to the [Slack API](https://api.slack.com/apps) page. There, I created an app named \u201cEmployee Voice\u201d and selected the \u201cOpenBB\u201d workspace, as shown below:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d2d88e11-f81b-472f-b073-0aa195e7d9d6)\\n\\nAfter clicking \u201cCreate App\u201d I proceeded to update the display information.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e11533e2-424c-4828-b520-3e5235cc69fb)\\n\\nThen I go into \u201cIncoming Webhooks\u201d and select the channel I\u2019m interested in posting messages to. That should be all the settings you need to configure for your app.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/ed08fcb7-43d7-4510-b43d-13606bcd5d1d)\\n\\nThe webhook URL will be necessary, so I copied it and added it to the following script. For the channel name, I used my personal name, \u201c_Didier Lopes_\u201d, since I was just testing if it worked. As for the message, I used the infamous \u201cHello World\u201d text.\\n\\nHere is a sample that you can use to test whether you can successfully send yourself a direct message using the Slack API.\\n\\n```python\\n SLACK_WEBHOOK_URL=\\n \\n insight=\\"Hello World\\"\\n \\n payload = {\\n \'text\': insight,\\n }\\n \\n req = Request(SLACK_WEBHOOK_URL, json.dumps(payload).encode(\'utf-8\'))\\n try:\\n response = urlopen(req)\\n response.read()\\n \\n print(\\"SUCCESS: Message with insights sent to slack\\\\n\\")\\n except HTTPError as e:\\n print(f\\"Request failed: {e.code} {e.reason}\\\\n\\")\\n except URLError as e:\\n print(f\\"Server connection failed: {e.reason}\\\\n\\")\\n```\\n\\n### Airtable API\\n\\nAt OpenBB, we are using Airtable to automate the monthly team survey questionnaire and store the associated data. I wrote more about that process in [this blog](/blog/employees-are-leaving-be-proactive-about-employee-feedback).\\n\\nNow, I want to have programmatic access to this data.\\n\\nFirstly, I need to obtain the Airtable API key, which you can get from the [Airtable Developer Hub](https://airtable.com/create/tokens). Secondly, I navigate to Airtable and locate the table that contains the data of interest, as shown below:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/91b2ac4a-d18a-4083-a422-bb9c85a3ae8c)\\n\\nThe name of the table, \u201c_OpenBB_monthly_\u201d, corresponds to the \u201cTABLE NAME\u201d that will be necessary. Additionally, when you are on this table view, your URL will have the following format: https://airtable.com/XXX. That XXX is your \u201cBASE ID,\u201d which will be the final element necessary to retrieve data from Airtable.\\n\\nNext, run the following script to ensure that you have access to this data.\\n\\n```python\\n AIRTABLE_API_KEY=\\n AIRTABLE_BASE_ID=\\n AIRTABLE_TABLE_NAME=\\"OpenBB_monthly\\"\\n \\n response = requests.get(\\n url=f\'https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/{AIRTABLE_TABLE_NAME}\',\\n headers={\'Authorization\': f\'Bearer {AIRTABLE_API_KEY}\'}\\n )\\n \\n Check if the data has been loaded correctly\\n if response.status_code == 200:\\n data = response.json()[\\"records\\"]\\n else:\\n print(f\\"Error: {response.status_code}\\")\\n \\n print(data)\\n```\\n\\n### OpenAI API\\n\\nFinally, go to [OpenAI Developer platform](https://platform.openai.com/account/api-keys) and grab your OpenAI API key.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e6e9b5b8-cb5e-4c34-aabb-2027c1f67ad1)\\n\\nOnce you have that, you are pretty much ready to test whether this works or not. In this case, we assume you have access to the data from Airtable, so you can test if the OpenAI code is set up correctly with the following:\\n\\n```python\\n data_previous_month=\\n data_current_month=\\n current_month=\\n \\n openai.api_key=\\n response = openai.ChatCompletion.create(\\n model=\\"gpt-4\\", # you can use a different model\\n messages=[\\n {\\"role\\": \\"system\\", \\"content\\": \\"You are a Chief of Staff with a MSc. in Data analysis and are trying to improve the culture of the company.\\"},\\n {\\"role\\": \\"user\\", \\n \\"content\\": \\n f\\"\\"\\"\\n This table represents the company survey for the previous month: {data_previous_month}\\n \\n This table represents the company survey for this month: {data_current_month}.\\n \\n Based on this data, can you do 3 things:\\n \\n 1. Summarize main differences since last month\\n 2. Summarize main highlights for current month\\n 3. Create suggestions for what could be done to improve those areas\\n \\n Please use the following format for the output:\\n As the title use the following: Insights from team survey in {current_month}.\\n Follow the title by 2 line breaks.\\n Use bullet points within each of the points mentioned above.\\n Between the 3 points, use 1 line breaks, a line with ----------------------- and another line break.\\n Use `` when referring to a component like `Reward` or `Growth`.\\n Do not use asterisks \'*\' or \'**\'.\\n When referring to to Engineering or Product, Marketing, Design, Finance wrap them around asterisk, e.g. _Engineering_.\\n \\"\\"\\"\\n },\\n ]\\n )\\n \\n print(response.choices[0].message.content)\\n```\\n\\n## Glue it together\\n\\nOnce you have the scripts, merging them is straightforward. I will show you what the input vs. output looks like.\\n\\nHere is [OpenBB](http://openbb.co/)\u2019s team survey data from June of 2023:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/cfadfada-6841-4f21-8cbe-689761aa1333)\\n\\nIf I run the script here, as shown below (yes, you guessed it right \u2014 I open-sourced this project as usual. I hope you and your team find it useful):\\n\\n```console\\n $ python extract_insights_from_last_team_survey.py\\n```\\n\\nThis is the expected output if the script runs successfully.\\n\\n```console\\n Loading environment variables...\\n Loading team survey data from Airtable...\\n Processing data from Airtable...\\n Extracting insights from team survey data...\\n Sending insights to Slack through a message...\\n SUCCESS: Message with insights sent to slack\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/17871455-02b0-4b30-867a-2b9efdd97b15)\\n\\n## Automate with GitHub workflow\\n\\nWe\u2019re almost there! It doesn\u2019t make sense for us to manually run this script every month. Plus, software engineers are known for their laziness (which is actually a [virtue of a great programmer](https://thethreevirtues.com/)), so let\u2019s create a GitHub action to automate this process.\\n\\nTo begin, create a file called \u201cmain.yml\u201d in the \u201c.github/workflows\u201d directory.\\n\\n[This workflow](https://github.com/DidierRLopes/insights-from-team-survey/blob/main/.github/workflows/main.yml) will be divided into three main sections:\\n\\n### When\\n\\nSpecifies when this GitHub action should run.\\n\\n```console\\n on:\\n push:\\n branches:\\n - main\\n schedule:\\n - cron: \'0 0 3 * *\'\\n```\\n\\nThe first section, \u201con: push: branches: [main]\u201d means that whenever there is a code push to the \u201cmain\u201d branch, this workflow will be triggered. This feature allows us to quickly test whether the action is functioning as expected.\\n\\nThe \u201cschedule-cron\u201d makes it so that the yaml gets run at a specific dates and times.\\n\\n### Secrets\\n\\nWhat do we need in advance for this to work?\\n\\n```console\\n env:\\n SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}\\n OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}\\n AIRTABLE_API_KEY: ${{ secrets.AIRTABLE_API_KEY }}\\n AIRTABLE_BASE_ID: ${{ secrets.AIRTABLE_BASE_ID }}\\n AIRTABLE_TABLE_NAME: ${{ secrets.AIRTABLE_TABLE_NAME }}\\n```\\n\\nAll of these variables need to be set as action secrets. You can do this by selecting the \u201cSettings\u201d tab above, then going into \u201cScripts and variables,\u201d and selecting \u201cNew repository secret.\u201d Fill in the information accordingly, as shown below:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b0f054a3-4b55-47ac-a34a-678b7edbed86)\\n\\n### Workflow\\n\\nWhat commands are we running with this GitHub action? In our case, these are the ones we are interested in.\\n\\n```console\\n jobs:\\n build:\\n runs-on: ubuntu-latest\\n \\n steps:\\n - name: checkout repo content\\n uses: actions/checkout@v2\\n \\n - name: setup python\\n uses: actions/setup-python@v2\\n with:\\n python-version: 3.9\\n \\n - name: install python packages\\n run: |\\n python -m pip install --upgrade pip\\n pip install python-dotenv\\n pip install pandas\\n pip install openai\\n \\n - name: extract insights from team feedback\\n run: |\\n python extract_insights_from_last_team_survey.py\\n```\\n\\nAnd that\u2019s it! You now have a complete automation pipeline from employee feedback to insights within seconds.\\n\\nI hope you enjoyed reading this post, and I would love to hear your feedback. Do you appreciate the level of technical detail I go into, or would you prefer less?\\n\\nAny comments are very helpful. Thank you!"},{"id":"why-the-need-for-an-open-source-investment-research-platform","metadata":{"permalink":"/blog/why-the-need-for-an-open-source-investment-research-platform","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-07-16-why-the-need-for-an-open-source-investment-research-platform.md","source":"@site/blog/2023-07-16-why-the-need-for-an-open-source-investment-research-platform.md","title":"Why the need for an open source investment research platform?","description":"OpenBB Terminal, an open-source investment research platform, is transforming the financial industry by addressing issues like data licensing, full-price bundle, lack of transparency and customization, and the need for a diverse community. This post explores why open source is crucial for us and the main problems in the space.","date":"2023-07-16T00:00:00.000Z","formattedDate":"July 16, 2023","tags":[{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Investment Research","permalink":"/blog/tags/investment-research"},{"label":"Data Licensing","permalink":"/blog/tags/data-licensing"},{"label":"Transparency","permalink":"/blog/tags/transparency"},{"label":"Community","permalink":"/blog/tags/community"}],"readingTime":4.47,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"why-the-need-for-an-open-source-investment-research-platform","title":"Why the need for an open source investment research platform?","date":"2023-07-16T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280555950-76a539bb-bb5a-46a8-b4ab-d2875a697921.png","tags":["Open Source","Investment Research","Data Licensing","Transparency","Community"],"description":"OpenBB Terminal, an open-source investment research platform, is transforming the financial industry by addressing issues like data licensing, full-price bundle, lack of transparency and customization, and the need for a diverse community. This post explores why open source is crucial for us and the main problems in the space."},"prevItem":{"title":"How to Use OpenAI to Extract Insights from Team Survey","permalink":"/blog/how-to-use-openai-to-extract-insights-from-team-survey"},"nextItem":{"title":"From Open Source to Open Startup","permalink":"/blog/from-open-source-to-open-startup"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nOpenBB Terminal, an open-source investment research platform, is transforming the financial industry by addressing issues like data licensing, full-price bundle, lack of transparency and customization, and the need for a diverse community. This post explores why open source is crucial for us and the main problems in the space.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nHaving a closed source OpenBB Terminal was never on the table.\\n\\nThe [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal) is the platform it is today due to its open source nature. Launched almost 2.5 years ago, the interest on this platform was clear \u2014 aggregating an impressive 4000 stars on GitHub in under 24 hours from launch.\\n\\nThis number kept on growing along with the community (most of which gathers on [our Discord server](http://openbb.co/discord)) and allowed us to create the company OpenBB, see the story [here](http://openbb.co/blog/gme-didnt-take-me-to-the-moon-but-gamestonk-terminal-did).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d7b91689-b820-40bb-88cd-e41e15a227f6)\\n\\nBut why is open source so important for us? To understand this, it\u2019s important for us go over the main problems in the space.\\n\\n
      \\n
    1. Data licensing
    2. \\n
    3. Full-price bundle
    4. \\n
    5. Transparency and customization
    6. \\n
    7. Community
    8. \\n
    \\n\\n## Data licensing\\n\\nCurrent monopolies spend an enormous amount of capital on financial data licensing. There are dozens of different asset classes (equities, options, crypto, NFTs, forex, bonds, ETFs, mutual funds, \u2026) and these often vary based on geography. In addition, alternative datasets have grown a lot in popularity as they can provide a hedge in the market (e.g. a hurricane can impact orange juice futures).\\n\\nThat makes the overall investment research industry a very tough market to compete. Startups cannot disrupt the space without a massive capital injection. Explaining why the data offered by startups usually focuses on a certain asset class, in a certain geography.\\n\\nThis is why OpenBB doesn\u2019t own the data (similar to Uber not owning cars, Airbnb not owning apartments, Deliveroo not owning restaurants). OpenBB wants to be the infrastructure layer between data sources and users.\\n\\nThis is the typical two-sided market, where on the one hand users benefit from having access to multiple datasets in one place, and on the other hand data sources benefit from having users on our platform as they can monetize their data. This allows us to focus on the product while our number of data integrations and users grows.\\n\\n## Full-price bundle\\n\\nCurrent incumbents pricing is usually a complete bundled offering. This means that regardless of what you are utilizing in terms of both breadth and depth, you pay the full price tag. A good analogy is like a restaurant ONLY having a buffet when all you want is a bottle of water, or some chips.\\n\\nWhat happens is that a user ends up paying for data that they are not using. In 2023, this is a very outdated take. Companies are looking to get leaner, and it doesn\u2019t make sense to pay for data that you aren\u2019t leveraging.\\n\\nBeing the infrastructure between users and data sources allows you to create value to both. Users will have access to all the data they want and pay for the ones they use, and data sources will have access to a big pool of users.\\n\\nIn addition some data providers (e.g. a team of machine learning engineers) will not need to create a dashboard for their users to visualize their data and hire a team to start a sales/marketing motion, as they will be able to rely on OpenBB\u2019s infrastructure.\\n\\n## Transparency and customization\\n\\nCurrent incumbents have built several in-house financial models. Although these are often customizable, their customization is typically limited. That is because what is usually customizable are the values/weights, but not necessarily the formulas \u2014 that is kept hidden in their source code. This is an issue because that code cannot be validated and users cannot modify it.\\n\\nWith open source, the story is completely different. Users can see every single line of code and therefore, not only audit the code quality but adapt the models/formulas to their own needs. At the end of the day, there is no point in re-inventing the wheel for financial theory that has been around for decades.\\n\\nBy having the code open source, users can rely on the fact that these formulas have been validated/tested by thousands or millions of users and therefore, there\u2019s a very low chance that these are wrong. In addition, users are more secure because they can investigate the code and check/fix any vulnerabilities.\\n\\n## Community\\n\\nOne of the best parts of open source is the integrated community that it creates. This attracts people from every background, gender or ethnicity. Such a pool of diversity allows for better ideas and pushes a project further. With people from the community being able to contribute, this also drives innovation.\\n\\nOpenBB has been driven a lot by the community so far. What started as a terminal mostly focused on equities, soon evolved into including a broad range of datasets and considering several geographies. For instance: A contributor from Sweeden integrated Avanza API to the mutual funds menu that would only appear if users were looking into mutual funds from Sweden \u2014 this shows the power of community.\\n\\n
    \\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/9c1b32d4-1efb-4dd4-b1fe-3b8be17f3fc4)\\n\\nWe are close to 23,000 stars. If you haven\u2019t already, starring our project would mean the world.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f285e5dc-7765-4aab-8bb8-2e1e58493e86)\\n\\nAny feedback is welcome \ud83d\ude4f\ud83c\udffd"},{"id":"from-open-source-to-open-startup","metadata":{"permalink":"/blog/from-open-source-to-open-startup","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-07-06-from-open-source-to-open-startup.md","source":"@site/blog/2023-07-06-from-open-source-to-open-startup.md","title":"From Open Source to Open Startup","description":"From Open Source to Open Startup. A journey of OpenBB towards transparency in the financial world.","date":"2023-07-06T00:00:00.000Z","formattedDate":"July 6, 2023","tags":[{"label":"open-source","permalink":"/blog/tags/open-source"},{"label":"open-startup","permalink":"/blog/tags/open-startup"},{"label":"transparency","permalink":"/blog/tags/transparency"},{"label":"financial world","permalink":"/blog/tags/financial-world"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"}],"readingTime":4.73,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"from-open-source-to-open-startup","title":"From Open Source to Open Startup","date":"2023-07-06T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280555755-5ae0c633-fe95-481c-85bb-eef15891481f.png","tags":["open-source","open-startup","transparency","financial world","OpenBB"],"description":"From Open Source to Open Startup. A journey of OpenBB towards transparency in the financial world."},"prevItem":{"title":"Why the need for an open source investment research platform?","permalink":"/blog/why-the-need-for-an-open-source-investment-research-platform"},"nextItem":{"title":"Employees are leaving? Be proactive about employee feedback","permalink":"/blog/employees-are-leaving-be-proactive-about-employee-feedback"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nFrom Open Source to Open Startup: A journey of OpenBB towards transparency in the financial world.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nBeing open source isn\u2019t enough, at OpenBB we want to accelerate the transparency in the financial world.\\n\\nI want to start this blogpost by introducing the concept of an open startup. As this phrase can often be interpreted differently, here\u2019s the standard definition that ChatGPT gave me:\\n\\n> _\u201cAn open startup is a company that practices open innovation and transparent communication with its stakeholders, including customers, employees, and investors. This means that the company is willing to share information about its products, services, and business operations with the public and is open to input and feedback from all stakeholders._\\n\\n
    \\n\\n> _Open startups typically have a strong focus on collaboration and community building, and they often use open source technology and principles in their operations. Some open startups may also be structured as cooperative or worker-owned enterprises, in which ownership and decision-making power are shared among employees.\u201d_\\n\\n## Why now?\\n\\nI\u2019ve been learning about the open startup movement for a while now and I always knew that I wanted OpenBB to follow this trend. At the end of the day, I want us to accelerate the openness and transparency in the financial world.\\n\\nBut until recently, this wasn\u2019t one of our top priorities. This all changed when the cryptocurrency exchange FTX collapsed. This was a house of cards and they stood for everything but transparency \u2014 not only with their users but also with their shareholders and team alike!\\n\\nJohn J. Ray III who has spent a career tackling large corporate failures involving allegations of criminal activity (like Enron), was appointed CEO of FTX to deal with the bankruptcy, and this is one of his quotes to the US congress:\\n\\n> _\u201cNever in my career have I seen such an utter failure of corporate controls at every level of an organization, from the lack of financial statements to a complete failure of any internal controls or governance whatsoever\u201d_\\n\\n
    \\n\\nOpenBB wants to pave the way of transparency in the financial world.\\n\\n## Why open?\\n\\n### Transparency\\n\\nTransparency across team, shareholders, users and new hires is key. Everyone can see our growth in the same location; A single source of truth accessible to everyone at all times. We already have our code open source, which shows transparency in our engineering, so it only makes sense for us to behave in the same way with our business.\\n\\n### Accountability\\n\\nEveryone will know how we\u2019re doing, for better or worse. This will make us feel responsible to show accurate sustainable growth as this information becomes public. Since everyone has equity in the company, this will be our own skin in the game.\\n\\nWhen people ask, \u201cHow is OpenBB going?\u201d, this can be answered with a single link to our open page.\\n\\n### Community building\\n\\nEvery company is trying to build a community these days, but building a community is hard. By having all of our information publicly available, anyone from the community will know how we are doing at all times \u2014 similar to what the team, shareholders and investors know.\\n\\nThis helps to build trust in OpenBB and allow us to attract and retain talented employees who value transparency and an open culture.\\n\\n### Marketing\\n\\nUsers will be able to share our open page to share OpenBB metrics with other users, which will help to increase awareness for us.\\n\\nIn addition, we want to become leaders of open culture in the financial world, which is known for being a very closed industry. We want to influence companies in this sector and start a movement.\\n\\n### Fundraising\\n\\nSince starting OpenBB, I\u2019ve met well over 50 different investors, even without actively fundraising. Whilst this is a great way to start relationships, it\u2019s not sustainable as it takes valuable time away from talking with users/customers (and let\u2019s be honest, even developing :slight_smile:). So by having an open page, we will be able to discuss our growth async and more efficiently. And then, when we are actively fundraising, we can focus on the details.\\n\\n## How will it be done?\\n\\nWe are adding all our metrics and stats to [/open](https://openbb.co/open).\\n\\nOur open metrics will contain 4 main distinct sections to start with:\\n\\n#### Social Media metrics\\n\\nTwitter followers, Discord users, LinkedIn followers, YouTube views, Reddit followers. Allows to understand the strength of our community in the social media channels that we focus on.\\n\\n#### Team stats\\n\\nTeam distribution and employee engagement coming soon. Allows to understand where we are based and employee experience at OpenBB\\n\\n#### Product metrics\\n\\nOpenBB Hub users, OpenBB Bot, OpenBB SDK and OpenBB Terminal. Allows to hold us accountable for our user growth and the usage that our products have\\n\\n#### Developer metrics\\n\\nStars, forks, merged pull-requests, closed issues, contributors. Keep up-to-date with our development speed and how engaged the open source community is.\\n\\n
    \\n\\nFor all the metrics that are open source, there will be an \u24d8 in the top right to share information on why this chart was made open source and why it\u2019s important to us.\\n\\nOnce a metric is open, we do not intend to close it ever again, that is why all the metrics we are making public have gone through a thorough reasoning process and there\u2019s enough contextual information to understand its meaning.\\n\\nIf you can think of a metric that you would like to see on our open page, please feel free to DM me."},{"id":"employees-are-leaving-be-proactive-about-employee-feedback","metadata":{"permalink":"/blog/employees-are-leaving-be-proactive-about-employee-feedback","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-06-29-employees-are-leaving-be-proactive-about-employee-feedback.md","source":"@site/blog/2023-06-29-employees-are-leaving-be-proactive-about-employee-feedback.md","title":"Employees are leaving? Be proactive about employee feedback","description":"Employees are leaving? Be proactive about employee feedback. This blogpost discusses the importance of employee feedback and how we at OpenBB are ensuring high employee engagement through a periodic feedback survey.","date":"2023-06-29T00:00:00.000Z","formattedDate":"June 29, 2023","tags":[{"label":"employee engagement","permalink":"/blog/tags/employee-engagement"},{"label":"feedback","permalink":"/blog/tags/feedback"},{"label":"work culture","permalink":"/blog/tags/work-culture"},{"label":"remote work","permalink":"/blog/tags/remote-work"},{"label":"team happiness","permalink":"/blog/tags/team-happiness"}],"readingTime":4.995,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"employees-are-leaving-be-proactive-about-employee-feedback","title":"Employees are leaving? Be proactive about employee feedback","date":"2023-06-29T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280555542-969ecadc-43f8-49ea-ad81-90dad5c3011a.png","tags":["employee engagement","feedback","work culture","remote work","team happiness"],"description":"Employees are leaving? Be proactive about employee feedback. This blogpost discusses the importance of employee feedback and how we at OpenBB are ensuring high employee engagement through a periodic feedback survey."},"prevItem":{"title":"From Open Source to Open Startup","permalink":"/blog/from-open-source-to-open-startup"},"nextItem":{"title":"Hybrid work sucks. It\u2019s worse than remote and office.","permalink":"/blog/hybrid-work-sucks-its-worse-than-remote-and-office"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nEmployees are leaving? Be proactive about employee feedback. This blogpost discusses the importance of employee feedback and how we at OpenBB are ensuring high employee engagement through a periodic feedback survey.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThis blogpost shows the measures we are taking to ensure we have high employee engagement at OpenBB through a periodic feedback survey.\\n\\nWhen we started OpenBB, I was absolutely obsessed about our product. All my focus and time was dedicated to building our suite of products (OpenBB Terminal, OpenBB SDK or OpenBB Bot), or talking about these with our users. I care deeply about the OpenBB team, but I expected everyone to be as motivated as me, 24/7.\\n\\nBut things just don\u2019t work that way. Although we always have a fun quarterly event online, that isn\u2019t enough. Everyone knows that I\u2019m a big fan of remote work, but one clear down side of it is the lack of contact and face to face conversations which makes employee engagement more volatile. I say this, because I believe that when your team is together in the same space, it\u2019s easier to thrive off each others excitement and motivation.\\n\\nSoon enough, I realized that _\u201calone you can go faster, but with a team you can go far\u201d_. This is when I started putting time into understanding what we could be doing better to improve our work culture.\\n\\nSome things that we have now put into place include:\\n\\n- We updated the company values as a team, based on what we currently had that they were proud of and where they would like us to be in the future. In a startup, where the pace is incredibly fast and the team is constantly changing, I strongly believe that the values change over time too.\\n\\n- We had an [OpenBB rap](https://www.youtube.com/watch?time_continue=48&v=ThtSC8s0h6I&embeds_referring_euri=https%3A%2F%2Fopenbb.co%2Fblog&source_ve_path=MzY4NDIsMjg2NjMsMjg2NjY&ab_channel=OpenBB) made by a freestyler for our OpenBB Christmas event.\\n\\n- We started pushing for more transparency. We were already very transparent internally, but now we started to push this value externally too. Everyone in the company has skin in the game, this allows the team to feel as accountable for the metrics as I do. I wrote more about this in this blogpost: [From open source to open startup](/blog/from-open-source-to-open-startup), and I am currently working on the OpenBB Handbook too.\\n\\n- I started having office hours, where I can spend the time with the team chatting about anything (product, strategy, engineering, storytelling, even fundraising). The team knows that I\u2019m usually available, but having that 1 hour blocked gives them the confidence to know that that time booked in the day.\\n\\nHowever, there was something critical missing. I will explain what it is by using what I learned at university (that way I can say that my MSc in Control Systems was indeed useful for OpenBB \ud83d\ude43).\\n\\nWhat we had built is an open loop control system, and it looks something like this:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/783ac9e6-a6e0-40bc-b209-4577e2d816fe)\\n\\nThe problem? open loop systems can be inaccurate and unreliable. More importantly, because there is no feedback mechanism to correct inputs as the controller (leadership) never gets the information that comes out of the system (team engagement).\\n\\nThe key word here is feedback. An office hour session is great, but it\u2019s a poor \u201csensor device\u201d. The reason being that you are opening the door for the team to communicate with you, but that data isn\u2019t significant to extrapolate through the whole team.\\n\\nWe needed feedback. We needed to have a closed-loop system instead of an open one. By that I mean:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/fe1c62a1-82c5-446b-95a2-b2736cea3085)\\n\\nThis allows us to constantly monitor our team happiness, and be able to react when the feedback doesn\u2019t match our desired culture.\\n\\nBut what is this feedback? What do we want to track? We didn\u2019t want to reinvent the wheel, so we looked up to how the best companies do it. In particular, we studied \u201cThe Psychology of Employee Engagement\u201d e-book from Workday written by Phillip Chambers.\\n\\nThis allowed us to come up with the following survey, where the team would reply anonymously to each of the questions with a rating from 1 to 10 where 1 corresponds to \u201cstrongly disagree\u201d and 10 corresponds to \u201cstrongly agree\u201d.\\n\\n- **Accomplishment:** I feel a regular sense of accomplishment\\n- **Autonomy:** I feel that I am given autonomy in the way I complete my tasks\\n- **Meetings:** I feel that I have a good amount of meetings every week. (this question was originally about environment, but due to our remote nature we felt that the amount of meetings was something more important to measure)\\n- **Freedom of Opinions:** I feel that I have a voice in the company and my opinion matters\\n- **Goal Setting:** I feel that both my goals and expectations are set clearly\\n- **Growth:** I feel that I have opportunities to grow professionally\\n- **Management Support:** I feel that my manager cares for me and empowers me\\n- **Meaningful Work:** I feel that my work matters\\n- **Organizational Fit:** I feel like the company values align with mine and we share the same goal\\n- **Peer relationships:** I feel connected with my colleagues and that I can be myself with them\\n- **Recognition:** I feel like I get recognized for my contributions\\n- **Reward:** I feel like I am rewarded fairly for my work\\n- **Strategy:** I feel like the company strategy is being communicated effectively\\n- **Workload:** I feel like I can manage my workload efficiently\\n\\nNow you may be wondering how we made this survey completely automated, the workflow is actually very straightforward and we were able to automate it. Here is what it looks like: Airtable + Slack \u2705\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/024bd126-f9c8-4097-bcaf-63adbea5614b)\\n\\nEven though our salaries don\u2019t compete with the MAMAAs of this world, we believe that: our mission, our innovative products and unique culture are what makes us OpenBB. And why we can retain our talent.\\n\\nYou can find our employee engagement index at: https://openbb.co/company/open/team"},{"id":"hybrid-work-sucks-its-worse-than-remote-and-office","metadata":{"permalink":"/blog/hybrid-work-sucks-its-worse-than-remote-and-office","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-06-12-hybrid-work-sucks-its-worse-than-remote-and-office.md","source":"@site/blog/2023-06-12-hybrid-work-sucks-its-worse-than-remote-and-office.md","title":"Hybrid work sucks. It\u2019s worse than remote and office.","description":"Hybrid work, a combination of remote and office work, is not as beneficial as it seems. This blog post discusses the pros and cons of remote and office work, and why hybrid work might not be the best solution.","date":"2023-06-12T00:00:00.000Z","formattedDate":"June 12, 2023","tags":[{"label":"remote work","permalink":"/blog/tags/remote-work"},{"label":"office work","permalink":"/blog/tags/office-work"},{"label":"hybrid work","permalink":"/blog/tags/hybrid-work"},{"label":"productivity","permalink":"/blog/tags/productivity"},{"label":"work culture","permalink":"/blog/tags/work-culture"}],"readingTime":11.715,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"hybrid-work-sucks-its-worse-than-remote-and-office","title":"Hybrid work sucks. It\u2019s worse than remote and office.","date":"2023-06-12T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280555261-f8b39c06-b71f-465b-b16f-b5d0e7cde1ca.png","tags":["remote work","office work","hybrid work","productivity","work culture"],"description":"Hybrid work, a combination of remote and office work, is not as beneficial as it seems. This blog post discusses the pros and cons of remote and office work, and why hybrid work might not be the best solution."},"prevItem":{"title":"Employees are leaving? Be proactive about employee feedback","permalink":"/blog/employees-are-leaving-be-proactive-about-employee-feedback"},"nextItem":{"title":"Become an OpenBB Champion","permalink":"/blog/become-an-openbb-champion"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nHybrid work, a combination of remote and office work, is not as beneficial as it seems. This blog post discusses the pros and cons of remote and office work, and why hybrid work might not be the best solution.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThis is my hot take for 2023, but bear with me.\\n\\n## Context\\n\\nEveryone on Twitter has been actively discussing that \u201cRemote work failed\u201d, e.g. [this tweet](https://twitter.com/DavidSacks/status/1663958149437743105?s=20) from David Sacks where he refers to [this blogpost](https://flocrivello.com/changing-my-mind-on-remote-about-being-in-san-francisco/), or [this tweet](https://twitter.com/paulg/status/1667580108247277570?s=20) from Paul Graham.\\n\\nWhile I\u2019m not going to pose as an expert on the topic, I feel like I\u2019ve experienced enough to have an opinion. My career so far has been:\\n\\n- 1 year of office work for a public company\\n- 1 year of remote work for a startup, plus a few months of hybrid work for the same startup\\n- 2 years of growing [OpenBB](https://openbb.co/) from 1 to 20 people, all fully remote.\\n\\nLet me first go over the advantages and disadvantages of remote and office work, so that I can focus this blog post on **why hybrid sucks**.\\n\\n## Remote work\\n\\nFirst of all, let\u2019s be pragmatic \u2014 remote works. (Before people comment, of course if you\u2019re a factory worker or similar, this doesn\u2019t apply).\\n\\n### Advantages\\n\\n
      \\n
    1. Increased employee retention and satisfaction: Remote work is seen as a desirable perk, improving job satisfaction and retention rates. You can check OpenBB team engagement here.
    2. \\n
    3. Expanded talent pool: It allows hiring from a global talent pool, resulting in a more diverse and skilled workforce, particularly in open source, where contributors come from all over the world.
    4. \\n
    5. Increased flexibility: Remote work offers employees more control over their schedules, leading to better work-life balance.
    6. \\n
    7. Improved productivity: There are fewer distractions and interruptions, which leads to increased productivity.
    8. \\n
    9. No commuting: Remote work eliminates the need to travel to the office, saving time, money, and energy.
    10. \\n
    11. Cost savings: It reduces expenses for both employees and employers, such as commuting and office-related costs.
    12. \\n
    \\n\\n### Disadvantages\\n\\n
      \\n
    1. Limited face-to-face interaction: Remote work reduces in-person collaboration and social connections among colleagues.
    2. \\n
    3. Communication challenges: Reliance on digital tools may lead to misunderstandings or misinterpretations. There may also be technical issues or connectivity problems.
    4. \\n
    5. Blurred work-life boundaries: Clear separation between work and personal life becomes challenging.
    6. \\n
    7. Potential distractions: Remote work environments expose individuals to various distractions.
    8. \\n
    9. Challenges with collaboration: Coordinating tasks and scheduling can be more difficult remotely.
    10. \\n
    11. Reduced visibility and career advancement opportunities: Remote workers may have limited visibility and access to career growth.
    12. \\n
    \\n\\n### Conclusion\\n\\nRemote works. It\u2019s not for everyone, but it works. It works particularly well when the company culture is built around it. For it to work exceptionally well, it boils down to two main arguments:\\n\\n
      \\n
    1. A strong leadership is necessary to keep the team aligned, motivated, and to create the company\u2019s culture. This helps mainly with the limited face-to-face interaction, challenges with collaboration, and reduced visibility and career advancement opportunities.
    2. \\n
    3. Do not track team members based on time but assess work based on output. Use meritocracy to reward the best team members and let go of low performers early. Remote work is not for everyone, and for those who cannot produce output/value to the company while working remotely, it means they weren\u2019t a good hire in the first place. In my personal opinion, the disadvantages of potential distractions and blurred work-life boundaries come down to the employee and their relationship with remote work, instead of the company.
    4. \\n
    \\n\\n
    \\n\\nSometimes someone may not be producing as much value as expected, for one reason or another. _When you are working remotely, you accept that you will add value to the company, and time is no longer a measure. Thus, the emphasis on output/value becomes much stronger._\\n\\n## Office Work\\n\\nOffice also works.\\n\\n### Advantages\\n\\n
      \\n
    1. Enhanced company culture: Offices contribute to a shared sense of identity and mission.
    2. \\n
    3. Face-to-face collaboration: It allows for immediate interaction, fostering effective teamwork and problem-solving.
    4. \\n
    5. Social interaction: Offices provide opportunities for building relationships with coworkers, enhancing camaraderie.
    6. \\n
    7. Clear work-life boundaries: Physical office spaces establish separation between work and personal life.
    8. \\n
    9. Mentorship and learning: In-person environments facilitate mentorship and hands-on learning.
    10. \\n
    11. Improved supervision: Physical presence aids in monitoring performance and providing timely feedback.
    12. \\n
    \\n\\n### Disadvantages\\n\\n
      \\n
    1. Commuting and transportation issues: Office work often involves commuting, which can lead to time-consuming and stressful travel, traffic congestion, and transportation expenses.
    2. \\n
    3. Lack of flexibility: Office work typically follows a fixed schedule, leaving less room for personal flexibility or adjustments to achieve work-life balance.
    4. \\n
    5. Office politics: Office environments can sometimes involve office politics, conflicts, or gossip that can affect productivity and job satisfaction.
    6. \\n
    7. High overhead costs: Maintaining physical office spaces can be costly for organizations, including expenses related to rent, utilities, and office supplies.
    8. \\n
    9. Limited geographic talent pool: Offices are often location-dependent, which may restrict access to a diverse and global talent pool, potentially limiting the variety of skills and perspectives within a workforce.
    10. \\n
    11. Distractions and interruptions: Open office layouts or noisy work environments can lead to frequent interruptions, reducing focus and productivity.
    12. \\n
    \\n\\n### Conclusion\\n\\nOffice works. Most workers are used to office work, and there\u2019s a reason why it works so well, because it is easy for both the employee and the employer.\\n\\n**From the employee standpoint:** The routine of waking up, commuting, working for eight hours, commuting back, and then enjoying the evening is straightforward and requires minimal scheduling or organization. The job begins when the employee arrives at the office and ends when they leave. However, it\u2019s important to note that this fixed schedule does not necessarily guarantee peak performance throughout the entire workday.\\n\\nFor senior engineers, mentorship and learning opportunities may lead to context switching, disrupting deep focused work. What some refer to social interaction, can be perceived as wasting company resources. While supervision can raise the bar for average workers, top performers do not require constant supervision to excel. So if you\u2019re aiming for top performers, perhaps supervision isn\u2019t really necessary at all?\\n\\n**From the employer standpoint:** Leaders and managers may find it easier to have everyone in the office for quick communication and check-ins. However, relying on in-person communication may result in less documentation, which can be challenging for new joiners. Supervision becomes simpler as managers can track attendance and check on employees throughout the day, but this can also lead to time wasted for both the manager and the person being supervised. (Plus even that supervision allowed \u201cA day in a life of\u201d viral TikToks to highlighted inefficiencies).\\n\\n**In conclusion, I\u2019d say that your average worker will be better in the office, while your top performers will excel further in a remote environment.**\\n\\n> _The question is whether you prefer your top engineers to become 10x more productive working remotely or prefer your average engineers to improve performance by 2x. Personally, I prefer to aim for 10x productivity with top engineers and let go of average ones._\\n\\n## Hybrid Work\\n\\nOk, now that we\u2019ve discussed remote and office work, let\u2019s go over why hybrid work sucks.\\n\\nPeople in general tend to associate hybrid work with the best of remote and the best of office, but I think that the worst of remote and office have more emphasis. Let\u2019s go over the biggest pain points:\\n\\n
      \\n
    1. Decreased productivity: When compared with remote or office, hybrid has lower productivity. This is due to the context switching associated with changing working environments. Personally, I have experienced this and found it frustrating to work until late at night, packing up and thinking about what I needed to carry for the next day, plus commuting. The next day, it took me much longer to get back into the flow of work compared to waking up and immediately continuing with the problem at hand.
    2. \\n
    3. Decreased flexibility: Hybrid work offers less flexibility than remote work but somewhat more than office work. However, this flexibility is often constrained by company policies, such as designated office and remote days or specific rules regarding remote work. When the company dictates the days employees can work remotely, the flexibility becomes somewhat artificial.
    4. \\n
    5. Communication challenges: As mentioned earlier, one of the reasons that office communication is a sword of 2 edges is because while in-person communication can be effective and fast, it often results in less documentation, which can impact new joiners. In a hybrid culture, this issue is so much worse, because it\u2019s hard to get the company aligned into the amount of level of documentation necessary. Plus, when WFH days rotate across divisions and teams, individuals working remotely may suffer from a lack of context that is shared among the team in the office, leading to silos and communication gaps.In addition to that in remote work employees can and expect to have to accommodate for different time zones but when you move people to hybrid the ones that need to go to the office will no longer adjust their times to match the ones WFH based on needs.
    6. \\n
    7. Blurred work-life boundaries: Hybrid work blurs the line between work and personal life. It no longer solely involves working from home and spending time with family but also includes being at work, interacting with co-workers, and commuting. This blurring can make it difficult to establish clear boundaries.
    8. \\n
    9. Limited geographic talent pool: Since you want employees to commute to the office a certain number of times per week or month, you can\u2019t hire them from anywhere. The geographic scope of talent acquisition becomes restricted, potentially limiting access to diverse skills and perspectives.
    10. \\n
    11. Many more distractions: Individuals face distractions both at home when working remotely and in the office from co-workers. PLUS, you get the distractions that come from your co-workers bringing you up to speed if something happened when you weren\u2019t in the office the day before (similar to the additional amount of chit chat that happens on Mondays due to weekend).
    12. \\n
    13. Costs and commuting: You may save some money with some WFH, but often the WFH days don\u2019t even justify going into a lower tier than a monthly subscription to public transports. So you end up spending the same, even if you travel less. This argument is less valid here in the Bay area where most people drive. Plus commuting those 3/4 days a week, is still a pain.When we talk about the employer costs then it\u2019s impossible to get it right. On the one hand you have too few people in the office which means you are overpaying for office space, on the other hand you cannot get everyone in. And this will always be impossible with a growing team + managing the WFH days of each team and division.
    14. \\n
    15. Decreased employee retention and satisfaction: In general, people tend to lean towards either remote work or office work. With hybrid work, those who prefer the office environment may work in the office most days, using WFH as an opportunity for personal tasks and potentially being less productive. On the other hand, those who prefer remote work will aim to WFH as much as possible and may feel dissatisfied with having to go to the office for the remaining days This can create a divide and decrease overall employee satisfaction. Additionally, this is even more pronounced when everyone in the leadership works in the office, since the company tends to follow culture from leaders and will have less incentives to accommodate team members that are not in the office.
    16. \\n
    17. Challenges with supervision: Physical presence in the office often aids in monitoring performance, but it becomes challenging to fairly evaluate the performance of team members in the office versus those working remotely in a hybrid setup. What is the basis that you use to evaluate them? Based on what you see when they are in the office? Do you still create ways to evaluate their output when WFH? Do you still check on them as often when the rest of your team is with you in the office? What about when you are WFH and have half of the team in the office and the other WFH? The amount of complexity that comes from managing this by itself, almost makes hybrid the worst choice.
    18. \\n
    \\n\\n## Conclusion\\n\\nI\u2019m not saying that hybrid work can\u2019t work, but my point is that people tend to use hybrid as the perfect solution between office and remote, and I don\u2019t think it is. In fact, I think for most companies, this is a way to sweep a problem under the rug with a half-baked solution.\\n\\nAs an engineer, I wouldn\u2019t be happy working in an office because I know I could contribute much more to the company by working from home. I\u2019d be \u201cokay\u201d with doing hybrid work in order to continue working for the company, but I would probably start looking elsewhere due to all the aforementioned issues.\\n\\nAs a leader, OpenBB has started as a remote company, and as a result, we have become highly efficient at working remotely, even when dealing with a 9-hour time difference. All team members understand that they need to make compromises with their working hours to accommodate the company\u2019s needs. _So, it ultimately comes down to the type of team you are building and how committed they are to the mission, as well as how you can cultivate such a culture internally._\\n\\nIf your team grew accustomed to working in an office and had to switch to remote due to COVID, and you are noticing a decrease in performance, it may be that your team was not prepared to work remotely. In that case, it makes sense to go back to the office. However, if your team grew while working remotely, and you are not satisfied with their performance, let me tell you that bringing the team back to the office is a half-baked solution. Instead, it would be better to investigate the issue and implement better processes or address underperforming individuals."},{"id":"become-an-openbb-champion","metadata":{"permalink":"/blog/become-an-openbb-champion","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-06-10-become-an-openbb-champion.md","source":"@site/blog/2023-06-10-become-an-openbb-champion.md","title":"Become an OpenBB Champion","description":"Become an OpenBB Champion and join our passionate community. Share your experiences with our innovative products and help us democratize investment research through an open source approach.","date":"2023-06-10T00:00:00.000Z","formattedDate":"June 10, 2023","tags":[{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"OpenBB Champion","permalink":"/blog/tags/open-bb-champion"},{"label":"Investment Research","permalink":"/blog/tags/investment-research"},{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Community","permalink":"/blog/tags/community"}],"readingTime":2.325,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"become-an-openbb-champion","title":"Become an OpenBB Champion","date":"2023-06-10T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280555162-2846370c-0bf8-4694-98e8-90a5c291fa64.png","tags":["OpenBB","OpenBB Champion","Investment Research","Open Source","Community"],"description":"Become an OpenBB Champion and join our passionate community. Share your experiences with our innovative products and help us democratize investment research through an open source approach."},"prevItem":{"title":"Hybrid work sucks. It\u2019s worse than remote and office.","permalink":"/blog/hybrid-work-sucks-its-worse-than-remote-and-office"},"nextItem":{"title":"Streamline your OpenBB Terminal experience with OpenBB Hub","permalink":"/blog/streamline-your-openbb-terminal-experience-with-openbb-hub"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nBecome an OpenBB Champion and join our passionate community. Share your experiences with our innovative products and help us democratize investment research through an open source approach.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nDo you find yourself unable to live without one of OpenBB\u2019s innovative products? Have you pushed the boundaries of our tools and unlocked their full potential? If you answered yes, then this blog post is tailor-made for you!\\n\\nAt [OpenBB](https://openbb.co), we are actively seeking out [OpenBB Champions](https://my.openbb.co/app/hub/champions) \u2014 passionate community members who share our vision of democratizing investment research through an open source approach.\\n\\nWhether you utilize the [OpenBB Terminal](https://my.openbb.co/app/terminal) to streamline your investment research workflow, leverage the [OpenBB SDK](https://my.openbb.co/app/sdk) to create your own internal dashboards and notebooks, or employ the [OpenBB Bot](https://my.openbb.co/app/bot) to extract financial data within your finance community, we want to hear from you!\\n\\nTo qualify as an OpenBB Champion, you need to be an active user of one of our products and be willing to share your valuable experiences with our team. We\u2019re eager to learn more about your journey with OpenBB and how our products have transformed your workflow.\\n\\n

    \\n \\n

    \\n\\n
    \\n\\n**Where\'s what we would like to know:**\\n\\n- Your background\\n- How you heard about OpenBB\\n- Workflow transformation since incorporating OpenBB into your toolkit\\n- Your favorite OpenBB product\\n- Your favorite feature within that product\\n- Future expectations from us\\n- Your end goal \u2014 ultimate objective or milestone\\n\\nAs an OpenBB Champion, your contribution will not go unnoticed. Here are the benefits you\u2019ll receive:\\n\\n### Exposure\\n\\nYour testimonial will be prominently featured on OpenBB\u2019s website, social media channels, and other marketing materials. This exposure will introduce your expertise to a wider audience, increasing your visibility within the investment research community.\\n\\n### Recognition\\n\\nYou will be officially recognized as an OpenBB Champion, highlighting your commitment to innovation and industry-leading practices. This recognition can bolster your credibility and authority in your field of expertise.\\n\\n### Networking\\n\\nAs part of the OpenBB Champion community, you will have exclusive access to networking opportunities with like-minded individuals who share your passion for OpenBB\u2019s products. Forge meaningful connections, exchange ideas, and collaborate with fellow champions to amplify your impact.\\n\\n### Merchandise\\n\\nTo show our appreciation for your support, the OpenBB team will send you exclusive OpenBB merchandise. Wear it proudly and let others know that you are part of our journey.\\n\\n
    \\n\\nIf you meet the requirements and are enthusiastic about becoming an [OpenBB Champion](https://openbb.co/blog?type=champions), we invite you to reach out to us at hello@openbb.finance. Our team will coordinate a podcast session with you.\\n\\nWe look forward to hearing from you."},{"id":"streamline-your-openbb-terminal-experience-with-openbb-hub","metadata":{"permalink":"/blog/streamline-your-openbb-terminal-experience-with-openbb-hub","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-05-25-streamline-your-openbb-terminal-experience-with-openbb-hub.md","source":"@site/blog/2023-05-25-streamline-your-openbb-terminal-experience-with-openbb-hub.md","title":"Streamline your OpenBB Terminal experience with OpenBB Hub","description":"Streamline your OpenBB Terminal experience with OpenBB Hub. Learn about its key features, including API key management, data customization, personalization, and script management.","date":"2023-05-25T00:00:00.000Z","formattedDate":"May 25, 2023","tags":[{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"OpenBB Hub","permalink":"/blog/tags/open-bb-hub"},{"label":"Terminal","permalink":"/blog/tags/terminal"},{"label":"API Key Management","permalink":"/blog/tags/api-key-management"},{"label":"Data Customization","permalink":"/blog/tags/data-customization"},{"label":"Personalization","permalink":"/blog/tags/personalization"},{"label":"Script Management","permalink":"/blog/tags/script-management"}],"readingTime":3.605,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"streamline-your-openbb-terminal-experience-with-openbb-hub","title":"Streamline your OpenBB Terminal experience with OpenBB Hub","date":"2023-05-25T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280555078-abca5151-99f4-4c07-860f-6de8be85125c.png","tags":["OpenBB","OpenBB Hub","Terminal","API Key Management","Data Customization","Personalization","Script Management"],"description":"Streamline your OpenBB Terminal experience with OpenBB Hub. Learn about its key features, including API key management, data customization, personalization, and script management."},"prevItem":{"title":"Become an OpenBB Champion","permalink":"/blog/become-an-openbb-champion"},"nextItem":{"title":"OpenBB Terminal 3.0 - a new interactive way to analyze data","permalink":"/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-data"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nStreamline your OpenBB Terminal experience with OpenBB Hub. Learn about its key features, including API key management, data customization, personalization, and script management.\\n\\nThe open source code is available [here](https://github.com/openbb-finance/OpenBBTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nIf you\u2019re using the OpenBB Terminal, there\u2019s an essential component you shouldn\u2019t miss out on: the [OpenBB Hub](https://my.openbb.co/). In this blog post, we\u2019ll explore the significance of OpenBB Hub and why it truly matters for OpenBB users.\\n\\nBy delving into its key features, we\u2019ll uncover how OpenBB Hub elevates your experience with the OpenBB Terminal, providing you with enhanced capabilities and customization options. Let\u2019s dive in!\\n\\n## Login\\n\\nAs highlighted in our previous blog post [Introducing the OpenBB Hub](https://openbb.co/blog/introducing-the-openbb-hub), the OpenBB Hub is more than just a platform to access the OpenBB product ecosystem; it adds value to each individual product. Specifically, when it comes to the OpenBB Terminal, having an OpenBB Hub account offers tremendous advantages.\\n\\nNotably, the settings and features you configure within the hub persist across terminal updates and even when you log in from a new machine, allowing for a seamless and personalized experience.\\n\\n
    \\n \\n
    \\n\\n## Streamlining API key management\\n\\nA common question we receive is about the source of our data. OpenBB doesn\u2019t own any data; instead, we enable users to access data from various vendors by signing up for plans on their respective websites. This approach allows us to focus on platform development and data standardization while giving users the freedom to pay for the high-quality datasets they desire.\\n\\nPreviously, managing API keys was only accessible through the terminal CLI, which could be suboptimal. To alleviate this, we introduced the capability to manage API keys directly from a web page, reducing friction and putting the focus back on what matters most: access to data.\\n\\n
    \\n \\n
    \\n\\n## Enhanced data customization\\n\\nWith OpenBB Hub, you have the power to set default data sources, enabling you to choose the data vendor that aligns best with your needs for each command within the terminal. This flexibility empowers you to curate your preferred data sources, providing a tailored experience that optimizes your decision-making process.\\n\\n## Infuse personal style into your terminal\\n\\nOpenBB Hub lets you personalize your terminal by customizing its colors to your liking. From the command line interface menu to interactive tables and even charting colors, you have the freedom to create your own custom color scheme. Whether you prefer soothing pastel shades or bold neon colors, the choice is yours.\\n\\nThis feature not only adds a touch of personalization but also ensures a comfortable and visually pleasing experience, reducing eye strain during extended usage. Say goodbye to the standard white background and say hello to a terminal that reflects your unique style.\\n\\n## Effortless routine scripts management\\n\\nWe\u2019ve noticed a growing trend among our users: the development and adoption of routine scripts. These .openbb files contain OpenBB commands and allow users to save their investment research workflows, as well as share them with others.\\n\\nWhile OpenBB Hub provides access to pre-defined scripts developed by our team, which have been extensively used in academia, it also allows you to manage your own scripts. In the near future, we will introduce a community scripts page, fostering script sharing and discussions on individual use cases.\\n\\n
    \\n \\n
    \\n\\n## Final thoughts\\n\\nThe OpenBB Hub has become the central platform where we closely engage with the community, continuously striving to add value to your experience when utilizing our suite of products. We encourage you to share your feedback and ideas with us to help shape the future of OpenBB.\\n\\nJoin the OpenBB Hub today, and spread the word among your peers, so we can grow together and create an even more vibrant community.\\n\\nCheck out the OpenBB Hub user metrics [here](https://openbb.co/company/open?type=hub), and if you missed our recent webinar, you can catch up on all the exciting new features in the video below.\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nWith the [OpenBB Hub](https://my.openbb.co/), you unlock a world of possibilities."},{"id":"openbb-terminal-3-0-a-new-interactive-way-to-analyze-data","metadata":{"permalink":"/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-data","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-05-20-openbb-terminal-3-0-a-new-interactive-way-to-analyze-data.md","source":"@site/blog/2023-05-20-openbb-terminal-3-0-a-new-interactive-way-to-analyze-data.md","title":"OpenBB Terminal 3.0 - a new interactive way to analyze data","description":"A game-changing update to OpenBB Terminal, introducing interactive charts and tables, empowering users with a new way to analyze data.","date":"2023-05-20T00:00:00.000Z","formattedDate":"May 20, 2023","tags":[{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"OpenBB Terminal","permalink":"/blog/tags/open-bb-terminal"},{"label":"Interactive Charts","permalink":"/blog/tags/interactive-charts"},{"label":"Interactive Tables","permalink":"/blog/tags/interactive-tables"},{"label":"Data Analysis","permalink":"/blog/tags/data-analysis"},{"label":"Open Source","permalink":"/blog/tags/open-source"}],"readingTime":3.635,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"openbb-terminal-3-0-a-new-interactive-way-to-analyze-data","title":"OpenBB Terminal 3.0 - a new interactive way to analyze data","date":"2023-05-20T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280555000-742ced72-3eab-4412-9002-27265c937b04.png","tags":["OpenBB","OpenBB Terminal","Interactive Charts","Interactive Tables","Data Analysis","Open Source"],"description":"A game-changing update to OpenBB Terminal, introducing interactive charts and tables, empowering users with a new way to analyze data."},"prevItem":{"title":"Streamline your OpenBB Terminal experience with OpenBB Hub","permalink":"/blog/streamline-your-openbb-terminal-experience-with-openbb-hub"},"nextItem":{"title":"Leaving London to live in San Francisco","permalink":"/blog/leaving-london-to-live-in-san-francisco"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nA game-changing update to OpenBB Terminal, introducing interactive charts and tables, empowering users with a new way to analyze data.\\n\\nThe open source code is available [here](https://github.com/openbb-finance/OpenBBTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nNothing has changed, yet everything is different. A game-changing update empowering users with interactive charts and tables\\n\\nOur commitment to listening to user feedback and continuously improving our platform has led to a major update that will revolutionize the way you analyze data.\\n\\nOne of the main requests from our community has been regarding the interactivity of the charts and tables output by the [OpenBB Terminal](https://my.openbb.co/app/terminal). We are happy to say that we have delivered on this request with a complete overhaul of the terminal plotting library.\\n\\nNot only that, but our engineering team wasn\u2019t happy with the technical solutions available to bring interactivity to the terminal. So, in a true open-source fashion, the team built our own open-source library which will be announced soon.\\n\\n## Interactive charts\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nOne of the most significant additions in this update is the introduction of interactive charts. Gone are the days of static data representations.\\n\\nWith the OpenBB Terminal, you can now immerse yourself in a dynamic visual experience. Hover over specific data points to reveal detailed information, or effortlessly adjust the charts using intuitive pan and zoom capabilities. But that\u2019s not all \u2014 our drawing tools and annotations allow you to highlight crucial data points and ranges, giving you complete control over your analysis.\\n\\nThrough our user interviews, we discovered that many users faced challenges when overlaying financial time series. Taking this into account, we\u2019ve designed our new charting feature to make this process seamless. With the ability to easily overlay time series data and combine it with our powerful data exporting capabilities, OpenBB Terminal empowers you to perform in-depth analysis with unparalleled ease and precision.\\n\\n## Interactive tables\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nWe listened to our users\u2019 concerns about readability when dealing with large tables, and we have addressed these challenges head-on. The OpenBB Terminal now boasts interactive tables that are as aesthetically pleasing as they are functional.\\n\\nLeveraging our innovative open-source project, we have crafted a state-of-the-art table that is easy on the eyes and effortlessly responsive. Sorting, filtering, and manipulating table data has never been easier. This game-changing feature enables you to quickly and efficiently extract insights from vast amounts of data, enhancing your productivity and saving valuable time.\\n\\n## New fixed income menu\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nIn addition to the remarkable advancements in interactivity, we have squashed bugs and introduced a new Fixed Income menu. This means you now have access to an even wider range of data to fuel your analysis. OpenBB Terminal ensures that you are equipped with the right tools to gain a competitive edge in your investment research.\\n\\n## Wrap up - embrace the future of data analysis\\n\\nWe firmly believe that these new features will take your user experience to new heights and unlock a realm of possibilities for data analysis. Our dedicated team has poured countless hours into bringing these cutting-edge features to life, and we cannot wait to witness the impact they will have on your work.\\n\\nTo further amplify our commitment to open source, we will open source a powerful project that taps into web browser functionality from Python, opening up endless opportunities for developers and data enthusiasts.\\n\\nWe value your feedback and are eager to iterate on the OpenBB Terminal to ensure it meets your evolving needs. Reach out to us via email at hello@openbb.finance, Twitter, or Discord and let us know how we can enhance your experience further.\\n\\nIf you missed our exciting webinar unveiling these transformative features, fear not! We\u2019ve got you covered. Watch the video below to catch up and witness firsthand the incredible new capabilities our team has unleashed.\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nWelcome to a new era of data analysis with OpenBB Terminal. Get ready to explore, discover, and gain a competitive edge like never before."},{"id":"leaving-london-to-live-in-san-francisco","metadata":{"permalink":"/blog/leaving-london-to-live-in-san-francisco","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-05-13-leaving-london-to-live-in-san-francisco.md","source":"@site/blog/2023-05-13-leaving-london-to-live-in-san-francisco.md","title":"Leaving London to live in San Francisco","description":"Leaving London to live in San Francisco. A personal journey of relocating and starting a tech company in the heart of Silicon Valley.","date":"2023-05-13T00:00:00.000Z","formattedDate":"May 13, 2023","tags":[{"label":"San Francisco","permalink":"/blog/tags/san-francisco"},{"label":"London","permalink":"/blog/tags/london"},{"label":"Relocation","permalink":"/blog/tags/relocation"},{"label":"Visa Process","permalink":"/blog/tags/visa-process"},{"label":"Startup","permalink":"/blog/tags/startup"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"}],"readingTime":17.515,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"leaving-london-to-live-in-san-francisco","title":"Leaving London to live in San Francisco","date":"2023-05-13T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280554923-1efd7b64-e1cc-474d-b117-f1575a090b13.png","tags":["San Francisco","London","Relocation","Visa Process","Startup","OpenBB"],"description":"Leaving London to live in San Francisco. A personal journey of relocating and starting a tech company in the heart of Silicon Valley."},"prevItem":{"title":"OpenBB Terminal 3.0 - a new interactive way to analyze data","permalink":"/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-data"},"nextItem":{"title":"Fully free financial chatbot","permalink":"/blog/fully-free-financial-chatbot"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nLeaving London to live in San Francisco: A personal journey of relocating and starting a tech company in the heart of Silicon Valley.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n## Background\\n\\nI was born in Geneva, and when I was 8 years old, we moved back to Portugal, which is where my parents are originally from. After spending most of my teenage years in Portugal, I left sunny Lisbon \u2600\ufe0f to pursue a MSc. degree at Imperial College London \ud83d\udcbb. That\u2019s where I\u2019ve been living and working up until now. The main reasons behind my desire to move to San Francisco \u2600\ufe0f \ud83d\udcbb are the weather and the thriving tech ecosystem that surrounds it.\\n\\nDuring the Covid pandemic while in London, I took the opportunity to build my own [personal open source investment research platform](https://github.com/OpenBB-finance/OpenBBTerminal). This project allowed me to secure VC funding and establish a company called [OpenBB](https://openbb.co/). As the CEO of this company, I feel privileged to have the chance to make a lasting impact on the financial industry. Embracing this adventure and collaborating with individuals who are much smarter than I am is the least I can do for our team and for OpenBB.\\n\\nAs a first-time founder, I often find myself feeling slightly behind, which is why I\u2019m eager to absorb as much experience and knowledge as possible from other successful entrepreneurs. This is also why I managed to convince my wife and our dogs to join me in packing our bags and embarking on this journey into the unknown, much like my Portuguese ancestors did centuries ago \ud83d\udea2.\\n\\nNow, let\u2019s dive into what truly matters. This will be a lengthy ride, so make sure you\u2019re prepared for the journey ahead.\\n\\n## VISA\\n\\nFirst of all, you need to determine which visa you are eligible for in order to live and work in the US. You can find more information on this topic [here](https://travel.state.gov/content/travel/en/us-visas.html).\\n\\nIn my case, I decided to apply for an \u201cO-1 Visa: Individuals with Extraordinary Ability or Achievement\u201d and specifically highlighted my extraordinary ability in the field of Computer Science, specifically within the subfield of Automated Systems. It is crucial to specify a particular field to make the defense process smoother.\\n\\nI had the privilege of working with an exceptional immigration lawyer who assisted me in crafting my case, significantly increasing my chances of a successful approval. Here is a portion of the O-1 Petition that was submitted:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/809bc844-503c-42c0-a4fe-fe26a1944d17)\\n\\nAs you can see, there is quite a bit of paperwork required to support your case. In my situation, I needed the following documents: Curriculum Vitae, university grades, transcripts and diplomas, LinkedIn and GitHub profiles, posts that gained viral attention on platforms like Reddit and HackerNews, podcasts and conferences where I had spoken, projects that received online praise, any media coverage I had received, scholarly scientific publications, expert opinion letters, and even emails or direct messages from venture capitalists or professionals in the industry.\\n\\nEssentially, any relevant evidence is used to strengthen your case. For me, the most crucial elements were the expert opinion letters provided by our lead investor, former colleagues, or respected individuals in the field who were familiar with my work, as well as the research papers I had published and the media coverage I had received.\\n\\nOnce my O-1 visa was approved, I simply needed to take my passport to the US embassy in London to obtain the visa stamp. It\u2019s worth noting that if the wait time at the US embassy is lengthy, you have the option to visit another US embassy in another country where the process may be faster.\\n\\n## Arriving to the country\\n\\nI arrived in California on my own initially, with the plan for my wife and dogs to join me later. Thankfully, I had some contacts in California who provided me with their phone number and house address, which was helpful for getting settled. Since I didn\u2019t have a phone before finding an apartment, I had to rely on roaming data using my plan from the UK, which resulted in additional expenses.\\n\\nI would suggest either having a good deal for data roaming and international calls outside your country or obtaining a prepaid US phone. The latter is especially important if you\u2019re traveling alone because I often encountered registration forms that didn\u2019t accept foreign phone numbers.\\n\\nRegarding payments, I used my Revolut VISA card, which offers excellent foreign exchange rates for converting pounds to dollars. It\u2019s worth noting that I couldn\u2019t open a US bank account without a Social Security Number (SSN).\\n\\n### Social Security Number (SSN)\\n\\nIf you know someone in the US, it is advisable to apply for a Social Security Number (SSN) as soon as possible and provide their address and contact information if you don\u2019t have a US address of your own. An SSN is necessary for various purposes, and it may take up to two weeks for the card to arrive. When going to you nearest Social Security Administration (SSA) office, I would suggest arriving 30 minutes before opening hours to avoid long queues.\\n\\nTo apply for an SSN, you will need to bring the following documents to the SSA office: your passport, the I-797 form (O-1 visa approval notice), and the I-94 form (arrival record in the US).\\n\\n### Transportation\\n\\nI had the fortunate opportunity of having a friend lend me a car as soon as I arrived in California, and it made my life ten times easier. I highly recommend having something lined up in terms of transportation, as having a car enables you to get anywhere you need to go much more efficiently. To ensure I was covered, I simply needed to arrange car insurance. I opted for [Progressive](https://www.progressive.com/), and the process was quick and straightforward.\\n\\nWhile settling in, I occasionally relied on public transportation instead of driving, especially when traveling to the center of San Francisco. It took me some time to adjust to driving in the US, so public transport was a convenient alternative. If you plan on using public transportation services like BART or Caltrain, I suggest visiting [this website](https://www.iliveinthebayarea.com/knowledge-center/transit/) that provides information on available transportation options. It\u2019s also a good idea to purchase a [Clipper card](https://www.clippercard.com/), which allows you to load funds and easily tap it when boarding.\\n\\nAdditionally, if you anticipate passing through tolls, bridges, or utilizing the fast lane on the freeway, I recommend looking into acquiring a [Fastrack transponder](https://www.thetollroads.com/accounts/fastrak/transponder/) for a more seamless experience.\\n\\n## Finding an apartment\\n\\nApartment hunting proved to be quite stressful, considering that every day spent searching meant unnecessary expenses piling up while I still had my company to manage.\\n\\nUsing Uber for transportation was convenient and efficient, but the costs could add up quickly with multiple trips. To save money, I recommend scheduling house viewings on the same day in specific areas of interest and simply walking from one location to another.\\n\\nWhile dealing with lease agents, I encountered a mix of competence levels. Some were highly efficient, while others were less so. If you\u2019re genuinely interested in a particular apartment, it\u2019s important to exert some pressure to keep the process moving forward. Don\u2019t hesitate to call and inquire about updates.\\n\\nI was fond of the first house we saw, so I promptly paid $300, which covered certain fees. These fees were refundable if we decided not to proceed, but more importantly, they ensured that the house would be taken off the market. At this stage, both the agents and I wanted the process to move as quickly as possible. In our case, the target timeframe was three business days; if the process exceeded that, the house would be made available again.\\n\\nEven if you believe you\u2019ve found the perfect apartment, I still recommend continuing your search until the lease contract is signed. It\u2019s crucial to secure the apartment before assuming it\u2019s yours.\\n\\nBefore obtaining the keys, we had several tasks to complete: making the first payment, setting up utilities ([PG&E](https://www.pge.com/) for Gas and Electricity, and [Conservice](https://utilitiesinfo.conservice.com/) for water), providing proof of renter\u2019s liability insurance (I used [Assurant](https://assurantrenters.com/)\u2019s as it was conveniently associated with the community), and undergoing a pet screening (note that certain dog breeds are considered more dangerous and may not be accepted).\\n\\nMost importantly, my salary alone wasn\u2019t sufficient to guarantee that we could afford the rent. I needed a guarantor to vouch for me, as Europe does not have the concept of credit ratings.\\n\\nFortunately, our lead investor graciously agreed to be our guarantor when I asked him. Without someone fulfilling this role, I would have had to rely on a third-party service and pay several thousands of dollars, which would have been non-refundable and solely for the right to lease the house. This arrangement seemed rather illogical.\\n\\n## After the apartment\\n\\nI needed to notify [USCIS](https://www.uscis.gov/) of my new address since the last one on file was associated with the hotel where I was staying. I informed them that my new residence would be the updated address.\\n\\nFollowing that, my dogs flew from the UK using [Pets abroad UK](https://www.petsabroaduk.co.uk/). To save money, my wife didn\u2019t accompany them on the flight; instead, she arranged for them to be transported in the cargo hold of the airplane while I waited at the destination.\\n\\nHowever, I must admit that I didn\u2019t enjoy the experience, and in hindsight, I would have been willing to pay more for my dogs to have a better and safer flight. Although flying them from London, meant that unfortunately cargo was the option due to UK requirements. When I picked them up, they were visibly scared, and both my wife and I held our breath with worry throughout their entire journey. Our dogs\u2019 well-being was of utmost importance to us.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e9a09f5a-fd83-4c35-b442-ed17d23c6fc1)\\n\\nThe house was mostly empty, so to save money, we acquired a lot of second-hand items for free. It was beneficial to know people in the area who were aware of others with unused items stored in their garages, which we were able to take. To retrieve this furniture and other objects, we either needed to rent a U-Haul (which wasn\u2019t possible without a California driver\u2019s license) or hire a moving company.\\n\\nOur next task was to search for second-hand items at significant discounts on websites such as [Craigslist](https://sfbay.craigslist.org/), [Nextdoor](https://nextdoor.com/) and [Facebook Marketplace](https://www.facebook.com/marketplace). However, we had to be cautious of scammers and remember that if a deal seemed too good to be true, it probably was.\\n\\nOnce we had gathered most of the second-hand items, we visited [Home Depot](https://www.homedepot.com/) to paint and improve the newly acquired furniture. For the items we couldn\u2019t find second-hand, we made purchases at [Costco](https://www.costco.com/).\\n\\nWe highly recommend getting an executive membership at Costco as it provides great value for money. Additionally, the gas prices at Costco are significantly cheaper compared to other places we\u2019ve seen.\\n\\n### Wi-Fi + Mobile plan\\n\\nAfter securing an apartment, I used my passport to visit an [AT&T](https://www.att.com/) store. Since I didn\u2019t have my SSN yet, they were accommodating and allowed me to use my passport for identification. However, if you choose a different service provider like Xfinity, you will need your SSN. Before selecting a plan, it\u2019s important to check the coverage in your area to ensure that 4G/5G works well.\\n\\nInitially, I set up Wi-Fi through Xfinity, but then I used that as leverage to negotiate a discount with AT&T. This worked because I was interested in a double play package, which included two phone plans and Wi-Fi. As a result, I obtained an e-sim with unlimited 5G data for both myself and my wife, along with Wi-Fi for our home, at a cost of approximately $150 per month.\\n\\n### Shopping\\n\\nThere\u2019s going to be a big shock in terms of prices; at least, we experienced one. Life in the Bay Area is over 2x more expensive than London.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/0ef8efba-bdd4-487c-ac63-5585205f5427)\\n\\nSo, we started learning how to buy things at a lower cost. Whole Foods is not a viable option as it\u2019s one of the most expensive stores. The 10 items above cost $69.34 on Whole Foods.\\n\\nInstead, we now tend to shop at Safeway and always try to time our visits to take advantage of discounts. Many shopping places offer coupons that can help you save a lot of money. Additionally, when you come across products on sale, it\u2019s better to buy them in larger quantities as it\u2019s usually worth it.\\n\\nMy wife is also a big fan of Trader Joe\u2019s with the prices there being quite reasonable too. They also have a great selection of cheeses which is a must being from Europe.\\n\\n## After obtaining an SSN\\n\\nAfter you obtain your SSN, there are a lot of new things that you are able to do since you are recognized as a \u201cperson.\u201d\\n\\n### Bank account\\n\\nCredit cards are recommended over debit cards, not just because of the security benefits, but also because of the credit rating associated with them. This is a concept that doesn\u2019t really exist in Europe but is significant in the US. Your credit score will determine whether you are approved for a loan and what interest rate you will be charged.\\n\\nThe agencies that handle your credit score are [Equifax.com](http://equifax.com/), [TransUnion.com](http://transunion.com/) and [Experian.com](http://experian.com/). It\u2019s free to register, and you should keep an eye on your credit files to ensure that your credit score doesn\u2019t decrease for any reason.\\n\\nWe ended up opening an account with [Bank of America](https://www.bankofamerica.com/). However, since we didn\u2019t have a credit score yet, we couldn\u2019t get a regular credit card. Instead, we had to apply for a secured credit card, where the maximum spending limit is determined by the amount of cash we use to back the credit card.\\n\\nWe also applied for an [AMEX card](https://www.americanexpress.com/us/credit-cards/card/blue-cash-everyday/?eep=26129&irgwc=1&veid=39E0XuRS3xyNT4BTy33WSUXYUkAwp0Tx32Qt0c0&affid=1193684&pid=IR&affname=NerdWallet%2C+Inc.&sid=14011830016&pmc=795&BUID=CCG&CRTV=controlaffcps&MPR=03) because [American Express](https://www.americanexpress.com/) has a partnership with the international credit-reporting startup Nova Credit. This allows immigrants to instantly translate credit reports from the UK to U.S.-equivalent credit reports when applying for AmEx consumer cards. However, it\u2019s important to note that AMEX cards are less widely accepted compared to VISA and MasterCard, so we were aware that they would only work in certain establishments.\\n\\nFor more information, these video were extremely helpful:\\n\\n- [Building credit and keeping yours healthy](https://bettermoneyhabits.bankofamerica.com/en/credit/building-credit)\\n- [How to build credit from scratch](https://bettermoneyhabits.bankofamerica.com/en/credit/start-building-credit)\\n- [Top 3 credit questions](https://bettermoneyhabits.bankofamerica.com/en/credit/top-credit-questions)\\n\\n### Car\\n\\nIt was now time for us to buy a car. We searched online for a few options. There are two things worth considering when buying a used car, as we did:\\n\\n- Firstly, you can use [https://www.kbb.com/car-values/](https://www.kbb.com/car-values/) to research the value of the car. This ensures that you don\u2019t get ripped off and provides an estimate of how much the car is worth based on the details you provide.\\n- Secondly, you can use [https://www.carfax.com/](https://www.carfax.com/) to research a car and its license plate. This helps you understand its accident history and any repairs it has undergone. It provides information about whether there have been major accidents in the car\u2019s history, frequent visits to the mechanic, and whether the repairs were done by authorized mechanics (e.g., BMW) or not.\\n\\nIf you prefer to play it safe, you can even bring a mechanic with you to the dealership to assess the car\u2019s condition.\\n\\nWe spoke with individuals, but ultimately decided to buy a car from a dealership because it offered fewer risks compared to buying from individuals. Moreover, the dealership took care of updating the vehicle records, ensuring that the vehicle would be registered under our name. This allowed us to update our car insurance with the Vehicle Identification Number (VIN) of the new vehicle.\\n\\nAfter a few months, we received the California Certificate of Title, which confirmed that I was the legal owner of the vehicle and included important vehicle identification information. Since this was my first car, I had to add an OpenBB reference to the front plate :)\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/8e786af6-b965-404f-a37d-47e5faeebedd)\\n\\nShoutouts to:\\n\\n- [Jiffy Lube](https://www.jiffylube.com/) for their car inspection services, tire inflation, oil changes, and more. They don\u2019t charge for the inspection and only charge for the services performed on the car. We had a great experience with them.\\n- [Costco gas station](https://www.costco.com/gasoline.html) for the cheapest gas we\u2019ve found so far.\\n\\n### Health Insurance\\n\\nCalifornia offers a portal called [Covered California](https://www.coveredca.com/), which provides state-approved health plans from various insurance companies. If your income is low, the state can subsidize your monthly premium. These plans fall into three categories, each with differences in costs and provider networks:\\n\\n
      \\n
    1. HMOs (Health Maintenance Organizations): Typically cheaper than PPOs, HMOs have smaller networks. You need to see your primary care physician before getting a referral to a specialist.
    2. \\n
    3. PPOs (Preferred Provider Organizations): Usually more expensive, PPOs offer a larger network and the ability to see providers outside of the network. You can also see specialists without a referral.
    4. \\n
    5. EPOS (Exclusive Provider Organizations): EPOS plans combine features of HMOs and PPOs. They have exclusive networks like HMOs, making them generally less expensive. However, you can make your own appointments with specialists, similar to PPOs.
    6. \\n
    \\n\\nIn our case, we chose an HMO called Kaiser. [Kaiser](https://healthy.kaiserpermanente.org/northern-california/front-door) is a not-for-profit, all-inclusive healthcare company with its own doctors and hospitals. When selecting the plan within Kaiser, we had to choose between Bronze, Silver, and Gold tiers. These tiers are influenced by three main factors:\\n\\n
      \\n
    1. Monthly premium: The amount you pay each month for health plan coverage. It may be subsidized based on your income and household size.
    2. \\n
    3. Annual deductible: The amount you must pay before your plan starts covering services.
    4. \\n
    5. Annual maximum out-of-pocket: The total amount you pay in a calendar year (in addition to monthly premiums) for most services covered by your health care plan.
    6. \\n
    \\n\\n### California Driving License\\n\\nThe Department of Motor Vehicles (DMV) is responsible for vehicle registrations and driving licenses in California. When you arrive in California, you can use a foreign driving license for only 10 days, after which you must obtain a California Driving License (CDL).\\n\\nTo apply for the CDL, you can start the process online by completing the driver\u2019s license application on the [DMV website](https://www.dmv.ca.gov/portal/). This online application saves time by allowing you to fill it out before visiting a DMV field office.\\n\\nWhen you visit the DMV, the employees will review your completed application and request certain documents, including:\\n\\n- Social Security Number (SSN)\\n- Unexpired foreign passport with a valid U.S. visa\\n- Approved I-94 form\\n- Bank and financial institution records\\n- Insurance documents\\n\\nAfter submitting the required documents, you will have your picture taken and then proceed to take the written driving test. It\u2019s advisable to practice for the test in advance. As I have many years of driving experience, I personally used practice tests available at [https://www.dmv-written-test.com/california/practice-test-1.html](https://www.dmv-written-test.com/california/practice-test-1.html).\\n\\nA few days later, I returned to the DMV to take the written test. The test consists of 36 multiple-choice questions, and you are allowed to fail up to 6 questions. You will immediately know whether you passed or not.\\n\\nUpon passing the written test, you will receive a document that allows you to schedule your driving exam. It is recommended to book the exam as soon as possible, as available slots may be several weeks away due to high demand.\\n\\nOn the day of the driving exam, you will need to bring someone who holds a CDL, the document provided after passing the written exam, and your passport.\\n\\nThe driving exam evaluates your performance, and you will receive a score sheet outlining the criteria and aspects that will be assessed during the exam. This will give you an idea of what to expect and what the examiners will be evaluating.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/8c5ebcd4-8c8c-4f9c-b4d2-7f5364be08d1)\\n\\nAfter successfully passing the driving exam, the DMV will issue you a temporary document that serves as your California Driving License (CDL). This temporary document will allow you to legally drive while you wait for your physical CDL to be sent to you by mail.\\n\\nIt typically takes a few months for the physical CDL to be processed and mailed to your designated address. During this time, you can use the temporary document as proof of your driving privileges in California. Once you receive the physical CDL, you should carry it with you whenever you are driving.\\n\\nIt\u2019s important to note that the temporary document and the physical CDL have the same validity and serve as official proof of your driver\u2019s license status.\\n\\n## Final thoughts\\n\\nI\u2019ve moved countries a few times within Europe, and those moves were much easier than moving to the USA.\\n\\nNonetheless, I think you can get settled within 3 months of moving to the country. So far, we are really enjoying our experience and can\u2019t wait to explore more of the area.\\n\\nIf you are looking to do the same and want some feedback, feel free to reach out. It helped us a lot to have people who could help us with the move, so I\u2019d love to be able to do the same for others."},{"id":"fully-free-financial-chatbot","metadata":{"permalink":"/blog/fully-free-financial-chatbot","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-05-09-fully-free-financial-chatbot.md","source":"@site/blog/2023-05-09-fully-free-financial-chatbot.md","title":"Fully free financial chatbot","description":"The OpenBB Bot is a financial chatbot that allows you to access financial data from Discord or Telegram along with other users. From equity data to crypto, options, darkpool, economy and much more! Now available for free to registered users.","date":"2023-05-09T00:00:00.000Z","formattedDate":"May 9, 2023","tags":[{"label":"OpenBB Bot","permalink":"/blog/tags/open-bb-bot"},{"label":"Financial Chatbot","permalink":"/blog/tags/financial-chatbot"},{"label":"Investment","permalink":"/blog/tags/investment"},{"label":"Free","permalink":"/blog/tags/free"},{"label":"Discord","permalink":"/blog/tags/discord"},{"label":"Telegram","permalink":"/blog/tags/telegram"},{"label":"Equity","permalink":"/blog/tags/equity"},{"label":"Crypto","permalink":"/blog/tags/crypto"},{"label":"Options","permalink":"/blog/tags/options"},{"label":"Darkpool","permalink":"/blog/tags/darkpool"},{"label":"Economy","permalink":"/blog/tags/economy"}],"readingTime":1.855,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"fully-free-financial-chatbot","title":"Fully free financial chatbot","date":"2023-05-09T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280554646-7c937b83-3087-4bf9-8c06-27f7e042ad04.png","tags":["OpenBB Bot","Financial Chatbot","Investment","Free","Discord","Telegram","Equity","Crypto","Options","Darkpool","Economy"],"description":"The OpenBB Bot is a financial chatbot that allows you to access financial data from Discord or Telegram along with other users. From equity data to crypto, options, darkpool, economy and much more! Now available for free to registered users."},"prevItem":{"title":"Leaving London to live in San Francisco","permalink":"/blog/leaving-london-to-live-in-san-francisco"},"nextItem":{"title":"Free investment research ecosystem to consistently beat the market","permalink":"/blog/free-investment-research-ecosystem-to-consistently-beat-the-market"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThe OpenBB Bot is a financial chatbot that allows you to access financial data from Discord or Telegram along with other users. From equity data to crypto, options, darkpool, economy and much more! Now available for free to registered users.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nWe know the market conditions haven\u2019t been great for anyone, particularly for investors. Instead of raising prices like trends, we have decided to offer our [OpenBB Bot](https://my.openbb.co/app/bot) individuals tier for free if you are a registered user.\\n\\n## What does this mean\\n\\nRegistered users for OpenBB Bot will see the following changes:\\n\\n- Users were limited to 100 options or dark pools commands per month. This limitation is completely removed.\\n- Users will no longer experience a 10s cooldown which means they can request investment research data sequentially and avoid breaking the conversation due to a delay imposed by the product\\n- Through our soon-to-be-announced new platform, you will be able to fully customize your charting style with up to 5 in chart technical indicators and 2 off charts. This is a big improvement over the 1 in chart and 1 off chart previously available.\\n- The number of custom alerts that the user can set for when certain threshold values are triggered has increased, from 3 to 10.\\n- Users can now set 10 watchlist tickers to pay close attention to and access data regarding them.\\n\\nBelow is a video of what the OpenBB Bot is capable of:\\n\\n![1_d1vD4AkwpYk42tdbHuMupQ](https://github.com/DidierRLopes/my-website/assets/25267873/b72852e8-ec33-4ec0-aa0e-6ea6290e3e20)\\n\\nThe interactive charts will open up within the [OpenBB Hub](https://my.openbb.co/) and in it you will be able to fully customize the technical analysis indicators that you see on the chart and even the candle chart color theme and type. A demo is shown below,\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nLike dozens of thousands of investors, join the OpenBB Hub so you can fully leverage the [OpenBB Bot](https://my.openbb.co/app/bot).\\n\\nYou can actually see how many users we have utilizing the bot on a daily basis on our [/open page](https://openbb.co/company/open/bot).\\n\\nWhile others zig, we zag. Here\u2019s the updated pricing:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/7c937b83-3087-4bf9-8c06-27f7e042ad04)\\n\\nLooking forward to feedback!"},{"id":"free-investment-research-ecosystem-to-consistently-beat-the-market","metadata":{"permalink":"/blog/free-investment-research-ecosystem-to-consistently-beat-the-market","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-05-05-free-investment-research-ecosystem-to-consistently-beat-the-market.md","source":"@site/blog/2023-05-05-free-investment-research-ecosystem-to-consistently-beat-the-market.md","title":"Free investment research ecosystem to consistently beat the market","description":"The OpenBB Hub is a comprehensive platform for managing all products, data, subscriptions, and content for users, aiming to empower investors globally with tools previously exclusive to institutions.","date":"2023-05-05T00:00:00.000Z","formattedDate":"May 5, 2023","tags":[{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"Investment Research","permalink":"/blog/tags/investment-research"},{"label":"OpenBB Terminal","permalink":"/blog/tags/open-bb-terminal"},{"label":"OpenBB Bot","permalink":"/blog/tags/open-bb-bot"},{"label":"OpenBB SDK","permalink":"/blog/tags/open-bb-sdk"},{"label":"OpenBB Hub","permalink":"/blog/tags/open-bb-hub"}],"readingTime":5.945,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"free-investment-research-ecosystem-to-consistently-beat-the-market","title":"Free investment research ecosystem to consistently beat the market","date":"2023-05-05T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280554509-bb80a9fd-e616-4c9f-b3e3-e123a3034e24.png","tags":["OpenBB","Investment Research","OpenBB Terminal","OpenBB Bot","OpenBB SDK","OpenBB Hub"]},"prevItem":{"title":"Fully free financial chatbot","permalink":"/blog/fully-free-financial-chatbot"},"nextItem":{"title":"The role of AI and OpenBB in the future of investment research","permalink":"/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-research"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThe OpenBB Hub is a comprehensive platform for managing all products, data, subscriptions, and content for users, aiming to empower investors globally with tools previously exclusive to institutions.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThe OpenBB Hub is the new one-stop-shop for managing all products, data, subscriptions, and content for users!\\n\\n## Introduction\\n\\nWhen we started this journey, we always wanted to empower investors across the globe to have access to tools previously only available to institutions.\\n\\nWe started by building the [OpenBB Terminal](https://my.openbb.co/app/terminal) which is an open source investment research platform that users can customize as they see fit and build on top of.\\n\\nIf you haven\u2019t starred the repo, now is a good chance to do so [here](https://github.com/OpenBB-finance/OpenBBTerminal) \u2b50\ufe0f.\\n\\nThen, we wanted to address the social nature of investing. Instead of adding the chat functionality to OpenBB Terminal, we brought investment research data where these communities were already having fruitful discussions (Discord and Telegram). This makes much more sense from a user-convenience standpoint, and that\u2019s how the OpenBB Bot was born. More information [here](https://my.openbb.co/app/bot).\\n\\nAs much customization as the OpenBB Terminal allowed, we didn\u2019t give creators as much freedom as we could have since they would need to download the source code of the terminal in order to leverage our core.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/bb80a9fd-e616-4c9f-b3e3-e123a3034e24)\\n\\nBut we we wanted to make this experience as seamless as possible so users could build on top of our foundation. Thus, we repurposed the core of the OpenBB Terminal into an OpenBB SDK that is \u201c_pip installable_\u201d from everywhere \u2014 [OpenBB](https://pypi.org/project/openbb/) . This means that all you need to have access to a universe of investment research data programmatically is python and running pip install openbb within a notebook.\\n\\nThis was a big win since the community reaction was very positive and we are now seeing it adopted by investors, educational courses, and even content creators. So much that we even created a tab to keep track of these on our [/open page](https://openbb.co/open).\\n\\nHowever, we focused too much on the products and didn\u2019t slow down to think about the user experience utilizing multiple OpenBB products. This is where OpenBB Hub comes into play. [OpenBB Hub](https://my.openbb.co/) is the platform we use to interact with our community, push OpenBB content, allow product management, and much more.\\n\\nTL;DR:\\n\\n- Allows to manage your OpenBB Terminal API keys, feature flags and settings. In addition, we allow users to save & share their openbb script routines\\n- Allows access to the OpenBB Terminal installer new versions\\n- Allows access to the OpenBB Bot dashboard \u2014 which allows fully customization from a user perspective. This improves your experience by 10x when using OpenBB Bot on Telegram or Discord.\\n- Allows to sign-up for early waitlist of OpenBB Terminal Pro\\n\\n## OpenBB Hub - OpenBB Terminal\\n\\nSince the beginning users have installed the OpenBB Terminal in multiple desktops due to its free nature. The issue? The API key management was a pain since there was not a way to sync these across different machines. Until now.\\n\\nWith [OpenBB Hub](https://my.openbb.co/) and using that account detail to log in the terminal, this problem gets fixed. Not only that, but users will benefit from default data sources, terminal color schema customization and even .openbb routines being manageable from Hub and more importantly accessible on a terminal instance as long as they login with their user details.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e6a2e177-ee76-4871-a534-c5002a2bfb96)\\n\\n## OpenBB Hub - OpenBB Bot\\n\\nToday we are also announcing the OpenBB Bot will be fully free for individuals. All you have to do is to register for the [OpenBB Hub](https://my.openbb.co/).\\n\\nFor users that were already users of our OpenBB Bot, the only change on the platform is pricing and an increase push towards better documentation and more tutorials. This is an initiative that we are taking company-wide to focus on better documentation and more content to fully leverage our suite of products.\\n\\nOpenBB bot is critical to us as we work hard towards making a full ecosystem for investment research. And now you can access this experience for free, and share investment research data with your friends / colleagues.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b444e233-f862-41f3-b1ae-2f1dac517d47)\\n\\n## OpenBB Hub - OpenBB SDK\\n\\nAs the OpenBB SDK is in its core a pip installable package with its [own page on PiPy](https://pypi.org/project/openbb/) there aren\u2019t a lot of functionalities that we can make available in this page. We allow the user to set their API keys similarly to what we do in the Terminal, to improve UX when utilizing the SDK.\\n\\nIn addition, we are going to display open source projects built by the community that leverage our core so that they can serve as an inspiration to you. If you are working on something that uses OpenBB at its core, tag your GitHub repository with \u201copenbb\u201d and we\u2019ll add you to the list of projects that rely on our foundation.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/2d1300f0-4c3d-45d8-af6d-bfe8125a28d6)\\n\\n## OpenBB Hub - OpenBB Terminal Pro (waitlist)\\n\\nIf all these features weren\u2019t enough, we have decided to open the [OpenBB Terminal Pro WAITLIST](https://my.openbb.co/app/pro/early-access) for users who register on our OpenBB Hub.\\n\\nThe OpenBB Terminal Pro is something that has been months in the works and is yet our most exciting product to date. We have been holding back on it because we believe this will change the way investors think about investing. This time we worked with design partners and had dozens of user interviews from financial professionals to understand their pain points and what role we could fill. So even being able to start creating a waitlist around it is something that the team is very excited about.\\n\\nWe will gradually roll out the OpenBB Terminal Pro to a few users from the waitlist to get early feedback.\\n\\nIf you are one of these, I look forward to onboarding you personally \ud83e\udd1d\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/0cec32eb-c5ab-4765-9c21-6c13943874db)\\n\\n## Final thoughts\\n\\nAlthough OpenBB Hub is not a product per se, the amount of work that the team put together to make this happen is something nothing short of extraordinary. This was the first project where the entire team (~20 people from engineering, product, design and marketing) had to work together as whole.\\n\\nThe OpenBB Terminal dashboard is completely new, the concept of login had to be invented and needed to function perfectly with the Hub. The SDK page is also new. The OpenBB Bot dashboard already existed, but we made the tier for individuals completely free, so we had to update it to reflect that big pricing change. And finally, we open the OpenBB Terminal Pro waitlist.\\n\\nThe [OpenBB Hub](https://my.openbb.co/) is completely free.\\n\\nAll you have to do is to register so we can know more information about yourself regarding your primary usage for our products (professional, academic, personal) \u2014 this allows us to understand what features to prioritize in the future and improve the quality of our products.\\n\\nIn case you missed the webinar, you can view it below so that you are up-to-date with all the exciting new features that the team has released.\\n\\n
    \\n \\n
    \\n\\n
    "},{"id":"the-role-of-ai-and-openbb-in-the-future-of-investment-research","metadata":{"permalink":"/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-research","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-04-03-the-role-of-ai-and-openbb-in-the-future-of-investment-research.md","source":"@site/blog/2023-04-03-the-role-of-ai-and-openbb-in-the-future-of-investment-research.md","title":"The role of AI and OpenBB in the future of investment research","description":"How OpenBB can lead the future of finance using AI on top of an open source investment research platform.","date":"2023-04-03T00:00:00.000Z","formattedDate":"April 3, 2023","tags":[{"label":"OpenAI","permalink":"/blog/tags/open-ai"},{"label":"future","permalink":"/blog/tags/future"},{"label":"ChatGPT","permalink":"/blog/tags/chat-gpt"},{"label":"Discord","permalink":"/blog/tags/discord"}],"readingTime":3.655,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"the-role-of-ai-and-openbb-in-the-future-of-investment-research","title":"The role of AI and OpenBB in the future of investment research","date":"2023-04-03T00:00:00.000Z","image":"https://github.com/DidierRLopes/my-website/assets/25267873/ed54bfac-5457-43a3-9235-b7f1ad46321f","tags":["OpenAI","future","ChatGPT","Discord"],"description":"How OpenBB can lead the future of finance using AI on top of an open source investment research platform."},"prevItem":{"title":"Free investment research ecosystem to consistently beat the market","permalink":"/blog/free-investment-research-ecosystem-to-consistently-beat-the-market"},"nextItem":{"title":"How I Used OpenAI API to improve our product documentation","permalink":"/blog/how-i-used-openai-api-to-improve-our-product-documentation"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nHow OpenBB can lead the future of finance using AI on top of an open source investment research platform.\\n\\nThe open source code is available [here](https://github.com/openbb-finance/OpenBBTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n## Introduction\\n\\nThis blogpost won\'t speak about what the OpenBB Terminal can offer today. Instead, we are going to share where we think AI can play a role in the future of investment research, and how through an open source platform, we can lead that wave.\\n\\nA lot of this blog is based on the fact that the OpenBB Terminal is an open source investment research platform, and therefore it\'s very relevant to read [our blogpost about why we are open source](/blog/why-the-need-for-an-open-source-investment-research-platform).\\n\\nNote: This blogpost will share several proof-of-concepts that are still within R&D and are not yet ready for production. Also, this blogpost will assume that you are aware of LLMs such as ChatGPT and WhisperAI.\\n\\n## ChatGPT as the interface\\n\\nAn edge that incumbents have is the fact that they have been around for a very long time and spent a lot on educating users about their product. As a result, users are used to their platform. This makes it harder for users to switch to an unknown product, meaning they need to be 10x better than the competition for them to do so.\\n\\nHowever, what if there was no learning curve? What if you could use a product for the first time and know how to access all the information you wanted without spending any time reading the documentation? In essence, the educational incumbent advantage would become obsolete.\\n\\nWith the new LLM advancements, such as ChatGPT. We are not far from this reality. Below is a proof-of-concept of what this could look like:\\n\\n
    \\n \\n
    \\n\\nPlus, if this is built on top of an open source project it means that the community can help in improving the model by providing more training data (e.g. provide a text as input and the corresponding command as output) or even confirm whether or not the chart that pops up was accurate.\\n\\nIn addition, along with data sources you can imagine that the community could start contributing with new languages for the GPT model. This makes using a new investment research platform easy, but more importantly makes retrieving information much faster and efficient.\\n\\nThe screenshot below shows that ChatGPT can accurately return the right OpenBB command when the user requests a certain type of data, as long as the model can be trained on our documentation:\\n\\n![image](https://cdn-images-1.medium.com/max/1600/1*IWnSMNhHDyiulxri_hEB0g.png)\\n\\nEDIT: Bloomberg introduced [BloombergGPT](https://openai.com/research/whisper) last week, and the following screenshot is taken from their research paper which validates the argument above.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/04734b1f-3fa9-4d30-86b3-1ea81b73983c)\\n\\n## WhisperAI as the interface\\n\\nIf we go one step further, instead of relying on text as input, the platform could rely on voice. With models such as [WhisperAI](https://www.bloomberg.com/company/press/bloomberggpt-50-billion-parameter-llm-tuned-finance) we will be able to speak with the platform in order to retrieve financial data.\\n\\nBelow is a proof-of-concept showing how you can retrieve this data through voice.\\n\\n
    \\n \\n
    \\n\\nOne of the advantages of an automatic speech recognition (ASR) system is the fact that it doesn\'t rely solely on english and therefore, it would welcome people from all over the world to interact with the platform. Note: WhisperAI is open source and you can find more information on it [here](https://github.com/openai/whisper).\\n\\n## GPT to build investment research reports\\n\\nOne of the new features that was announced with the [OpenBB Terminal 2.0](https://openbb.co/blog/openbb-terminal-2-acai) was the automated reports generation that utilizes [Netflix\'s papermill](https://netflixtechblog.com/notebook-innovation-591ee3221233) to leverage jupyter notebook templates.\\n\\n
    \\n \\n
    \\n\\nAs it stands creating one of these notebook templates requires some coding skills and reading [OpenBB documentation](https://docs.openbb.co) to understand how to retrieve the data of interest providing the correct function and necessary arguments.\\n\\nBut, for a second, imagine if you could build these notebook templates with almost no-code?\\n\\nThe proof-of-concept below in combination with the automated report generation should allow you to further understand the breakthrough that we may accomplish in the future.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/cd04a141-1ce6-4a20-80c5-f697ce83979d)\\n\\nMy prediction is that open source + AI will disrupt the financial sector in the upcoming years, and OpenBB will be leading that wave."},{"id":"how-i-used-openai-api-to-improve-our-product-documentation","metadata":{"permalink":"/blog/how-i-used-openai-api-to-improve-our-product-documentation","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-04-01-how-i-used-openai-api-to-improve-our-product-documentation.md","source":"@site/blog/2023-04-01-how-i-used-openai-api-to-improve-our-product-documentation.md","title":"How I Used OpenAI API to improve our product documentation","description":"In this blog post, I share how I used the OpenAI API to improve our product documentation. I used ChatGPT to generate more detailed descriptions for our OpenBB Bot Discord commands, making them more understandable for new users.","date":"2023-04-01T00:00:00.000Z","formattedDate":"April 1, 2023","tags":[{"label":"OpenAI","permalink":"/blog/tags/open-ai"},{"label":"API","permalink":"/blog/tags/api"},{"label":"Product Documentation","permalink":"/blog/tags/product-documentation"},{"label":"ChatGPT","permalink":"/blog/tags/chat-gpt"},{"label":"Discord","permalink":"/blog/tags/discord"},{"label":"OpenBB Bot","permalink":"/blog/tags/open-bb-bot"}],"readingTime":1.915,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-i-used-openai-api-to-improve-our-product-documentation","title":"How I Used OpenAI API to improve our product documentation","date":"2023-04-01T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280554411-32a1e101-4357-4a0a-852c-d184ad6a7104.png","tags":["OpenAI","API","Product Documentation","ChatGPT","Discord","OpenBB Bot"],"description":"In this blog post, I share how I used the OpenAI API to improve our product documentation. I used ChatGPT to generate more detailed descriptions for our OpenBB Bot Discord commands, making them more understandable for new users."},"prevItem":{"title":"The role of AI and OpenBB in the future of investment research","permalink":"/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-research"},"nextItem":{"title":"How to get hired by an exciting tech startup in 2023","permalink":"/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blog post, I share how I used the OpenAI API to improve our product documentation. I used ChatGPT to generate more detailed descriptions for our OpenBB Bot Discord commands, making them more understandable for new users.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/improve-documentation-using-openai).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThe [documentation](https://docs.openbb.co/bot/reference/discord) of our free OpenBB Bot was pretty simplistic for most of the commands.\\n\\nFor instance, the description for the command `/dp alldp` was: \\"Last 15 Darkpool Trades\\", as seen below:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/faf4a1e1-a5b5-4aeb-aec4-cd69c29842a7)\\n\\nFor more experienced traders, this may be enough. But for new users, these 4 words may not mean much.\\n\\nFor context, this is the output that a user would get if running `/dp alldp` on our [Discord server](https://openbb.co/discord).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/5752d06d-0515-46df-aeda-1425c79e7d2c)\\n\\nSo I talked with someone in our team about improving the documentation. Not only for the new users that wanted to utilize our free product but also so that we could train our own LLM on this better dataset.\\n\\nOver the weekend I had the idea: What if I provided ChatGPT with the current description and an example of how to use the command and asked it to provide a more detailed description?\\n\\nSo the next step was to try whether ChatGPT would indeed improve the current documentation.\\n\\nAfter a bit of prompt tweaking, I got a much better description than the one we currently had. See below:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/212114a0-033e-4f7d-98dc-ef22ee318227)\\n\\nThe next step was rather straightforward. I created a script that iterated [through all our OpenBB Bot Discord documentation](https://github.com/OpenBB-finance/OpenBBTerminal) files and updated the old description with a more detailed one.\\n\\nThis is the template prompt that I used:\\n\\n> _Context: You are a developer writing a detailed documentation for a function that allows the user to retrieve {desc} utilizing the command {example} how would you explain what this command does in a single paragraph\u201d_\\n\\nWhere **desc** and **example** corresponds to the current description and example that each of our commands have, respectively.\\n\\nThe results can be seen below (done on [this PR](https://github.com/OpenBB-finance/OpenBBTerminal/pull/4657)),\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/32a1e101-4357-4a0a-852c-d184ad6a7104)\\n\\nAs usual, I open source the script [here](https://github.com/DidierRLopes/improve-documentation-using-openai).\\n\\nThe funny thing is that I used an LLM output to improve our documentation. And we may use this data to train our own LLM.\\n\\nLLM-ception?"},{"id":"how-to-get-hired-by-an-exciting-tech-startup-in-2023","metadata":{"permalink":"/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-01-22-how-to-get-hired-by-an-exciting-tech-startup-in-2023.md","source":"@site/blog/2023-01-22-how-to-get-hired-by-an-exciting-tech-startup-in-2023.md","title":"How to get hired by an exciting tech startup in 2023","description":"The future is a strange place. We\u2019re not entirely sure what it will look like, but we do know that it will be shaped by the choices we make today. And while I can\u2019t tell you exactly how to get a job in 2023, I can help you set yourself up for success by showing you some of the best ways to build your career today.","date":"2023-01-22T00:00:00.000Z","formattedDate":"January 22, 2023","tags":[{"label":"Career Advice","permalink":"/blog/tags/career-advice"},{"label":"Tech Startups","permalink":"/blog/tags/tech-startups"},{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Job Hunting","permalink":"/blog/tags/job-hunting"},{"label":"Software Engineering","permalink":"/blog/tags/software-engineering"}],"readingTime":5.425,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-to-get-hired-by-an-exciting-tech-startup-in-2023","title":"How to get hired by an exciting tech startup in 2023","date":"2023-01-22T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280554207-496f62f8-bd60-4029-8560-1a4c25a5144a.png","tags":["Career Advice","Tech Startups","Open Source","Job Hunting","Software Engineering"],"description":"The future is a strange place. We\u2019re not entirely sure what it will look like, but we do know that it will be shaped by the choices we make today. And while I can\u2019t tell you exactly how to get a job in 2023, I can help you set yourself up for success by showing you some of the best ways to build your career today."},"prevItem":{"title":"How I Used OpenAI API to improve our product documentation","permalink":"/blog/how-i-used-openai-api-to-improve-our-product-documentation"},"nextItem":{"title":"Financial chat bots are underrated, and here\u2019s why.","permalink":"/blog/financial-chat-bots-are-underrated-and-heres-why"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThe future is a strange place. We\u2019re not entirely sure what it will look like, but we do know that it will be shaped by the choices we make today. And while I can\u2019t tell you exactly how to get a job in 2023, I can help you set yourself up for success by showing you some of the best ways to build your career today.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nEveryone is doing the same hacker tests. Being good at interviews will no longer suffice to get a job in top tech company. Conventional CVs are too boring. Recruiters may like what they read, but this doesn\u2019t make them think any further about a person and think \u201cwow, we really need someone like them\u201d.\\n\\nUltimately, a CV cannot demonstrate creativity and in my opinion, to be a top engineer you need to be creative. Often there isn\u2019t an easy straightforward solution and being creative is what distinguishes top tier engineers from medium. I wrote a post about this [here](/blog/stop-doing-your-cv-in-word-or-latex).\\n\\nBelow I will let you know my views on what I would do to get a job at an exciting tech startup.\\n\\n## Work on open source projects\\n\\nOpen source is a great way to build your skills and get your name out there. It\u2019s also a great way to make connections with other developers, which can lead to referrals and job opportunities. If you want to show that you\u2019re a good engineer, open source is an excellent opportunity. This is because it allows you to demonstrate your problem-solving abilities, while also improving the codebase of a project that is potentially used by thousands of users \u2014 and because the project is open source, it never dies.\\n\\n**But which open source projects should you choose?**\\n\\nI\u2019d say that there are two routes that you can take here. You can select the project based on your **own use case** or you can **be strategic** about it.\\n\\n### Own use case\\n\\nDon\u2019t overthink it. The world of software is built on top of open source. If it weren\u2019t for open source, we would be living in the year 2000 or less. This means that your favorite apps are relying on open source projects, which you can be a part of!\\n\\nThis means that you can:\\n\\n- Contribute to an open source library that is used by a project that you like. E.g. someone from our team is a [cpython](https://github.com/python/cpython) contributor.\\n- Contribute to a product that you use that is Open Source. The advantage here is that you are able to literally customize the product that you are using.\\n\\nWith Red Hat in the 90s this open source movement is starting to be a very hot topic. [Joseph Jacks](https://twitter.com/JosephJacks_) from OSS Capital is one of the best investors (if not the best) in this space. The chart below that he put together illustrates well the growth of open source (shared in [this tweet](https://twitter.com/JosephJacks_/status/1494840009882361859?s=20))\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/496f62f8-bd60-4029-8560-1a4c25a5144a)\\n\\n### Strategic\\n\\nIf you\u2019re reading this, there\u2019s a good chance that you want to make a positive impact on the future of technology. If so, it can be helpful to consider how your work will affect the lives of others. Take some time and think about what kind of role you would like to play in shaping those futures \u2014 are you someone who wants to improve people\u2019s physical well-being through health innovations? Or maybe achieve more efficient energy use through new technologies? This will help determine which companies or projects might be best suited for any given career path.\\n\\nOnce you figure out what motivates you, select an industry where you wish to find a job.\\n\\nThen there are multiple paths that you can take:\\n\\n- Look into the signals provided by top venture capital firms in that selected industry. I.e. see what open source companies are being backed in that space.\\n- Look into the developer engagement around the open source projects in that industry. You can not only use GitHub stars and forks, but you can use tools such as [https://analyzemyrepo.com](https://analyzemyrepo.com/analyze/OpenBB-finance/OpenBBTerminal) or [https://ossinsight.io/](https://ossinsight.io/)\\n- Cold email VCs to ask them about which open source products they are excited about. I say VCs because often their job is to find these startups early, so usually they have more recent information. But talking with devs or listening to people that you respect in the industry is equally valid.\\n\\nNote: By being an early contributor of a promising open source startup, you can become a core maintainer of a project and even make it to the founding team. This is how I met James, OpenBB\u2019s co-founder. He was an active developer in my own open source project, and I invited him to be part of the main maintainers of the project. When we built a company, he became a founding member.\\n\\n## Develop your own open source project\\n\\nI strongly believe that being able to successfully build your own open source project is severely underrated. There are so many components that you need to get right from so many departments that it shows a lot about your strengths as an individual and a preview of the value you could add to the team.\\n\\nYou may think that the only thing that you are demonstrating is your ability to write high-quality code since it will be open to the public. Well that\u2019s wrong. Here is a non-exhaustive list of skills that you show off\\n\\n- Solution to a real-world problem\\n- Design around the product\\n- User experience\\n- How you prioritize task and how fast you can ship high-quality code\\n- Interaction with others\\n- Marketing\\n- Listening to feedback from users\\n\\nThis is what I did with OpenBB Terminal: [https://github.com/OpenBB-finance/OpenBBTerminal](https://github.com/OpenBB-finance/OpenBBTerminal) and it has single handedly changed my life.\\n\\n## Conclusion\\n\\nIf you\u2019re looking for a job in 2023, the best thing you can do is to contribute to/develop open source projects.\\n\\nYou should be aware that you can also add value to an open source project by reporting bugs. You can even do more than just report a bug, but suggest a solution or workaround for the problem \u2014 this shows that not only are you paying attention to what\u2019s going on around you, but also that you have some ideas about how things could be improved \u2014 a combination that any hiring manager would love!\\n\\nI hope you found this post insightful.\\n\\nAny feedback is welcome."},{"id":"financial-chat-bots-are-underrated-and-heres-why","metadata":{"permalink":"/blog/financial-chat-bots-are-underrated-and-heres-why","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-01-05-financial-chat-bots-are-underrated-and-heres-why.md","source":"@site/blog/2023-01-05-financial-chat-bots-are-underrated-and-heres-why.md","title":"Financial chat bots are underrated, and here\u2019s why.","description":"In this blog post, we discuss the underrated potential of financial chat bots, our collaboration with OptionsFamBot, and why chat bots are becoming increasingly popular.","date":"2023-01-05T00:00:00.000Z","formattedDate":"January 5, 2023","tags":[{"label":"chatbots","permalink":"/blog/tags/chatbots"},{"label":"finance","permalink":"/blog/tags/finance"},{"label":"AI","permalink":"/blog/tags/ai"},{"label":"Discord","permalink":"/blog/tags/discord"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"OptionsFamBot","permalink":"/blog/tags/options-fam-bot"}],"readingTime":4.12,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"financial-chat-bots-are-underrated-and-heres-why","title":"Financial chat bots are underrated, and here\u2019s why.","date":"2023-01-05T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280554064-a1352f75-9bfd-4a70-8129-d72bc4e720b5.png","tags":["chatbots","finance","AI","Discord","OpenBB","OptionsFamBot"],"description":"In this blog post, we discuss the underrated potential of financial chat bots, our collaboration with OptionsFamBot, and why chat bots are becoming increasingly popular."},"prevItem":{"title":"How to get hired by an exciting tech startup in 2023","permalink":"/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023"},"nextItem":{"title":"Firing sucks. How to avoid doing so by hiring A players.","permalink":"/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-players"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blog post, we discuss the underrated potential of financial chat bots, our collaboration with OptionsFamBot, and why chat bots are becoming increasingly popular.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nAt OpenBB, earlier this year we [joined forces with OptionsFamBot](https://openbb.co/products/bot). This was a bot that had a reach of over 1 Million users on Discord.\\n\\nToday, [OpenBB Bot](https://openbb.co/products/bot) is one of our more powerful products and I still think a lot of people are sleeping on it.\\n\\n### What is a chatting bot platform?\\n\\nAccording to [ChatGPT](https://chat.openai.com/chat):\\n\\n> _\u201cA chatbot platform is a software service or tool that enables the creation, management, and deployment of chatbots. These platforms typically provide a variety of tools and features for building, testing, and deploying chatbots, as well as options for integrating chatbots with other systems or services. Some chatbot platforms are designed to support the development of chatbots for specific industries or use cases, such as customer service, e-commerce, or marketing. Others are more general purpose, and can be used to build chatbots for a wide range of applications.\u201d_\\n\\n
    \\n\\n### Why are chat bots not engaging?\\n\\nI believe that one of the reasons for this is because people usually associate chatbots with customer service or marketing. Not as a finalized product but as a feature.\\n\\nIf I ask ChatGPT about this, the main reasons are: Lack of personalized conversation, limited capabilities, poor design and high error rate.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/fb23b0b4-70db-42c4-91be-00acec6cb57e)\\n\\nBut wait.. ChatGPT is **LITERALLY** a chat bot. Everything happens through a chat interface, which shows that you can build a successful product as a bot, as long as it adds enough value to the user.\\n\\nOne could argue that ChatGPT is not done in an established chatting platform, and that is **partially true**. The reason I say partially is because ChatGPT has an API, so developers can use it to develop their own chatting bots and deploy it in whatever chatting app they are interested in.\\n\\n## Examples of good chatting platforms\\n\\nI believe that Discord is in the forefront here due to: Free, easy to use, allows customizing servers with roles/channels/permissions, high-quality voice chat, strong communities.\\n\\nA testament to this is the fact that [midjourney](https://midjourney.com/) has built a successful chat bot that generates images from text prompts using AI, **SOLELY** relying on Discord. If you go into their website, the button \u201c**Join the Beta**\u201d takes you to their Discord server which has over **7 million users**!\\n\\nAs far as I know, this is the only example of a company that distributes their product solely through a chatting platform in a successful way.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/514207d5-12cb-4103-8437-5883c4fd1d8f)\\n\\n## Why are chat bots getting more popular?\\n\\nIn my opinion, there are a few factors why chat bots are becoming more popular:\\n\\n### Interactivity\\n\\nThe bots are becoming more interactive, almost working like an application within a chatting platform.\\n\\n![interactivity](https://github.com/DidierRLopes/my-website/assets/25267873/5986adc9-66d3-45cb-80b1-ddf2419eaacf)\\n\\n### Speed\\n\\nThe speed of interaction is increasing over time, making the experience more seamless.\\n\\n![speed](https://github.com/DidierRLopes/my-website/assets/25267873/c90f5a56-1bd5-4ed7-92ce-69bb730e8434)\\n\\n### Customization\\n\\nThe level of customization allowed for these bots keeps on increasing.\\n\\n![customization](https://github.com/DidierRLopes/my-website/assets/25267873/9107c913-c619-4e95-adef-16171e32da9f)\\n\\n### Automation\\n\\nYou are starting to be able to create automated workflows. Not only for you, but for entire communities.\\n\\n![automation](https://github.com/DidierRLopes/my-website/assets/25267873/05f5b4ee-09cc-4d30-b72a-3fa6e766a348)\\n\\n### Notifications\\n\\nIt has notification features that can ping you similarly as if a friend sent you a message.\\n\\n![notifications](https://github.com/DidierRLopes/my-website/assets/25267873/ecd85467-e63c-4093-b185-deb5a3967905)\\n\\n### Monetization\\n\\nYou are going to start to be able to monetize products through it.\\n\\n![monetization](https://github.com/DidierRLopes/my-website/assets/25267873/ecdfd4f4-ef5e-4e2e-a8f9-c6d0152e317a)\\n\\n### Community\\n\\nYou can use it within a server with friends/colleagues, and unlock a better user experience.\\n\\n![community](https://github.com/DidierRLopes/my-website/assets/25267873/a36bd629-813f-4678-b6bf-6008cdc7b8f5)\\n\\n### Standardization\\n\\nThe product can work similarly on multiple chatting platforms. By keeping the same method of interaction / commands, the user is allowed to pick their favourite chatting platform or even use it in more than 1.\\n\\n![standardization](https://github.com/DidierRLopes/my-website/assets/25267873/533b579d-9283-4d0e-a1bf-bd233ce2814f)\\n\\n### Accessibility\\n\\nThese chatting platforms are developed for all devices and operating systems, making it a very powerful distribution system.\\n\\n![last](https://github.com/DidierRLopes/my-website/assets/25267873/0d240921-fde4-4f38-98a9-fa68911d6344)\\n\\n## Why Finance?\\n\\nI\u2019ve spoke with over 100 people in the financial world in 2022. Over 50 are Bloomberg users. From those, 90% agree that their chatting feature is the most attractive feature \u2014 some of them going further and saying that that is the reason why they pay for it.\\n\\nBut what if you didn\u2019t need to pay $26 k / year for such feature. What if you could pay to have access to servers with big names in the industry? Or what if you could create your own servers? What if while you were talking with Cathie Wood about ARK performance, you could also access financial data from ARK to back up your arguments? All this while not leaving the chat.\\n\\nThis is the reason why I believe that financial chatting bots will become popular in 2023. And [OpenBB Bot](https://openbb.co/products/bot) will be leading that wave.\\n\\nTry it out for free on [OpenBB Discord server](https://openbb.co/discord) by using a command such as `/chart TSLA` and let me know what you think."},{"id":"firing-sucks-how-to-avoid-doing-so-by-hiring-a-players","metadata":{"permalink":"/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-players","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-01-02-firing-sucks-how-to-avoid-doing-so-by-hiring-a-players.md","source":"@site/blog/2023-01-02-firing-sucks-how-to-avoid-doing-so-by-hiring-a-players.md","title":"Firing sucks. How to avoid doing so by hiring A players.","description":"Firing is tough. This blogpost discusses how to avoid it by hiring A players, improving the hiring process, and understanding the importance of a scorecard in recruitment.","date":"2023-01-02T00:00:00.000Z","formattedDate":"January 2, 2023","tags":[{"label":"Hiring","permalink":"/blog/tags/hiring"},{"label":"Management","permalink":"/blog/tags/management"},{"label":"A Players","permalink":"/blog/tags/a-players"},{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"Career Advice","permalink":"/blog/tags/career-advice"}],"readingTime":18.91,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"firing-sucks-how-to-avoid-doing-so-by-hiring-a-players","title":"Firing sucks. How to avoid doing so by hiring A players.","date":"2023-01-02T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280553099-c13a3c1f-b347-4703-b23b-1247c8fcf01e.png","tags":["Hiring","Management","A Players","OpenBB","Career Advice"],"description":"Firing is tough. This blogpost discusses how to avoid it by hiring A players, improving the hiring process, and understanding the importance of a scorecard in recruitment."},"prevItem":{"title":"Financial chat bots are underrated, and here\u2019s why.","permalink":"/blog/financial-chat-bots-are-underrated-and-heres-why"},"nextItem":{"title":"How ChatGPT allowed me to leverage Twitter API 10x faster","permalink":"/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nFiring is tough. This blogpost discusses how to avoid it by hiring A players, improving the hiring process, and understanding the importance of a scorecard in recruitment.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nIn 2022, [OpenBB](http://openbb.co/) grew to 20 people. But amongst all of our hiring, we also had to let some people go.\\n\\nBefore 2022, I had never fired anyone in my life but in my new role, I had to learn how to do it. If you\u2019re a manager, you know that this is the hardest part of the job.\\n\\nHaving that said, I wanted to use my Christmas holidays to understand how we can avoid letting people go. For this, I needed to start from the beginning and improve our overall hiring process.\\n\\nThis blogpost will be highly based on the book **\u201cWho: The A Method for Hiring\u201d by Geoff Smart and Randy Street**, which I highly recommend.\\n\\n## A method for hiring\\n\\nWhat is an A player? _A candidate who has at least a 90 percent chance of achieving a set of outcomes that only the top 10 percent of possible candidates could achieve.\\n\\nIn this post, I will go over the steps to get an A team.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/476a3287-d591-4ab2-b261-0c1fed53ca45)\\n\\n## Scorecard\\n\\nThis is a document that describes the mission for the position, outcomes that must be accomplished, and competencies that fit with both the company culture and the role.\\n\\nThis is an example of what a scorecard should look like:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e513bd3d-ea16-4d5e-828e-5243846f2161)\\n\\nLet\u2019s go through each of the sections in this document.\\n\\n### Mission\\n\\nThe mission is an executive summary of the job\u2019s core purpose. It boils the job down to its essence so everybody understands why you need to hire someone in this role.\\n\\nThe book talks about how you should avoid hiring a generalist. In my opinion, it depends on the stage of the company. At OpenBB, we are able to ship fast with a small team because we have a lot of generalists that are A players. However, finding a generalist A player is a much harder task than finding an A player specialist. Here, we benefit from having an open source project, since we get to build with candidates before we hire them.\\n\\n**How to:** _Develop a short statement of one to five sentences that describe why a role exists._\\n\\n### Outcomes\\n\\nDescribes what a person needs to accomplish in a role.\\n\\n> _\u201cWhile typical job descriptions break down because they focus on activities, or a list of things a person will be doing, scorecards succeed because they focus on outcomes, or what a person must get done.\u201d_\\n\\n
    \\n\\n**How to:** _Develop 3 to 8 specific objective outcomes that a person must accomplish to achieve an A performance, ranked by order of importance._\\n\\n### Competencies\\n\\nDefine how you expect a new hire to operate in the fulfilment of the job and how they can achieve their objectives. What competencies really count?\\n\\n#### Ensure behavioural fit\\n\\nCritical competencies for A players are: Efficiency, honesty/integrity, organization, aggressiveness, follow-through, intelligence, analytical skills, attention to detail, persistence, proactivity.\\n\\nOthers may include: Ability to hire A players, ability to develop people, flexibility/adaptability, calm under pressure, strategic thinking/visioning, creativity/innovation, enthusiasm, work ethic, high standards, listening skills, openness. to criticism and ideas, communications, team work and persuasion.\\n\\n#### Ensure organizational fit\\n\\nEvaluating cultural fit begins with evaluating your company\u2019s values against the ones of the candidate.\\n\\nRecently, at OpenBB, I asked everyone to share with me a list of values that we currently had and they were proud of, and/or values that they would like to use instead. In a startup, where the pace is incredibly fast and the team is in constant change, I strongly believe values change over time. So I looked at everyone\u2019s inputs, and summarized them into the following OpenBB values: **Autonomy and Ownership, Innovation and Excellence, Transparent and Trustworthy, Diversity and Inclusion, Purpose and Passion, User Focused and Community Oriented.**\\n\\n**How to:** _Identify as many role-based competencies that you think are appropriate to describe the behaviors that someone must demonstrate to achieve the outcomes. Next, identify 5 to 8 competencies that describe your culture and place those on every scorecard._\\n\\n### From scorecard to strategy\\nThe beauty of a document like this is that they become the blueprint that links the theory of strategy to the reality of execution. They translate your business plans into role-by-role outcomes, create alignment among your team, unify your culture and ensure people understand your expectations.\\n\\nIn addition, they allow you to monitor employee progress over time in your annual review system and to rate your team as part of their talent review progress.\\n\\n**How to:** _Pressure-test your scorecard by comparing it with the business plan and scorecards of the people who will interface with the role. Ensure that there is consistency and alignment. Then share the scorecard with relevant parties, including peers and recruiters._\\n\\n## Source\\n\\nSystematic sourcing before you have slots to fill ensures you have high-quality candidates waiting when you need them.\\n\\n### Referrals from your professional and personal networks\\n\\nCreate a list of the ten most talented people you know and commit to speaking with at least one of them per week for the next ten weeks. At the end of each conversation ask \u201cWho are the most talented people you know?\u201d. Continue to build your list and continue to talk with at least one person per week. \u201c_Of all the ways to source candidates, the number one method is to ask for referrals from your personal and professional networks_\u201d.\\n\\n### Referrals from your employees\\n\\nAdd sourcing as an outcome on every scorecard for your team. Encourage employees to ask people in their networks. Offer a referral bonus. In-house referrals often provide better-targeted sourcing, this is because employees already know our needs and culture.\\n\\n### Deputizing friends of the firm\\n\\nConsider offering a referral bounty to select friends of the firm. It could be as inexpensive as merchandise or as expensive as a significant cash bonus. When talking with someone new at a party or a VC, always ask \u201c_who do you know who might be a good fit for my company?_\u201d\\n\\n### Sourcing system\\n\\nCreate a system that (1) captures the names and the contact information on everybody you source and (2) schedules weekly time on your calendar to follow up. Try to spend 30 minute every week sending messages or having calls with candidates from this database of A players.\\n\\n### Hiring external recruiters or hiring recruiting researchers\\n\\nThe book speaks about both, but from my experience of having an open company with an exciting mission that builds in public, these have not been relevant to us yet.\\n\\n## Select\\n\\nCreate a series of structured interviews which build on each other so you can rate your scorecard.\\n\\n### Screening Interview\\n\\nShort, phone-based interview designed to clear out B and C players from your roster of candidates.\\n\\n1. **What are your career goals?** If no goals echo your own website goals, screen them out. Ideally candidate will speak with passion and energy about their goals which are aligned with the role.\\n\\n2. **What are you really good at professionally?** Make sure that with the list of strengths, there are always examples to backup the claim. Ensure that those strengths are relevant to the competencies required in the scorecard, if not, screen them out.\\n\\n3. **What are you not good at or not interested in doing professionally?** Ignore strengths disguised as weakness. Ask again \u201cwhat are you really not good at or not interested in doing?\u201d, talented people will catch the hint. If you\u2019re still struggling to get a proper answer, put the fear of a reference check into the person \u2014 \u201cif you advance to the next step in our process, we will ask for your help in setting up some references. (\u2026) What would these references say are something things you are not good at or not interested in?\u201d\\n\\n4. **Who were your last five bosses, and what would they each rate your performance on a scale of 1\u201310 WHEN we talk to them?** The word \u2018when\u2019 is the key to unlock the truth. A rating of 7 is neutral, we are looking for 8 and above. After the rating answer always press for details.\\n\\n
    \\n\\nIf you are happy with the interview so far, conclude the call by offering the candidate an opportunity to ask questions. Otherwise just thank them for their time.\\n\\n**Tips:**\\n\\n- Always compare the person\u2019s strengths with the ones on the scorecard.\\n- When in doubt, there\u2019s no doubt. You need to have the feeling that you have found the one.\\n- Get curious: What, How, Tell me more. Keep using this framework until you are clear about what the person is really saying.\\n- Hit the gong fast. If an answer automatically rules out a candidate, just end up the interview earlier and use your precious time to focus on A players.\\n\\n### Who to Interview\\n\\nChronological walk-through of a person\u2019s career.\\n\\nYou can begin by asking about the highs and lows of a person\u2019s educational experience to gain insight into their background. After this, ask them 5 simple questions for each job they had in the past.\\n\\n#### What were you hired to do?\\n\\nYou are trying to discover what their scorecard might have been if they had one for that role. Ask them \u201chow was your success measured in the role? What was the mission and key outcomes? What competencies mattered?\u201d.\\n\\n#### What accomplishments are you most proud of?\\n\\nIdeally, candidates will tell you about accomplishments that match the job outcomes they just described to you. Even better if they match the ones of the scorecard for the position you are trying to fill.\\n\\nNote: _A players tend to talk about outcomes linked to expectations, B and C players talk generally about events, people they met, or aspects of the job they liked without ever getting into results._\\n\\n#### What were some of the low points during that job?\\n\\nPeople can be hesitant to share their lows at first. Keep reframing the question over and over until the candidate gets the message. E.g. \u201c_What went really wrong? Biggest mistake? done differently? parts you didn\u2019t like? peers stronger than you?_\u201d\\n\\n#### Who were the people you worked with?\\n\\n- **What was your boss\u2019s name and how do you spell that?**\\n\\nForcing candidates to spell the name out no matter how common it might be sends a powerful message: you are going to call, so they should tell the truth. This is referred as the \u201cthreat of reference check (TORC)\u201d.\\n\\n- **What was it like working with them?**\\n\\nIdeally, you expect high praise for their bosses and how they received mentoring and coaching from them over the years. A neutral answer will sound somewhat more reserved \u2014 not positive nor negative.\\n\\n- **What WILL they tell me about your biggest strengths and areas to improve?**\\n\\nUse \u201cwill\u201d instead of \u201cwould\u201d so candidates know you mean business, and are therefore, more likely to tell you the truth since you will learn it from reference calls anyways. Dig in as much as you can.\\n\\n- **How would you rate the team you inherited on an A, B, C scale? What changes did you make? Did you hire anybody? Fire anybody? How would you rate the team when you left it on A,B,C scale.**\\n\\nThis is applicable to managers. And allows you to understand how they approach building a strong team. Do they accept the hand they have been dealt with or do they make changes to make a better hand? What changes do they make? How long does it take?\\n\\nApply TORC here too: _\u201cWhen we speak with team members of your team, what will they say were your biggest strengths and weaknesses as manager?\u201d_\\n\\n#### Why did you leave that job?\\n\\nWas the candidate promoted, recruited or fired from each job? How did they feel about it? How did their boss react to the news? E.g. A players are highly valued by their bosses.\\n\\nGet curious. Find out why and stick with it until you have a clear picture of what actually happened.\\n\\n**Conducting an effective who interview**\\n\\n- The hiring manager should conduct this interview. They own the hire, and are the ones who will suffer the consequences of making a mistake. Their career and job happiness depend on finding A players.\\n- Conduct an interview with a colleague (e.g. someone from HR, another manager or member of your team), this allows you to focus on questions and someone else to take notes.\\n- Kick off the interview by setting expectations, e.g. _\u201cWe are going to walk through each job you have held, for each job I am going to ask you five core questions. At the end we will discuss your career goals and aspirations and you will have a chance to ask me questions. If we mutually decide to continue, we will conduct reference calls to complete the process\u201d._\\n\\n**Master tactics**\\n\\n1. **Interrupting.** You have to interrupt the candidate, there is no avoiding it. At least once every 3/4 minutes. Smile broadly, match their enthusiasm level, and use reflective listening to get them to stop talking without demoralizing them.\\n2. **The three P\u2019s.** This helps you understand how valuable an accomplishment was in any context. (1) How did the performance compare to the previous year\u2019s performance; (2) How did your performance compare to the plan?; (3) How did your performance compare to that of peers?\\n3. **Push versus Pull.** People who perform are generally pulled to greater opportunities. People who perform poorly are often pushed out of their jobs.\\n4. **Painting a picture.** You\u2019ll only understand what a candidate is saying when you can literally see a picture of it in your mind. Always try to put yourself in their shoes.\\n5. **Stopping at the Stop signs.** Look for shifts in body language and other inconsistencies. \u201cWe did great in that role\u201d while shifting in their chair, looking down and covering their mouth may be a stop sign. When that happens, get curious and understand how \u201cgreat\u201d they actually did. What was actually their contribution?\\n\\n### Focused Interview\\n\\nGetting to know more. This is NOT another Who interview. It provides the chance to invite other team member to get their opinion, but the script should be followed. Think of this interview as the \u201codds enhancer\u201d to truly focus on the outcomes and/or competencies on the scorecard.\\n\\n1. The purpose of this interview is to talk about [specific outcome or competency]\\n2. What are your biggest accomplishments in this area during your career\\n3. What are your insights into your biggest mistakes and lessons learned in this area?\\n\\n
    \\n\\nDon\u2019t be scared to use the \u201cWhat? How? Tell me more\u201d framework until you understand what the person did and how they did it.\\n\\nFeel free to have multiple shorter focused interviews to understand particular outcome/competencies.\\n\\n**Double-check the cultural fit.** Final gauge on the cultural fit \u2014 **critical!** Include competencies and outcomes that go beyond the specifics of the job to embrace the larger values of your company.\\n\\n### Reference Interview\\n\\nTesting what you learned. Don\u2019t skip the references!\\n\\n1. Pick the right references. Review your notes from the Who interview and pick the bosses, peers, and subordinates with whom you would like to speak. Don\u2019t just use the reference list the candidate gives you.\\n2. Ask the candidate to contact the references to set up the calls. Some companies have a policy that prevents employees from serving as references, so you can increase your chances of talking with a reference if the candidate sets this up.\\n3. Conduct the right number of reference interviews. The book recommends 3 past bosses, 2 peers/customers and 2 subordinates.\\n\\n
    \\n\\n**Reference interview guide:**\\n\\n1. **In what context did you work with the person?** Conversation starter and memory jogger.\\n2. **What were the person\u2019s biggest strengths?** Ask for multiple examples to put strengths and development areas into context. Don\u2019t forget to get curious by using \u201cWhat? How? Tell me more\u201d framework to clarify responses.\\n3. **What were the person\u2019s biggest areas for improvement back then?** The wording \u2018back then\u2019 liberates the reference to talk about weaknesses that existed in the past. \u201cIn truth, we believe, people don\u2019t change that much. People aren\u2019t mutual funds. Past performance really is an indicator of future performance.\u201d\\n4. **How would you rate their overall performance in that job on a 1\u201310 scale?** What about their performance causes you to give that rating? Remember that 6 is really a 2. How does this rating compare with what the candidate said in advance? Wide discrepancy is alarming.\\n5. **The person mentioned that they struggled with ____ on that job. Can you talk more about that?** Test something the candidate told you by framing it as a question for the reference. E.g. \u201cthe person mentioned that you MIGHT SAY he was disorganized. Can you tell me more about that?\u201d the wording is again very important as \u2018might say\u2019 suggests to the reference that they have permission to talk about the subject because the candidate raised it.\\n\\n
    \\n\\nThese questions follow the same pattern as the other interviews. This makes it very easy to merge what you hear with what you have already learned about a candidate.\\n\\n**Tips:**\\n\\n- **Avoid accepting a candidate\u2019s reference list at face value.** E.g. either use your own network for gathering objective unbiased data or try to reach out to subordinates or people two levels below who interacted with the candidate to get a more honest answer.\\n- **Hearing or understanding the code for risky candidates.** Be able to read between lines. People don\u2019t like to give negative reference, so your best defense is to pay close attention to what people say and how they say it. Examples of bad signs: If they just confirm dates of employment, um\u2019s and er\u2019s is hesitation, absence of enthusiasm (faint praise).\\n\\n### Decide who to hire\\n\\n**Skill-Will Bull\u2019s Eye**\\n\\nDoes somebody\u2019s skill (what they can do) and will (what they want to do) match your scorecard? This is a person\u2019s skill-will profile.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/9bc79e6d-34b8-41da-8fd2-57b6d9ffdc75)\\n\\nYou should have plenty of data at this stage to make this assessment.\\n\\n- **Skill has to do with a candidate\u2019s ability to achieve the individual outcomes on your scorecard.** If you believe a candidate has a 90% or better chance to achieve a certain outcome based on the data gathered, rate them an A, otherwise a B or a C. Repeat for each outcome.\\n- **Will has to do with the motivations and competencies a candidate brings to the table.** For each competency, does the data suggest there is a 90% or better chance that the candidate will display that competency? If so rate them an A, otherwise a B or C. Repeat for each competency.\\n\\nAn A player is someone whose skill and will match your scorecard. Anything less is a B or C, no matter the experience or seeming talent level.\\n\\n**Red Flags: When to dive beneath the surface**\\n\\nThese flags may not be deal killers, but they are likely to signal that there is something worth exploring beneath the surface:\\n\\n- Does not mention past failures\\n- Exaggerates their answers\\n- Takes credit for the work of others\\n- Speaks poorly of past bosses\\n- Cannot explain job moves\\n- People most important to the candidate are unsupportive of a change\\n- For managerial hires, never had to hire or fire anybody\\n- Seems more interested in compensation and benefits than in the job itself\\n- Tries too hard to look like an expert\\n- Self-absorbed\\n\\nMore behavioral warning signs:\\n\\n- Winning too much\\n- Adding too much value\\n- Starting a sentence with \u2018no\u2019, \u2018but\u2019, or \u2018however\u2019\\n- Telling the world how smart we are\\n- Making destructive comments about previous colleagues\\n- Blaming others\\n- Making excuses\\n- The excessive need to \u2018be me\u2019\\n\\n**How to decide:**\\n\\n1. Take out your scorecards that you have completed on each candidate\\n2. Make sure you have rated all of the candidates on the scorecard. If you have not given each candidate an overall A, B or C grade, do so now. Make any updates you need to based on the reference interviews. Look at the data, consider the opinions and observations of the interview team, and give a final grade.\\n3. If you have no A\u2019s, then restart your process and the second step: source.\\n4. If you have one A, decide to hire that person.\\n5. If you have multiple A\u2019s, then rank them and decide to hire the best A among them.\\n\\n## Sell\\n\\nOnce candidates pass the selection, persuade them to join. The key to successfully selling your candidate to your company is putting yourself in their shoes.\\n\\n### Five F\u2019s of selling\\n\\nThere are 5 areas that candidates tend to care about, make sure to address each of these 5 areas until you get the person onboard.\\n\\n1. **Selling Fit:** This ties together the company\u2019s vision, needs and culture with the candidate\u2019s goals, strengths and values.\\n2. **Selling Family:** Takes into account the broader trauma of changing jobs.\\n3. **Selling Freedom:** The autonomy the candidate will have to make their own decisions.\\n4. **Selling Fortune:** Reflects the stability of your company and the overall financial upside.\\n5. **Selling Fun:** Describes the work environment and personal relationships the candidate will make.\\n\\n### Five waves of selling\\n\\nSelling should be something that happens throughout the entire hiring process. In particular, there are five distinct phases that merit increased selling effort:\\n\\n1. When you source\\n2. When you interview\\n3. The time between your offer and the candidate acceptance\\n4. The time between the candidate\u2019s acceptance and their first day\\n5. The new hire\u2019s first one hundred days on the job\\n\\n### Persistent pays off\\n\\nOnce you have identified the right candidate, you must be persistent and do whatever you can to sign the deal.\\n\\n### How to: sell A Players\\n\\n1. Identify which of the five F\u2019s really matter to the candidate.\\n2. Create and execute a plan to address the relevant F\u2019s during the five waves of selling.\\n3. Be persistent. Don\u2019t give up until you have your A player on board.\\n\\n## Conclusion\\n\\nIn a more simplistic image, this is what the A method boils down too.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/3b6c111c-1c92-4819-ba71-7251bb21e69f)\\n\\nI really enjoyed reading this book and I am taking a lot of these learnings to improve the hiring processes at OpenBB."},{"id":"how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster","metadata":{"permalink":"/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-12-11-how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster.md","source":"@site/blog/2022-12-11-how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster.md","title":"How ChatGPT allowed me to leverage Twitter API 10x faster","description":"Leveraging the power of ChatGPT to interact with Twitter API for real-time financial news updates.","date":"2022-12-11T00:00:00.000Z","formattedDate":"December 11, 2022","tags":[{"label":"ChatGPT","permalink":"/blog/tags/chat-gpt"},{"label":"Twitter API","permalink":"/blog/tags/twitter-api"},{"label":"Tweepy","permalink":"/blog/tags/tweepy"},{"label":"Python","permalink":"/blog/tags/python"},{"label":"Programming","permalink":"/blog/tags/programming"}],"readingTime":2.4,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster","title":"How ChatGPT allowed me to leverage Twitter API 10x faster","date":"2022-12-11T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280552939-af9954fe-c1ff-4fc7-802a-a81c82adb86d.png","tags":["ChatGPT","Twitter API","Tweepy","Python","Programming"],"description":"Leveraging the power of ChatGPT to interact with Twitter API for real-time financial news updates."},"prevItem":{"title":"Firing sucks. How to avoid doing so by hiring A players.","permalink":"/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-players"},"nextItem":{"title":"How I wrote a machine learning paper in 1 week that got accepted to International Conference in Machine Learning Applications","permalink":"/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nLeveraging the power of ChatGPT to interact with Twitter API for real-time financial news updates.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nFor a while now, users have been asking for adding real-time financial news on [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal).\\n\\nSince OpenBB Terminal is a command line interface for the world\u2019s financial data, and there is no threading going on \u2014 there was never a very straightforward way to do this.\\n\\n**Until today.**\\n\\nAfter recalling [this tweet](https://twitter.com/elonmusk/status/1591121142961799168?s=20&t=j-cjTu-XA9SNcY8PBrbUnQ) from Elon earlier in November, I realized that I\u2019ve been using Twitter for news substantially more than MSM.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d7c7a808-90d6-4cea-8128-8edc95262664)\\n\\nSo, my next train of thought was; What if I was able to somehow display the latest tweets from Twitter accounts that I trust. In particular, accounts that have up-to-date information and usually mention the words \u201cJUST IN\u201d or \u201cBREAKING\u201d. E.g. [@WatcherGuru](https://twitter.com/WatcherGuru) or [@unusual_whales](https://twitter.com/unusual_whales).\\n\\nBy doing this, I could then use the bottom of the OpenBB Terminal to highlight the news. An example of this is below:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/5335cbf9-eebe-44e4-8944-7284e8797abe)\\n\\n## Coding and ChatGPT\\n\\nThe next step for me was to implement the code!\\n\\nFirst, I needed to understand how I could have access to the last tweet of a specific user account. I already had a Twitter API account created, which meant I already had the key, token and secrets, therefore, I just needed to read documentation to understand how to use the Twitter API. Hence, I started reading [Twitter\u2019s developer documentation](https://developer.twitter.com/en/docs/twitter-api/tweets/search/api-reference/get-tweets-search-recent).\\n\\nThe day before I had been playing around with ChatGPT. And like everyone else, I was very impressed. One of the things that surprised me the most was how good it was at outputting working code with an explanation along the lines.\\n\\nSo, while I was reading the documentation, I was thinking \u201cI wish there was a way for me to just be able to get the last N tweets of an account without needing to dig in the developer documentation\u201d. Could ChatGPT be the answer?\\n\\nSo I tried\u2026\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/dd94a0f4-20a1-4bb5-92dc-fa598fb095ac)\\n\\nThis was already amazing. But I\u2019m lazy and didn\u2019t want to copy all the cells individually to put it into a Jupyter notebook, so asked ChatGPT to provide the code output as a single block. I wasn\u2019t convinced it was going to work. **But it did**.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/4294d79a-fdaf-4593-8621-686db0dc13af)\\n\\n\u2026 it just worked. \ud83e\udd2f\\n\\nAfter that, I needed the timestamp associated with the tweet, to see how old it was. As usual, I started looking into [Tweepy documentation](https://docs.tweepy.org/en/latest/authentication.html#twitter-api-v2).\\n\\n**Ups, what was I doing again?**\\n\\nAfter a couple of seconds, I went onto ChatGPT and asked how I could get the timestamp of a tweet using Tweepy library.\\n\\n**And \ud83e\ude84, it worked again!!!**\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/af9954fe-c1ff-4fc7-802a-a81c82adb86d)\\n\\nOne thing that is for sure: ChatGPT is going to truly disrupt many industries. And I will be here for it.\\n\\nPS: The PR with this addition is in development [here](https://github.com/OpenBB-finance/OpenBBTerminal/pull/3757)."},{"id":"how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla","metadata":{"permalink":"/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-12-07-how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla.md","source":"@site/blog/2022-12-07-how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla.md","title":"How I wrote a machine learning paper in 1 week that got accepted to International Conference in Machine Learning Applications","description":"How I wrote a machine learning paper in 1 week that got accepted to ICMLA while working full time and raised $8.8 million for OpenBB Terminal.","date":"2022-12-07T00:00:00.000Z","formattedDate":"December 7, 2022","tags":[{"label":"Machine Learning","permalink":"/blog/tags/machine-learning"},{"label":"Data Science","permalink":"/blog/tags/data-science"},{"label":"Academia","permalink":"/blog/tags/academia"},{"label":"ICMLA","permalink":"/blog/tags/icmla"},{"label":"NURVV Run","permalink":"/blog/tags/nurvv-run"},{"label":"Open Source","permalink":"/blog/tags/open-source"}],"readingTime":10.895,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla","title":"How I wrote a machine learning paper in 1 week that got accepted to International Conference in Machine Learning Applications","date":"2022-12-07T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280552697-4de8034a-3530-43f3-8b3f-1c703c6dd001.png","tags":["Machine Learning","Data Science","Academia","ICMLA","NURVV Run","Open Source"],"description":"How I wrote a machine learning paper in 1 week that got accepted to ICMLA while working full time and raised $8.8 million for OpenBB Terminal."},"prevItem":{"title":"How ChatGPT allowed me to leverage Twitter API 10x faster","permalink":"/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster"},"nextItem":{"title":"The future of finance with open source and AI","permalink":"/blog/the-future-of-finance-with-open-source-and-ai"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nHow I wrote a machine learning paper in 1 week that got accepted to ICMLA while working full time and raised $8.8 million for OpenBB Terminal.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/step-detection-ML).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nOne year ago, I raised $ 8.8 millions to build [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal) full time. But since I was working at a startup in the UK, I had a 3 month notice period.\\n\\nDuring that time I worked on documenting pretty much everything I had been working on, BUT that felt short. I felt like the data that came out of our [NURVV Run](http://www.nurvv.com/) product could be used with a machine learning algorithm in order to detect a foot strike quite efficiently.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/cc98a4d3-8540-4510-9a0c-04716ae1f965)\\n\\nSo I asked my company:\\n\\n> _If I use my spare time to work on this paper will you sponsor me if I get accepted?_\\n\\n
    \\n\\n**My goal was to increase the visibility of our product in academia.** And given I spent some time reading papers in the area, I knew that what I had in mind had a shot at working.\\n\\n**My background is not data science, and this was my first time \u201cofficially\u201d working on machine learning.** I wasn\u2019t 100% sure that my idea would work, but after spending more than 1 year at the company, I knew how the data behaved. I thought I could build an algorithm robust enough to be able to detect a foot strike more efficiently than what others had.\\n\\nAfter some time, the company accepted my proposal, and between the time to decide to apply to [International Conference on Machine Learning and Applications (ICMLA)](https://www.icmla-conference.org/icmla21/) and getting ready to start working on the paper, there was 1 week left.\\n\\nI thought that this window was rather tight given that I had to clean the data, work on the entire code behind the paper from idea to implementation, and write the damn paper. **I knew this was gonna be tight, but oh boy.** I had one of the harshest weeks of my life. I barely slept for 7 straight days, and skipped the company team event in order to make it through the deadline.\\n\\nBecause of that, I will go into what happened at each step along the way with images. I will skip the cleaning data and boring parts, don\u2019t worry. If you just want to read the final paper, you can find it here: [\u201dStep Detection using SVM on NURVV Trackers\u201d](https://ieeexplore.ieee.org/abstract/document/9680024).\\n\\nAlso, if you\u2019ve been following me, you know how much I love open source. Owing to that I open source the code behind the project [here](https://github.com/DidierRLopes/step-detection-ML).\\n\\n## Exploratory Data Analysis\\n\\nThe Nurvv trackers have an **Inertial Measurement Unit (IMU) tracks linear acceleration (accelerometer) and rotational rate (gyroscope)**. Sometimes it also contains a magnetometer. And Nurvv gave me access to 6 runs from 6 different runners.\\n\\nMy first step was to look into how this data looked. On the left you can see the acceleration (m/s\xb2) and the angular velocity (rad/s).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/6d4bf022-e6d3-43f2-971f-55977766ed7e)\\n\\nI knew that our **IMU had a sampling rate of 1125 Hz** (which means that each data point gets sampled at approximately every 888.89\u03bcs) and **this was critical in order to detect the oscillations that occur when a foot strike occurs** (i.e. impact of the foot on the floor makes the IMU oscillate). Thus I zoomed in the zone of impact and used a scatter plot to understand if we were \u201cmissing\u201d information.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/20921a7e-9407-4ff0-9d81-b36de1358231)\\n\\nI found it interesting that **the distance between the samples were larger at the time of the impact**. So I plotted the IMU accelerometer data and the IMU gyroscope data in a 3D plot interactively as a function of time (below you can see a snapshot).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/10936207-7a13-4ab8-8988-3a6b8c1caa22)\\n\\nFrom here it was interesting to note that when the foot is in the air, the samples are somehow concentrated (darker blue), whereas when a step occurs (more sparse) they behave erratically. The plot above was snapshotted with 3 steps that occurred.\\n\\nFrom that 3D plot I had the intuition that by utilizing a **principal component analysis (PCA**)**, I could reduce the dimensionality without losing much information. The result is shown below,\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/3b97fb32-fdc3-4f12-aca2-fc9feecc5b1d)\\n\\nThis made me think that I could use a **support vector machine (SVM)** in order to detect whether a foot strike has occurred or not. And what I was most excited about it was:\\n\\n- **This model isn\u2019t time-dependant.** Meaning that it would be fascinating to be able to predict whether a step occurred or not without the notion of time, but the current IMU data.\\n- We can develop an SVM model for each runner style. Then create an **ensemble model with hard voting** which allowed for the model that has seen more similar data, to be more confident in the classification of foot strike vs not foot strike.\\n\\nBut this was all a theory, I needed to prove it.\\n\\nThe first issue I had was: **SVM is a supervised learning model**. This meant that for the sampling data I was providing the model, I would have to classify whether those samples corresponded to a foot strike or not.\\n\\n**The issue?** Although the product had **force sensitive resistors (FSR)** in the insoles, I didn\u2019t have access to the samples that corresponded with these IMU samples.\\n\\nSo I knew that I would have to classify the data myself. Manually would have been a nightmare and not reliable enough, so I needed to build an algorithm that could classify the data quite reliably. **Signal processing theory, here I go.**\\n\\n### Labelling data for a supervised learning problem\\n\\n1. Get the raw IMU samples (accelerometer and gyroscope)\\n2. Do the difference in magnitude between the accelerometers samples and then the gyroscope samples\\n3. Apply root sum squared to the magnitude difference of accelerometer data, and then similarly to gyroscope data\\n4. Standardize the accelerometer data and the gyroscope data. This is so the data can be somehow compared with each other since the magnitude varies as one represents linear acceleration and the other angular rate.\\n5. Do the average between these 2 signals. This makes the data more robust.\\n6. Finally, apply a convolution to the resulting signal with a rectangular pulse. This allows to remove \u201cdrops\u201d from the signal and ensures a smoother signal.\\n\\n
    \\n\\nBelow you can see the formulas and signal changes that were made in order to obtain the final result:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/c3d365a4-ac66-402f-8584-ce2892c7805c)\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/48edd37d-cc62-4960-831f-0c676ed3884e)\\n\\nAfter this, I selected a sensible value of 0.3 to be used as a threshold on the resulting signal to classify step vs no-step.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/8c7185c4-21f6-410d-9334-1f58df71d151)\\n\\nI applied the difference between each first foot strike detected in order to make sure that there was no missed step. As you can see above the stride time is around 700ms which is what is expected of a runner jogging.\\n\\nSomeone might be wondering; If this gives such a great result, why did I need machine learning in the first place? **The reason is because standardization and convolution (steps 4 and steps 6) are a post-processing signal technique.** Therefore, it cannot be deployed in running time, and relies on data that happens in the future.\\n\\nFor illustration purposes, here is how the initial raw IMU data behaves against the labelling from signal processing approach (red background means no step, while green background means step).\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/394a59f7-6fe5-4272-85c0-a91b427bd22a)\\n\\n## Support Vector Machine for classification\\n\\nFor the model, SVM was selected because:\\n\\n- It works well with high dimensional data (6 IMU samples) because it only uses a few of these points (called support vectors) to create this hyperplane (decision boundary) between classes.\\n- SVM is ideal for binary classification problems.\\n- RBF kernel allows to handle non-linear data.\\n\\nThis is the type of classification that SVM is capable of (this is the raw acceleration data with a PCA applied, and the SVM classification on the background for a model that was trained using that same data).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/4de8034a-3530-43f3-8b3f-1c703c6dd001)\\n\\n### C and gamma hyperparameters\\n\\n- Given each dataset is rather large to perform **grid search optimization** on C and gamma, a subset of each of the datasets is used to extract these parameters.\\n- Each dataset subset is now split: 80% for training data and 20% for validation.\\n- Thus, 80% of the data subset is used to apply SVM with different combinations of C and gamma over a 2D grid. The remaining 20% is used to test the logistic loss and assess optimal hyperparameters.\\n\\n### Training and testing\\n\\n- 80% of data is used for training and 20% is used for testing.\\n- Although the testing is done **out-of-sample**, given the nature of the data (where it comes from the same distribution) it is almost as if it was an **in-sample**.\\n- In our case this is ideal as we want each model to perform very well on its own dataset. We want each model to generalize well for that very specific type of data (runner style, speed and terrain).\\n- A 5-sample moving average is applied before assessing the classification of our model, this is to remove spurious samples. A small window needs to be selected to not introduce a delay in the recognition of a step.\\n- Since our data set is imbalanced (i.e. there are more samples being no-step than step samples) we\u2019ll use **Geometric Mean (G-Mean) evaluation score**, since this measure tries to maximize the accuracy on each of the classes while keeping their accuracies balanced.\\n\\n### Result\\n\\nIn the same dataset where we trained our SVM, we were able to achieve a G-Mean of 0.9645. This is rather expected since this is a powerful model and it was trained on that same data.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/4988fec5-7d2a-4234-b172-dcd6490a6088)\\n\\nFrom the graph above this result is very positive given that the mislabelling always occurs at the boundary of a step / no-step detection. And since the sampling occurs very fast, we have some margin of error.\\n\\n## Ensemble SVM model architecture\\n\\nThis model as expected had a poor performance in an unseen dataset. This is normal as the data came from a different runner, running at a different speed in a different terrain. Thus, in order to create a more robust model, we built this ensemble SVM model architecture.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/28bf71ae-cd2c-4c15-8711-5d74b8164f45)\\n\\nEach dataset has the signal processing technique applied in order to obtain the labelling. With this labels, an SVM model can be trained.\\n\\nThen, an **unseen dataset** (not used for training) will be used as input for all the trained SVM models. I.e. each input (3 accelerometer samples and 3 gyroscope samples) will be given to each SVM model which will output 0 or 1 to denote no-step or step, respectively.\\n\\nMy rationale there was: _I could do a major voting approach, BUT because of how I trained the data. It could happen that one of the models had the sample being very inside the boundary, whereas 2 others had it just outside, and the later would win. This is not what I was looking for._\\n\\nBecause of this boundary approach associated with SVMs, I knew that although SVM doesn\u2019t provide probability estimates directly, these could be calculated. So I took advantage of that. And used that probability estimate to select whether the input was considered a stop or not. My rationale was: the model that has seen more similar IMU samples is likely to have a higher confidence in their output and as output they will have what I provided as a label in advance.\\n\\nFinally, I applied a **5-sample moving average** to the step (1) / no-step (0) output and round the value to be classified as step and no-step. This allowed to remove spurious samples.\\n\\n### Results\\n\\nThe prediction for a single SVM was extremely accurate because the model was trained on data samples from that same run (i.e. distribution). On the other hand, the ensemble prediction didn\u2019t run on data from that distribution, hence, making this problem much more complex. However, even with that constraint, a G-Mean of 0.8756 was still achieved.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/57d14bdc-336d-4f59-845f-438d7c2bb2c0)\\n\\n## Future work\\n\\n- Employ the data coming from the \u201dsmart\u201d insoles as an alternative ground-truth for determining step versus no-step conditions.\\n- The diversity of the data set can also be expanded to account for more surfaces, running speeds and styles.\\n- Explore whether the characteristics of the PCA plot of IMU data can be used to categorize different running styles.\\n- The exploration of different classification algorithms for the step detection problem, e.g. applying a long-short term memory (LTSM) neural network algorithm to exploit the time-dependency between samples.\\n- Implement this proof-of-concept code on the production NURVV Run system, to test the prediction technique in a real-life scenario and consider computational time.\\n\\n## Final remarks\\n\\nThis was my first most technical blogpost where I went into details in how I wrote a ML paper that was accepted in a major conference in 1 week. Would love to know your thoughts on it.\\n\\nFeel free to check the full paper version here: https://ieeexplore.ieee.org/abstract/document/9680024"},{"id":"the-future-of-finance-with-open-source-and-ai","metadata":{"permalink":"/blog/the-future-of-finance-with-open-source-and-ai","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-12-04-the-future-of-finance-with-open-source-and-ai.md","source":"@site/blog/2022-12-04-the-future-of-finance-with-open-source-and-ai.md","title":"The future of finance with open source and AI","description":"The future of finance is being reshaped by open source and AI. This post discusses the potential of these technologies in disrupting the financial industry, the advantages of open source, and the role of AI in user interface.","date":"2022-12-04T00:00:00.000Z","formattedDate":"December 4, 2022","tags":[{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"AI","permalink":"/blog/tags/ai"},{"label":"Finance","permalink":"/blog/tags/finance"},{"label":"Future","permalink":"/blog/tags/future"}],"readingTime":5.57,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"the-future-of-finance-with-open-source-and-ai","title":"The future of finance with open source and AI","date":"2022-12-04T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280552376-81f97180-abdd-41fa-a422-becefc8fd5cd.png","tags":["Open Source","AI","Finance","Future"],"description":"The future of finance is being reshaped by open source and AI. This post discusses the potential of these technologies in disrupting the financial industry, the advantages of open source, and the role of AI in user interface."},"prevItem":{"title":"How I wrote a machine learning paper in 1 week that got accepted to International Conference in Machine Learning Applications","permalink":"/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla"},"nextItem":{"title":"Bloomberg Terminal is no more. OpenBB Terminal 2.0 has just been released.","permalink":"/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThe future of finance is being reshaped by open source and AI. This post discusses the potential of these technologies in disrupting the financial industry, the advantages of open source, and the role of AI in user interface.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThis post will talk about my (very) u\u0336n\u0336biased opinion about the future of finance built on top of open source and AI.\\n\\n## Open Source platform\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/61585c8f-085f-4697-9714-4fe02296053d)\\n\\n### Data licensing vs Marketplace\\n\\nCurrent monopolies spend an enormous amount of cash on financial data licensing. There are dozens of different asset classes (stocks, options, crypto, NFTs, currencies, bonds, ETFs, mutual funds, \u2026) and these often vary based on geography. **That makes the overall investment research industry a very tough market to compete.** Startups cannot disrupt the space without a massive capital injection. This is also why startups usually focus on a certain asset class in a certain geography.\\n\\n**In my opinion, the only shot we have to disrupt incumbents is by not owning the data but becoming the infra layer between data sources and users.** _This is no different than Uber not owning cars, Airbnb not owning apartments or Deliveroo not owning restaurants._\\n\\n**This also has a great advantage which is being able to integrate new data sources very fast and easily.** Plus, owing to open source, anyone can add it. On the other hand, it\u2019s very unlikely that an incumbent will add data that you require. Plus, if they do, they will need to license the data and therefore decrease their margins \u2014 unless they increase the price to users.\\n\\n### Full-price bundle\\n\\nCurrent incumbents pricing is usually a complete bundled offering. **This means that regardless of what you are utilizing in terms of both breadth and depth, you pay the full price tag.** A good analogy is like a restaurant ONLY having a buffet when all you want is a bottle of water, or some chips. What happens is that a user ends up paying for data that they are not using.\\n\\nIn 2022, this is a very outdated take. Companies are looking to get leaner, and it doesn\u2019t make sense to pay for data that you aren\u2019t going to leverage. **Being the infrastructure between users and data sources allows you to create value to both**; Since users will have access to all the data they want and pay for the ones they use, and data sources will have access to a big pool of users and may not need to create a dashboard product to monetize their offerings.\\n\\n### Transparency & Customization\\n\\nCurrent incumbents have built several in-house financial models. **Although these are often customizable, their customization is typically limited.** That is because what is usually customizable are the values/weights, but not necessarily the formulas \u2014 that is kept hidden in their source code. This is an issue because that code cannot be validated and users cannot modify it.\\n\\nWith open source, the story is completely different. **Users can see every single line of code, and therefore not only audit the code quality but adapt the models/formulas to their own needs.** At the end of the day, there is no point in re-inventing the wheel for financial theory that has been around for decades.\\n\\nBy having the code open source, users can rely on the fact that these formulas have been validated/tested by thousands or millions of users and, therefore, there\u2019s a very low chance that these are wrong. **In addition, users are more secure because they can investigate the code and check/fix any vulnerabilities.**\\n\\n### Community\\n\\nOne of the best parts of open source is the integrated community that it creates. This attracts people from every background, gender or ethnicity. Such a pool of diversity tends to allow for better ideas and pushes a project further. With people from the community being able to contribute, this also drives innovation.\\n\\n[OpenBB](http://my.openbb.co/app/terminal/community-routines) has been driven a lot by the community so far. What started as a terminal mostly focused on stocks, soon evolved into including a broad range of datasets and considering several geographies. E.g. A contributor from Sweeden integrated Avanza API to the mutual funds menu that would only appear if users were looking into mutual funds from Sweden. This shows the power of community.\\n\\nHaving the platform be _open source_ is key.\\n\\n## GPT as the interface\\n\\n**One of the hedges that incumbents have is the fact that they have been around for a very long time and spent a lot on educating users about their product.** As a result, users are used to their platform. This makes them harder to switch to an unknown product. This is also why a product needs to be 10x better than competition for users to switch.\\n\\n**However, what if there was no learning curve?** What if you could use a product for the first time and knew how to access all the data without spending any time reading the documentation. **In essence, the educational incumbent advantage would become obsolete.**\\n\\nWith the new LLM advancements, such as [ChatGPT](https://chat.openai.com/chat). We are not far from this reality.\\n\\n![cool1](https://github.com/DidierRLopes/my-website/assets/25267873/be035d48-18c5-4f62-b367-f32ec3034a0a)\\n\\nPlus, if this is built on top of an open source project it means that the **community can help in improving the model** by providing more training data (e.g. provide a text as input and the corresponding command as output) or even confirm whether or not the chart that pops up was accurate. In addition, along with data sources you can imagine that the community could start contributing with new languages for the GPT model.\\n\\nYou can easily imagine that such interface would work well with a speech recognition model (something like [whisper](https://github.com/openai/whisper) but that allowed real-time).\\n\\n**This makes using a new investment research platform easy, but more importantly makes retrieving information much faster and efficient.**\\n\\n## GPT to build investment research reports\\n\\nOne of the new features that were announced with [OpenBB Terminal 2.0](https://openbb.co/blog/openbb-terminal-2-acai) was the automated reports generation that utilizes [papermill](https://github.com/nteract/papermill) to leverage jupyter notebook templates.\\n\\n![cool2](https://github.com/DidierRLopes/my-website/assets/25267873/655d11ad-4069-4886-8f54-b080bfc2b7f1)\\n\\nAs it stands creating one of these notebook templates requires some coding skills and reading [OpenBB documentation](https://docs.openbb.co/) to understand how to retrieve the data of interest providing the correct function and necessary arguments.\\n\\n**But, for a second, imagine if you could build these notebook templates with almost no-code?**\\n\\nThe proof-of-concept below in combination with the automated report generation should allow you to further understand the breakthrough that we may accomplish in the following few months.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/81f97180-abdd-41fa-a422-becefc8fd5cd)\\n\\n**My prediction is that open source + AI will disrupt the financial sector in the upcoming years.**\\n\\n[OpenBB](https://openbb.co/) will be leading that wave.\\n\\nThanks for reading!"},{"id":"bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released","metadata":{"permalink":"/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-11-29-bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released.md","source":"@site/blog/2022-11-29-bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released.md","title":"Bloomberg Terminal is no more. OpenBB Terminal 2.0 has just been released.","description":"OpenBB Terminal 2.0 has been released. This blog post discusses the new features and improvements, including the release of OpenBB SDK, a state-of-the-art AI/ML toolkit for the financial industry, and the vision for a community-driven investment research platform.","date":"2022-11-29T00:00:00.000Z","formattedDate":"November 29, 2022","tags":[{"label":"OpenBB Terminal 2.0","permalink":"/blog/tags/open-bb-terminal-2-0"},{"label":"Investment Research","permalink":"/blog/tags/investment-research"},{"label":"Financial Data","permalink":"/blog/tags/financial-data"},{"label":"AI","permalink":"/blog/tags/ai"},{"label":"ML","permalink":"/blog/tags/ml"},{"label":"SDK","permalink":"/blog/tags/sdk"}],"readingTime":1.725,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released","title":"Bloomberg Terminal is no more. OpenBB Terminal 2.0 has just been released.","date":"2022-11-29T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280552161-b13ac1ec-2ffd-4f25-846a-ce0fff4465d3.png","tags":["OpenBB Terminal 2.0","Investment Research","Financial Data","AI","ML","SDK"],"description":"OpenBB Terminal 2.0 has been released. This blog post discusses the new features and improvements, including the release of OpenBB SDK, a state-of-the-art AI/ML toolkit for the financial industry, and the vision for a community-driven investment research platform."},"prevItem":{"title":"The future of finance with open source and AI","permalink":"/blog/the-future-of-finance-with-open-source-and-ai"},"nextItem":{"title":"Sweepstake World Cup 2022 for your startup team","permalink":"/blog/sweepstake-world-cup-2022-for-your-startup-team"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nOpenBB Terminal 2.0 has been released. This blog post discusses the new features and improvements, including the release of OpenBB SDK, a state-of-the-art AI/ML toolkit for the financial industry, and the vision for a community-driven investment research platform.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nAlmost 2 years ago, I started building my own investment research platform. 2 months later I named it Gamestonk Terminal, made it open source and shared it on Reddit. The rest is history.\\n\\nSince then, we surpassed [17,800 stars on Github](https://github.com/OpenBB-finance/OpenBBTerminal). Raised $ 8.8 million in our seed round. Build a very competitive team and our OpenBB brand is now recognized by most in the financial space. You can read more about our story [here](https://openbb.co/blog/gme-didnt-take-me-to-the-moon-but-gamestonk-terminal-did).\\n\\n**Our mission to democratize investment research has not changed.** Over the past few months we have been heads down and building and today I\u2019m excited to share with you the announcement of OpenBB Terminal 2.0.\\n\\nThe headline is:\\n\\n> _OpenBB Terminal 2.0 is more than an application, it\u2019s a platform._\\n\\n
    \\n\\nA summary:\\n- We are releasing OpenBB SDK which allows developers to use a single API to access the world\u2019s raw financial data in order to build their own products / dashboards.\\n\\nThe SDK will allow users to create report templates in a matter of minutes and run them for custom tickers at any time in a matter of seconds; Instead of spending hours and starting a report from scratch every single time. We envision a world where the community can share these and help each other at becoming better investors.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/1223b162-6742-4cf8-a052-6f949873a0dd)\\n\\n- We are also bringing a state-of-the-art AI / ML toolkit to the financial industry, to be used alongside all the data sources our platform has access to (stocks, crypto, NFTs, options, forex, ETFs, mutual funds, macro economic data and even alternative data).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f2994ea5-759c-4d5a-9e17-28658f093515)\\n\\nFor more information, you can read our announcement here: https://openbb.co/blog/openbb-terminal-2-acai\\n\\nOr even better, watch the announcement [here](https://openbb.co/blog/openbb-terminal-2-event)!"},{"id":"sweepstake-world-cup-2022-for-your-startup-team","metadata":{"permalink":"/blog/sweepstake-world-cup-2022-for-your-startup-team","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-11-26-sweepstake-world-cup-2022-for-your-startup-team.md","source":"@site/blog/2022-11-26-sweepstake-world-cup-2022-for-your-startup-team.md","title":"Sweepstake World Cup 2022 for your startup team","description":"In this blogpost, we share how we organized a World Cup 2022 sweepstake for our startup team as a team building activity, and how we built a slack bot to facilitate discussions around the event.","date":"2022-11-26T00:00:00.000Z","formattedDate":"November 26, 2022","tags":[{"label":"World Cup 2022","permalink":"/blog/tags/world-cup-2022"},{"label":"Startup Team","permalink":"/blog/tags/startup-team"},{"label":"Sweepstake","permalink":"/blog/tags/sweepstake"},{"label":"Team Building","permalink":"/blog/tags/team-building"},{"label":"Slack Bot","permalink":"/blog/tags/slack-bot"}],"readingTime":2.07,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"sweepstake-world-cup-2022-for-your-startup-team","title":"Sweepstake World Cup 2022 for your startup team","date":"2022-11-26T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280552072-ba486af7-2579-4c00-a575-278cb74faeb6.png","tags":["World Cup 2022","Startup Team","Sweepstake","Team Building","Slack Bot"],"description":"In this blogpost, we share how we organized a World Cup 2022 sweepstake for our startup team as a team building activity, and how we built a slack bot to facilitate discussions around the event."},"prevItem":{"title":"Bloomberg Terminal is no more. OpenBB Terminal 2.0 has just been released.","permalink":"/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released"},"nextItem":{"title":"5 steps I used to change my job title in less than 1 year","permalink":"/blog/5-steps-i-used-to-change-my-job-title-in-less-than-1-year"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, we share how we organized a World Cup 2022 sweepstake for our startup team as a team building activity, and how we built a slack bot to facilitate discussions around the event.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/worldcup2022-sweepstake-slackbot).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nAt [OpenBB](https://openbb.co/), the team puts in so much hard work for [our product](https://github.com/OpenBB-finance/OpenBBTerminal) that doing a team event is like a breath of fresh air. With the World Cup 2022 now taking place and more than half of the team being from Europe (where football is the main sport), we thought that it would be nice to run an OpenBB sweepstake.\\n\\nWe decided to offer a prize to the teams that end up on the podium. 1st place gets X, 2nd place gets Y and 3rd place gets Z - with $ X > $ Y > $Z.\\n\\nThe next step was to assign teams to each employee, so at the end of our all hands meeting we did just that. For that we used this free website: https://spinnerwheel.com/fifa-world-cup-sweepstake-generator.\\n\\nThis allowed us to spin the wheel of team members and then spin wheel of countries, and get a 1:1 match \u2014 it was quite funny to have everyone involved and see the reactions as the wheel was slowing down.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/ab35cfc3-143f-43bf-b345-0999289a4442)\\n\\n**Most companies stop here.**\\n\\n...\\n\\nThe best part about the sweepstake for me, is that the team members that don\u2019t usually interact with each other on a day to day basis have the opportunity to talk amongst themselves for this.\\n\\nSo, to encourage these team interactions, the first step was to create a slack channel #worldcup-2022 that we could use to discuss each game.\\n\\n**But that isn\u2019t enough**, because sometimes you require a trigger to start a discussion about the results and the next fixtures.\\n\\nI looked for a slack bot that achieved this, but **I didn\u2019t find one**.\\n\\nSo I built one using Python which you can find [here](https://github.com/DidierRLopes/worldcup2022-sweepstake-slackbot).\\n\\nThis is the notification that the #worldcup-2022 receives everyday after all the matches have been played.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/7e91f7e9-b085-455f-9768-4da69d409c52)\\n\\nThe outcome has been great so far! Our team engagement is even higher than usual and we see team members that don\u2019t work directly with each other having the opportunity to get to know others better.\\n\\nIf you want to do the same for your team, follow the instructions highlighted [here](https://github.com/DidierRLopes/worldcup2022-sweepstake-slackbot).\\n\\nAny feedback is appreciated!"},{"id":"5-steps-i-used-to-change-my-job-title-in-less-than-1-year","metadata":{"permalink":"/blog/5-steps-i-used-to-change-my-job-title-in-less-than-1-year","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-11-14-5-steps-i-used-to-change-my-job-title-in-less-than-1-year.md","source":"@site/blog/2022-11-14-5-steps-i-used-to-change-my-job-title-in-less-than-1-year.md","title":"5 steps I used to change my job title in less than 1 year","description":"This blog post outlines the five steps I took to change my job title from an Embedded Firmware Engineer to a Sensor Fusion Engineer in less than a year. It provides a roadmap for others who may be looking to make a similar career transition.","date":"2022-11-14T00:00:00.000Z","formattedDate":"November 14, 2022","tags":[{"label":"career","permalink":"/blog/tags/career"},{"label":"job change","permalink":"/blog/tags/job-change"},{"label":"sensor fusion engineer","permalink":"/blog/tags/sensor-fusion-engineer"},{"label":"roadmap","permalink":"/blog/tags/roadmap"},{"label":"hard work","permalink":"/blog/tags/hard-work"}],"readingTime":5.61,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"5-steps-i-used-to-change-my-job-title-in-less-than-1-year","title":"5 steps I used to change my job title in less than 1 year","date":"2022-11-14T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280500184-fd343f2a-7508-488a-a705-a716af395bb2.png","tags":["career","job change","sensor fusion engineer","roadmap","hard work"],"description":"This blog post outlines the five steps I took to change my job title from an Embedded Firmware Engineer to a Sensor Fusion Engineer in less than a year. It provides a roadmap for others who may be looking to make a similar career transition."},"prevItem":{"title":"Sweepstake World Cup 2022 for your startup team","permalink":"/blog/sweepstake-world-cup-2022-for-your-startup-team"},"nextItem":{"title":"How to grow your open source community from scratch","permalink":"/blog/how-to-grow-your-open-source-community-from-scratch.md"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post outlines the five steps I took to change my job title from an Embedded Firmware Engineer to a Sensor Fusion Engineer in less than a year. It provides a roadmap for others who may be looking to make a similar career transition.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nIn March 2020, I joined a startup as an Embedded Firmware Engineer. The startup\u2019s product focuses on smart running insoles with lightweight trackers that fit any running shoes.\\n\\nThe company was small, and the firmware team was myself and 2 Senior Embedded Firmware Engineers.\\n\\nWhat I liked the most about this team was that our interests complemented each other very well. One of the Senior Embedded Firmware Engineers was very strong at wireless communications (BLE, ANT) while the other was great at communication protocols (SPI, I2C). On my end, my strength was from my MSc in Control Systems and my past experience with GNSS. In addition, I had a very high interest in learning about Inertial Navigation System (INS). My goal was to become a Sensor Fusion Engineer.\\n\\nSo what did I do to become a Sensor Fusion Engineer?\\n\\n## Declare your intent\\n\\nSince day 1 in the company, my team lead knew that my goal was to become a Sensor Fusion Engineer.\\n\\nThis is very important, as your manager can keep this in the back of their mind when assigning tasks to you. For instance, my team lead was giving me a lot of material around the way our product processed external samples as this was critical to the INS.\\n\\n## Define a roadmap\\n\\nI asked my manager: \u201c_What do I need to do to be recognized as a Sensor Fusion Engineer_\u201d.\\n\\nKnowing about the matter is not enough, you want to have the credentials so that you can jump faster in your career.\\n\\nMy team lead was not aware of the capabilities I would need to have to become a Sensor Fusion Engineer, so he spent quite some time doing due diligence on this. Good managers will go out of their way to help you grow.\\n\\nAfter some time, we discussed what I would need to do at the company to be recognized as Sensor Fusion Engineer and built a roadmap in order to get there.\\n\\n## Work hard\\n\\nWork extremely hard towards that roadmap.\\n\\nI was not only working towards that roadmap, but I was also working towards it at 2.5x the average speed. I was working 80h \u2014 100h / weeks during that time.\\n\\nI was being pulled into all meetings that discussed sensor fusion, I was reading old documentation to understand the decisions that I made, I was reading codebase and questioning all code (which allowed me to find some issues) and I was taking online courses on top of this.\\n\\nMore importantly, I was experimenting with the product. Theory will only help you so much, you need to get your hands dirty or you will never be able to fully master a skill.\\n\\n## Frequently revise your roadmap\\n\\nThroughout all my 1:1 with my manager, we always revisited the roadmap \u2014 even if briefly. This made sure that he knew how serious I was about this topic, and allowed me to demonstrate my progress.\\n\\nThis also allowed myself to look back and realize my own progress. I would spend time educating him on what I had learned and how we could apply that in our product, including some simulations I had done in Python.\\n\\n## Prove yourself\\n\\nDon\u2019t miss an opportunity to prove yourself.\\n\\nThis is the most critical point, you need to prove that you are capable of delivering by actually demonstrating a real example.\\n\\nThis is the egg or chicken first problem. When you don\u2019t have the initial experience, your company won\u2019t trust you to apply your knowledge. But if your company doesn\u2019t give you the chance you will never get the experience.\\n\\nIn our case, users started getting weird jumps in altitude reported by the trackers. And we needed to figure out the issue fast as this was increasing the churn. I immediately knew I was able to solve this, and knew I had to grab this opportunity.\\n\\nOur trackers were not taking the GPS location in the estimation of user altitude, and I knew that considering that would substantially improve the estimation as the altitude has less chances to change drastically over a small distance.\\n\\nFinally, my degree and hundreds of hours of work were paying off. That day, I wrote our C/C++ altitude estimation algorithm in Python and provided with an input that had a spurious jump in pressure readings \u2014 i.e. I recreated how the issue was happening.\\n\\nI proceeded to implement a Kalman Filter solution to consider GPS readings as well, and the result was a massive improvement. The jump in altitude was non-existant now.\\n\\nIn the daily standup the next day, I had accomplished most of my tasks for the sprint and asked the product owner if I could take a shot at fixing the altitude issue. He was a bit hesitant, but I had a notebook ready to show the problem recreated and my proposed solution in Python.\\n\\nHe accepted and gave me the next 3 days to work on it and to present results on Monday. I didn\u2019t sleep until that Monday. Implementing from Python to C++ was the easy part. The hard part was debugging + optimizing the weights of the Kalman Filter.\\n\\nI was touching the code. Performing an over the air upgrade. Going outside for a run in a track with a bridge where I knew the altitude. Analyzing results at home. Iterate.\\n\\nMonday arrived and I presented results, and they looked so much better. The proposed solution was accepted. Our INS algorithm hadn\u2019t changed in a long time, so a lot of testing was needed.\\n\\nAfter that, the company accepted to offer me the title of Sensor Fusion engineer. Without a pay rise, but that was fine as for me it was about speeding up my career.\\n\\n## Conclusion\\n\\n- Declare intent\\n- Define roadmap\\n- Work towards that roadmap\\n- Frequently revise roadmap\\n- Don\u2019t miss an opportunity to prove yourself\\n\\n**Note:** If the company doesn\u2019t give you a chance to prove yourself, you should interview for that position with other companies. And if another company offers you that job, you will have the leverage that another company perceives you as that.\\n\\nI like [this video](https://youtube.com/shorts/x71Rm0MWVHY?si=BvtmjrE31d6U1bpV) about understanding your market value. And I think it can be extended in terms of your skillset if you want to change your role.\\n\\nFeedback as always is welcome :)"},{"id":"how-to-grow-your-open-source-community-from-scratch.md","metadata":{"permalink":"/blog/how-to-grow-your-open-source-community-from-scratch.md","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-11-10-how-to-grow-your-open-source-community-from-scratch.md","source":"@site/blog/2022-11-10-how-to-grow-your-open-source-community-from-scratch.md","title":"How to grow your open source community from scratch","description":"Growing an open source community from scratch is a challenging task. This blogpost shares insights and strategies on how to effectively build and manage an open source community, using the example of the OpenBB Terminal project.","date":"2022-11-10T00:00:00.000Z","formattedDate":"November 10, 2022","tags":[{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Community Building","permalink":"/blog/tags/community-building"},{"label":"Project Management","permalink":"/blog/tags/project-management"},{"label":"OpenBB Terminal","permalink":"/blog/tags/open-bb-terminal"}],"readingTime":3.92,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-to-grow-your-open-source-community-from-scratch.md","title":"How to grow your open source community from scratch","date":"2022-11-10T00:00:00.000Z","image":"https://github.com/Meg1211/my-website/assets/88618738/ce69575c-01b5-4757-bd0d-6de67a9f5c57","tags":["Open Source","Community Building","Project Management","OpenBB Terminal"],"description":"Growing an open source community from scratch is a challenging task. This blogpost shares insights and strategies on how to effectively build and manage an open source community, using the example of the OpenBB Terminal project."},"prevItem":{"title":"5 steps I used to change my job title in less than 1 year","permalink":"/blog/5-steps-i-used-to-change-my-job-title-in-less-than-1-year"},"nextItem":{"title":"How to learn 10x faster than average","permalink":"/blog/how-to-learn-10x-faster-than-average"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nGrowing an open source community from scratch is a challenging task. This blogpost shares insights and strategies on how to effectively build and manage an open source community, using the example of the OpenBB Terminal project.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n### Project naming\\n\\nThe name should be short, memorable, unique and related with the project.\\n\\nWhen I started what we call OpenBB Terminal today, the name of the project was \u201cStock Market Bot\u201d or something silly like that. I knew that wouldn\u2019t be the last name, but I didn\u2019t have any inspiration and in the meantime I was focused on building the platform.\\n\\nI am an Elon Musk fan, and was a GameStop investor. This meant that once I saw [this tweet](https://twitter.com/elonmusk/status/1354174279894642703) \u2014 I didn\u2019t blink twice and knew this was the name I was waiting for.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/ce69575c-01b5-4757-bd0d-6de67a9f5c57)\\n\\nThat\u2019s when Gamestonk Terminal (now OpenBB Terminal) was born.\\n\\n### Keep the project private until MVP\\n\\n- There will be less pressure than building in public, and you will be able to iterate much faster.\\n- No users asking for features or reporting bugs when MVP is still under development.\\n- Most importantly, this guarantees that when the users see the MVP they know where you are heading with the project.\\n\\nI worked on Gamestonk Terminal for 2 months on my own. The code architecture changed several times as I was in this experimental phase. And if you look into the source code I even committed API keys accidentally. But I had no pressure, so I was able to ship extremely fast.\\n\\n### Prepare to onboard the community\\n\\n- Make the documentation standout (not only \u201cgetting started\u201d but also \u201ccontributing\u201d).\\n- Create \u201cquick win\u201d tickets that the community can address quickly.\\n- Start a group channel on Discord or Slack, which allows you to interact with contributors and discuss features / roadmap and keep them engaged.\\n- Mention \u201cstarring\u201d the project. As simple as this sounds, this helps with growth as its easy to forget to star the project, even though you were interested in what you saw.\\n\\nSome people from our current team told me recently that they fell in love with the README of the project the first time they saw it. In particular with this quote:\\n\\n> _\u201cGamestonk Terminal is an awesome stock and crypto market terminal that has been developed for fun, while I saw my GME shares tanking. But hey, I like the stock.\u201d_\\n\\n
    \\n\\nThis allowed me to gain not only contributors, but maintainers. And nowadays, team members.\\n\\n### Change the project visibility to public\\n\\n- This allows everyone to have a first look into the project, it\u2019s the \u201cHello World\u201d moment.\\n- When sharing the project, describe the problem you are trying to solve and make sure your audience relates with that problem.\\n- Share your project on relevant channels (e.g. Reddit, HackerNews, ProductHunt) \u2014 where your audience is.\\n\\nI have been building in open source for a while, without much success. Until Gamestonk Terminal.\\n\\nThe difference? I shared Gamestonk Terminal on:\\n\\n- Reddit r/SuperStonk \u2014 where the retail traders with the same issue as me were gathered\\n- Reddit r/python \u2014 where the community shares projects built in python\\n- HackerNews \u2014 where I leveraged the name of a known brand in the same industry and insinuated that my tool was similar but affordable. The title was: \u201c[Can\u2019t afford Bloomberg Terminal? No prob, I built the next best thing](https://news.ycombinator.com/item?id=26258773)\u201d.\\n\\n### Keep developing in public\\n\\n- Keep the community updated on the roadmap and progress. You can do this by doing demos of what you have accomplished as you add new features (e.g. [on YouTube](https://www.youtube.com/watch?v=fqGPK8OVHLk) or [on Twitter](https://twitter.com/didier_lopes/status/1567117888590340098)) which allows the community to understand what sort of tasks you are working on, and what they would learn if they were to contribute. It basically gives the community a hindsight into what a contributor will be able to work on / achieve.\\n- Get early feedback and prioritise accordingly.\\n- Occasionally go back to the same channels (e.g. Reddit, Hackernews) to report progress. This guarantees that they know the project is not dead and helps your project staying relevant and on their minds.\\n- Develop in public through livestreams (e.g. [live Coding](https://www.youtube.com/watch?v=9BMI9cleTTg)) or by sharing what you are working on through social media (e.g. [adding a futures menu](https://twitter.com/didier_lopes/status/1579414220256387072)).\\n\\n
    \\n\\nTL;DR: On how to grow your open source project:\\n\\n- Project naming\\n- Keep project private until MVP\\n- Prepare to onboard the community\\n- Change the project visibility to public\\n- Keep developing in public"},{"id":"how-to-learn-10x-faster-than-average","metadata":{"permalink":"/blog/how-to-learn-10x-faster-than-average","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-10-27-how-to-learn-10x-faster-than-average.md","source":"@site/blog/2022-10-27-how-to-learn-10x-faster-than-average.md","title":"How to learn 10x faster than average","description":"Learn how to accelerate your learning process and become 10x faster than average. This blog post provides practical steps to enhance your self-learning abilities and master new skills effectively.","date":"2022-10-27T00:00:00.000Z","formattedDate":"October 27, 2022","tags":[{"label":"learning","permalink":"/blog/tags/learning"},{"label":"self-improvement","permalink":"/blog/tags/self-improvement"},{"label":"skills","permalink":"/blog/tags/skills"},{"label":"education","permalink":"/blog/tags/education"}],"readingTime":2.98,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-to-learn-10x-faster-than-average","title":"How to learn 10x faster than average","date":"2022-10-27T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280500003-e310841f-bc8b-433b-aa79-1debc6e40ef9.png","tags":["learning","self-improvement","skills","education"],"description":"Learn how to accelerate your learning process and become 10x faster than average. This blog post provides practical steps to enhance your self-learning abilities and master new skills effectively."},"prevItem":{"title":"How to grow your open source community from scratch","permalink":"/blog/how-to-grow-your-open-source-community-from-scratch.md"},"nextItem":{"title":"Twitter thread to LinkedIn carousel in python","permalink":"/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nLearn how to accelerate your learning process and become 10x faster than average. This blog post provides practical steps to enhance your self-learning abilities and master new skills effectively.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nEveryone is a self learner. But people\u2019s rhythm of self learning can be vastly different.\\n\\n### Have a good reason to learn this new skill\\n\\nWhat is the main fundamental reason why you want to learn this skill? If you don\u2019t have a one sentence answer, you probably don\u2019t need to learn it.\\n\\nUniversity teaches you hundreds of topics that you end up not being good at because you have no interest in it.\\n\\nAvoid spending your precious time on developing a skill that you have no interest or purpose in. Avoid trends too for this reason.\\n\\n### Research and read about the best way to learn the basics\\n\\nThis should take no longer than one afternoon. Avoid promoted content.\\n\\nUsually, you\u2019re able to find a course/book/video that is acclaimed by the community to be the best to get started with.\\n\\nSo we are looking for the equivalent of \u201cMachine Learning from Andrew Ng\u201d for the skill you want to master.\\n\\n### Consume the basics like your life depends on it\\n\\nThis will be the foundation of all your subsequent learning in this new area. Put your phone away, and take notes.\\n\\nRevisit those notes, and if necessary go back in time to understand the basics.\\n\\nIt took me above average time to finish Machine Learning from Andrew Ng.\\n\\nHowever, since this, whenever I learn or even think about AI problems this is now easier because of that laid out work.\\n\\n### Test your knowledge with a real problem (aka get your hands dirty)\\n\\nAnd no, I don\u2019t mean do an exercise that you find online.\\n\\nDefine a problem that you can solve with the skills you acquired and work on it.\\n\\nDon\u2019t ask for the answer. Don\u2019t Google for the solution, but Google for something that is a current impediment on your solution.\\n\\nIf you are struggling on formulating the Google prompt, revisit your first notes on the skill.\\n\\n### Keep learning about the topic\\n\\nThe getting started foundation will only get you so far. It\u2019s likely that soon you will grow out of that and need to expand your knowledge.\\n\\nDon\u2019t jump on this step too early. Make sure your basics are covered before you move on.\\n\\nGo back to the real problem you worked on, and see how the new learned skills could be applied for that same problem.\\n\\nIf those skills aren\u2019t necessarily in that first problem, it\u2019s also a good sign. It\u2019s a sign that you learned not only the skill but when it is and it isn\u2019t used.\\n\\n### Iterate\\n\\nKeep iterating between using this new skill to solve a real problem and learning from courses/videos/books.\\n\\nThere isn\u2019t a \u201cyou made it\u201d badge. But you know you did, once you\u2019re able to look for a specific piece of information on a video/book to fill in the gap for something you needed for your real problem.\\n\\n
    \\n\\nTL;DR on how to learn 10x faster than average\\n\\n1. Have a good reason to learn this new skill.\\n2. Research and read about the best way to learn the basics.\\n3. Consume the basics like your life depended on it.\\n4. Test your knowledge with a real problem.\\n5. Keep learning about the topic.\\n6. Iterate."},{"id":"how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds","metadata":{"permalink":"/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-10-23-how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds.md","source":"@site/blog/2022-10-23-how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds.md","title":"Twitter thread to LinkedIn carousel in python","description":"In this blog post, I share how I built a Python tool that converts a Twitter thread into a LinkedIn carousel in seconds. This tool is open source and contributions for improvements are welcome.","date":"2022-10-23T00:00:00.000Z","formattedDate":"October 23, 2022","tags":[{"label":"Python","permalink":"/blog/tags/python"},{"label":"LinkedIn","permalink":"/blog/tags/linked-in"},{"label":"Twitter","permalink":"/blog/tags/twitter"},{"label":"Carousel","permalink":"/blog/tags/carousel"},{"label":"Content Creation","permalink":"/blog/tags/content-creation"}],"readingTime":1.775,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds","title":"Twitter thread to LinkedIn carousel in python","date":"2022-10-23T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499955-3f34f9d5-d1b2-426f-8b8d-e6d26a5367da.png","tags":["Python","LinkedIn","Twitter","Carousel","Content Creation"]},"prevItem":{"title":"How to learn 10x faster than average","permalink":"/blog/how-to-learn-10x-faster-than-average"},"nextItem":{"title":"How I would do due diligence on $AMT using OpenBB Terminal","permalink":"/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminal"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blog post, I share how I built a Python tool that converts a Twitter thread into a LinkedIn carousel in seconds. This tool is open source and contributions for improvements are welcome.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/thread-to-carousel/tree/master).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nAs content creators, it would be good if the same content could be utilised across every platform easily. Sometimes you need some tweaks based on audience, but often the same content is used across all platforms.\\n\\nI noticed recently that LinkedIn carousels have been picking a lot of traction, and given I have some nice Twitter threads ([example](https://twitter.com/didier_lopes/status/1570731358204600323?s=20&t=SAO9fD7FR7jeTE-6kem6Mg)) I thought that it would be great if I could convert them into a LinkedIn carousel.\\n\\nSo, I looked for free tools and didn\u2019t find anything good enough. I ended up using [canvas](https://canvas.apps.chrome/) to re-create the thread \u2014 which you can find [here](https://www.linkedin.com/posts/didier-lopes_due-diligence-on-amt-using-openbb-terminal-activity-6977569279395176448-TFMn?utm_source=share&utm_medium=member_desktop). It worked well, but it was time consuming and for most cases, I don\u2019t want to be messing around with the design side of things.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/3f34f9d5-d1b2-426f-8b8d-e6d26a5367da)\\n\\nAs a true software engineer and pythonist, I obtained the Twitter API keys and built a tool that would convert a Twitter thread into a LinkedIn carousel in a matter of seconds.\\n\\nAnd as usual, I open sourced it: https://github.com/DidierRLopes/thread-to-carousel.\\n\\nThis tool is far from perfect, and a lot can be improved on the design side of things to: Recognize emojis; Highlight mentions; Change the size of the box based on the text; Better text placement when images attached; Better URL link display.\\n\\nThe goal for me wasn\u2019t to build a perfect tool, but something easy enough that did the job. And, as the project is open source, I expect to have users contributing to the script so that it can be improved over time.\\n\\nToday I run it using:\\n\\n```console\\npython convert2carousel.py https://twitter.com/didier_lopes/status/1581247044228100096\\n```\\n\\nAnd the result can be found [here](https://www.linkedin.com/posts/didier-lopes_football-momentum-indicator-carousel-activity-6989972573782482944-nM9s?utm_source=share&utm_medium=member_desktop).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/67efec99-d219-47c5-8d83-f19e97a44d76)\\n\\nFeel free to check the project here and I look forward to having contributors helping me improve it!\\n\\nAs always, any feedback welcome \ud83d\ude4f\ud83c\udffd"},{"id":"how-i-would-do-due-diligence-on-amt-using-openbb-terminal","metadata":{"permalink":"/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminal","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-10-20-how-i-would-do-due-diligence-on-amt-using-openbb-terminal.md","source":"@site/blog/2022-10-20-how-i-would-do-due-diligence-on-amt-using-openbb-terminal.md","title":"How I would do due diligence on $AMT using OpenBB Terminal","description":"This blog post provides a detailed walkthrough on how to conduct due diligence on $AMT using the OpenBB Terminal, a free and open source platform for financial data analysis.","date":"2022-10-20T00:00:00.000Z","formattedDate":"October 20, 2022","tags":[{"label":"OpenBB Terminal","permalink":"/blog/tags/open-bb-terminal"},{"label":"Investment Research","permalink":"/blog/tags/investment-research"},{"label":"Stocks","permalink":"/blog/tags/stocks"},{"label":"Due Diligence","permalink":"/blog/tags/due-diligence"}],"readingTime":1.785,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-i-would-do-due-diligence-on-amt-using-openbb-terminal","title":"How I would do due diligence on $AMT using OpenBB Terminal","date":"2022-10-20T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499804-4572fe2a-b0b0-487f-9dee-6c08b0e4c965.png","tags":["OpenBB Terminal","Investment Research","Stocks","Due Diligence"],"description":"This blog post provides a detailed walkthrough on how to conduct due diligence on $AMT using the OpenBB Terminal, a free and open source platform for financial data analysis."},"prevItem":{"title":"Twitter thread to LinkedIn carousel in python","permalink":"/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds"},"nextItem":{"title":"Stop doing your CV in Word or LaTeX","permalink":"/blog/stop-doing-your-cv-in-word-or-latex"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post provides a detailed walkthrough on how to conduct due diligence on $AMT using the OpenBB Terminal, a free and open source platform for financial data analysis.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nLast month someone on Twitter asked me to do a thread on how I would do due diligence on $AMT using the free and open source [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal).\\n\\nBelow I demonstrate what you can expect from using that platform.\\n\\nWe could go much deeper, but this shows examples of output that you can expect. With over 800 commands and over 100 data sources, this is a very small subset of what you can achieve through this platform.\\n\\nIn addition, this will only be in relation with stocks data, but the terminal also has access to options, crypto, ETFs, mutual funds, NFTs, macro economy, futures and even alternative data!\\n\\nMore information on the platform and how to install it [here](https://my.openbb.co/app/terminal/download).\\n\\nStrap in.\\n\\n```console\\n$ /stocks/load AMT/candle\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/4572fe2a-b0b0-487f-9dee-6c08b0e4c965)\\n\\n```console\\n$ /stocks/fa/mktcap\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/2b91a74c-624a-4044-b9e1-9b7138bdcd1e)\\n\\n```console\\n$ /stocks/fa/mgmt\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/2e26ebbf-e26b-4423-87de-a1aace322fa6)\\n\\n```console\\n$ /stocks/fa/income/balance/cash\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b2a496aa-18e5-4fc3-a3c4-cdf92b3e1cf4)\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/9ab0529c-7344-47ca-9868-32cd633bb53a)\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/788cd233-e8a3-4d21-8d6b-8090409950cc)\\n\\n```console\\n$ /stocks/fa/shrs\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/bed6ac95-f76b-487f-b1ee-05783a53c840)\\n\\n```console\\n$ /stocks/fa/sust\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/fd2b31f4-b29c-4d9a-a521-c1a82e870b68)\\n\\n```console\\n$ /stocks/fa/divs\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/45056b50-8210-40eb-b671-463fbd9dfd6b)\\n\\n```console\\n$ /stocks/fa/dcf\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/77086bcf-b2f3-4ca5-a431-9d6e10ed7b0f)\\n\\n```console\\n$ /stocks/ins/stats\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/28ab99a8-c9e0-48f5-80a0-f37383cde28c)\\n\\n```console\\n$ /stocks/dps/psi\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/0fc8870d-83bc-4413-97a9-c214cb0046cc)\\n\\n```console\\n$ /stocks/gov/histcont\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/5de70c19-55fb-437e-95d8-a17f4a9b9f36)\\n\\n```console\\n$ /stocks/dd/rating\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d965a0b6-a169-49f5-88f1-87eac4ae9f42)\\n\\n```console\\n$ /stocks/dd/pt\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f656a805-009c-4751-9842-b7638a459522)\\n\\n```console\\n$ /stocks/dd/est\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/a2bff0b4-69ed-4df0-99a0-f928220d9f2d)\\n\\n```console\\n$ /stocks/ta/sma\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/06996ce2-b1bb-4b21-936a-66b9df3b6a1d)\\n\\n```console\\n$ /stocks/ta/recom/summary\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/015f7839-de0b-45bb-9703-42f986b01d57)\\n\\n```console\\n$ /stocks/ba/sentiment\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/dee84012-741b-4db1-9755-b87afb4da3b5)\\n\\n```console\\n$ /stocks/sia/metric tc\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/bef4daa3-3b93-4a39-82a6-e60d6c3f1dcd)\\n\\n```console\\n$ /stocks/sia/metric fcf\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/c9ad6e51-d9f5-4753-813e-f6d34b697602)\\n\\n```console\\n$ /stocks/sia/vis oi\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e33cd4a1-f333-490e-8829-16474fa05e0f)\\n\\n```console\\n$ /stocks/ca/historical/hcorr\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d339e6bc-6dfe-4059-afb6-5152beab6301)\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/ae3bca4c-0a07-436a-a6c6-f9262f692df2)\\n\\n```console\\n$ /stocks/ca/cashflow/income/balance\\n```\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/8c0bda7a-a35b-43e7-9f22-1a1774ba1425)\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/673bd87e-aede-4917-a3b8-b2ef5f092b18)\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/3eeacc24-e9e8-479e-becc-5dd763420b2c)\\n\\nI know this can be overwhelming information and it takes some time to run all these commands.\\n\\nHence I created a [script](https://github.com/OpenBB-finance/OpenBBTerminal/blob/main/openbb_terminal/miscellaneous/routines/due_diligence_stock.openbb). So now you can run all of these commands in one go, with:\\n\\n```console\\n$ /exe due_diligence_stock.openbb -i AMT\\n```\\n\\nAny feedback is welcome!\\n\\nAnd if you want to ask questions about the product before installing it, feel free to join us on Discord here: https://openbb.co/discord"},{"id":"stop-doing-your-cv-in-word-or-latex","metadata":{"permalink":"/blog/stop-doing-your-cv-in-word-or-latex","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-10-15-stop-doing-your-cv-in-word-or-latex.md","source":"@site/blog/2022-10-15-stop-doing-your-cv-in-word-or-latex.md","title":"Stop doing your CV in Word or LaTeX","description":"The future of CVs for engineers and developers lies within GitHub. This post discusses why GitHub profiles are becoming the new CVs and how they can provide a more comprehensive view of a candidate\'s skills and contributions.","date":"2022-10-15T00:00:00.000Z","formattedDate":"October 15, 2022","tags":[{"label":"GitHub","permalink":"/blog/tags/git-hub"},{"label":"CV","permalink":"/blog/tags/cv"},{"label":"Career","permalink":"/blog/tags/career"},{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Developer","permalink":"/blog/tags/developer"}],"readingTime":2.695,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"stop-doing-your-cv-in-word-or-latex","title":"Stop doing your CV in Word or LaTeX","date":"2022-10-15T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499727-cfdd5535-25eb-4573-ba5a-aa7cbafb1255.png","tags":["GitHub","CV","Career","Open Source","Developer"],"description":"The future of CVs for engineers and developers lies within GitHub. This post discusses why GitHub profiles are becoming the new CVs and how they can provide a more comprehensive view of a candidate\'s skills and contributions."},"prevItem":{"title":"How I would do due diligence on $AMT using OpenBB Terminal","permalink":"/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminal"},"nextItem":{"title":"Why you should drop yfinance API and adopt OpenBB SDK","permalink":"/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdk"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThe future of CVs for engineers and developers lies within GitHub. This post discusses why GitHub profiles are becoming the new CVs and how they can provide a more comprehensive view of a candidate\'s skills and contributions.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThe purpose of a CV is to summarize someone\u2019s career, qualifications and education. **As an engineer or developer, I strongly believe that the future of CVs lies within GitHub.**\\n\\nIn fact, GitHub has realized this and they now allow you to create your own \u201c_profile page_\u201d by creating a repository with the same name as your GitHub username. E.g. https://github.com/DidierRLopes\\n\\nIn my humble opinion, this isn\u2019t being talked enough. Previously, you needed a CV document to talk about your background, education, previous jobs and could rely on your GitHub profile to show your projects. With this update, CVs have become obsolete. When hiring for [OpenBB](https://openbb.co/), I put a lot of weight into the public GitHub of each engineer.\\n\\nThis is my current [GitHub profile page](https://github.com/DidierRLopes).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/97106218-c1d7-4f54-ae7d-e566bb126b71)\\n\\nMy profile page is now much simpler since I\u2019ve worked on my [own personal website](https://didierrlopes.github.io/personal-website/), but you can see [here](https://github.com/DidierRLopes/DidierRLopes/tree/98c27cfb087fc8ce6986f4ea8136e76ca14f145b) what my GitHub profile page looked like before. Creating your own personalized website for me is the next step after GitHub, as you can be as creative as you want while showing off your coding skills.\\n\\nMy repository is my way of showing the world what I can do on my own. From a blank sheet to a finalized project. **Sometimes useful, sometimes for fun, but always with the intention to learn more and challenge myself.**\\n\\nThe reason I think that GitHub profile\u2019s are the CVs of the future for engineers/developers, is not only because you can now both talk about yourself in it and display your portfolio, but because of its open source nature.\\n\\nWith products like: https://ossinsight.io/analyze/DidierRLopes, you will be able to dive deeper on engineering skills than ever before.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/cfdd5535-25eb-4573-ba5a-aa7cbafb1255)\\n\\nCompanies will be able to assess a candidate based on their open source work:\\n\\n- How do they interact with the community? What are their communication skills?\\n- Do they practice teamwork? And mentor more junior developers?\\n- Are they leaving comments in the code? Is their code readable in the first place?\\n- What about testing? Are they following good practices?\\n- What\u2019s their time to reply to issues? Or to review PRs from peers?\\n- Activity? What are their working hour patterns like?\\n- \u2026\\n\\nImagine a world where everyone develops in the wild. You can see everything and be part of any project. You have your own profile, you talk with others through issues or PRs, you build together. There is no gender, no race, no nationality,.. people are conneced through projects they believe in. **In essence, this is the developer metaverse, and I\u2019m all here for it.**\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d98a8384-4230-42d8-8ea3-0d43e0199735)\\n\\n**EDIT:** The reader should be aware that nowadays a properly formatted resume is still critical when added to a job board. This is because automated resume readers expect a certain format in order to recommend candidates to companies and vice-versa.\\n\\nHope you enjoyed this post. As always, any feedback welcome! \ud83d\ude4f"},{"id":"why-you-should-drop-yfinance-api-and-adopt-openbb-sdk","metadata":{"permalink":"/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdk","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-10-01-why-you-should-drop-yfinance-api-and-adopt-openbb-sdk.md","source":"@site/blog/2022-10-01-why-you-should-drop-yfinance-api-and-adopt-openbb-sdk.md","title":"Why you should drop yfinance API and adopt OpenBB SDK","description":"Why you should consider switching from yfinance API to OpenBB SDK for financial data retrieval. OpenBB SDK offers access to multiple data sources, potential for unlimited data, and incentives for data source partners.","date":"2022-10-01T00:00:00.000Z","formattedDate":"October 1, 2022","tags":[{"label":"OpenBB SDK","permalink":"/blog/tags/open-bb-sdk"},{"label":"yfinance API","permalink":"/blog/tags/yfinance-api"},{"label":"Financial Data","permalink":"/blog/tags/financial-data"},{"label":"APIs","permalink":"/blog/tags/ap-is"},{"label":"Open Source","permalink":"/blog/tags/open-source"}],"readingTime":2.11,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"why-you-should-drop-yfinance-api-and-adopt-openbb-sdk","title":"Why you should drop yfinance API and adopt OpenBB SDK","date":"2022-10-01T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499631-0a3d1183-aeff-441b-96ad-88c8b8c49280.png","tags":["OpenBB SDK","yfinance API","Financial Data","APIs","Open Source"],"description":"Why you should consider switching from yfinance API to OpenBB SDK for financial data retrieval. OpenBB SDK offers access to multiple data sources, potential for unlimited data, and incentives for data source partners."},"prevItem":{"title":"Stop doing your CV in Word or LaTeX","permalink":"/blog/stop-doing-your-cv-in-word-or-latex"},"nextItem":{"title":"How I became CEO of OpenBB","permalink":"/blog/how-i-became-ceo-of-openbb"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nWhy you should consider switching from yfinance API to OpenBB SDK for financial data retrieval. OpenBB SDK offers access to multiple data sources, potential for unlimited data, and incentives for data source partners.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nOpenBB SDK will be released later this month \ud83d\udc40.\\n\\n[yfinance API](https://github.com/ranaroussi/yfinance) is an unofficial (not affiliated) API around [Yahoo Finance website](https://finance.yahoo.com/).\\n\\nAlthough it is used in over 12,600 projects on GitHub and is downloaded on average 90,000 per week. This is still an unofficial wrapper. As you can see from Yahoo Finance website, it uses an ad revenue business model. This means that Yahoo Finance doesn\u2019t has any incentive from having users utilizing it through Yfinance API.\\n\\nIf one day Yahoo Finance website adds a paywall through an API key, then Yahoo Finance would:\\n\\n1. Either become obsolete\\n2. Or adopt the same architecture of OpenBB where an API key from a data source is necessary\\n\\n
    \\n\\nRegardless, Yfinance API retrieves data that exists on a third-party website: Yahoo Finance website. This means that this API is limited by the data Yahoo Finance is currently paying for redistribution. And thus, users get only what data is supported through the website.\\n\\nOn the other hand, OpenBB SDK allows you to retrieve data from over 50 different APIs (and growing). With yfinance being one of these APIs.\\n\\nSince OpenBB SDK requires API keys from most of the data sources, these have incentives to partner with OpenBB. Because:\\n\\n1. Marketing opportunity due to significant larger pool of users\\n2. New revenue stream\\n\\n
    \\n\\nIn essence, Yfinance API:\\n\\n- Not officially supported by Yahoo Finance\\n- No incentive for Yahoo Finance\\n- Limited data by what Yahoo Finance displays\\n- May become obsolete\\n\\nOn the other hand, OpenBB SDK:\\n\\n- Marketing for new data sources\\n- New revenue stream for partners through premium API keys\\n- (Almost) unlimited data - open source project that keeps on adding new data sources\\n- Multiple data sources for same data (user has choices)\\n\\nAs counter-intuitive as it sounds:\\n\\nThe shutting down of yfinance API (which is one of the data sources that OpenBB SDK has access to) would be beneficial to OpenBB adoption. This is because users would need to migrate to OpenBB SDK as that\u2019s the most mature and maintained open source financial API.\\n\\nIf you have any questions, feel free to drop me a message!"},{"id":"how-i-became-ceo-of-openbb","metadata":{"permalink":"/blog/how-i-became-ceo-of-openbb","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-08-14-how-i-became-ceo-of-openbb.md","source":"@site/blog/2022-08-14-how-i-became-ceo-of-openbb.md","title":"How I became CEO of OpenBB","description":"This post talks about my story of becoming the CEO of OpenBB, the company behind the fastest growing open source project in\xa0finance.","date":"2022-08-14T00:00:00.000Z","formattedDate":"August 14, 2022","tags":[{"label":"python","permalink":"/blog/tags/python"},{"label":"publishing","permalink":"/blog/tags/publishing"},{"label":"package","permalink":"/blog/tags/package"},{"label":"pypi","permalink":"/blog/tags/pypi"}],"readingTime":3.655,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-i-became-ceo-of-openbb","title":"How I became CEO of OpenBB","date":"2022-08-14T00:00:00.000Z","image":"https://github.com/DidierRLopes/my-website/assets/25267873/6fa08dae-061c-47be-9faf-8fdf4d8d530e","tags":["python","publishing","package","pypi"],"description":"This post talks about my story of becoming the CEO of OpenBB, the company behind the fastest growing open source project in\xa0finance."},"prevItem":{"title":"Why you should drop yfinance API and adopt OpenBB SDK","permalink":"/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdk"},"nextItem":{"title":"Web3, symbols and community","permalink":"/blog/web3-symbols-and-community"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis post talks about my story of becoming the CEO of OpenBB, the company behind the fastest growing open source project in\xa0finance.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nBoth my parents are Portuguese and emigrated to Switzerland for better conditions. This is where my brother and I were born. We moved back to our small hometown in Portugal when I was 8 years old.\\n\\nWhen I was 21 years old I moved to London to pursue my MSc in control systems at the Imperial College. I also joined a semiconductor company as a Software Design Engineer.\\n\\n![ezgif com-optimize (5)](https://github.com/DidierRLopes/my-website/assets/25267873/89dae2b2-d0c2-4826-b0c2-f2d764509e98)\\n\\nIn my spare time I learned Python so I could become more proficient in machine learning and artificial intelligence. When my mathematics professor learned of my interest in Python he challenged me to write the [code behind his PhD thesis](https://github.com/DidierRLopes/UnivariateTimeSeriesForecast) on \\"_Data Science in the Modeling and Forecasting of Financial Time Series: from Classic methodologies to Deep Learning_\\" which combined open source, ML/AI and finance. This was when I first started to realize my passion for financial data.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/dae2965f-447f-4c15-973e-9e9c1a6f1c80)\\n\\nI was inspired by books like \\"_Rich dad Poor dad_\\" which allowed me to understand that the only way to build true generational wealth is through investing. Now that I started to accumulate more savings through my professional pursuits, and with my finance interest increasing from my thesis work, I wanted to invest my own capital.\\n\\nWhat I learned was that investing was a highly cumbersome process. Unlike coding where the tooling (e.g. VSCode) is optimized for efficiency and allows us to automate a lot of processes, investing was highly inefficient and impossible to automate.\\n\\nI was spending hours doing my own investment research (multiple tabs open researching several different sources on a ticker, screenshot the data to put on a document or share with friends, write my thoughts, and repeat), and this had to be done for every single ticker at different instances of time otherwise the data would become irrelevant.\\n\\nI learned from Reddit users how they gained insights and performed due diligence. I quickly realized their \\"workflow\\" was just as inefficient as mine. I concluded that the only aspect of research that should require user input is the interpretation. As far as I was concerned, all data gathering should be automated.\\n\\nI began investigating potential investment research tools that allowed automation and couldn\'t find any, not even the mythical $24k/year Bloomberg terminal. I looked for platforms on GitHub where I could build on top of with no success.\\n\\nDuring Covid Christmas break, the flight to visit my parents was cancelled, so I ended up staying at home and sketching/building what would become my own investment research platform. I noticed that there were hundreds of data providers offering free data tiers where the data provided didn\'t correlate with each other. If I wanted access to paid datasets or more requests per minute it would be as simple as to upgrade my API key to a paid plan.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/b7715556-1094-497d-9f86-aaa97ca090c2)\\n\\nOver the next two months I built a python based command line interface in my spare time for and released the first lines of code as Open Source under the name \\"Gamestonk Terminal\\" since I was an investor in Gamestop and Elon Musk had recently tweeted his now infamous [\\"Gamestonk\\" tweet](https://twitter.com/elonmusk/status/1354174279894642703?s=20).\\n\\nThe project went viral in a couple of minutes on [Reddit](https://www.reddit.com/r/Python/comments/m515yk/gamestonk_terminal_the_equivalent_to_an/) and [HackerNews](https://news.ycombinator.com/item?id=26258773). In under 24h we had over 4,000 stars on [GitHub](https://github.com/OpenBB-finance/OpenBBTerminal), and hundreds of messages requesting features, thanking me for the tool, or reporting bugs.\\n\\nThe number of issues and feature requests was overwhelming for a single person working part-time, so I created a [Discord group](https://openbb.co/discord) and started building a community of users. Many of those same first users went on to become core maintainers of the project. The community started adding new data sources, new features and even new asset classes to the project\u200a-\u200asoon after we were supporting crypto, ETFs, options, forex, and macro economy.\\n\\nMy goal was never to build a business/company with this product. My motivation was to create a better investment research platform that was unavailable until then. When we got approached by JJ (from OSS Capital), it was a no-brainer to create OpenBB, as this would allow me to accelerate the product vision and build the world\'s leading investment research platform."},{"id":"web3-symbols-and-community","metadata":{"permalink":"/blog/web3-symbols-and-community","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-06-28-web3-symbols-and-community.md","source":"@site/blog/2022-06-28-web3-symbols-and-community.md","title":"Web3, symbols and community","description":"This blog post discusses the importance of strong communities in the Web 3.0 space, the role of decentralization, and how voting frameworks based on smart contracts can empower users.","date":"2022-06-28T00:00:00.000Z","formattedDate":"June 28, 2022","tags":[{"label":"Web3","permalink":"/blog/tags/web-3"},{"label":"Community","permalink":"/blog/tags/community"},{"label":"Decentralization","permalink":"/blog/tags/decentralization"},{"label":"Blockchain","permalink":"/blog/tags/blockchain"},{"label":"Smart Contracts","permalink":"/blog/tags/smart-contracts"}],"readingTime":5.48,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"web3-symbols-and-community","title":"Web3, symbols and community","date":"2022-06-28T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499534-10b469e9-60ba-4458-b5b9-853cbffa5680.png","tags":["Web3","Community","Decentralization","Blockchain","Smart Contracts"],"description":"This blog post discusses the importance of strong communities in the Web 3.0 space, the role of decentralization, and how voting frameworks based on smart contracts can empower users."},"prevItem":{"title":"How I became CEO of OpenBB","permalink":"/blog/how-i-became-ceo-of-openbb"},"nextItem":{"title":"Remote + Flexible work >> Salary","permalink":"/blog/remote-flexible-work-salary"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post discusses the importance of strong communities in the Web 3.0 space, the role of decentralization, and how voting frameworks based on smart contracts can empower users.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nIf you have been paying attention to the Web 3.0 space, you should have realized that most of the projects in the space rely on strong communities.\\n\\n### Why on Web 3.0?\\n\\nOn a centralized concept (Web 2), there is usually a regulatory entity that decides whether something is True or False on a project/product. This means that there\u2019s a single centralized company responsible for making a decision and users must trust that this entity is acting on their best interests.\\n\\nFurthermore, the users do not stand to win anything whether the decision is True or False. They may identify more with one of the outcomes, but there is no personal incentive to the user. Even if a user can relate with the outcomes they never feel a sense of belonging, as deep down they are aware that their opinion is not being taken into account.\\n\\nOn a decentralized concept (Web 3), the story is the very different. A decentralized community is responsible for deciding the True or False, based on a voting framework defined a-priori. This means that the group of users, based on smart contracts executed on the blockchain, can vote on a particular decision. **This is where the importance of a strong community kicks in.**\\n\\nOn Web 2 the users must trust that such entity is acting on user\u2019s best interests. That trust, on Web 3, occurs in form of a strong community. The best way for a user to trust the decisions of a group of people is to know that a group shares the same values and has incentives towards the success of the same project/product.\\n\\n**In fact, I believe that in general when these votes occur, the more unanimous the decisions are, the stronger the community is.**\\n\\n> **NOTE:** Although Web 3 communities are stronger than Web 2 ones, I believe that when something goes wrong the Web 3 communities break faster as they don\u2019t have a common enemy due to the decentralized concept (e.g. LUNA debacle). On the other hand, Web 2 communities can \u201chold\u201d onto the fact that their common enemy is now the entity that they trusted to act on their best interests (e.g. Robinhood vs wallstreetbets).\\n\\n### Why build strong communities?\\n\\n_The Web 3.0 concept doesn\u2019t only benefit from strong communities but is built on top of it._ For worldwide adoption in products/projects/companies the space need strong communities.\\n\\nWhy does money have value? Because people believe that they will be able to exchange it for goods/services in the future. Why do people believe that? Because they trust the entity that is managing such currency.\\n\\nAnalogously, for a digital asset to have value, people need to believe that they will be able to exchange it for goods/services in the future. Since there is no entity to trust, people need to believe that the community will believe that a certain digital asset has value. This belief exists because there are incentives (usually financial or status) for its members.\\n\\nOnce this happens we enter into the law of supply and demand where the value of digital asset goes up as there is either less supply or more demand.\\n\\nThese communities can easily be found on CT or Discord/Telegram servers.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/10b469e9-60ba-4458-b5b9-853cbffa5680)\\n\\n### How are strong communities created?\\n\\nIf we learn from history, we see that the most loyal and bigger communities **always recurred at symbology** to achieve such, some examples: sports clubs, religion, countries, clans, societies, \u2026\\n\\nThe truth is that we humans constantly seek this sense of belonging (or are afraid of being alone). When we see multiple people on social media utilizing the same symbols to represent their beliefs, we want to be part of that group, of that community.\\n\\nThis can be seen over and over again on Web3, particularly in CT:\\n\\n- Changing the eyes\u2019 color of your twitter\u2019s pfp which represents being bullish on crypto (usually red for BTC and blue for ETH)\\n- Emojis after the username\\n- Utilizing the NFT you acquired from a collection that you believe in\\n- Adding a \u201c.eth\u201d at the end of the username\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/360569e7-4168-40ac-add3-096000691e87)\\n\\n### Why does this matter?\\n\\nCompanies outside of the Web 3.0 space will start picking up on this to build stronger communities and have a stronger identity (e.g. Notion and their employees pfp on social media). This is even more relevant for open source companies (Web 2.5 if you will), which rely on their communities to build a successful company (e.g. Hugging Face \ud83e\udd17 ).\\n\\n> _I believe that companies will start thinking about the emojis that their community can use while coming up with the name of the brand and logo._\\n\\n
    \\n\\nAs for OpenBB, we are a fintech open source company that focuses on providing better investment research for everyone, anywhere. The finance sector we are in is composed of multiple players that have been on the top of the industry for decades. We come in with a radical different approach, bottom-up.\\n\\n> _Being open source for us is not a choice but a need if we are to disrupt traditional investment research platforms with years of head start._\\n\\n
    \\n\\nOnce we knew that we wanted the logo to be extracted from the \u201cBB\u201d, it was immediate that the butterfly emoji (\ud83e\udd8b) would be used. Furthermore, a butterfly is a metaphor for transformation, which in our context, represents OpenBB Terminal allowing each investor to evolve and finally fly (i.e. achieve financial freedom).\\n\\nIn order for our users to start relating to the butterfly emoji (\ud83e\udd8b) with our brand we have several cues:\\n\\n- On the landing page\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d491e338-8570-4a86-a8a6-48ac95264121)\\n\\n- Official social media channels\\n- Our team members use it in their socials\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/cbfca912-0c96-40f5-b8f6-3c1e9645ee82)\\n\\n- On the OpenBB Terminal as the default flair,\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/7d8dcf03-c340-4b35-8255-920b75daac71)\\n\\nAnd even to replace the asterisk (*) when inserting the password to enter our OpenBB Bot platform, **because details matter.**\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b6088f2a-5ec2-42f8-adef-e4dcf1e6e812)\\n\\nAnd that is what we are doing at OpenBB to build a stronger community? Do you have any other tips/tricks? Feel free to share them!\\n\\nHope you enjoyed this post and as always, am looking to hear feedback!\\n\\n_PS: I\u2019d like to take this chance to say that our OpenBB Bot launch will occur in the coming weeks, you won\u2019t have to wait much longer \ud83e\udd8b_"},{"id":"remote-flexible-work-salary","metadata":{"permalink":"/blog/remote-flexible-work-salary","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-05-03-remote-flexible-work-salary.md","source":"@site/blog/2022-05-03-remote-flexible-work-salary.md","title":"Remote + Flexible work >> Salary","description":"This blog post discusses the importance of remote and flexible work hours, and how it can significantly improve work-life balance and productivity.","date":"2022-05-03T00:00:00.000Z","formattedDate":"May 3, 2022","tags":[{"label":"Remote Work","permalink":"/blog/tags/remote-work"},{"label":"Flexible Hours","permalink":"/blog/tags/flexible-hours"},{"label":"Work Life Balance","permalink":"/blog/tags/work-life-balance"},{"label":"Productivity","permalink":"/blog/tags/productivity"}],"readingTime":4.785,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"remote-flexible-work-salary","title":"Remote + Flexible work >> Salary","date":"2022-05-03T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499305-ad97cd9d-c836-443c-b333-78a193b3ac99.png","tags":["Remote Work","Flexible Hours","Work Life Balance","Productivity"],"description":"This blog post discusses the importance of remote and flexible work hours, and how it can significantly improve work-life balance and productivity."},"prevItem":{"title":"Web3, symbols and community","permalink":"/blog/web3-symbols-and-community"},"nextItem":{"title":"Looking for a new tattoo? OpenBB has you covered\u2026 literally.","permalink":"/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literally"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post discusses the importance of remote and flexible work hours, and how it can significantly improve work-life balance and productivity.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nI was thinking about remote + flexible hours, and I don\u2019t think I would ever work for a company without these. At least by choice \ud83d\ude43\\n\\nI mean, who would tell Morty and Sum Sum that I wouldn\u2019t be at home to play?\\n\\n**I\u2019m a strong believer that work should wrap around your lifestyle and not vice-versa.**\\n\\nOn average, a person works 40 hours a week and sleeps 8 hours a day. This means that out of 168h per week you have 72h for personal time. In terms of percentage we have: 24% for work, 33% for sleep, and 43% for personal time.\\n\\nSo how come most people have almost 2x as much personal time compared to work time and they still feel like they are in this 9\u20135 rat race and their life revolves around work?\\n\\nWell, here\u2019s the 4 scenarios as I see it\u2026\\n\\n**1. The work is not remote (and not flexible).**\\n\\n - If we account for the commute and stress associated with, personal time gets directly transferred into work time.\\n - E.g. with a daily 2 hour commute Mon-Fri, which is very typical, this means that your personal time is divided into 30% for work and 37% for personal. This isn\u2019t event including the part where you have to prepare to leave the house, and the tiredness resultant from the commute.\\n\\n**2. The work is remote but not flexible.**\\n\\n - This is much better than the previous. But it\u2019s still not good enough. The argument here is not due to absolute time but performance and state of mind.\\n - Life is not straightforward. We, as individuals, are very different between ourselves. Our bodies, mind, brain, relationships, \u2026 work very differently. By not being flexible on the working hours you are basically ignoring all of that diversity and grouping everyone into a single 9\u20135 + Mon-Fri category.\\n - _The \u201cironic\u201d part is that most companies promote diversity and don\u2019t think about this. Which just shows that the diversity topic has become very much a marketing vehicle._\\n - In my case, I\u2019m a night owl, I don\u2019t usually wake up too early, because I am much more productive when I stay awake until 3/4 am. If I have to wake up early because someone decided that 8:30am was the time that everyone needed to \u201ccheck in\u201d you are basically not getting the most out of me.\\n - One may wonder, well, this is a company problem because they are paying for an employee that is not performing as much as they could. Unfortunately, that\u2019s not true, it\u2019s a much bigger problem to the employee. This is because when an employee excels at a job they tend to have a much happier life which in turn increases performance, which increases happiness, and so on and so forth.\\n\\n**3. There is no mention for not remote but flexible because, in my opinion, that makes very little sense.**\\n\\n**4. Now, let\u2019s imagine the scenario where the work is remote and flexible.**\\n\\n - This is where it gets interesting. When we fall on this scenario your job perspective changes drastically. This is because at this point you put yourself first and can define your own priorities while having a pool of time to get a job done at your own time.\\n - E.g. you can plan activities with friends, do exercise, meditate, \u2026 whatever suits your lifestyle. Which will give you a boost of energy to perform even better at your job. On top of this, you don\u2019t need to squash the work within Mon-Fri, once you are in this flexible regime you may use the weekend to your advantage. Flights at 20 Euros on Tuesday to come back Thursday? Fine, I\u2019ll work during weekend to make up for this time\\n - There are people that love a 9\u20135 Mon-Fri schedule and that is fine. For those it means that the 9\u20135 Mon-Fri system implemented got it right. In fact, I would argue, that they are still wrapping work around lifestyle, it\u2019s just that their lifestyle is working 9\u20135 Mon-Fri and enjoying time outside these hours.\\n\\nThe downsides of this fully flexible work are:\\n\\n- Interaction with coworkers and communication. But with us going global due to remote work, it doesn\u2019t really matter, since the 9\u20135 hours of different countries would already lead to this problem\\n- Tracking employee timesheet. I think that a company shouldn\u2019t track an employee timesheet because results are far more important than working hours, and can be just as measurable.\\n\\n
    \\n\\nAll of this to say that at OpenBB we have:\\n\\n- **REMOTE WORK:** As long as you are in a location with internet access, we are not worried. This allows us to build a strong diverse team with different backgrounds and ideas.\\n- **FLEXIBLE HOURS:** We believe that your work should wrap around your lifestyle and not vice-versa. As long as you excel, you will not be asked why you woke up at noon.\\n- **UNLIMITED HOLIDAYS:** Who has time to track holidays when building such an exciting project? We trust in our people to manage their own PTO and keep performing at the highest level.\\n\\nAND this is how I sleep at night having no idea at what time John logged in and out:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/dbf48e0f-b711-4e57-988a-26a791f8bdaf)\\n\\nOhhh, and we\u2019re hiring!\\n\\nIf you provide a referral to someone that ends up joining OpenBB, I will transfer you $100 as a token of appreciation \ud83e\udd8b"},{"id":"looking-for-a-new-tattoo-openbb-has-you-covered-literally","metadata":{"permalink":"/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literally","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-04-21-looking-for-a-new-tattoo-openbb-has-you-covered-literally.md","source":"@site/blog/2022-04-21-looking-for-a-new-tattoo-openbb-has-you-covered-literally.md","title":"Looking for a new tattoo? OpenBB has you covered\u2026 literally.","description":"Exploring unconventional ways to increase brand visibility, OpenBB\'s co-founder gets a tattoo of the company logo. This blog post discusses the thought process behind this unique marketing strategy.","date":"2022-04-21T00:00:00.000Z","formattedDate":"April 21, 2022","tags":[{"label":"OpenBB","permalink":"/blog/tags/open-bb"},{"label":"Marketing","permalink":"/blog/tags/marketing"},{"label":"Tattoo","permalink":"/blog/tags/tattoo"},{"label":"Brand Awareness","permalink":"/blog/tags/brand-awareness"}],"readingTime":3.125,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"looking-for-a-new-tattoo-openbb-has-you-covered-literally","title":"Looking for a new tattoo? OpenBB has you covered\u2026 literally.","date":"2022-04-21T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499252-fa6ca582-187b-4ddf-9ecf-1e259939f26f.png","tags":["OpenBB","Marketing","Tattoo","Brand Awareness"],"description":"Exploring unconventional ways to increase brand visibility, OpenBB\'s co-founder gets a tattoo of the company logo. This blog post discusses the thought process behind this unique marketing strategy."},"prevItem":{"title":"Remote + Flexible work >> Salary","permalink":"/blog/remote-flexible-work-salary"},"nextItem":{"title":"How I created the best discord meme bot","permalink":"/blog/how-i-created-the-best-discord-meme-bot"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nExploring unconventional ways to increase brand visibility, OpenBB\'s co-founder gets a tattoo of the company logo. This blog post discusses the thought process behind this unique marketing strategy.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nWhen [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal) started last year, I went from having your typical career as a Software Engineer to becoming a co-founder & CEO of a C-Corporation overnight. One thing that I\u2019ve really learnt from this change, is I can no longer code for 12\u201316 hours a day straight as my role now involves so much more than this\u2026 and most interestingly, one of those things is marketing.\\n\\nDuring Easter in Lisbon, I was thinking about how to increase the visability of [OpenBB](https://openbb.co/). _An investment research platform for everyone, anywhere_. Seems self-explanatory and something most of us would relate to, but the problem is reaching a bigger audience.\\n\\nDue to [our $8.5M funding](https://openbb.co/blog/gme-didnt-take-me-to-the-moon-but-gamestonk-terminal-did) we have money in the bank, which means we can afford to do some ads campaigns. However, I very much dislike the traditional type of ads, whether that is with Google, Instagram, Twitter or YouTube. Particularly YouTube ones, when I see an ad there I immediately think less of the product being advertised due to how intrusive these are.\\n\\nThat\u2019s why I started thinking of ways to share our OpenBB brand in a non-intrusive way. In fact, I went one step further and started thinking when I personally would welcome ads.\\n\\nFunnily enough, the first thing that came to my mind was when I go to the bathroom without my phone. Although there\u2019s no ads on the back of shampoos/shower gel/soap/spray, I would very much welcome them.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/0a8000e0-1a19-4c63-813d-caeb6fd67c9a)\\n\\nIt\u2019s not like knowing the %s of ingredients that makes up cleaning products has a lot of use cases\u2026\\n\\nThis brought me to the conclusion that I would only welcome ads if I was bored and didn\u2019t have anything keeping me \u201ctoo busy\u201d. This immediately made me think of London underground ads (the most effective type of DOOH imho). I always read those ads. The main reason being that I don\u2019t have WiFi underground and the noise is too loud to listen to a podcast. Hence, I imagined the underground looking like:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/af42f60a-799c-468e-a5e1-b8faf1daf2ad)\\n\\nWhen I checked for the prices, I was looking at a marketing campaign for a couple of days in a couple of stations costing over 5 digits, which is quite expensive for the short time-span.\\n\\nTherefore, I started to think of cheaper alternatives that yielded a better ROI. The next thing that passed through my mind was wearing OpenBB swag (yet to be revealed, [subscribe to our newsletter](https://openbb.co/newsletter) to know more). However, I feel like nowadays everyone has a t-shirt with a different logo and these aren\u2019t as noticeable as before \u2014 at least that\u2019s my perspective.\\n\\nThis lead me to think: **What about a tattoo?** It\u2019s a similar concept than OpenBB clothes but more powerful. In addition, when wearing OpenBB clothes with a visible tattoo, this will create a \u201ccuriosity\u201d effect since the symbol is repeated (clothes and tattoo). In addition, I\u2019ve not come across anyone using their body to express their brand.\\n\\nLater that day I booked a tattoo slot, paid 100 euros, and got the OpenBB logo on the back of my arm as shown below,\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/fa6ca582-187b-4ddf-9ecf-1e259939f26f)\\n\\nI will let you know on my socials how many people ask about this tattoo over the course of my life.\\n\\nAnd if you like [our logo](https://www.openbb.design/9242dc28c/p/809a44-logo) and [our values](https://www.openbb.design/9242dc28c/p/91bbcc-our-values), OpenBB will pay you for the tattoo.\\n\\n**One things for sure, now I can definitely put the gym membership as a company expense since I\u2019m a walking billboard \ud83d\ude04**\\n\\nThe first walking/running/coding/eating/drinking OpenBB billboard."},{"id":"how-i-created-the-best-discord-meme-bot","metadata":{"permalink":"/blog/how-i-created-the-best-discord-meme-bot","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-04-09-how-i-created-the-best-discord-meme-bot.md","source":"@site/blog/2022-04-09-how-i-created-the-best-discord-meme-bot.md","title":"How I created the best discord meme bot","description":"In this blog post, I share my journey of creating a Discord meme bot, the role it played in building a vibrant community around our open source project, and how you can add your own memes to the bot.","date":"2022-04-09T00:00:00.000Z","formattedDate":"April 9, 2022","tags":[{"label":"Discord","permalink":"/blog/tags/discord"},{"label":"Meme Bot","permalink":"/blog/tags/meme-bot"},{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Community Building","permalink":"/blog/tags/community-building"}],"readingTime":3.89,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-i-created-the-best-discord-meme-bot","title":"How I created the best discord meme bot","date":"2022-04-09T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280499097-f324321b-d438-4838-b0a0-e3155611538a.png","tags":["Discord","Meme Bot","Open Source","Community Building"],"description":"In this blog post, I share my journey of creating a Discord meme bot, the role it played in building a vibrant community around our open source project, and how you can add your own memes to the bot."},"prevItem":{"title":"Looking for a new tattoo? OpenBB has you covered\u2026 literally.","permalink":"/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literally"},"nextItem":{"title":"Meet the most advanced investment research platform","permalink":"/blog/meet-the-most-advanced-investment-research-platform"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blog post, I share my journey of creating a Discord meme bot, the role it played in building a vibrant community around our open source project, and how you can add your own memes to the bot.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/discord-memes).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n## Background\\n\\nOver the past few weeks, life has been very chaotic on my end, mostly due to the announcement of [OpenBB](http://www.openbb.co/) last week which you can read the full story on [here](https://openbb.co/blog/gme-didnt-take-me-to-the-moon-but-gamestonk-terminal-did).\\n\\nWhen I started [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal), all my focus was on building, building and building. Once I made the project open source and contributors started to appear, I slowly saw my time shifting **from building a product to building a community**. This community ultimately would end up building the product, but from my end, I need to be able to pass on my passion to the project and vision.\\n\\nDeveloping features for the terminal only took me a couple of minutes, whereas the connection with the community is a long-time game. You don\u2019t become close with someone you\u2019ve never met within couple of minutes. Instead you need to put effort into the relationship and **consistency is key**.\\n\\nThe community on our Discord was growing day by day. And so was my relationship with the people in it. The truth is, we were not only sharing insights about the platform, but were laughing and bonding together whilst building it. **And memes/gifs are a big part of these interactions.**\\n\\nFor people who know me, they know how much I love memes and how I can always create memes for every situation (honestly, all the time I spent on Instagram is finally paying off).\\n\\nAlthough I believe that we have one of the most exciting open source projects going on, I also strongly believe that our fun culture (i.e. memes) is what makes contributors want to work in this particualr environment. **Building the future of investment research can be fun and this is what we\u2019re proving.**\\n\\nAt this stage, I think I\u2019ve spent more time interacting with people than I have working on the platform. The funny thing is that **the platform is 10x better than what it would be if I was working on my own**. Creating a strong community pays off and this is why since the start I was having calls with literally everyone to help them install our platform. Today, most of the team at OpenBB was met on Discord whilst working on the platform. **I didn\u2019t need any interviews, they weren\u2019t candidates anymore but people that I enjoyed to work with** and wanted on the team.\\n\\nSorry for the background story, but it was important to me to explain why I worked on this. **The interesting part of the article starts now.**\\n\\n## Development\\n\\n**The idea of Discord Memes is to avoid to open [imgflip](https://imgflip.com/) everytime I wanted to add text to a meme.** Personally, I love the gifs available through Discord but I think a meme with text is much more powerful (and funny).\\n\\nWhen I started coding this here and there, I wanted the code to be super straightforward so it was very simple and fast to add a new meme to the pool. And so I did.\\n\\nThe process to add new memes is incredibly easy. Go to the [project](https://github.com/DidierRLopes/discord-memes) and star it for starters (also [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal) since you\u2019re at it). Then,\\n\\n1. Add the meme you want to the `memes/` folder, e.g. `spongebob.jpg`\\n\\n2. Then create a function with the same name of the image (e.g. `spongebob`) with the following format\\n\\n
    \\n\\n```python\\n@create_and_send_meme()\\ndef spongebob(inter, text: str = None, _=None):\\n if text:\\n _.text(\\n 0.5,\\n 0.2,\\n \\"\\\\n\\".join(wrap(\'\'.join(choice((str.upper, str.lower))(c) for c in text), 40)),\\n fontsize=20,\\n color=\\"white\\",\\n alpha=0.9,\\n horizontalalignment=\\"center\\",\\n path_effects=[pe.withStroke(linewidth=4, foreground=\\"black\\")]\\n )\\n return _\\n```\\n\\n3. That\u2019s it.\\n\\n
    \\n\\n**Note:** I created a python decorator `@create_and_send_meme()` that basically abstracts all the memes created and picks up the image on memes with the same name of the function. This way, the person adding a meme just needs to focus on the text on the image, i.e. it\'s location, size, where it wraps, colours and alignment.\\n\\nI used a playground.ipynb notebook, which is also on the repo, to increase the speed of the text placement on each of the memes I added.\\n\\nThis is how it looks,\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f6b1ea15-40f8-4ebc-bbf8-209b502f943d)\\n\\nOR\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f324321b-d438-4838-b0a0-e3155611538a)\\n\\nAs you can see, our Discord server just stepped up. [Join us](https://openbb.co/discord) to try out the meme bot, build the future of investment research or just to say hi.\\n\\nWe\u2019ll be waiting for you. \ud83e\udd8b"},{"id":"meet-the-most-advanced-investment-research-platform","metadata":{"permalink":"/blog/meet-the-most-advanced-investment-research-platform","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-03-21-meet-the-most-advanced-investment-research-platform.md","source":"@site/blog/2022-03-21-meet-the-most-advanced-investment-research-platform.md","title":"Meet the most advanced investment research platform","description":"Meet the most advanced investment research platform. This blog post introduces Gamestonk Terminal, an advanced investment research platform, and discusses its features and automation capabilities.","date":"2022-03-21T00:00:00.000Z","formattedDate":"March 21, 2022","tags":[{"label":"Investment Research","permalink":"/blog/tags/investment-research"},{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal"},{"label":"Automation","permalink":"/blog/tags/automation"},{"label":"Routines","permalink":"/blog/tags/routines"}],"readingTime":1.42,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"meet-the-most-advanced-investment-research-platform","title":"Meet the most advanced investment research platform","date":"2022-03-21T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280498967-0cd2335e-3099-43a5-996e-27bb34903348.png","tags":["Investment Research","Gamestonk Terminal","Automation","Routines"],"description":"Meet the most advanced investment research platform. This blog post introduces Gamestonk Terminal, an advanced investment research platform, and discusses its features and automation capabilities."},"prevItem":{"title":"How I created the best discord meme bot","permalink":"/blog/how-i-created-the-best-discord-meme-bot"},"nextItem":{"title":"UX/UI is better than features","permalink":"/blog/gamestonk-terminal-ux-features"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nMeet the most advanced investment research platform. This blog post introduces Gamestonk Terminal, an advanced investment research platform, and discusses its features and automation capabilities.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nSeveral people have asked me why [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal) doesn\u2019t have release versions, and the main reason is because at the pace the team codes and the rate that new features / bug fixes appear it doesn\u2019t yet makes sense to do so.\\n\\nTo give you an example, recently I shared the first **DEMO of what the terminal can do**, and I mention about our \u201croutines\u201d automation concept.\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nOne week later, using the latest version of the terminal, on top of that simplistic routine type you are able to:\\n\\n1. Provide variable input variables when calling the routine using $ARGV[i] (I used Perl convention here eheh)\\n2. Execute routines from within the terminal directly\\n3. Add comments to the routines so the process is more clear\\n4. Exporting data to a folder of choice is now possible\\n5. Exporting a file with a pre-defined name is now possible\\n6. Allow for the first line of the routines to be selecting a folder to export ALL the data\\n\\n
    \\n\\nSee below a 1 minute video of what these routine automated scripts look like!\\n\\n
    \\n \\n
    \\n\\n
    \\n\\nReach out if you have any question to the team, there\u2019s very little we can\u2019t do!\\n\\nThis is the way!"},{"id":"gamestonk-terminal-ux-features","metadata":{"permalink":"/blog/gamestonk-terminal-ux-features","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2022-01-06-gamestonk-terminal-ux-features.md","source":"@site/blog/2022-01-06-gamestonk-terminal-ux-features.md","title":"UX/UI is better than features","description":"Gamestonk Terminal\'s UX/UI features and the teamwork behind their implementation.","date":"2022-01-06T00:00:00.000Z","formattedDate":"January 6, 2022","tags":[{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal"},{"label":"UX/UI","permalink":"/blog/tags/ux-ui"},{"label":"Software Development","permalink":"/blog/tags/software-development"},{"label":"Teamwork","permalink":"/blog/tags/teamwork"}],"readingTime":4.19,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"gamestonk-terminal-ux-features","title":"UX/UI is better than features","date":"2022-01-06T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280497759-9d698e1e-6ee1-4856-a6af-48cee6b2eb34.png","tags":["Gamestonk Terminal","UX/UI","Software Development","Teamwork"],"description":"Gamestonk Terminal\'s UX/UI features and the teamwork behind their implementation."},"prevItem":{"title":"Meet the most advanced investment research platform","permalink":"/blog/meet-the-most-advanced-investment-research-platform"},"nextItem":{"title":"Sector and Industry Analysis \u2014 Gamestonk Terminal","permalink":"/blog/sector-and-industry-analysis-gamestonk-terminal"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nGamestonk Terminal\'s UX/UI features and the teamwork behind their implementation.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n**Features attract users, UX/UI conquers them \u2694\ufe0f**\\n\\nThroughout month of December, me and 3 of the most active maintainers of [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal) had a meeting where we discussed shifting our focus from adding features, to improving the terminal UX/UI to make it even more attractive. The main outcomes of these meeting were:\\n\\n1. Relative and Absolute menu jumping, e.g. if i\u2019m in crypto/ta and want to go to stocks/ta I can do:\\n\\n a. Absolute: `/stocks/load tsla/ta`\\n\\n b. Relative: `../../stocks/load tsla/ta`\\n\\n3. Scripting feature. You can now interact with the terminal through a sequence of commands, e.g.: `stocks/disc/ugs -l 3/gtech/active`.\\n\\n4. `reset` command everywhere to allow for faster development as it exits from the terminal and comes to the same menu running new terminal code and its API keys.\\n\\n5. Auto-completion in commands with choices.\\n\\n6. When misspelling a command name, if it\u2019s similar enough that the terminal recognises the right command, it will replace it, to speed up interaction.\\n\\n
    \\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e1f039d6-f75e-41e2-88f5-7b0f16564093)\\n\\n6. Running a `.gst` job, like `python terminal.py scripts/test_stocks_disc.gst` which allows to run a sequence of commands of the terminal. In the future we can take advantage of this for integration tests. The user can build their own daily routines to speed up the investment process.\\n\\n
    \\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/68974111-8cb5-4866-ad14-caae7517d869)\\n\\nNow, I know what you\u2019re thinking. This is a massive improvement over the terminal usage up until now, and that\u2019s a **LOT** of code changes. Which is very much true, to be specific, this engineering effort resulted in:\\n\\n> **370 files changed with 44,875 additions and 18,463 deletions**\\n\\n
    \\n\\nAnd you may be wondering how long did this take us to do. Nope, it wasn\u2019t months but\u2026\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/8fc95c85-9c40-46b0-88e0-68700c3bfb9b)\\n\\n**1 week. Yup, a single f*king week.** You can see that it was finalised with these PRs ([#1049](https://github.com/GamestonkTerminal/GamestonkTerminal/pull/1049), [#1041](https://github.com/GamestonkTerminal/GamestonkTerminal/pull/1041), [#1048](https://medium.com/@dro-lopes/gamestonk-terminal-ux-features-f9754b484919#1048)).\\n\\nIn that week we split work, did pair programming, we called each other to discuss better implementation practices, we changed the architecture 2/3 more times\u2026 On top of that, I was feeling overwhelmed with the stocks menu, I clearly underestimated how many features we have (how naive\u2026), so the 3 other maintainers jumped on it and helped me out. In 3 or so years of software engineering, this was** teamwork like I\u2019ve not felt before**.\\n\\nThat weekend I was so happy as we accomplished this task that I think I didn\u2019t even work on the terminal that Sunday! Doesn\u2019t happen often these days!\\n\\nHowever, as a good friend of mine told me:\\n\\n> _**\u201cThe entertainment industry hasn\u2019t found yet something more appealing than developing code towards a product I believe in and with people I like\u201d**_\\n\\n
    \\n\\nI still think about this often, and this is what I tell my girlfriend, to explain why I\u2019m coding and not playing Mario Kart 8 Deluxe with her. (the fact she always beats me at it also may be considered as a factor \ud83e\udd23).\\n\\nYou may be thinking this is a one off, the reality is that **it isn\u2019t**. Another example can be seen in [this blog post](https://dev.to/northern64bit/aspiring-16-year-old-quant-developer-contributing-to-open-source-application-16k4). This goes over the story of the development of our discord bot where it all started from a message from a **16yo contributor that wants to become a quant**. He wanted to not only improve his python skills with us but also bring the terminal features to a bigger audience. Working with us in an open-source project is helping him towards achieving his life-goal dream.\\n\\nWhile I write this post another contributor, finishing his CPA, is working on [improving the code resulting from that UX effort by creating a base class](https://github.com/OpenBB-finance/OpenBBTerminal/pull/1141) so that new developers can add controllers much easily (he estimates a reduction of 11% of codebase size based on \u201cnapkin maths\u201d as he puts it).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/165db265-f583-4842-b9ef-8beed2348aa2)\\n\\nWhile user experience is critical, so is user interface. And that is why our next engineering effort will be around it. We already have something in the works in [this PR](https://github.com/GamestonkTerminal/GamestonkTerminal/pull/1140), where we can draw lines and write text! Almost like TradingView (almost\u2026 \ud83d\ude2c).\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/c3703249-5d78-469a-b3b7-611f04dec6e1)\\n\\nSo, keep on the lookout because 2022 is gonna be a big year for us!! \ud83e\udd8b \ud83d\ude80\\n\\nOhh, before I say thanks for the read and all that, it\u2019s also worth mentioning that there\u2019s a PR in the queue for a new context called \u201c**alternative data**\u201d, which already has a **COVID menu** to factor that data into account on your investments.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/9d698e1e-6ee1-4856-a6af-48cee6b2eb34)\\n\\n_PS: The blue text is because we are transitioning towards [rich package](https://github.com/Textualize/rich) which gives a lot more freedom when it comes to improving our user interface._\\n\\n
    \\n\\nThanks for your read, and if you enjoy Gamestonk Terminal, please reach out to [our discord](https://discord.gg/ptYabd8w) to say thank you, or ideally: for **@terp340** to change date format to dd/MM/YYYY \u2014 **the only correct one**!\\n\\nHappy 2022 with lots of love \u2764\ufe0f"},{"id":"sector-and-industry-analysis-gamestonk-terminal","metadata":{"permalink":"/blog/sector-and-industry-analysis-gamestonk-terminal","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-12-02-sector-and-industry-analysis-gamestonk-terminal.md","source":"@site/blog/2021-12-02-sector-and-industry-analysis-gamestonk-terminal.md","title":"Sector and Industry Analysis \u2014 Gamestonk Terminal","description":"The development journey of a new Sector and Industry Analysis feature for Gamestonk Terminal, integrating the FinanceDatabase package.","date":"2021-12-02T00:00:00.000Z","formattedDate":"December 2, 2021","tags":[{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal"},{"label":"Sector Analysis","permalink":"/blog/tags/sector-analysis"},{"label":"Industry Analysis","permalink":"/blog/tags/industry-analysis"},{"label":"FinanceDatabase","permalink":"/blog/tags/finance-database"},{"label":"Open Source","permalink":"/blog/tags/open-source"}],"readingTime":4.01,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"sector-and-industry-analysis-gamestonk-terminal","title":"Sector and Industry Analysis \u2014 Gamestonk Terminal","date":"2021-12-02T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280497500-a8730909-278e-4186-9139-0b08f7ed88c0.png","tags":["Gamestonk Terminal","Sector Analysis","Industry Analysis","FinanceDatabase","Open Source"],"description":"The development journey of a new Sector and Industry Analysis feature for Gamestonk Terminal, integrating the FinanceDatabase package."},"prevItem":{"title":"UX/UI is better than features","permalink":"/blog/gamestonk-terminal-ux-features"},"nextItem":{"title":"Handing your twitter account to your most avid community member","permalink":"/blog/handing-your-twitter-account-to-your-most-avid-community-member"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThe development journey of a new Sector and Industry Analysis feature for Gamestonk Terminal, integrating the FinanceDatabase package.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThe end-to-end story of developing a new **Sector and Industry Analysis** for [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal) from scratch.\\n\\nOn the 13th of October, [Jeroen Bouma](https://github.com/JerBouma) (a ALM advisor and python enthusiast) reached out in order to integrate his [FinanceDatabase package](https://github.com/JerBouma/FinanceDatabase) into [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e98a2b76-8113-461e-a69f-48a706971adb)\\n\\nAfter having a call with Jeroen to bounce ideas, it was clear that our terminal needed such capability to be even more powerful (as if **over 500 features** already and counting didn\u2019t already do the trick eheh). However, at the time I was too busy to work on the concept so I asked Jeroen if he could sketch something up on a jupyter notebook.\\n\\nWithin the following week, Jeroen sent a Jupyter notebook explaining the FinanceDatabase module and what we could have in a Sector and Industry analysis.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f8402594-0d19-4017-bb7b-cd61a593fd2d)\\n\\nIn addition, he also mentioned his [PassiveInvestor package](https://github.com/JerBouma/ThePassiveInvestor), and ended up [implementing it on his own in Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal/pull/857)! This was a great addition, as it strengthened our **ETF context** and provided a slick Excel report for the Excel fans out there! See his [LinkedIn post](https://www.linkedin.com/feed/update/urn:li:activity:6859887432532291584/) on the experience.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/9ce2dfd0-c891-44f0-b0ae-1a774203bdb7)\\n\\n...\\n\\nForward to last weekend (1.5 months later), I had a free Sunday afternoon so started working on the development of this menu. I started by thinking about what would make this menu more flexible and powerful.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/942f3089-6cb1-4062-b1be-2bb204a7133d)\\n\\nThese were my thoughts about what it needs:\\n\\n- **Several filtering parameters** as the number of companies in the database is pretty huge with 155.705 tickers, 16 sectors, 242 industries, 111 countries and 82 exchanges. These were the filters selected: Country, Sector, Industry, Market Cap and Flag to include/exclude international exchanges.\\n- **To be able to do some statistics on the sector**, industries and countries (e.g. companies per sector/industry with a specified country and market cap) which allows users to better understand companies landscape of a sector and industry.\\n- **To get the financials of the companies that fall under that filter subset** (e.g. return on assets, quick ratio, debt to equity), and then compare these in order to get the best performers.\\n- Since one of the previous financials isn\u2019t enough to understand which company would be best to invest in, I wanted the filtered companies to have the capability to jump onto the comparison analysis menu so you could get all the capabilities of comparing historical price data, volume data, income/balance/cash flow, sentiment, or even technical indicators.\\n- If in the stocks context I had Tesla loaded, I wanted to go into this sia menu and get all the filtering parameters to be ready to filter for companies similar to Tesla in terms of (Sector, Industry, Country and Market Cap).\\n\\nBy Sunday night, I created the [pull request for this](https://github.com/GamestonkTerminal/GamestonkTerminal/pull/995). Due to the due diligent reviews performed by the main contributors of the project, the menu got a lot of improvements. Some of them were:\\n- Do not display companies that account for under a certain threshold (1%) and therefore sum them in an \u201cOthers\u201d slice.\\n- Allow to export all the data as a table.\\n- After filtering and getting financials, save the data for faster data retrieval if the same filters are used.\\n- Minor bug fixes.\\n\\nAfter a lot of comments and feedback from the main maintainers, and everyone being happy with this first iteration, the PR got merged. In fact, one of the main maintainers found a hidden gem while testing it.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e5897fb5-88f2-47c7-88a0-cacb97b15695)\\n\\nIn the meantime, I\u2019ve been in contact with Jeroen about adding some more capabilities to his FinanceDatabase package so that everyone could benefit from them. Some examples are:\\n- When an industry is selected, the corresponding sector should be automatically filled.\\n- If I select a country and a market cap for filtering, my sector choices should be bounded by what exists within those.\\n- I should be able to query about companies landscape in terms of a country. E.g. I want to understand what countries have the most large cap companies within the Financial Services sector.\\n\\nThis would not only make the FinanceDatabase a more powerful Package, which would in turn benefit Gamestonk Terminal sia menu, and ultimately our thousands of users!\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/1d0b37e4-6283-4d9e-87cf-a9c547434278)\\n\\nThis is an example of how the Sector and Industry Analysis menu looks (as a bonus I show how you can go into the Comparison Analysis menu):\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/f3fac679-0f9f-45fe-9f77-c97b7351e05e)\\n\\nNext time you know, it all starts with an e-mail. At Gamestonk Terminal we are on a role to have the best investment research terminal, and hope this story reflects it.\\n\\nTry it now, it\u2019s free. \u2764\ufe0f"},{"id":"handing-your-twitter-account-to-your-most-avid-community-member","metadata":{"permalink":"/blog/handing-your-twitter-account-to-your-most-avid-community-member","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-11-17-handing-your-twitter-account-to-your-most-avid-community-member.md","source":"@site/blog/2021-11-17-handing-your-twitter-account-to-your-most-avid-community-member.md","title":"Handing your twitter account to your most avid community member","description":"Handing over the Twitter account of Gamestonk Terminal to an active community member and the impact it had on the project\'s growth and engagement.","date":"2021-11-17T00:00:00.000Z","formattedDate":"November 17, 2021","tags":[{"label":"Community Building","permalink":"/blog/tags/community-building"},{"label":"Twitter","permalink":"/blog/tags/twitter"},{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal"}],"readingTime":4.305,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"handing-your-twitter-account-to-your-most-avid-community-member","title":"Handing your twitter account to your most avid community member","date":"2021-11-17T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280497451-edb5650f-8c33-4f81-8df5-eb4ee4d48166.png","tags":["Community Building","Twitter","Open Source","Gamestonk Terminal"],"description":"Handing over the Twitter account of Gamestonk Terminal to an active community member and the impact it had on the project\'s growth and engagement."},"prevItem":{"title":"Sector and Industry Analysis \u2014 Gamestonk Terminal","permalink":"/blog/sector-and-industry-analysis-gamestonk-terminal"},"nextItem":{"title":"The Start of my Machine Learning journey","permalink":"/blog/the-start-of-my-machine-learning-journey"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nHanding over the Twitter account of Gamestonk Terminal to an active community member and the impact it had on the project\'s growth and engagement.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nWhen I started [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal) I had no idea of the reach and impact it would have. From getting **over 3.5k stars on GitHub on the first single day alone**, to trending [on Reddit](https://www.reddit.com/r/algotrading/comments/lrndzi/cant_afford_the_bloomberg_terminal_no_worries_i/) and receiving overwhelming feedback, to receiving a message from an ex-colleague based in Switzerland about my name being [top 1 on Hackernews](https://news.ycombinator.com/item?id=26258773). As if this wasn\u2019t enough, a couple of days later the project got featured by [VICE Magazine](https://www.vice.com/en/article/qjp9vp/gamestonk-terminal-is-a-diy-meme-stock-version-of-bloomberg-terminal) and [Daily Fintech](https://dailyfintech.com/2021/02/25/never-underestimate-bloomberg-but-here-are-5-reasons-why-the-gamestonk-terminal-is-a-contender/).\\n\\nAs a result, my social life was impacted and had little time to even cuddle my puppy, due to the amount of feature requests, issues\u2026 the usual somehow ungrateful life of an open-source maintainer\u2026 I\u2019m not complaining though, as I live for this.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/4cede88f-3d77-4457-ad21-ea68a40b3b20)\\n\\nMoving forward a couple of weeks, it became clear to myself that I was building a strong community around what can/will/should be a leading product in the emerging fintech industry and Internet 3.0. Therefore, I knew that github issues and discussions wouldn\u2019t be enough to interact with all members of the community, so Discord turned out to be the best option going forward (let\u2019s be honest: mostly because of the convenience that Discord offers to share memes, feel free to check my creations on [our Discord](https://discord.gg/2KnVnkDTxM), you can thank me later).\\n\\nMy next rookie mistake was thinking I could use Discord announcements and @ everyone, as a means for updating the community on new features. Being the #1 investment research free and open-source project on github gets you several PRs a day being merged, so in all the fairness the announcements were recurrent with constant several new features. You can check my [one hour live programming stream](https://www.youtube.com/watch?v=9BMI9cleTTg) of adding a feature to the terminal.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/6ec95ad8-3fc8-4c16-9fd3-ca07e305270d)\\n\\nThis is when I realized that Discord wasn\u2019t the best place for this type of communication. I needed a platform where I could share these features ad-hoc and that only alerted users who wanted to be up-to-date with our latest features. And this is when I created our [Twitter account](https://twitter.com/gamestonkt), @gamestonkt.\\n\\nReviewing the history of our Twitter feed, you can see that this is exclusively what our handle was used for. It just shared new features every day. It felt like I was always playing catchup to the growing number of features piling up in the queue waiting to be announced on Twitter. With the project already having **over 500 features** in less 1 year, this inevitable outcome would be a surprise to no one. (**yup, I repeat, over 500**).\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/1259b899-af0d-4b21-af6e-755408668956)\\n\\nHowever, I felt like **it missed personality**... With time being a limiting factor \u2014 time was more efficiently used improving the terminal \u2014 the public facing demonstrations were a lower priority. When you believe this much in a product, the product ends up speaking for itself.\\n\\n> _\u201cIf you build it, they will come\u201d \u2014 Field of Dreams_\\n\\n
    \\n\\nIt then occurred to me, why am I handling our Twitter? Why not leave this up to one of our most avid and vocal users that has been with project since beginning?\\n\\nAs Jim from \u201cThe Office\u201d would do, let\u2019s do a PROS & CONS table.\\n\\n### Pros\\n\\n- The user represents the community that the twitter content is targeted at.\\n- The user is an active daily user and will help to demonstrate features in the terminal.\\n- The user is keen on learning the ins and outs of the product.\\n- This user is not only a user anymore but a friend given his interaction with the maintainers.\\n- Lastly, I get to spend time doing what I enjoy: coding and meme content on our Discord.\\n\\n### Cons\\n\\n- The user finds out my mother\u2019s maiden name and the name of my first pet.\\n\\nThis is really a no brainer the more you think about it. I think it depends a lot on the type of people you have in your community and how confident you are on this individual .\\n\\nWe were lucky, because we had the **perfect fit**: an active Discord user **@Danglewood**, who had built an engaged audience, generating over 130K+ in Reddit karma over Q2 2021. It was clear that **@Danglewood** was having an impact on driving traffic and user engagement by posting data and his personal research with screenshots of Gamestonk Terminal.\\n\\nIn the future, **our report feature will allow easy sharing of this information**, I already can\u2019t wait for this. Through a combination of humour and truths, he was engaging the audience\u2019s curiosity by providing them with ways to filter out the ever-present noise within stock market information.\\n\\nIt made sense to bring this approach to [our Twitter](https://twitter.com/gamestonkt) feed which has since transformed and now offers insights, educational nuggets, and data as well as presenting new features. The end result speaks for itself!\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/edb5650f-8c33-4f81-8df5-eb4ee4d48166)\\n\\nOn your end, what is your opinion? And why do you 100% agree that this was the best decision?"},{"id":"the-start-of-my-machine-learning-journey","metadata":{"permalink":"/blog/the-start-of-my-machine-learning-journey","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-11-07-the-start-of-my-machine-learning-journey.md","source":"@site/blog/2021-11-07-the-start-of-my-machine-learning-journey.md","title":"The Start of my Machine Learning journey","description":"The start of my journey into the world of Machine Learning, from learning Python to understanding the underlying mathematics of ML algorithms.","date":"2021-11-07T00:00:00.000Z","formattedDate":"November 7, 2021","tags":[{"label":"Machine Learning","permalink":"/blog/tags/machine-learning"},{"label":"Python","permalink":"/blog/tags/python"},{"label":"Data Science","permalink":"/blog/tags/data-science"},{"label":"Education","permalink":"/blog/tags/education"},{"label":"Self-Learning","permalink":"/blog/tags/self-learning"}],"readingTime":4.62,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"the-start-of-my-machine-learning-journey","title":"The Start of my Machine Learning journey","date":"2021-11-07T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280497284-2322ff06-a803-458c-9402-6c8ed5cdde27.png","tags":["Machine Learning","Python","Data Science","Education","Self-Learning"],"description":"The start of my journey into the world of Machine Learning, from learning Python to understanding the underlying mathematics of ML algorithms."},"prevItem":{"title":"Handing your twitter account to your most avid community member","permalink":"/blog/handing-your-twitter-account-to-your-most-avid-community-member"},"nextItem":{"title":"An unusual journey learning about NNs for a PhD thesis","permalink":"/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesis"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThe start of my journey into the world of Machine Learning, from learning Python to understanding the underlying mathematics of ML algorithms.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nDuring my studies at [Imperial College London](https://www.imperial.ac.uk/) - 3ish years ago - I was introduced to the topic of Machine Learning, an area that I had always been interested about.\\n\\nAt that time, not only I didn\'t know python, as `from sklearn.decomposition import PCA` wasn\u2019t allowed. Therefore, we had to write the PCA (and other) algorithms in Matlab from scratch, which was great because it exposed us to the maths behind each algorithm.\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/2e527f60-8df6-47e3-bc54-bd10327e8df9)\\n\\nThe gif above is from my graduation at Royal Albert Hall with a MSc. in Control Systems with Distinction.\\n\\nAfter concluding my thesis (and paper): \\"[Energy savings from an Ecological Cooperative Adaptive Cruise Control: a Battery Electric Vehicle platoon investigation](https://ieeexplore.ieee.org/abstract/document/8796226)\\", which was presented at the 2019 European Control Conference in Napoli, I had finally time to focus on Machine Learning topics during my spare time through late hours and into weekends.\\n\\nI started by doing the famous MOOC **\u201cMachine Learning - Andrew Ng\u201d**. Saying that the course was good is an understatement. I ended up spending a long time on the course as I was taking notes and revising daily; I was still behaving like a university student even without the exam at the end! Not only the theory is really detailed, but the coursework in Matlab allowed me to understand what\u2019s going on under the hood. Given that I was already a heavy Matlab user, due to its usage throughout my entire academic journey, I could focus on the ML section.\\n\\nAfter this course, I knew that I had learnt a lot, but I also knew that if I wanted to use ML for real-applications, I\u2019d have to learn Python. Given that I knew Matlab, I choose to start reading a python book that had Data Science application in mind. Hence, I started reading **\u201cPython Data Science Handbook\u201d**. This, along with several hours of practicing on available datasets, has taught me pretty much all I know about Numpy, Pandas and Matplotlib. Although this book also contains a last chapter with ML algorithms, these are rather brief.\\n\\n> _In my previous job at Nurvv, where I worked as Sensor Fusion Engineer, I developed a python analysis tool that parsed all the raw data from a running session and conveyed that information into meaningful plots. This allowed us to analyse whether a run was successful from the Firmware side of things, and this was critical for our development. This tool was created mainly from the knowledged gathered from the book mentioned above._\\n\\n
    \\n\\nFollowing this, I was rather confident with my Python skills. Therefore, I wanted to crack-on learning how to use ML algorithms with Python through the beauty of imports. It comes without saying that I had to start from the best-seller **\u201cHands-on Machine Learning with Scikit-Learn, Keras and TensorFlow\u201d**. This book was what I was expecting and more. From time to time, when I\u2019m working on personal projects, I still flick through it. This book also allowed me to develop many more personal projects (most of them public in [my GitHub](https://github.com/DidierRLopes), as I\u2019m a big Open-Source fan \u2014 you should know that as I made [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal) repository public).\\n\\n![image](https://github.com/DidierRLopes/my-website/assets/25267873/bc7121c1-9c30-4766-8c83-e8b2ff82b4f9)\\n\\nThe project that has been my biggest challenge was working with a friend on his PhD thesis entitled _\u201cModelling and Forecasting of Time-Series: A data science approach that compares classic methodologies with deep learning methodologies\u201d_. Not only interpreting and discussing results but writing the code behind it. S/O to the resources: **\u201cForecasting: Principles and Practice\u201d** and **\u201chttps://machinelearningmastery.com\u201d**. Without these, this work would have been much harder.\\n\\nThroughout my short journey, I followed many people related with DS. People that I thought that in some shape or form added value through their posts. One of these, was Andriy Burkov. I remember when he started talking about creating the **\u201cThe Hundred-Page Machine Learning Book\u201d** and specifically, I remember his Linkedin\'s poll to select the colour of one of the bubbles for his books\' cover. I voted purple; the result was yellow. So, I took the freedom to fix the cover of his book, as you can see below.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/2322ff06-a803-458c-9402-6c8ed5cdde27)\\n\\nMy gecko Reidid on \u201cThe Hundred-Page Machine Learning Book\u201d\u200b, in order to keep industry standards of ML books with reptiles.\\n\\nI really enjoyed his book since it can explain everything, while keeping it simple and short. As I learned at University, _Keep It Simple, Stupid_. Also, his book is distributed in a \u201cread first, buy later\u201d principle. This meant that I was able to flick through the content of the book before buying it. Personally, I think this should be adopted more often, at least for technical books.\\n\\nFinally, last summer, while on holiday in Portugal, I read **\u201cApproaching (almost) any machine learning\u201d**, which I found to be great for people that have read about the theory but were wondering where/how to apply it.\\n\\nThe next ML books in my list are:\\n- **Deep Learning** \u2014 Aaron Courville, Ian Goodfellow, and Yoshua Bengio\\n- **The Elements of Statistical Learning** \u2014 Jerome H. Friedman, Robert Tibshirani e Trevor Hastie\\n- **Pattern Recognition and Machine Learning** \u2014 Christopher Bishop\\n- **Understanding Machine Learning: From Theory to Algorithms** \u2014 Shai Ben-David and Shai Shalev-Shwartz\\n\\nLet me know if you think these are good books, or if there are others that you\u2019d recommend."},{"id":"an-unusual-journey-learning-about-nns-for-a-phd-thesis","metadata":{"permalink":"/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesis","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-10-22-an-unusual-journey-learning-about-nns-for-a-phd-thesis.md","source":"@site/blog/2021-10-22-an-unusual-journey-learning-about-nns-for-a-phd-thesis.md","title":"An unusual journey learning about NNs for a PhD thesis","description":"An unusual journey of learning about Neural Networks for a PhD thesis. This blog post details the author\'s experience of assisting in the programming aspect of a PhD thesis, focusing on the study of various models and their forecasting performance.","date":"2021-10-22T00:00:00.000Z","formattedDate":"October 22, 2021","tags":[{"label":"PhD Thesis","permalink":"/blog/tags/ph-d-thesis"},{"label":"Neural Networks","permalink":"/blog/tags/neural-networks"},{"label":"Python","permalink":"/blog/tags/python"},{"label":"Time Series Forecasting","permalink":"/blog/tags/time-series-forecasting"}],"readingTime":3.625,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"an-unusual-journey-learning-about-nns-for-a-phd-thesis","title":"An unusual journey learning about NNs for a PhD thesis","date":"2021-10-22T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280497057-46ba8ff7-2f83-4fc4-8fed-350fc18246da.png","tags":["PhD Thesis","Neural Networks","Python","Time Series Forecasting"]},"prevItem":{"title":"The Start of my Machine Learning journey","permalink":"/blog/the-start-of-my-machine-learning-journey"},"nextItem":{"title":"How I created a bot in python to participate in NFT giveaways","permalink":"/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveaways"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nAn unusual journey of learning about Neural Networks for a PhD thesis. This blog post details the author\'s experience of assisting in the programming aspect of a PhD thesis, focusing on the study of various models and their forecasting performance.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/UnivariateTimeSeriesForecast).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nOn 14th February of 2019, my previous Maths and Statistics teacher \u2014 [Filipe](https://www.linkedin.com/in/filipe-r-ramos-a66242143/) - sent me a messaged because of a Linkedin post I shared about work I was doing in python.\\n\\nIt turns out that Filipe was looking for someone to help him with his PhD thesis, in specific, with the programming side of it. The challenge was to study diverse models (from classical to neural networks) and assess their forecasting performance. Since time series prediction was always a topic that I found fascinating and hadn\u2019t had time to study, I thought this would be the perfect timing to do so.\\n\\nSo from February 2019 onwards, this exciting journey started. I was working full-time so in order to be able to take part in this, I was only sleeping 4/5h a day. I started reading a lot of books and practicing my python coding skills in order to be more helpful. Then around June, we started working together on the code. We had around 2\u20133h discussions a couple times a week where we would discuss the point of the situation code-wise and where we wanted to be, we kept in touch about this every day.\\n\\nFrom the repo, which is open source [here](https://github.com/DidierRLopes/UnivariateTimeSeriesForecast), you can see that we explored: Exploratory Data Analysis; ARIMA and SARIMA; Exponential Smoothing; Deep Neural Network. The final part of this work consisted in an innovative approach to tackle an univariate time series, which you can find [here](https://github.com/DidierRLopes/UnivariateTimeSeriesForecast/blob/master/DNN_ourApproach.ipynb). On top of that, a library of cross-validation for Neural Networks was developed, which is now being used in real data science applications, see [here](https://github.com/DidierRLopes/timeseries-cv).\\n\\nThe work, which took around 1 year to complete, can be divided into 3 distinct phases:\\n\\n- The **coding** phase lasted around 3 months. I would write the code, test the code and then touch base with Filipe to ensure we were going in the right direction.\\n- The **tweaking and analysis phase** took around another 3 months. Here, Filipe took the code I had completed and analysed multiple time series with different trends and seasonalities; tweaked different models; trained and validated these; and started interpreting results. In this phase, me and Filipe would discuss the code from a pragmatic point of view, and improve it based on what Filipe wanted to see/analyse. This phase was so intense that Filipe flew out to London twice to meet me, almost over a period of 1 month.\\n- The **writing of the thesis phase** took an additional 6 months. Here Filipe basically translated the results and analysis seen on the notebook of the thesis, wrote a full theoretical background on the models used and interpreted the applicability of these.\\n\\nThe full work, _\u201cData Science in the Modeling and Forecasting of Financial timeseries: from Classic methodologies to Deep Learning\u201d_, can be found in [here](https://ciencia.iscte-iul.pt/publications/data-science-na-modelacao-e-previsao-de-series-economico-financeiras-das-metodologias-classicas-ao/82703) or stored in [here](https://repositorio.iscte-iul.pt/handle/10071/22964).\\n\\nDuring this time, Filipe was also working full-time as he was a teaching assistant in three different universities. In spite of the adversities, Filipe achieved an impressive approved with \u201c_unanimous distinction_\u201d (maximum classification) from ISCTE Business School, Lisbon, Portugal.\\n\\nMy character waiting for people to join my chatroom to discuss our poster.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/9222b0c5-4620-4eb1-88d3-a68a2eb71e1b)\\n\\nLast week, at XXV Congress of the Portuguese Statistical Society (SPE 2021), we presented:\\n\\n- A poster that you can find [here](https://www.researchgate.net/publication/355360806_Forecasting_models_for_time-series_a_comparative_study_between_classical_methodologies_and_Deep_Learning), titled: _\u201cForecasting models for time-series: a comparative study between classical methodologies and Deep Learning\u201d_\\n- A presentation that you can find [here](https://www.researchgate.net/publication/355360897_Explorando_o_poder_da_memoria_das_redes_neuronais_LSTM_na_modelacao_e_previsao_do_PSI_20), titled: _\u201cExplorando o poder da mem\xf3ria das redes neuronais LSTM na modela\xe7\xe3o e previs\xe3o do PSI 20\u201d_\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/c5921349-99d1-46bf-878f-0ecfaedf2b1e)\\n\\nThe poster above was presented at XXV Congress of the Portuguese Statistical Society (SPE 2021).\\n\\nI started this journey with my previous maths teacher and ended it with a close friend! Excited to see what other articles/publications we\u2019ll be working on together in the future.\\n\\nPS: The ARIMA/ETS/MLP/RNN/LSTM models learned from this work, consisted the basis of the prediction menu on [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal).\\n\\nAs always, feel free to provide feedback!"},{"id":"how-i-created-a-bot-in-python-to-participate-in-nft-giveaways","metadata":{"permalink":"/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveaways","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-09-30-how-i-created-a-bot-in-python-to-participate-in-nft-giveaways.md","source":"@site/blog/2021-09-30-how-i-created-a-bot-in-python-to-participate-in-nft-giveaways.md","title":"How I created a bot in python to participate in NFT giveaways","description":"In this blogpost, I share how I created a bot in Python to automate participation in NFT giveaways on Reddit. The bot simplifies tasks such as upvoting posts, commenting, and opening Opensea links to favourite artwork.","date":"2021-09-30T00:00:00.000Z","formattedDate":"September 30, 2021","tags":[{"label":"Python","permalink":"/blog/tags/python"},{"label":"Bot","permalink":"/blog/tags/bot"},{"label":"NFT","permalink":"/blog/tags/nft"},{"label":"Giveaways","permalink":"/blog/tags/giveaways"},{"label":"Reddit","permalink":"/blog/tags/reddit"},{"label":"Automation","permalink":"/blog/tags/automation"}],"readingTime":2.82,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"how-i-created-a-bot-in-python-to-participate-in-nft-giveaways","title":"How I created a bot in python to participate in NFT giveaways","date":"2021-09-30T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280496989-d965410f-6a4d-40b1-92d1-2e3fb4e24462.png","tags":["Python","Bot","NFT","Giveaways","Reddit","Automation"],"description":"In this blogpost, I share how I created a bot in Python to automate participation in NFT giveaways on Reddit. The bot simplifies tasks such as upvoting posts, commenting, and opening Opensea links to favourite artwork."},"prevItem":{"title":"An unusual journey learning about NNs for a PhD thesis","permalink":"/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesis"},"nextItem":{"title":"Gamestonk Terminal \u2014 Can\u2019t Stop, Won\u2019t Stop","permalink":"/blog/gamestonk-terminal-cant-stop-won-t-stop"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share how I created a bot in Python to automate participation in NFT giveaways on Reddit. The bot simplifies tasks such as upvoting posts, commenting, and opening Opensea links to favourite artwork.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GiveawayNFTbot).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nLately I\u2019ve been looking into NFTs. I\u2019ve observed that more and more people are trying to innovate and create their own pieces of art. Some of them are impressive, some of them aren\u2019t. But,\\n\\n> _Beauty is in the eye of the beholder \u2014 Margaret Wolfe Hungerford_\\n\\n
    \\n\\nHowever, in my humble opinion, what distinguishes some art from others, is most of the time not the art itself but the community around it. For example, when everyone starts talking about the \u2018new best thing\u2019 you feel more pressure to get involved.\\n\\nBecause of this dynamic, creators are investing in ways to increase their collectibles popularity by building their community. A great example is [ParallelNFT](https://parallel.life/) and the dystopic story that is being created around their cards \u2014 in their case, it\u2019s fairly easy to understand that once a big community is formed around such cards, video games, movies and even series are on the table. For the first time ever, we would go from selling collectibles to creating some form of entertainment. A whole new industry in the making.\\n\\nHowever, not every digital creator has the resources to create a full concept around their cards. Does this mean that they can\u2019t create a community around it? No. But they must find other ways. One of the most popular ways I\u2019ve seen is through giveaways. Similar to what small clothing brands do to increase their popularity. This is a great tactic in my opinion, since giveaway not only give you a bigger audience (people that participate and re-share content) but it makes the cards have multiple owners. This, as a result, makes the collection more attractive for NFT collectors.\\n\\n_When demand exceeds supply_, **prices tend to rise.**\\n\\nAnd these creators are using Reddit as the platform of their giveaways.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d965410f-6a4d-40b1-92d1-2e3fb4e24462)\\n\\nWhen scrolling through reddit you will notice that all these posts have certain things in common:\\n- They ask for an up-vote on the post\\n- A comment with your wallet address\\n- To favourite their artwork\\n- They may also ask to you to join their Discord\\n- For a follow on their Twitter or Instagram\\n- If you can retweet or share a story\\n\\nThese are things that take time, and a bot can perfectly do this. Therefore, I wrote a [giveaway NFT bot](https://github.com/DidierRLopes/GiveawayNFTbot) to simplify my work. Now I just sit down and read robot vacuum reviews while the bot: upvotes, comments and opens their Opensea link for me to favourite their artwork.\\n\\nI\u2019ve already won multiple NFTs with this, which is exciting\u2014 you never know where the next [CryptoPunks](https://twitter.com/cryptopunksbot) are at.\\n\\nThere\u2019s actually 1 collection that I particularly like and believe has a lot of potential, it\u2019s called [CryptoCartoonEaters](https://opensea.io/collection/crypto-cartooneaters) and due to the uniqueness of each collectible (only 100 made), I really think it has a great potential. I acquired my favourite cartoon as a kid: Goku Eating a Burger.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/c9c9f994-8fe8-401c-9b86-ad4f413da741)\\n\\nLet me know if you find this article interesting, and if you used the bot as well!"},{"id":"gamestonk-terminal-cant-stop-won-t-stop","metadata":{"permalink":"/blog/gamestonk-terminal-cant-stop-won-t-stop","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-09-16-gamestonk-terminal-cant-stop-won-t-stop.md","source":"@site/blog/2021-09-16-gamestonk-terminal-cant-stop-won-t-stop.md","title":"Gamestonk Terminal \u2014 Can\u2019t Stop, Won\u2019t Stop","description":"Gamestonk Terminal\'s latest updates including Docker integration, Jupyter Lab integration, a new Hugo website, and new features. A summary of the recent developments and future plans for the open-source financial tool.","date":"2021-09-16T00:00:00.000Z","formattedDate":"September 16, 2021","tags":[{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal"},{"label":"Open Source","permalink":"/blog/tags/open-source"},{"label":"Docker","permalink":"/blog/tags/docker"},{"label":"Jupyter Lab","permalink":"/blog/tags/jupyter-lab"},{"label":"Hugo Website","permalink":"/blog/tags/hugo-website"},{"label":"Python","permalink":"/blog/tags/python"},{"label":"Finance","permalink":"/blog/tags/finance"},{"label":"Trading","permalink":"/blog/tags/trading"}],"readingTime":3.175,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"gamestonk-terminal-cant-stop-won-t-stop","title":"Gamestonk Terminal \u2014 Can\u2019t Stop, Won\u2019t Stop","date":"2021-09-16T00:00:00.000Z","image":"https://github.com/Meg1211/my-website/assets/88618738/e6c5b30f-e2d9-4aed-bf13-e62f6021caf1","tags":["Gamestonk Terminal","Open Source","Docker","Jupyter Lab","Hugo Website","Python","Finance","Trading"],"description":"Gamestonk Terminal\'s latest updates including Docker integration, Jupyter Lab integration, a new Hugo website, and new features. A summary of the recent developments and future plans for the open-source financial tool."},"prevItem":{"title":"How I created a bot in python to participate in NFT giveaways","permalink":"/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveaways"},"nextItem":{"title":"Time-Series CrossValidation for NN","permalink":"/blog/time-series-crossvalidation-for-nn"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nGamestonk Terminal\'s latest updates including Docker integration, Jupyter Lab integration, a new Hugo website, and new features. A summary of the recent developments and future plans for the open-source financial tool.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nHey all,\\n\\nDo any of you know what **Docker, Jupyter Lab integration, features website and new features** have in common? Well this is what has been happening in [Gamestonk Terminal](https://github.com/GamestonkTerminal/GamestonkTerminal) world since last month, and **MORE**!\\n\\n### Docker\\n\\n- This has been a highly requested feature from our more experienced dev users, as it allows you to run our code in a container, pull the image and then get going with a smooth installation process. You will also be able to run Jupyer Lab from our Docker container.\\n\\n### Jupyter Lab Integration\\n\\n- Jupyter is on course to take over the world (see [here](https://netflixtechblog.com/notebook-innovation-591ee3221233)).\\n- Big investment banks like JP Morgan use Jupyter too, see [this](https://github.com/jpmorganchase/jupyterlab_templates).\\n- Professionals in the industry such as Data Scientists, Data Analysts and Machine Learning engineers are familiar with the combo dockers+notebooks. Therefore, it makes our terminal an attractive Open-Source project to devote time to.\\n- Academia students and universities will be able to use terminal data through a notebook for their projects and coursework. We\u2019re on track to be able to achieve something on this soon!\\n\\n### Hugo Website\\n\\n- Link [here](https://gamestonkterminal.github.io/GamestonkTerminal/).\\n- This will not only simplify a contributor\u2019s documentation process, but it will also let non-Gamestonkers now see the vast number of features we offer and yes, when you read \u201coffer\u201d this is actually an offer since the tool is **completely free** to use.\\n\\n### Main New features\\n\\n- New Dark Pool Shorts menu\\n- Refactored and improved Crypto menu!!!\\n- Dark Pool and Crypto report generation\\n- Excel Discounted Cash Flow created by a MBA student\\n- Big code refactoring to allow for contributors to easily get started with our codebase\\n- Contributing document (click here).\\n\\n### Tier 2 features\\n- [Sentiment Investor](https://sentimentinvestor.com/) data features implemented by the SI team themselves\\n- Feature/fraud indicators implemented by a MBA student\\n- Multiple plotting for economy data for more insight extraction\\n- Screener presets to not miss out on promising tickers\\n- Several new Technical Analysis indicators, e.g. Fibonacci, Fisher transform, Centre of gravity, zlma, Donchian channels\u2026\\n- Unusual options activity\\n- Hot penny stocks in discovery menu\\n- A contributor implementation of a realtime earnings expected move, from [The Geek of Wallstreet](https://thegeekofwallstreet.com/2021/08/03/realtime-earnings-data/)\\n- Several new YahooFinance commands to discover promising tickers\\n- Refactor Exploratory Data Analysis and Residual Analysis menus into a Quantitative Analysis one\\n\\nAs if this wasn\u2019t enough, we\u2019re also working towards a [Discord bot](https://github.com/GamestonkTerminal/DiscordBot) so you can make best use of our terminal when discussing trading strategies with your friends. This was an initiative from a contributor, which just goes to show how much **we rely on our community to drive our project**.\\n\\nIf you appreciate what we\u2019re doing and want a better free and Open-Source financial tool, you should definitely star the project on our github [here](https://github.com/GamestonkTerminal/GamestonkTerminal), join [our Discord channel](https://discord.gg/Up2QGbMKHY), and follow our [twitter account](https://twitter.com/gamestonkt?lang=en). Not necessarily in that order! :)\\n\\nHave you been following our project and want to join our growing community? Here are a few tips on how to get started:\\n- Join our Discord and tell us about your experience so far\\n- Let us know what else you would like to see in the terminal\\n- You can help to improve our crypto terminal, which is 99% taken care of from our contributors!\\n- Help us add any features! You don\u2019t know python? This may be your cue to learn with our team!\\n\\nMuch love!\\nGST Team & Community"},{"id":"time-series-crossvalidation-for-nn","metadata":{"permalink":"/blog/time-series-crossvalidation-for-nn","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-09-04-time-series-crossvalidation-for-nn.md","source":"@site/blog/2021-09-04-time-series-crossvalidation-for-nn.md","title":"Time-Series CrossValidation for NN","description":"This blog post discusses the creation of a Python module for splitting univariate time-series data using cross-validation techniques. The module is designed to prepare data for training, validation, and testing in a Deep Neural Network (DNN).","date":"2021-09-04T00:00:00.000Z","formattedDate":"September 4, 2021","tags":[{"label":"Python","permalink":"/blog/tags/python"},{"label":"Data Science","permalink":"/blog/tags/data-science"},{"label":"Deep Learning","permalink":"/blog/tags/deep-learning"},{"label":"Time Series","permalink":"/blog/tags/time-series"},{"label":"Cross Validation","permalink":"/blog/tags/cross-validation"},{"label":"Neural Networks","permalink":"/blog/tags/neural-networks"}],"readingTime":2.66,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"time-series-crossvalidation-for-nn","title":"Time-Series CrossValidation for NN","date":"2021-09-04T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280496785-19a411e1-bb34-44bf-a9b8-b2a3ba4dd5f6.png","tags":["Python","Data Science","Deep Learning","Time Series","Cross Validation","Neural Networks"],"description":"This blog post discusses the creation of a Python module for splitting univariate time-series data using cross-validation techniques. The module is designed to prepare data for training, validation, and testing in a Deep Neural Network (DNN)."},"prevItem":{"title":"Gamestonk Terminal \u2014 Can\u2019t Stop, Won\u2019t Stop","permalink":"/blog/gamestonk-terminal-cant-stop-won-t-stop"},"nextItem":{"title":"Ranking 99 Mind f*ck movies","permalink":"/blog/ranking-99-mind-f-ck-movies"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nThis blog post discusses the creation of a Python module for splitting univariate time-series data using cross-validation techniques. The module is designed to prepare data for training, validation, and testing in a Deep Neural Network (DNN).\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/timeseries-cv).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n2 years ago, [Filipe Ramos](https://www.linkedin.com/in/ACoAACK9n24BrpxWf0HMa9bL7MSHleu2YVXpI5E) my previous maths and probability teacher, knowing that I had a special interest in Data Science, challenged me to help him in his PhD thesis \u201c_Data Science na Modela\xe7\xe3o e Previs\xe3o de S\xe9ries Econ\xf3mico-financeiras: das Metodologias Cl\xe1ssicas ao Deep Learning_\u201d.\\n\\nAlthough we have been discussing theory, analysis and results, my main contribution was to write the Python code behind the thesis.\\n\\nAs a result, I have written a python module that splits a given univariate time-series based on cross-validation techniques so that these can be fed to a Deep Neural Network (DNN) to extract training/validation/test errors.\\n\\nI know that there are examples of these online, but this was made from scratch so that we could personalise it according to the thesis\u2019 needs, and grasp better what was at stake when performing different cross-validation techniques.\\n\\n**The idea is given a training dataset, the package will split it into Train, Validation and Test sets, by means of either Forward Chaining, K-Fold or Group K-Fold.**\\n\\nAs parameters the user can not only select the number of inputs (`n_steps_input`) and outputs (`n_steps_forecast`), but also the number of samples (`n_steps_jump`) to jump in the data to train.\\n\\nThe best way to install the package is as follows: `pip install timeseries-cv` and then use it with `import tsxv`. See the module developed [here](https://pypi.org/project/timeseries-cv/).\\n\\nThis can be seen more intuitively using the jupyter notebook: \u201c_example.ipynb_\u201d Below you can find an example of the usage of each function for the following Time-Series:\\n\\n```python\\ntimeSeries = array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26])\\n```\\n\\n## Split Train\\n\\n```python\\nfrom tsxv.splitTrain import \\nsplit_train, \\nsplit_train_variableInput\\nX, y = split_train(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)\\nX, y = split_train_variableInput(timeSeries, minSamplesTrain=10, n_steps_forecast=3, n_steps_jump=3)\\n```\\n\\n
    \\n \\n \\n
    \\n\\n## Split Train Val\\n\\n```python\\nfrom tsxv.splitTrainVal import \\nsplit_train_val_forwardChaining, \\nsplit_train_val_kFold, \\nsplit_train_val_groupKFold\\nX, y, Xcv, ycv = split_train_val_forwardChaining(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)\\nX, y, Xcv, ycv = split_train_val_kFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)\\nX, y, Xcv, ycv = split_train_val_groupKFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)\\n```\\n\\n
    \\n \\n \\n
    \\n\\n
    \\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/24cfab68-28cb-4652-9196-fa53ac8d3ed4)\\n\\n## Split Train Val Test\\n\\n```python\\nfrom tsxv.splitTrainValTest import split_train_val_test_forwardChaining, \\nsplit_train_val_test_kFold,\\nsplit_train_val_test_groupKFold\\nX, y, Xcv, ycv, Xtest, ytest = split_train_val_test_forwardChaining(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)\\nX, y, Xcv, ycv, Xtest, ytest = split_train_val_test_kFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)\\nX, y, Xcv, ycv, Xtest, ytest = split_train_val_test_groupKFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)\\n```\\n\\n
    \\n \\n \\n
    \\n\\n
    \\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/19a411e1-bb34-44bf-a9b8-b2a3ba4dd5f6)\\n\\nThis module has not only been used for my friends\u2019 thesis but also for a Data Science company and [Gamestonk Terminal](/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal), that I know of :)\\n\\nYou can check the stats of the module [here](https://pypistats.org/packages/timeseries-cv)."},{"id":"ranking-99-mind-f-ck-movies","metadata":{"permalink":"/blog/ranking-99-mind-f-ck-movies","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-08-15-ranking-99-mind-f-ck-movies.md","source":"@site/blog/2021-08-15-ranking-99-mind-f-ck-movies.md","title":"Ranking 99 Mind f*ck movies","description":"Ranking and sorting a list of 99 mind-bending thriller movies using IMDbPy API in Python.","date":"2021-08-15T00:00:00.000Z","formattedDate":"August 15, 2021","tags":[{"label":"Movies","permalink":"/blog/tags/movies"},{"label":"Thrillers","permalink":"/blog/tags/thrillers"},{"label":"IMDbPy","permalink":"/blog/tags/im-db-py"},{"label":"Python","permalink":"/blog/tags/python"},{"label":"Sorting Algorithm","permalink":"/blog/tags/sorting-algorithm"}],"readingTime":2.135,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"ranking-99-mind-f-ck-movies","title":"Ranking 99 Mind f*ck movies","date":"2021-08-15T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280496558-cccaf22e-5d70-4a6d-bb80-d6b728b2d500.png","tags":["Movies","Thrillers","IMDbPy","Python","Sorting Algorithm"],"description":"Ranking and sorting a list of 99 mind-bending thriller movies using IMDbPy API in Python."},"prevItem":{"title":"Time-Series CrossValidation for NN","permalink":"/blog/time-series-crossvalidation-for-nn"},"nextItem":{"title":"K-means algorithm to visit a new city","permalink":"/blog/k-means-clustering-to-visit-a-new-city"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nRanking and sorting a list of 99 mind-bending thriller movies using IMDbPy API in Python.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/SortMoviesPerRating).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nDuring the Christmas holidays, me and my girlfriend, after watching The Office [US] twice in a row, and knowing most of Dwight\u2019s pranks off by heart, decided that it was time to find something worth watching.\\n\\nAlthough there\u2019s lots of tempting series out there, we didn\u2019t want to follow that path as we don\u2019t like the \u201caddiction\u201d effect that a series has. Also, we have the same taste regarding movies, where **we both enjoy complex thriller plots**, that leave your mind to resonate about them long after being done with it. Personally, I consider a movie great when it still crosses my mind when trying to sleep or the day after. So, thriller movies it was.\\n\\nAfter doing a little research work I came across this list of movies on Reddit: [99 mind f*ck movies](https://www.reddit.com/r/coolguides/comments/geipee/99_mindfck_movies/). I knew this list was good because most of my favourite movies were there, e.g. _The Prestige, Inception, The Usual Suspects, Primal Fear_, and _Ex Machina_.\\n\\nSo, the movie list was decided, and with that, also our new year\u2019s resolution.\\n\\nHowever, this list had 2 issues:\\n\\n**1. The list didn\u2019t have any particular order.** We would like to have the list ranked from best to worst, so that watching the best ones first will keep our motivation levels up to finish the list.\\n\\n**2. The movie title didn\u2019t have the released year.** Although we don\u2019t particularly mind old movies, sometimes we\u2019re just not in the mood to watch a B&W screen, or poor image resolution.\\n\\nTherefore, while Meg was busy, I was on a role to hack something that would both sort the list based on IMDB ranking, and add the release years to the titles.\\n\\nIn a couple of minutes, I was already playing with [IMDbPy API](https://imdbpy.github.io/). This allowed me to have the sorting algorithm running in the background pretty quick. Within the hour, we already had our sorted movie list. Which I have attached below for future reference.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/3c01a3fc-fa84-483a-98d2-7cb2edf69084)\\n\\nThe first movie of the list that none of us had already watched was the movie [Incendies](https://www.imdb.com/title/tt1255953/). After having watched this movie, I can already tell you that sorting out this list was worth it. Definitely mind blowing, and a great watch.\\n\\nAs usual, you can find the source code on my github: [SortMoviesPerRating](https://github.com/DidierRLopes/SortMoviesPerRating).\\n\\nHope you enjoyed this read!"},{"id":"k-means-clustering-to-visit-a-new-city","metadata":{"permalink":"/blog/k-means-clustering-to-visit-a-new-city","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-08-01-k-means-clustering-to-visit-a-new-city.md","source":"@site/blog/2021-08-01-k-means-clustering-to-visit-a-new-city.md","title":"K-means algorithm to visit a new city","description":"In this blogpost, I share how I used the K-means algorithm to plan a visit to London. The algorithm helps to decide which attractions to visit based on the number of days of the visit and the GPS coordinates of the attractions.","date":"2021-08-01T00:00:00.000Z","formattedDate":"August 1, 2021","tags":[{"label":"K-means","permalink":"/blog/tags/k-means"},{"label":"Algorithm","permalink":"/blog/tags/algorithm"},{"label":"Travel","permalink":"/blog/tags/travel"},{"label":"Efficiency","permalink":"/blog/tags/efficiency"},{"label":"London","permalink":"/blog/tags/london"},{"label":"GPS","permalink":"/blog/tags/gps"},{"label":"Clustering","permalink":"/blog/tags/clustering"}],"readingTime":2.69,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"k-means-clustering-to-visit-a-new-city","title":"K-means algorithm to visit a new city","date":"2021-08-01T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280496512-1085caea-fe72-439a-ba05-b0f6d5883719.png","tags":["K-means","Algorithm","Travel","Efficiency","London","GPS","Clustering"],"description":"In this blogpost, I share how I used the K-means algorithm to plan a visit to London. The algorithm helps to decide which attractions to visit based on the number of days of the visit and the GPS coordinates of the attractions."},"prevItem":{"title":"Ranking 99 Mind f*ck movies","permalink":"/blog/ranking-99-mind-f-ck-movies"},"nextItem":{"title":"Minion Recipes Program","permalink":"/blog/minion-recipes-program"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share how I used the K-means algorithm to plan a visit to London. The algorithm helps to decide which attractions to visit based on the number of days of the visit and the GPS coordinates of the attractions.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/LondonVisit).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nUsually when I book a weekend getaway, I spend quite some time doing 2 things:\\n\\n- Writing down the main attractions I want to see\\n- Depicting the travel path to maximise efficiency and see the most in less time (I\u2019m a bit of an efficiency freak myself, sorry)\\n\\n**This repository aims to decide which attractions to visit in London as a function of the number of days that you will be visiting, by applying K-means algorithm.**\\n\\nAs input you need to give the GPS coordinates of the main attractions you want to visit during your stay, and the number of days you are planning to visit. Notice that attractions that are not within the map screenshot boundaries will be discarded. See disclaimer below.\\n\\nThe K-means algorithm will interpret: List of GPS coordinates of the main attractions that you want to visit as 2D samples, after converting to UTM. Number of days of the visit as Number of clusters.\\n\\nOf course, this is rather unrealistic because of several reasons, such as:\\n\\n- Not taking into account if they want to just pass by the London Eye, or have a ride on it;\\n- Assumes that we are in a no man\u2019s land since it completely bypasses the existence of other buildings, roads, \u2026;\\n- Does not consider altitude, even though London is rather plane;\\n- Does not consider the number of attractions that one can possibly do per day;\\n- Plus, if there was to be an attraction really far from the centre, it may happen that the algorithm considers an entire day for it (this would depend upon kernel initialisation)\\n\\nNonetheless, I think this is a funny exercise, and if I were to select the areas to visit by myself, **it would most likely be a similar choice to the one taken by K-means**.\\n\\n**Disclaimer**: I did not know how to use Google API (neither wanted to pay for a key to be fair) hence I just took a screenshot of google maps and wrote down the coordinate of the lower left corner, so that I could use it as my origin. I also took the right top corner coordinate so that I could give the map with an \u201caccurate\u201d scaling.\\n\\n**Note**: GPS coordinates (latitude, longitude) have degrees has units, thus, explaining why the conversion to UTM coordinates, which uses meters.\\n\\nImmediately below you can see the result of a visit to London for 2, 3 and 4 days.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/1085caea-fe72-439a-ba05-b0f6d5883719)\\n\\n
    \\n \\n \\n
    \\n\\n
    \\n\\nThis project was done for fun. However, I believe that by creating a tuple per location with coordinates and estimate of time taken on each attraction, something nice could come out of this.\\n\\nHope you find this interesting. Let me know your thoughts."},{"id":"minion-recipes-program","metadata":{"permalink":"/blog/minion-recipes-program","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-07-23-minion-recipes-program.md","source":"@site/blog/2021-07-23-minion-recipes-program.md","title":"Minion Recipes Program","description":"In this blogpost, I share how I developed a program to help my mum manage her recipes. The program allows for adding, editing, and removing recipes, and even includes fun minion icons.","date":"2021-07-23T00:00:00.000Z","formattedDate":"July 23, 2021","tags":[{"label":"Python","permalink":"/blog/tags/python"},{"label":"Programming","permalink":"/blog/tags/programming"},{"label":"Recipes","permalink":"/blog/tags/recipes"},{"label":"Software Development","permalink":"/blog/tags/software-development"}],"readingTime":2.535,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"minion-recipes-program","title":"Minion Recipes Program","date":"2021-07-23T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280496377-5fb7c215-ec70-40dd-99dc-8ebc5b8b3eba.png","tags":["Python","Programming","Recipes","Software Development"],"description":"In this blogpost, I share how I developed a program to help my mum manage her recipes. The program allows for adding, editing, and removing recipes, and even includes fun minion icons."},"prevItem":{"title":"K-means algorithm to visit a new city","permalink":"/blog/k-means-clustering-to-visit-a-new-city"},"nextItem":{"title":"Household bills Program","permalink":"/blog/household-bills-program"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share how I developed a program to help my mum manage her recipes. The program allows for adding, editing, and removing recipes, and even includes fun minion icons.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/RecipesProgram).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nOnce I developed the [Housebills program](/blog/household-bills-program), I really enjoyed the feeling of being able to create usable software from scratch. Therefore, that year during Christmas, I wanted to challenge myself to see if I could find any interesting project to do in only 1 week.\\n\\nI started by nagging my dad and brother for them to tell me something that would be useful to them in their daily lives. Sadly, none of them had any idea. Then, I went to the kitchen to ask my mum the same. She was busy searching recipes for xmas on her messy notebook, so she also said no.\\n\\nI sat there next to her thinking about what I could do, while she kept on going back and forth in her notebook searching. I don\u2019t know if she had been reading about the binary search algorithm, or if she was just opening pages randomly. What I know is that 1 week later I did a program for her to keep her recipes. Safe to say that I saved Christmas, I guess.\\n\\nNote: Before the end of that year, I still upgraded the software for its version 2.0, which included more than 20 minion icons. To this day, I think she opens the program to see the minion icons more than the recipes themselves.\\n\\nBelow it displays the interfaces used, and these correspond to: Red-Visualize; Add; Blue-Add; Green-Edit; and Yellow-Remove recipes.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/5fb7c215-ec70-40dd-99dc-8ebc5b8b3eba)\\n\\nPS: Any resemblance with the Microsoft colour scheme is pure coincidence eheh.\\n\\nWhen adding a recipe, the following window will be displayed.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/07ff39c6-92b7-4da0-ae5d-6d7547ffb40f)\\n\\nThis allows you to add both a recipe, and a category (i.e. the \u201cTiramisu\u201d recipe would be within \u201cDesserts\u201d category).\\n\\nThe recipe content would include:\\n\\n- Name of the recipe\\n- Ingredients\\n- Preparation\\n- Comment\\n\\nWhen visualising a recipe, the following window will be displayed.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/2cc28d31-8c91-4dda-8e0c-b4073fdb2236)\\n\\nWhere the recipe dialog box would prompt the recipes based on the category chosen on its left. Then, after selecting a recipe, the ingredients, preparation and comment would be filled out.\\n\\nWhen editing a recipe, the following window will be displayed. This is similar to the visualisation window, with the difference that the text boxes are editable, and therefore, the recipe can be improved.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/10c8d22f-cf19-4eab-98b7-eb70eb700b07)\\n\\nNote: throughout the program there are Message Dialog boxes (as shown above) that tell the user whether the recipe has been successfully (or not) edited, added or removed.\\n\\nFinally, in order to remove a recipe, the following window would be displayed. Where you can either delete a single recipe, or the entire category.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b5b01518-00d2-4f5f-a4e1-6fa1381b5d47)\\n\\nThe recipe database is handled in the most robust way: **with plain text files**, obviously.\\n\\nAs always, hope you had a nice read."},{"id":"household-bills-program","metadata":{"permalink":"/blog/household-bills-program","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-07-17-household-bills-program.md","source":"@site/blog/2021-07-17-household-bills-program.md","title":"Household bills Program","description":"In this blogpost, I share my journey of creating a program to split household bills. This was my first side project where I used Java to create a GUI application.","date":"2021-07-17T00:00:00.000Z","formattedDate":"July 17, 2021","tags":[{"label":"Java","permalink":"/blog/tags/java"},{"label":"Programming","permalink":"/blog/tags/programming"},{"label":"GUI","permalink":"/blog/tags/gui"},{"label":"Software Development","permalink":"/blog/tags/software-development"},{"label":"Side Project","permalink":"/blog/tags/side-project"}],"readingTime":4.56,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"household-bills-program","title":"Household bills Program","date":"2021-07-17T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280496297-529b3c6f-e8d2-446f-8c22-2db738ce4769.png","tags":["Java","Programming","GUI","Software Development","Side Project"],"description":"In this blogpost, I share my journey of creating a program to split household bills. This was my first side project where I used Java to create a GUI application."},"prevItem":{"title":"Minion Recipes Program","permalink":"/blog/minion-recipes-program"},"nextItem":{"title":"My journey of memorising a deck of 52 shuffled cards","permalink":"/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cards"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share my journey of creating a program to split household bills. This was my first side project where I used Java to create a GUI application.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/HouseholdBills).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n**My first side project.**\\n\\nBefore University, I spent most of my spare time playing counter-strike (my steam account had **more than 1000 hours played**, that\u2019s more than 41 entire days playing in a row). I was a decent player I\u2019d say, you can see a compilation of \u201calmosts\u201d I\u2019ve done [here](https://www.youtube.com/watch?v=ocsJzNJJB50).\\n\\nHowever, I knew this wasn\u2019t the way. I realised that if I used the amount of time I was spending on online games for learning, I would have a much bigger satisfaction return. And, in the long term, my life would be better.\\n\\n**So I started studying hard.** I started valuing my time more, and declined most of the parties I was invited to because I was busy working late hours. Don\u2019t get me wrong, I\u2019m an easy person. I like to think I make friends easily. However, I just had different priorities, and partying just wasn\u2019t one of them. As my parents say: _\u201cEverything has its own time\u201d_.\\n\\nIn my 2nd year of University, I was getting really good grades, which means that I started having discussions with the other best students in the course. **That\u2019s how I met one of the smartest people I know to this day**. This guy was a proper hands-on person, he didn\u2019t study half the time I did, but he was always busy with something.\\n\\nHe had a band, developed his own personalised guitar pedals and amplifiers, and developed some apps for fun. He did this all while having excellent results at University, which is insane. That\u2019s when I realised that he was not only giving more priority to these hobbies in relation to partying or meeting people, **BUT also in relation to doing courseworks or studying for exams**. He\u2019d never fail a coursework/exam, but that further study could have bumped a grade from 17 to a 19 out of 20.\\n\\nOne day, we were meant to meet at his place to work on a coursework together, and he shown me an app that he had developed for him and his girlfriend. The app was a simple command line interface that was able to split their usual household bills (rent, water bill, food shop, cat food, etc). **I found that fascinating.**\\n\\nI told him I would create one for myself. Since I had read about how to use Java to make a pretty GUI, I thought why not give this a go (although I had no idea about OOP). In addition, I didn\u2019t want my program to look the same as his, so I thought my version could be as if it was an upgrade.\\n\\n...\\n\\nAfter that, I was on a mission. Little did I know that after this, I never really stopped having an interest in working on new side projects.\\n\\nThe planning steps were:\\n\\n**1. Decide main features.**\\n Add new household bills to split, Give money, and See bills.\\n\\n**2.Sketch what the GUI should look like**\\n\\n**3. Devise data structure associated with a new Household bill split.**\\n This was important for both coding, and also database management.\\n\\n**4. Work out the math associated with the splitting and giving**\\n\\nThe development process was to **\u201cdivide to conquer\u201d**. I split the tasks into several sub-tasks, and after every new little code change I was testing the code to make sure that nothing was broken. I re-iterate through design and code several times, until I was happy with my solution. Then I did some clean-up/improvements, such as: Adding pictures of the users, Login password, Frenchies as icons.\\n\\n**On a funny side note:** As I didn\u2019t know how to work with DBs at that time, I used text files to save and load all the information. Meaning that if my brother ever opened one of those text files (which weren\u2019t properly hidden\u2026), I could have passed from him owing me 100 euros to me owing him 10 million. The software was on his laptop, and I had an hardcoded password, so in theory he couldn\u2019t manually add any bill without my presence \u2014 I guess that was enough for him to think that the product was bullet-proof.\\n\\nSee images below of the program:\\n\\n
    \\n \\n \\n
    \\n\\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n\\nYou can find more information about this on my GitHub, [here](https://github.com/DidierRLopes/HouseholdBills).\\n\\n**The program ended up being used for more than 3 years.** Since I lived with other people other than my brother, I had to update the name/image on the program to represent that. Since I was new to coding, I didn\u2019t think about the future. Therefore, when that time came, I had to manually replace the names one by one in the code. I also had friends requesting to use the program, which lead to me adapting this to their names/figures.\\n\\nIt was a fun project and I definitely learned loads from it. The most important thing was that I was able to do whatever **I wanted software-wise as long as I dedicated enough time for it.**\\n\\nHope you had a fun read. Thanks!"},{"id":"my-journey-of-memorising-a-deck-of-52-shuffled-cards","metadata":{"permalink":"/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cards","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-06-26-my-journey-of-memorising-a-deck-of-52-shuffled-cards.md","source":"@site/blog/2021-06-26-my-journey-of-memorising-a-deck-of-52-shuffled-cards.md","title":"My journey of memorising a deck of 52 shuffled cards","description":"In this blogpost, I share my journey of memorising a deck of 52 shuffled cards using the PAO system and Memory Palace technique.","date":"2021-06-26T00:00:00.000Z","formattedDate":"June 26, 2021","tags":[{"label":"Memory Training","permalink":"/blog/tags/memory-training"},{"label":"PAO System","permalink":"/blog/tags/pao-system"},{"label":"Memory Palace","permalink":"/blog/tags/memory-palace"},{"label":"Card Memorisation","permalink":"/blog/tags/card-memorisation"}],"readingTime":9.175,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"my-journey-of-memorising-a-deck-of-52-shuffled-cards","title":"My journey of memorising a deck of 52 shuffled cards","date":"2021-06-26T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280495771-e58ecbfe-5718-4960-9911-fb7ff146efc4.png","tags":["Memory Training","PAO System","Memory Palace","Card Memorisation"],"description":"In this blogpost, I share my journey of memorising a deck of 52 shuffled cards using the PAO system and Memory Palace technique."},"prevItem":{"title":"Household bills Program","permalink":"/blog/household-bills-program"},"nextItem":{"title":"Customizable Meme Filter","permalink":"/blog/customizable-meme-filter"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share my journey of memorising a deck of 52 shuffled cards using the PAO system and Memory Palace technique.\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nA few years back, I wanted to read a book about memory and found the best-selling book **\u201cMoonwalking with Einstein: The Art and Science of Remembering Everything\u201d** an ideal choice. I won\u2019t go into too much detail about the book which is a great read, if you don\u2019t trust me, trust Bill Gates, who called the book \u201c_absolutely phenomenal_\u201d. But let me give you a brief sequence of events from the author and journalist of the book, Joshua Foer:\\n\\n- It starts by observing the extraordinary accomplishments of mental athletes at a memory championship.\\n- Foer meets Tony Buzan, the trim 67-year-old English self-help guru who founded the [World Memory Championships](http://www.worldmemorychampionships.com/) in 1991 and who insists the brain is \u201clike a muscle\u201d: exercise it and it gets stronger.\\n- Foer learns the art of memory training.\\n- He practices his memory muscles for 1 year with help of a shambling 24-year-old from Oxford who becomes his mentor.\\n- He then finds himself in the finals of the US Memory Championships, alongside \u2018mental athletes\u2019 who could memorise the precise order of ten shuffled decks of cards in under an hour.\\n\\nIf you\u2019re interested, here\u2019s a [nice review](https://www.theguardian.com/science/2012/nov/21/moonwalking-einstein-joshua-foer-review) on the book.\\n\\n## My thoughts after reading book\\n\\nAfter finishing this book, more than anything I was curious. Unlike Joshua Foer, I didn\u2019t want to dedicate a full year to the cause, but I still wanted to give it a go so I could look back and think: \u201cHere\u2019s something pretty useless for the day-to-day. Yet, how cool is that I can memorise 52 random cards?\u201d.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/86f89618-060b-493f-bb66-9c9decbb54e5)\\n\\nFor people who know me, they know how much I hate to leave things unfinished. Whether that\u2019s a task that I set myself, or \u2018just\u2019 not leaving any pizza leftover. Therefore, I knew that if I really wanted to do this, I\u2019d have to set aside time for it, and so I did. The text under is my journey to memorise a shuffled deck of 52 cards.\\n\\n## Technique (PAO + Memory Palace)\\n\\nThe mnemonic \u201c**Memory Palace**\u201d technique that I was about to use was referred to on the aforementioned book. The ancient mnemonic technique was first practiced by Simonides of Ceos over 2,500 years ago. When googling the term, the definition is:\\n\\n_A Memory Palace is an imaginary location in your mind where you can store mnemonic images. The most common type of memory palace involves making a journey through a place you know well, like a building or town. Along that journey there are specific locations that you always visit in the same order._\\n\\nThe mnemonic images would be conceived using the famous PAO system. This term means:\\n\\n_The Person-Action-Object System (or \u201cPAO\u201d System) is a popular method for memorising long random numbers and decks of playing cards. \u2026 Some people assign arbitrary images to the numbers without any phonetic conversion. The digits are usually chunked in 2 or 3 digits and then placed into loci in a Memory Palace._\\n\\nThe idea is to take advantage of what we humans are best at, photographic memory.\\n\\n## The journey of memorising a shuffled deck of 52 cards\\n\\n### 1. Create your own personal PAO system.\\n\\nFor each card of the deck you have to have an associated _Person_, _Action_ and _Object_. It\u2019s useful to have the least possible rules, and have these intersecting simultaneous cards, so that there\u2019s less to memorise. Here\u2019s how I did it:\\n\\n- Define a **category** for each **suit** (e.g. Hearts represents friends)\\n- Define **something** for each **type**.\\n - From 1 to 10 I\u2019ve defined the starting letter of the person (e.g. Card 7 represents a person with name starting with letter K or C).\\n - For the court (Queen, Jack, King) I\u2019ve defined them as a powerful male/female. (e.g. King is the GOAT of the category).\\n\\nBelow you can see what the table looks like:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/eb7e2b47-e1df-419c-b08d-a5b3d1cc3614)\\n\\n**Note:** The Person is the main existing link, hence it needs to be something that you think of immediately when the category and the type of the card is known.\\n\\nI had to change my cards several times as some of the PAO\u2019s I had weren\u2019t memorable enough, either because the name was too common, or because I didn\u2019t relate that much to this person.\\n\\n### 2. Memorise each card with it\u2019s PAO system\\n\\nOnce the table above is filled in, the next step is to associate each card with it\u2019s **Person-Action-Object**. I find that as long as you can remember the person name of the card by doing the cross between category and type, the action-object comes easily.\\n\\nFor instance:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/f5f1bc1d-58fd-4561-85db-06587cfc602f)\\n\\n**Jack \u2666: Einstein \u2014 Writing Equations \u2014 Blackboard**\\n\\n- When I see a **Diamond**, I know we are in the **Celebrities** category. Since this is a **Jack** I know it\u2019s an **important person**. I\u2019ve selected Musk to be my GOAT, so this has to be **Einstein**. The **writing equations** and **blackboard** comes trivially when thinking about Einstein.\\n\\n**8 \u2663: Floyd Mayweather \u2014 Skipping \u2014 Rope**\\n\\n- When a **Club** appears, I know we are in the **Athletes** category. Since this is an **8** I know the name starts with an **F or V**. This promptly reminds me of **Floyd**. The **skipping** and **rope** come immediately, due to my own personal experiences from improving my skipping skills and looking at videos of Mayweather. I find that the more the personal and creative you get with this, the easier it is to remember.\\n\\n**King \u2660: Goku \u2014 Powering up \u2014 Blonde Hair**\\n\\n- If I see a **Spade**, I know we are in the **Cartoon** category. Since this is a King I know that this character is the **GOAT**. Which immediately triggers my brain to Goku, since it used to be my favourite cartoon as a kid. Trivially, comes the powering up as action, and the blonde hair as object.\\n\\nIn order to remember all the cards, my trick was to have a deck of cards where on the back of each card I wrote its own PAO. So that if I didn\u2019t remember, instead of looking at the table, I could look at the back of the card. However, I find it important to sometimes not quit trying to remember immediately, as when you initially struggle to remember a card, when you eventually do, your brain retains this information so much better.\\n\\n**Note: At this step you may realise that you keep forgetting the same PAO card. I recommend you going back to step 1 and re-defining it.** Once I did this to the cards I kept forgetting, I was in a much better position.\\n\\n### 3. Create your own memory palace\\n\\nThis is the easiest step. I used the house I grew up in in Portugal, and decided to place 4 PAO instruments (i.e. 12 cards) per house division. Meaning that by the time I was in the first room upstairs, I was already 36 cards down the deck.\\n\\nSince I\u2019m not living in Portugal, let me show you what I mean by using a picture of my current living room in London. The spots I would select in here would have been: 1. Top of table with candles; 2. Top of side table; 3. Inside my gecko\u2019s vivarium; 4. As a program on the TV.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/b00c7f9a-8d84-43a5-8397-c952bd5ae031)\\n\\n**Note: Make sure you always remember your memory palace spots, otherwise you may overlook them once looking for the next 3 set of cards.** The way I think about this is imagining that I lost my keys, and mentally going back in time to try to understand where they could be.\\n\\n### 4. Practice memorising each set of 3 cards PAO\\n\\nThis is where the creativity comes in. **When picking 3 cards from the deck, you picture the Person of the 1st card, the Action of the 2nd one, and the Object of the 3rd one.**\\n\\nLet\u2019s imagine we\u2019ve got the cards aforementioned.\\n\\n**- Card 1: Jack \u2666**\\n * Einstein \u2014 Writing Equations \u2014 Blackboard\\n\\n**- Card 2: 8 \u2663**\\n * Floyd Mayweather \u2014 Skipping \u2014 Rope\\n\\n**- Card 3: King \u2660**\\n * Goku \u2014 Powering up \u2014 Blonde Hair\\n\\nIn my brain, this would lead to\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/a585347e-f9ff-47ac-9324-54ceaf04390f)\\n\\n**Note: At this point you may realise that some combos of cards don\u2019t work well together. **If this is bad enough to not make you remember the 3 card PAO, I recommend updating your PAO system to something that\u2019s easier to generalise.\\n\\n### 5. Place each 3 cards PAO onto the memory palace\\n\\nFor instance, if I were to place the **Einstein Skipping with Blonde Hair** on the **3rd spot of my living room (my gecko\u2019s vivarium)**, in my head, I would picture something like this:\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/a3730268-363c-4993-a258-d1ed6bd76000)\\n\\n**Note: I recommend trying to have the 3 card PAO interacting with the environment to improve memory.** In this case, I would have thought about the Blonde Skipping Einstein having to do skipping so fast that the gecko coudn\u2019t come close because the rope was going too fast. The more original/different, the more chances you have to remember this scenario.\\n\\n### 6. Re-iterate the memory palace with new 3 card PAO every time\\n\\nInstead of memorising a new 3 card PAO in a memory palace location and then moving on, I always go back to the start and think about all the previous 3 card PAO\u2019s from start. This will ensure you don\u2019t forget the oldest 3 card PAO. In fact, it will make it so that the oldest 3 card PAO are repeated more times than the newer ones, so it\u2019s all balanced out.\\n\\n### 7. Practice and Practice\\n\\nI found out that after memorising my PAO system (which took a long time) and the memory palace, it was fairly easy to memorise the shuffled 52 deck of cards. However, it was taking me way too long to memorise it AND say it out loud.\\n\\nOnce I started practicing more and more time started decreasing. The last time I tried, I managed to do it under 10 minutes, which is not great but I\u2019ll take it. As I mentioned, I just wanted to be able to do it, I didn\u2019t care much about the time.\\n\\nAlso, I still needed to think about the category + type of the card every-time, I think the time to memorise the deck of cards decreases exponentially once you actually associate each card image to it\u2019s PAO. But for that you need to practice more, which for me was getting boring.\\n\\n...\\n\\nThis is a different post than the ones I usually do, but I find it extremely interesting. Hence why I was keen on sharing it.\\n\\nLet me know if you\u2019ve heard about it, or want to give this a go.\\n\\nThanks for reading!"},{"id":"customizable-meme-filter","metadata":{"permalink":"/blog/customizable-meme-filter","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-06-12-customizable-meme-filter.md","source":"@site/blog/2021-06-12-customizable-meme-filter.md","title":"Customizable Meme Filter","description":"In this blogpost, I share my journey of creating a customizable meme filter using Python. This filter selects a random meme based on the number of people on the screen and assigns each person to a character in the meme.","date":"2021-06-12T00:00:00.000Z","formattedDate":"June 12, 2021","tags":[{"label":"Python","permalink":"/blog/tags/python"},{"label":"Meme Filter","permalink":"/blog/tags/meme-filter"},{"label":"Image Processing","permalink":"/blog/tags/image-processing"},{"label":"Face Recognition","permalink":"/blog/tags/face-recognition"}],"readingTime":2.54,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"customizable-meme-filter","title":"Customizable Meme Filter","date":"2021-06-12T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280495694-b123cf98-3411-4edc-9597-7b8c6d0c7e73.png","tags":["Python","Meme Filter","Image Processing","Face Recognition"],"description":"In this blogpost, I share my journey of creating a customizable meme filter using Python. This filter selects a random meme based on the number of people on the screen and assigns each person to a character in the meme."},"prevItem":{"title":"My journey of memorising a deck of 52 shuffled cards","permalink":"/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cards"},"nextItem":{"title":"NeistPoint Project","permalink":"/blog/neistpoint-project"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share my journey of creating a customizable meme filter using Python. This filter selects a random meme based on the number of people on the screen and assigns each person to a character in the meme.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/meme-filter).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nFor the people who know me, they know how much I enjoy memes. I\u2019ve got to admit, whenever I go to museums I have a lot of fun captioning artwork as memes. **As I like to say, I go for the art, and I stay for the memes.**\\n\\nOne day while commuting to work (you can still see the [first commit](https://github.com/DidierRLopes/meme-filter/commit/59be427571c96350d9652922b3ab2ba52ddf18af) which dates back to 10 February of 2020 and has only notes of the sketch of this idea in Portuguese) I thought:\\n\\n> \u201cIt would be funny if there was a snapchat kind of filter where given the number of people on the screen, a random meme was selected and each person would be one of its characters\u201d.\\n\\n
    \\n\\nSince I was still improving my Python skills, I thought why not do it in Python. After 1 month, I already had the working code, however, since I was switching jobs at the time my commute time reduced drastically and so did my time to work on this. It took around 1 more month to finish the cleaning up of the script (324 lines) to be more readable, and at the same time Covid happened. **The latter explains why my hair is blonde on the demo below** :)\\n\\nUsage:\\n\\n```console\\n./didifilter.py \u2014 location=memes \u2014 caption=\u2019Which meme am I?\u2019 \u2014 initial=30 \u2014 final=50 -b \u2014 max=3\\n```\\n\\n![hair_1](https://github.com/DidierRLopes/my-website/assets/25267873/100b62e1-9c40-4532-af0d-bdfc7ada697e)\\n\\n**To sum up:** This program is meant to be an advanced version of the known snapchat filter where there are random images spinning on top of people\u2019s heads. The main improvement is that you can not only select the images you want to choose from and the caption, but you can also play it with friends (recognizing more than 1 face at the same time).\\n\\nThe best part of the script is that it is meant to be easily customizable. Any person is able to create their own filter by creating a folder with the images they want within a folder with 1, 2, \u2026 based on the number of people they are meant to be used (apart from when backwardCompatible flag is enabled), and select/specify different types of flags/parameters, e.g.:\\n\\n```console\\n./didifilter.py \u2014 locationFolder=celebrities \u2014 caption=\u2019What celeb am I?\u2019 \u2014 max=2 -v \u2014 video=\u201dexampleVideo\u201d\\n```\\n\\n```console\\n./didifilter.py --locationFolder=pokemons --caption=\\"Who\'s this pokemon?\\" --width=250 --height=150 --max=1 -p\\n```\\n\\n**AND**, you can also quickly tweak the code to adapt it to do something else. Here\u2019s me **pranking** my girlfriend with a psyduck when the query was: \u201c_Who do I look like?_\u201d\\n\\n![hair_2](https://github.com/DidierRLopes/my-website/assets/25267873/826e8bdc-39b9-4db0-a4f4-f94178d4c746)\\n\\nHope you have a nice read and enjoy the filter. You can find the code [here](https://github.com/DidierRLopes/meme-filter).\\n\\nFeel free to provide feedback, as always!"},{"id":"neistpoint-project","metadata":{"permalink":"/blog/neistpoint-project","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-05-23-neistpoint-project.md","source":"@site/blog/2021-05-23-neistpoint-project.md","title":"NeistPoint Project","description":"In this blogpost, I share my journey of starting a sustainable clothing brand, managing the project, and developing a stock management tool in C++.","date":"2021-05-23T00:00:00.000Z","formattedDate":"May 23, 2021","tags":[{"label":"NeistPoint","permalink":"/blog/tags/neist-point"},{"label":"Clothing Brand","permalink":"/blog/tags/clothing-brand"},{"label":"Sustainability","permalink":"/blog/tags/sustainability"},{"label":"Project Management","permalink":"/blog/tags/project-management"},{"label":"C++","permalink":"/blog/tags/c"},{"label":"Stock Management","permalink":"/blog/tags/stock-management"}],"readingTime":3.025,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"neistpoint-project","title":"NeistPoint Project","date":"2021-05-23T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280495631-c2282aa1-115e-451f-b0c0-af1351936c37.png","tags":["NeistPoint","Clothing Brand","Sustainability","Project Management","C++","Stock Management"],"description":"In this blogpost, I share my journey of starting a sustainable clothing brand, managing the project, and developing a stock management tool in C++."},"prevItem":{"title":"Customizable Meme Filter","permalink":"/blog/customizable-meme-filter"},"nextItem":{"title":"Move over Bloomberg Terminal, here comes Gamestonk Terminal","permalink":"/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminal"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share my journey of starting a sustainable clothing brand, managing the project, and developing a stock management tool in C++.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/NeistpointCLI).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\n## Context\\n\\nMore than 2 years ago, me and some friends started a clothing brand - **NeistPoint**. The logo and name is inspired by the Neist Point Lighthouse in the Isle of Skye. The motto was \u201c**For a greener future and a bluer ocean**\u201d, and the goal was to raise awareness to contribute for a sustainable environment.\\n\\nAt **Neist**, we tried to not be yet another clothing brand, but actually to fill the current gap in the retail industry by producing high-quality, eco-friendly clothes at affordable prices. And we achieved that. For instance, our t-shirts are made of 100% organic ring-spun combed cotton, and they last longer than my Lacoste t-shirts \u2014 seriously.\\n\\nThe problem is that to be profitable, you need to either increase the prices of your products, or decrease the quality, which were not things we wanted to do since they didn\u2019t represent the value of our brand. Due to that, and the fact that the team behind our brand no longer has time/resources, we\u2019re dropping our **last ever** season now.\\n\\nAnyway, no regrets from my side, it has been a great learning experience to understand what is involved around the creation of a brand, being a project manager internally, and doing something other than coding in my spare time. _Also, most importantly, ending up with a full new wardrobe of pieces that I love and that will probably last for my kids._\\n\\nSorry for this rambling, just wanted to share this context with everyone.\\n\\n## Implementation\\n\\nGiven that our team had no experience in clothing whatsoever, and based on our needs, our steps to make this a high-quality product were:\\n\\n1. Get the best (environmentaly friendly) clothing material\\n2. Send it to the best embroidery store in Portugal\\n3. Package it and forward it onto the customer\\n\\n
    \\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/d614045b-39b0-408a-bbd8-11006c55efc5)\\n\\nThis process was **far from being optimised**. In fact, pretty much everything was manual. Apart from the creation of the clothes. Therefore, we needed a Software to keep track of the products at each of it\u2019s stages: _material to request, material shipping, material in stock, product to create, product creating, product in stock, and product sent_.\\n\\nSince I didn\u2019t find anything that I liked online, and I knew how to code, I thought the best solution was to develop something myself. This way it could be adapted to perfectly fit my own requirements (advantages of being your own product owner eheh). In addition, I wanted to improve my C++ skills, so I thought, **why not?**\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/e0dd7c35-d7f4-4175-a80e-be881ff03141)\\n\\nFor 1 week or so, during my commute I worked on the [NeistPoint Stock Managemen](https://github.com/DidierRLopes/NeistpointCLI) tool. To be honest, I think it took longer to devise the architecture behind it than to actually write the code, as there were lots of things that I wanted to be taken into account. Also, the fact that the \u201cdatabase\u201d is a .csv file, was intentional. This way, we could share this file between the team members.\\n\\nHope someone finds this tool interesting, and gets inspired to develop their own software to meet their own project requirements. In the meantime, feel free to check us one last time on [our website](https://neistclothing.com/) or [instagram](https://www.instagram.com/neistclothing/). You may even spot me in some of the pictures!\\n\\nThe repository for the code can be found here: https://github.com/DidierRLopes/NeistpointCLI\\n\\nThanks for reading, as always!"},{"id":"move-over-bloomberg-terminal-here-comes-gamestonk-terminal","metadata":{"permalink":"/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminal","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-04-23-move-over-bloomberg-terminal-here-comes-gamestonk-terminal.md","source":"@site/blog/2021-04-23-move-over-bloomberg-terminal-here-comes-gamestonk-terminal.md","title":"Move over Bloomberg Terminal, here comes Gamestonk Terminal","description":"In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.","date":"2021-04-23T00:00:00.000Z","formattedDate":"April 23, 2021","tags":[{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal"},{"label":"Finance","permalink":"/blog/tags/finance"},{"label":"Stock Market","permalink":"/blog/tags/stock-market"},{"label":"Programming","permalink":"/blog/tags/programming"},{"label":"Open Source","permalink":"/blog/tags/open-source"}],"readingTime":2.375,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"move-over-bloomberg-terminal-here-comes-gamestonk-terminal","title":"Move over Bloomberg Terminal, here comes Gamestonk Terminal","date":"2021-04-23T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280495527-a0760645-db19-4d5e-bf8a-089865eb12b3.png","tags":["Gamestonk Terminal","Finance","Stock Market","Programming","Open Source"],"description":"In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more."},"prevItem":{"title":"NeistPoint Project","permalink":"/blog/neistpoint-project"},"nextItem":{"title":"Momentum Football Bets","permalink":"/blog/momentum-football-bets"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nHey all,\\n\\n2 months ago I made a terminal that I had been working on my spare time, to help me on my stock research, open-source. See [here](/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal).\\n\\n## The motto\\n\\nGamestonk Terminal provides a modern Python-based integrated environment for investment research, that allows the average joe retail trader to leverage state-of-the-art Data Science and Machine Learning technologies.\\n\\nAs a modern Python-based environment, Gamestonk Terminal opens access to numerous Python data libraries in Data Science (Pandas, Numpy, Scipy, Jupyter), Machine Learning (Pytorch, Tensorflow, Sklearn, Flair), and Data Acquisition (Beautiful Soup, and numerous third-party APIs).\\n\\nAs of today, and thanks to all your help and the traction created around it, the terminal is looking better than ever. Now it\u2019s no longer only me taking care of the repo, but also 2 other experienced devs, who are adding features on a daily basis and increasing the robustness of the codebase. Feel free to wander through the FEATURES page to see what you would get out of this tool!\\n\\nIf some of you thought it was amazing 2 months ago, you won\u2019t believe what it looks like now. You can check out the ROADMAP for all the features that have been added since, but let me list some of them:\\n\\n- **New** Screener for stocks, which allows users to save their presets and share them\\n- **New** Options menu\\n- **New** Comparison Analysis to compare several tickers in their historical price, sentiment, or fundamental analysis\\n- **New** Portfolio Optimisation that assigns stocks weights based on risk level specified by the user\\n- **New** Exploratory Data Analysis menu that looks at historical data from a statistic point of view\\n- **New** Residual Analysis after using a statistical model for prediction\\n- **New** menu to provide access to your portfolio (supports Robinhood, Ally invest, Alpaca, and Degiro)\\n- **New** Cryptocurrency, Forex, and FRED menus\\n- Prediction with backtesting\\n- Technical analysis that includes a score and a summary\\n- Due Diligence menu with data from Dark Pools, and also Failure to Deliver\\n- Sentiment analysis from news provided from collaboration with a company that provides this feature paid. Free for us!\\n\\nAs always feedback is appreciated, and contributions even more so!\\n\\nLet\u2019s try to reduce the gap between the amount of information that the Hedge Funds have access to in comparison with the usual retail trader.\\n\\nBloomberg Terminal, we\u2019re coming for you.\\n\\nFeel free to join our discord at https://discord.gg/Up2QGbMKHY."},{"id":"momentum-football-bets","metadata":{"permalink":"/blog/momentum-football-bets","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-04-07-momentum-football-bets.md","source":"@site/blog/2021-04-07-momentum-football-bets.md","title":"Momentum Football Bets","description":"In this blogpost, I share how I developed an automated task to estimate the momentum of football teams for betting purposes using Beautiful Soup and Python.","date":"2021-04-07T00:00:00.000Z","formattedDate":"April 7, 2021","tags":[{"label":"Football","permalink":"/blog/tags/football"},{"label":"Betting","permalink":"/blog/tags/betting"},{"label":"Momentum","permalink":"/blog/tags/momentum"},{"label":"Web Scraping","permalink":"/blog/tags/web-scraping"},{"label":"Beautiful Soup","permalink":"/blog/tags/beautiful-soup"},{"label":"Python","permalink":"/blog/tags/python"}],"readingTime":3.275,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"momentum-football-bets","title":"Momentum Football Bets","date":"2021-04-07T00:00:00.000Z","image":"https://github-production-user-asset-6210df.s3.amazonaws.com/88618738/280495392-fbf8e3ee-21a6-47c0-95f7-97b535a07dd0.png","tags":["Football","Betting","Momentum","Web Scraping","Beautiful Soup","Python"],"description":"In this blogpost, I share how I developed an automated task to estimate the momentum of football teams for betting purposes using Beautiful Soup and Python."},"prevItem":{"title":"Move over Bloomberg Terminal, here comes Gamestonk Terminal","permalink":"/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminal"},"nextItem":{"title":"Gamestonk Terminal - The next best thing after Bloomberg Terminal","permalink":"/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I share how I developed an automated task to estimate the momentum of football teams for betting purposes using Beautiful Soup and Python.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/momentum-football-bets).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nThis Easter, I spoke with my girlfriend\u2019s father and there were several football matches happening that weekend, he started talking about betting on some of those matches.\\n\\nHe carried on to explain me his betting routine, which consisted of:\\n\\n1. Checking the next fixtures for a specific competition: https://www.skysports.com/premier-league-fixtures\\n2. Checking the last results of each of the team and \u201cestimate\u201d their momentum (e.g. https://www.skysports.com/football/wolverhampton-wanderers-vs-liverpool/stats/429116)\\n\\n
    \\n\\nThen, iterate these 2 steps for all the fixtures happening, from Premier League, Championship, League One, and League Two.\\n\\nSince I recently learned how to use Beautiful Soup to scrap data from web pages (see [GamestonkTerminal](https://dro-lopes.medium.com/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal-a263c001a61f)), I thought that I could create an automated task that would do all of these steps with a simple double click executable. After checking that I could extract such data from SkySports, I let him know that by the next day I would have something working.\\n\\nAfter dinner, I started working on the project, and before I went to sleep I had the first prototype working, which you can see in [here](https://github.com/DidierRLopes/momentum-football-bets).\\n\\nOn top of \u201chis\u201d automated task, I created a \u201cmomentum score\u201d which tries to estimate the momentum score based on what my girlfriend\u2019s father told me that he does. He looks into the last games of the team and see if they have a positive momentum by looking to see if they come from a winning series.\\n\\nSo, I thought it would be good to attribute a weight to each of the last matches where the most recent match would have the biggest weight, and last one from the 6 provided from SkySports stats would have the lowest weight. Together with this weight, I thought we could use the sum of the weight to the score in case of a win, subtract in case of loss, and don\u2019t do anything in case of a draw.\\n\\nSo, in simple terms, if score is positive the team is likely to have been winning their last matches, if score is negative the team is likely to have loss their last matches.\\n\\nBut then, I thought:\\n\\n_\u201cOk, this is nice. But when you bet, you don\u2019t bet on a single team, but on the result between the 2 teams that are playing each other.\u201d_ I.e. if team A has an amazing momentum, and so has team B, the bet will \u2014 in theory \u2014 be risky.\\n\\nHence, the next step was to address this concern. This was done by checking the momentum score difference between the teams, the bigger the momentum score, the less risky \u2014 in theory \u2014 a bet would be. What we want to see is a team that has been doing amazing for the past 6 games, and one that has been performing consistently bad.\\n\\nLastly, I added a confidence filter so that the terminal would only output the games that shown at least a certain X confidence. And also, an argument that would select the number of days in the future that we could look for fixtures.\\n\\nAfter having this implemented, the day after was about polishing the code, adding some colouring and emojis, creating a repository for it, a README, discussing the binning of the momentum score and bet confidence terms, creating a logo for it, and creating an executable + adding the logo which my girlfriend did.\\n\\n![image](https://github.com/Meg1211/my-website/assets/88618738/4e16ec33-ae1a-4ade-88a0-c985fe8b8c12)\\n\\nAfter this, we were quite excited to backtest the app. We filtered the next features with a big confidence bet score (to have less risk), and put 20 pounds on 3 different accumulators. [And it\u2019s gone.](https://www.youtube.com/watch?v=-DT7bX-B1Mg)\\n\\nHope you had a good read. Feedback is always appreciated."},{"id":"gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal","metadata":{"permalink":"/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal","editUrl":"https://github.com/DidierRLopes/my-website/tree/main/blog/2021-03-14-gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal.md","source":"@site/blog/2021-03-14-gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal.md","title":"Gamestonk Terminal - The next best thing after Bloomberg Terminal","description":"In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.","date":"2021-03-14T00:00:00.000Z","formattedDate":"March 14, 2021","tags":[{"label":"Gamestonk Terminal","permalink":"/blog/tags/gamestonk-terminal"},{"label":"Finance","permalink":"/blog/tags/finance"},{"label":"Stock Market","permalink":"/blog/tags/stock-market"},{"label":"Programming","permalink":"/blog/tags/programming"},{"label":"Open Source","permalink":"/blog/tags/open-source"}],"readingTime":3.2,"hasTruncateMarker":true,"authors":[],"frontMatter":{"slug":"gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal","title":"Gamestonk Terminal - The next best thing after Bloomberg Terminal","date":"2021-03-14T00:00:00.000Z","image":"https://github.com/DidierRLopes/my-website/assets/88618738/f9508a33-fcee-4056-a611-a4422890bf8b","tags":["Gamestonk Terminal","Finance","Stock Market","Programming","Open Source"],"description":"In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more."},"prevItem":{"title":"Momentum Football Bets","permalink":"/blog/momentum-football-bets"}},"content":"

    \\n \\n

    \\n\\n
    \\n\\nIn this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.\\n\\nThe open source code is available [here](https://github.com/DidierRLopes/GamestonkTerminal).\\n\\n\x3c!-- truncate --\x3e\\n\\n
    \\n\\nIf you like stocks and are careful with the way you spend your money, (me saying it seems counter-intuitive given that I bought GME at the peak, I know) you know how much time goes into buying shares of a stock.\\n\\nYou need to: Find stocks that are somehow undervalued; Research on the company, and its competitors; Check that the financials are healthy; Look into different technical indicators; Investigate SEC fillings and Insider activity; Look up for next earnings date and analysts estimates; Estimate market\u2019s sentiment through Reddit, Twitter, Stocktwits; Read news;. \u2026 the list goes on.\\n\\nIt\u2019s tedious and I don\u2019t have 24k for a Bloomberg terminal. Which led me to the idea during xmas break to spend the time creating my own terminal. I introduce you to \u201cGamestonk Terminal\u201d (probably should\u2019ve sent 1 tweet everyday to Elon Musk for copyrights permission eheh).\\n\\nAs someone mentioned, this is meant to be like a swiss army knife for finance.\\n\\nIt contains the following functionalities:\\n\\n- **Discover Stocks**: Some features are: Top gainers; Sectors performance; upcoming earnings releases; top high shorted interest stocks; top stocks with low float; top orders on fidelity; and some SPAC websites with news/calendars.\\n\\n- **Market Sentiment**: Main features are: Scrolling through Reddit main posts, and most tickers mentions; Extracting trending symbols on stocktwits, or even stocktwit sentiment based on bull/bear flags; Twitter in-depth sentiment prediction using AI; Google mentions over time.\\n\\n- **Research Web pages**: List of good pages to do research on a stock, e.g. macroaxis, zacks, macrotrends, ..\\n\\n- **Fundamental Analysis**: Read financials from a company from Market Watch, Yahoo Finance, Alpha Vantage, and Financial Modeling Prep API. Since I only rely on free data, I added the information from all of these, so that the user can get it from the source it trusts the most. Also exports management team behind stock, along with their pages on Google, to speed up research process.\\n\\n- **Technical Analysis**: The usual technical indicators: sma, rsi, macd, adx, bbands, and more.\\n\\n- **Due Diligence**: It has several features that I found to be really useful. Some of them are: Latest news of the company; Analyst prices and ratings; Price target from several analysts plot over time vs stock price; Insider activity, and these timestamps marked on the stock price historical data; Latest SEC fillings; Short interest over time; A check for financial warnings based on Sean Seah book.\\n\\n- **Prediction Techniques**: The one I had more fun with. It tries to predict the stock price, from simple models like sma and arima to complex neural network models, like LSTM. The additional capability here is that all of these are easy to configure. Either through command line arguments, or even in form of a configuration file to define your NN. It also allows backtesting.\\n\\n- **Reports**: Allows you to run several jobs functionalities and write daily notes on a stock, so that you can assess what you thought about the stock in the past, to perform better decisions.\\n\\n- **Comparison Analysis**: Allows to compare different stocks.\\n\\n- **On the ROADMAP**: Cryptocurrencies, Portfolio Analysis, Credit Analysis. Feel free to add the features you\u2019d like and we would happily work on it.\\n\\nThis project will always remain open-source, and the idea is that it can grow substantially over-time so that more and more people start taking advantage of it.\\n\\nFeel free to contribute towards the project.\\n\\nFeedback is extremely welcome!"}]}')}}]); \ No newline at end of file diff --git a/assets/js/bcd3bfb0.08ac9183.js b/assets/js/bcd3bfb0.08ac9183.js new file mode 100644 index 0000000000..e3b7717506 --- /dev/null +++ b/assets/js/bcd3bfb0.08ac9183.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[24306],{36190:a=>{a.exports=JSON.parse('{"label":"langchain","permalink":"/blog/tags/langchain","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/c6112feb.146723e6.js b/assets/js/c6112feb.146723e6.js new file mode 100644 index 0000000000..8524b1bca4 --- /dev/null +++ b/assets/js/c6112feb.146723e6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[13620],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>u});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},h="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),h=c(n),m=i,u=h["".concat(l,".").concat(m)]||h[m]||d[m]||o;return n?a.createElement(u,r(r({ref:t},p),{},{components:n})):a.createElement(u,r({ref:t},p))}));function u(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[h]="string"==typeof e?e:i,r[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=n(87462),i=(n(67294),n(3905));const o={slug:"the-new-finai-tech-stack",title:"The new FinAI Tech Stack",date:new Date("2023-12-15T00:00:00.000Z"),image:"https://github.com/DidierRLopes/my-website/assets/25267873/8dfd85c1-c1c3-4d7b-bd38-ce777c8a8dd7",tags:["openbb","finance","ai","agents","langchain","llamaindex","mindsdb","nixtla"],description:'This blog post delves into how our collaboration with MindsDB, Nixtla, LlamaIndex, and Langchain is revolutionizing the financial world. Read on to learn all about the event "The New FinAI Tech Stack" held last week in SF, California.'},r=void 0,s={permalink:"/blog/the-new-finai-tech-stack",editUrl:"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-12-15-the-new-finai-tech-stack.md",source:"@site/blog/2023-12-15-the-new-finai-tech-stack.md",title:"The new FinAI Tech Stack",description:'This blog post delves into how our collaboration with MindsDB, Nixtla, LlamaIndex, and Langchain is revolutionizing the financial world. Read on to learn all about the event "The New FinAI Tech Stack" held last week in SF, California.',date:"2023-12-15T00:00:00.000Z",formattedDate:"December 15, 2023",tags:[{label:"openbb",permalink:"/blog/tags/openbb"},{label:"finance",permalink:"/blog/tags/finance"},{label:"ai",permalink:"/blog/tags/ai"},{label:"agents",permalink:"/blog/tags/agents"},{label:"langchain",permalink:"/blog/tags/langchain"},{label:"llamaindex",permalink:"/blog/tags/llamaindex"},{label:"mindsdb",permalink:"/blog/tags/mindsdb"},{label:"nixtla",permalink:"/blog/tags/nixtla"}],readingTime:5.01,hasTruncateMarker:!0,authors:[],frontMatter:{slug:"the-new-finai-tech-stack",title:"The new FinAI Tech Stack",date:"2023-12-15T00:00:00.000Z",image:"https://github.com/DidierRLopes/my-website/assets/25267873/8dfd85c1-c1c3-4d7b-bd38-ce777c8a8dd7",tags:["openbb","finance","ai","agents","langchain","llamaindex","mindsdb","nixtla"],description:'This blog post delves into how our collaboration with MindsDB, Nixtla, LlamaIndex, and Langchain is revolutionizing the financial world. Read on to learn all about the event "The New FinAI Tech Stack" held last week in SF, California.'},nextItem:{title:"Goodbye OpenBB SDK. Hello OpenBB Platform",permalink:"/blog/goodbye-openbb-sdk-hello-openbb-platform"}},l={authorsImageUrls:[]},c=[{value:"Context",id:"context",level:2},{value:"OpenBB x MindsDB",id:"openbb-x-mindsdb",level:2},{value:"OpenBB x Nixtla",id:"openbb-x-nixtla",level:2},{value:"OpenBB x LlamaIndex",id:"openbb-x-llamaindex",level:2},{value:"OpenBB x Langchain",id:"openbb-x-langchain",level:2},{value:"Wrap up",id:"wrap-up",level:2}],p={toc:c},h="wrapper";function d(e){let{components:t,...n}=e;return(0,i.kt)(h,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/8dfd85c1-c1c3-4d7b-bd38-ce777c8a8dd7"})),(0,i.kt)("br",null),(0,i.kt)("p",null,'This blog post delves into how our collaboration with MindsDB, Nixtla, LlamaIndex, and Langchain is revolutionizing the financial world. Read on to learn all about the event "The New FinAI Tech Stack" held last week in SF, California.'),(0,i.kt)("div",{style:{borderTop:"1px solid #0088CC",margin:"1.5em 0"}}),(0,i.kt)("h2",{id:"context"},"Context"),(0,i.kt)("p",null,"In early September, I attended a \u201cFuture of Finance\u201d event in NYC. Despite the presence of well-known financial professionals from top firms in the industry, I found the event lacked practical applications demonstrating how AI is impacting the financial sector."),(0,i.kt)("p",null,"Once I was back in the Bay Area, I had a barbecue with Jorge and Max from MindsDB and Nixtla, and I was commenting on that experience. To which Jorge promptly replied - why don\u2019t we do it ourselves? So following this discussion, we decided to put the AI in finance event in motion."),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/4c44a976-1257-4ace-b874-a6dc2f98e82f"})),(0,i.kt)("p",null,"At OpenBB, AI has become a key component in our approach to refactoring the OpenBB Platform from the ground up. We've recently recruited a Head of AI to help us build our strategy and work on this effort full-time."),(0,i.kt)("p",null,"You can find more details on this ",(0,i.kt)("a",{parentName:"p",href:"/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig"},"here"),"."),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/4bff3f1f-51a0-43a8-acff-2464fe3e9e0b"})),(0,i.kt)("h2",{id:"openbb-x-mindsdb"},"OpenBB x MindsDB"),(0,i.kt)("p",null,"A few days later, I visited the MindsDB office to discuss collaborating with Jorge on potential partnerships. I suggested the idea of gaining access to MindsDB's data, a proposal that seemed feasible to implement."),(0,i.kt)("p",null,"Eventually, we accomplished this, and I even showcased it during the event last week. The code for this endeavour is open source. Take a look ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/OpenBB-finance/backend-for-terminal-pro/tree/main/mindsdb_python"},"here"),"."),(0,i.kt)("video",{controls:!0},(0,i.kt)("source",{src:"https://openbb-cms.directus.app/assets/bbc1b3c9-2617-46a1-aae6-f41cfd4d3745"})),(0,i.kt)("p",null,"However, Jorge had an even bigger idea. He proposed the concept of granting MindsDB users access to OpenBB data via SQL and harnessing MindsDB's capabilities for machine learning. Essentially, we could convert the data frame in runtime into a virtual SQL table, since we have access to the Pydantic model from the OpenBB platform, and we can build that on the go."),(0,i.kt)("p",null,"After ",(0,i.kt)("a",{parentName:"p",href:"https://twitter.com/didier_lopes/status/1710560436398264756?s=20"},"tweeting about this"),", I received numerous messages, which validated that there was interest in OBB SQL. So, we set off to work on this. Together with the OpenBB team, we made it easy to access all available inputs/outputs for each endpoint, while the MindsDB team worked on virtualizing the tables. The result can be seen ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/mindsdb/mindsdb/tree/staging/mindsdb/integrations/handlers/openbb_handler"},"here"),"."),(0,i.kt)("p",null,"At the event last week, Jorge shared this work. Additionally, in collaboration with LangChain, he successfully developed a Slack bot with direct access to this data, all accessible within Slack"),(0,i.kt)("h2",{id:"openbb-x-nixtla"},"OpenBB x Nixtla"),(0,i.kt)("p",null,"Back in August, Nixtla introduced the initial foundation generative AI model for temporal data at MindsDB. At that time, we received an invitation to showcase the practical applications of TimeGPT in production, and for the first time, we unveiled Terminal Pro briefly."),(0,i.kt)("p",null,"I detailed this experience in a ",(0,i.kt)("a",{parentName:"p",href:"https://openbb.co/blog/openbb-incorporates-the-first-generative-AI-model-for-temporal-data-timegpt"},"blog post")," and shared a similar demo during the event last week."),(0,i.kt)("video",{controls:!0},(0,i.kt)("source",{src:"https://openbb-cms.directus.app/assets/a8a391c9-33e8-4c6b-821c-620617d4fe33"})),(0,i.kt)("p",null,"Following that, Max and Azul from Nixtla proceeded to share a presentation where they used OpenBB data to assess price targets from analysts and develop an approach on how it is possible to reduce the bias inherent to price estimates and produce better estimates."),(0,i.kt)("h2",{id:"openbb-x-llamaindex"},"OpenBB x LlamaIndex"),(0,i.kt)("p",null,"Back in July, we initiated the development of AskOBB, enabling users to interact with the open source ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/OpenBB-finance/OpenBBTerminal"},"OpenBB Terminal")," using natural language. In this effort, we leveraged LlamaIndex and you can see more about it ",(0,i.kt)("a",{parentName:"p",href:"https://openbb.co/blog/breaking-barriers-with-openbb-and-llamaIndex"},"here"),"."),(0,i.kt)("p",null,"So when we started discussing an AI in Finance event, it only made sense to reach out to Jerry and Simon to invite their team to present at the event. And so we did. Jerry ended up presenting their ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/run-llama/sec-insights"},"open source SEC insights repo")," that uses the Retrieval Augmented Generation (RAG) capabilities of LlamaIndex to answer questions about SEC 10-K & 10-Q documents."),(0,i.kt)("p",null,"As for the OpenBB Terminal Pro, we demonstrated how we are using LlamaIndex to chat with documents that are uploaded to the OpenBB Terminal Pro. The video below highlights these features."),(0,i.kt)("video",{controls:!0},(0,i.kt)("source",{src:"https://openbb-cms.directus.app/assets/3c4190be-2676-4790-a59e-c33c6006a195"})),(0,i.kt)("h2",{id:"openbb-x-langchain"},"OpenBB x Langchain"),(0,i.kt)("p",null,"After attending the AI Engineering Summit event, specifically Harrison\u2019s workshop on how to get started with agents using Langchain, I felt inspired to create an agent on top of the OpenBB platform."),(0,i.kt)("p",null,"So that very day, I went home and started to work on ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/DidierRLopes/openbb-agents"},"this repo"),". By the end of the day, the agent was already able to perform complex queries."),(0,i.kt)("p",null,"Over time I iterated on it to make the agent more robust, but the improvement on the architecture started to happen after Michael joined OpenBB and he was able to focus on this full-time - the progress can be found on ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/OpenBB-finance/openbb-agents"},"this open source repo"),". An example of a prompt that the agent can answer is:"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},(0,i.kt)("em",{parentName:"p"},"Check what are TSLA peers. From those, check which one has the highest market cap. Then, on the ticker that has the highest market cap get the most recent price target estimate from an analyst, and tell me who it was and on what date the estimate was made."))),(0,i.kt)("br",null),(0,i.kt)("p",null,"So at the event, Harrison presented this architecture which heavily relies on Langchain and OpenBB tools."),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/04d6b023-b6ab-4fe6-8d5c-4a071731611a"})),(0,i.kt)("p",null,"Later on, I demonstrated how we can integrate this architecture into OpenBB Copilot and make it available from the OpenBB Terminal Pro."),(0,i.kt)("video",{controls:!0},(0,i.kt)("source",{src:"https://openbb-cms.directus.app/assets/a3c20953-ca08-4bdd-b7d5-93878edc7e07"})),(0,i.kt)("h2",{id:"wrap-up"},"Wrap up"),(0,i.kt)("p",null,"Finally, this was an amazing event organized by MindsDB and a team that put together 5 of the most prominent open-source companies working on problems at the intersection of AI and Finance."),(0,i.kt)("p",null,"You can rewatch the entire event here:"),(0,i.kt)("div",{className:"flex place-items-center justify-center items-center rounded-sm mx-auto"},(0,i.kt)("iframe",{src:"https://www.youtube.com/embed/V1rYmWWVbIY?si=25HUWPxjAB8sfUPx",width:"800",height:"400"})),(0,i.kt)("br",null),(0,i.kt)("p",null,"We're considering organizing another event like this soon, possibly even in NYC."),(0,i.kt)("p",null,"And if your firm is interested in early access to the OpenBB Terminal Pro, you can reach out to ",(0,i.kt)("a",{parentName:"p",href:"mailto:hello@openbb.finance"},"hello@openbb.finance"),", we\u2019d love to chat."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f06a1dfa.9a5c1a4b.js b/assets/js/f06a1dfa.9a5c1a4b.js new file mode 100644 index 0000000000..67cc977103 --- /dev/null +++ b/assets/js/f06a1dfa.9a5c1a4b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[30821],{59841:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/nixtla","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"This is where I drop my thoughts in the form of blogposts!","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/f32fe326.e1825c19.js b/assets/js/f32fe326.d29bef46.js similarity index 92% rename from assets/js/f32fe326.e1825c19.js rename to assets/js/f32fe326.d29bef46.js index 9d1d842817..af8bb1ced3 100644 --- a/assets/js/f32fe326.e1825c19.js +++ b/assets/js/f32fe326.d29bef46.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[8843],{44634:e=>{e.exports=JSON.parse('{"label":"ai","permalink":"/blog/tags/ai","allTagsPath":"/blog/tags","count":5}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[8843],{44634:e=>{e.exports=JSON.parse('{"label":"ai","permalink":"/blog/tags/ai","allTagsPath":"/blog/tags","count":6}')}}]); \ No newline at end of file diff --git a/assets/js/f4230d7a.17522c15.js b/assets/js/f4230d7a.17522c15.js new file mode 100644 index 0000000000..283610f844 --- /dev/null +++ b/assets/js/f4230d7a.17522c15.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[53059],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},b="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,c=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),b=s(n),h=i,m=b["".concat(c,".").concat(h)]||b[h]||p[h]||r;return n?a.createElement(m,l(l({ref:t},d),{},{components:n})):a.createElement(m,l({ref:t},d))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,l=new Array(r);l[0]=h;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o[b]="string"==typeof e?e:i,l[1]=o;for(var s=2;s{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>o,toc:()=>s});var a=n(87462),i=(n(67294),n(3905));const r={slug:"the-new-finai-tech-stack",title:"The new FinAI Tech Stack",date:new Date("2023-12-15T00:00:00.000Z"),image:"https://github.com/DidierRLopes/my-website/assets/25267873/8dfd85c1-c1c3-4d7b-bd38-ce777c8a8dd7",tags:["openbb","finance","ai","agents","langchain","llamaindex","mindsdb","nixtla"],description:'This blog post delves into how our collaboration with MindsDB, Nixtla, LlamaIndex, and Langchain is revolutionizing the financial world. Read on to learn all about the event "The New FinAI Tech Stack" held last week in SF, California.'},l=void 0,o={permalink:"/blog/the-new-finai-tech-stack",editUrl:"https://github.com/DidierRLopes/my-website/tree/main/blog/2023-12-15-the-new-finai-tech-stack.md",source:"@site/blog/2023-12-15-the-new-finai-tech-stack.md",title:"The new FinAI Tech Stack",description:'This blog post delves into how our collaboration with MindsDB, Nixtla, LlamaIndex, and Langchain is revolutionizing the financial world. Read on to learn all about the event "The New FinAI Tech Stack" held last week in SF, California.',date:"2023-12-15T00:00:00.000Z",formattedDate:"December 15, 2023",tags:[{label:"openbb",permalink:"/blog/tags/openbb"},{label:"finance",permalink:"/blog/tags/finance"},{label:"ai",permalink:"/blog/tags/ai"},{label:"agents",permalink:"/blog/tags/agents"},{label:"langchain",permalink:"/blog/tags/langchain"},{label:"llamaindex",permalink:"/blog/tags/llamaindex"},{label:"mindsdb",permalink:"/blog/tags/mindsdb"},{label:"nixtla",permalink:"/blog/tags/nixtla"}],readingTime:5.01,hasTruncateMarker:!0,authors:[],frontMatter:{slug:"the-new-finai-tech-stack",title:"The new FinAI Tech Stack",date:"2023-12-15T00:00:00.000Z",image:"https://github.com/DidierRLopes/my-website/assets/25267873/8dfd85c1-c1c3-4d7b-bd38-ce777c8a8dd7",tags:["openbb","finance","ai","agents","langchain","llamaindex","mindsdb","nixtla"],description:'This blog post delves into how our collaboration with MindsDB, Nixtla, LlamaIndex, and Langchain is revolutionizing the financial world. Read on to learn all about the event "The New FinAI Tech Stack" held last week in SF, California.'},nextItem:{title:"Goodbye OpenBB SDK. Hello OpenBB Platform",permalink:"/blog/goodbye-openbb-sdk-hello-openbb-platform"}},c={authorsImageUrls:[]},s=[],d={toc:s},b="wrapper";function p(e){let{components:t,...n}=e;return(0,i.kt)(b,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{width:"600",src:"https://github.com/DidierRLopes/my-website/assets/25267873/8dfd85c1-c1c3-4d7b-bd38-ce777c8a8dd7"})),(0,i.kt)("br",null),(0,i.kt)("p",null,'This blog post delves into how our collaboration with MindsDB, Nixtla, LlamaIndex, and Langchain is revolutionizing the financial world. Read on to learn all about the event "The New FinAI Tech Stack" held last week in SF, California.'))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.d3dca393.js b/assets/js/main.d3dca393.js new file mode 100644 index 0000000000..8dc5d10da1 --- /dev/null +++ b/assets/js/main.d3dca393.js @@ -0,0 +1,2 @@ +/*! For license information please see main.d3dca393.js.LICENSE.txt */ +(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[40179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var a=n(67294),o=n(87462),r=n(68356),i=n.n(r),l=n(16887);const s={"00a67df0":[()=>n.e(56711).then(n.t.bind(n,7532,19)),"~blog/default/blog-tags-achievements-1bb.json",7532],"00aed314":[()=>n.e(25626).then(n.t.bind(n,79304,19)),"~blog/default/blog-tags-openbb-d53.json",79304],"00dbd4fc":[()=>n.e(29079).then(n.t.bind(n,79609,19)),"~blog/default/blog-tags-llamaindex-dec-list.json",79609],"0100034d":[()=>n.e(70167).then(n.t.bind(n,75252,19)),"~blog/default/blog-tags-tech-startups-01c-list.json",75252],"01a85c17":[()=>Promise.all([n.e(40532),n.e(64013)]).then(n.bind(n,91223)),"@theme/BlogTagsListPage",91223],"0233f2de":[()=>n.e(84285).then(n.t.bind(n,59137,19)),"~blog/default/blog-tags-ll-ms-f3c-list.json",59137],"02e189ef":[()=>n.e(8599).then(n.bind(n,24179)),"@site/content/resume/articles.md",24179],"032c6a90":[()=>n.e(8900).then(n.bind(n,88311)),"@site/content/media/videos/product-videos.md",88311],"035affc9":[()=>n.e(62221).then(n.t.bind(n,2517,19)),"~blog/default/blog-tags-agents-3fc.json",2517],"0388bb3f":[()=>n.e(46728).then(n.t.bind(n,94850,19)),"~blog/default/blog-tags-tech-startups-01c.json",94850],"0409403d":[()=>n.e(70569).then(n.t.bind(n,87972,19)),"~blog/default/blog-tags-data-access-f56.json",87972],"0442e97f":[()=>n.e(85448).then(n.t.bind(n,48846,19)),"~blog/default/blog-tags-tattoo-773.json",48846],"04760125":[()=>n.e(21816).then(n.t.bind(n,24455,19)),"~blog/default/blog-tags-jupyter-lab-cca.json",24455],"053ad788":[()=>n.e(95607).then(n.bind(n,60253)),"@site/blog/2023-07-06-from-open-source-to-open-startup.md",60253],"073add18":[()=>n.e(29024).then(n.t.bind(n,23782,19)),"~blog/default/blog-tags-remote-work-694.json",23782],"07547e2d":[()=>n.e(83258).then(n.bind(n,11155)),"@site/blog/2021-09-04-time-series-crossvalidation-for-nn.md",11155],"0781b646":[()=>n.e(12808).then(n.t.bind(n,15199,19)),"~blog/default/blog-tags-neural-networks-b4a-list.json",15199],"079772f4":[()=>n.e(66325).then(n.t.bind(n,56765,19)),"~blog/default/blog-tags-financial-chatbot-d6d.json",56765],"07a5728a":[()=>n.e(77065).then(n.bind(n,54047)),"@site/blog/2022-04-09-how-i-created-the-best-discord-meme-bot.md",54047],"07c343de":[()=>n.e(23206).then(n.t.bind(n,64094,19)),"~blog/default/blog-tags-twitter-a07.json",64094],"0866c8af":[()=>n.e(92458).then(n.bind(n,9573)),"@site/blog/2022-08-14-how-i-became-ceo-of-openbb.md?truncated=true",9573],"08a5553c":[()=>n.e(73778).then(n.bind(n,10405)),"@site/blog/2022-10-01-why-you-should-drop-yfinance-api-and-adopt-openbb-sdk.md",10405],"09c11e20":[()=>n.e(69420).then(n.bind(n,60736)),"@site/blog/2022-05-03-remote-flexible-work-salary.md?truncated=true",60736],"0a40147c":[()=>n.e(8086).then(n.bind(n,9382)),"@site/blog/2023-05-25-streamline-your-openbb-terminal-experience-with-openbb-hub.md",9382],"0ab81c5e":[()=>n.e(17916).then(n.t.bind(n,49893,19)),"~blog/default/blog-tags-routines-4a5-list.json",49893],"0abe3c97":[()=>n.e(29962).then(n.t.bind(n,70701,19)),"~blog/default/blog-tags-automation-1d1-list.json",70701],"0acea628":[()=>n.e(6600).then(n.t.bind(n,12146,19)),"~blog/default/blog-tags-career-bc6-list.json",12146],"0bdde12f":[()=>n.e(13670).then(n.t.bind(n,28987,19)),"~blog/default/blog-tags-yfinance-api-77c.json",28987],"0be9de06":[()=>n.e(77222).then(n.t.bind(n,20390,19)),"~blog/default/blog-tags-api-ce2-list.json",20390],"0bef2d96":[()=>n.e(78010).then(n.t.bind(n,99130,19)),"~blog/default/blog-tags-a-players-919.json",99130],"0c1085e7":[()=>n.e(24406).then(n.t.bind(n,3028,19)),"~blog/default/blog-tags-flexible-hours-2df.json",3028],"0c6d312c":[()=>n.e(57492).then(n.t.bind(n,88672,19)),"~blog/default/blog-tags-chatbots-bb5-list.json",88672],"0cb4a04d":[()=>n.e(1486).then(n.t.bind(n,15078,19)),"~blog/default/blog-tags-team-survey-887-list.json",15078],"0cd4f5d4":[()=>n.e(17762).then(n.t.bind(n,21460,19)),"~blog/default/blog-tags-work-culture-a02-list.json",21460],"0cd94d12":[()=>n.e(25654).then(n.t.bind(n,36304,19)),"~blog/default/blog-tags-management-7f1-list.json",36304],"0d051cf7":[()=>n.e(99606).then(n.t.bind(n,95852,19)),"~blog/default/blog-tags-memory-palace-1ae-list.json",95852],"0ee50d86":[()=>n.e(23365).then(n.t.bind(n,47002,19)),"~blog/default/blog-tags-tattoo-773-list.json",47002],"0f67f583":[()=>n.e(38819).then(n.bind(n,63353)),"@site/blog/2021-07-23-minion-recipes-program.md",63353],"0fed717b":[()=>n.e(47694).then(n.bind(n,35109)),"@site/blog/2022-10-27-how-to-learn-10x-faster-than-average.md",35109],"10780f15":[()=>n.e(5438).then(n.t.bind(n,99086,19)),"~blog/default/blog-tags-nft-16a-list.json",99086],"10e7150b":[()=>n.e(58759).then(n.t.bind(n,38677,19)),"~blog/default/blog-tags-insights-605.json",38677],"10e786eb":[()=>n.e(85047).then(n.t.bind(n,35113,19)),"~blog/default/blog-tags-stock-management-791-list.json",35113],"10edd41d":[()=>n.e(49771).then(n.t.bind(n,2604,19)),"~blog/default/blog-tags-job-hunting-e0f.json",2604],"115bfe1c":[()=>n.e(36666).then(n.bind(n,1432)),"@site/blog/2021-08-15-ranking-99-mind-f-ck-movies.md",1432],"11d6c8d6":[()=>n.e(54734).then(n.t.bind(n,52172,19)),"~blog/default/blog-tags-reddit-a3d.json",52172],"12a166bf":[()=>n.e(1306).then(n.bind(n,92053)),"@site/blog/2023-01-02-firing-sucks-how-to-avoid-doing-so-by-hiring-a-players.md?truncated=true",92053],"12d81d30":[()=>n.e(89731).then(n.t.bind(n,67140,19)),"~blog/default/blog-tags-economy-f78-list.json",67140],"130b3d99":[()=>n.e(94064).then(n.t.bind(n,86750,19)),"~blog/default/blog-tags-open-bb-champion-0c6.json",86750],"13b1d8dc":[()=>n.e(35358).then(n.bind(n,96726)),"@site/blog/2023-06-10-become-an-openbb-champion.md",96726],"13c191f5":[()=>n.e(68050).then(n.t.bind(n,45880,19)),"~blog/default/blog-tags-free-ba0.json",45880],"13cb490a":[()=>n.e(74788).then(n.t.bind(n,27810,19)),"~blog/default/blog-tags-openbb-d53-list.json",27810],"13e19468":[()=>n.e(87971).then(n.t.bind(n,65593,19)),"~blog/default/blog-tags-algorithm-305-list.json",65593],"141abcff":[()=>n.e(44680).then(n.t.bind(n,8444,19)),"~blog/default/blog-tags-office-work-fdf-list.json",8444],"145eba89":[()=>n.e(61907).then(n.t.bind(n,15519,19)),"~blog/default/blog-tags-neural-networks-b4a.json",15519],"15f6f90b":[()=>n.e(17990).then(n.t.bind(n,90070,19)),"~blog/default/blog-tags-teamwork-22b.json",90070],16730262:[()=>n.e(60855).then(n.t.bind(n,1289,19)),"~blog/default/blog-tags-giveaways-5ec.json",1289],"169ddf6c":[()=>n.e(14152).then(n.t.bind(n,54188,19)),"~blog/default/blog-tags-financial-world-806-list.json",54188],"170d6c86":[()=>n.e(42839).then(n.t.bind(n,56832,19)),"~blog/default/blog-tags-roadmap-d2e.json",56832],17896441:[()=>Promise.all([n.e(40532),n.e(21506),n.e(27918)]).then(n.bind(n,78945)),"@theme/DocItem",78945],"17b5b124":[()=>n.e(3511).then(n.bind(n,68586)),"@site/blog/2023-04-03-the-role-of-ai-and-openbb-in-the-future-of-investment-research.md",68586],"18df502f":[()=>n.e(20648).then(n.t.bind(n,44825,19)),"~blog/default/blog-tags-web-scraping-44d.json",44825],"19df597c":[()=>n.e(77839).then(n.t.bind(n,76180,19)),"~blog/default/blog-tags-clustering-e68-list.json",76180],"1a2beda9":[()=>n.e(83627).then(n.t.bind(n,23146,19)),"~blog/default/blog-tags-hybrid-work-080-list.json",23146],"1aba350e":[()=>n.e(50039).then(n.t.bind(n,82629,19)),"~blog/default/blog-tags-equity-9f1-list.json",82629],"1bd5f201":[()=>n.e(87024).then(n.t.bind(n,2899,19)),"~blog/default/blog-tags-writing-3af.json",2899],"1be78505":[()=>Promise.all([n.e(40532),n.e(29514)]).then(n.bind(n,19963)),"@theme/DocPage",19963],"1c9bb21f":[()=>n.e(99272).then(n.t.bind(n,58117,19)),"~blog/default/blog-tags-trading-9c9.json",58117],"1caf3a45":[()=>n.e(65885).then(n.bind(n,232)),"@site/blog/2023-11-07-revolutionizing-ai-at-openbb-with-new-leader-michael-struwig.md",232],"1d75a828":[()=>n.e(33952).then(n.bind(n,47423)),"@site/blog/2021-06-12-customizable-meme-filter.md",47423],"1f2f70e2":[()=>n.e(28086).then(n.t.bind(n,20245,19)),"~blog/default/blog-tags-k-means-9b3.json",20245],"1f391b9e":[()=>Promise.all([n.e(40532),n.e(21506),n.e(13085)]).then(n.bind(n,14247)),"@theme/MDXPage",14247],"1f864e22":[()=>n.e(74587).then(n.t.bind(n,34480,19)),"~blog/default/blog-tags-giveaways-5ec-list.json",34480],"20dd50c3":[()=>n.e(49624).then(n.t.bind(n,95532,19)),"~blog/default/blog-tags-open-bb-hub-7cf.json",95532],"215540ae":[()=>n.e(83808).then(n.t.bind(n,83672,19)),"~blog/default/blog-tags-developer-c5c.json",83672],"2160154a":[()=>n.e(38735).then(n.bind(n,87007)),"@site/content/projects.md",87007],"2160ba7c":[()=>n.e(35890).then(n.bind(n,17802)),"@site/blog/2023-01-22-how-to-get-hired-by-an-exciting-tech-startup-in-2023.md",17802],"216e7dc3":[()=>n.e(95436).then(n.t.bind(n,98075,19)),"~blog/default/blog-tags-scriptable-c0f.json",98075],"21d47e5f":[()=>n.e(10243).then(n.bind(n,89832)),"@site/blog/2021-03-14-gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal.md?truncated=true",89832],"221ac18b":[()=>n.e(59594).then(n.t.bind(n,93924,19)),"~blog/default/blog-tags-research-9e0.json",93924],"22a088b5":[()=>n.e(73817).then(n.t.bind(n,15983,19)),"~blog/default/blog-tags-icmla-ea2.json",15983],"232c92ba":[()=>n.e(16974).then(n.t.bind(n,12725,19)),"~blog/default/blog-tags-python-667.json",12725],"23a8b4e5":[()=>n.e(60503).then(n.t.bind(n,12162,19)),"~blog/default/blog-tags-telegram-9a4.json",12162],"23b3d711":[()=>n.e(7752).then(n.t.bind(n,85757,19)),"~blog/default/blog-tags-ap-is-a3c-list.json",85757],"2455c74e":[()=>n.e(40214).then(n.t.bind(n,64691,19)),"~blog/default/blog-tags-git-hub-bf3-list.json",64691],"24eace32":[()=>n.e(33618).then(n.bind(n,6812)),"@site/blog/2023-11-07-revolutionizing-ai-at-openbb-with-new-leader-michael-struwig.md?truncated=true",6812],"251ba405":[()=>n.e(22546).then(n.bind(n,56855)),"@site/blog/2023-10-14-a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data.md",56855],"25381ddc":[()=>n.e(47380).then(n.t.bind(n,83115,19)),"~blog/default/blog-tags-smart-contracts-7eb.json",83115],25750738:[()=>n.e(55866).then(n.bind(n,53312)),"@site/blog/2023-10-19-building-the-worlds-investment-research-infrastructure.md",53312],"25c37f27":[()=>n.e(19136).then(n.t.bind(n,29754,19)),"~blog/default/blog-tags-metrics-ad9-list.json",29754],"25db3e58":[()=>n.e(55810).then(n.t.bind(n,38007,19)),"~blog/default/blog-tags-terminal-1f8-list.json",38007],26419218:[()=>n.e(62865).then(n.t.bind(n,52770,19)),"~blog/default/blog-tags-platform-9d7-list.json",52770],27493920:[()=>n.e(71454).then(n.t.bind(n,11621,19)),"~blog/default/blog-tags-time-series-forecasting-03d-list.json",11621],27888648:[()=>n.e(12751).then(n.bind(n,21278)),"@site/blog/2022-06-28-web3-symbols-and-community.md",21278],"2864074a":[()=>n.e(36681).then(n.t.bind(n,87336,19)),"~blog/default/blog-tags-scriptable-c0f-list.json",87336],"296842a4":[()=>n.e(11556).then(n.t.bind(n,19282,19)),"~blog/default/blog-tags-stock-market-fe6-list.json",19282],"29c7035d":[()=>n.e(26651).then(n.t.bind(n,33714,19)),"~blog/default/blog-tags-crypto-03d-list.json",33714],"29ffbd12":[()=>n.e(64796).then(n.bind(n,64817)),"@site/content/resume/experience.md",64817],"2a1564a5":[()=>n.e(32810).then(n.t.bind(n,53238,19)),"~blog/default/blog-tags-momentum-5c3.json",53238],"2a4fe260":[()=>n.e(85300).then(n.t.bind(n,53011,19)),"~blog/default/blog-tags-im-db-py-990-list.json",53011],"2a8c53bc":[()=>n.e(28047).then(n.bind(n,41208)),"@site/blog/2023-11-29-goodbye-openbb-sdk-hello-openbb-platform.md",41208],"2c960943":[()=>n.e(20069).then(n.bind(n,14855)),"@site/blog/2023-10-29-writing-documentation-as-a-founder-is-underrated.md",14855],"2caf4b24":[()=>n.e(98697).then(n.t.bind(n,97315,19)),"~blog/default/blog-tags-image-processing-a34-list.json",97315],"2cf18b1c":[()=>n.e(25343).then(n.t.bind(n,24469,19)),"/home/runner/work/my-website/my-website/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",24469],"2d26abf7":[()=>n.e(87691).then(n.t.bind(n,72349,19)),"~blog/default/blog-tags-cv-75f.json",72349],"2d337ce0":[()=>n.e(11076).then(n.t.bind(n,76699,19)),"~blog/default/blog-tags-face-recognition-ded-list.json",76699],"2d40d905":[()=>n.e(96100).then(n.bind(n,43146)),"@site/blog/2023-11-29-goodbye-openbb-sdk-hello-openbb-platform.md?truncated=true",43146],"2da4e7c3":[()=>n.e(67821).then(n.t.bind(n,66475,19)),"~blog/default/blog-tags-growth-6e0-list.json",66475],"2dcc07ff":[()=>n.e(19771).then(n.t.bind(n,87133,19)),"~blog/default/blog-tags-startup-team-813.json",87133],"2debd27e":[()=>n.e(86714).then(n.t.bind(n,18338,19)),"~blog/default/blog-tags-neist-point-e11-list.json",18338],"2e1767e2":[()=>n.e(78881).then(n.bind(n,63241)),"@site/blog/2022-04-21-looking-for-a-new-tattoo-openbb-has-you-covered-literally.md",63241],"2f43b7b8":[()=>n.e(9344).then(n.t.bind(n,69588,19)),"~blog/default/blog-tags-free-ba0-list.json",69588],"2f57d63e":[()=>n.e(23259).then(n.t.bind(n,96235,19)),"~blog/default/blog-tags-data-customization-507.json",96235],"305f3e9d":[()=>n.e(35298).then(n.t.bind(n,92386,19)),"~blog/default/blog-tags-ux-ui-53f-list.json",92386],"30eca080":[()=>n.e(5552).then(n.t.bind(n,55257,19)),"~blog/default/blog-tags-office-work-fdf.json",55257],"320c7936":[()=>n.e(8491).then(n.t.bind(n,95179,19)),"~blog/default/blog-tags-open-bb-bot-6de.json",95179],"330d433a":[()=>n.e(5051).then(n.t.bind(n,77305,19)),"~blog/default/blog-tags-academia-4b3-list.json",77305],"33415a2a":[()=>n.e(64331).then(n.bind(n,24702)),"@site/blog/2021-07-17-household-bills-program.md?truncated=true",24702],"3375099c":[()=>n.e(17199).then(n.bind(n,70665)),"@site/blog/2022-10-01-why-you-should-drop-yfinance-api-and-adopt-openbb-sdk.md?truncated=true",70665],"33d935e4":[()=>n.e(23523).then(n.t.bind(n,81471,19)),"~blog/default/blog-tags-roadmap-d2e-list.json",81471],"35a73669":[()=>n.e(48734).then(n.t.bind(n,45983,19)),"~blog/default/blog-tags-sector-analysis-b64-list.json",45983],"36ff22a4":[()=>n.e(93880).then(n.t.bind(n,19891,19)),"~blog/default/blog-tags-bcg-matrix-9ae-list.json",19891],"37178c25":[()=>n.e(79858).then(n.t.bind(n,30676,19)),"~blog/default/blog-tags-web-3-e2d-list.json",30676],"379b36d6":[()=>n.e(10530).then(n.t.bind(n,96231,19)),"~blog/default/blog-tags-work-life-balance-b75-list.json",96231],"37b74aca":[()=>n.e(25077).then(n.t.bind(n,4958,19)),"~blog/default/blog-tags-c-d8e.json",4958],"38175b89":[()=>n.e(8477).then(n.t.bind(n,59229,19)),"~blog/default/blog-tags-brand-awareness-7b7-list.json",59229],"383bc53e":[()=>n.e(87998).then(n.t.bind(n,63108,19)),"~blog/default/blog-tags-market-attractiveness-45c.json",63108],"38f00f86":[()=>n.e(39667).then(n.t.bind(n,22686,19)),"~blog/default/blog-tags-documentation-944.json",22686],"393be207":[()=>n.e(87414).then(n.bind(n,53123)),"@site/src/pages/markdown-page.md",53123],"393d708a":[()=>n.e(72323).then(n.t.bind(n,15605,19)),"~blog/default/blog-tags-equity-9f1.json",15605],"3989febe":[()=>n.e(53922).then(n.t.bind(n,21826,19)),"~blog/default/blog-tags-career-bc6.json",21826],"39a63f64":[()=>n.e(18614).then(n.bind(n,93666)),"@site/content/media/news-mentions.md",93666],"3b7a3d14":[()=>n.e(22098).then(n.t.bind(n,75448,19)),"~blog/default/blog-tags-developer-c5c-list.json",75448],"3badba1b":[()=>n.e(10960).then(n.t.bind(n,39269,19)),"~blog/default/blog-tags-open-bb-fdf-list.json",39269],"3bbd9f4f":[()=>n.e(58018).then(n.t.bind(n,18384,19)),"~blog/default/blog-tags-clustering-e68.json",18384],"3bd53e6d":[()=>n.e(89242).then(n.bind(n,29272)),"@site/blog/2022-10-23-how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds.md",29272],"3c4ce6be":[()=>n.e(84960).then(n.t.bind(n,15527,19)),"~blog/default/blog-tags-community-building-af1-list.json",15527],"3c53da91":[()=>n.e(22178).then(n.t.bind(n,11229,19)),"~blog/default/blog-tags-airtable-391-list.json",11229],"3d96bea9":[()=>n.e(91271).then(n.bind(n,16270)),"@site/blog/2021-04-07-momentum-football-bets.md?truncated=true",16270],"3dff2ef6":[()=>n.e(50017).then(n.t.bind(n,72528,19)),"~blog/default/blog-tags-slack-bot-5a3-list.json",72528],"3e580665":[()=>n.e(38577).then(n.bind(n,88423)),"@site/blog/2023-09-16-work-life-balance-is-bullsh-t.md?truncated=true",88423],"3f034b76":[()=>n.e(35214).then(n.bind(n,18430)),"@site/blog/2021-10-22-an-unusual-journey-learning-about-nns-for-a-phd-thesis.md",18430],"3f3eb939":[()=>n.e(32507).then(n.t.bind(n,81930,19)),"~blog/default/blog-tags-employee-compensation-7c8.json",81930],"3fc8051c":[()=>n.e(74643).then(n.t.bind(n,96305,19)),"~blog/default/blog-tags-productivity-e58-list.json",96305],"3fdd9617":[()=>n.e(23338).then(n.t.bind(n,64383,19)),"~blog/default/blog-tags-nurvv-run-0f0.json",64383],"40cac7f3":[()=>n.e(48237).then(n.t.bind(n,48506,19)),"~blog/default/blog-tags-visa-process-7af.json",48506],"412b14f9":[()=>n.e(46714).then(n.bind(n,40658)),"@site/blog/2022-12-04-the-future-of-finance-with-open-source-and-ai.md",40658],"4160110b":[()=>n.e(96077).then(n.t.bind(n,79444,19)),"~blog/default/blog-tags-transparency-c0d.json",79444],"417b431b":[()=>n.e(37496).then(n.bind(n,87177)),"@site/content/media/videos/on-stage.md",87177],"427aba3f":[()=>n.e(61886).then(n.bind(n,85742)),"@site/blog/2022-11-14-5-steps-i-used-to-change-my-job-title-in-less-than-1-year.md",85742],"42e3643e":[()=>n.e(96228).then(n.bind(n,97153)),"@site/blog/2023-08-20-openbb-2-year-anniversary.md",97153],"43b94f2f":[()=>n.e(65415).then(n.t.bind(n,32747,19)),"~blog/default/blog-tags-founder-e18.json",32747],"4413cec9":[()=>n.e(99066).then(n.t.bind(n,91801,19)),"~blog/default/blog-tags-software-development-e7e.json",91801],"4430b5a3":[()=>n.e(23188).then(n.t.bind(n,37853,19)),"~blog/default/blog-tags-sweepstake-178.json",37853],"448c2acc":[()=>n.e(95423).then(n.t.bind(n,93894,19)),"~blog/default/blog-tags-programming-1aa-list.json",93894],"44d5fcf1":[()=>n.e(46169).then(n.t.bind(n,68596,19)),"~blog/default/blog-tags-airtable-391.json",68596],"451d2a62":[()=>n.e(37999).then(n.t.bind(n,98931,19)),"~blog/default/blog-tags-time-series-b89-list.json",98931],45464253:[()=>n.e(87903).then(n.t.bind(n,49421,19)),"~blog/default/blog-tags-neist-point-e11.json",49421],"456c95e2":[()=>n.e(24708).then(n.t.bind(n,91712,19)),"~blog/default/blog-tags-marketing-06c.json",91712],45700526:[()=>n.e(59559).then(n.t.bind(n,49471,19)),"~blog/default/blog-tags-deep-learning-776.json",49471],"461f54df":[()=>n.e(24393).then(n.t.bind(n,34073,19)),"~blog/default/blog-tags-job-hunting-e0f-list.json",34073],"46624e97":[()=>n.e(77905).then(n.bind(n,14079)),"@site/blog/2023-09-10-target-market-analysis-with-the-help-of-llms.md?truncated=true",14079],"468416a0":[()=>n.e(75614).then(n.t.bind(n,49557,19)),"~blog/default/blog-tags-blockchain-bb4.json",49557],"46f75a79":[()=>n.e(85195).then(n.t.bind(n,19097,19)),"~blog/default/blog-tags-career-advice-11b-list.json",19097],"46f8efbb":[()=>n.e(64516).then(n.t.bind(n,29169,19)),"~blog/default/blog-tags-sorting-algorithm-5e2-list.json",29169],"46fb6a63":[()=>n.e(27156).then(n.bind(n,44402)),"@site/blog/2022-12-07-how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla.md",44402],"4767f4a4":[()=>n.e(30324).then(n.t.bind(n,17149,19)),"~blog/default/blog-tags-startup-25b.json",17149],"4852a0fa":[()=>n.e(92804).then(n.bind(n,2497)),"@site/blog/2023-07-29-keep-track-of-your-startup-metrics-using-a-custom-ios-widget.md",2497],"491571ad":[()=>n.e(37718).then(n.t.bind(n,47766,19)),"~blog/default/blog-tags-financial-chatbot-d6d-list.json",47766],"4b1f0638":[()=>n.e(87717).then(n.bind(n,73687)),"@site/blog/2021-11-07-the-start-of-my-machine-learning-journey.md",73687],"4b6a51b3":[()=>n.e(99973).then(n.t.bind(n,68250,19)),"~blog/default/blog-tags-job-change-eb8-list.json",68250],"4bd5fd33":[()=>n.e(56560).then(n.t.bind(n,20404,19)),"~blog/default/blog-tags-automation-1d1.json",20404],"4bf10279":[()=>n.e(749).then(n.bind(n,45404)),"@site/blog/2023-05-20-openbb-terminal-3-0-a-new-interactive-way-to-analyze-data.md",45404],"4ca8d271":[()=>n.e(43830).then(n.bind(n,59905)),"@site/blog/2021-05-23-neistpoint-project.md",59905],"4dbf0b0c":[()=>n.e(65843).then(n.bind(n,82613)),"@site/blog/2022-11-29-bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released.md?truncated=true",82613],"4dfe3729":[()=>n.e(91424).then(n.t.bind(n,66714,19)),"~blog/default/blog-tags-due-diligence-231-list.json",66714],"4e89f76c":[()=>n.e(34442).then(n.t.bind(n,31929,19)),"~blog/default/blog-tags-economy-f78.json",31929],"4ea68dde":[()=>n.e(86585).then(n.t.bind(n,57103,19)),"~blog/default/blog-tags-investment-research-d3f.json",57103],"4fcd1e94":[()=>n.e(864).then(n.t.bind(n,60180,19)),"~blog/default/blog-tags-competitive-advantage-eca-list.json",60180],"501029f4":[()=>n.e(11789).then(n.t.bind(n,24129,19)),"~blog/default/blog-tags-finance-714-list.json",24129],"50cca531":[()=>n.e(84145).then(n.t.bind(n,47671,19)),"~blog/default/blog-tags-hard-work-392-list.json",47671],"514fdeac":[()=>n.e(41552).then(n.t.bind(n,83769,19)),"/home/runner/work/my-website/my-website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",83769],"515d1338":[()=>n.e(53037).then(n.t.bind(n,8289,19)),"~blog/default/blog-tags-interactive-tables-d46.json",8289],"51e4ac6f":[()=>n.e(89169).then(n.t.bind(n,37736,19)),"~blog/default/blog-tags-open-source-6de.json",37736],"52301e28":[()=>n.e(53032).then(n.bind(n,97959)),"@site/blog/2022-04-09-how-i-created-the-best-discord-meme-bot.md?truncated=true",97959],"5273923c":[()=>n.e(12166).then(n.bind(n,9116)),"@site/content/media/videos/openbb-champions.md",9116],"527cec1a":[()=>n.e(23493).then(n.t.bind(n,58917,19)),"~blog/default/blog-tags-open-ai-a9c.json",58917],52886465:[()=>n.e(9177).then(n.t.bind(n,99780,19)),"~blog/default/blog-tags-decentralization-205-list.json",99780],52961045:[()=>n.e(36189).then(n.t.bind(n,18440,19)),"~blog/default/blog-tags-terminal-1f8.json",18440],"529770af":[()=>n.e(49745).then(n.t.bind(n,60294,19)),"~blog/default/blog-tags-bcg-matrix-9ae.json",60294],"52e27b65":[()=>n.e(18433).then(n.t.bind(n,50155,19)),"~blog/default/blog-tags-tweepy-d1d.json",50155],"5314b0bd":[()=>n.e(48685).then(n.t.bind(n,35453,19)),"~blog/default/blog-tags-skills-348.json",35453],"53e23032":[()=>n.e(52897).then(n.t.bind(n,74452,19)),"~blog/default/blog-tags-investment-208-list.json",74452],"546bb038":[()=>n.e(6793).then(n.bind(n,65598)),"@site/blog/2022-01-06-gamestonk-terminal-ux-features.md?truncated=true",65598],"558dd559":[()=>n.e(3334).then(n.t.bind(n,17141,19)),"~blog/default/blog-tags-team-happiness-c22-list.json",17141],"55f89d3b":[()=>n.e(31064).then(n.bind(n,46188)),"@site/content/resume/education.md",46188],"567dd020":[()=>n.e(66581).then(n.t.bind(n,8854,19)),"~blog/default/blog-tags-data-licensing-648-list.json",8854],"56c42734":[()=>n.e(42358).then(n.t.bind(n,8882,19)),"~blog/default/blog-tags-llamaindex-dec.json",8882],"56f5c6f4":[()=>n.e(56645).then(n.bind(n,75307)),"@site/blog/2021-08-01-k-means-clustering-to-visit-a-new-city.md?truncated=true",75307],"570cd539":[()=>n.e(44036).then(n.t.bind(n,88055,19)),"~blog/default/blog-tags-open-bb-fdf.json",88055],"571a81cb":[()=>n.e(56103).then(n.t.bind(n,53435,19)),"~blog/default/blog-tags-cross-validation-113.json",53435],"57210b0a":[()=>n.e(85924).then(n.t.bind(n,43173,19)),"~blog/default/blog-tags-product-documentation-303.json",43173],"57b50023":[()=>n.e(87162).then(n.t.bind(n,76352,19)),"~blog/default/blog-tags-twitter-a07-list.json",76352],"57d1551a":[()=>n.e(81940).then(n.bind(n,44738)),"@site/blog/2023-05-13-leaving-london-to-live-in-san-francisco.md",44738],"57e26750":[()=>n.e(13920).then(n.t.bind(n,11951,19)),"~blog/default/blog-tags-skills-348-list.json",11951],"581493b4":[()=>n.e(45298).then(n.t.bind(n,88959,19)),"~blog/default/blog-tags-mindsdb-df6.json",88959],"58ffe66a":[()=>n.e(24032).then(n.t.bind(n,38160,19)),"~blog/default/blog-tags-self-learning-08f-list.json",38160],"59151ec8":[()=>n.e(80918).then(n.t.bind(n,50473,19)),"~blog/default/blog-tags-personalization-bd7-list.json",50473],"5a750047":[()=>n.e(74123).then(n.t.bind(n,17455,19)),"~blog/default/blog-tags-algorithm-305.json",17455],"5ae98501":[()=>n.e(90091).then(n.t.bind(n,6133,19)),"~blog/default/blog-tags-financial-data-c3d-list.json",6133],"5b2aa33a":[()=>n.e(6013).then(n.bind(n,94558)),"@site/blog/2023-05-25-streamline-your-openbb-terminal-experience-with-openbb-hub.md?truncated=true",94558],"5b8d78cc":[()=>n.e(87582).then(n.t.bind(n,89921,19)),"~blog/default/blog-tags-due-diligence-231.json",89921],"5c220ca7":[()=>n.e(88399).then(n.t.bind(n,48430,19)),"~blog/default/blog-tags-market-attractiveness-45c-list.json",48430],"5cae59a0":[()=>n.e(10215).then(n.t.bind(n,63171,19)),"~blog/default/blog-tags-academia-4b3.json",63171],"5cb8142e":[()=>n.e(96982).then(n.t.bind(n,46663,19)),"~blog/default/blog-tags-ge-mc-kinsey-matrix-952.json",46663],"5d1335f2":[()=>n.e(73208).then(n.bind(n,53961)),"@site/blog/2023-05-05-free-investment-research-ecosystem-to-consistently-beat-the-market.md",53961],"5d354f88":[()=>n.e(74389).then(n.t.bind(n,3883,19)),"~blog/default/blog-tags-hard-work-392.json",3883],"5dab4123":[()=>n.e(41907).then(n.t.bind(n,1606,19)),"~blog/default/blog-tags-team-building-e74-list.json",1606],"5dc53f40":[()=>n.e(99737).then(n.t.bind(n,95197,19)),"~blog/default/blog-tags-open-startup-21d.json",95197],"5e30777a":[()=>n.e(42854).then(n.t.bind(n,64478,19)),"~blog/default/blog-tags-twitter-api-964.json",64478],"5e3e93c3":[()=>n.e(32887).then(n.t.bind(n,19966,19)),"~blog/default/blog-tags-i-os-a11-list.json",19966],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,36809)),"@generated/docusaurus.config",36809],"5f036ecf":[()=>n.e(81861).then(n.t.bind(n,33944,19)),"~blog/default/blog-tags-meme-bot-950.json",33944],"5f152eee":[()=>n.e(24734).then(n.bind(n,15927)),"@site/blog/2021-12-02-sector-and-industry-analysis-gamestonk-terminal.md",15927],"5f186933":[()=>n.e(34081).then(n.t.bind(n,31165,19)),"~blog/default/blog-tags-finance-database-62f.json",31165],"5fcc37c8":[()=>n.e(30930).then(n.t.bind(n,7761,19)),"~blog/default/blog-tags-data-science-578.json",7761],"5fd56a35":[()=>n.e(62171).then(n.t.bind(n,59452,19)),"~blog/default/blog-tags-project-management-4b8-list.json",59452],"601e0991":[()=>n.e(8202).then(n.t.bind(n,15745,19)),"/home/runner/work/my-website/my-website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",15745],"6068a052":[()=>n.e(35850).then(n.t.bind(n,23405,19)),"~blog/default/blog-tags-data-science-578-list.json",23405],"60bb4184":[()=>n.e(71094).then(n.t.bind(n,12571,19)),"~blog/default/blog-tags-data-analysis-e09-list.json",12571],"60ca72a5":[()=>n.e(49863).then(n.t.bind(n,65657,19)),"~blog/default/blog-tags-nixtla-d7d.json",65657],"61fd1e93":[()=>n.e(71648).then(n.t.bind(n,82476,19)),"~blog/default/blog-tags-software-development-e7e-list.json",82476],"62a034aa":[()=>n.e(9140).then(n.t.bind(n,54312,19)),"~blog/default/blog-tags-decentralization-205.json",54312],"62e47b47":[()=>n.e(28296).then(n.t.bind(n,97401,19)),"~blog/default/blog-tags-community-building-af1.json",97401],"62f383f5":[()=>n.e(58711).then(n.t.bind(n,74358,19)),"~blog/default/blog-tags-hugo-website-7bc-list.json",74358],"63cd58f7":[()=>n.e(590).then(n.t.bind(n,88373,19)),"~blog/default/blog-tags-ux-ui-53f.json",88373],"640a18d2":[()=>n.e(65838).then(n.bind(n,32595)),"@site/blog/2021-09-04-time-series-crossvalidation-for-nn.md?truncated=true",32595],"6413fb38":[()=>n.e(61627).then(n.t.bind(n,3878,19)),"~blog/default/blog-tags-silicon-valley-533-list.json",3878],"64297d8a":[()=>n.e(95898).then(n.bind(n,85162)),"@site/blog/2023-07-06-from-open-source-to-open-startup.md?truncated=true",85162],"643c173a":[()=>n.e(11570).then(n.t.bind(n,95406,19)),"~blog/default/blog-tags-learning-22f-list.json",95406],"64ebdf9c":[()=>n.e(83684).then(n.t.bind(n,62194,19)),"~blog/default/blog-tags-k-means-9b3-list.json",62194],"6502c807":[()=>n.e(51417).then(n.t.bind(n,85766,19)),"~blog/default/blog-tags-langchain-595-list.json",85766],"6544ebd5":[()=>n.e(78334).then(n.t.bind(n,18937,19)),"~blog/default/blog-tags-trading-9c9-list.json",18937],"657d6a61":[()=>n.e(55536).then(n.t.bind(n,81715,19)),"~blog/default/blog-tags-pypi-334-list.json",81715],"65c2e1a1":[()=>n.e(59188).then(n.t.bind(n,87103,19)),"~blog/default/blog-tags-work-culture-a02.json",87103],"66470f73":[()=>n.e(30003).then(n.bind(n,12769)),"@site/blog/2022-01-06-gamestonk-terminal-ux-features.md",12769],"66dd2b58":[()=>n.e(48864).then(n.t.bind(n,98749,19)),"~blog/default/blog-tags-ge-mc-kinsey-matrix-952-list.json",98749],"6756f682":[()=>n.e(14375).then(n.t.bind(n,64390,19)),"~blog/default/blog-tags-startups-d4c-list.json",64390],"6875c492":[()=>Promise.all([n.e(40532),n.e(21506),n.e(2529),n.e(48610)]).then(n.bind(n,41714)),"@theme/BlogTagsPostsPage",41714],"698977f9":[()=>n.e(29918).then(n.t.bind(n,91316,19)),"~blog/default/blog-tags-yfinance-api-77c-list.json",91316],"69b09ea9":[()=>n.e(40498).then(n.t.bind(n,22332,19)),"~blog/default/blog-tags-community-d90.json",22332],"69c725f9":[()=>n.e(74106).then(n.t.bind(n,28260,19)),"~blog/default/blog-tags-competitive-advantage-eca.json",28260],"69f684f5":[()=>n.e(17261).then(n.t.bind(n,13911,19)),"~blog/default/blog-tags-silicon-valley-533.json",13911],"69fb7f92":[()=>n.e(82606).then(n.t.bind(n,98130,19)),"~blog/default/blog-tags-self-learning-08f.json",98130],"6a1e7a63":[()=>n.e(39730).then(n.t.bind(n,63028,19)),"~blog/default/blog-tags-success-0ea-list.json",63028],"6a3809a9":[()=>n.e(1666).then(n.t.bind(n,76759,19)),"~blog/default/blog-tags-web-3-e2d.json",76759],"6a48742c":[()=>n.e(1106).then(n.bind(n,39218)),"@site/blog/2022-05-03-remote-flexible-work-salary.md",39218],"6b31a0c2":[()=>n.e(3736).then(n.t.bind(n,79827,19)),"~blog/default/blog-tags-product-documentation-303-list.json",79827],"6bb41b40":[()=>n.e(93838).then(n.bind(n,60067)),"@site/src/pages/404.js",60067],"6bcccc82":[()=>n.e(79287).then(n.t.bind(n,25465,19)),"~blog/default/blog-tags-darkpool-8e2.json",25465],"6c9aa8f1":[()=>n.e(39687).then(n.t.bind(n,96864,19)),"~blog/default/blog-tags-success-0ea.json",96864],"6cbe38e3":[()=>n.e(71350).then(n.t.bind(n,31607,19)),"~blog/default/blog-tags-agents-3fc-list.json",31607],"6d453d64":[()=>n.e(69287).then(n.t.bind(n,70794,19)),"~blog/default/blog-tags-api-ce2.json",70794],"6d8135ec":[()=>n.e(82630).then(n.t.bind(n,1186,19)),"~blog/default/blog-tags-marketing-06c-list.json",1186],"6d8c3396":[()=>n.e(73879).then(n.t.bind(n,89489,19)),"~blog/default/blog-tags-ph-d-thesis-ca3.json",89489],"6ed75358":[()=>n.e(85274).then(n.t.bind(n,9400,19)),"~blog/default/blog-tags-transparency-c0d-list.json",9400],"6f7cd21d":[()=>n.e(70827).then(n.t.bind(n,49490,19)),"~blog/default/blog-tags-smart-contracts-7eb-list.json",49490],"70a999c1":[()=>n.e(90805).then(n.t.bind(n,16544,19)),"~blog/default/blog-tags-startup-team-813-list.json",16544],"70ad3ff0":[()=>n.e(90147).then(n.t.bind(n,13478,19)),"~blog/default/blog-tags-blockchain-bb4-list.json",13478],"70eae3d8":[()=>n.e(21744).then(n.bind(n,16747)),"@site/blog/2023-08-20-openbb-2-year-anniversary.md?truncated=true",16747],"71a10111":[()=>n.e(95486).then(n.t.bind(n,84656,19)),"~blog/default/blog-tags-future-8ee.json",84656],"71a9fa5e":[()=>n.e(15695).then(n.t.bind(n,87861,19)),"~blog/default/blog-tags-gamestonk-terminal-b96.json",87861],"71e0d24e":[()=>n.e(39603).then(n.t.bind(n,11809,19)),"~blog/default/blog-tags-bot-72a.json",11809],"729a35c9":[()=>n.e(31394).then(n.t.bind(n,19783,19)),"~blog/default/blog-tags-finance-714.json",19783],"72df9df6":[()=>n.e(94787).then(n.t.bind(n,84490,19)),"~blog/default/blog-tags-darkpool-8e2-list.json",84490],"7336a190":[()=>n.e(21818).then(n.bind(n,5214)),"@site/blog/2023-11-21-openbb-bot-our-new-addition-to-the-openbb-open-source-family.md",5214],"739621a9":[()=>n.e(62873).then(n.t.bind(n,39355,19)),"~blog/default/blog-tags-jupyter-lab-cca-list.json",39355],"756bbf91":[()=>n.e(113).then(n.t.bind(n,70589,19)),"~blog/default/blog-tags-sector-analysis-b64.json",70589],"762fc16a":[()=>n.e(67217).then(n.t.bind(n,67409,19)),"~blog/default/blog-tags-clothing-brand-738.json",67409],"76e73539":[()=>n.e(79240).then(n.t.bind(n,68460,19)),"~blog/default/blog-tags-open-startup-21d-list.json",68460],"771ceeaa":[()=>n.e(67906).then(n.t.bind(n,71065,19)),"~blog/default/blog-tags-stocks-1dd-list.json",71065],"77dc2345":[()=>n.e(34827).then(n.bind(n,2433)),"@site/blog/2021-05-23-neistpoint-project.md?truncated=true",2433],"7892492f":[()=>n.e(88225).then(n.t.bind(n,43202,19)),"~blog/default/blog-tags-san-francisco-92e-list.json",43202],"79090c4a":[()=>n.e(98657).then(n.t.bind(n,56784,19)),"~blog/default/blog-tags-memory-training-c57.json",56784],79725841:[()=>n.e(66360).then(n.t.bind(n,72422,19)),"~blog/default/blog-tags-data-access-f56-list.json",72422],"79e5e560":[()=>n.e(31913).then(n.t.bind(n,45506,19)),"~blog/default/blog-tags-bot-72a-list.json",45506],"7b1f5f9d":[()=>n.e(75169).then(n.bind(n,4411)),"@site/blog/2023-05-20-openbb-terminal-3-0-a-new-interactive-way-to-analyze-data.md?truncated=true",4411],"7b2041b9":[()=>n.e(75692).then(n.bind(n,51735)),"@site/blog/2023-10-19-building-the-worlds-investment-research-infrastructure.md?truncated=true",51735],"7b2d55d4":[()=>n.e(4948).then(n.t.bind(n,10418,19)),"~blog/default/blog-tags-nurvv-run-0f0-list.json",10418],"7b310b8f":[()=>n.e(74354).then(n.bind(n,22395)),"@site/blog/2023-05-13-leaving-london-to-live-in-san-francisco.md?truncated=true",22395],"7b50e393":[()=>n.e(94677).then(n.t.bind(n,19261,19)),"~blog/default/blog-tags-carousel-685.json",19261],"7b55c963":[()=>n.e(77800).then(n.t.bind(n,62671,19)),"~blog/default/blog-tags-ml-84a.json",62671],"7c17367f":[()=>n.e(3306).then(n.t.bind(n,39574,19)),"~blog/default/blog-tags-open-bb-terminal-f1f-list.json",39574],"7ce6abb9":[()=>n.e(37901).then(n.t.bind(n,5796,19)),"~blog/default/blog-tags-slack-b45.json",5796],"7d3233cd":[()=>n.e(87725).then(n.t.bind(n,4785,19)),"~blog/default/blog-tags-monetization-901-list.json",4785],"7e5b4089":[()=>n.e(38156).then(n.t.bind(n,62498,19)),"~blog/default/blog-tags-employee-compensation-7c8-list.json",62498],"7ec3c4dc":[()=>n.e(3899).then(n.t.bind(n,22276,19)),"~blog/default/blog-tags-face-recognition-ded.json",22276],"7edceb80":[()=>n.e(85712).then(n.t.bind(n,89910,19)),"~blog/default/blog-tags-sustainability-45b.json",89910],"7ee0ba0e":[()=>n.e(9802).then(n.bind(n,28862)),"@site/blog/2022-10-20-how-i-would-do-due-diligence-on-amt-using-openbb-terminal.md?truncated=true",28862],"7f931439":[()=>n.e(26839).then(n.t.bind(n,13170,19)),"~blog/default/blog-tags-world-cup-2022-d65-list.json",13170],"7faecf55":[()=>n.e(54478).then(n.bind(n,75130)),"@site/blog/2021-08-15-ranking-99-mind-f-ck-movies.md?truncated=true",75130],"7fd47b60":[()=>n.e(47040).then(n.t.bind(n,75060,19)),"~blog/default/blog-tags-stocks-1dd.json",75060],80005952:[()=>n.e(84680).then(n.bind(n,97161)),"@site/blog/2023-08-03-how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley.md?truncated=true",97161],"8025adca":[()=>n.e(94628).then(n.t.bind(n,24798,19)),"~blog/default/blog-tags-ap-is-a3c.json",24798],"8070b823":[()=>n.e(28614).then(n.t.bind(n,5133,19)),"~blog/default/blog-tags-startup-25b-list.json",5133],"808cff29":[()=>n.e(16885).then(n.t.bind(n,96521,19)),"~blog/default/blog-tags-self-improvement-b9b-list.json",96521],"814f3328":[()=>n.e(52535).then(n.t.bind(n,45641,19)),"~blog/default/blog-post-list-prop-default.json",45641],"81e06f4d":[()=>n.e(9576).then(n.t.bind(n,98926,19)),"~blog/default/blog-tags-movies-31b-list.json",98926],"82abbf33":[()=>n.e(90787).then(n.t.bind(n,81645,19)),"~blog/default/blog-tags-sensor-fusion-engineer-2c2.json",81645],"831b4c95":[()=>n.e(29029).then(n.bind(n,49168)),"@site/blog/2023-06-29-employees-are-leaving-be-proactive-about-employee-feedback.md?truncated=true",49168],"835366d7":[()=>n.e(84486).then(n.t.bind(n,14736,19)),"~blog/default/blog-tags-betting-113-list.json",14736],"83a23524":[()=>n.e(73458).then(n.t.bind(n,24101,19)),"~blog/default/blog-tags-efficiency-33e.json",24101],"8453e908":[()=>n.e(65397).then(n.t.bind(n,9658,19)),"~blog/default/blog-tags-london-4ab.json",9658],"8593ff01":[()=>n.e(37007).then(n.t.bind(n,89064,19)),"~blog/default/blog-tags-docker-f07.json",89064],"86b7a38e":[()=>n.e(26541).then(n.bind(n,61387)),"@site/blog/2021-04-07-momentum-football-bets.md",61387],"87e9d9de":[()=>n.e(7214).then(n.bind(n,69866)),"@site/blog/2022-10-15-stop-doing-your-cv-in-word-or-latex.md?truncated=true",69866],"885555b6":[()=>n.e(45768).then(n.t.bind(n,18813,19)),"~blog/default/blog-tags-options-28d.json",18813],"88f9d98f":[()=>n.e(79904).then(n.bind(n,37378)),"@site/content/books/to-read.md",37378],"89500d37":[()=>n.e(4929).then(n.bind(n,87883)),"@site/blog/2021-09-30-how-i-created-a-bot-in-python-to-participate-in-nft-giveaways.md?truncated=true",87883],89658552:[()=>n.e(98264).then(n.t.bind(n,8601,19)),"~blog/default/blog-tags-i-os-a11.json",8601],"896edaf5":[()=>n.e(86003).then(n.bind(n,83505)),"@site/content/resume/courses.md",83505],"899f3587":[()=>n.e(90632).then(n.t.bind(n,82217,19)),"~blog/default/blog-tags-a-players-919-list.json",82217],"8ab06b37":[()=>n.e(70382).then(n.bind(n,88567)),"@site/blog/2023-10-29-writing-documentation-as-a-founder-is-underrated.md?truncated=true",88567],"8b06e2a4":[()=>n.e(34953).then(n.bind(n,48663)),"@site/blog/2023-01-05-financial-chat-bots-are-underrated-and-heres-why.md",48663],"8ba5f1a9":[()=>n.e(98861).then(n.bind(n,567)),"@site/blog/2023-11-21-openbb-bot-our-new-addition-to-the-openbb-open-source-family.md?truncated=true",567],"8bd24425":[()=>n.e(97423).then(n.t.bind(n,74398,19)),"~blog/default/blog-tags-core-6c7-list.json",74398],"8c054ab4":[()=>n.e(11034).then(n.t.bind(n,54054,19)),"~blog/default/blog-tags-london-4ab-list.json",54054],"8c14713a":[()=>n.e(63627).then(n.t.bind(n,63381,19)),"~blog/default/blog-tags-achievements-1bb-list.json",63381],"8db1271b":[()=>n.e(87589).then(n.t.bind(n,12723,19)),"~blog/default/blog-tags-core-6c7.json",12723],"8e2eb652":[()=>n.e(81716).then(n.bind(n,67783)),"@site/blog/2022-11-10-how-to-grow-your-open-source-community-from-scratch.md",67783],"8e582363":[()=>n.e(73297).then(n.bind(n,10525)),"@site/blog/2022-12-11-how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster.md",10525],"8eadfc59":[()=>n.e(16831).then(n.t.bind(n,13653,19)),"~blog/default/blog-tags-finance-database-62f-list.json",13653],"8eb32fd5":[()=>n.e(33234).then(n.t.bind(n,15993,19)),"~blog/default/blog-tags-sdk-f5e-list.json",15993],"8ed3702a":[()=>n.e(75914).then(n.t.bind(n,6378,19)),"~blog/default/blog-tags-equity-top-ups-800.json",6378],"8ee4874c":[()=>n.e(50331).then(n.t.bind(n,45209,19)),"~blog/default/blog-tags-meme-filter-30c.json",45209],"8fa4536d":[()=>n.e(42396).then(n.t.bind(n,36666,19)),"~blog/default/blog-tags-chat-gpt-fab-list.json",36666],"911346ac":[()=>n.e(15160).then(n.bind(n,1994)),"@site/blog/2021-06-12-customizable-meme-filter.md?truncated=true",1994],"91e426c9":[()=>n.e(81821).then(n.bind(n,92980)),"@site/blog/2023-07-16-why-the-need-for-an-open-source-investment-research-platform.md?truncated=true",92980],"91fdd50a":[()=>n.e(52729).then(n.bind(n,72396)),"@site/content/media/videos/interviews.md",72396],"91fe0d9b":[()=>n.e(63128).then(n.t.bind(n,71458,19)),"~blog/default/blog-tags-gps-aca-list.json",71458],"930abf63":[()=>n.e(799).then(n.t.bind(n,41045,19)),"~blog/default/blog-tags-hiring-fd1-list.json",41045],"935f2afb":[()=>n.e(80053).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"94621c6f":[()=>n.e(23516).then(n.bind(n,71617)),"@site/blog/2021-03-14-gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal.md",71617],"94755bf7":[()=>n.e(99285).then(n.bind(n,11670)),"@site/blog/2021-09-16-gamestonk-terminal-cant-stop-won-t-stop.md?truncated=true",11670],"95a3914b":[()=>n.e(64859).then(n.t.bind(n,76425,19)),"~blog/default/blog-tags-meme-filter-30c-list.json",76425],"967ead12":[()=>n.e(32473).then(n.t.bind(n,19908,19)),"~blog/default/blog-tags-mindsdb-df6-list.json",19908],"96ae0a3c":[()=>n.e(86256).then(n.bind(n,81813)),"@site/blog/2023-04-03-the-role-of-ai-and-openbb-in-the-future-of-investment-research.md?truncated=true",81813],"96dbcefe":[()=>n.e(790).then(n.t.bind(n,67903,19)),"~blog/default/blog-tags-productivity-e58.json",67903],"96e53806":[()=>n.e(50826).then(n.bind(n,85316)),"@site/blog/2021-07-23-minion-recipes-program.md?truncated=true",85316],"96edfff2":[()=>n.e(60259).then(n.t.bind(n,61369,19)),"~blog/default/blog-tags-pypi-334.json",61369],"9716e4b0":[()=>n.e(51174).then(n.bind(n,61469)),"@site/blog/2022-12-04-the-future-of-finance-with-open-source-and-ai.md?truncated=true",61469],"978bf49e":[()=>n.e(69149).then(n.t.bind(n,69940,19)),"~blog/default/blog-tags-recipes-306.json",69940],"97977ee3":[()=>n.e(708).then(n.t.bind(n,11399,19)),"~blog/default/blog-tags-deep-learning-776-list.json",11399],"987564cc":[()=>n.e(99979).then(n.t.bind(n,91520,19)),"~blog/default/blog-tags-extensions-1ab.json",91520],"992a3bb7":[()=>n.e(51415).then(n.t.bind(n,88229,19)),"~blog/default/blog-tags-documentation-944-list.json",88229],"99c96d6f":[()=>n.e(91129).then(n.bind(n,5264)),"@site/blog/2021-07-17-household-bills-program.md",5264],"9a70baf5":[()=>n.e(95048).then(n.t.bind(n,63822,19)),"~blog/default/blog-tags-telegram-9a4-list.json",63822],"9a753e60":[()=>n.e(10725).then(n.t.bind(n,26590,19)),"~blog/default/blog-tags-learning-22f.json",26590],"9a8f4686":[()=>n.e(35105).then(n.t.bind(n,94128,19)),"~blog/default/blog-tags-self-improvement-b9b.json",94128],"9aa90a25":[()=>n.e(59609).then(n.t.bind(n,89561,19)),"~blog/default/blog-tags-infrastructure-f65.json",89561],"9c40b462":[()=>n.e(18949).then(n.t.bind(n,25214,19)),"~blog/default/blog-tags-thrillers-25d-list.json",25214],"9c84aec6":[()=>n.e(86659).then(n.t.bind(n,54423,19)),"~blog/default/blog-tags-feedback-c9e-list.json",54423],"9c8638bf":[()=>n.e(68111).then(n.bind(n,83543)),"@site/blog/2022-06-28-web3-symbols-and-community.md?truncated=true",83543],"9d86e0b0":[()=>n.e(83135).then(n.t.bind(n,16843,19)),"~blog/default/blog-tags-founder-e18-list.json",16843],"9dca1306":[()=>n.e(86617).then(n.bind(n,53366)),"@site/blog/2023-07-21-how-to-use-openai-to-extract-insights-from-team-survey.md",53366],"9e4087bc":[()=>n.e(53608).then(n.bind(n,63169)),"@theme/BlogArchivePage",63169],"9ed5bad1":[()=>n.e(55142).then(n.bind(n,77681)),"@site/blog/2023-08-03-how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley.md",77681],a062400c:[()=>n.e(70).then(n.t.bind(n,30381,19)),"~blog/default/blog-tags-san-francisco-92e.json",30381],a06f2c13:[()=>n.e(73425).then(n.t.bind(n,77718,19)),"~blog/default/blog-tags-publishing-c7d.json",77718],a0c4f205:[()=>n.e(21374).then(n.bind(n,88168)),"@site/blog/2021-08-01-k-means-clustering-to-visit-a-new-city.md",88168],a1762cf6:[()=>n.e(86204).then(n.t.bind(n,84985,19)),"~blog/default/blog-tags-api-key-management-4e0.json",84985],a2349c52:[()=>n.e(2902).then(n.t.bind(n,95460,19)),"~blog/default/blog-tags-feedback-c9e.json",95460],a236db8f:[()=>n.e(28412).then(n.t.bind(n,19330,19)),"~blog/default/blog-tags-teamwork-22b-list.json",19330],a2e86df0:[()=>n.e(8330).then(n.t.bind(n,43839,19)),"~blog/default/blog-tags-world-cup-2022-d65.json",43839],a32415bb:[()=>n.e(8449).then(n.t.bind(n,48618,19)),"~blog/default/blog-tags-career-advice-11b.json",48618],a45b630a:[()=>n.e(94755).then(n.t.bind(n,96445,19)),"~blog/default/blog-tags-reddit-a3d-list.json",96445],a49da4e1:[()=>n.e(77031).then(n.t.bind(n,74968,19)),"~blog/default/blog-tags-future-8ee-list.json",74968],a4a45cdb:[()=>n.e(27975).then(n.t.bind(n,23820,19)),"~blog/default/blog-tags-java-189.json",23820],a4f0015a:[()=>n.e(46200).then(n.t.bind(n,11268,19)),"~blog/default/blog-tags-beautiful-soup-4d0.json",11268],a5d27dc7:[()=>n.e(97178).then(n.t.bind(n,93182,19)),"~blog/default/blog-tags-visa-process-7af-list.json",93182],a6aa9e1f:[()=>Promise.all([n.e(40532),n.e(21506),n.e(2529),n.e(93089)]).then(n.bind(n,80046)),"@theme/BlogListPage",80046],a7023ddc:[()=>n.e(11713).then(n.t.bind(n,53457,19)),"~blog/default/blog-tags-tags-4c2.json",53457],a724a814:[()=>n.e(6662).then(n.t.bind(n,1747,19)),"~blog/default/blog-tags-image-processing-a34.json",1747],a8bdccb6:[()=>n.e(24463).then(n.bind(n,32258)),"@site/blog/2021-04-23-move-over-bloomberg-terminal-here-comes-gamestonk-terminal.md",32258],a907a752:[()=>n.e(52737).then(n.t.bind(n,33271,19)),"~blog/default/blog-tags-options-fam-bot-e20-list.json",33271],ab4c6d72:[()=>n.e(72332).then(n.t.bind(n,42446,19)),"~blog/default/blog-tags-ai-3e5-list.json",42446],aba0f6e8:[()=>n.e(40899).then(n.t.bind(n,99418,19)),"~blog/default/blog-tags-linked-in-6dc.json",99418],ac088321:[()=>n.e(41639).then(n.t.bind(n,14164,19)),"~blog/default/blog-tags-seed-stage-3c1.json",14164],ac44459c:[()=>n.e(6749).then(n.t.bind(n,56880,19)),"~blog/default/blog-tags-financial-world-806.json",56880],acb9321c:[()=>n.e(65584).then(n.bind(n,36928)),"@site/blog/2021-04-23-move-over-bloomberg-terminal-here-comes-gamestonk-terminal.md?truncated=true",36928],adacfdfb:[()=>n.e(13789).then(n.t.bind(n,85415,19)),"~blog/default/blog-tags-metrics-ad9.json",85415],ae0d81f8:[()=>n.e(8554).then(n.t.bind(n,33104,19)),"~blog/default/blog-tags-project-management-4b8.json",33104],af4ac791:[()=>n.e(52462).then(n.t.bind(n,64586,19)),"~blog/default/blog-tags-stock-management-791.json",64586],afa65323:[()=>n.e(49860).then(n.t.bind(n,71712,19)),"~blog/default/blog-tags-cv-75f-list.json",71712],afaff11a:[()=>n.e(22878).then(n.t.bind(n,96271,19)),"~blog/default/blog-tags-community-d90-list.json",96271],aff6100f:[()=>n.e(8427).then(n.t.bind(n,63227,19)),"~blog/default/blog-tags-target-market-analysis-863.json",63227],b03baec0:[()=>n.e(45281).then(n.bind(n,4017)),"@site/blog/2022-11-26-sweepstake-world-cup-2022-for-your-startup-team.md",4017],b0a8e85e:[()=>n.e(60500).then(n.t.bind(n,11672,19)),"~blog/default/blog-tags-nft-16a.json",11672],b1754f82:[()=>n.e(91881).then(n.t.bind(n,6071,19)),"~blog/default/blog-tags-industry-analysis-890.json",6071],b2b675dd:[()=>n.e(90533).then(n.t.bind(n,28017,19)),"~blog/default/blog-c06.json",28017],b2bca815:[()=>n.e(57253).then(n.t.bind(n,53704,19)),"~blog/default/blog-tags-hybrid-work-080.json",53704],b2f554cd:[()=>n.e(11477).then(n.t.bind(n,30010,19)),"~blog/default/blog-archive-80c.json",30010],b3f4e2a1:[()=>n.e(84185).then(n.bind(n,64113)),"@site/blog/2021-12-02-sector-and-industry-analysis-gamestonk-terminal.md?truncated=true",64113],b4167337:[()=>n.e(98116).then(n.bind(n,34390)),"@site/blog/2021-11-17-handing-your-twitter-account-to-your-most-avid-community-member.md?truncated=true",34390],b42dd1dd:[()=>n.e(22130).then(n.t.bind(n,79788,19)),"~blog/default/blog-tags-beautiful-soup-4d0-list.json",79788],b435e16c:[()=>n.e(65348).then(n.t.bind(n,37476,19)),"~blog/default/blog-tags-content-creation-ba1.json",37476],b4ad5702:[()=>n.e(90170).then(n.t.bind(n,20967,19)),"~blog/default/blog-tags-chatbots-bb5.json",20967],b4f811ca:[()=>n.e(90561).then(n.t.bind(n,56576,19)),"~blog/default/blog-tags-hiring-fd1.json",56576],b5da265e:[()=>n.e(19796).then(n.bind(n,32724)),"@site/blog/2023-07-16-why-the-need-for-an-open-source-investment-research-platform.md",32724],b66bea06:[()=>n.e(75202).then(n.bind(n,61501)),"@site/blog/2022-03-21-meet-the-most-advanced-investment-research-platform.md",61501],b6b814f4:[()=>n.e(5948).then(n.bind(n,65422)),"@site/blog/2022-11-26-sweepstake-world-cup-2022-for-your-startup-team.md?truncated=true",65422],b75eff59:[()=>n.e(26381).then(n.bind(n,2131)),"@site/blog/2023-04-01-how-i-used-openai-api-to-improve-our-product-documentation.md",2131],b771de90:[()=>n.e(62773).then(n.t.bind(n,96759,19)),"~blog/default/blog-tags-gui-cef.json",96759],b7d326f2:[()=>n.e(20958).then(n.t.bind(n,11098,19)),"~blog/default/blog-tags-insights-605-list.json",11098],b7eaaadb:[()=>n.e(75168).then(n.bind(n,30159)),"@site/blog/2022-04-21-looking-for-a-new-tattoo-openbb-has-you-covered-literally.md?truncated=true",30159],b7f303d7:[()=>n.e(2953).then(n.t.bind(n,73568,19)),"~blog/default/blog-tags-sustainability-45b-list.json",73568],b88647b8:[()=>n.e(33585).then(n.t.bind(n,50857,19)),"~blog/default/blog-tags-target-market-analysis-863-list.json",50857],b9a0cbc4:[()=>n.e(33416).then(n.bind(n,19347)),"@site/blog/2022-11-10-how-to-grow-your-open-source-community-from-scratch.md?truncated=true",19347],b9aedcc0:[()=>n.e(82613).then(n.t.bind(n,93645,19)),"~blog/default/blog-tags-team-happiness-c22.json",93645],ba2313f4:[()=>n.e(63012).then(n.t.bind(n,87096,19)),"~blog/default/blog-tags-side-project-3f7.json",87096],ba50fd3d:[()=>n.e(57883).then(n.t.bind(n,15715,19)),"~blog/default/blog-tags-product-750-list.json",15715],ba58f206:[()=>n.e(72225).then(n.t.bind(n,80085,19)),"~blog/default/blog-tags-travel-63c.json",80085],ba6d7ab3:[()=>n.e(54421).then(n.t.bind(n,79045,19)),"~blog/default/blog-tags-content-creation-ba1-list.json",79045],bae86881:[()=>n.e(46193).then(n.t.bind(n,72462,19)),"~blog/default/blog-tags-startups-d4c.json",72462],baf1d854:[()=>n.e(13230).then(n.t.bind(n,31446,19)),"~blog/default/blog-tags-betting-113.json",31446],bbbe7b21:[()=>n.e(76795).then(n.t.bind(n,38444,19)),"~blog/default/blog-tags-cross-validation-113-list.json",38444],bc38da55:[()=>n.e(45610).then(n.bind(n,46833)),"@site/blog/2023-01-22-how-to-get-hired-by-an-exciting-tech-startup-in-2023.md?truncated=true",46833],bcd3bfb0:[()=>n.e(24306).then(n.t.bind(n,36190,19)),"~blog/default/blog-tags-langchain-595.json",36190],bd088d9a:[()=>n.e(29904).then(n.bind(n,59307)),"@site/blog/2022-10-27-how-to-learn-10x-faster-than-average.md?truncated=true",59307],bda997d1:[()=>n.e(99932).then(n.t.bind(n,88277,19)),"~blog/default/blog-tags-industry-analysis-890-list.json",88277],bdff1965:[()=>n.e(52307).then(n.t.bind(n,16948,19)),"~blog/default/blog-tags-open-source-6de-list.json",16948],be1b2511:[()=>n.e(27363).then(n.bind(n,17702)),"@site/blog/2023-01-02-firing-sucks-how-to-avoid-doing-so-by-hiring-a-players.md",17702],be5b2f8e:[()=>n.e(37101).then(n.t.bind(n,20319,19)),"~blog/default/blog-tags-equity-top-ups-800-list.json",20319],bece1fcc:[()=>n.e(65029).then(n.t.bind(n,9359,19)),"~blog/default/blog-tags-machine-learning-36b.json",9359],bf1775fc:[()=>n.e(22101).then(n.bind(n,14875)),"@site/blog/2023-06-29-employees-are-leaving-be-proactive-about-employee-feedback.md",14875],bfeeb121:[()=>n.e(37858).then(n.t.bind(n,94634,19)),"~blog/default/blog-tags-routines-4a5.json",94634],c080b7b6:[()=>n.e(18982).then(n.t.bind(n,83196,19)),"~blog/default/blog-tags-clothing-brand-738-list.json",83196],c0926f9a:[()=>n.e(32461).then(n.t.bind(n,41198,19)),"~blog/default/blog-tags-sdk-f5e.json",41198],c0e93a40:[()=>n.e(80822).then(n.bind(n,19463)),"@site/blog/2023-04-01-how-i-used-openai-api-to-improve-our-product-documentation.md?truncated=true",19463],c1047856:[()=>n.e(57969).then(n.t.bind(n,56104,19)),"~blog/default/blog-tags-java-189-list.json",56104],c16c3f74:[()=>n.e(1447).then(n.bind(n,13851)),"@site/blog/2021-09-30-how-i-created-a-bot-in-python-to-participate-in-nft-giveaways.md",13851],c1801064:[()=>n.e(3125).then(n.t.bind(n,18717,19)),"~blog/default/blog-tags-twitter-api-964-list.json",18717],c2f48982:[()=>n.e(93324).then(n.t.bind(n,45778,19)),"~blog/default/blog-tags-infrastructure-f65-list.json",45778],c321ff2e:[()=>n.e(80989).then(n.bind(n,39305)),"@site/blog/2022-08-14-how-i-became-ceo-of-openbb.md",39305],c4f5d8e4:[()=>n.e(64195).then(n.bind(n,62841)),"@site/src/pages/index.js",62841],c57c0a11:[()=>n.e(74556).then(n.bind(n,34381)),"@site/blog/2021-06-26-my-journey-of-memorising-a-deck-of-52-shuffled-cards.md",34381],c5ef4d17:[()=>n.e(8606).then(n.t.bind(n,65331,19)),"~blog/default/blog-tags-sweepstake-178-list.json",65331],c6112feb:[()=>n.e(13620).then(n.bind(n,51406)),"@site/blog/2023-12-15-the-new-finai-tech-stack.md",51406],c65c3bdf:[()=>n.e(56998).then(n.t.bind(n,82045,19)),"~blog/default/blog-tags-memory-palace-1ae.json",82045],c864f60c:[()=>n.e(70630).then(n.t.bind(n,15793,19)),"~blog/default/blog-tags-open-bb-terminal-2-0-b09-list.json",15793],c8cbc146:[()=>n.e(56691).then(n.bind(n,98356)),"@site/blog/2023-09-16-work-life-balance-is-bullsh-t.md",98356],c933abd0:[()=>n.e(22386).then(n.t.bind(n,15301,19)),"~blog/default/blog-tags-software-engineering-146-list.json",15301],ca4cde03:[()=>n.e(86821).then(n.t.bind(n,44711,19)),"~blog/default/blog-tags-interactive-charts-f47-list.json",44711],cb10b5ca:[()=>n.e(41397).then(n.t.bind(n,87473,19)),"~blog/default/blog-tags-icmla-ea2-list.json",87473],cb134c96:[()=>n.e(97154).then(n.t.bind(n,97868,19)),"~blog/default/blog-tags-writing-3af-list.json",97868],cc2086a7:[()=>n.e(5267).then(n.t.bind(n,14312,19)),"~blog/default/blog-tags-package-d5d.json",14312],cc5e5189:[()=>n.e(67260).then(n.t.bind(n,77036,19)),"~blog/default/blog-tags-travel-63c-list.json",77036],cc8a3d39:[()=>n.e(58903).then(n.t.bind(n,71621,19)),"~blog/default/blog-tags-c-d8e-list.json",71621],ccc49370:[()=>Promise.all([n.e(40532),n.e(21506),n.e(2529),n.e(46103)]).then(n.bind(n,65203)),"@theme/BlogPostPage",65203],cda22062:[()=>n.e(30957).then(n.t.bind(n,23407,19)),"~blog/default/blog-tags-machine-learning-36b-list.json",23407],ced5b608:[()=>n.e(78626).then(n.t.bind(n,85570,19)),"~blog/default/blog-tags-open-bb-terminal-f1f.json",85570],cf510f60:[()=>n.e(1607).then(n.t.bind(n,45355,19)),"~blog/default/blog-tags-platform-9d7.json",45355],cfb8f5b6:[()=>n.e(1860).then(n.t.bind(n,62981,19)),"~blog/default/blog-tags-software-engineering-146.json",62981],d0503f2d:[()=>n.e(85692).then(n.t.bind(n,76191,19)),"~blog/default/blog-tags-ph-d-thesis-ca3-list.json",76191],d065e13e:[()=>n.e(7608).then(n.bind(n,39530)),"@site/blog/2023-10-14-a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data.md?truncated=true",39530],d09158d3:[()=>n.e(80049).then(n.bind(n,20316)),"@site/blog/2021-10-22-an-unusual-journey-learning-about-nns-for-a-phd-thesis.md?truncated=true",20316],d2e41004:[()=>n.e(53683).then(n.t.bind(n,48104,19)),"~blog/default/blog-tags-seed-stage-3c1-list.json",48104],d31820ae:[()=>n.e(3667).then(n.t.bind(n,98768,19)),"~blog/default/blog-tags-interactive-tables-d46-list.json",98768],d344bca5:[()=>n.e(77562).then(n.t.bind(n,48274,19)),"~blog/default/blog-tags-pao-system-fdc-list.json",48274],d360d7c9:[()=>n.e(40163).then(n.bind(n,57448)),"@site/blog/2021-09-16-gamestonk-terminal-cant-stop-won-t-stop.md",57448],d3e492f3:[()=>n.e(5167).then(n.t.bind(n,94245,19)),"~blog/default/blog-tags-football-11c.json",94245],d47c6560:[()=>n.e(16197).then(n.t.bind(n,96137,19)),"~blog/default/blog-tags-product-750.json",96137],d4c0a749:[()=>n.e(97843).then(n.t.bind(n,72137,19)),"~blog/default/blog-tags-card-memorisation-409.json",72137],d5075c4a:[()=>n.e(98434).then(n.t.bind(n,1674,19)),"~blog/default/blog-tags-package-d5d-list.json",1674],d52c9511:[()=>n.e(85149).then(n.bind(n,7609)),"@site/content/media/podcasts.md",7609],d5b86cb0:[()=>n.e(71958).then(n.t.bind(n,21628,19)),"~blog/default/blog-tags-relocation-93d-list.json",21628],d5feae5c:[()=>n.e(52580).then(n.t.bind(n,59472,19)),"~blog/default/blog-tags-sorting-algorithm-5e2.json",59472],d62b6dd6:[()=>n.e(82883).then(n.t.bind(n,61661,19)),"~blog/default/blog-tags-time-series-b89.json",61661],d6715ae3:[()=>n.e(56236).then(n.t.bind(n,75950,19)),"~blog/default/blog-tags-thrillers-25d.json",75950],d73e75b6:[()=>n.e(70832).then(n.t.bind(n,96891,19)),"~blog/default/blog-tags-personalization-bd7.json",96891],d7d879d0:[()=>n.e(59874).then(n.t.bind(n,21378,19)),"~blog/default/blog-tags-open-bb-champion-0c6-list.json",21378],d85a2795:[()=>n.e(16159).then(n.bind(n,38526)),"@site/blog/2023-07-21-how-to-use-openai-to-extract-insights-from-team-survey.md?truncated=true",38526],d8dc100e:[()=>n.e(92101).then(n.t.bind(n,65375,19)),"~blog/default/blog-tags-growth-6e0.json",65375],d9011768:[()=>n.e(83897).then(n.t.bind(n,81243,19)),"~blog/default/blog-tags-open-bb-terminal-2-0-b09.json",81243],d93585bc:[()=>n.e(95130).then(n.t.bind(n,83034,19)),"~blog/default/blog-tags-flexible-hours-2df-list.json",83034],da1ec1e1:[()=>n.e(43346).then(n.bind(n,33923)),"@site/blog/2023-05-09-fully-free-financial-chatbot.md?truncated=true",33923],da6c33d7:[()=>n.e(80742).then(n.bind(n,30978)),"@site/blog/2023-06-12-hybrid-work-sucks-its-worse-than-remote-and-office.md?truncated=true",30978],db6eac5e:[()=>n.e(91626).then(n.t.bind(n,71785,19)),"~blog/default/blog-tags-data-analysis-e09.json",71785],db6fb9ab:[()=>n.e(26340).then(n.t.bind(n,46005,19)),"~blog/default/blog-tags-meme-bot-950-list.json",46005],dbbb982f:[()=>n.e(67622).then(n.t.bind(n,50194,19)),"~blog/default/blog-tags-docker-f07-list.json",50194],dc0ca678:[()=>n.e(67608).then(n.t.bind(n,70528,19)),"~blog/default/blog-tags-memory-training-c57-list.json",70528],dc34a022:[()=>n.e(61066).then(n.t.bind(n,36452,19)),"~blog/default/blog-tags-pao-system-fdc.json",36452],dd92571b:[()=>n.e(21351).then(n.t.bind(n,86533,19)),"~blog/default/blog-tags-options-28d-list.json",86533],ddd507f2:[()=>n.e(27615).then(n.bind(n,8952)),"@site/blog/2023-06-12-hybrid-work-sucks-its-worse-than-remote-and-office.md",8952],ddeca180:[()=>n.e(50095).then(n.t.bind(n,18106,19)),"~blog/default/blog-tags-slack-b45-list.json",18106],ddfc6624:[()=>n.e(36750).then(n.t.bind(n,43529,19)),"~blog/default/blog-tags-management-7f1.json",43529],de180a44:[()=>n.e(81046).then(n.t.bind(n,3495,19)),"~blog/default/blog-tags-momentum-5c3-list.json",3495],de950178:[()=>n.e(33470).then(n.t.bind(n,83320,19)),"~blog/default/blog-tags-gui-cef-list.json",83320],ded53b11:[()=>n.e(62120).then(n.t.bind(n,96035,19)),"~blog/default/blog-tags-open-bb-bot-6de-list.json",96035],df690c19:[()=>n.e(75003).then(n.t.bind(n,22566,19)),"~blog/default/blog-tags-gamestonk-terminal-b96-list.json",22566],df6a40de:[()=>n.e(4101).then(n.t.bind(n,874,19)),"~blog/default/blog-tags-data-customization-507-list.json",874],dfed4bc5:[()=>n.e(96714).then(n.t.bind(n,20817,19)),"~blog/default/blog-tags-slack-bot-5a3.json",20817],e05c7c7c:[()=>n.e(22455).then(n.t.bind(n,82225,19)),"~blog/default/blog-tags-web-scraping-44d-list.json",82225],e0baa330:[()=>n.e(9123).then(n.t.bind(n,45654,19)),"~blog/default/blog-tags-anniversary-6c9.json",45654],e175f9f3:[()=>n.e(22881).then(n.t.bind(n,12530,19)),"~blog/default/blog-tags-education-701.json",12530],e1c8b2f1:[()=>n.e(55822).then(n.t.bind(n,34202,19)),"~blog/default/blog-tags-open-bb-sdk-e71.json",34202],e2829bc5:[()=>n.e(55438).then(n.t.bind(n,18187,19)),"~blog/default/blog-tags-options-fam-bot-e20.json",18187],e32c0420:[()=>n.e(65433).then(n.bind(n,4836)),"@site/blog/2022-10-15-stop-doing-your-cv-in-word-or-latex.md",4836],e3991724:[()=>n.e(75158).then(n.bind(n,7965)),"@site/blog/2023-08-09-how-to-handle-equity-top-ups-at-a-seed-stage-startup.md?truncated=true",7965],e4c60876:[()=>n.e(31116).then(n.t.bind(n,88759,19)),"~blog/default/blog-tags-movies-31b.json",88759],e4d6fbed:[()=>n.e(42902).then(n.t.bind(n,62823,19)),"~blog/default/blog-tags-sensor-fusion-engineer-2c2-list.json",62823],e4f74b27:[()=>n.e(73372).then(n.bind(n,39537)),"@site/blog/2023-01-05-financial-chat-bots-are-underrated-and-heres-why.md?truncated=true",39537],e5921b6e:[()=>n.e(58584).then(n.bind(n,9828)),"@site/blog/2022-03-21-meet-the-most-advanced-investment-research-platform.md?truncated=true",9828],e5d02831:[()=>n.e(71959).then(n.t.bind(n,34686,19)),"~blog/default/blog-tags-anniversary-6c9-list.json",34686],e6a5d5de:[()=>n.e(84217).then(n.t.bind(n,36520,19)),"~blog/default/blog-tags-time-series-forecasting-03d.json",36520],e747da00:[()=>n.e(37902).then(n.t.bind(n,87160,19)),"~blog/default/blog-tags-interactive-charts-f47.json",87160],e834c974:[()=>n.e(42174).then(n.bind(n,68430)),"@site/blog/2023-07-29-keep-track-of-your-startup-metrics-using-a-custom-ios-widget.md?truncated=true",68430],e835b34a:[()=>n.e(8125).then(n.t.bind(n,37461,19)),"~blog/default/blog-tags-monetization-901.json",37461],e8634d14:[()=>n.e(25511).then(n.bind(n,52743)),"@site/blog/2022-12-07-how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla.md?truncated=true",52743],e96ba3e9:[()=>n.e(91415).then(n.t.bind(n,30222,19)),"~blog/default/blog-tags-chat-gpt-fab.json",30222],e97c80f5:[()=>n.e(57772).then(n.t.bind(n,6022,19)),"~blog/default/blog-tags-card-memorisation-409-list.json",6022],ea43a7f5:[()=>n.e(66319).then(n.t.bind(n,72476,19)),"~blog/default/blog-tags-ll-ms-f3c.json",72476],eb0a11c0:[()=>n.e(61944).then(n.t.bind(n,20925,19)),"~blog/default/blog-tags-script-management-7ae-list.json",20925],eb56fc50:[()=>n.e(32683).then(n.t.bind(n,38183,19)),"~blog/default/blog-tags-open-ai-a9c-list.json",38183],eba0b945:[()=>n.e(18905).then(n.t.bind(n,73873,19)),"~blog/default/blog-tags-employee-engagement-862-list.json",73873],ebb9724b:[()=>n.e(12133).then(n.t.bind(n,98753,19)),"~blog/default/blog-tags-job-change-eb8.json",98753],ebf27d5c:[()=>n.e(75645).then(n.bind(n,92388)),"@site/content/media/videos/webinars-presentations.md",92388],ec4f2a01:[()=>n.e(96399).then(n.t.bind(n,68782,19)),"~blog/default/blog-tags-api-key-management-4e0-list.json",68782],ece3e65e:[()=>n.e(70978).then(n.bind(n,44881)),"@site/blog/2021-11-07-the-start-of-my-machine-learning-journey.md?truncated=true",44881],ee0afa34:[()=>n.e(64409).then(n.t.bind(n,37566,19)),"~blog/default/blog-tags-im-db-py-990.json",37566],ee886476:[()=>n.e(19335).then(n.t.bind(n,28569,19)),"~blog/default/blog-tags-gps-aca.json",28569],ef16b06b:[()=>n.e(89465).then(n.t.bind(n,71302,19)),"~blog/default/blog-tags-linked-in-6dc-list.json",71302],efb370bb:[()=>n.e(55017).then(n.t.bind(n,73895,19)),"~blog/default/blog-tags-brand-awareness-7b7.json",73895],f05f82da:[()=>n.e(12824).then(n.t.bind(n,50200,19)),"~blog/default/blog-tags-relocation-93d.json",50200],f06a1dfa:[()=>n.e(30821).then(n.t.bind(n,59841,19)),"~blog/default/blog-tags-nixtla-d7d-list.json",59841],f0f157d6:[()=>n.e(43950).then(n.t.bind(n,91473,19)),"~blog/default/blog-tags-discord-ee6.json",91473],f1c93c9c:[()=>n.e(61077).then(n.t.bind(n,21777,19)),"~blog/default/blog-tags-investment-research-d3f-list.json",21777],f26805b7:[()=>n.e(23872).then(n.t.bind(n,2347,19)),"~blog/default/blog-tags-data-licensing-648.json",2347],f269527d:[()=>n.e(44958).then(n.t.bind(n,4263,19)),"~blog/default/blog-tags-publishing-c7d-list.json",4263],f28ff1e4:[()=>n.e(45772).then(n.bind(n,44593)),"@site/blog/2023-09-10-target-market-analysis-with-the-help-of-llms.md",44593],f31c7292:[()=>n.e(14314).then(n.bind(n,21091)),"@site/blog/2023-05-09-fully-free-financial-chatbot.md",21091],f32fe326:[()=>n.e(8843).then(n.t.bind(n,44634,19)),"~blog/default/blog-tags-ai-3e5.json",44634],f41c0109:[()=>n.e(39558).then(n.t.bind(n,90333,19)),"~blog/default/blog-tags-extensions-1ab-list.json",90333],f4230d7a:[()=>n.e(53059).then(n.bind(n,50313)),"@site/blog/2023-12-15-the-new-finai-tech-stack.md?truncated=true",50313],f480fef1:[()=>n.e(10164).then(n.t.bind(n,45077,19)),"~blog/default/blog-tags-open-bb-sdk-e71-list.json",45077],f500e178:[()=>n.e(54005).then(n.t.bind(n,59338,19)),"~blog/default/blog-tags-investment-208.json",59338],f51360a1:[()=>n.e(69475).then(n.t.bind(n,78049,19)),"~blog/default/blog-tags-ml-84a-list.json",78049],f516f075:[()=>n.e(20750).then(n.t.bind(n,93411,19)),"~blog/default/blog-tags-open-bb-hub-7cf-list.json",93411],f5229e65:[()=>n.e(21576).then(n.t.bind(n,74989,19)),"~blog/default/blog-tags-crypto-03d.json",74989],f5426078:[()=>n.e(56365).then(n.t.bind(n,5153,19)),"~blog/default/blog-tags-programming-1aa.json",5153],f67afb06:[()=>n.e(31747).then(n.t.bind(n,15185,19)),"~blog/default/blog-tags-hugo-website-7bc.json",15185],f77b4e82:[()=>n.e(50813).then(n.t.bind(n,41487,19)),"~blog/default/blog-tags-education-701-list.json",41487],f8205ee4:[()=>n.e(1624).then(n.bind(n,99789)),"@site/blog/2022-10-23-how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds.md?truncated=true",99789],f8aed16a:[()=>n.e(47761).then(n.bind(n,2988)),"@site/content/books/already-read.md",2988],f8de77c0:[()=>n.e(5826).then(n.t.bind(n,87661,19)),"~blog/default/blog-tags-python-667-list.json",87661],f911ff39:[()=>n.e(5742).then(n.bind(n,63325)),"@site/blog/2023-06-10-become-an-openbb-champion.md?truncated=true",63325],f921d9cd:[()=>n.e(81296).then(n.t.bind(n,50983,19)),"~blog/default/blog-tags-remote-work-694-list.json",50983],f93a6d85:[()=>n.e(53119).then(n.t.bind(n,30360,19)),"~blog/default/blog-tags-efficiency-33e-list.json",30360],f9a5e369:[()=>n.e(28411).then(n.t.bind(n,40136,19)),"~blog/default/blog-tags-team-building-e74.json",40136],f9d724a5:[()=>n.e(87548).then(n.t.bind(n,71913,19)),"~blog/default/blog-tags-team-survey-887.json",71913],fa1b20f3:[()=>n.e(1689).then(n.t.bind(n,30209,19)),"~blog/default/blog-tags-side-project-3f7-list.json",30209],fa53a51a:[()=>n.e(81623).then(n.t.bind(n,31460,19)),"~blog/default/blog-tags-research-9e0-list.json",31460],fa78cc36:[()=>n.e(58833).then(n.t.bind(n,46044,19)),"~blog/default/blog-tags-stock-market-fe6.json",46044],fae763e2:[()=>n.e(26383).then(n.bind(n,28005)),"@site/blog/2021-06-26-my-journey-of-memorising-a-deck-of-52-shuffled-cards.md?truncated=true",28005],faeee935:[()=>n.e(3370).then(n.t.bind(n,71105,19)),"~blog/default/blog-tags-financial-data-c3d.json",71105],fbdcd79d:[()=>n.e(75122).then(n.bind(n,58019)),"@site/blog/2022-11-29-bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released.md",58019],fcbe1eaa:[()=>n.e(72939).then(n.bind(n,81456)),"@site/blog/2021-11-17-handing-your-twitter-account-to-your-most-avid-community-member.md",81456],fd48d9ce:[()=>n.e(99673).then(n.bind(n,70637)),"@site/blog/2022-10-20-how-i-would-do-due-diligence-on-amt-using-openbb-terminal.md",70637],fd532eaa:[()=>n.e(5195).then(n.t.bind(n,66189,19)),"~blog/default/blog-tags-carousel-685-list.json",66189],fd64578f:[()=>n.e(46249).then(n.t.bind(n,11118,19)),"~blog/default/blog-tags-script-management-7ae.json",11118],fdae8881:[()=>n.e(11361).then(n.t.bind(n,97962,19)),"~blog/default/blog-tags-discord-ee6-list.json",97962],fe002dc4:[()=>n.e(89770).then(n.bind(n,75003)),"@site/blog/2023-05-05-free-investment-research-ecosystem-to-consistently-beat-the-market.md?truncated=true",75003],fe637856:[()=>n.e(51705).then(n.t.bind(n,87094,19)),"~blog/default/blog-tags-recipes-306-list.json",87094],ff3b2917:[()=>n.e(22804).then(n.t.bind(n,51137,19)),"~blog/default/blog-tags-employee-engagement-862.json",51137],ff4eccba:[()=>n.e(12768).then(n.bind(n,29110)),"@site/blog/2023-08-09-how-to-handle-equity-top-ups-at-a-seed-stage-startup.md",29110],ff64dc32:[()=>n.e(58084).then(n.bind(n,81873)),"@site/blog/2022-12-11-how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster.md?truncated=true",81873],ff917fbd:[()=>n.e(64917).then(n.t.bind(n,94212,19)),"~blog/default/blog-tags-git-hub-bf3.json",94212],ffaeac38:[()=>n.e(36468).then(n.t.bind(n,29795,19)),"~blog/default/blog-tags-tweepy-d1d-list.json",29795],ffb61b8d:[()=>n.e(49668).then(n.t.bind(n,57584,19)),"~blog/default/blog-tags-football-11c-list.json",57584],fff0bb0d:[()=>n.e(63522).then(n.bind(n,65082)),"@site/blog/2022-11-14-5-steps-i-used-to-change-my-job-title-in-less-than-1-year.md?truncated=true",65082],ffff4581:[()=>n.e(96235).then(n.t.bind(n,94674,19)),"~blog/default/blog-tags-work-life-balance-b75.json",94674]};function c(e){let{error:t,retry:n,pastDelay:o}=e;return t?a.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},a.createElement("p",null,String(t)),a.createElement("div",null,a.createElement("button",{type:"button",onClick:n},"Retry"))):o?a.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},a.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},a.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},a.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},a.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),a.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},a.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),a.createElement("circle",{cx:"22",cy:"22",r:"8"},a.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(99670),d=n(30226);function f(e,t){if("*"===e)return i()({loading:c,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return a.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},a.createElement(n,t))}});const r=l[`${e}-${t}`],f={},g=[],b=[],p=(0,u.Z)(r);return Object.entries(p).forEach((e=>{let[t,n]=e;const a=s[n];a&&(f[t]=a[0],g.push(a[1]),b.push(a[2]))})),i().Map({loading:c,loader:f,modules:g,webpack:()=>b,render(t,n){const i=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,a]=t;const o=a.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(a).filter((e=>"default"!==e)).forEach((e=>{o[e]=a[e]}));let r=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{r=r[e]})),r[l[l.length-1]]=o}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,a.createElement(d.z,{value:s},a.createElement(l,(0,o.Z)({},i,n)))}})}const g=[{path:"/404",component:f("/404","ce5"),exact:!0},{path:"/blog",component:f("/blog","a96"),exact:!0},{path:"/blog/5-steps-i-used-to-change-my-job-title-in-less-than-1-year",component:f("/blog/5-steps-i-used-to-change-my-job-title-in-less-than-1-year","5e9"),exact:!0},{path:"/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data",component:f("/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data","162"),exact:!0},{path:"/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesis",component:f("/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesis","82d"),exact:!0},{path:"/blog/archive",component:f("/blog/archive","a17"),exact:!0},{path:"/blog/become-an-openbb-champion",component:f("/blog/become-an-openbb-champion","617"),exact:!0},{path:"/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released",component:f("/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released","677"),exact:!0},{path:"/blog/building-the-worlds-investment-research-infrastructure",component:f("/blog/building-the-worlds-investment-research-infrastructure","653"),exact:!0},{path:"/blog/customizable-meme-filter",component:f("/blog/customizable-meme-filter","a26"),exact:!0},{path:"/blog/employees-are-leaving-be-proactive-about-employee-feedback",component:f("/blog/employees-are-leaving-be-proactive-about-employee-feedback","8fc"),exact:!0},{path:"/blog/financial-chat-bots-are-underrated-and-heres-why",component:f("/blog/financial-chat-bots-are-underrated-and-heres-why","509"),exact:!0},{path:"/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-players",component:f("/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-players","25c"),exact:!0},{path:"/blog/free-investment-research-ecosystem-to-consistently-beat-the-market",component:f("/blog/free-investment-research-ecosystem-to-consistently-beat-the-market","2d0"),exact:!0},{path:"/blog/from-open-source-to-open-startup",component:f("/blog/from-open-source-to-open-startup","1c7"),exact:!0},{path:"/blog/fully-free-financial-chatbot",component:f("/blog/fully-free-financial-chatbot","7bc"),exact:!0},{path:"/blog/gamestonk-terminal-cant-stop-won-t-stop",component:f("/blog/gamestonk-terminal-cant-stop-won-t-stop","037"),exact:!0},{path:"/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal",component:f("/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal","882"),exact:!0},{path:"/blog/gamestonk-terminal-ux-features",component:f("/blog/gamestonk-terminal-ux-features","394"),exact:!0},{path:"/blog/goodbye-openbb-sdk-hello-openbb-platform",component:f("/blog/goodbye-openbb-sdk-hello-openbb-platform","94a"),exact:!0},{path:"/blog/handing-your-twitter-account-to-your-most-avid-community-member",component:f("/blog/handing-your-twitter-account-to-your-most-avid-community-member","763"),exact:!0},{path:"/blog/household-bills-program",component:f("/blog/household-bills-program","6f2"),exact:!0},{path:"/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster",component:f("/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster","432"),exact:!0},{path:"/blog/how-i-became-ceo-of-openbb",component:f("/blog/how-i-became-ceo-of-openbb","4ca"),exact:!0},{path:"/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveaways",component:f("/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveaways","ad0"),exact:!0},{path:"/blog/how-i-created-the-best-discord-meme-bot",component:f("/blog/how-i-created-the-best-discord-meme-bot","f9d"),exact:!0},{path:"/blog/how-i-used-openai-api-to-improve-our-product-documentation",component:f("/blog/how-i-used-openai-api-to-improve-our-product-documentation","6fc"),exact:!0},{path:"/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminal",component:f("/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminal","c07"),exact:!0},{path:"/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla",component:f("/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla","fa0"),exact:!0},{path:"/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds",component:f("/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds","c11"),exact:!0},{path:"/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023",component:f("/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023","b0d"),exact:!0},{path:"/blog/how-to-grow-your-open-source-community-from-scratch.md",component:f("/blog/how-to-grow-your-open-source-community-from-scratch.md","7fb"),exact:!0},{path:"/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley",component:f("/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley","05e"),exact:!0},{path:"/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startup",component:f("/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startup","d35"),exact:!0},{path:"/blog/how-to-learn-10x-faster-than-average",component:f("/blog/how-to-learn-10x-faster-than-average","d1b"),exact:!0},{path:"/blog/how-to-use-openai-to-extract-insights-from-team-survey",component:f("/blog/how-to-use-openai-to-extract-insights-from-team-survey","319"),exact:!0},{path:"/blog/hybrid-work-sucks-its-worse-than-remote-and-office",component:f("/blog/hybrid-work-sucks-its-worse-than-remote-and-office","480"),exact:!0},{path:"/blog/k-means-clustering-to-visit-a-new-city",component:f("/blog/k-means-clustering-to-visit-a-new-city","c4d"),exact:!0},{path:"/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widget",component:f("/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widget","2d0"),exact:!0},{path:"/blog/leaving-london-to-live-in-san-francisco",component:f("/blog/leaving-london-to-live-in-san-francisco","916"),exact:!0},{path:"/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literally",component:f("/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literally","43b"),exact:!0},{path:"/blog/meet-the-most-advanced-investment-research-platform",component:f("/blog/meet-the-most-advanced-investment-research-platform","499"),exact:!0},{path:"/blog/minion-recipes-program",component:f("/blog/minion-recipes-program","d12"),exact:!0},{path:"/blog/momentum-football-bets",component:f("/blog/momentum-football-bets","0ba"),exact:!0},{path:"/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminal",component:f("/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminal","cc8"),exact:!0},{path:"/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cards",component:f("/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cards","022"),exact:!0},{path:"/blog/neistpoint-project",component:f("/blog/neistpoint-project","257"),exact:!0},{path:"/blog/openbb-2-year-anniversary",component:f("/blog/openbb-2-year-anniversary","ee9"),exact:!0},{path:"/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family",component:f("/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family","55f"),exact:!0},{path:"/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-data",component:f("/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-data","3dc"),exact:!0},{path:"/blog/ranking-99-mind-f-ck-movies",component:f("/blog/ranking-99-mind-f-ck-movies","146"),exact:!0},{path:"/blog/remote-flexible-work-salary",component:f("/blog/remote-flexible-work-salary","d52"),exact:!0},{path:"/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig",component:f("/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig","6a0"),exact:!0},{path:"/blog/sector-and-industry-analysis-gamestonk-terminal",component:f("/blog/sector-and-industry-analysis-gamestonk-terminal","a7c"),exact:!0},{path:"/blog/stop-doing-your-cv-in-word-or-latex",component:f("/blog/stop-doing-your-cv-in-word-or-latex","9ef"),exact:!0},{path:"/blog/streamline-your-openbb-terminal-experience-with-openbb-hub",component:f("/blog/streamline-your-openbb-terminal-experience-with-openbb-hub","fd4"),exact:!0},{path:"/blog/sweepstake-world-cup-2022-for-your-startup-team",component:f("/blog/sweepstake-world-cup-2022-for-your-startup-team","a38"),exact:!0},{path:"/blog/tags",component:f("/blog/tags","039"),exact:!0},{path:"/blog/tags/a-players",component:f("/blog/tags/a-players","ef4"),exact:!0},{path:"/blog/tags/academia",component:f("/blog/tags/academia","1a7"),exact:!0},{path:"/blog/tags/achievements",component:f("/blog/tags/achievements","e75"),exact:!0},{path:"/blog/tags/agents",component:f("/blog/tags/agents","847"),exact:!0},{path:"/blog/tags/ai",component:f("/blog/tags/ai","6cd"),exact:!0},{path:"/blog/tags/airtable",component:f("/blog/tags/airtable","27d"),exact:!0},{path:"/blog/tags/algorithm",component:f("/blog/tags/algorithm","ece"),exact:!0},{path:"/blog/tags/anniversary",component:f("/blog/tags/anniversary","210"),exact:!0},{path:"/blog/tags/ap-is",component:f("/blog/tags/ap-is","4cf"),exact:!0},{path:"/blog/tags/api",component:f("/blog/tags/api","7ca"),exact:!0},{path:"/blog/tags/api-key-management",component:f("/blog/tags/api-key-management","841"),exact:!0},{path:"/blog/tags/automation",component:f("/blog/tags/automation","979"),exact:!0},{path:"/blog/tags/bcg-matrix",component:f("/blog/tags/bcg-matrix","800"),exact:!0},{path:"/blog/tags/beautiful-soup",component:f("/blog/tags/beautiful-soup","504"),exact:!0},{path:"/blog/tags/betting",component:f("/blog/tags/betting","0ec"),exact:!0},{path:"/blog/tags/blockchain",component:f("/blog/tags/blockchain","b6f"),exact:!0},{path:"/blog/tags/bot",component:f("/blog/tags/bot","cd1"),exact:!0},{path:"/blog/tags/brand-awareness",component:f("/blog/tags/brand-awareness","550"),exact:!0},{path:"/blog/tags/c",component:f("/blog/tags/c","010"),exact:!0},{path:"/blog/tags/card-memorisation",component:f("/blog/tags/card-memorisation","244"),exact:!0},{path:"/blog/tags/career",component:f("/blog/tags/career","5fb"),exact:!0},{path:"/blog/tags/career-advice",component:f("/blog/tags/career-advice","924"),exact:!0},{path:"/blog/tags/carousel",component:f("/blog/tags/carousel","8b2"),exact:!0},{path:"/blog/tags/chat-gpt",component:f("/blog/tags/chat-gpt","6bf"),exact:!0},{path:"/blog/tags/chatbots",component:f("/blog/tags/chatbots","a77"),exact:!0},{path:"/blog/tags/clothing-brand",component:f("/blog/tags/clothing-brand","ffb"),exact:!0},{path:"/blog/tags/clustering",component:f("/blog/tags/clustering","39f"),exact:!0},{path:"/blog/tags/community",component:f("/blog/tags/community","644"),exact:!0},{path:"/blog/tags/community-building",component:f("/blog/tags/community-building","72a"),exact:!0},{path:"/blog/tags/competitive-advantage",component:f("/blog/tags/competitive-advantage","4e9"),exact:!0},{path:"/blog/tags/content-creation",component:f("/blog/tags/content-creation","0a8"),exact:!0},{path:"/blog/tags/core",component:f("/blog/tags/core","2b2"),exact:!0},{path:"/blog/tags/cross-validation",component:f("/blog/tags/cross-validation","279"),exact:!0},{path:"/blog/tags/crypto",component:f("/blog/tags/crypto","ec9"),exact:!0},{path:"/blog/tags/cv",component:f("/blog/tags/cv","213"),exact:!0},{path:"/blog/tags/darkpool",component:f("/blog/tags/darkpool","5b2"),exact:!0},{path:"/blog/tags/data-access",component:f("/blog/tags/data-access","ddb"),exact:!0},{path:"/blog/tags/data-analysis",component:f("/blog/tags/data-analysis","5d6"),exact:!0},{path:"/blog/tags/data-customization",component:f("/blog/tags/data-customization","865"),exact:!0},{path:"/blog/tags/data-licensing",component:f("/blog/tags/data-licensing","bd4"),exact:!0},{path:"/blog/tags/data-science",component:f("/blog/tags/data-science","bf5"),exact:!0},{path:"/blog/tags/decentralization",component:f("/blog/tags/decentralization","17e"),exact:!0},{path:"/blog/tags/deep-learning",component:f("/blog/tags/deep-learning","b64"),exact:!0},{path:"/blog/tags/developer",component:f("/blog/tags/developer","6be"),exact:!0},{path:"/blog/tags/discord",component:f("/blog/tags/discord","cc7"),exact:!0},{path:"/blog/tags/docker",component:f("/blog/tags/docker","671"),exact:!0},{path:"/blog/tags/documentation",component:f("/blog/tags/documentation","89b"),exact:!0},{path:"/blog/tags/due-diligence",component:f("/blog/tags/due-diligence","b8b"),exact:!0},{path:"/blog/tags/economy",component:f("/blog/tags/economy","879"),exact:!0},{path:"/blog/tags/education",component:f("/blog/tags/education","067"),exact:!0},{path:"/blog/tags/efficiency",component:f("/blog/tags/efficiency","3e9"),exact:!0},{path:"/blog/tags/employee-compensation",component:f("/blog/tags/employee-compensation","495"),exact:!0},{path:"/blog/tags/employee-engagement",component:f("/blog/tags/employee-engagement","bed"),exact:!0},{path:"/blog/tags/equity",component:f("/blog/tags/equity","397"),exact:!0},{path:"/blog/tags/equity-top-ups",component:f("/blog/tags/equity-top-ups","544"),exact:!0},{path:"/blog/tags/extensions",component:f("/blog/tags/extensions","f41"),exact:!0},{path:"/blog/tags/face-recognition",component:f("/blog/tags/face-recognition","8ff"),exact:!0},{path:"/blog/tags/feedback",component:f("/blog/tags/feedback","bf3"),exact:!0},{path:"/blog/tags/finance",component:f("/blog/tags/finance","9e3"),exact:!0},{path:"/blog/tags/finance-database",component:f("/blog/tags/finance-database","a17"),exact:!0},{path:"/blog/tags/financial-chatbot",component:f("/blog/tags/financial-chatbot","6d2"),exact:!0},{path:"/blog/tags/financial-data",component:f("/blog/tags/financial-data","7d7"),exact:!0},{path:"/blog/tags/financial-world",component:f("/blog/tags/financial-world","835"),exact:!0},{path:"/blog/tags/flexible-hours",component:f("/blog/tags/flexible-hours","a7f"),exact:!0},{path:"/blog/tags/football",component:f("/blog/tags/football","9d3"),exact:!0},{path:"/blog/tags/founder",component:f("/blog/tags/founder","99a"),exact:!0},{path:"/blog/tags/free",component:f("/blog/tags/free","311"),exact:!0},{path:"/blog/tags/future",component:f("/blog/tags/future","b5e"),exact:!0},{path:"/blog/tags/gamestonk-terminal",component:f("/blog/tags/gamestonk-terminal","dfa"),exact:!0},{path:"/blog/tags/ge-mc-kinsey-matrix",component:f("/blog/tags/ge-mc-kinsey-matrix","a5a"),exact:!0},{path:"/blog/tags/git-hub",component:f("/blog/tags/git-hub","bf4"),exact:!0},{path:"/blog/tags/giveaways",component:f("/blog/tags/giveaways","11c"),exact:!0},{path:"/blog/tags/gps",component:f("/blog/tags/gps","746"),exact:!0},{path:"/blog/tags/growth",component:f("/blog/tags/growth","34c"),exact:!0},{path:"/blog/tags/gui",component:f("/blog/tags/gui","6b3"),exact:!0},{path:"/blog/tags/hard-work",component:f("/blog/tags/hard-work","1c1"),exact:!0},{path:"/blog/tags/hiring",component:f("/blog/tags/hiring","b65"),exact:!0},{path:"/blog/tags/hugo-website",component:f("/blog/tags/hugo-website","4d3"),exact:!0},{path:"/blog/tags/hybrid-work",component:f("/blog/tags/hybrid-work","c79"),exact:!0},{path:"/blog/tags/i-os",component:f("/blog/tags/i-os","db7"),exact:!0},{path:"/blog/tags/icmla",component:f("/blog/tags/icmla","8c9"),exact:!0},{path:"/blog/tags/im-db-py",component:f("/blog/tags/im-db-py","ba3"),exact:!0},{path:"/blog/tags/image-processing",component:f("/blog/tags/image-processing","b0f"),exact:!0},{path:"/blog/tags/industry-analysis",component:f("/blog/tags/industry-analysis","704"),exact:!0},{path:"/blog/tags/infrastructure",component:f("/blog/tags/infrastructure","7de"),exact:!0},{path:"/blog/tags/insights",component:f("/blog/tags/insights","90a"),exact:!0},{path:"/blog/tags/interactive-charts",component:f("/blog/tags/interactive-charts","dd1"),exact:!0},{path:"/blog/tags/interactive-tables",component:f("/blog/tags/interactive-tables","9af"),exact:!0},{path:"/blog/tags/investment",component:f("/blog/tags/investment","f6d"),exact:!0},{path:"/blog/tags/investment-research",component:f("/blog/tags/investment-research","889"),exact:!0},{path:"/blog/tags/java",component:f("/blog/tags/java","d47"),exact:!0},{path:"/blog/tags/job-change",component:f("/blog/tags/job-change","ce9"),exact:!0},{path:"/blog/tags/job-hunting",component:f("/blog/tags/job-hunting","b6b"),exact:!0},{path:"/blog/tags/jupyter-lab",component:f("/blog/tags/jupyter-lab","6aa"),exact:!0},{path:"/blog/tags/k-means",component:f("/blog/tags/k-means","a3d"),exact:!0},{path:"/blog/tags/langchain",component:f("/blog/tags/langchain","0be"),exact:!0},{path:"/blog/tags/learning",component:f("/blog/tags/learning","328"),exact:!0},{path:"/blog/tags/linked-in",component:f("/blog/tags/linked-in","211"),exact:!0},{path:"/blog/tags/ll-ms",component:f("/blog/tags/ll-ms","645"),exact:!0},{path:"/blog/tags/llamaindex",component:f("/blog/tags/llamaindex","326"),exact:!0},{path:"/blog/tags/london",component:f("/blog/tags/london","b4a"),exact:!0},{path:"/blog/tags/machine-learning",component:f("/blog/tags/machine-learning","05c"),exact:!0},{path:"/blog/tags/management",component:f("/blog/tags/management","12f"),exact:!0},{path:"/blog/tags/market-attractiveness",component:f("/blog/tags/market-attractiveness","66b"),exact:!0},{path:"/blog/tags/marketing",component:f("/blog/tags/marketing","68a"),exact:!0},{path:"/blog/tags/meme-bot",component:f("/blog/tags/meme-bot","450"),exact:!0},{path:"/blog/tags/meme-filter",component:f("/blog/tags/meme-filter","552"),exact:!0},{path:"/blog/tags/memory-palace",component:f("/blog/tags/memory-palace","473"),exact:!0},{path:"/blog/tags/memory-training",component:f("/blog/tags/memory-training","164"),exact:!0},{path:"/blog/tags/metrics",component:f("/blog/tags/metrics","5da"),exact:!0},{path:"/blog/tags/mindsdb",component:f("/blog/tags/mindsdb","eb6"),exact:!0},{path:"/blog/tags/ml",component:f("/blog/tags/ml","23e"),exact:!0},{path:"/blog/tags/momentum",component:f("/blog/tags/momentum","2b6"),exact:!0},{path:"/blog/tags/monetization",component:f("/blog/tags/monetization","aea"),exact:!0},{path:"/blog/tags/movies",component:f("/blog/tags/movies","3f2"),exact:!0},{path:"/blog/tags/neist-point",component:f("/blog/tags/neist-point","ca5"),exact:!0},{path:"/blog/tags/neural-networks",component:f("/blog/tags/neural-networks","1c9"),exact:!0},{path:"/blog/tags/nft",component:f("/blog/tags/nft","9f9"),exact:!0},{path:"/blog/tags/nixtla",component:f("/blog/tags/nixtla","90d"),exact:!0},{path:"/blog/tags/nurvv-run",component:f("/blog/tags/nurvv-run","bfd"),exact:!0},{path:"/blog/tags/office-work",component:f("/blog/tags/office-work","66d"),exact:!0},{path:"/blog/tags/open-ai",component:f("/blog/tags/open-ai","5d9"),exact:!0},{path:"/blog/tags/open-bb",component:f("/blog/tags/open-bb","19f"),exact:!0},{path:"/blog/tags/open-bb-bot",component:f("/blog/tags/open-bb-bot","43c"),exact:!0},{path:"/blog/tags/open-bb-champion",component:f("/blog/tags/open-bb-champion","33d"),exact:!0},{path:"/blog/tags/open-bb-hub",component:f("/blog/tags/open-bb-hub","3d5"),exact:!0},{path:"/blog/tags/open-bb-sdk",component:f("/blog/tags/open-bb-sdk","6a5"),exact:!0},{path:"/blog/tags/open-bb-terminal",component:f("/blog/tags/open-bb-terminal","9c3"),exact:!0},{path:"/blog/tags/open-bb-terminal-2-0",component:f("/blog/tags/open-bb-terminal-2-0","b22"),exact:!0},{path:"/blog/tags/open-source",component:f("/blog/tags/open-source","fcf"),exact:!0},{path:"/blog/tags/open-startup",component:f("/blog/tags/open-startup","ac2"),exact:!0},{path:"/blog/tags/openbb",component:f("/blog/tags/openbb","c9f"),exact:!0},{path:"/blog/tags/options",component:f("/blog/tags/options","340"),exact:!0},{path:"/blog/tags/options-fam-bot",component:f("/blog/tags/options-fam-bot","80a"),exact:!0},{path:"/blog/tags/package",component:f("/blog/tags/package","ea9"),exact:!0},{path:"/blog/tags/pao-system",component:f("/blog/tags/pao-system","b0d"),exact:!0},{path:"/blog/tags/personalization",component:f("/blog/tags/personalization","142"),exact:!0},{path:"/blog/tags/ph-d-thesis",component:f("/blog/tags/ph-d-thesis","988"),exact:!0},{path:"/blog/tags/platform",component:f("/blog/tags/platform","6f6"),exact:!0},{path:"/blog/tags/product",component:f("/blog/tags/product","264"),exact:!0},{path:"/blog/tags/product-documentation",component:f("/blog/tags/product-documentation","88a"),exact:!0},{path:"/blog/tags/productivity",component:f("/blog/tags/productivity","cb3"),exact:!0},{path:"/blog/tags/programming",component:f("/blog/tags/programming","aa9"),exact:!0},{path:"/blog/tags/project-management",component:f("/blog/tags/project-management","757"),exact:!0},{path:"/blog/tags/publishing",component:f("/blog/tags/publishing","ec3"),exact:!0},{path:"/blog/tags/pypi",component:f("/blog/tags/pypi","6f3"),exact:!0},{path:"/blog/tags/python",component:f("/blog/tags/python","945"),exact:!0},{path:"/blog/tags/recipes",component:f("/blog/tags/recipes","c62"),exact:!0},{path:"/blog/tags/reddit",component:f("/blog/tags/reddit","258"),exact:!0},{path:"/blog/tags/relocation",component:f("/blog/tags/relocation","8bf"),exact:!0},{path:"/blog/tags/remote-work",component:f("/blog/tags/remote-work","0c7"),exact:!0},{path:"/blog/tags/research",component:f("/blog/tags/research","3bd"),exact:!0},{path:"/blog/tags/roadmap",component:f("/blog/tags/roadmap","50e"),exact:!0},{path:"/blog/tags/routines",component:f("/blog/tags/routines","3dc"),exact:!0},{path:"/blog/tags/san-francisco",component:f("/blog/tags/san-francisco","8d2"),exact:!0},{path:"/blog/tags/script-management",component:f("/blog/tags/script-management","057"),exact:!0},{path:"/blog/tags/scriptable",component:f("/blog/tags/scriptable","1dd"),exact:!0},{path:"/blog/tags/sdk",component:f("/blog/tags/sdk","1bd"),exact:!0},{path:"/blog/tags/sector-analysis",component:f("/blog/tags/sector-analysis","c94"),exact:!0},{path:"/blog/tags/seed-stage",component:f("/blog/tags/seed-stage","4e6"),exact:!0},{path:"/blog/tags/self-improvement",component:f("/blog/tags/self-improvement","8f8"),exact:!0},{path:"/blog/tags/self-learning",component:f("/blog/tags/self-learning","f08"),exact:!0},{path:"/blog/tags/sensor-fusion-engineer",component:f("/blog/tags/sensor-fusion-engineer","77b"),exact:!0},{path:"/blog/tags/side-project",component:f("/blog/tags/side-project","0d4"),exact:!0},{path:"/blog/tags/silicon-valley",component:f("/blog/tags/silicon-valley","cdf"),exact:!0},{path:"/blog/tags/skills",component:f("/blog/tags/skills","727"),exact:!0},{path:"/blog/tags/slack",component:f("/blog/tags/slack","6e7"),exact:!0},{path:"/blog/tags/slack-bot",component:f("/blog/tags/slack-bot","c1e"),exact:!0},{path:"/blog/tags/smart-contracts",component:f("/blog/tags/smart-contracts","461"),exact:!0},{path:"/blog/tags/software-development",component:f("/blog/tags/software-development","7bf"),exact:!0},{path:"/blog/tags/software-engineering",component:f("/blog/tags/software-engineering","d67"),exact:!0},{path:"/blog/tags/sorting-algorithm",component:f("/blog/tags/sorting-algorithm","e00"),exact:!0},{path:"/blog/tags/startup",component:f("/blog/tags/startup","121"),exact:!0},{path:"/blog/tags/startup-team",component:f("/blog/tags/startup-team","1ee"),exact:!0},{path:"/blog/tags/startups",component:f("/blog/tags/startups","20f"),exact:!0},{path:"/blog/tags/stock-management",component:f("/blog/tags/stock-management","7ec"),exact:!0},{path:"/blog/tags/stock-market",component:f("/blog/tags/stock-market","e4e"),exact:!0},{path:"/blog/tags/stocks",component:f("/blog/tags/stocks","366"),exact:!0},{path:"/blog/tags/success",component:f("/blog/tags/success","f77"),exact:!0},{path:"/blog/tags/sustainability",component:f("/blog/tags/sustainability","be4"),exact:!0},{path:"/blog/tags/sweepstake",component:f("/blog/tags/sweepstake","94e"),exact:!0},{path:"/blog/tags/target-market-analysis",component:f("/blog/tags/target-market-analysis","27e"),exact:!0},{path:"/blog/tags/tattoo",component:f("/blog/tags/tattoo","51a"),exact:!0},{path:"/blog/tags/team-building",component:f("/blog/tags/team-building","5e8"),exact:!0},{path:"/blog/tags/team-happiness",component:f("/blog/tags/team-happiness","d6b"),exact:!0},{path:"/blog/tags/team-survey",component:f("/blog/tags/team-survey","c26"),exact:!0},{path:"/blog/tags/teamwork",component:f("/blog/tags/teamwork","5e1"),exact:!0},{path:"/blog/tags/tech-startups",component:f("/blog/tags/tech-startups","816"),exact:!0},{path:"/blog/tags/telegram",component:f("/blog/tags/telegram","302"),exact:!0},{path:"/blog/tags/terminal",component:f("/blog/tags/terminal","608"),exact:!0},{path:"/blog/tags/thrillers",component:f("/blog/tags/thrillers","eaa"),exact:!0},{path:"/blog/tags/time-series",component:f("/blog/tags/time-series","fca"),exact:!0},{path:"/blog/tags/time-series-forecasting",component:f("/blog/tags/time-series-forecasting","2d8"),exact:!0},{path:"/blog/tags/trading",component:f("/blog/tags/trading","8c3"),exact:!0},{path:"/blog/tags/transparency",component:f("/blog/tags/transparency","f8b"),exact:!0},{path:"/blog/tags/travel",component:f("/blog/tags/travel","0a0"),exact:!0},{path:"/blog/tags/tweepy",component:f("/blog/tags/tweepy","288"),exact:!0},{path:"/blog/tags/twitter",component:f("/blog/tags/twitter","867"),exact:!0},{path:"/blog/tags/twitter-api",component:f("/blog/tags/twitter-api","07d"),exact:!0},{path:"/blog/tags/ux-ui",component:f("/blog/tags/ux-ui","0ae"),exact:!0},{path:"/blog/tags/visa-process",component:f("/blog/tags/visa-process","7fc"),exact:!0},{path:"/blog/tags/web-3",component:f("/blog/tags/web-3","0f0"),exact:!0},{path:"/blog/tags/web-scraping",component:f("/blog/tags/web-scraping","91c"),exact:!0},{path:"/blog/tags/work-culture",component:f("/blog/tags/work-culture","029"),exact:!0},{path:"/blog/tags/work-life-balance",component:f("/blog/tags/work-life-balance","944"),exact:!0},{path:"/blog/tags/world-cup-2022",component:f("/blog/tags/world-cup-2022","b0c"),exact:!0},{path:"/blog/tags/writing",component:f("/blog/tags/writing","03c"),exact:!0},{path:"/blog/tags/yfinance-api",component:f("/blog/tags/yfinance-api","225"),exact:!0},{path:"/blog/target-market-analysis-with-the-help-of-llms",component:f("/blog/target-market-analysis-with-the-help-of-llms","6d6"),exact:!0},{path:"/blog/the-future-of-finance-with-open-source-and-ai",component:f("/blog/the-future-of-finance-with-open-source-and-ai","1fa"),exact:!0},{path:"/blog/the-new-finai-tech-stack",component:f("/blog/the-new-finai-tech-stack","917"),exact:!0},{path:"/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-research",component:f("/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-research","0e4"),exact:!0},{path:"/blog/the-start-of-my-machine-learning-journey",component:f("/blog/the-start-of-my-machine-learning-journey","9eb"),exact:!0},{path:"/blog/time-series-crossvalidation-for-nn",component:f("/blog/time-series-crossvalidation-for-nn","1be"),exact:!0},{path:"/blog/web3-symbols-and-community",component:f("/blog/web3-symbols-and-community","5e1"),exact:!0},{path:"/blog/why-the-need-for-an-open-source-investment-research-platform",component:f("/blog/why-the-need-for-an-open-source-investment-research-platform","516"),exact:!0},{path:"/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdk",component:f("/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdk","db3"),exact:!0},{path:"/blog/work-life-balance-is-bullsh-t",component:f("/blog/work-life-balance-is-bullsh-t","818"),exact:!0},{path:"/blog/writing-documentation-as-a-founder-is-underrated",component:f("/blog/writing-documentation-as-a-founder-is-underrated","dad"),exact:!0},{path:"/markdown-page",component:f("/markdown-page","c57"),exact:!0},{path:"/",component:f("/","a6d"),exact:!0},{path:"/",component:f("/","9f7"),routes:[{path:"/books/already-read",component:f("/books/already-read","aa3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/books/to-read",component:f("/books/to-read","7a3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/media/news-mentions",component:f("/media/news-mentions","5ae"),exact:!0,sidebar:"tutorialSidebar"},{path:"/media/podcasts",component:f("/media/podcasts","ac2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/media/videos/interviews",component:f("/media/videos/interviews","883"),exact:!0,sidebar:"tutorialSidebar"},{path:"/media/videos/on-stage",component:f("/media/videos/on-stage","3c8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/media/videos/openbb-champions",component:f("/media/videos/openbb-champions","1e0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/media/videos/product-videos",component:f("/media/videos/product-videos","21b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/media/videos/webinars-presentations",component:f("/media/videos/webinars-presentations","c77"),exact:!0,sidebar:"tutorialSidebar"},{path:"/projects",component:f("/projects","78d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/resume/articles",component:f("/resume/articles","d25"),exact:!0,sidebar:"tutorialSidebar"},{path:"/resume/courses",component:f("/resume/courses","784"),exact:!0,sidebar:"tutorialSidebar"},{path:"/resume/education",component:f("/resume/education","7cc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/resume/experience",component:f("/resume/experience","b56"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"*",component:f("*")}]},98934:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>r});var a=n(67294);const o=a.createContext(!1);function r(e){let{children:t}=e;const[n,r]=(0,a.useState)(!1);return(0,a.useEffect)((()=>{r(!0)}),[]),a.createElement(o.Provider,{value:n},t)}},97221:(e,t,n)=>{"use strict";var a=n(67294),o=n(73935),r=n(73727),i=n(70405),l=n(10412);const s=[n(32497),n(3310),n(18320),n(52295)];var c=n(723),u=n(16550),d=n(18790);function f(e){let{children:t}=e;return a.createElement(a.Fragment,null,t)}var g=n(87462),b=n(35742),p=n(52263),m=n(44996),h=n(86668),v=n(1944),y=n(94711),w=n(19727),_=n(43320),k=n(18780),x=n(90197);function E(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,p.Z)(),n=(0,y.l)();return a.createElement(b.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return a.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),a.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function S(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,p.Z)(),o=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,p.Z)(),{pathname:a}=(0,u.TH)();return e+(0,k.applyTrailingSlash)((0,m.Z)(a),{trailingSlash:n,baseUrl:t})}(),r=t?`${n}${t}`:o;return a.createElement(b.Z,null,a.createElement("meta",{property:"og:url",content:r}),a.createElement("link",{rel:"canonical",href:r}))}function C(){const{i18n:{currentLocale:e}}=(0,p.Z)(),{metadata:t,image:n}=(0,h.L)();return a.createElement(a.Fragment,null,a.createElement(b.Z,null,a.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),a.createElement("body",{className:w.h})),n&&a.createElement(v.d,{image:n}),a.createElement(S,null),a.createElement(E,null),a.createElement(x.Z,{tag:_.HX,locale:e}),a.createElement(b.Z,null,t.map(((e,t)=>a.createElement("meta",(0,g.Z)({key:t},e))))))}const T=new Map;function j(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var L=n(98934),M=n(58940);function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a{const a=t.default?.[e]??t[e];return a?.(...n)}));return()=>o.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,a.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const a=t.pathname===n.pathname,o=t.hash===n.hash,r=t.search===n.search;if(a&&o&&!r)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),A("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class P extends a.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return a.createElement(N,{previousLocation:this.previousLocation,location:t},a.createElement(u.AW,{location:t,render:()=>e}))}}const O=P,D="__docusaurus-base-url-issue-banner-container",I="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function z(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
    \n

    Your Docusaurus site did not load properly.

    \n

    A very common reason is a wrong site baseUrl configuration.

    \n

    Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

    \n

    We suggest trying baseUrl =

    \n
    \n`}(e)).replace(/{window[B]=!1}),[]),a.createElement(a.Fragment,null,!l.Z.canUseDOM&&a.createElement(b.Z,null,a.createElement("script",null,z(e))),a.createElement("div",{id:D}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,p.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?a.createElement($,null):null}function q(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:r}}=(0,p.Z)(),i=(0,m.Z)(e),{htmlLang:l,direction:s}=r[o];return a.createElement(b.Z,null,a.createElement("html",{lang:l,dir:s}),a.createElement("title",null,t),a.createElement("meta",{property:"og:title",content:t}),a.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&a.createElement("link",{rel:"icon",href:i}))}var H=n(44763),G=n(72389);function Z(){const e=(0,G.Z)();return a.createElement(b.Z,null,a.createElement("html",{"data-has-hydrated":e}))}function V(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return a.createElement(H.Z,null,a.createElement(M.M,null,a.createElement(L.t,null,a.createElement(f,null,a.createElement(q,null),a.createElement(C,null),a.createElement(U,null),a.createElement(O,{location:j(t)},e)),a.createElement(Z,null))))}var W=n(16887);const Y=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const a=document.createElement("link");a.setAttribute("rel","prefetch"),a.setAttribute("href",e),a.onload=()=>t(),a.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(a)}))}:function(e){return new Promise(((t,n)=>{const a=new XMLHttpRequest;a.open("GET",e,!0),a.withCredentials=!0,a.onload=()=>{200===a.status?t():n()},a.send(null)}))};var Q=n(99670);const K=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(W).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Q.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Y(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),R(e))},te=Object.freeze(ee);if(l.Z.canUseDOM){window.docusaurus=te;const e=o.hydrate;R(window.location.pathname).then((()=>{e(a.createElement(i.B6,null,a.createElement(r.VK,null,a.createElement(V,null))),document.getElementById("__docusaurus"))}))}},58940:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>d});var a=n(67294),o=n(36809);const r=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/","mainDocId":"projects","docs":[{"id":"books/already-read","path":"/books/already-read","sidebar":"tutorialSidebar"},{"id":"books/to-read","path":"/books/to-read","sidebar":"tutorialSidebar"},{"id":"media/news-mentions","path":"/media/news-mentions","sidebar":"tutorialSidebar"},{"id":"media/podcasts","path":"/media/podcasts","sidebar":"tutorialSidebar"},{"id":"media/videos/interviews","path":"/media/videos/interviews","sidebar":"tutorialSidebar"},{"id":"media/videos/on-stage","path":"/media/videos/on-stage","sidebar":"tutorialSidebar"},{"id":"media/videos/openbb-champions","path":"/media/videos/openbb-champions","sidebar":"tutorialSidebar"},{"id":"media/videos/product-videos","path":"/media/videos/product-videos","sidebar":"tutorialSidebar"},{"id":"media/videos/webinars-presentations","path":"/media/videos/webinars-presentations","sidebar":"tutorialSidebar"},{"id":"projects","path":"/projects","sidebar":"tutorialSidebar"},{"id":"resume/articles","path":"/resume/articles","sidebar":"tutorialSidebar"},{"id":"resume/courses","path":"/resume/courses","sidebar":"tutorialSidebar"},{"id":"resume/education","path":"/resume/education","sidebar":"tutorialSidebar"},{"id":"resume/experience","path":"/resume/experience","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/projects","label":"projects"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(57529);const s=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"docusaurus-tailwindcss":{"type":"local"}}}'),c={siteConfig:o.default,siteMetadata:s,globalData:r,i18n:i,codeTranslations:l},u=a.createContext(c);function d(e){let{children:t}=e;return a.createElement(u.Provider,{value:c},t)}},44763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var a=n(67294),o=n(10412),r=n(35742),i=n(18780),l=n(7961);function s(e){let{error:t,tryAgain:n}=e;return a.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},a.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),a.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),a.createElement(c,{error:t}))}function c(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return a.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function u(e){let{error:t,tryAgain:n}=e;return a.createElement(f,{fallback:()=>a.createElement(s,{error:t,tryAgain:n})},a.createElement(r.Z,null,a.createElement("title",null,"Page Error")),a.createElement(l.Z,null,a.createElement(s,{error:t,tryAgain:n})))}const d=e=>a.createElement(u,e);class f extends a.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},10412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const a="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:a,canUseEventListeners:a&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:a&&"IntersectionObserver"in window,canUseViewport:a&&"screen"in window}},35742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=n(67294),o=n(70405);function r(e){return a.createElement(o.ql,e)}},39960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var a=n(87462),o=n(67294),r=n(73727),i=n(18780),l=n(52263),s=n(13919),c=n(10412);const u=o.createContext({collectLink:()=>{}});var d=n(44996);function f(e,t){let{isNavLink:n,to:f,href:g,activeClassName:b,isActive:p,"data-noBrokenLinkCheck":m,autoAddBaseUrl:h=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:_}=(0,d.C)(),k=(0,o.useContext)(u),x=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>x.current));const E=f||g;const S=(0,s.Z)(E),C=E?.replace("pathname://","");let T=void 0!==C?(j=C,h&&(e=>e.startsWith("/"))(j)?_(j):j):void 0;var j;T&&S&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const L=(0,o.useRef)(!1),M=n?r.OL:r.rU,A=c.Z.canUseIntersectionObserver,N=(0,o.useRef)(),R=()=>{L.current||null==T||(window.docusaurus.preload(T),L.current=!0)};(0,o.useEffect)((()=>(!A&&S&&null!=T&&window.docusaurus.prefetch(T),()=>{A&&N.current&&N.current.disconnect()})),[N,T,A,S]);const P=T?.startsWith("#")??!1,O=!T||!S||P;return O||m||k.collectLink(T),O?o.createElement("a",(0,a.Z)({ref:x,href:T},E&&!S&&{target:"_blank",rel:"noopener noreferrer"},v)):o.createElement(M,(0,a.Z)({},v,{onMouseEnter:R,onTouchStart:R,innerRef:e=>{x.current=e,A&&e&&S&&(N.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(N.current.unobserve(e),N.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),N.current.observe(e))},to:T},n&&{isActive:p,activeClassName:b}))}const g=o.forwardRef(f)},11875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=()=>null},95999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var a=n(67294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,a.isValidElement)(e)))?n.map(((e,t)=>(0,a.isValidElement)(e)?a.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var r=n(57529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return r[t??n]??n??t}function l(e,t){let{message:n,id:a}=e;return o(i({message:n,id:a}),t)}function s(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return a.createElement(a.Fragment,null,o(l,r))}},29935:(e,t,n)=>{"use strict";n.d(t,{m:()=>a});const a="default"},13919:(e,t,n)=>{"use strict";function a(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!a(e)}n.d(t,{Z:()=>o,b:()=>a})},44996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var a=n(67294),o=n(52263),r=n(13919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,a.useCallback)(((n,a)=>function(e,t,n,a){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===a?{}:a;if(!n||n.startsWith("#")||(0,r.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,a)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},52263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=n(67294),o=n(58940);function r(){return(0,a.useContext)(o._)}},72389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=n(67294),o=n(98934);function r(){return(0,a.useContext)(o._)}},99670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const a=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[r,i]=n;const l=o?`${o}.${r}`:r;a(i)?e(i,l):t[l]=i}))}(e),t}},30226:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>r});var a=n(67294);const o=a.createContext(null);function r(e){let{children:t,value:n}=e;const r=a.useContext(o),i=(0,a.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const a={...t.data,...n?.data};return{plugin:t.plugin,data:a}}({parent:r,value:n})),[r,n]);return a.createElement(o.Provider,{value:i},t)}},80143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>p,gA:()=>f,_r:()=>u,Jo:()=>m,zh:()=>d,yW:()=>b,gB:()=>g});var a=n(16550),o=n(52263),r=n(29935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,a.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,a.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((a=>{a.id===t&&(n[e.name]=a)}))})),n}(o.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>function(e,t,n){void 0===t&&(t=r.m),void 0===n&&(n={});const a=i(e),o=a?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,a.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,a.LX)(t,{path:n.path,exact:!1,strict:!1})})),r=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!r&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return r}(t,n,e)}function g(e){return d(e).versions}function b(e){const t=d(e);return l(t)}function p(e){const t=d(e),{pathname:n}=(0,a.TH)();return s(t,n)}function m(e){const t=d(e),{pathname:n}=(0,a.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},18320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var a=n(74865),o=n.n(a);o().configure({showSpinner:!1});const r={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var a=n(87410),o=n(36809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:a}=t;globalThis.Prism=e,a.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(a.Z)},39471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=n(67294);const o={iconExternalLink:"iconExternalLink_nPIU"};function r(e){let{width:t=13.5,height:n=13.5}=e;return a.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},a.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},7961:(e,t,n)=>{"use strict";n.d(t,{Z:()=>dt});var a=n(67294),o=n(86010),r=n(44763),i=n(1944),l=n(87462),s=n(16550),c=n(95999),u=n(85936);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function g(){const e=(0,a.useRef)(null),{action:t}=(0,s.k6)(),n=(0,a.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,u.S)((n=>{let{location:a}=n;e.current&&!a.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const b=(0,c.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function p(e){const t=e.children??b,{containerRef:n,onClick:o}=g();return a.createElement("div",{ref:n,role:"region","aria-label":b},a.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:o}),t))}var m=n(35281),h=n(19727);const v={skipToContent:"skipToContent_fXgn"};function y(){return a.createElement(p,{className:v.skipToContent})}var w=n(86668),_=n(59689);function k(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:r=1.2,className:i,...s}=e;return a.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),a.createElement("g",{stroke:o,strokeWidth:r},a.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const x={closeButton:"closeButton_CVFx"};function E(e){return a.createElement("button",(0,l.Z)({type:"button","aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",x.closeButton,e.className)}),a.createElement(k,{width:14,height:14,strokeWidth:3.1}))}const S={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return a.createElement("div",(0,l.Z)({},e,{className:(0,o.Z)(S.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function j(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,_.nT)();if(!t)return null;const{backgroundColor:o,textColor:r,isCloseable:i}=e;return a.createElement("div",{className:T.announcementBar,style:{backgroundColor:o,color:r},role:"banner"},i&&a.createElement("div",{className:T.announcementBarPlaceholder}),a.createElement(C,{className:T.announcementBarContent}),i&&a.createElement(E,{onClick:n,className:T.announcementBarClose}))}var L=n(72961),M=n(12466);var A=n(902),N=n(13102);const R=a.createContext(null);function P(e){let{children:t}=e;const n=function(){const e=(0,L.e)(),t=(0,N.HY)(),[n,o]=(0,a.useState)(!1),r=null!==t.component,i=(0,A.D9)(r);return(0,a.useEffect)((()=>{r&&!i&&o(!0)}),[r,i]),(0,a.useEffect)((()=>{r?e.shown||o(!0):o(!1)}),[e.shown,r]),(0,a.useMemo)((()=>[n,o]),[n])}();return a.createElement(R.Provider,{value:n},t)}function O(e){if(e.component){const t=e.component;return a.createElement(t,e.props)}}function D(){const e=(0,a.useContext)(R);if(!e)throw new A.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,a.useCallback)((()=>n(!1)),[n]),r=(0,N.HY)();return(0,a.useMemo)((()=>({shown:t,hide:o,content:O(r)})),[o,r,t])}function I(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:i}=D();return a.createElement("div",{className:"navbar-sidebar"},t,a.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},a.createElement("div",{className:"navbar-sidebar__item menu"},n),a.createElement("div",{className:"navbar-sidebar__item menu"},r)))}var F=n(92949),B=n(72389);function z(e){return a.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),a.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function $(e){return a.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),a.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:r,onChange:i}=e;const l=(0,B.Z)(),s=(0,c.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,c.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return a.createElement("div",{className:(0,o.Z)(U.toggle,t)},a.createElement("button",{className:(0,o.Z)("clean-btn",U.toggleButton,!l&&U.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===r?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},a.createElement(z,{className:(0,o.Z)(U.toggleIcon,U.lightToggleIcon)}),a.createElement($,{className:(0,o.Z)(U.toggleIcon,U.darkToggleIcon)})))}const H=a.memo(q),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function Z(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:r,setColorMode:i}=(0,F.I)();return o?null:a.createElement(H,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:r,onChange:i})}var V=n(21327);function W(){return a.createElement(V.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,L.e)();return a.createElement("button",{type:"button","aria-label":(0,c.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},a.createElement(k,{color:"var(--ifm-color-emphasis-600)"}))}function Q(){return a.createElement("div",{className:"navbar-sidebar__brand"},a.createElement(W,null),a.createElement(Z,{className:"margin-right--md"}),a.createElement(Y,null))}var K=n(39960),X=n(44996),J=n(13919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(39471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:r,label:i,html:s,isDropdownLink:c,prependBaseUrlToHref:u,...d}=e;const f=(0,X.Z)(o),g=(0,X.Z)(t),b=(0,X.Z)(r,{forcePrependBaseUrl:!0}),p=i&&r&&!(0,J.Z)(r),m=s?{dangerouslySetInnerHTML:{__html:s}}:{children:a.createElement(a.Fragment,null,i,p&&a.createElement(te.Z,c&&{width:12,height:12}))};return r?a.createElement(K.Z,(0,l.Z)({href:u?b:r},d,m)):a.createElement(K.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(g)},d,m))}function ae(e){let{className:t,isDropdownItem:n=!1,...r}=e;const i=a.createElement(ne,(0,l.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},r));return n?a.createElement("li",null,i):i}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return a.createElement("li",{className:"menu__list-item"},a.createElement(ne,(0,l.Z)({className:(0,o.Z)("menu__link",t)},r)))}function re(e){let{mobile:t=!1,position:n,...o}=e;const r=t?oe:ae;return a.createElement(r,(0,l.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(86043),le=n(48596),se=n(52263);function ce(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:r,onClick:i,...s}=e;const c=(0,a.useRef)(null),[u,d]=(0,a.useState)(!1);return(0,a.useEffect)((()=>{const e=e=>{c.current&&!c.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[c]),a.createElement("div",{ref:c,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},a.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",r)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))}}),s.children??s.label),a.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>a.createElement(Ee,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:r,onClick:i,...c}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:f,toggleCollapsed:g,setCollapsed:b}=(0,ie.u)({initialState:()=>!d});return(0,a.useEffect)((()=>{d&&b(!d)}),[u,d,b]),a.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":f})},a.createElement(ne,(0,l.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},c,{onClick:e=>{e.preventDefault(),g()}}),c.children??c.label),a.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>a.createElement(Ee,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const o=t?de:ue;return a.createElement(o,n)}var ge=n(94711);function be(e){let{width:t=20,height:n=20,...o}=e;return a.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),a.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const pe="iconLanguage_nlXk";var me=n(11875);const he={searchBox:"searchBox_ZlJk"};function ve(e){let{children:t,className:n}=e;return a.createElement("div",{className:(0,o.Z)(n,he.searchBox)},t)}var ye=n(80143),we=n(52802);var _e=n(60373);const ke=e=>e.docs.find((t=>t.id===e.mainDocId));const xe={default:re,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...r}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,se.Z)(),f=(0,ge.l)(),{search:g,hash:b}=(0,s.TH)(),p=[...n,...u.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${g}${b}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],m=t?(0,c.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return a.createElement(fe,(0,l.Z)({},r,{mobile:t,label:a.createElement(a.Fragment,null,a.createElement(be,{className:pe}),m),items:p}))},search:function(e){let{mobile:t,className:n}=e;return t?null:a.createElement(ve,{className:n},a.createElement(me.Z,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return a.createElement(l,{className:(0,o.Z)({navbar__item:!r&&!i,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...r}=e;const{activeDoc:i}=(0,ye.Iw)(o),s=(0,we.vY)(t,o);return null===s?null:a.createElement(re,(0,l.Z)({exact:!0},r,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...r}=e;const{activeDoc:i}=(0,ye.Iw)(o),s=(0,we.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return a.createElement(re,(0,l.Z)({exact:!0},r,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...r}=e;const i=(0,we.lO)(o)[0],s=t??i.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return a.createElement(re,(0,l.Z)({},r,{label:s,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:r,dropdownItemsAfter:i,...u}=e;const{search:d,hash:f}=(0,s.TH)(),g=(0,ye.Iw)(n),b=(0,ye.gB)(n),{savePreferredVersionName:p}=(0,_e.J)(n),m=[...r,...b.map((e=>{const t=g.alternateDocVersions[e.name]??ke(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===g.activeVersion,onClick:()=>p(e.name)}})),...i],h=(0,we.lO)(n)[0],v=t&&m.length>1?(0,c.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,y=t&&m.length>1?void 0:ke(h).path;return m.length<=1?a.createElement(re,(0,l.Z)({},u,{mobile:t,label:v,to:y,isActive:o?()=>!1:void 0})):a.createElement(fe,(0,l.Z)({},u,{mobile:t,label:v,to:y,items:m,isActive:o?()=>!1:void 0}))}};function Ee(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),r=xe[o];if(!r)throw new Error(`No NavbarItem component found for type "${t}".`);return a.createElement(r,n)}function Se(){const e=(0,L.e)(),t=(0,w.L)().navbar.items;return a.createElement("ul",{className:"menu__list"},t.map(((t,n)=>a.createElement(Ee,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ce(e){return a.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),a.createElement(c.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Te(){const e=0===(0,w.L)().navbar.items.length,t=D();return a.createElement(a.Fragment,null,!e&&a.createElement(Ce,{onClick:()=>t.hide()}),t.content)}function je(){const e=(0,L.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,a.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?a.createElement(I,{header:a.createElement(Q,null),primaryMenu:a.createElement(Se,null),secondaryMenu:a.createElement(Te,null)}):null}const Le={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Me(e){return a.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function Ae(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:r}}=(0,w.L)(),i=(0,L.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,a.useState)(e),o=(0,a.useRef)(!1),r=(0,a.useRef)(0),i=(0,a.useCallback)((e=>{null!==e&&(r.current=e.getBoundingClientRect().height)}),[]);return(0,M.RF)(((t,a)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+c{if(!e)return;const a=t.location.hash;if(a?document.getElementById(a.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return a.createElement("nav",{ref:l,"aria-label":(0,c.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Le.navbarHideable,!s&&Le.navbarHidden],{"navbar--dark":"dark"===r,"navbar--primary":"primary"===r,"navbar-sidebar--show":i.shown})},t,a.createElement(Me,{onClick:i.toggle}),a.createElement(je,null))}var Ne=n(18780);const Re={errorBoundaryError:"errorBoundaryError_a6uf"};function Pe(e){return a.createElement("button",(0,l.Z)({type:"button"},e),a.createElement(c.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Oe(e){let{error:t}=e;const n=(0,Ne.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return a.createElement("p",{className:Re.errorBoundaryError},n)}class De extends a.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Ie="right";function Fe(e){let{width:t=30,height:n=30,className:o,...r}=e;return a.createElement("svg",(0,l.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},r),a.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Be(){const{toggle:e,shown:t}=(0,L.e)();return a.createElement("button",{onClick:e,"aria-label":(0,c.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},a.createElement(Fe,null))}const ze={colorModeToggle:"colorModeToggle_DEke"};function $e(e){let{items:t}=e;return a.createElement(a.Fragment,null,t.map(((e,t)=>a.createElement(De,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},a.createElement(Ee,e)))))}function Ue(e){let{left:t,right:n}=e;return a.createElement("div",{className:"navbar__inner"},a.createElement("div",{className:"navbar__items"},t),a.createElement("div",{className:"navbar__items navbar__items--right"},n))}function qe(){const e=(0,L.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??Ie)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),r=t.find((e=>"search"===e.type));return a.createElement(Ue,{left:a.createElement(a.Fragment,null,!e.disabled&&a.createElement(Be,null),a.createElement(W,null),a.createElement($e,{items:n})),right:a.createElement(a.Fragment,null,a.createElement($e,{items:o}),a.createElement(Z,{className:ze.colorModeToggle}),!r&&a.createElement(ve,null,a.createElement(me.Z,null)))})}function He(){return a.createElement(Ae,null,a.createElement(qe,null))}function Ge(e){let{item:t}=e;const{to:n,href:o,label:r,prependBaseUrlToHref:i,...s}=t,c=(0,X.Z)(n),u=(0,X.Z)(o,{forcePrependBaseUrl:!0});return a.createElement(K.Z,(0,l.Z)({className:"footer__link-item"},o?{href:i?u:o}:{to:c},s),r,o&&!(0,J.Z)(o)&&a.createElement(te.Z,null))}function Ze(e){let{item:t}=e;return t.html?a.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):a.createElement("li",{key:t.href??t.to,className:"footer__item"},a.createElement(Ge,{item:t}))}function Ve(e){let{column:t}=e;return a.createElement("div",{className:"col footer__col"},a.createElement("div",{className:"footer__title"},t.title),a.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>a.createElement(Ze,{key:t,item:e})))))}function We(e){let{columns:t}=e;return a.createElement("div",{className:"row footer__links"},t.map(((e,t)=>a.createElement(Ve,{key:t,column:e}))))}function Ye(){return a.createElement("span",{className:"footer__link-separator"},"\xb7")}function Qe(e){let{item:t}=e;return t.html?a.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):a.createElement(Ge,{item:t})}function Ke(e){let{links:t}=e;return a.createElement("div",{className:"footer__links text--center"},a.createElement("div",{className:"footer__links"},t.map(((e,n)=>a.createElement(a.Fragment,{key:n},a.createElement(Qe,{item:e}),t.length!==n+1&&a.createElement(Ye,null))))))}function Xe(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?a.createElement(We,{columns:t}):a.createElement(Ke,{links:t})}var Je=n(50941);const et={footerLogoLink:"footerLogoLink_BH7S"};function tt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return a.createElement(Je.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function nt(e){let{logo:t}=e;return t.href?a.createElement(K.Z,{href:t.href,className:et.footerLogoLink,target:t.target},a.createElement(tt,{logo:t})):a.createElement(tt,{logo:t})}function at(e){let{copyright:t}=e;return a.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ot(e){let{style:t,links:n,logo:r,copyright:i}=e;return a.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},a.createElement("div",{className:"container container-fluid"},n,(r||i)&&a.createElement("div",{className:"footer__bottom text--center"},r&&a.createElement("div",{className:"margin-bottom--sm"},r),i)))}function rt(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:r}=e;return a.createElement(ot,{style:r,links:n&&n.length>0&&a.createElement(Xe,{links:n}),logo:o&&a.createElement(nt,{logo:o}),copyright:t&&a.createElement(at,{copyright:t})})}const it=a.memo(rt),lt=(0,A.Qc)([F.S,_.pl,M.OC,_e.L5,i.VC,function(e){let{children:t}=e;return a.createElement(N.n2,null,a.createElement(L.M,null,a.createElement(P,null,t)))}]);function st(e){let{children:t}=e;return a.createElement(lt,null,t)}function ct(e){let{error:t,tryAgain:n}=e;return a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(c.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),a.createElement("div",{className:"margin-vert--lg"},a.createElement(Pe,{onClick:n,className:"button button--primary shadow--lw"})),a.createElement("hr",null),a.createElement("div",{className:"margin-vert--md"},a.createElement(Oe,{error:t})))))}const ut={mainWrapper:"mainWrapper_z2l0"};function dt(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:c}=e;return(0,h.t)(),a.createElement(st,null,a.createElement(i.d,{title:s,description:c}),a.createElement(y,null),a.createElement(j,null),a.createElement(He,null),a.createElement("div",{id:d,className:(0,o.Z)(m.k.wrapper.main,ut.mainWrapper,l)},a.createElement(r.Z,{fallback:e=>a.createElement(ct,e)},t)),!n&&a.createElement(it,null))}},21327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var a=n(87462),o=n(67294),r=n(39960),i=n(44996),l=n(52263),s=n(86668),c=n(50941);function u(e){let{logo:t,alt:n,imageClassName:a}=e;const r={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=o.createElement(c.Z,{className:t.className,sources:r,height:t.height,width:t.width,alt:n,style:t.style});return a?o.createElement("div",{className:a},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:c}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...g}=e,b=(0,i.Z)(c?.href||"/"),p=n?"":t,m=c?.alt??p;return o.createElement(r.Z,(0,a.Z)({to:b},g,c?.target&&{target:c.target}),c&&o.createElement(u,{logo:c,alt:m,imageClassName:d}),null!=n&&o.createElement("b",{className:f},n))}},90197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=n(67294),o=n(35742);function r(e){let{locale:t,version:n,tag:r}=e;const i=t;return a.createElement(o.Z,null,t&&a.createElement("meta",{name:"docusaurus_locale",content:t}),n&&a.createElement("meta",{name:"docusaurus_version",content:n}),r&&a.createElement("meta",{name:"docusaurus_tag",content:r}),i&&a.createElement("meta",{name:"docsearch:language",content:i}),n&&a.createElement("meta",{name:"docsearch:version",content:n}),r&&a.createElement("meta",{name:"docsearch:docusaurus_tag",content:r}))}},50941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var a=n(87462),o=n(67294),r=n(86010),i=n(72389),l=n(92949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function c(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:c,className:u,alt:d,...f}=e,g=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,g.map((e=>o.createElement("img",(0,a.Z)({key:e,src:c[e],alt:d,className:(0,r.Z)(s.themedImage,s[`themedImage--${e}`],u)},f)))))}},86043:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>m});var a=n(87462),o=n(67294),r=n(10412),i=n(91442);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,a]=(0,o.useState)(t??!1),r=(0,o.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:r}}const c={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?c:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const r=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??l}`,height:`${t}px`}}function s(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!r.current)return d(e,n),void(r.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function g(e){if(!r.Z.canUseDOM)return e?c:u}function b(e){let{as:t="div",collapsed:n,children:a,animation:r,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const c=(0,o.useRef)(null);return f({collapsibleRef:c,collapsed:n,animation:r}),o.createElement(t,{ref:c,style:s?void 0:g(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(c.current,n),i?.(n))},className:l},a)}function p(e){let{collapsed:t,...n}=e;const[r,i]=(0,o.useState)(!t),[l,s]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{r&&s(t)}),[r,t]),r?o.createElement(b,(0,a.Z)({},n,{collapsed:l})):null}function m(e){let{lazy:t,...n}=e;const a=t?p:b;return o.createElement(a,n)}},59689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>b,pl:()=>g});var a=n(67294),o=n(72389),r=n(50012),i=n(902),l=n(86668);const s=(0,r.WA)("docusaurus.announcement.dismiss"),c=(0,r.WA)("docusaurus.announcement.id"),u=()=>"true"===s.get(),d=e=>s.set(String(e)),f=a.createContext(null);function g(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.Z)(),[n,r]=(0,a.useState)((()=>!!t&&u()));(0,a.useEffect)((()=>{r(u())}),[]);const i=(0,a.useCallback)((()=>{d(!0),r(!0)}),[]);return(0,a.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const a=t!==n;c.set(t),a&&d(!1),!a&&u()||r(!1)}),[e]),(0,a.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return a.createElement(f.Provider,{value:n},t)}function b(){const e=(0,a.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},92949:(e,t,n)=>{"use strict";n.d(t,{I:()=>m,S:()=>p});var a=n(67294),o=n(10412),r=n(902),i=n(50012),l=n(86668);const s=a.createContext(void 0),c="theme",u=(0,i.WA)(c),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,g=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),b=e=>{u.set(f(e))};function p(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,r]=(0,a.useState)(g(e));(0,a.useEffect)((()=>{t&&u.del()}),[t]);const i=(0,a.useCallback)((function(t,a){void 0===a&&(a={});const{persist:o=!0}=a;t?(r(t),o&&b(t)):(r(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),u.del())}),[n,e]);(0,a.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,a.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=u.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,a.useRef)(!1);return(0,a.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),a=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(a),()=>e.removeListener(a)}),[i,t,n]),(0,a.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return a.createElement(s.Provider,{value:n},t)}function m(){const e=(0,a.useContext)(s);if(null==e)throw new r.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},60373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>m});var a=n(67294),o=n(80143),r=n(29935),i=n(86668),l=n(52802),s=n(902),c=n(50012);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,c.WA)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(u(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const g=a.createContext(null);function b(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,a.useMemo)((()=>Object.keys(e)),[e]),[r,l]=(0,a.useState)((()=>f(n)));(0,a.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:a}=e;function o(e){const t=d.read(e,n);return a[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[r,(0,a.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function p(e){let{children:t}=e;const n=b();return a.createElement(g.Provider,{value:n},t)}function m(e){let{children:t}=e;return l.cE?a.createElement(p,null,t):a.createElement(a.Fragment,null,t)}function h(){const e=(0,a.useContext)(g);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=r.m);const t=(0,o.zh)(e),[n,i]=h(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,a.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var a=n(67294),o=n(902);const r=Symbol("EmptyContext"),i=a.createContext(r);function l(e){let{children:t,name:n,items:o}=e;const r=(0,a.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return a.createElement(i.Provider,{value:r},t)}function s(){const e=(0,a.useContext)(i);if(e===r)throw new o.i6("DocsSidebarProvider");return e}},72961:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>g});var a=n(67294),o=n(13102),r=n(87524),i=n(16550),l=(n(61688),n(902));function s(e){!function(e){const t=(0,i.k6)(),n=(0,l.zX)(e);(0,a.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(86668);const u=a.createContext(void 0);function d(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,c.L)().navbar;return 0===t.length&&!e.component}(),t=(0,r.i)(),n=!e&&"mobile"===t,[i,l]=(0,a.useState)(!1);s((()=>{if(i)return l(!1),!1}));const u=(0,a.useCallback)((()=>{l((e=>!e))}),[]);return(0,a.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,a.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:i})),[e,n,u,i])}function f(e){let{children:t}=e;const n=d();return a.createElement(u.Provider,{value:n},t)}function g(){const e=a.useContext(u);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},13102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var a=n(67294),o=n(902);const r=a.createContext(null);function i(e){let{children:t}=e;const n=(0,a.useState)({component:null,props:null});return a.createElement(r.Provider,{value:n},t)}function l(){const e=(0,a.useContext)(r);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,a.useContext)(r);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,o.Ql)(n);return(0,a.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,a.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},19727:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>r});var a=n(67294);const o="navigation-with-keyboard";function r(){(0,a.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},87524:(e,t,n)=>{"use strict";n.d(t,{i:()=>c});var a=n(67294),o=n(10412);const r={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return o.Z.canUseDOM?window.innerWidth>i?r.desktop:r.mobile:r.ssr}const s=!1;function c(){const[e,t]=(0,a.useState)((()=>s?"ssr":l()));return(0,a.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},35281:(e,t,n)=>{"use strict";n.d(t,{k:()=>a});const a={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},91442:(e,t,n)=>{"use strict";function a(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>a})},52802:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>p,cE:()=>d,hI:()=>_,lO:()=>v,vY:()=>w,oz:()=>y,s1:()=>h});var a=n(67294),o=n(16550),r=n(18790),i=n(80143),l=n(60373),s=n(1116);function c(e){return Array.from(new Set(e))}var u=n(48596);const d=!!i._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const g=(e,t)=>void 0!==e&&(0,u.Mg)(e,t),b=(e,t)=>e.some((e=>p(e,t)));function p(e,t){return"link"===e.type?g(e.href,t):"category"===e.type&&(g(e.href,t)||b(e.items,t))}function m(e){let{sidebarItems:t,pathname:n,onlyCategories:a=!1}=e;const o=[];return function e(t){for(const r of t)if("category"===r.type&&((0,u.Mg)(r.href,n)||e(r.items))||"link"===r.type&&(0,u.Mg)(r.href,n)){return a&&"category"!==r.type||o.unshift(r),!0}return!1}(t),o}function h(){const e=(0,s.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?m({sidebarItems:e.items,pathname:t}):null}function v(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,i.yW)(e);return(0,a.useMemo)((()=>c([t,n,o].filter(Boolean))),[t,n,o])}function y(e,t){const n=v(t);return(0,a.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),a=t.find((t=>t[0]===e));if(!a)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return a[1]}),[e,n])}function w(e,t){const n=v(t);return(0,a.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),a=t.find((t=>t.id===e));if(!a){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${c(t.map((e=>e.id))).join("\n- ")}`)}return a}),[e,n])}function _(e){let{route:t,versionMetadata:n}=e;const a=(0,o.TH)(),i=t.routes,l=i.find((e=>(0,o.LX)(a.pathname,e)));if(!l)return null;const s=l.sidebar,c=s?n.docsSidebars[s]:void 0;return{docElement:(0,r.H)(i),sidebarName:s,sidebarItems:c}}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>u,VC:()=>g});var a=n(67294),o=n(86010),r=n(35742),i=n(30226);function l(){const e=a.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(44996),c=n(52263);function u(e){let{title:t,description:n,keywords:o,image:i,children:l}=e;const u=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:a}=t;return e?.trim().length?`${e.trim()} ${a} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return a.createElement(r.Z,null,t&&a.createElement("title",null,u),t&&a.createElement("meta",{property:"og:title",content:u}),n&&a.createElement("meta",{name:"description",content:n}),n&&a.createElement("meta",{property:"og:description",content:n}),o&&a.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),f&&a.createElement("meta",{property:"og:image",content:f}),f&&a.createElement("meta",{name:"twitter:image",content:f}),l)}const d=a.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=a.useContext(d),l=(0,o.Z)(i,t);return a.createElement(d.Provider,{value:l},a.createElement(r.Z,null,a.createElement("html",{className:l})),n)}function g(e){let{children:t}=e;const n=l(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return a.createElement(f,{className:(0,o.Z)(r,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>c,Ql:()=>s,i6:()=>l,zX:()=>r});var a=n(67294);const o=n(10412).Z.canUseDOM?a.useLayoutEffect:a.useEffect;function r(e){const t=(0,a.useRef)(e);return o((()=>{t.current=e}),[e]),(0,a.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,a.useRef)();return o((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,a.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return a.createElement(a.Fragment,null,e.reduceRight(((e,t)=>a.createElement(t,null,e)),n))}}},48596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var a=n(67294),o=n(723),r=n(52263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,r.Z)().siteConfig;return(0,a.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function a(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(a)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},12466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>s,RF:()=>d});var a=n(67294),o=n(10412),r=n(72389),i=n(902);const l=a.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,a.useRef)(!0);return(0,a.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return a.createElement(l.Provider,{value:n},t)}function c(){const e=(0,a.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const u=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),o=(0,a.useRef)(u()),r=(0,i.zX)(e);(0,a.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();r(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[r,n,...t])}function f(){const e=(0,a.useRef)(null),t=(0,r.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function a(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&ot&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},43320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>a,os:()=>o});n(52263);const a="default";function o(e,t){return`docs-${e}-${t}`}},50012:(e,t,n)=>{"use strict";n.d(t,{WA:()=>s});n(67294),n(61688);const a="localStorage";function o(e){let{key:t,oldValue:n,newValue:a,storage:o}=e;if(n===a)return;const r=document.createEvent("StorageEvent");r.initStorageEvent("storage",!1,!1,t,n,a,window.location.href,o),window.dispatchEvent(r)}function r(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=r(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const a=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:a,newValue:t,storage:n})}catch(a){console.error(`Docusaurus storage error, can't set ${e}=${t}`,a)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const a=a=>{a.storageArea===n&&a.key===e&&t(a)};return window.addEventListener("storage",a),()=>window.removeEventListener("storage",a)}catch(a){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,a),()=>{}}}}}},94711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var a=n(52263),o=n(16550),r=n(18780);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,a.Z)(),{pathname:s}=(0,o.TH)(),c=(0,r.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),u=l===i?e:e.replace(`/${l}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},85936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var a=n(67294),o=n(16550),r=n(902);function i(e){const t=(0,o.TH)(),n=(0,r.D9)(t),i=(0,r.zX)(e);(0,a.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},86668:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var a=n(52263);function o(){return(0,a.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:a}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),r="/"===o||o===a?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,r)}},54143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},18780:function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return a(o).default}});var r=n(54143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return r.getErrorCausalChain}})},86010:(e,t,n)=>{"use strict";function a(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;to});const o=function(){for(var e,t,n=0,o="";n{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>g,PP:()=>j,Ep:()=>f});var a=n(87462);function o(e){return"/"===e.charAt(0)}function r(e,t){for(var n=t,a=n+1,o=e.length;a=0;f--){var g=i[f];"."===g?r(i,f):".."===g?(r(i,f),d++):d&&(r(i,f),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var b=i.join("/");return n&&"/"!==b.substr(-1)&&(b+="/"),b};var l=n(38776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,a=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),a&&"#"!==a&&(o+="#"===a.charAt(0)?a:"#"+a),o}function g(e,t,n,o){var r;"string"==typeof e?(r=function(e){var t=e||"/",n="",a="",o=t.indexOf("#");-1!==o&&(a=t.substr(o),t=t.substr(0,o));var r=t.indexOf("?");return-1!==r&&(n=t.substr(r),t=t.substr(0,r)),{pathname:t,search:"?"===n?"":n,hash:"#"===a?"":a}}(e),r.state=t):(void 0===(r=(0,a.Z)({},e)).pathname&&(r.pathname=""),r.search?"?"!==r.search.charAt(0)&&(r.search="?"+r.search):r.search="",r.hash?"#"!==r.hash.charAt(0)&&(r.hash="#"+r.hash):r.hash="",void 0!==t&&void 0===r.state&&(r.state=t));try{r.pathname=decodeURI(r.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+r.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(r.key=n),o?r.pathname?"/"!==r.pathname.charAt(0)&&(r.pathname=i(r.pathname,o.pathname)):r.pathname=o.pathname:r.pathname||(r.pathname="/"),r}function b(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,a,o){if(null!=e){var r="function"==typeof e?e(t,n):e;"string"==typeof r?"function"==typeof a?a(r,o):o(!0):o(!1!==r)}else o(!0)},appendListener:function(e){var n=!0;function a(){n&&e.apply(void 0,arguments)}return t.push(a),function(){n=!1,t=t.filter((function(e){return e!==a}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),a=0;at?n.splice(t,n.length-t,o):n.push(o),d({action:a,location:o,index:t,entries:n})}}))},replace:function(e,t){var a="REPLACE",o=g(e,t,p(),w.location);u.confirmTransitionTo(o,a,n,(function(e){e&&(w.entries[w.index]=o,d({action:a,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var a=n(59864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},r={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return a.isMemo(e)?i:l[e.$$typeof]||o}l[a.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[a.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,g=Object.getPrototypeOf,b=Object.prototype;e.exports=function e(t,n,a){if("string"!=typeof n){if(b){var o=g(n);o&&o!==b&&e(t,o,a)}var i=u(n);d&&(i=i.concat(d(n)));for(var l=s(t),p=s(n),m=0;m{"use strict";e.exports=function(e,t,n,a,o,r,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,a,o,r,i,l],u=0;(s=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},32497:(e,t,n)=>{"use strict";n.r(t)},52295:(e,t,n)=>{"use strict";n.r(t)},74865:function(e,t,n){var a,o;a=function(){var e,t,n={version:"0.2.0"},a=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
    '};function o(e,t,n){return en?n:e}function r(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===a.positionUsing?{transform:"translate3d("+r(e)+"%,0,0)"}:"translate"===a.positionUsing?{transform:"translate("+r(e)+"%,0)"}:{"margin-left":r(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(a[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,a.minimum,1),n.status=1===e?null:e;var r=n.render(!t),c=r.querySelector(a.barSelector),u=a.speed,d=a.easing;return r.offsetWidth,l((function(t){""===a.positionUsing&&(a.positionUsing=n.getPositioningCSS()),s(c,i(e,u,d)),1===e?(s(r,{transition:"none",opacity:1}),r.offsetWidth,setTimeout((function(){s(r,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),a.trickleSpeed)};return a.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*a.trickleRate)},e=0,t=0,n.promise=function(a){return a&&"resolved"!==a.state()?(0===t&&n.start(),e++,t++,a.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=a.template;var o,i=t.querySelector(a.barSelector),l=e?"-100":r(n.status||0),c=document.querySelector(a.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),a.showSpinner||(o=t.querySelector(a.spinnerSelector))&&g(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(a.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&g(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function a(t){var n=document.body.style;if(t in n)return t;for(var a,o=e.length,r=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((a=e[o]+r)in n)return a;return t}function o(e){return e=n(e),t[e]||(t[e]=a(e))}function r(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,a,o=arguments;if(2==o.length)for(n in t)void 0!==(a=t[n])&&t.hasOwnProperty(n)&&r(e,n,a);else r(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=f(e),a=n+t;c(n,t)||(e.className=a.substring(1))}function d(e,t){var n,a=f(e);c(e,t)&&(n=a.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function g(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof a?a.call(t,n,t,e):a)||(e.exports=o)},87410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},a={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);x+=k.value.length,k=k.next){var E=k.value;if(t.length>e.length)return;if(!(E instanceof o)){var S,C=1;if(v){if(!(S=r(_,x,e,h))||S.index>=e.length)break;var T=S.index,j=S.index+S[0].length,L=x;for(L+=k.value.length;T>=L;)L+=(k=k.next).value.length;if(x=L-=k.value.length,k.value instanceof o)continue;for(var M=k;M!==t.tail&&(Ld.reach&&(d.reach=P);var O=k.prev;if(N&&(O=s(t,O,N),x+=N.length),c(t,O,C),k=s(t,O,new o(f,m?a.tokenize(A,m):A,y,A)),R&&s(t,k,R),C>1){var D={cause:f+","+b,reach:P};i(e,t,n,k.prev,x,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var a=t.next,o={value:n,prev:t,next:a};return t.next=o,a.prev=o,e.length++,o}function c(e,t,n){for(var a=t.next,o=0;o"+r.content+""},a}(),o=a;a.default=a,o.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^$/i;var a={"included-cdata":{pattern://i,inside:n}};a["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var r={};r[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:a},o.languages.insertBefore("markup","cdata",r)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:a},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:a.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],r=a.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var a={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:a,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:a,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,a="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),r=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return a})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return a}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return a})).replace(/<>/g,(function(){return"(?:"+o+"|"+r+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(r),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var a=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return a})),r=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+r+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+r+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(a),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+r+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(a),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,a=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&g(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,a=t.inside.interpolation,o=a.inside["interpolation-punctuation"],r=a.pattern.source;function i(t,a){if(e.languages[t])return{pattern:RegExp("((?:"+a+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,a){var o={code:t,grammar:n,language:a};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function c(t){var n={};n["interpolation-punctuation"]=o;var r=e.tokenize(t,n);if(3===r.length){var i=[1,1];i.push.apply(i,s(r[1],e.languages.javascript,"javascript")),r.splice.apply(r,i)}return new e.Token("interpolation",r,a.alias,t)}function u(t,n,a){var o=e.tokenize(t,{interpolation:{pattern:RegExp(r),lookbehind:!0}}),i=0,u={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(i++,a)););return u[n]=o,n})).join(""),n,a),f=Object.keys(u);return i=0,function e(t){for(var n=0;n=f.length)return;var a=t[n];if("string"==typeof a||"string"==typeof a.content){var o=f[i],r="string"==typeof a?a:a.content,l=r.indexOf(o);if(-1!==l){++i;var s=r.substring(0,l),d=c(u[o]),g=r.substring(l+o.length),b=[];if(s&&b.push(s),b.push(d),g){var p=[g];e(p),b.push.apply(b,p)}"string"==typeof a?(t.splice.apply(t,[n,1].concat(b)),n+=b.length-1):a.content=b}}else{var m=a.content;Array.isArray(m)?e(m):e([m])}}}(d),new e.Token(a,d,"language-"+a,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var a=0,o=n.length;a]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],a=0;a*\.{3}(?:[^{}]|)*\})/.source;function r(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return a})).replace(//g,(function(){return o})),RegExp(e,t)}o=r(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=r(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:r(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:r(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],a=0;a0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:r=!0),(r||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(o);a0&&("string"==typeof t[a-1]||"plain-text"===t[a-1].type)&&(s=i(t[a-1])+s,t.splice(a-1,1),a--),t[a]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var a=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+a+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,a,o,r){if(n.language===a){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof r&&!r(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(a,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,a){if(n.language===a&&n.tokenStack){n.grammar=e.languages[a];var o=0,r=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=r.length);s++){var c=l[s];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=r[o],d=n.tokenStack[u],f="string"==typeof c?c:c.content,g=t(a,u),b=f.indexOf(g);if(b>-1){++o;var p=f.substring(0,b),m=new e.Token(a,e.tokenize(d,n.grammar),"language-"+a,d),h=f.substring(b+g.length),v=[];p&&v.push.apply(v,i([p])),v.push(m),h&&v.push.apply(v,i([h])),"string"==typeof c?l.splice.apply(l,[s,1].concat(v)):c.content=v}}else c.content&&i(c.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},a={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};a.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:a}},a.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:a}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:a}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:a}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:a}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:a.interpolation}},rest:a}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:a.interpolation,comment:a.comment,punctuation:/[{},]/}},func:a.func,string:a.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:a.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const r=o},29901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const a=n(29901),o=n(39642),r=new Set;function i(e){void 0===e?e=Object.keys(a.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...r,...Object.keys(Prism.languages)];o(a,e,t).load((e=>{if(!(e in a.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(16500).resolve(t)],delete Prism.languages[e],n(16500)(t),r.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var a={"./":2885};function o(e){var t=r(e);return n(t)}function r(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}o.keys=function(){return Object.keys(a)},o.resolve=r,e.exports=o,o.id=6726},16500:(e,t,n)=>{var a={"./":2885};function o(e){var t=r(e);return n(t)}function r(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}o.keys=function(){return Object.keys(a)},o.resolve=r,e.exports=o,o.id=16500},39642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,a=e.length;n "));var l={},s=e[a];if(s){function c(t){if(!(t in e))throw new Error(a+" depends on an unknown component "+t);if(!(t in l))for(var i in o(t,r),l[t]=!0,n[t])l[i]=!0}t(s.require,c),t(s.optional,c),t(s.modify,c)}n[a]=l,r.pop()}}return function(e){var t=n[e];return t||(o(e,a),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(r,i,l){var s=function(e){var t={};for(var n in e){var a=e[n];for(var o in a)if("meta"!=o){var r=a[o];t[o]="string"==typeof r?{title:r}:r}}return t}(r),c=function(e){var n;return function(a){if(a in e)return a;if(!n)for(var o in n={},e){var r=e[o];t(r&&r.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[a]||a}}(s);i=i.map(c),l=(l||[]).map(c);var u=n(i),d=n(l);i.forEach((function e(n){var a=s[n];t(a&&a.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var f,g=a(s),b=u;o(b);){for(var p in f={},b){var m=s[p];t(m&&m.modify,(function(e){e in d&&(f[e]=!0)}))}for(var h in d)if(!(h in u))for(var v in g(h))if(v in u){f[h]=!0;break}for(var y in b=f)u[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,a,o){var r=o?o.series:void 0,i=o?o.parallel:e,l={},s={};function c(e){if(e in l)return l[e];s[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=a(e);else{var f=i(u.map((function(e){var t=c(e);return delete s[e],t})));r?o=r(f,(function(){return a(e)})):a(e)}return l[e]=o}for(var u in n)c(u);var d=[];for(var f in s)d.push(l[f]);return i(d)}(g,u,t,n)}};return w}}();e.exports=t},92703:(e,t,n)=>{"use strict";var a=n(50414);function o(){}function r(){}r.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,r,i){if(i!==a){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:r,resetWarningCache:o};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},64448:(e,t,n)=>{"use strict";var a=n(67294),o=n(63840);function r(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n
    + + \ No newline at end of file diff --git a/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data/index.html b/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data/index.html index e8a3646926..ec8ee254ea 100644 --- a/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data/index.html +++ b/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-data/index.html @@ -10,13 +10,13 @@ - - + +
    -

    A $500k bet to build the best platform to do AI using financial data

    · 2 min read


    This blog post discusses our $500k investment in building the best platform for AI using financial data. We focus on the rebranding of OpenBB SDK to OpenBB Platform, its features, and the potential payoff of this bet in 2024.

    The open source code is available here.

    Earlier this year we made a $500k bet.

    The OpenBB SDK had access to over 500 data endpoints. But it was built as a second thought (after the Terminal) and it was extremely time-consuming to manage all dependencies.

    Plus, the SDK had more than just access to data and thus was bloated.

    So we invested $500,000 to build it from the ground up and focus on data access.

    Now the OpenBB Platform (rebrand) is lean and scalable.

    It can be used in Python (pip install openbb==4.0.0a2) but also for web development. More information here.

    And honestly, is the door to financial data.

    Why am I saying all this?

    Because I predict that in 2024 this bet will have a massive payoff.

    The reason?

    Agents are going to be big.

    And when they are, financial firms that aren’t leveraging them are going to have to spend a lot of resources to make up for the lack of efficiency.

    Enter OpenBB Platform

    • We are data vendor agnostic (we enable them)
    • We are open source (everyone can contribute data)
    • We standardize data across close to 100 different data providers
    • We put a lot of effort into our documentation

    The last 3 points are key for agents, and why people will build agents on top of the OpenBB platform.

    In a few hours, I was able to use the following prompt:

        Check what are TSLA peers.
    From those, check which one has the highest market cap.
    Then, on the ticker that has the highest market cap get
    the most recent rating from an analyst. And tell me who
    was the analyst and what date was it that the rating was done

    To have an agent execute this entire workflow in a 1/10th of the time that it would have taken an analyst to do.

    Check for yourself the example below,

    image

    - - +

    A $500k bet to build the best platform to do AI using financial data

    · 2 min read


    This blog post discusses our $500k investment in building the best platform for AI using financial data. We focus on the rebranding of OpenBB SDK to OpenBB Platform, its features, and the potential payoff of this bet in 2024.

    The open source code is available here.

    Earlier this year we made a $500k bet.

    The OpenBB SDK had access to over 500 data endpoints. But it was built as a second thought (after the Terminal) and it was extremely time-consuming to manage all dependencies.

    Plus, the SDK had more than just access to data and thus was bloated.

    So we invested $500,000 to build it from the ground up and focus on data access.

    Now the OpenBB Platform (rebrand) is lean and scalable.

    It can be used in Python (pip install openbb==4.0.0a2) but also for web development. More information here.

    And honestly, is the door to financial data.

    Why am I saying all this?

    Because I predict that in 2024 this bet will have a massive payoff.

    The reason?

    Agents are going to be big.

    And when they are, financial firms that aren’t leveraging them are going to have to spend a lot of resources to make up for the lack of efficiency.

    Enter OpenBB Platform

    • We are data vendor agnostic (we enable them)
    • We are open source (everyone can contribute data)
    • We standardize data across close to 100 different data providers
    • We put a lot of effort into our documentation

    The last 3 points are key for agents, and why people will build agents on top of the OpenBB platform.

    In a few hours, I was able to use the following prompt:

        Check what are TSLA peers.
    From those, check which one has the highest market cap.
    Then, on the ticker that has the highest market cap get
    the most recent rating from an analyst. And tell me who
    was the analyst and what date was it that the rating was done

    To have an agent execute this entire workflow in a 1/10th of the time that it would have taken an analyst to do.

    Check for yourself the example below,

    image

    + + \ No newline at end of file diff --git a/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesis/index.html b/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesis/index.html index 471aa6253d..73ce852e26 100644 --- a/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesis/index.html +++ b/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesis/index.html @@ -10,13 +10,13 @@ - - + +
    -

    An unusual journey learning about NNs for a PhD thesis

    · 4 min read


    An unusual journey of learning about Neural Networks for a PhD thesis. This blog post details the author's experience of assisting in the programming aspect of a PhD thesis, focusing on the study of various models and their forecasting performance.

    The open source code is available here.

    On 14th February of 2019, my previous Maths and Statistics teacher — Filipe - sent me a messaged because of a Linkedin post I shared about work I was doing in python.

    It turns out that Filipe was looking for someone to help him with his PhD thesis, in specific, with the programming side of it. The challenge was to study diverse models (from classical to neural networks) and assess their forecasting performance. Since time series prediction was always a topic that I found fascinating and hadn’t had time to study, I thought this would be the perfect timing to do so.

    So from February 2019 onwards, this exciting journey started. I was working full-time so in order to be able to take part in this, I was only sleeping 4/5h a day. I started reading a lot of books and practicing my python coding skills in order to be more helpful. Then around June, we started working together on the code. We had around 2–3h discussions a couple times a week where we would discuss the point of the situation code-wise and where we wanted to be, we kept in touch about this every day.

    From the repo, which is open source here, you can see that we explored: Exploratory Data Analysis; ARIMA and SARIMA; Exponential Smoothing; Deep Neural Network. The final part of this work consisted in an innovative approach to tackle an univariate time series, which you can find here. On top of that, a library of cross-validation for Neural Networks was developed, which is now being used in real data science applications, see here.

    The work, which took around 1 year to complete, can be divided into 3 distinct phases:

    • The coding phase lasted around 3 months. I would write the code, test the code and then touch base with Filipe to ensure we were going in the right direction.
    • The tweaking and analysis phase took around another 3 months. Here, Filipe took the code I had completed and analysed multiple time series with different trends and seasonalities; tweaked different models; trained and validated these; and started interpreting results. In this phase, me and Filipe would discuss the code from a pragmatic point of view, and improve it based on what Filipe wanted to see/analyse. This phase was so intense that Filipe flew out to London twice to meet me, almost over a period of 1 month.
    • The writing of the thesis phase took an additional 6 months. Here Filipe basically translated the results and analysis seen on the notebook of the thesis, wrote a full theoretical background on the models used and interpreted the applicability of these.

    The full work, “Data Science in the Modeling and Forecasting of Financial timeseries: from Classic methodologies to Deep Learning”, can be found in here or stored in here.

    During this time, Filipe was also working full-time as he was a teaching assistant in three different universities. In spite of the adversities, Filipe achieved an impressive approved with “unanimous distinction” (maximum classification) from ISCTE Business School, Lisbon, Portugal.

    My character waiting for people to join my chatroom to discuss our poster.

    image

    Last week, at XXV Congress of the Portuguese Statistical Society (SPE 2021), we presented:

    • A poster that you can find here, titled: “Forecasting models for time-series: a comparative study between classical methodologies and Deep Learning”
    • A presentation that you can find here, titled: “Explorando o poder da memória das redes neuronais LSTM na modelação e previsão do PSI 20”

    image

    The poster above was presented at XXV Congress of the Portuguese Statistical Society (SPE 2021).

    I started this journey with my previous maths teacher and ended it with a close friend! Excited to see what other articles/publications we’ll be working on together in the future.

    PS: The ARIMA/ETS/MLP/RNN/LSTM models learned from this work, consisted the basis of the prediction menu on Gamestonk Terminal.

    As always, feel free to provide feedback!

    - - +

    An unusual journey learning about NNs for a PhD thesis

    · 4 min read


    An unusual journey of learning about Neural Networks for a PhD thesis. This blog post details the author's experience of assisting in the programming aspect of a PhD thesis, focusing on the study of various models and their forecasting performance.

    The open source code is available here.

    On 14th February of 2019, my previous Maths and Statistics teacher — Filipe - sent me a messaged because of a Linkedin post I shared about work I was doing in python.

    It turns out that Filipe was looking for someone to help him with his PhD thesis, in specific, with the programming side of it. The challenge was to study diverse models (from classical to neural networks) and assess their forecasting performance. Since time series prediction was always a topic that I found fascinating and hadn’t had time to study, I thought this would be the perfect timing to do so.

    So from February 2019 onwards, this exciting journey started. I was working full-time so in order to be able to take part in this, I was only sleeping 4/5h a day. I started reading a lot of books and practicing my python coding skills in order to be more helpful. Then around June, we started working together on the code. We had around 2–3h discussions a couple times a week where we would discuss the point of the situation code-wise and where we wanted to be, we kept in touch about this every day.

    From the repo, which is open source here, you can see that we explored: Exploratory Data Analysis; ARIMA and SARIMA; Exponential Smoothing; Deep Neural Network. The final part of this work consisted in an innovative approach to tackle an univariate time series, which you can find here. On top of that, a library of cross-validation for Neural Networks was developed, which is now being used in real data science applications, see here.

    The work, which took around 1 year to complete, can be divided into 3 distinct phases:

    • The coding phase lasted around 3 months. I would write the code, test the code and then touch base with Filipe to ensure we were going in the right direction.
    • The tweaking and analysis phase took around another 3 months. Here, Filipe took the code I had completed and analysed multiple time series with different trends and seasonalities; tweaked different models; trained and validated these; and started interpreting results. In this phase, me and Filipe would discuss the code from a pragmatic point of view, and improve it based on what Filipe wanted to see/analyse. This phase was so intense that Filipe flew out to London twice to meet me, almost over a period of 1 month.
    • The writing of the thesis phase took an additional 6 months. Here Filipe basically translated the results and analysis seen on the notebook of the thesis, wrote a full theoretical background on the models used and interpreted the applicability of these.

    The full work, “Data Science in the Modeling and Forecasting of Financial timeseries: from Classic methodologies to Deep Learning”, can be found in here or stored in here.

    During this time, Filipe was also working full-time as he was a teaching assistant in three different universities. In spite of the adversities, Filipe achieved an impressive approved with “unanimous distinction” (maximum classification) from ISCTE Business School, Lisbon, Portugal.

    My character waiting for people to join my chatroom to discuss our poster.

    image

    Last week, at XXV Congress of the Portuguese Statistical Society (SPE 2021), we presented:

    • A poster that you can find here, titled: “Forecasting models for time-series: a comparative study between classical methodologies and Deep Learning”
    • A presentation that you can find here, titled: “Explorando o poder da memória das redes neuronais LSTM na modelação e previsão do PSI 20”

    image

    The poster above was presented at XXV Congress of the Portuguese Statistical Society (SPE 2021).

    I started this journey with my previous maths teacher and ended it with a close friend! Excited to see what other articles/publications we’ll be working on together in the future.

    PS: The ARIMA/ETS/MLP/RNN/LSTM models learned from this work, consisted the basis of the prediction menu on Gamestonk Terminal.

    As always, feel free to provide feedback!

    + + \ No newline at end of file diff --git a/blog/archive/index.html b/blog/archive/index.html index 5617f95c16..28a0d2f7ec 100644 --- a/blog/archive/index.html +++ b/blog/archive/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Archive

    Archive

    2023

    - - +

    Archive

    Archive

    2023

    + + \ No newline at end of file diff --git a/blog/atom.xml b/blog/atom.xml index a154368e84..f158167bfd 100644 --- a/blog/atom.xml +++ b/blog/atom.xml @@ -2,11 +2,27 @@ https://didierlopes.com/blog Didier Lopes Blog - 2023-11-29T00:00:00.000Z + 2023-12-15T00:00:00.000Z https://github.com/jpmonette/feed Didier Lopes Blog https://didierlopes.com/img/favicon.ico + + <![CDATA[The new FinAI Tech Stack]]> + https://didierlopes.com/blog/the-new-finai-tech-stack + + 2023-12-15T00:00:00.000Z + +


    This blog post delves into how our collaboration with MindsDB, Nixtla, LlamaIndex, and Langchain is revolutionizing the financial world. Read on to learn all about the event "The New FinAI Tech Stack" held last week in SF, California.

    Context

    In early September, I attended a “Future of Finance” event in NYC. Despite the presence of well-known financial professionals from top firms in the industry, I found the event lacked practical applications demonstrating how AI is impacting the financial sector.

    Once I was back in the Bay Area, I had a barbecue with Jorge and Max from MindsDB and Nixtla, and I was commenting on that experience. To which Jorge promptly replied - why don’t we do it ourselves? So following this discussion, we decided to put the AI in finance event in motion.

    At OpenBB, AI has become a key component in our approach to refactoring the OpenBB Platform from the ground up. We've recently recruited a Head of AI to help us build our strategy and work on this effort full-time.

    You can find more details on this here.

    OpenBB x MindsDB

    A few days later, I visited the MindsDB office to discuss collaborating with Jorge on potential partnerships. I suggested the idea of gaining access to MindsDB's data, a proposal that seemed feasible to implement.

    Eventually, we accomplished this, and I even showcased it during the event last week. The code for this endeavour is open source. Take a look here.

    However, Jorge had an even bigger idea. He proposed the concept of granting MindsDB users access to OpenBB data via SQL and harnessing MindsDB's capabilities for machine learning. Essentially, we could convert the data frame in runtime into a virtual SQL table, since we have access to the Pydantic model from the OpenBB platform, and we can build that on the go.

    After tweeting about this, I received numerous messages, which validated that there was interest in OBB SQL. So, we set off to work on this. Together with the OpenBB team, we made it easy to access all available inputs/outputs for each endpoint, while the MindsDB team worked on virtualizing the tables. The result can be seen here.

    At the event last week, Jorge shared this work. Additionally, in collaboration with LangChain, he successfully developed a Slack bot with direct access to this data, all accessible within Slack

    OpenBB x Nixtla

    Back in August, Nixtla introduced the initial foundation generative AI model for temporal data at MindsDB. At that time, we received an invitation to showcase the practical applications of TimeGPT in production, and for the first time, we unveiled Terminal Pro briefly.

    I detailed this experience in a blog post and shared a similar demo during the event last week.

    Following that, Max and Azul from Nixtla proceeded to share a presentation where they used OpenBB data to assess price targets from analysts and develop an approach on how it is possible to reduce the bias inherent to price estimates and produce better estimates.

    OpenBB x LlamaIndex

    Back in July, we initiated the development of AskOBB, enabling users to interact with the open source OpenBB Terminal using natural language. In this effort, we leveraged LlamaIndex and you can see more about it here.

    So when we started discussing an AI in Finance event, it only made sense to reach out to Jerry and Simon to invite their team to present at the event. And so we did. Jerry ended up presenting their open source SEC insights repo that uses the Retrieval Augmented Generation (RAG) capabilities of LlamaIndex to answer questions about SEC 10-K & 10-Q documents.

    As for the OpenBB Terminal Pro, we demonstrated how we are using LlamaIndex to chat with documents that are uploaded to the OpenBB Terminal Pro. The video below highlights these features.

    OpenBB x Langchain

    After attending the AI Engineering Summit event, specifically Harrison’s workshop on how to get started with agents using Langchain, I felt inspired to create an agent on top of the OpenBB platform.

    So that very day, I went home and started to work on this repo. By the end of the day, the agent was already able to perform complex queries.

    Over time I iterated on it to make the agent more robust, but the improvement on the architecture started to happen after Michael joined OpenBB and he was able to focus on this full-time - the progress can be found on this open source repo. An example of a prompt that the agent can answer is:

    Check what are TSLA peers. From those, check which one has the highest market cap. Then, on the ticker that has the highest market cap get the most recent price target estimate from an analyst, and tell me who it was and on what date the estimate was made.


    So at the event, Harrison presented this architecture which heavily relies on Langchain and OpenBB tools.

    Later on, I demonstrated how we can integrate this architecture into OpenBB Copilot and make it available from the OpenBB Terminal Pro.

    Wrap up

    Finally, this was an amazing event organized by MindsDB and a team that put together 5 of the most prominent open-source companies working on problems at the intersection of AI and Finance.

    You can rewatch the entire event here:


    We're considering organizing another event like this soon, possibly even in NYC.

    And if your firm is interested in early access to the OpenBB Terminal Pro, you can reach out to hello@openbb.finance, we’d love to chat.

    ]]>
    + + + + + + + + +
    <![CDATA[Goodbye OpenBB SDK. Hello OpenBB Platform]]> https://didierlopes.com/blog/goodbye-openbb-sdk-hello-openbb-platform diff --git a/blog/become-an-openbb-champion/index.html b/blog/become-an-openbb-champion/index.html index 88dfb2e001..68eeac569d 100644 --- a/blog/become-an-openbb-champion/index.html +++ b/blog/become-an-openbb-champion/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Become an OpenBB Champion

    · 3 min read


    Become an OpenBB Champion and join our passionate community. Share your experiences with our innovative products and help us democratize investment research through an open source approach.

    Do you find yourself unable to live without one of OpenBB’s innovative products? Have you pushed the boundaries of our tools and unlocked their full potential? If you answered yes, then this blog post is tailor-made for you!

    At OpenBB, we are actively seeking out OpenBB Champions — passionate community members who share our vision of democratizing investment research through an open source approach.

    Whether you utilize the OpenBB Terminal to streamline your investment research workflow, leverage the OpenBB SDK to create your own internal dashboards and notebooks, or employ the OpenBB Bot to extract financial data within your finance community, we want to hear from you!

    To qualify as an OpenBB Champion, you need to be an active user of one of our products and be willing to share your valuable experiences with our team. We’re eager to learn more about your journey with OpenBB and how our products have transformed your workflow.


    Where's what we would like to know:

    • Your background
    • How you heard about OpenBB
    • Workflow transformation since incorporating OpenBB into your toolkit
    • Your favorite OpenBB product
    • Your favorite feature within that product
    • Future expectations from us
    • Your end goal — ultimate objective or milestone

    As an OpenBB Champion, your contribution will not go unnoticed. Here are the benefits you’ll receive:

    Exposure

    Your testimonial will be prominently featured on OpenBB’s website, social media channels, and other marketing materials. This exposure will introduce your expertise to a wider audience, increasing your visibility within the investment research community.

    Recognition

    You will be officially recognized as an OpenBB Champion, highlighting your commitment to innovation and industry-leading practices. This recognition can bolster your credibility and authority in your field of expertise.

    Networking

    As part of the OpenBB Champion community, you will have exclusive access to networking opportunities with like-minded individuals who share your passion for OpenBB’s products. Forge meaningful connections, exchange ideas, and collaborate with fellow champions to amplify your impact.

    Merchandise

    To show our appreciation for your support, the OpenBB team will send you exclusive OpenBB merchandise. Wear it proudly and let others know that you are part of our journey.

    If you meet the requirements and are enthusiastic about becoming an OpenBB Champion, we invite you to reach out to us at hello@openbb.finance. Our team will coordinate a podcast session with you.

    We look forward to hearing from you.

    - - +

    Become an OpenBB Champion

    · 3 min read


    Become an OpenBB Champion and join our passionate community. Share your experiences with our innovative products and help us democratize investment research through an open source approach.

    Do you find yourself unable to live without one of OpenBB’s innovative products? Have you pushed the boundaries of our tools and unlocked their full potential? If you answered yes, then this blog post is tailor-made for you!

    At OpenBB, we are actively seeking out OpenBB Champions — passionate community members who share our vision of democratizing investment research through an open source approach.

    Whether you utilize the OpenBB Terminal to streamline your investment research workflow, leverage the OpenBB SDK to create your own internal dashboards and notebooks, or employ the OpenBB Bot to extract financial data within your finance community, we want to hear from you!

    To qualify as an OpenBB Champion, you need to be an active user of one of our products and be willing to share your valuable experiences with our team. We’re eager to learn more about your journey with OpenBB and how our products have transformed your workflow.


    Where's what we would like to know:

    • Your background
    • How you heard about OpenBB
    • Workflow transformation since incorporating OpenBB into your toolkit
    • Your favorite OpenBB product
    • Your favorite feature within that product
    • Future expectations from us
    • Your end goal — ultimate objective or milestone

    As an OpenBB Champion, your contribution will not go unnoticed. Here are the benefits you’ll receive:

    Exposure

    Your testimonial will be prominently featured on OpenBB’s website, social media channels, and other marketing materials. This exposure will introduce your expertise to a wider audience, increasing your visibility within the investment research community.

    Recognition

    You will be officially recognized as an OpenBB Champion, highlighting your commitment to innovation and industry-leading practices. This recognition can bolster your credibility and authority in your field of expertise.

    Networking

    As part of the OpenBB Champion community, you will have exclusive access to networking opportunities with like-minded individuals who share your passion for OpenBB’s products. Forge meaningful connections, exchange ideas, and collaborate with fellow champions to amplify your impact.

    Merchandise

    To show our appreciation for your support, the OpenBB team will send you exclusive OpenBB merchandise. Wear it proudly and let others know that you are part of our journey.

    If you meet the requirements and are enthusiastic about becoming an OpenBB Champion, we invite you to reach out to us at hello@openbb.finance. Our team will coordinate a podcast session with you.

    We look forward to hearing from you.

    + + \ No newline at end of file diff --git a/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released/index.html b/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released/index.html index 0a25bb1d2b..bd99da588e 100644 --- a/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released/index.html +++ b/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-released/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Bloomberg Terminal is no more. OpenBB Terminal 2.0 has just been released.

    · 2 min read


    OpenBB Terminal 2.0 has been released. This blog post discusses the new features and improvements, including the release of OpenBB SDK, a state-of-the-art AI/ML toolkit for the financial industry, and the vision for a community-driven investment research platform.

    The open source code is available here.

    Almost 2 years ago, I started building my own investment research platform. 2 months later I named it Gamestonk Terminal, made it open source and shared it on Reddit. The rest is history.

    Since then, we surpassed 17,800 stars on Github. Raised $ 8.8 million in our seed round. Build a very competitive team and our OpenBB brand is now recognized by most in the financial space. You can read more about our story here.

    Our mission to democratize investment research has not changed. Over the past few months we have been heads down and building and today I’m excited to share with you the announcement of OpenBB Terminal 2.0.

    The headline is:

    OpenBB Terminal 2.0 is more than an application, it’s a platform.


    A summary:

    • We are releasing OpenBB SDK which allows developers to use a single API to access the world’s raw financial data in order to build their own products / dashboards.

    The SDK will allow users to create report templates in a matter of minutes and run them for custom tickers at any time in a matter of seconds; Instead of spending hours and starting a report from scratch every single time. We envision a world where the community can share these and help each other at becoming better investors.

    image

    • We are also bringing a state-of-the-art AI / ML toolkit to the financial industry, to be used alongside all the data sources our platform has access to (stocks, crypto, NFTs, options, forex, ETFs, mutual funds, macro economic data and even alternative data).

    image

    For more information, you can read our announcement here: https://openbb.co/blog/openbb-terminal-2-acai

    Or even better, watch the announcement here!

    - - +

    Bloomberg Terminal is no more. OpenBB Terminal 2.0 has just been released.

    · 2 min read


    OpenBB Terminal 2.0 has been released. This blog post discusses the new features and improvements, including the release of OpenBB SDK, a state-of-the-art AI/ML toolkit for the financial industry, and the vision for a community-driven investment research platform.

    The open source code is available here.

    Almost 2 years ago, I started building my own investment research platform. 2 months later I named it Gamestonk Terminal, made it open source and shared it on Reddit. The rest is history.

    Since then, we surpassed 17,800 stars on Github. Raised $ 8.8 million in our seed round. Build a very competitive team and our OpenBB brand is now recognized by most in the financial space. You can read more about our story here.

    Our mission to democratize investment research has not changed. Over the past few months we have been heads down and building and today I’m excited to share with you the announcement of OpenBB Terminal 2.0.

    The headline is:

    OpenBB Terminal 2.0 is more than an application, it’s a platform.


    A summary:

    • We are releasing OpenBB SDK which allows developers to use a single API to access the world’s raw financial data in order to build their own products / dashboards.

    The SDK will allow users to create report templates in a matter of minutes and run them for custom tickers at any time in a matter of seconds; Instead of spending hours and starting a report from scratch every single time. We envision a world where the community can share these and help each other at becoming better investors.

    image

    • We are also bringing a state-of-the-art AI / ML toolkit to the financial industry, to be used alongside all the data sources our platform has access to (stocks, crypto, NFTs, options, forex, ETFs, mutual funds, macro economic data and even alternative data).

    image

    For more information, you can read our announcement here: https://openbb.co/blog/openbb-terminal-2-acai

    Or even better, watch the announcement here!

    + + \ No newline at end of file diff --git a/blog/building-the-worlds-investment-research-infrastructure/index.html b/blog/building-the-worlds-investment-research-infrastructure/index.html index 4f8017ce60..dcea0034af 100644 --- a/blog/building-the-worlds-investment-research-infrastructure/index.html +++ b/blog/building-the-worlds-investment-research-infrastructure/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Building the world’s investment research infrastructure

    · One min read


    This blog post discusses the process and challenges of building the world's investment research infrastructure. It provides an insight into the products developed by the OpenBB team and their efficient operation.

    The open source code is available here.

    OpenBB team is comprised of 18 FTE.

    We have 8 products: OpenBB Platform, OpenBB Terminal, OpenBB Bot, OpenBB Terminal Pro, OpenBB Excel Add-In, OpenBB Hub, OpenBB Docs and Marketing website.

    This means that on average we have around 2 people working on each product.

    This is particularly wild when you look into the complexity associated with each of these products and being at the forefront of innovation.

    That average includes not only engineers but design, product, and marketing.

    In addition, our Discord community has 14k+ people and we often get praised regarding how good our support is.

    Regardless of our future, I am proud of the team we put together and how efficiently we operate.

    It would take a much larger company well over 5 years to build what we built in 2.

    - - +

    Building the world’s investment research infrastructure

    · One min read


    This blog post discusses the process and challenges of building the world's investment research infrastructure. It provides an insight into the products developed by the OpenBB team and their efficient operation.

    The open source code is available here.

    OpenBB team is comprised of 18 FTE.

    We have 8 products: OpenBB Platform, OpenBB Terminal, OpenBB Bot, OpenBB Terminal Pro, OpenBB Excel Add-In, OpenBB Hub, OpenBB Docs and Marketing website.

    This means that on average we have around 2 people working on each product.

    This is particularly wild when you look into the complexity associated with each of these products and being at the forefront of innovation.

    That average includes not only engineers but design, product, and marketing.

    In addition, our Discord community has 14k+ people and we often get praised regarding how good our support is.

    Regardless of our future, I am proud of the team we put together and how efficiently we operate.

    It would take a much larger company well over 5 years to build what we built in 2.

    + + \ No newline at end of file diff --git a/blog/customizable-meme-filter/index.html b/blog/customizable-meme-filter/index.html index f1ac5dfc75..0d95e7b4a1 100644 --- a/blog/customizable-meme-filter/index.html +++ b/blog/customizable-meme-filter/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Customizable Meme Filter

    · 3 min read


    In this blogpost, I share my journey of creating a customizable meme filter using Python. This filter selects a random meme based on the number of people on the screen and assigns each person to a character in the meme.

    The open source code is available here.

    For the people who know me, they know how much I enjoy memes. I’ve got to admit, whenever I go to museums I have a lot of fun captioning artwork as memes. As I like to say, I go for the art, and I stay for the memes.

    One day while commuting to work (you can still see the first commit which dates back to 10 February of 2020 and has only notes of the sketch of this idea in Portuguese) I thought:

    “It would be funny if there was a snapchat kind of filter where given the number of people on the screen, a random meme was selected and each person would be one of its characters”.


    Since I was still improving my Python skills, I thought why not do it in Python. After 1 month, I already had the working code, however, since I was switching jobs at the time my commute time reduced drastically and so did my time to work on this. It took around 1 more month to finish the cleaning up of the script (324 lines) to be more readable, and at the same time Covid happened. The latter explains why my hair is blonde on the demo below :)

    Usage:

    ./didifilter.py — location=memes — caption=’Which meme am I?’ — initial=30 — final=50 -b — max=3

    hair_1

    To sum up: This program is meant to be an advanced version of the known snapchat filter where there are random images spinning on top of people’s heads. The main improvement is that you can not only select the images you want to choose from and the caption, but you can also play it with friends (recognizing more than 1 face at the same time).

    The best part of the script is that it is meant to be easily customizable. Any person is able to create their own filter by creating a folder with the images they want within a folder with 1, 2, … based on the number of people they are meant to be used (apart from when backwardCompatible flag is enabled), and select/specify different types of flags/parameters, e.g.:

    ./didifilter.py — locationFolder=celebrities — caption=’What celeb am I?’ — max=2 -v — video=”exampleVideo”
    ./didifilter.py --locationFolder=pokemons --caption="Who's this pokemon?" --width=250 --height=150 --max=1 -p

    AND, you can also quickly tweak the code to adapt it to do something else. Here’s me pranking my girlfriend with a psyduck when the query was: “Who do I look like?

    hair_2

    Hope you have a nice read and enjoy the filter. You can find the code here.

    Feel free to provide feedback, as always!

    - - +

    Customizable Meme Filter

    · 3 min read


    In this blogpost, I share my journey of creating a customizable meme filter using Python. This filter selects a random meme based on the number of people on the screen and assigns each person to a character in the meme.

    The open source code is available here.

    For the people who know me, they know how much I enjoy memes. I’ve got to admit, whenever I go to museums I have a lot of fun captioning artwork as memes. As I like to say, I go for the art, and I stay for the memes.

    One day while commuting to work (you can still see the first commit which dates back to 10 February of 2020 and has only notes of the sketch of this idea in Portuguese) I thought:

    “It would be funny if there was a snapchat kind of filter where given the number of people on the screen, a random meme was selected and each person would be one of its characters”.


    Since I was still improving my Python skills, I thought why not do it in Python. After 1 month, I already had the working code, however, since I was switching jobs at the time my commute time reduced drastically and so did my time to work on this. It took around 1 more month to finish the cleaning up of the script (324 lines) to be more readable, and at the same time Covid happened. The latter explains why my hair is blonde on the demo below :)

    Usage:

    ./didifilter.py — location=memes — caption=’Which meme am I?’ — initial=30 — final=50 -b — max=3

    hair_1

    To sum up: This program is meant to be an advanced version of the known snapchat filter where there are random images spinning on top of people’s heads. The main improvement is that you can not only select the images you want to choose from and the caption, but you can also play it with friends (recognizing more than 1 face at the same time).

    The best part of the script is that it is meant to be easily customizable. Any person is able to create their own filter by creating a folder with the images they want within a folder with 1, 2, … based on the number of people they are meant to be used (apart from when backwardCompatible flag is enabled), and select/specify different types of flags/parameters, e.g.:

    ./didifilter.py — locationFolder=celebrities — caption=’What celeb am I?’ — max=2 -v — video=”exampleVideo”
    ./didifilter.py --locationFolder=pokemons --caption="Who's this pokemon?" --width=250 --height=150 --max=1 -p

    AND, you can also quickly tweak the code to adapt it to do something else. Here’s me pranking my girlfriend with a psyduck when the query was: “Who do I look like?

    hair_2

    Hope you have a nice read and enjoy the filter. You can find the code here.

    Feel free to provide feedback, as always!

    + + \ No newline at end of file diff --git a/blog/employees-are-leaving-be-proactive-about-employee-feedback/index.html b/blog/employees-are-leaving-be-proactive-about-employee-feedback/index.html index 0fc572337b..df442aebb0 100644 --- a/blog/employees-are-leaving-be-proactive-about-employee-feedback/index.html +++ b/blog/employees-are-leaving-be-proactive-about-employee-feedback/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Employees are leaving? Be proactive about employee feedback

    · 5 min read


    Employees are leaving? Be proactive about employee feedback. This blogpost discusses the importance of employee feedback and how we at OpenBB are ensuring high employee engagement through a periodic feedback survey.

    This blogpost shows the measures we are taking to ensure we have high employee engagement at OpenBB through a periodic feedback survey.

    When we started OpenBB, I was absolutely obsessed about our product. All my focus and time was dedicated to building our suite of products (OpenBB Terminal, OpenBB SDK or OpenBB Bot), or talking about these with our users. I care deeply about the OpenBB team, but I expected everyone to be as motivated as me, 24/7.

    But things just don’t work that way. Although we always have a fun quarterly event online, that isn’t enough. Everyone knows that I’m a big fan of remote work, but one clear down side of it is the lack of contact and face to face conversations which makes employee engagement more volatile. I say this, because I believe that when your team is together in the same space, it’s easier to thrive off each others excitement and motivation.

    Soon enough, I realized that “alone you can go faster, but with a team you can go far”. This is when I started putting time into understanding what we could be doing better to improve our work culture.

    Some things that we have now put into place include:

    • We updated the company values as a team, based on what we currently had that they were proud of and where they would like us to be in the future. In a startup, where the pace is incredibly fast and the team is constantly changing, I strongly believe that the values change over time too.

    • We had an OpenBB rap made by a freestyler for our OpenBB Christmas event.

    • We started pushing for more transparency. We were already very transparent internally, but now we started to push this value externally too. Everyone in the company has skin in the game, this allows the team to feel as accountable for the metrics as I do. I wrote more about this in this blogpost: From open source to open startup, and I am currently working on the OpenBB Handbook too.

    • I started having office hours, where I can spend the time with the team chatting about anything (product, strategy, engineering, storytelling, even fundraising). The team knows that I’m usually available, but having that 1 hour blocked gives them the confidence to know that that time booked in the day.

    However, there was something critical missing. I will explain what it is by using what I learned at university (that way I can say that my MSc in Control Systems was indeed useful for OpenBB 🙃).

    What we had built is an open loop control system, and it looks something like this:

    image

    The problem? open loop systems can be inaccurate and unreliable. More importantly, because there is no feedback mechanism to correct inputs as the controller (leadership) never gets the information that comes out of the system (team engagement).

    The key word here is feedback. An office hour session is great, but it’s a poor “sensor device”. The reason being that you are opening the door for the team to communicate with you, but that data isn’t significant to extrapolate through the whole team.

    We needed feedback. We needed to have a closed-loop system instead of an open one. By that I mean:

    image

    This allows us to constantly monitor our team happiness, and be able to react when the feedback doesn’t match our desired culture.

    But what is this feedback? What do we want to track? We didn’t want to reinvent the wheel, so we looked up to how the best companies do it. In particular, we studied “The Psychology of Employee Engagement” e-book from Workday written by Phillip Chambers.

    This allowed us to come up with the following survey, where the team would reply anonymously to each of the questions with a rating from 1 to 10 where 1 corresponds to “strongly disagree” and 10 corresponds to “strongly agree”.

    • Accomplishment: I feel a regular sense of accomplishment
    • Autonomy: I feel that I am given autonomy in the way I complete my tasks
    • Meetings: I feel that I have a good amount of meetings every week. (this question was originally about environment, but due to our remote nature we felt that the amount of meetings was something more important to measure)
    • Freedom of Opinions: I feel that I have a voice in the company and my opinion matters
    • Goal Setting: I feel that both my goals and expectations are set clearly
    • Growth: I feel that I have opportunities to grow professionally
    • Management Support: I feel that my manager cares for me and empowers me
    • Meaningful Work: I feel that my work matters
    • Organizational Fit: I feel like the company values align with mine and we share the same goal
    • Peer relationships: I feel connected with my colleagues and that I can be myself with them
    • Recognition: I feel like I get recognized for my contributions
    • Reward: I feel like I am rewarded fairly for my work
    • Strategy: I feel like the company strategy is being communicated effectively
    • Workload: I feel like I can manage my workload efficiently

    Now you may be wondering how we made this survey completely automated, the workflow is actually very straightforward and we were able to automate it. Here is what it looks like: Airtable + Slack ✅

    image

    Even though our salaries don’t compete with the MAMAAs of this world, we believe that: our mission, our innovative products and unique culture are what makes us OpenBB. And why we can retain our talent.

    You can find our employee engagement index at: https://openbb.co/company/open/team

    - - +

    Employees are leaving? Be proactive about employee feedback

    · 5 min read


    Employees are leaving? Be proactive about employee feedback. This blogpost discusses the importance of employee feedback and how we at OpenBB are ensuring high employee engagement through a periodic feedback survey.

    This blogpost shows the measures we are taking to ensure we have high employee engagement at OpenBB through a periodic feedback survey.

    When we started OpenBB, I was absolutely obsessed about our product. All my focus and time was dedicated to building our suite of products (OpenBB Terminal, OpenBB SDK or OpenBB Bot), or talking about these with our users. I care deeply about the OpenBB team, but I expected everyone to be as motivated as me, 24/7.

    But things just don’t work that way. Although we always have a fun quarterly event online, that isn’t enough. Everyone knows that I’m a big fan of remote work, but one clear down side of it is the lack of contact and face to face conversations which makes employee engagement more volatile. I say this, because I believe that when your team is together in the same space, it’s easier to thrive off each others excitement and motivation.

    Soon enough, I realized that “alone you can go faster, but with a team you can go far”. This is when I started putting time into understanding what we could be doing better to improve our work culture.

    Some things that we have now put into place include:

    • We updated the company values as a team, based on what we currently had that they were proud of and where they would like us to be in the future. In a startup, where the pace is incredibly fast and the team is constantly changing, I strongly believe that the values change over time too.

    • We had an OpenBB rap made by a freestyler for our OpenBB Christmas event.

    • We started pushing for more transparency. We were already very transparent internally, but now we started to push this value externally too. Everyone in the company has skin in the game, this allows the team to feel as accountable for the metrics as I do. I wrote more about this in this blogpost: From open source to open startup, and I am currently working on the OpenBB Handbook too.

    • I started having office hours, where I can spend the time with the team chatting about anything (product, strategy, engineering, storytelling, even fundraising). The team knows that I’m usually available, but having that 1 hour blocked gives them the confidence to know that that time booked in the day.

    However, there was something critical missing. I will explain what it is by using what I learned at university (that way I can say that my MSc in Control Systems was indeed useful for OpenBB 🙃).

    What we had built is an open loop control system, and it looks something like this:

    image

    The problem? open loop systems can be inaccurate and unreliable. More importantly, because there is no feedback mechanism to correct inputs as the controller (leadership) never gets the information that comes out of the system (team engagement).

    The key word here is feedback. An office hour session is great, but it’s a poor “sensor device”. The reason being that you are opening the door for the team to communicate with you, but that data isn’t significant to extrapolate through the whole team.

    We needed feedback. We needed to have a closed-loop system instead of an open one. By that I mean:

    image

    This allows us to constantly monitor our team happiness, and be able to react when the feedback doesn’t match our desired culture.

    But what is this feedback? What do we want to track? We didn’t want to reinvent the wheel, so we looked up to how the best companies do it. In particular, we studied “The Psychology of Employee Engagement” e-book from Workday written by Phillip Chambers.

    This allowed us to come up with the following survey, where the team would reply anonymously to each of the questions with a rating from 1 to 10 where 1 corresponds to “strongly disagree” and 10 corresponds to “strongly agree”.

    • Accomplishment: I feel a regular sense of accomplishment
    • Autonomy: I feel that I am given autonomy in the way I complete my tasks
    • Meetings: I feel that I have a good amount of meetings every week. (this question was originally about environment, but due to our remote nature we felt that the amount of meetings was something more important to measure)
    • Freedom of Opinions: I feel that I have a voice in the company and my opinion matters
    • Goal Setting: I feel that both my goals and expectations are set clearly
    • Growth: I feel that I have opportunities to grow professionally
    • Management Support: I feel that my manager cares for me and empowers me
    • Meaningful Work: I feel that my work matters
    • Organizational Fit: I feel like the company values align with mine and we share the same goal
    • Peer relationships: I feel connected with my colleagues and that I can be myself with them
    • Recognition: I feel like I get recognized for my contributions
    • Reward: I feel like I am rewarded fairly for my work
    • Strategy: I feel like the company strategy is being communicated effectively
    • Workload: I feel like I can manage my workload efficiently

    Now you may be wondering how we made this survey completely automated, the workflow is actually very straightforward and we were able to automate it. Here is what it looks like: Airtable + Slack ✅

    image

    Even though our salaries don’t compete with the MAMAAs of this world, we believe that: our mission, our innovative products and unique culture are what makes us OpenBB. And why we can retain our talent.

    You can find our employee engagement index at: https://openbb.co/company/open/team

    + + \ No newline at end of file diff --git a/blog/financial-chat-bots-are-underrated-and-heres-why/index.html b/blog/financial-chat-bots-are-underrated-and-heres-why/index.html index ec08598565..ec09b9fab2 100644 --- a/blog/financial-chat-bots-are-underrated-and-heres-why/index.html +++ b/blog/financial-chat-bots-are-underrated-and-heres-why/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Financial chat bots are underrated, and here’s why.

    · 5 min read


    In this blog post, we discuss the underrated potential of financial chat bots, our collaboration with OptionsFamBot, and why chat bots are becoming increasingly popular.

    At OpenBB, earlier this year we joined forces with OptionsFamBot. This was a bot that had a reach of over 1 Million users on Discord.

    Today, OpenBB Bot is one of our more powerful products and I still think a lot of people are sleeping on it.

    What is a chatting bot platform?

    According to ChatGPT:

    “A chatbot platform is a software service or tool that enables the creation, management, and deployment of chatbots. These platforms typically provide a variety of tools and features for building, testing, and deploying chatbots, as well as options for integrating chatbots with other systems or services. Some chatbot platforms are designed to support the development of chatbots for specific industries or use cases, such as customer service, e-commerce, or marketing. Others are more general purpose, and can be used to build chatbots for a wide range of applications.”


    Why are chat bots not engaging?

    I believe that one of the reasons for this is because people usually associate chatbots with customer service or marketing. Not as a finalized product but as a feature.

    If I ask ChatGPT about this, the main reasons are: Lack of personalized conversation, limited capabilities, poor design and high error rate.

    image

    But wait.. ChatGPT is LITERALLY a chat bot. Everything happens through a chat interface, which shows that you can build a successful product as a bot, as long as it adds enough value to the user.

    One could argue that ChatGPT is not done in an established chatting platform, and that is partially true. The reason I say partially is because ChatGPT has an API, so developers can use it to develop their own chatting bots and deploy it in whatever chatting app they are interested in.

    Examples of good chatting platforms

    I believe that Discord is in the forefront here due to: Free, easy to use, allows customizing servers with roles/channels/permissions, high-quality voice chat, strong communities.

    A testament to this is the fact that midjourney has built a successful chat bot that generates images from text prompts using AI, SOLELY relying on Discord. If you go into their website, the button “Join the Beta” takes you to their Discord server which has over 7 million users!

    As far as I know, this is the only example of a company that distributes their product solely through a chatting platform in a successful way.

    image

    In my opinion, there are a few factors why chat bots are becoming more popular:

    Interactivity

    The bots are becoming more interactive, almost working like an application within a chatting platform.

    interactivity

    Speed

    The speed of interaction is increasing over time, making the experience more seamless.

    speed

    Customization

    The level of customization allowed for these bots keeps on increasing.

    customization

    Automation

    You are starting to be able to create automated workflows. Not only for you, but for entire communities.

    automation

    Notifications

    It has notification features that can ping you similarly as if a friend sent you a message.

    notifications

    Monetization

    You are going to start to be able to monetize products through it.

    monetization

    Community

    You can use it within a server with friends/colleagues, and unlock a better user experience.

    community

    Standardization

    The product can work similarly on multiple chatting platforms. By keeping the same method of interaction / commands, the user is allowed to pick their favourite chatting platform or even use it in more than 1.

    standardization

    Accessibility

    These chatting platforms are developed for all devices and operating systems, making it a very powerful distribution system.

    last

    Why Finance?

    I’ve spoke with over 100 people in the financial world in 2022. Over 50 are Bloomberg users. From those, 90% agree that their chatting feature is the most attractive feature — some of them going further and saying that that is the reason why they pay for it.

    But what if you didn’t need to pay $26 k / year for such feature. What if you could pay to have access to servers with big names in the industry? Or what if you could create your own servers? What if while you were talking with Cathie Wood about ARK performance, you could also access financial data from ARK to back up your arguments? All this while not leaving the chat.

    This is the reason why I believe that financial chatting bots will become popular in 2023. And OpenBB Bot will be leading that wave.

    Try it out for free on OpenBB Discord server by using a command such as /chart TSLA and let me know what you think.

    - - +

    Financial chat bots are underrated, and here’s why.

    · 5 min read


    In this blog post, we discuss the underrated potential of financial chat bots, our collaboration with OptionsFamBot, and why chat bots are becoming increasingly popular.

    At OpenBB, earlier this year we joined forces with OptionsFamBot. This was a bot that had a reach of over 1 Million users on Discord.

    Today, OpenBB Bot is one of our more powerful products and I still think a lot of people are sleeping on it.

    What is a chatting bot platform?

    According to ChatGPT:

    “A chatbot platform is a software service or tool that enables the creation, management, and deployment of chatbots. These platforms typically provide a variety of tools and features for building, testing, and deploying chatbots, as well as options for integrating chatbots with other systems or services. Some chatbot platforms are designed to support the development of chatbots for specific industries or use cases, such as customer service, e-commerce, or marketing. Others are more general purpose, and can be used to build chatbots for a wide range of applications.”


    Why are chat bots not engaging?

    I believe that one of the reasons for this is because people usually associate chatbots with customer service or marketing. Not as a finalized product but as a feature.

    If I ask ChatGPT about this, the main reasons are: Lack of personalized conversation, limited capabilities, poor design and high error rate.

    image

    But wait.. ChatGPT is LITERALLY a chat bot. Everything happens through a chat interface, which shows that you can build a successful product as a bot, as long as it adds enough value to the user.

    One could argue that ChatGPT is not done in an established chatting platform, and that is partially true. The reason I say partially is because ChatGPT has an API, so developers can use it to develop their own chatting bots and deploy it in whatever chatting app they are interested in.

    Examples of good chatting platforms

    I believe that Discord is in the forefront here due to: Free, easy to use, allows customizing servers with roles/channels/permissions, high-quality voice chat, strong communities.

    A testament to this is the fact that midjourney has built a successful chat bot that generates images from text prompts using AI, SOLELY relying on Discord. If you go into their website, the button “Join the Beta” takes you to their Discord server which has over 7 million users!

    As far as I know, this is the only example of a company that distributes their product solely through a chatting platform in a successful way.

    image

    In my opinion, there are a few factors why chat bots are becoming more popular:

    Interactivity

    The bots are becoming more interactive, almost working like an application within a chatting platform.

    interactivity

    Speed

    The speed of interaction is increasing over time, making the experience more seamless.

    speed

    Customization

    The level of customization allowed for these bots keeps on increasing.

    customization

    Automation

    You are starting to be able to create automated workflows. Not only for you, but for entire communities.

    automation

    Notifications

    It has notification features that can ping you similarly as if a friend sent you a message.

    notifications

    Monetization

    You are going to start to be able to monetize products through it.

    monetization

    Community

    You can use it within a server with friends/colleagues, and unlock a better user experience.

    community

    Standardization

    The product can work similarly on multiple chatting platforms. By keeping the same method of interaction / commands, the user is allowed to pick their favourite chatting platform or even use it in more than 1.

    standardization

    Accessibility

    These chatting platforms are developed for all devices and operating systems, making it a very powerful distribution system.

    last

    Why Finance?

    I’ve spoke with over 100 people in the financial world in 2022. Over 50 are Bloomberg users. From those, 90% agree that their chatting feature is the most attractive feature — some of them going further and saying that that is the reason why they pay for it.

    But what if you didn’t need to pay $26 k / year for such feature. What if you could pay to have access to servers with big names in the industry? Or what if you could create your own servers? What if while you were talking with Cathie Wood about ARK performance, you could also access financial data from ARK to back up your arguments? All this while not leaving the chat.

    This is the reason why I believe that financial chatting bots will become popular in 2023. And OpenBB Bot will be leading that wave.

    Try it out for free on OpenBB Discord server by using a command such as /chart TSLA and let me know what you think.

    + + \ No newline at end of file diff --git a/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-players/index.html b/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-players/index.html index 960ec66a6f..19259c60c3 100644 --- a/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-players/index.html +++ b/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-players/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Firing sucks. How to avoid doing so by hiring A players.

    · 19 min read


    Firing is tough. This blogpost discusses how to avoid it by hiring A players, improving the hiring process, and understanding the importance of a scorecard in recruitment.

    In 2022, OpenBB grew to 20 people. But amongst all of our hiring, we also had to let some people go.

    Before 2022, I had never fired anyone in my life but in my new role, I had to learn how to do it. If you’re a manager, you know that this is the hardest part of the job.

    Having that said, I wanted to use my Christmas holidays to understand how we can avoid letting people go. For this, I needed to start from the beginning and improve our overall hiring process.

    This blogpost will be highly based on the book “Who: The A Method for Hiring” by Geoff Smart and Randy Street, which I highly recommend.

    A method for hiring

    What is an A player? _A candidate who has at least a 90 percent chance of achieving a set of outcomes that only the top 10 percent of possible candidates could achieve.

    In this post, I will go over the steps to get an A team.

    image

    Scorecard

    This is a document that describes the mission for the position, outcomes that must be accomplished, and competencies that fit with both the company culture and the role.

    This is an example of what a scorecard should look like:

    image

    Let’s go through each of the sections in this document.

    Mission

    The mission is an executive summary of the job’s core purpose. It boils the job down to its essence so everybody understands why you need to hire someone in this role.

    The book talks about how you should avoid hiring a generalist. In my opinion, it depends on the stage of the company. At OpenBB, we are able to ship fast with a small team because we have a lot of generalists that are A players. However, finding a generalist A player is a much harder task than finding an A player specialist. Here, we benefit from having an open source project, since we get to build with candidates before we hire them.

    How to: Develop a short statement of one to five sentences that describe why a role exists.

    Outcomes

    Describes what a person needs to accomplish in a role.

    “While typical job descriptions break down because they focus on activities, or a list of things a person will be doing, scorecards succeed because they focus on outcomes, or what a person must get done.”


    How to: Develop 3 to 8 specific objective outcomes that a person must accomplish to achieve an A performance, ranked by order of importance.

    Competencies

    Define how you expect a new hire to operate in the fulfilment of the job and how they can achieve their objectives. What competencies really count?

    Ensure behavioural fit

    Critical competencies for A players are: Efficiency, honesty/integrity, organization, aggressiveness, follow-through, intelligence, analytical skills, attention to detail, persistence, proactivity.

    Others may include: Ability to hire A players, ability to develop people, flexibility/adaptability, calm under pressure, strategic thinking/visioning, creativity/innovation, enthusiasm, work ethic, high standards, listening skills, openness. to criticism and ideas, communications, team work and persuasion.

    Ensure organizational fit

    Evaluating cultural fit begins with evaluating your company’s values against the ones of the candidate.

    Recently, at OpenBB, I asked everyone to share with me a list of values that we currently had and they were proud of, and/or values that they would like to use instead. In a startup, where the pace is incredibly fast and the team is in constant change, I strongly believe values change over time. So I looked at everyone’s inputs, and summarized them into the following OpenBB values: Autonomy and Ownership, Innovation and Excellence, Transparent and Trustworthy, Diversity and Inclusion, Purpose and Passion, User Focused and Community Oriented.

    How to: Identify as many role-based competencies that you think are appropriate to describe the behaviors that someone must demonstrate to achieve the outcomes. Next, identify 5 to 8 competencies that describe your culture and place those on every scorecard.

    From scorecard to strategy

    The beauty of a document like this is that they become the blueprint that links the theory of strategy to the reality of execution. They translate your business plans into role-by-role outcomes, create alignment among your team, unify your culture and ensure people understand your expectations.

    In addition, they allow you to monitor employee progress over time in your annual review system and to rate your team as part of their talent review progress.

    How to: Pressure-test your scorecard by comparing it with the business plan and scorecards of the people who will interface with the role. Ensure that there is consistency and alignment. Then share the scorecard with relevant parties, including peers and recruiters.

    Source

    Systematic sourcing before you have slots to fill ensures you have high-quality candidates waiting when you need them.

    Referrals from your professional and personal networks

    Create a list of the ten most talented people you know and commit to speaking with at least one of them per week for the next ten weeks. At the end of each conversation ask “Who are the most talented people you know?”. Continue to build your list and continue to talk with at least one person per week. “Of all the ways to source candidates, the number one method is to ask for referrals from your personal and professional networks”.

    Referrals from your employees

    Add sourcing as an outcome on every scorecard for your team. Encourage employees to ask people in their networks. Offer a referral bonus. In-house referrals often provide better-targeted sourcing, this is because employees already know our needs and culture.

    Deputizing friends of the firm

    Consider offering a referral bounty to select friends of the firm. It could be as inexpensive as merchandise or as expensive as a significant cash bonus. When talking with someone new at a party or a VC, always ask “who do you know who might be a good fit for my company?

    Sourcing system

    Create a system that (1) captures the names and the contact information on everybody you source and (2) schedules weekly time on your calendar to follow up. Try to spend 30 minute every week sending messages or having calls with candidates from this database of A players.

    Hiring external recruiters or hiring recruiting researchers

    The book speaks about both, but from my experience of having an open company with an exciting mission that builds in public, these have not been relevant to us yet.

    Select

    Create a series of structured interviews which build on each other so you can rate your scorecard.

    Screening Interview

    Short, phone-based interview designed to clear out B and C players from your roster of candidates.

    1. What are your career goals? If no goals echo your own website goals, screen them out. Ideally candidate will speak with passion and energy about their goals which are aligned with the role.

    2. What are you really good at professionally? Make sure that with the list of strengths, there are always examples to backup the claim. Ensure that those strengths are relevant to the competencies required in the scorecard, if not, screen them out.

    3. What are you not good at or not interested in doing professionally? Ignore strengths disguised as weakness. Ask again “what are you really not good at or not interested in doing?”, talented people will catch the hint. If you’re still struggling to get a proper answer, put the fear of a reference check into the person — “if you advance to the next step in our process, we will ask for your help in setting up some references. (…) What would these references say are something things you are not good at or not interested in?”

    4. Who were your last five bosses, and what would they each rate your performance on a scale of 1–10 WHEN we talk to them? The word ‘when’ is the key to unlock the truth. A rating of 7 is neutral, we are looking for 8 and above. After the rating answer always press for details.


    If you are happy with the interview so far, conclude the call by offering the candidate an opportunity to ask questions. Otherwise just thank them for their time.

    Tips:

    • Always compare the person’s strengths with the ones on the scorecard.
    • When in doubt, there’s no doubt. You need to have the feeling that you have found the one.
    • Get curious: What, How, Tell me more. Keep using this framework until you are clear about what the person is really saying.
    • Hit the gong fast. If an answer automatically rules out a candidate, just end up the interview earlier and use your precious time to focus on A players.

    Who to Interview

    Chronological walk-through of a person’s career.

    You can begin by asking about the highs and lows of a person’s educational experience to gain insight into their background. After this, ask them 5 simple questions for each job they had in the past.

    What were you hired to do?

    You are trying to discover what their scorecard might have been if they had one for that role. Ask them “how was your success measured in the role? What was the mission and key outcomes? What competencies mattered?”.

    What accomplishments are you most proud of?

    Ideally, candidates will tell you about accomplishments that match the job outcomes they just described to you. Even better if they match the ones of the scorecard for the position you are trying to fill.

    Note: A players tend to talk about outcomes linked to expectations, B and C players talk generally about events, people they met, or aspects of the job they liked without ever getting into results.

    What were some of the low points during that job?

    People can be hesitant to share their lows at first. Keep reframing the question over and over until the candidate gets the message. E.g. “What went really wrong? Biggest mistake? done differently? parts you didn’t like? peers stronger than you?

    Who were the people you worked with?

    • What was your boss’s name and how do you spell that?

    Forcing candidates to spell the name out no matter how common it might be sends a powerful message: you are going to call, so they should tell the truth. This is referred as the “threat of reference check (TORC)”.

    • What was it like working with them?

    Ideally, you expect high praise for their bosses and how they received mentoring and coaching from them over the years. A neutral answer will sound somewhat more reserved — not positive nor negative.

    • What WILL they tell me about your biggest strengths and areas to improve?

    Use “will” instead of “would” so candidates know you mean business, and are therefore, more likely to tell you the truth since you will learn it from reference calls anyways. Dig in as much as you can.

    • How would you rate the team you inherited on an A, B, C scale? What changes did you make? Did you hire anybody? Fire anybody? How would you rate the team when you left it on A,B,C scale.

    This is applicable to managers. And allows you to understand how they approach building a strong team. Do they accept the hand they have been dealt with or do they make changes to make a better hand? What changes do they make? How long does it take?

    Apply TORC here too: “When we speak with team members of your team, what will they say were your biggest strengths and weaknesses as manager?”

    Why did you leave that job?

    Was the candidate promoted, recruited or fired from each job? How did they feel about it? How did their boss react to the news? E.g. A players are highly valued by their bosses.

    Get curious. Find out why and stick with it until you have a clear picture of what actually happened.

    Conducting an effective who interview

    • The hiring manager should conduct this interview. They own the hire, and are the ones who will suffer the consequences of making a mistake. Their career and job happiness depend on finding A players.
    • Conduct an interview with a colleague (e.g. someone from HR, another manager or member of your team), this allows you to focus on questions and someone else to take notes.
    • Kick off the interview by setting expectations, e.g. “We are going to walk through each job you have held, for each job I am going to ask you five core questions. At the end we will discuss your career goals and aspirations and you will have a chance to ask me questions. If we mutually decide to continue, we will conduct reference calls to complete the process”.

    Master tactics

    1. Interrupting. You have to interrupt the candidate, there is no avoiding it. At least once every 3/4 minutes. Smile broadly, match their enthusiasm level, and use reflective listening to get them to stop talking without demoralizing them.
    2. The three P’s. This helps you understand how valuable an accomplishment was in any context. (1) How did the performance compare to the previous year’s performance; (2) How did your performance compare to the plan?; (3) How did your performance compare to that of peers?
    3. Push versus Pull. People who perform are generally pulled to greater opportunities. People who perform poorly are often pushed out of their jobs.
    4. Painting a picture. You’ll only understand what a candidate is saying when you can literally see a picture of it in your mind. Always try to put yourself in their shoes.
    5. Stopping at the Stop signs. Look for shifts in body language and other inconsistencies. “We did great in that role” while shifting in their chair, looking down and covering their mouth may be a stop sign. When that happens, get curious and understand how “great” they actually did. What was actually their contribution?

    Focused Interview

    Getting to know more. This is NOT another Who interview. It provides the chance to invite other team member to get their opinion, but the script should be followed. Think of this interview as the “odds enhancer” to truly focus on the outcomes and/or competencies on the scorecard.

    1. The purpose of this interview is to talk about [specific outcome or competency]
    2. What are your biggest accomplishments in this area during your career
    3. What are your insights into your biggest mistakes and lessons learned in this area?

    Don’t be scared to use the “What? How? Tell me more” framework until you understand what the person did and how they did it.

    Feel free to have multiple shorter focused interviews to understand particular outcome/competencies.

    Double-check the cultural fit. Final gauge on the cultural fit — critical! Include competencies and outcomes that go beyond the specifics of the job to embrace the larger values of your company.

    Reference Interview

    Testing what you learned. Don’t skip the references!

    1. Pick the right references. Review your notes from the Who interview and pick the bosses, peers, and subordinates with whom you would like to speak. Don’t just use the reference list the candidate gives you.
    2. Ask the candidate to contact the references to set up the calls. Some companies have a policy that prevents employees from serving as references, so you can increase your chances of talking with a reference if the candidate sets this up.
    3. Conduct the right number of reference interviews. The book recommends 3 past bosses, 2 peers/customers and 2 subordinates.

    Reference interview guide:

    1. In what context did you work with the person? Conversation starter and memory jogger.
    2. What were the person’s biggest strengths? Ask for multiple examples to put strengths and development areas into context. Don’t forget to get curious by using “What? How? Tell me more” framework to clarify responses.
    3. What were the person’s biggest areas for improvement back then? The wording ‘back then’ liberates the reference to talk about weaknesses that existed in the past. “In truth, we believe, people don’t change that much. People aren’t mutual funds. Past performance really is an indicator of future performance.”
    4. How would you rate their overall performance in that job on a 1–10 scale? What about their performance causes you to give that rating? Remember that 6 is really a 2. How does this rating compare with what the candidate said in advance? Wide discrepancy is alarming.
    5. The person mentioned that they struggled with ____ on that job. Can you talk more about that? Test something the candidate told you by framing it as a question for the reference. E.g. “the person mentioned that you MIGHT SAY he was disorganized. Can you tell me more about that?” the wording is again very important as ‘might say’ suggests to the reference that they have permission to talk about the subject because the candidate raised it.

    These questions follow the same pattern as the other interviews. This makes it very easy to merge what you hear with what you have already learned about a candidate.

    Tips:

    • Avoid accepting a candidate’s reference list at face value. E.g. either use your own network for gathering objective unbiased data or try to reach out to subordinates or people two levels below who interacted with the candidate to get a more honest answer.
    • Hearing or understanding the code for risky candidates. Be able to read between lines. People don’t like to give negative reference, so your best defense is to pay close attention to what people say and how they say it. Examples of bad signs: If they just confirm dates of employment, um’s and er’s is hesitation, absence of enthusiasm (faint praise).

    Decide who to hire

    Skill-Will Bull’s Eye

    Does somebody’s skill (what they can do) and will (what they want to do) match your scorecard? This is a person’s skill-will profile.

    image

    You should have plenty of data at this stage to make this assessment.

    • Skill has to do with a candidate’s ability to achieve the individual outcomes on your scorecard. If you believe a candidate has a 90% or better chance to achieve a certain outcome based on the data gathered, rate them an A, otherwise a B or a C. Repeat for each outcome.
    • Will has to do with the motivations and competencies a candidate brings to the table. For each competency, does the data suggest there is a 90% or better chance that the candidate will display that competency? If so rate them an A, otherwise a B or C. Repeat for each competency.

    An A player is someone whose skill and will match your scorecard. Anything less is a B or C, no matter the experience or seeming talent level.

    Red Flags: When to dive beneath the surface

    These flags may not be deal killers, but they are likely to signal that there is something worth exploring beneath the surface:

    • Does not mention past failures
    • Exaggerates their answers
    • Takes credit for the work of others
    • Speaks poorly of past bosses
    • Cannot explain job moves
    • People most important to the candidate are unsupportive of a change
    • For managerial hires, never had to hire or fire anybody
    • Seems more interested in compensation and benefits than in the job itself
    • Tries too hard to look like an expert
    • Self-absorbed

    More behavioral warning signs:

    • Winning too much
    • Adding too much value
    • Starting a sentence with ‘no’, ‘but’, or ‘however’
    • Telling the world how smart we are
    • Making destructive comments about previous colleagues
    • Blaming others
    • Making excuses
    • The excessive need to ‘be me’

    How to decide:

    1. Take out your scorecards that you have completed on each candidate
    2. Make sure you have rated all of the candidates on the scorecard. If you have not given each candidate an overall A, B or C grade, do so now. Make any updates you need to based on the reference interviews. Look at the data, consider the opinions and observations of the interview team, and give a final grade.
    3. If you have no A’s, then restart your process and the second step: source.
    4. If you have one A, decide to hire that person.
    5. If you have multiple A’s, then rank them and decide to hire the best A among them.

    Sell

    Once candidates pass the selection, persuade them to join. The key to successfully selling your candidate to your company is putting yourself in their shoes.

    Five F’s of selling

    There are 5 areas that candidates tend to care about, make sure to address each of these 5 areas until you get the person onboard.

    1. Selling Fit: This ties together the company’s vision, needs and culture with the candidate’s goals, strengths and values.
    2. Selling Family: Takes into account the broader trauma of changing jobs.
    3. Selling Freedom: The autonomy the candidate will have to make their own decisions.
    4. Selling Fortune: Reflects the stability of your company and the overall financial upside.
    5. Selling Fun: Describes the work environment and personal relationships the candidate will make.

    Five waves of selling

    Selling should be something that happens throughout the entire hiring process. In particular, there are five distinct phases that merit increased selling effort:

    1. When you source
    2. When you interview
    3. The time between your offer and the candidate acceptance
    4. The time between the candidate’s acceptance and their first day
    5. The new hire’s first one hundred days on the job

    Persistent pays off

    Once you have identified the right candidate, you must be persistent and do whatever you can to sign the deal.

    How to: sell A Players

    1. Identify which of the five F’s really matter to the candidate.
    2. Create and execute a plan to address the relevant F’s during the five waves of selling.
    3. Be persistent. Don’t give up until you have your A player on board.

    Conclusion

    In a more simplistic image, this is what the A method boils down too.

    image

    I really enjoyed reading this book and I am taking a lot of these learnings to improve the hiring processes at OpenBB.

    - - +

    Firing sucks. How to avoid doing so by hiring A players.

    · 19 min read


    Firing is tough. This blogpost discusses how to avoid it by hiring A players, improving the hiring process, and understanding the importance of a scorecard in recruitment.

    In 2022, OpenBB grew to 20 people. But amongst all of our hiring, we also had to let some people go.

    Before 2022, I had never fired anyone in my life but in my new role, I had to learn how to do it. If you’re a manager, you know that this is the hardest part of the job.

    Having that said, I wanted to use my Christmas holidays to understand how we can avoid letting people go. For this, I needed to start from the beginning and improve our overall hiring process.

    This blogpost will be highly based on the book “Who: The A Method for Hiring” by Geoff Smart and Randy Street, which I highly recommend.

    A method for hiring

    What is an A player? _A candidate who has at least a 90 percent chance of achieving a set of outcomes that only the top 10 percent of possible candidates could achieve.

    In this post, I will go over the steps to get an A team.

    image

    Scorecard

    This is a document that describes the mission for the position, outcomes that must be accomplished, and competencies that fit with both the company culture and the role.

    This is an example of what a scorecard should look like:

    image

    Let’s go through each of the sections in this document.

    Mission

    The mission is an executive summary of the job’s core purpose. It boils the job down to its essence so everybody understands why you need to hire someone in this role.

    The book talks about how you should avoid hiring a generalist. In my opinion, it depends on the stage of the company. At OpenBB, we are able to ship fast with a small team because we have a lot of generalists that are A players. However, finding a generalist A player is a much harder task than finding an A player specialist. Here, we benefit from having an open source project, since we get to build with candidates before we hire them.

    How to: Develop a short statement of one to five sentences that describe why a role exists.

    Outcomes

    Describes what a person needs to accomplish in a role.

    “While typical job descriptions break down because they focus on activities, or a list of things a person will be doing, scorecards succeed because they focus on outcomes, or what a person must get done.”


    How to: Develop 3 to 8 specific objective outcomes that a person must accomplish to achieve an A performance, ranked by order of importance.

    Competencies

    Define how you expect a new hire to operate in the fulfilment of the job and how they can achieve their objectives. What competencies really count?

    Ensure behavioural fit

    Critical competencies for A players are: Efficiency, honesty/integrity, organization, aggressiveness, follow-through, intelligence, analytical skills, attention to detail, persistence, proactivity.

    Others may include: Ability to hire A players, ability to develop people, flexibility/adaptability, calm under pressure, strategic thinking/visioning, creativity/innovation, enthusiasm, work ethic, high standards, listening skills, openness. to criticism and ideas, communications, team work and persuasion.

    Ensure organizational fit

    Evaluating cultural fit begins with evaluating your company’s values against the ones of the candidate.

    Recently, at OpenBB, I asked everyone to share with me a list of values that we currently had and they were proud of, and/or values that they would like to use instead. In a startup, where the pace is incredibly fast and the team is in constant change, I strongly believe values change over time. So I looked at everyone’s inputs, and summarized them into the following OpenBB values: Autonomy and Ownership, Innovation and Excellence, Transparent and Trustworthy, Diversity and Inclusion, Purpose and Passion, User Focused and Community Oriented.

    How to: Identify as many role-based competencies that you think are appropriate to describe the behaviors that someone must demonstrate to achieve the outcomes. Next, identify 5 to 8 competencies that describe your culture and place those on every scorecard.

    From scorecard to strategy

    The beauty of a document like this is that they become the blueprint that links the theory of strategy to the reality of execution. They translate your business plans into role-by-role outcomes, create alignment among your team, unify your culture and ensure people understand your expectations.

    In addition, they allow you to monitor employee progress over time in your annual review system and to rate your team as part of their talent review progress.

    How to: Pressure-test your scorecard by comparing it with the business plan and scorecards of the people who will interface with the role. Ensure that there is consistency and alignment. Then share the scorecard with relevant parties, including peers and recruiters.

    Source

    Systematic sourcing before you have slots to fill ensures you have high-quality candidates waiting when you need them.

    Referrals from your professional and personal networks

    Create a list of the ten most talented people you know and commit to speaking with at least one of them per week for the next ten weeks. At the end of each conversation ask “Who are the most talented people you know?”. Continue to build your list and continue to talk with at least one person per week. “Of all the ways to source candidates, the number one method is to ask for referrals from your personal and professional networks”.

    Referrals from your employees

    Add sourcing as an outcome on every scorecard for your team. Encourage employees to ask people in their networks. Offer a referral bonus. In-house referrals often provide better-targeted sourcing, this is because employees already know our needs and culture.

    Deputizing friends of the firm

    Consider offering a referral bounty to select friends of the firm. It could be as inexpensive as merchandise or as expensive as a significant cash bonus. When talking with someone new at a party or a VC, always ask “who do you know who might be a good fit for my company?

    Sourcing system

    Create a system that (1) captures the names and the contact information on everybody you source and (2) schedules weekly time on your calendar to follow up. Try to spend 30 minute every week sending messages or having calls with candidates from this database of A players.

    Hiring external recruiters or hiring recruiting researchers

    The book speaks about both, but from my experience of having an open company with an exciting mission that builds in public, these have not been relevant to us yet.

    Select

    Create a series of structured interviews which build on each other so you can rate your scorecard.

    Screening Interview

    Short, phone-based interview designed to clear out B and C players from your roster of candidates.

    1. What are your career goals? If no goals echo your own website goals, screen them out. Ideally candidate will speak with passion and energy about their goals which are aligned with the role.

    2. What are you really good at professionally? Make sure that with the list of strengths, there are always examples to backup the claim. Ensure that those strengths are relevant to the competencies required in the scorecard, if not, screen them out.

    3. What are you not good at or not interested in doing professionally? Ignore strengths disguised as weakness. Ask again “what are you really not good at or not interested in doing?”, talented people will catch the hint. If you’re still struggling to get a proper answer, put the fear of a reference check into the person — “if you advance to the next step in our process, we will ask for your help in setting up some references. (…) What would these references say are something things you are not good at or not interested in?”

    4. Who were your last five bosses, and what would they each rate your performance on a scale of 1–10 WHEN we talk to them? The word ‘when’ is the key to unlock the truth. A rating of 7 is neutral, we are looking for 8 and above. After the rating answer always press for details.


    If you are happy with the interview so far, conclude the call by offering the candidate an opportunity to ask questions. Otherwise just thank them for their time.

    Tips:

    • Always compare the person’s strengths with the ones on the scorecard.
    • When in doubt, there’s no doubt. You need to have the feeling that you have found the one.
    • Get curious: What, How, Tell me more. Keep using this framework until you are clear about what the person is really saying.
    • Hit the gong fast. If an answer automatically rules out a candidate, just end up the interview earlier and use your precious time to focus on A players.

    Who to Interview

    Chronological walk-through of a person’s career.

    You can begin by asking about the highs and lows of a person’s educational experience to gain insight into their background. After this, ask them 5 simple questions for each job they had in the past.

    What were you hired to do?

    You are trying to discover what their scorecard might have been if they had one for that role. Ask them “how was your success measured in the role? What was the mission and key outcomes? What competencies mattered?”.

    What accomplishments are you most proud of?

    Ideally, candidates will tell you about accomplishments that match the job outcomes they just described to you. Even better if they match the ones of the scorecard for the position you are trying to fill.

    Note: A players tend to talk about outcomes linked to expectations, B and C players talk generally about events, people they met, or aspects of the job they liked without ever getting into results.

    What were some of the low points during that job?

    People can be hesitant to share their lows at first. Keep reframing the question over and over until the candidate gets the message. E.g. “What went really wrong? Biggest mistake? done differently? parts you didn’t like? peers stronger than you?

    Who were the people you worked with?

    • What was your boss’s name and how do you spell that?

    Forcing candidates to spell the name out no matter how common it might be sends a powerful message: you are going to call, so they should tell the truth. This is referred as the “threat of reference check (TORC)”.

    • What was it like working with them?

    Ideally, you expect high praise for their bosses and how they received mentoring and coaching from them over the years. A neutral answer will sound somewhat more reserved — not positive nor negative.

    • What WILL they tell me about your biggest strengths and areas to improve?

    Use “will” instead of “would” so candidates know you mean business, and are therefore, more likely to tell you the truth since you will learn it from reference calls anyways. Dig in as much as you can.

    • How would you rate the team you inherited on an A, B, C scale? What changes did you make? Did you hire anybody? Fire anybody? How would you rate the team when you left it on A,B,C scale.

    This is applicable to managers. And allows you to understand how they approach building a strong team. Do they accept the hand they have been dealt with or do they make changes to make a better hand? What changes do they make? How long does it take?

    Apply TORC here too: “When we speak with team members of your team, what will they say were your biggest strengths and weaknesses as manager?”

    Why did you leave that job?

    Was the candidate promoted, recruited or fired from each job? How did they feel about it? How did their boss react to the news? E.g. A players are highly valued by their bosses.

    Get curious. Find out why and stick with it until you have a clear picture of what actually happened.

    Conducting an effective who interview

    • The hiring manager should conduct this interview. They own the hire, and are the ones who will suffer the consequences of making a mistake. Their career and job happiness depend on finding A players.
    • Conduct an interview with a colleague (e.g. someone from HR, another manager or member of your team), this allows you to focus on questions and someone else to take notes.
    • Kick off the interview by setting expectations, e.g. “We are going to walk through each job you have held, for each job I am going to ask you five core questions. At the end we will discuss your career goals and aspirations and you will have a chance to ask me questions. If we mutually decide to continue, we will conduct reference calls to complete the process”.

    Master tactics

    1. Interrupting. You have to interrupt the candidate, there is no avoiding it. At least once every 3/4 minutes. Smile broadly, match their enthusiasm level, and use reflective listening to get them to stop talking without demoralizing them.
    2. The three P’s. This helps you understand how valuable an accomplishment was in any context. (1) How did the performance compare to the previous year’s performance; (2) How did your performance compare to the plan?; (3) How did your performance compare to that of peers?
    3. Push versus Pull. People who perform are generally pulled to greater opportunities. People who perform poorly are often pushed out of their jobs.
    4. Painting a picture. You’ll only understand what a candidate is saying when you can literally see a picture of it in your mind. Always try to put yourself in their shoes.
    5. Stopping at the Stop signs. Look for shifts in body language and other inconsistencies. “We did great in that role” while shifting in their chair, looking down and covering their mouth may be a stop sign. When that happens, get curious and understand how “great” they actually did. What was actually their contribution?

    Focused Interview

    Getting to know more. This is NOT another Who interview. It provides the chance to invite other team member to get their opinion, but the script should be followed. Think of this interview as the “odds enhancer” to truly focus on the outcomes and/or competencies on the scorecard.

    1. The purpose of this interview is to talk about [specific outcome or competency]
    2. What are your biggest accomplishments in this area during your career
    3. What are your insights into your biggest mistakes and lessons learned in this area?

    Don’t be scared to use the “What? How? Tell me more” framework until you understand what the person did and how they did it.

    Feel free to have multiple shorter focused interviews to understand particular outcome/competencies.

    Double-check the cultural fit. Final gauge on the cultural fit — critical! Include competencies and outcomes that go beyond the specifics of the job to embrace the larger values of your company.

    Reference Interview

    Testing what you learned. Don’t skip the references!

    1. Pick the right references. Review your notes from the Who interview and pick the bosses, peers, and subordinates with whom you would like to speak. Don’t just use the reference list the candidate gives you.
    2. Ask the candidate to contact the references to set up the calls. Some companies have a policy that prevents employees from serving as references, so you can increase your chances of talking with a reference if the candidate sets this up.
    3. Conduct the right number of reference interviews. The book recommends 3 past bosses, 2 peers/customers and 2 subordinates.

    Reference interview guide:

    1. In what context did you work with the person? Conversation starter and memory jogger.
    2. What were the person’s biggest strengths? Ask for multiple examples to put strengths and development areas into context. Don’t forget to get curious by using “What? How? Tell me more” framework to clarify responses.
    3. What were the person’s biggest areas for improvement back then? The wording ‘back then’ liberates the reference to talk about weaknesses that existed in the past. “In truth, we believe, people don’t change that much. People aren’t mutual funds. Past performance really is an indicator of future performance.”
    4. How would you rate their overall performance in that job on a 1–10 scale? What about their performance causes you to give that rating? Remember that 6 is really a 2. How does this rating compare with what the candidate said in advance? Wide discrepancy is alarming.
    5. The person mentioned that they struggled with ____ on that job. Can you talk more about that? Test something the candidate told you by framing it as a question for the reference. E.g. “the person mentioned that you MIGHT SAY he was disorganized. Can you tell me more about that?” the wording is again very important as ‘might say’ suggests to the reference that they have permission to talk about the subject because the candidate raised it.

    These questions follow the same pattern as the other interviews. This makes it very easy to merge what you hear with what you have already learned about a candidate.

    Tips:

    • Avoid accepting a candidate’s reference list at face value. E.g. either use your own network for gathering objective unbiased data or try to reach out to subordinates or people two levels below who interacted with the candidate to get a more honest answer.
    • Hearing or understanding the code for risky candidates. Be able to read between lines. People don’t like to give negative reference, so your best defense is to pay close attention to what people say and how they say it. Examples of bad signs: If they just confirm dates of employment, um’s and er’s is hesitation, absence of enthusiasm (faint praise).

    Decide who to hire

    Skill-Will Bull’s Eye

    Does somebody’s skill (what they can do) and will (what they want to do) match your scorecard? This is a person’s skill-will profile.

    image

    You should have plenty of data at this stage to make this assessment.

    • Skill has to do with a candidate’s ability to achieve the individual outcomes on your scorecard. If you believe a candidate has a 90% or better chance to achieve a certain outcome based on the data gathered, rate them an A, otherwise a B or a C. Repeat for each outcome.
    • Will has to do with the motivations and competencies a candidate brings to the table. For each competency, does the data suggest there is a 90% or better chance that the candidate will display that competency? If so rate them an A, otherwise a B or C. Repeat for each competency.

    An A player is someone whose skill and will match your scorecard. Anything less is a B or C, no matter the experience or seeming talent level.

    Red Flags: When to dive beneath the surface

    These flags may not be deal killers, but they are likely to signal that there is something worth exploring beneath the surface:

    • Does not mention past failures
    • Exaggerates their answers
    • Takes credit for the work of others
    • Speaks poorly of past bosses
    • Cannot explain job moves
    • People most important to the candidate are unsupportive of a change
    • For managerial hires, never had to hire or fire anybody
    • Seems more interested in compensation and benefits than in the job itself
    • Tries too hard to look like an expert
    • Self-absorbed

    More behavioral warning signs:

    • Winning too much
    • Adding too much value
    • Starting a sentence with ‘no’, ‘but’, or ‘however’
    • Telling the world how smart we are
    • Making destructive comments about previous colleagues
    • Blaming others
    • Making excuses
    • The excessive need to ‘be me’

    How to decide:

    1. Take out your scorecards that you have completed on each candidate
    2. Make sure you have rated all of the candidates on the scorecard. If you have not given each candidate an overall A, B or C grade, do so now. Make any updates you need to based on the reference interviews. Look at the data, consider the opinions and observations of the interview team, and give a final grade.
    3. If you have no A’s, then restart your process and the second step: source.
    4. If you have one A, decide to hire that person.
    5. If you have multiple A’s, then rank them and decide to hire the best A among them.

    Sell

    Once candidates pass the selection, persuade them to join. The key to successfully selling your candidate to your company is putting yourself in their shoes.

    Five F’s of selling

    There are 5 areas that candidates tend to care about, make sure to address each of these 5 areas until you get the person onboard.

    1. Selling Fit: This ties together the company’s vision, needs and culture with the candidate’s goals, strengths and values.
    2. Selling Family: Takes into account the broader trauma of changing jobs.
    3. Selling Freedom: The autonomy the candidate will have to make their own decisions.
    4. Selling Fortune: Reflects the stability of your company and the overall financial upside.
    5. Selling Fun: Describes the work environment and personal relationships the candidate will make.

    Five waves of selling

    Selling should be something that happens throughout the entire hiring process. In particular, there are five distinct phases that merit increased selling effort:

    1. When you source
    2. When you interview
    3. The time between your offer and the candidate acceptance
    4. The time between the candidate’s acceptance and their first day
    5. The new hire’s first one hundred days on the job

    Persistent pays off

    Once you have identified the right candidate, you must be persistent and do whatever you can to sign the deal.

    How to: sell A Players

    1. Identify which of the five F’s really matter to the candidate.
    2. Create and execute a plan to address the relevant F’s during the five waves of selling.
    3. Be persistent. Don’t give up until you have your A player on board.

    Conclusion

    In a more simplistic image, this is what the A method boils down too.

    image

    I really enjoyed reading this book and I am taking a lot of these learnings to improve the hiring processes at OpenBB.

    + + \ No newline at end of file diff --git a/blog/free-investment-research-ecosystem-to-consistently-beat-the-market/index.html b/blog/free-investment-research-ecosystem-to-consistently-beat-the-market/index.html index cbd3c9f503..2b63b53c5a 100644 --- a/blog/free-investment-research-ecosystem-to-consistently-beat-the-market/index.html +++ b/blog/free-investment-research-ecosystem-to-consistently-beat-the-market/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Free investment research ecosystem to consistently beat the market

    · 6 min read


    The OpenBB Hub is a comprehensive platform for managing all products, data, subscriptions, and content for users, aiming to empower investors globally with tools previously exclusive to institutions.

    The OpenBB Hub is the new one-stop-shop for managing all products, data, subscriptions, and content for users!

    Introduction

    When we started this journey, we always wanted to empower investors across the globe to have access to tools previously only available to institutions.

    We started by building the OpenBB Terminal which is an open source investment research platform that users can customize as they see fit and build on top of.

    If you haven’t starred the repo, now is a good chance to do so here ⭐️.

    Then, we wanted to address the social nature of investing. Instead of adding the chat functionality to OpenBB Terminal, we brought investment research data where these communities were already having fruitful discussions (Discord and Telegram). This makes much more sense from a user-convenience standpoint, and that’s how the OpenBB Bot was born. More information here.

    As much customization as the OpenBB Terminal allowed, we didn’t give creators as much freedom as we could have since they would need to download the source code of the terminal in order to leverage our core.

    image

    But we we wanted to make this experience as seamless as possible so users could build on top of our foundation. Thus, we repurposed the core of the OpenBB Terminal into an OpenBB SDK that is “pip installable” from everywhere — OpenBB . This means that all you need to have access to a universe of investment research data programmatically is python and running pip install openbb within a notebook.

    This was a big win since the community reaction was very positive and we are now seeing it adopted by investors, educational courses, and even content creators. So much that we even created a tab to keep track of these on our /open page.

    However, we focused too much on the products and didn’t slow down to think about the user experience utilizing multiple OpenBB products. This is where OpenBB Hub comes into play. OpenBB Hub is the platform we use to interact with our community, push OpenBB content, allow product management, and much more.

    TL;DR:

    • Allows to manage your OpenBB Terminal API keys, feature flags and settings. In addition, we allow users to save & share their openbb script routines
    • Allows access to the OpenBB Terminal installer new versions
    • Allows access to the OpenBB Bot dashboard — which allows fully customization from a user perspective. This improves your experience by 10x when using OpenBB Bot on Telegram or Discord.
    • Allows to sign-up for early waitlist of OpenBB Terminal Pro

    OpenBB Hub - OpenBB Terminal

    Since the beginning users have installed the OpenBB Terminal in multiple desktops due to its free nature. The issue? The API key management was a pain since there was not a way to sync these across different machines. Until now.

    With OpenBB Hub and using that account detail to log in the terminal, this problem gets fixed. Not only that, but users will benefit from default data sources, terminal color schema customization and even .openbb routines being manageable from Hub and more importantly accessible on a terminal instance as long as they login with their user details.

    image

    OpenBB Hub - OpenBB Bot

    Today we are also announcing the OpenBB Bot will be fully free for individuals. All you have to do is to register for the OpenBB Hub.

    For users that were already users of our OpenBB Bot, the only change on the platform is pricing and an increase push towards better documentation and more tutorials. This is an initiative that we are taking company-wide to focus on better documentation and more content to fully leverage our suite of products.

    OpenBB bot is critical to us as we work hard towards making a full ecosystem for investment research. And now you can access this experience for free, and share investment research data with your friends / colleagues.

    image

    OpenBB Hub - OpenBB SDK

    As the OpenBB SDK is in its core a pip installable package with its own page on PiPy there aren’t a lot of functionalities that we can make available in this page. We allow the user to set their API keys similarly to what we do in the Terminal, to improve UX when utilizing the SDK.

    In addition, we are going to display open source projects built by the community that leverage our core so that they can serve as an inspiration to you. If you are working on something that uses OpenBB at its core, tag your GitHub repository with “openbb” and we’ll add you to the list of projects that rely on our foundation.

    image

    OpenBB Hub - OpenBB Terminal Pro (waitlist)

    If all these features weren’t enough, we have decided to open the OpenBB Terminal Pro WAITLIST for users who register on our OpenBB Hub.

    The OpenBB Terminal Pro is something that has been months in the works and is yet our most exciting product to date. We have been holding back on it because we believe this will change the way investors think about investing. This time we worked with design partners and had dozens of user interviews from financial professionals to understand their pain points and what role we could fill. So even being able to start creating a waitlist around it is something that the team is very excited about.

    We will gradually roll out the OpenBB Terminal Pro to a few users from the waitlist to get early feedback.

    If you are one of these, I look forward to onboarding you personally 🤝

    image

    Final thoughts

    Although OpenBB Hub is not a product per se, the amount of work that the team put together to make this happen is something nothing short of extraordinary. This was the first project where the entire team (~20 people from engineering, product, design and marketing) had to work together as whole.

    The OpenBB Terminal dashboard is completely new, the concept of login had to be invented and needed to function perfectly with the Hub. The SDK page is also new. The OpenBB Bot dashboard already existed, but we made the tier for individuals completely free, so we had to update it to reflect that big pricing change. And finally, we open the OpenBB Terminal Pro waitlist.

    The OpenBB Hub is completely free.

    All you have to do is to register so we can know more information about yourself regarding your primary usage for our products (professional, academic, personal) — this allows us to understand what features to prioritize in the future and improve the quality of our products.

    In case you missed the webinar, you can view it below so that you are up-to-date with all the exciting new features that the team has released.


    - - +

    Free investment research ecosystem to consistently beat the market

    · 6 min read


    The OpenBB Hub is a comprehensive platform for managing all products, data, subscriptions, and content for users, aiming to empower investors globally with tools previously exclusive to institutions.

    The OpenBB Hub is the new one-stop-shop for managing all products, data, subscriptions, and content for users!

    Introduction

    When we started this journey, we always wanted to empower investors across the globe to have access to tools previously only available to institutions.

    We started by building the OpenBB Terminal which is an open source investment research platform that users can customize as they see fit and build on top of.

    If you haven’t starred the repo, now is a good chance to do so here ⭐️.

    Then, we wanted to address the social nature of investing. Instead of adding the chat functionality to OpenBB Terminal, we brought investment research data where these communities were already having fruitful discussions (Discord and Telegram). This makes much more sense from a user-convenience standpoint, and that’s how the OpenBB Bot was born. More information here.

    As much customization as the OpenBB Terminal allowed, we didn’t give creators as much freedom as we could have since they would need to download the source code of the terminal in order to leverage our core.

    image

    But we we wanted to make this experience as seamless as possible so users could build on top of our foundation. Thus, we repurposed the core of the OpenBB Terminal into an OpenBB SDK that is “pip installable” from everywhere — OpenBB . This means that all you need to have access to a universe of investment research data programmatically is python and running pip install openbb within a notebook.

    This was a big win since the community reaction was very positive and we are now seeing it adopted by investors, educational courses, and even content creators. So much that we even created a tab to keep track of these on our /open page.

    However, we focused too much on the products and didn’t slow down to think about the user experience utilizing multiple OpenBB products. This is where OpenBB Hub comes into play. OpenBB Hub is the platform we use to interact with our community, push OpenBB content, allow product management, and much more.

    TL;DR:

    • Allows to manage your OpenBB Terminal API keys, feature flags and settings. In addition, we allow users to save & share their openbb script routines
    • Allows access to the OpenBB Terminal installer new versions
    • Allows access to the OpenBB Bot dashboard — which allows fully customization from a user perspective. This improves your experience by 10x when using OpenBB Bot on Telegram or Discord.
    • Allows to sign-up for early waitlist of OpenBB Terminal Pro

    OpenBB Hub - OpenBB Terminal

    Since the beginning users have installed the OpenBB Terminal in multiple desktops due to its free nature. The issue? The API key management was a pain since there was not a way to sync these across different machines. Until now.

    With OpenBB Hub and using that account detail to log in the terminal, this problem gets fixed. Not only that, but users will benefit from default data sources, terminal color schema customization and even .openbb routines being manageable from Hub and more importantly accessible on a terminal instance as long as they login with their user details.

    image

    OpenBB Hub - OpenBB Bot

    Today we are also announcing the OpenBB Bot will be fully free for individuals. All you have to do is to register for the OpenBB Hub.

    For users that were already users of our OpenBB Bot, the only change on the platform is pricing and an increase push towards better documentation and more tutorials. This is an initiative that we are taking company-wide to focus on better documentation and more content to fully leverage our suite of products.

    OpenBB bot is critical to us as we work hard towards making a full ecosystem for investment research. And now you can access this experience for free, and share investment research data with your friends / colleagues.

    image

    OpenBB Hub - OpenBB SDK

    As the OpenBB SDK is in its core a pip installable package with its own page on PiPy there aren’t a lot of functionalities that we can make available in this page. We allow the user to set their API keys similarly to what we do in the Terminal, to improve UX when utilizing the SDK.

    In addition, we are going to display open source projects built by the community that leverage our core so that they can serve as an inspiration to you. If you are working on something that uses OpenBB at its core, tag your GitHub repository with “openbb” and we’ll add you to the list of projects that rely on our foundation.

    image

    OpenBB Hub - OpenBB Terminal Pro (waitlist)

    If all these features weren’t enough, we have decided to open the OpenBB Terminal Pro WAITLIST for users who register on our OpenBB Hub.

    The OpenBB Terminal Pro is something that has been months in the works and is yet our most exciting product to date. We have been holding back on it because we believe this will change the way investors think about investing. This time we worked with design partners and had dozens of user interviews from financial professionals to understand their pain points and what role we could fill. So even being able to start creating a waitlist around it is something that the team is very excited about.

    We will gradually roll out the OpenBB Terminal Pro to a few users from the waitlist to get early feedback.

    If you are one of these, I look forward to onboarding you personally 🤝

    image

    Final thoughts

    Although OpenBB Hub is not a product per se, the amount of work that the team put together to make this happen is something nothing short of extraordinary. This was the first project where the entire team (~20 people from engineering, product, design and marketing) had to work together as whole.

    The OpenBB Terminal dashboard is completely new, the concept of login had to be invented and needed to function perfectly with the Hub. The SDK page is also new. The OpenBB Bot dashboard already existed, but we made the tier for individuals completely free, so we had to update it to reflect that big pricing change. And finally, we open the OpenBB Terminal Pro waitlist.

    The OpenBB Hub is completely free.

    All you have to do is to register so we can know more information about yourself regarding your primary usage for our products (professional, academic, personal) — this allows us to understand what features to prioritize in the future and improve the quality of our products.

    In case you missed the webinar, you can view it below so that you are up-to-date with all the exciting new features that the team has released.


    + + \ No newline at end of file diff --git a/blog/from-open-source-to-open-startup/index.html b/blog/from-open-source-to-open-startup/index.html index 677c099379..56c4693391 100644 --- a/blog/from-open-source-to-open-startup/index.html +++ b/blog/from-open-source-to-open-startup/index.html @@ -10,13 +10,13 @@ - - + +
    -

    From Open Source to Open Startup

    · 5 min read


    From Open Source to Open Startup: A journey of OpenBB towards transparency in the financial world.

    Being open source isn’t enough, at OpenBB we want to accelerate the transparency in the financial world.

    I want to start this blogpost by introducing the concept of an open startup. As this phrase can often be interpreted differently, here’s the standard definition that ChatGPT gave me:

    “An open startup is a company that practices open innovation and transparent communication with its stakeholders, including customers, employees, and investors. This means that the company is willing to share information about its products, services, and business operations with the public and is open to input and feedback from all stakeholders.


    Open startups typically have a strong focus on collaboration and community building, and they often use open source technology and principles in their operations. Some open startups may also be structured as cooperative or worker-owned enterprises, in which ownership and decision-making power are shared among employees.”

    Why now?

    I’ve been learning about the open startup movement for a while now and I always knew that I wanted OpenBB to follow this trend. At the end of the day, I want us to accelerate the openness and transparency in the financial world.

    But until recently, this wasn’t one of our top priorities. This all changed when the cryptocurrency exchange FTX collapsed. This was a house of cards and they stood for everything but transparency — not only with their users but also with their shareholders and team alike!

    John J. Ray III who has spent a career tackling large corporate failures involving allegations of criminal activity (like Enron), was appointed CEO of FTX to deal with the bankruptcy, and this is one of his quotes to the US congress:

    “Never in my career have I seen such an utter failure of corporate controls at every level of an organization, from the lack of financial statements to a complete failure of any internal controls or governance whatsoever”


    OpenBB wants to pave the way of transparency in the financial world.

    Why open?

    Transparency

    Transparency across team, shareholders, users and new hires is key. Everyone can see our growth in the same location; A single source of truth accessible to everyone at all times. We already have our code open source, which shows transparency in our engineering, so it only makes sense for us to behave in the same way with our business.

    Accountability

    Everyone will know how we’re doing, for better or worse. This will make us feel responsible to show accurate sustainable growth as this information becomes public. Since everyone has equity in the company, this will be our own skin in the game.

    When people ask, “How is OpenBB going?”, this can be answered with a single link to our open page.

    Community building

    Every company is trying to build a community these days, but building a community is hard. By having all of our information publicly available, anyone from the community will know how we are doing at all times — similar to what the team, shareholders and investors know.

    This helps to build trust in OpenBB and allow us to attract and retain talented employees who value transparency and an open culture.

    Marketing

    Users will be able to share our open page to share OpenBB metrics with other users, which will help to increase awareness for us.

    In addition, we want to become leaders of open culture in the financial world, which is known for being a very closed industry. We want to influence companies in this sector and start a movement.

    Fundraising

    Since starting OpenBB, I’ve met well over 50 different investors, even without actively fundraising. Whilst this is a great way to start relationships, it’s not sustainable as it takes valuable time away from talking with users/customers (and let’s be honest, even developing :slight_smile:). So by having an open page, we will be able to discuss our growth async and more efficiently. And then, when we are actively fundraising, we can focus on the details.

    How will it be done?

    We are adding all our metrics and stats to /open.

    Our open metrics will contain 4 main distinct sections to start with:

    Social Media metrics

    Twitter followers, Discord users, LinkedIn followers, YouTube views, Reddit followers. Allows to understand the strength of our community in the social media channels that we focus on.

    Team stats

    Team distribution and employee engagement coming soon. Allows to understand where we are based and employee experience at OpenBB

    Product metrics

    OpenBB Hub users, OpenBB Bot, OpenBB SDK and OpenBB Terminal. Allows to hold us accountable for our user growth and the usage that our products have

    Developer metrics

    Stars, forks, merged pull-requests, closed issues, contributors. Keep up-to-date with our development speed and how engaged the open source community is.

    For all the metrics that are open source, there will be an ⓘ in the top right to share information on why this chart was made open source and why it’s important to us.

    Once a metric is open, we do not intend to close it ever again, that is why all the metrics we are making public have gone through a thorough reasoning process and there’s enough contextual information to understand its meaning.

    If you can think of a metric that you would like to see on our open page, please feel free to DM me.

    - - +

    From Open Source to Open Startup

    · 5 min read


    From Open Source to Open Startup: A journey of OpenBB towards transparency in the financial world.

    Being open source isn’t enough, at OpenBB we want to accelerate the transparency in the financial world.

    I want to start this blogpost by introducing the concept of an open startup. As this phrase can often be interpreted differently, here’s the standard definition that ChatGPT gave me:

    “An open startup is a company that practices open innovation and transparent communication with its stakeholders, including customers, employees, and investors. This means that the company is willing to share information about its products, services, and business operations with the public and is open to input and feedback from all stakeholders.


    Open startups typically have a strong focus on collaboration and community building, and they often use open source technology and principles in their operations. Some open startups may also be structured as cooperative or worker-owned enterprises, in which ownership and decision-making power are shared among employees.”

    Why now?

    I’ve been learning about the open startup movement for a while now and I always knew that I wanted OpenBB to follow this trend. At the end of the day, I want us to accelerate the openness and transparency in the financial world.

    But until recently, this wasn’t one of our top priorities. This all changed when the cryptocurrency exchange FTX collapsed. This was a house of cards and they stood for everything but transparency — not only with their users but also with their shareholders and team alike!

    John J. Ray III who has spent a career tackling large corporate failures involving allegations of criminal activity (like Enron), was appointed CEO of FTX to deal with the bankruptcy, and this is one of his quotes to the US congress:

    “Never in my career have I seen such an utter failure of corporate controls at every level of an organization, from the lack of financial statements to a complete failure of any internal controls or governance whatsoever”


    OpenBB wants to pave the way of transparency in the financial world.

    Why open?

    Transparency

    Transparency across team, shareholders, users and new hires is key. Everyone can see our growth in the same location; A single source of truth accessible to everyone at all times. We already have our code open source, which shows transparency in our engineering, so it only makes sense for us to behave in the same way with our business.

    Accountability

    Everyone will know how we’re doing, for better or worse. This will make us feel responsible to show accurate sustainable growth as this information becomes public. Since everyone has equity in the company, this will be our own skin in the game.

    When people ask, “How is OpenBB going?”, this can be answered with a single link to our open page.

    Community building

    Every company is trying to build a community these days, but building a community is hard. By having all of our information publicly available, anyone from the community will know how we are doing at all times — similar to what the team, shareholders and investors know.

    This helps to build trust in OpenBB and allow us to attract and retain talented employees who value transparency and an open culture.

    Marketing

    Users will be able to share our open page to share OpenBB metrics with other users, which will help to increase awareness for us.

    In addition, we want to become leaders of open culture in the financial world, which is known for being a very closed industry. We want to influence companies in this sector and start a movement.

    Fundraising

    Since starting OpenBB, I’ve met well over 50 different investors, even without actively fundraising. Whilst this is a great way to start relationships, it’s not sustainable as it takes valuable time away from talking with users/customers (and let’s be honest, even developing :slight_smile:). So by having an open page, we will be able to discuss our growth async and more efficiently. And then, when we are actively fundraising, we can focus on the details.

    How will it be done?

    We are adding all our metrics and stats to /open.

    Our open metrics will contain 4 main distinct sections to start with:

    Social Media metrics

    Twitter followers, Discord users, LinkedIn followers, YouTube views, Reddit followers. Allows to understand the strength of our community in the social media channels that we focus on.

    Team stats

    Team distribution and employee engagement coming soon. Allows to understand where we are based and employee experience at OpenBB

    Product metrics

    OpenBB Hub users, OpenBB Bot, OpenBB SDK and OpenBB Terminal. Allows to hold us accountable for our user growth and the usage that our products have

    Developer metrics

    Stars, forks, merged pull-requests, closed issues, contributors. Keep up-to-date with our development speed and how engaged the open source community is.

    For all the metrics that are open source, there will be an ⓘ in the top right to share information on why this chart was made open source and why it’s important to us.

    Once a metric is open, we do not intend to close it ever again, that is why all the metrics we are making public have gone through a thorough reasoning process and there’s enough contextual information to understand its meaning.

    If you can think of a metric that you would like to see on our open page, please feel free to DM me.

    + + \ No newline at end of file diff --git a/blog/fully-free-financial-chatbot/index.html b/blog/fully-free-financial-chatbot/index.html index 7dd7140fd5..0a540af82b 100644 --- a/blog/fully-free-financial-chatbot/index.html +++ b/blog/fully-free-financial-chatbot/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Fully free financial chatbot

    · 2 min read


    The OpenBB Bot is a financial chatbot that allows you to access financial data from Discord or Telegram along with other users. From equity data to crypto, options, darkpool, economy and much more! Now available for free to registered users.

    We know the market conditions haven’t been great for anyone, particularly for investors. Instead of raising prices like trends, we have decided to offer our OpenBB Bot individuals tier for free if you are a registered user.

    What does this mean

    Registered users for OpenBB Bot will see the following changes:

    • Users were limited to 100 options or dark pools commands per month. This limitation is completely removed.
    • Users will no longer experience a 10s cooldown which means they can request investment research data sequentially and avoid breaking the conversation due to a delay imposed by the product
    • Through our soon-to-be-announced new platform, you will be able to fully customize your charting style with up to 5 in chart technical indicators and 2 off charts. This is a big improvement over the 1 in chart and 1 off chart previously available.
    • The number of custom alerts that the user can set for when certain threshold values are triggered has increased, from 3 to 10.
    • Users can now set 10 watchlist tickers to pay close attention to and access data regarding them.

    Below is a video of what the OpenBB Bot is capable of:

    1_d1vD4AkwpYk42tdbHuMupQ

    The interactive charts will open up within the OpenBB Hub and in it you will be able to fully customize the technical analysis indicators that you see on the chart and even the candle chart color theme and type. A demo is shown below,


    Like dozens of thousands of investors, join the OpenBB Hub so you can fully leverage the OpenBB Bot.

    You can actually see how many users we have utilizing the bot on a daily basis on our /open page.

    While others zig, we zag. Here’s the updated pricing:

    image

    Looking forward to feedback!

    - - +

    Fully free financial chatbot

    · 2 min read


    The OpenBB Bot is a financial chatbot that allows you to access financial data from Discord or Telegram along with other users. From equity data to crypto, options, darkpool, economy and much more! Now available for free to registered users.

    We know the market conditions haven’t been great for anyone, particularly for investors. Instead of raising prices like trends, we have decided to offer our OpenBB Bot individuals tier for free if you are a registered user.

    What does this mean

    Registered users for OpenBB Bot will see the following changes:

    • Users were limited to 100 options or dark pools commands per month. This limitation is completely removed.
    • Users will no longer experience a 10s cooldown which means they can request investment research data sequentially and avoid breaking the conversation due to a delay imposed by the product
    • Through our soon-to-be-announced new platform, you will be able to fully customize your charting style with up to 5 in chart technical indicators and 2 off charts. This is a big improvement over the 1 in chart and 1 off chart previously available.
    • The number of custom alerts that the user can set for when certain threshold values are triggered has increased, from 3 to 10.
    • Users can now set 10 watchlist tickers to pay close attention to and access data regarding them.

    Below is a video of what the OpenBB Bot is capable of:

    1_d1vD4AkwpYk42tdbHuMupQ

    The interactive charts will open up within the OpenBB Hub and in it you will be able to fully customize the technical analysis indicators that you see on the chart and even the candle chart color theme and type. A demo is shown below,


    Like dozens of thousands of investors, join the OpenBB Hub so you can fully leverage the OpenBB Bot.

    You can actually see how many users we have utilizing the bot on a daily basis on our /open page.

    While others zig, we zag. Here’s the updated pricing:

    image

    Looking forward to feedback!

    + + \ No newline at end of file diff --git a/blog/gamestonk-terminal-cant-stop-won-t-stop/index.html b/blog/gamestonk-terminal-cant-stop-won-t-stop/index.html index 305bcc50bc..18157c8aa3 100644 --- a/blog/gamestonk-terminal-cant-stop-won-t-stop/index.html +++ b/blog/gamestonk-terminal-cant-stop-won-t-stop/index.html @@ -10,14 +10,14 @@ - - + +
    -

    Gamestonk Terminal — Can’t Stop, Won’t Stop

    · 4 min read


    Gamestonk Terminal's latest updates including Docker integration, Jupyter Lab integration, a new Hugo website, and new features. A summary of the recent developments and future plans for the open-source financial tool.

    The open source code is available here.

    Hey all,

    Do any of you know what Docker, Jupyter Lab integration, features website and new features have in common? Well this is what has been happening in Gamestonk Terminal world since last month, and MORE!

    Docker

    • This has been a highly requested feature from our more experienced dev users, as it allows you to run our code in a container, pull the image and then get going with a smooth installation process. You will also be able to run Jupyer Lab from our Docker container.

    Jupyter Lab Integration

    • Jupyter is on course to take over the world (see here).
    • Big investment banks like JP Morgan use Jupyter too, see this.
    • Professionals in the industry such as Data Scientists, Data Analysts and Machine Learning engineers are familiar with the combo dockers+notebooks. Therefore, it makes our terminal an attractive Open-Source project to devote time to.
    • Academia students and universities will be able to use terminal data through a notebook for their projects and coursework. We’re on track to be able to achieve something on this soon!

    Hugo Website

    • Link here.
    • This will not only simplify a contributor’s documentation process, but it will also let non-Gamestonkers now see the vast number of features we offer and yes, when you read “offer” this is actually an offer since the tool is completely free to use.

    Main New features

    • New Dark Pool Shorts menu
    • Refactored and improved Crypto menu!!!
    • Dark Pool and Crypto report generation
    • Excel Discounted Cash Flow created by a MBA student
    • Big code refactoring to allow for contributors to easily get started with our codebase
    • Contributing document (click here).

    Tier 2 features

    • Sentiment Investor data features implemented by the SI team themselves
    • Feature/fraud indicators implemented by a MBA student
    • Multiple plotting for economy data for more insight extraction
    • Screener presets to not miss out on promising tickers
    • Several new Technical Analysis indicators, e.g. Fibonacci, Fisher transform, Centre of gravity, zlma, Donchian channels…
    • Unusual options activity
    • Hot penny stocks in discovery menu
    • A contributor implementation of a realtime earnings expected move, from The Geek of Wallstreet
    • Several new YahooFinance commands to discover promising tickers
    • Refactor Exploratory Data Analysis and Residual Analysis menus into a Quantitative Analysis one

    As if this wasn’t enough, we’re also working towards a Discord bot so you can make best use of our terminal when discussing trading strategies with your friends. This was an initiative from a contributor, which just goes to show how much we rely on our community to drive our project.

    If you appreciate what we’re doing and want a better free and Open-Source financial tool, you should definitely star the project on our github here, join our Discord channel, and follow our twitter account. Not necessarily in that order! :)

    Have you been following our project and want to join our growing community? Here are a few tips on how to get started:

    • Join our Discord and tell us about your experience so far
    • Let us know what else you would like to see in the terminal
    • You can help to improve our crypto terminal, which is 99% taken care of from our contributors!
    • Help us add any features! You don’t know python? This may be your cue to learn with our team!

    Much love! +

    Gamestonk Terminal — Can’t Stop, Won’t Stop

    · 4 min read


    Gamestonk Terminal's latest updates including Docker integration, Jupyter Lab integration, a new Hugo website, and new features. A summary of the recent developments and future plans for the open-source financial tool.

    The open source code is available here.

    Hey all,

    Do any of you know what Docker, Jupyter Lab integration, features website and new features have in common? Well this is what has been happening in Gamestonk Terminal world since last month, and MORE!

    Docker

    • This has been a highly requested feature from our more experienced dev users, as it allows you to run our code in a container, pull the image and then get going with a smooth installation process. You will also be able to run Jupyer Lab from our Docker container.

    Jupyter Lab Integration

    • Jupyter is on course to take over the world (see here).
    • Big investment banks like JP Morgan use Jupyter too, see this.
    • Professionals in the industry such as Data Scientists, Data Analysts and Machine Learning engineers are familiar with the combo dockers+notebooks. Therefore, it makes our terminal an attractive Open-Source project to devote time to.
    • Academia students and universities will be able to use terminal data through a notebook for their projects and coursework. We’re on track to be able to achieve something on this soon!

    Hugo Website

    • Link here.
    • This will not only simplify a contributor’s documentation process, but it will also let non-Gamestonkers now see the vast number of features we offer and yes, when you read “offer” this is actually an offer since the tool is completely free to use.

    Main New features

    • New Dark Pool Shorts menu
    • Refactored and improved Crypto menu!!!
    • Dark Pool and Crypto report generation
    • Excel Discounted Cash Flow created by a MBA student
    • Big code refactoring to allow for contributors to easily get started with our codebase
    • Contributing document (click here).

    Tier 2 features

    • Sentiment Investor data features implemented by the SI team themselves
    • Feature/fraud indicators implemented by a MBA student
    • Multiple plotting for economy data for more insight extraction
    • Screener presets to not miss out on promising tickers
    • Several new Technical Analysis indicators, e.g. Fibonacci, Fisher transform, Centre of gravity, zlma, Donchian channels…
    • Unusual options activity
    • Hot penny stocks in discovery menu
    • A contributor implementation of a realtime earnings expected move, from The Geek of Wallstreet
    • Several new YahooFinance commands to discover promising tickers
    • Refactor Exploratory Data Analysis and Residual Analysis menus into a Quantitative Analysis one

    As if this wasn’t enough, we’re also working towards a Discord bot so you can make best use of our terminal when discussing trading strategies with your friends. This was an initiative from a contributor, which just goes to show how much we rely on our community to drive our project.

    If you appreciate what we’re doing and want a better free and Open-Source financial tool, you should definitely star the project on our github here, join our Discord channel, and follow our twitter account. Not necessarily in that order! :)

    Have you been following our project and want to join our growing community? Here are a few tips on how to get started:

    • Join our Discord and tell us about your experience so far
    • Let us know what else you would like to see in the terminal
    • You can help to improve our crypto terminal, which is 99% taken care of from our contributors!
    • Help us add any features! You don’t know python? This may be your cue to learn with our team!

    Much love! GST Team & Community

    - - + + \ No newline at end of file diff --git a/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal/index.html b/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal/index.html index a4848fc5ce..1bc8e36381 100644 --- a/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal/index.html +++ b/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminal/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Gamestonk Terminal - The next best thing after Bloomberg Terminal

    · 4 min read


    In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    If you like stocks and are careful with the way you spend your money, (me saying it seems counter-intuitive given that I bought GME at the peak, I know) you know how much time goes into buying shares of a stock.

    You need to: Find stocks that are somehow undervalued; Research on the company, and its competitors; Check that the financials are healthy; Look into different technical indicators; Investigate SEC fillings and Insider activity; Look up for next earnings date and analysts estimates; Estimate market’s sentiment through Reddit, Twitter, Stocktwits; Read news;. … the list goes on.

    It’s tedious and I don’t have 24k for a Bloomberg terminal. Which led me to the idea during xmas break to spend the time creating my own terminal. I introduce you to “Gamestonk Terminal” (probably should’ve sent 1 tweet everyday to Elon Musk for copyrights permission eheh).

    As someone mentioned, this is meant to be like a swiss army knife for finance.

    It contains the following functionalities:

    • Discover Stocks: Some features are: Top gainers; Sectors performance; upcoming earnings releases; top high shorted interest stocks; top stocks with low float; top orders on fidelity; and some SPAC websites with news/calendars.

    • Market Sentiment: Main features are: Scrolling through Reddit main posts, and most tickers mentions; Extracting trending symbols on stocktwits, or even stocktwit sentiment based on bull/bear flags; Twitter in-depth sentiment prediction using AI; Google mentions over time.

    • Research Web pages: List of good pages to do research on a stock, e.g. macroaxis, zacks, macrotrends, ..

    • Fundamental Analysis: Read financials from a company from Market Watch, Yahoo Finance, Alpha Vantage, and Financial Modeling Prep API. Since I only rely on free data, I added the information from all of these, so that the user can get it from the source it trusts the most. Also exports management team behind stock, along with their pages on Google, to speed up research process.

    • Technical Analysis: The usual technical indicators: sma, rsi, macd, adx, bbands, and more.

    • Due Diligence: It has several features that I found to be really useful. Some of them are: Latest news of the company; Analyst prices and ratings; Price target from several analysts plot over time vs stock price; Insider activity, and these timestamps marked on the stock price historical data; Latest SEC fillings; Short interest over time; A check for financial warnings based on Sean Seah book.

    • Prediction Techniques: The one I had more fun with. It tries to predict the stock price, from simple models like sma and arima to complex neural network models, like LSTM. The additional capability here is that all of these are easy to configure. Either through command line arguments, or even in form of a configuration file to define your NN. It also allows backtesting.

    • Reports: Allows you to run several jobs functionalities and write daily notes on a stock, so that you can assess what you thought about the stock in the past, to perform better decisions.

    • Comparison Analysis: Allows to compare different stocks.

    • On the ROADMAP: Cryptocurrencies, Portfolio Analysis, Credit Analysis. Feel free to add the features you’d like and we would happily work on it.

    This project will always remain open-source, and the idea is that it can grow substantially over-time so that more and more people start taking advantage of it.

    Feel free to contribute towards the project.

    Feedback is extremely welcome!

    - - +

    Gamestonk Terminal - The next best thing after Bloomberg Terminal

    · 4 min read


    In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    If you like stocks and are careful with the way you spend your money, (me saying it seems counter-intuitive given that I bought GME at the peak, I know) you know how much time goes into buying shares of a stock.

    You need to: Find stocks that are somehow undervalued; Research on the company, and its competitors; Check that the financials are healthy; Look into different technical indicators; Investigate SEC fillings and Insider activity; Look up for next earnings date and analysts estimates; Estimate market’s sentiment through Reddit, Twitter, Stocktwits; Read news;. … the list goes on.

    It’s tedious and I don’t have 24k for a Bloomberg terminal. Which led me to the idea during xmas break to spend the time creating my own terminal. I introduce you to “Gamestonk Terminal” (probably should’ve sent 1 tweet everyday to Elon Musk for copyrights permission eheh).

    As someone mentioned, this is meant to be like a swiss army knife for finance.

    It contains the following functionalities:

    • Discover Stocks: Some features are: Top gainers; Sectors performance; upcoming earnings releases; top high shorted interest stocks; top stocks with low float; top orders on fidelity; and some SPAC websites with news/calendars.

    • Market Sentiment: Main features are: Scrolling through Reddit main posts, and most tickers mentions; Extracting trending symbols on stocktwits, or even stocktwit sentiment based on bull/bear flags; Twitter in-depth sentiment prediction using AI; Google mentions over time.

    • Research Web pages: List of good pages to do research on a stock, e.g. macroaxis, zacks, macrotrends, ..

    • Fundamental Analysis: Read financials from a company from Market Watch, Yahoo Finance, Alpha Vantage, and Financial Modeling Prep API. Since I only rely on free data, I added the information from all of these, so that the user can get it from the source it trusts the most. Also exports management team behind stock, along with their pages on Google, to speed up research process.

    • Technical Analysis: The usual technical indicators: sma, rsi, macd, adx, bbands, and more.

    • Due Diligence: It has several features that I found to be really useful. Some of them are: Latest news of the company; Analyst prices and ratings; Price target from several analysts plot over time vs stock price; Insider activity, and these timestamps marked on the stock price historical data; Latest SEC fillings; Short interest over time; A check for financial warnings based on Sean Seah book.

    • Prediction Techniques: The one I had more fun with. It tries to predict the stock price, from simple models like sma and arima to complex neural network models, like LSTM. The additional capability here is that all of these are easy to configure. Either through command line arguments, or even in form of a configuration file to define your NN. It also allows backtesting.

    • Reports: Allows you to run several jobs functionalities and write daily notes on a stock, so that you can assess what you thought about the stock in the past, to perform better decisions.

    • Comparison Analysis: Allows to compare different stocks.

    • On the ROADMAP: Cryptocurrencies, Portfolio Analysis, Credit Analysis. Feel free to add the features you’d like and we would happily work on it.

    This project will always remain open-source, and the idea is that it can grow substantially over-time so that more and more people start taking advantage of it.

    Feel free to contribute towards the project.

    Feedback is extremely welcome!

    + + \ No newline at end of file diff --git a/blog/gamestonk-terminal-ux-features/index.html b/blog/gamestonk-terminal-ux-features/index.html index ca5b5560a5..1f40beadc1 100644 --- a/blog/gamestonk-terminal-ux-features/index.html +++ b/blog/gamestonk-terminal-ux-features/index.html @@ -10,13 +10,13 @@ - - + +
    -

    UX/UI is better than features

    · 5 min read


    Gamestonk Terminal's UX/UI features and the teamwork behind their implementation.

    The open source code is available here.

    Features attract users, UX/UI conquers them ⚔️

    Throughout month of December, me and 3 of the most active maintainers of Gamestonk Terminal had a meeting where we discussed shifting our focus from adding features, to improving the terminal UX/UI to make it even more attractive. The main outcomes of these meeting were:

    1. Relative and Absolute menu jumping, e.g. if i’m in crypto/ta and want to go to stocks/ta I can do:

      a. Absolute: /stocks/load tsla/ta

      b. Relative: ../../stocks/load tsla/ta

    2. Scripting feature. You can now interact with the terminal through a sequence of commands, e.g.: stocks/disc/ugs -l 3/gtech/active.

    3. reset command everywhere to allow for faster development as it exits from the terminal and comes to the same menu running new terminal code and its API keys.

    4. Auto-completion in commands with choices.

    5. When misspelling a command name, if it’s similar enough that the terminal recognises the right command, it will replace it, to speed up interaction.


    image

    1. Running a .gst job, like python terminal.py scripts/test_stocks_disc.gst which allows to run a sequence of commands of the terminal. In the future we can take advantage of this for integration tests. The user can build their own daily routines to speed up the investment process.

    image

    Now, I know what you’re thinking. This is a massive improvement over the terminal usage up until now, and that’s a LOT of code changes. Which is very much true, to be specific, this engineering effort resulted in:

    370 files changed with 44,875 additions and 18,463 deletions


    And you may be wondering how long did this take us to do. Nope, it wasn’t months but…

    image

    1 week. Yup, a single f*king week. You can see that it was finalised with these PRs (#1049, #1041, #1048).

    In that week we split work, did pair programming, we called each other to discuss better implementation practices, we changed the architecture 2/3 more times… On top of that, I was feeling overwhelmed with the stocks menu, I clearly underestimated how many features we have (how naive…), so the 3 other maintainers jumped on it and helped me out. In 3 or so years of software engineering, this was teamwork like I’ve not felt before.

    That weekend I was so happy as we accomplished this task that I think I didn’t even work on the terminal that Sunday! Doesn’t happen often these days!

    However, as a good friend of mine told me:

    “The entertainment industry hasn’t found yet something more appealing than developing code towards a product I believe in and with people I like”


    I still think about this often, and this is what I tell my girlfriend, to explain why I’m coding and not playing Mario Kart 8 Deluxe with her. (the fact she always beats me at it also may be considered as a factor 🤣).

    You may be thinking this is a one off, the reality is that it isn’t. Another example can be seen in this blog post. This goes over the story of the development of our discord bot where it all started from a message from a 16yo contributor that wants to become a quant. He wanted to not only improve his python skills with us but also bring the terminal features to a bigger audience. Working with us in an open-source project is helping him towards achieving his life-goal dream.

    While I write this post another contributor, finishing his CPA, is working on improving the code resulting from that UX effort by creating a base class so that new developers can add controllers much easily (he estimates a reduction of 11% of codebase size based on “napkin maths” as he puts it).

    image

    While user experience is critical, so is user interface. And that is why our next engineering effort will be around it. We already have something in the works in this PR, where we can draw lines and write text! Almost like TradingView (almost… 😬).

    image

    So, keep on the lookout because 2022 is gonna be a big year for us!! 🦋 🚀

    Ohh, before I say thanks for the read and all that, it’s also worth mentioning that there’s a PR in the queue for a new context called “alternative data”, which already has a COVID menu to factor that data into account on your investments.

    image

    PS: The blue text is because we are transitioning towards rich package which gives a lot more freedom when it comes to improving our user interface.


    Thanks for your read, and if you enjoy Gamestonk Terminal, please reach out to our discord to say thank you, or ideally: for @terp340 to change date format to dd/MM/YYYY — the only correct one!

    Happy 2022 with lots of love ❤️

    - - +

    UX/UI is better than features

    · 5 min read


    Gamestonk Terminal's UX/UI features and the teamwork behind their implementation.

    The open source code is available here.

    Features attract users, UX/UI conquers them ⚔️

    Throughout month of December, me and 3 of the most active maintainers of Gamestonk Terminal had a meeting where we discussed shifting our focus from adding features, to improving the terminal UX/UI to make it even more attractive. The main outcomes of these meeting were:

    1. Relative and Absolute menu jumping, e.g. if i’m in crypto/ta and want to go to stocks/ta I can do:

      a. Absolute: /stocks/load tsla/ta

      b. Relative: ../../stocks/load tsla/ta

    2. Scripting feature. You can now interact with the terminal through a sequence of commands, e.g.: stocks/disc/ugs -l 3/gtech/active.

    3. reset command everywhere to allow for faster development as it exits from the terminal and comes to the same menu running new terminal code and its API keys.

    4. Auto-completion in commands with choices.

    5. When misspelling a command name, if it’s similar enough that the terminal recognises the right command, it will replace it, to speed up interaction.


    image

    1. Running a .gst job, like python terminal.py scripts/test_stocks_disc.gst which allows to run a sequence of commands of the terminal. In the future we can take advantage of this for integration tests. The user can build their own daily routines to speed up the investment process.

    image

    Now, I know what you’re thinking. This is a massive improvement over the terminal usage up until now, and that’s a LOT of code changes. Which is very much true, to be specific, this engineering effort resulted in:

    370 files changed with 44,875 additions and 18,463 deletions


    And you may be wondering how long did this take us to do. Nope, it wasn’t months but…

    image

    1 week. Yup, a single f*king week. You can see that it was finalised with these PRs (#1049, #1041, #1048).

    In that week we split work, did pair programming, we called each other to discuss better implementation practices, we changed the architecture 2/3 more times… On top of that, I was feeling overwhelmed with the stocks menu, I clearly underestimated how many features we have (how naive…), so the 3 other maintainers jumped on it and helped me out. In 3 or so years of software engineering, this was teamwork like I’ve not felt before.

    That weekend I was so happy as we accomplished this task that I think I didn’t even work on the terminal that Sunday! Doesn’t happen often these days!

    However, as a good friend of mine told me:

    “The entertainment industry hasn’t found yet something more appealing than developing code towards a product I believe in and with people I like”


    I still think about this often, and this is what I tell my girlfriend, to explain why I’m coding and not playing Mario Kart 8 Deluxe with her. (the fact she always beats me at it also may be considered as a factor 🤣).

    You may be thinking this is a one off, the reality is that it isn’t. Another example can be seen in this blog post. This goes over the story of the development of our discord bot where it all started from a message from a 16yo contributor that wants to become a quant. He wanted to not only improve his python skills with us but also bring the terminal features to a bigger audience. Working with us in an open-source project is helping him towards achieving his life-goal dream.

    While I write this post another contributor, finishing his CPA, is working on improving the code resulting from that UX effort by creating a base class so that new developers can add controllers much easily (he estimates a reduction of 11% of codebase size based on “napkin maths” as he puts it).

    image

    While user experience is critical, so is user interface. And that is why our next engineering effort will be around it. We already have something in the works in this PR, where we can draw lines and write text! Almost like TradingView (almost… 😬).

    image

    So, keep on the lookout because 2022 is gonna be a big year for us!! 🦋 🚀

    Ohh, before I say thanks for the read and all that, it’s also worth mentioning that there’s a PR in the queue for a new context called “alternative data”, which already has a COVID menu to factor that data into account on your investments.

    image

    PS: The blue text is because we are transitioning towards rich package which gives a lot more freedom when it comes to improving our user interface.


    Thanks for your read, and if you enjoy Gamestonk Terminal, please reach out to our discord to say thank you, or ideally: for @terp340 to change date format to dd/MM/YYYY — the only correct one!

    Happy 2022 with lots of love ❤️

    + + \ No newline at end of file diff --git a/blog/goodbye-openbb-sdk-hello-openbb-platform/index.html b/blog/goodbye-openbb-sdk-hello-openbb-platform/index.html index e90d7e8904..0327cbea8b 100644 --- a/blog/goodbye-openbb-sdk-hello-openbb-platform/index.html +++ b/blog/goodbye-openbb-sdk-hello-openbb-platform/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Goodbye OpenBB SDK. Hello OpenBB Platform

    · 5 min read


    Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions.

    The open source code is available here.

    In the ever-evolving landscape of financial data integration and standardization, OpenBB has been revolutionizing the way individuals and organizations handle data from multiple data providers by utilizing our open-source products.

    We have been talking about the OpenBB Platform v4 over the past few months. This is such a milestone for our team and for the financial world that we are renaming the OpenBB SDK into the OpenBB Platform.

    The OpenBB Platform consists of the OpenBB Core and OpenBB Extensions.

    Let’s dive into each of these, individually.

    OpenBB Core

    The OpenBB Core empowers quants and finance developers to create powerful data solutions, offering unparalleled simplicity, flexibility, and scalability. It follows the principle that "less is more."

    The core will consist of two main components:

    1. Data Standardization Infrastructure: This ensures that regardless of the type of data processed by the core, users can expect consistent conventions and naming. This facilitates a seamless experience, even when the data comes from completely different data providers.

    2. Data Source Integration: Developers will be able to effortlessly connect and integrate various data sources, including databases, APIs, and cloud storage systems.

      a) Official partner integrations will be available by having access to official endpoints from data vendors. This ensures the integrity of the data and provides a reference for what data is available to the end user. Our affiliate program will detail where commercial agreements are in place with OpenBB.

      b) Additionally, community provider integrations will be available, allowing the community to contribute their own integrations for specific use cases or share them with others through the open-source codebase.

    OpenBB Extensions

    OpenBB extensions enhance the capabilities of the OpenBB Core, allowing developers to create custom functionalities and customize the overall Platform according to their specific needs. It is important to note that these extensions can be used as a standalone or integrated with the rest of the openBB ecosystem.

    These extensions can be classified into two categories:

    • Official extensions developed and maintained by the OpenBB Team, such as the ML/AI Toolkit, Econometrics, and Reports;
    • Community extensions developed by the open-source community. These extensions focus on enabling intelligent data processing and custom workflows that assist users in their investing decision-making process.

    Key advantage of new platform V4

    By combining the strengths of OpenBB Core and OpenBB Extensions, the OpenBB Platform offers unparalleled advantages for developers and organizations:

    1. Enhanced Flexibility: The modular architecture of the Platform allows developers to choose and integrate only the components they need, avoiding unnecessary complexity.
    2. Scalability: The OpenBB Platform seamlessly scales with your data integration requirements, ensuring smooth performance even with large volumes of data.
    3. Extensibility: Developers can create their own extensions and contribute to the OpenBB ecosystem, fostering collaboration and innovation.
    4. Time and Cost Savings: With its intuitive interface and pre-built components, the OpenBB Platform accelerates development cycles, reducing time-to-market and costs associated with custom solutions.

    The reimagined OpenBB SDK into OpenBB Platform (OpenBB Core and OpenBB Extensions), revolutionizes the data integration landscape.

    By leveraging the power of OpenBB Core for data integration and standardization, and harnessing the capabilities of OpenBB Extensions for customization and advanced functionality, developers can unlock new possibilities and build cutting-edge data solutions.

    Whether you are working with diverse data sources or performing complex data transformations, the OpenBB Platform empowers you to conquer any data challenge and propel your organization towards data-driven success.

    We invite users and enthusiasts to explore the OpenBB Platform v4, now available for download and installation from the OpenBB Hub, Github, and PyPI.

    Inside OpenBB: A peek into our team emails

    In order to adhere to one of OpenBB's core values - Transparency - we want you to understand the journey we have undergone and the reason we have dedicated the past 9 months to this endeavor.

    So, for the first time, we're sharing a confidential email thread that circulated among our entire team. This thread provides insight into our thought process when it comes to handling large projects at OpenBB.

    Over the next few weeks we will keep iterating on our Platform, based on user feedback, so we can keep pushing for a platform that can be adopted by everyone - from professional investors, data scientists, quants, to students.

    If you rely on financial data to do financial research or build apps, we want to hear from you!

    Reach out with feedback to support@openbb.finance or join our Discord.

    - - +

    Goodbye OpenBB SDK. Hello OpenBB Platform

    · 5 min read


    Today, we are thrilled to announce the new OpenBB SDK, a game-changing platform that is now divided into the robustness of OpenBB Core and the limitless potential of OpenBB extensions.

    The open source code is available here.

    In the ever-evolving landscape of financial data integration and standardization, OpenBB has been revolutionizing the way individuals and organizations handle data from multiple data providers by utilizing our open-source products.

    We have been talking about the OpenBB Platform v4 over the past few months. This is such a milestone for our team and for the financial world that we are renaming the OpenBB SDK into the OpenBB Platform.

    The OpenBB Platform consists of the OpenBB Core and OpenBB Extensions.

    Let’s dive into each of these, individually.

    OpenBB Core

    The OpenBB Core empowers quants and finance developers to create powerful data solutions, offering unparalleled simplicity, flexibility, and scalability. It follows the principle that "less is more."

    The core will consist of two main components:

    1. Data Standardization Infrastructure: This ensures that regardless of the type of data processed by the core, users can expect consistent conventions and naming. This facilitates a seamless experience, even when the data comes from completely different data providers.

    2. Data Source Integration: Developers will be able to effortlessly connect and integrate various data sources, including databases, APIs, and cloud storage systems.

      a) Official partner integrations will be available by having access to official endpoints from data vendors. This ensures the integrity of the data and provides a reference for what data is available to the end user. Our affiliate program will detail where commercial agreements are in place with OpenBB.

      b) Additionally, community provider integrations will be available, allowing the community to contribute their own integrations for specific use cases or share them with others through the open-source codebase.

    OpenBB Extensions

    OpenBB extensions enhance the capabilities of the OpenBB Core, allowing developers to create custom functionalities and customize the overall Platform according to their specific needs. It is important to note that these extensions can be used as a standalone or integrated with the rest of the openBB ecosystem.

    These extensions can be classified into two categories:

    • Official extensions developed and maintained by the OpenBB Team, such as the ML/AI Toolkit, Econometrics, and Reports;
    • Community extensions developed by the open-source community. These extensions focus on enabling intelligent data processing and custom workflows that assist users in their investing decision-making process.

    Key advantage of new platform V4

    By combining the strengths of OpenBB Core and OpenBB Extensions, the OpenBB Platform offers unparalleled advantages for developers and organizations:

    1. Enhanced Flexibility: The modular architecture of the Platform allows developers to choose and integrate only the components they need, avoiding unnecessary complexity.
    2. Scalability: The OpenBB Platform seamlessly scales with your data integration requirements, ensuring smooth performance even with large volumes of data.
    3. Extensibility: Developers can create their own extensions and contribute to the OpenBB ecosystem, fostering collaboration and innovation.
    4. Time and Cost Savings: With its intuitive interface and pre-built components, the OpenBB Platform accelerates development cycles, reducing time-to-market and costs associated with custom solutions.

    The reimagined OpenBB SDK into OpenBB Platform (OpenBB Core and OpenBB Extensions), revolutionizes the data integration landscape.

    By leveraging the power of OpenBB Core for data integration and standardization, and harnessing the capabilities of OpenBB Extensions for customization and advanced functionality, developers can unlock new possibilities and build cutting-edge data solutions.

    Whether you are working with diverse data sources or performing complex data transformations, the OpenBB Platform empowers you to conquer any data challenge and propel your organization towards data-driven success.

    We invite users and enthusiasts to explore the OpenBB Platform v4, now available for download and installation from the OpenBB Hub, Github, and PyPI.

    Inside OpenBB: A peek into our team emails

    In order to adhere to one of OpenBB's core values - Transparency - we want you to understand the journey we have undergone and the reason we have dedicated the past 9 months to this endeavor.

    So, for the first time, we're sharing a confidential email thread that circulated among our entire team. This thread provides insight into our thought process when it comes to handling large projects at OpenBB.

    Over the next few weeks we will keep iterating on our Platform, based on user feedback, so we can keep pushing for a platform that can be adopted by everyone - from professional investors, data scientists, quants, to students.

    If you rely on financial data to do financial research or build apps, we want to hear from you!

    Reach out with feedback to support@openbb.finance or join our Discord.

    + + \ No newline at end of file diff --git a/blog/handing-your-twitter-account-to-your-most-avid-community-member/index.html b/blog/handing-your-twitter-account-to-your-most-avid-community-member/index.html index dbcb31423e..44e1807c93 100644 --- a/blog/handing-your-twitter-account-to-your-most-avid-community-member/index.html +++ b/blog/handing-your-twitter-account-to-your-most-avid-community-member/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Handing your twitter account to your most avid community member

    · 5 min read


    Handing over the Twitter account of Gamestonk Terminal to an active community member and the impact it had on the project's growth and engagement.

    When I started Gamestonk Terminal I had no idea of the reach and impact it would have. From getting over 3.5k stars on GitHub on the first single day alone, to trending on Reddit and receiving overwhelming feedback, to receiving a message from an ex-colleague based in Switzerland about my name being top 1 on Hackernews. As if this wasn’t enough, a couple of days later the project got featured by VICE Magazine and Daily Fintech.

    As a result, my social life was impacted and had little time to even cuddle my puppy, due to the amount of feature requests, issues… the usual somehow ungrateful life of an open-source maintainer… I’m not complaining though, as I live for this.

    image

    Moving forward a couple of weeks, it became clear to myself that I was building a strong community around what can/will/should be a leading product in the emerging fintech industry and Internet 3.0. Therefore, I knew that github issues and discussions wouldn’t be enough to interact with all members of the community, so Discord turned out to be the best option going forward (let’s be honest: mostly because of the convenience that Discord offers to share memes, feel free to check my creations on our Discord, you can thank me later).

    My next rookie mistake was thinking I could use Discord announcements and @ everyone, as a means for updating the community on new features. Being the #1 investment research free and open-source project on github gets you several PRs a day being merged, so in all the fairness the announcements were recurrent with constant several new features. You can check my one hour live programming stream of adding a feature to the terminal.

    image

    This is when I realized that Discord wasn’t the best place for this type of communication. I needed a platform where I could share these features ad-hoc and that only alerted users who wanted to be up-to-date with our latest features. And this is when I created our Twitter account, @gamestonkt.

    Reviewing the history of our Twitter feed, you can see that this is exclusively what our handle was used for. It just shared new features every day. It felt like I was always playing catchup to the growing number of features piling up in the queue waiting to be announced on Twitter. With the project already having over 500 features in less 1 year, this inevitable outcome would be a surprise to no one. (yup, I repeat, over 500).

    image

    However, I felt like it missed personality... With time being a limiting factor — time was more efficiently used improving the terminal — the public facing demonstrations were a lower priority. When you believe this much in a product, the product ends up speaking for itself.

    “If you build it, they will come” — Field of Dreams


    It then occurred to me, why am I handling our Twitter? Why not leave this up to one of our most avid and vocal users that has been with project since beginning?

    As Jim from “The Office” would do, let’s do a PROS & CONS table.

    Pros

    • The user represents the community that the twitter content is targeted at.
    • The user is an active daily user and will help to demonstrate features in the terminal.
    • The user is keen on learning the ins and outs of the product.
    • This user is not only a user anymore but a friend given his interaction with the maintainers.
    • Lastly, I get to spend time doing what I enjoy: coding and meme content on our Discord.

    Cons

    • The user finds out my mother’s maiden name and the name of my first pet.

    This is really a no brainer the more you think about it. I think it depends a lot on the type of people you have in your community and how confident you are on this individual .

    We were lucky, because we had the perfect fit: an active Discord user @Danglewood, who had built an engaged audience, generating over 130K+ in Reddit karma over Q2 2021. It was clear that @Danglewood was having an impact on driving traffic and user engagement by posting data and his personal research with screenshots of Gamestonk Terminal.

    In the future, our report feature will allow easy sharing of this information, I already can’t wait for this. Through a combination of humour and truths, he was engaging the audience’s curiosity by providing them with ways to filter out the ever-present noise within stock market information.

    It made sense to bring this approach to our Twitter feed which has since transformed and now offers insights, educational nuggets, and data as well as presenting new features. The end result speaks for itself!

    image

    On your end, what is your opinion? And why do you 100% agree that this was the best decision?

    - - +

    Handing your twitter account to your most avid community member

    · 5 min read


    Handing over the Twitter account of Gamestonk Terminal to an active community member and the impact it had on the project's growth and engagement.

    When I started Gamestonk Terminal I had no idea of the reach and impact it would have. From getting over 3.5k stars on GitHub on the first single day alone, to trending on Reddit and receiving overwhelming feedback, to receiving a message from an ex-colleague based in Switzerland about my name being top 1 on Hackernews. As if this wasn’t enough, a couple of days later the project got featured by VICE Magazine and Daily Fintech.

    As a result, my social life was impacted and had little time to even cuddle my puppy, due to the amount of feature requests, issues… the usual somehow ungrateful life of an open-source maintainer… I’m not complaining though, as I live for this.

    image

    Moving forward a couple of weeks, it became clear to myself that I was building a strong community around what can/will/should be a leading product in the emerging fintech industry and Internet 3.0. Therefore, I knew that github issues and discussions wouldn’t be enough to interact with all members of the community, so Discord turned out to be the best option going forward (let’s be honest: mostly because of the convenience that Discord offers to share memes, feel free to check my creations on our Discord, you can thank me later).

    My next rookie mistake was thinking I could use Discord announcements and @ everyone, as a means for updating the community on new features. Being the #1 investment research free and open-source project on github gets you several PRs a day being merged, so in all the fairness the announcements were recurrent with constant several new features. You can check my one hour live programming stream of adding a feature to the terminal.

    image

    This is when I realized that Discord wasn’t the best place for this type of communication. I needed a platform where I could share these features ad-hoc and that only alerted users who wanted to be up-to-date with our latest features. And this is when I created our Twitter account, @gamestonkt.

    Reviewing the history of our Twitter feed, you can see that this is exclusively what our handle was used for. It just shared new features every day. It felt like I was always playing catchup to the growing number of features piling up in the queue waiting to be announced on Twitter. With the project already having over 500 features in less 1 year, this inevitable outcome would be a surprise to no one. (yup, I repeat, over 500).

    image

    However, I felt like it missed personality... With time being a limiting factor — time was more efficiently used improving the terminal — the public facing demonstrations were a lower priority. When you believe this much in a product, the product ends up speaking for itself.

    “If you build it, they will come” — Field of Dreams


    It then occurred to me, why am I handling our Twitter? Why not leave this up to one of our most avid and vocal users that has been with project since beginning?

    As Jim from “The Office” would do, let’s do a PROS & CONS table.

    Pros

    • The user represents the community that the twitter content is targeted at.
    • The user is an active daily user and will help to demonstrate features in the terminal.
    • The user is keen on learning the ins and outs of the product.
    • This user is not only a user anymore but a friend given his interaction with the maintainers.
    • Lastly, I get to spend time doing what I enjoy: coding and meme content on our Discord.

    Cons

    • The user finds out my mother’s maiden name and the name of my first pet.

    This is really a no brainer the more you think about it. I think it depends a lot on the type of people you have in your community and how confident you are on this individual .

    We were lucky, because we had the perfect fit: an active Discord user @Danglewood, who had built an engaged audience, generating over 130K+ in Reddit karma over Q2 2021. It was clear that @Danglewood was having an impact on driving traffic and user engagement by posting data and his personal research with screenshots of Gamestonk Terminal.

    In the future, our report feature will allow easy sharing of this information, I already can’t wait for this. Through a combination of humour and truths, he was engaging the audience’s curiosity by providing them with ways to filter out the ever-present noise within stock market information.

    It made sense to bring this approach to our Twitter feed which has since transformed and now offers insights, educational nuggets, and data as well as presenting new features. The end result speaks for itself!

    image

    On your end, what is your opinion? And why do you 100% agree that this was the best decision?

    + + \ No newline at end of file diff --git a/blog/household-bills-program/index.html b/blog/household-bills-program/index.html index a453b9c9dc..3b39104037 100644 --- a/blog/household-bills-program/index.html +++ b/blog/household-bills-program/index.html @@ -10,15 +10,15 @@ - - + +
    -

    Household bills Program

    · 5 min read


    In this blogpost, I share my journey of creating a program to split household bills. This was my first side project where I used Java to create a GUI application.

    The open source code is available here.

    My first side project.

    Before University, I spent most of my spare time playing counter-strike (my steam account had more than 1000 hours played, that’s more than 41 entire days playing in a row). I was a decent player I’d say, you can see a compilation of “almosts” I’ve done here.

    However, I knew this wasn’t the way. I realised that if I used the amount of time I was spending on online games for learning, I would have a much bigger satisfaction return. And, in the long term, my life would be better.

    So I started studying hard. I started valuing my time more, and declined most of the parties I was invited to because I was busy working late hours. Don’t get me wrong, I’m an easy person. I like to think I make friends easily. However, I just had different priorities, and partying just wasn’t one of them. As my parents say: “Everything has its own time”.

    In my 2nd year of University, I was getting really good grades, which means that I started having discussions with the other best students in the course. That’s how I met one of the smartest people I know to this day. This guy was a proper hands-on person, he didn’t study half the time I did, but he was always busy with something.

    He had a band, developed his own personalised guitar pedals and amplifiers, and developed some apps for fun. He did this all while having excellent results at University, which is insane. That’s when I realised that he was not only giving more priority to these hobbies in relation to partying or meeting people, BUT also in relation to doing courseworks or studying for exams. He’d never fail a coursework/exam, but that further study could have bumped a grade from 17 to a 19 out of 20.

    One day, we were meant to meet at his place to work on a coursework together, and he shown me an app that he had developed for him and his girlfriend. The app was a simple command line interface that was able to split their usual household bills (rent, water bill, food shop, cat food, etc). I found that fascinating.

    I told him I would create one for myself. Since I had read about how to use Java to make a pretty GUI, I thought why not give this a go (although I had no idea about OOP). In addition, I didn’t want my program to look the same as his, so I thought my version could be as if it was an upgrade.

    ...

    After that, I was on a mission. Little did I know that after this, I never really stopped having an interest in working on new side projects.

    The planning steps were:

    1. Decide main features. +

    Household bills Program

    · 5 min read


    In this blogpost, I share my journey of creating a program to split household bills. This was my first side project where I used Java to create a GUI application.

    The open source code is available here.

    My first side project.

    Before University, I spent most of my spare time playing counter-strike (my steam account had more than 1000 hours played, that’s more than 41 entire days playing in a row). I was a decent player I’d say, you can see a compilation of “almosts” I’ve done here.

    However, I knew this wasn’t the way. I realised that if I used the amount of time I was spending on online games for learning, I would have a much bigger satisfaction return. And, in the long term, my life would be better.

    So I started studying hard. I started valuing my time more, and declined most of the parties I was invited to because I was busy working late hours. Don’t get me wrong, I’m an easy person. I like to think I make friends easily. However, I just had different priorities, and partying just wasn’t one of them. As my parents say: “Everything has its own time”.

    In my 2nd year of University, I was getting really good grades, which means that I started having discussions with the other best students in the course. That’s how I met one of the smartest people I know to this day. This guy was a proper hands-on person, he didn’t study half the time I did, but he was always busy with something.

    He had a band, developed his own personalised guitar pedals and amplifiers, and developed some apps for fun. He did this all while having excellent results at University, which is insane. That’s when I realised that he was not only giving more priority to these hobbies in relation to partying or meeting people, BUT also in relation to doing courseworks or studying for exams. He’d never fail a coursework/exam, but that further study could have bumped a grade from 17 to a 19 out of 20.

    One day, we were meant to meet at his place to work on a coursework together, and he shown me an app that he had developed for him and his girlfriend. The app was a simple command line interface that was able to split their usual household bills (rent, water bill, food shop, cat food, etc). I found that fascinating.

    I told him I would create one for myself. Since I had read about how to use Java to make a pretty GUI, I thought why not give this a go (although I had no idea about OOP). In addition, I didn’t want my program to look the same as his, so I thought my version could be as if it was an upgrade.

    ...

    After that, I was on a mission. Little did I know that after this, I never really stopped having an interest in working on new side projects.

    The planning steps were:

    1. Decide main features. Add new household bills to split, Give money, and See bills.

    2.Sketch what the GUI should look like

    3. Devise data structure associated with a new Household bill split. This was important for both coding, and also database management.

    4. Work out the math associated with the splitting and giving

    The development process was to “divide to conquer”. I split the tasks into several sub-tasks, and after every new little code change I was testing the code to make sure that nothing was broken. I re-iterate through design and code several times, until I was happy with my solution. Then I did some clean-up/improvements, such as: Adding pictures of the users, Login password, Frenchies as icons.

    On a funny side note: As I didn’t know how to work with DBs at that time, I used text files to save and load all the information. Meaning that if my brother ever opened one of those text files (which weren’t properly hidden…), I could have passed from him owing me 100 euros to me owing him 10 million. The software was on his laptop, and I had an hardcoded password, so in theory he couldn’t manually add any bill without my presence — I guess that was enough for him to think that the product was bullet-proof.

    See images below of the program:



    You can find more information about this on my GitHub, here.

    The program ended up being used for more than 3 years. Since I lived with other people other than my brother, I had to update the name/image on the program to represent that. Since I was new to coding, I didn’t think about the future. Therefore, when that time came, I had to manually replace the names one by one in the code. I also had friends requesting to use the program, which lead to me adapting this to their names/figures.

    It was a fun project and I definitely learned loads from it. The most important thing was that I was able to do whatever I wanted software-wise as long as I dedicated enough time for it.

    Hope you had a fun read. Thanks!

    - - + + \ No newline at end of file diff --git a/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster/index.html b/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster/index.html index 12cf76f353..06160f6d2a 100644 --- a/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster/index.html +++ b/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-faster/index.html @@ -10,13 +10,13 @@ - - + +
    -

    How ChatGPT allowed me to leverage Twitter API 10x faster

    · 3 min read


    Leveraging the power of ChatGPT to interact with Twitter API for real-time financial news updates.

    For a while now, users have been asking for adding real-time financial news on OpenBB Terminal.

    Since OpenBB Terminal is a command line interface for the world’s financial data, and there is no threading going on — there was never a very straightforward way to do this.

    Until today.

    After recalling this tweet from Elon earlier in November, I realized that I’ve been using Twitter for news substantially more than MSM.

    image

    So, my next train of thought was; What if I was able to somehow display the latest tweets from Twitter accounts that I trust. In particular, accounts that have up-to-date information and usually mention the words “JUST IN” or “BREAKING”. E.g. @WatcherGuru or @unusual_whales.

    By doing this, I could then use the bottom of the OpenBB Terminal to highlight the news. An example of this is below:

    image

    Coding and ChatGPT

    The next step for me was to implement the code!

    First, I needed to understand how I could have access to the last tweet of a specific user account. I already had a Twitter API account created, which meant I already had the key, token and secrets, therefore, I just needed to read documentation to understand how to use the Twitter API. Hence, I started reading Twitter’s developer documentation.

    The day before I had been playing around with ChatGPT. And like everyone else, I was very impressed. One of the things that surprised me the most was how good it was at outputting working code with an explanation along the lines.

    So, while I was reading the documentation, I was thinking “I wish there was a way for me to just be able to get the last N tweets of an account without needing to dig in the developer documentation”. Could ChatGPT be the answer?

    So I tried…

    image

    This was already amazing. But I’m lazy and didn’t want to copy all the cells individually to put it into a Jupyter notebook, so asked ChatGPT to provide the code output as a single block. I wasn’t convinced it was going to work. But it did.

    image

    … it just worked. 🤯

    After that, I needed the timestamp associated with the tweet, to see how old it was. As usual, I started looking into Tweepy documentation.

    Ups, what was I doing again?

    After a couple of seconds, I went onto ChatGPT and asked how I could get the timestamp of a tweet using Tweepy library.

    And 🪄, it worked again!!!

    image

    One thing that is for sure: ChatGPT is going to truly disrupt many industries. And I will be here for it.

    PS: The PR with this addition is in development here.

    - - +

    How ChatGPT allowed me to leverage Twitter API 10x faster

    · 3 min read


    Leveraging the power of ChatGPT to interact with Twitter API for real-time financial news updates.

    For a while now, users have been asking for adding real-time financial news on OpenBB Terminal.

    Since OpenBB Terminal is a command line interface for the world’s financial data, and there is no threading going on — there was never a very straightforward way to do this.

    Until today.

    After recalling this tweet from Elon earlier in November, I realized that I’ve been using Twitter for news substantially more than MSM.

    image

    So, my next train of thought was; What if I was able to somehow display the latest tweets from Twitter accounts that I trust. In particular, accounts that have up-to-date information and usually mention the words “JUST IN” or “BREAKING”. E.g. @WatcherGuru or @unusual_whales.

    By doing this, I could then use the bottom of the OpenBB Terminal to highlight the news. An example of this is below:

    image

    Coding and ChatGPT

    The next step for me was to implement the code!

    First, I needed to understand how I could have access to the last tweet of a specific user account. I already had a Twitter API account created, which meant I already had the key, token and secrets, therefore, I just needed to read documentation to understand how to use the Twitter API. Hence, I started reading Twitter’s developer documentation.

    The day before I had been playing around with ChatGPT. And like everyone else, I was very impressed. One of the things that surprised me the most was how good it was at outputting working code with an explanation along the lines.

    So, while I was reading the documentation, I was thinking “I wish there was a way for me to just be able to get the last N tweets of an account without needing to dig in the developer documentation”. Could ChatGPT be the answer?

    So I tried…

    image

    This was already amazing. But I’m lazy and didn’t want to copy all the cells individually to put it into a Jupyter notebook, so asked ChatGPT to provide the code output as a single block. I wasn’t convinced it was going to work. But it did.

    image

    … it just worked. 🤯

    After that, I needed the timestamp associated with the tweet, to see how old it was. As usual, I started looking into Tweepy documentation.

    Ups, what was I doing again?

    After a couple of seconds, I went onto ChatGPT and asked how I could get the timestamp of a tweet using Tweepy library.

    And 🪄, it worked again!!!

    image

    One thing that is for sure: ChatGPT is going to truly disrupt many industries. And I will be here for it.

    PS: The PR with this addition is in development here.

    + + \ No newline at end of file diff --git a/blog/how-i-became-ceo-of-openbb/index.html b/blog/how-i-became-ceo-of-openbb/index.html index e3ed70deae..503ff58b82 100644 --- a/blog/how-i-became-ceo-of-openbb/index.html +++ b/blog/how-i-became-ceo-of-openbb/index.html @@ -10,13 +10,13 @@ - - + +
    -

    How I became CEO of OpenBB

    · 4 min read


    This post talks about my story of becoming the CEO of OpenBB, the company behind the fastest growing open source project in finance.

    Both my parents are Portuguese and emigrated to Switzerland for better conditions. This is where my brother and I were born. We moved back to our small hometown in Portugal when I was 8 years old.

    When I was 21 years old I moved to London to pursue my MSc in control systems at the Imperial College. I also joined a semiconductor company as a Software Design Engineer.

    ezgif com-optimize (5)

    In my spare time I learned Python so I could become more proficient in machine learning and artificial intelligence. When my mathematics professor learned of my interest in Python he challenged me to write the code behind his PhD thesis on "Data Science in the Modeling and Forecasting of Financial Time Series: from Classic methodologies to Deep Learning" which combined open source, ML/AI and finance. This was when I first started to realize my passion for financial data.

    image

    I was inspired by books like "Rich dad Poor dad" which allowed me to understand that the only way to build true generational wealth is through investing. Now that I started to accumulate more savings through my professional pursuits, and with my finance interest increasing from my thesis work, I wanted to invest my own capital.

    What I learned was that investing was a highly cumbersome process. Unlike coding where the tooling (e.g. VSCode) is optimized for efficiency and allows us to automate a lot of processes, investing was highly inefficient and impossible to automate.

    I was spending hours doing my own investment research (multiple tabs open researching several different sources on a ticker, screenshot the data to put on a document or share with friends, write my thoughts, and repeat), and this had to be done for every single ticker at different instances of time otherwise the data would become irrelevant.

    I learned from Reddit users how they gained insights and performed due diligence. I quickly realized their "workflow" was just as inefficient as mine. I concluded that the only aspect of research that should require user input is the interpretation. As far as I was concerned, all data gathering should be automated.

    I began investigating potential investment research tools that allowed automation and couldn't find any, not even the mythical $24k/year Bloomberg terminal. I looked for platforms on GitHub where I could build on top of with no success.

    During Covid Christmas break, the flight to visit my parents was cancelled, so I ended up staying at home and sketching/building what would become my own investment research platform. I noticed that there were hundreds of data providers offering free data tiers where the data provided didn't correlate with each other. If I wanted access to paid datasets or more requests per minute it would be as simple as to upgrade my API key to a paid plan.

    image

    Over the next two months I built a python based command line interface in my spare time for and released the first lines of code as Open Source under the name "Gamestonk Terminal" since I was an investor in Gamestop and Elon Musk had recently tweeted his now infamous "Gamestonk" tweet.

    The project went viral in a couple of minutes on Reddit and HackerNews. In under 24h we had over 4,000 stars on GitHub, and hundreds of messages requesting features, thanking me for the tool, or reporting bugs.

    The number of issues and feature requests was overwhelming for a single person working part-time, so I created a Discord group and started building a community of users. Many of those same first users went on to become core maintainers of the project. The community started adding new data sources, new features and even new asset classes to the project - soon after we were supporting crypto, ETFs, options, forex, and macro economy.

    My goal was never to build a business/company with this product. My motivation was to create a better investment research platform that was unavailable until then. When we got approached by JJ (from OSS Capital), it was a no-brainer to create OpenBB, as this would allow me to accelerate the product vision and build the world's leading investment research platform.

    - - +

    How I became CEO of OpenBB

    · 4 min read


    This post talks about my story of becoming the CEO of OpenBB, the company behind the fastest growing open source project in finance.

    Both my parents are Portuguese and emigrated to Switzerland for better conditions. This is where my brother and I were born. We moved back to our small hometown in Portugal when I was 8 years old.

    When I was 21 years old I moved to London to pursue my MSc in control systems at the Imperial College. I also joined a semiconductor company as a Software Design Engineer.

    ezgif com-optimize (5)

    In my spare time I learned Python so I could become more proficient in machine learning and artificial intelligence. When my mathematics professor learned of my interest in Python he challenged me to write the code behind his PhD thesis on "Data Science in the Modeling and Forecasting of Financial Time Series: from Classic methodologies to Deep Learning" which combined open source, ML/AI and finance. This was when I first started to realize my passion for financial data.

    image

    I was inspired by books like "Rich dad Poor dad" which allowed me to understand that the only way to build true generational wealth is through investing. Now that I started to accumulate more savings through my professional pursuits, and with my finance interest increasing from my thesis work, I wanted to invest my own capital.

    What I learned was that investing was a highly cumbersome process. Unlike coding where the tooling (e.g. VSCode) is optimized for efficiency and allows us to automate a lot of processes, investing was highly inefficient and impossible to automate.

    I was spending hours doing my own investment research (multiple tabs open researching several different sources on a ticker, screenshot the data to put on a document or share with friends, write my thoughts, and repeat), and this had to be done for every single ticker at different instances of time otherwise the data would become irrelevant.

    I learned from Reddit users how they gained insights and performed due diligence. I quickly realized their "workflow" was just as inefficient as mine. I concluded that the only aspect of research that should require user input is the interpretation. As far as I was concerned, all data gathering should be automated.

    I began investigating potential investment research tools that allowed automation and couldn't find any, not even the mythical $24k/year Bloomberg terminal. I looked for platforms on GitHub where I could build on top of with no success.

    During Covid Christmas break, the flight to visit my parents was cancelled, so I ended up staying at home and sketching/building what would become my own investment research platform. I noticed that there were hundreds of data providers offering free data tiers where the data provided didn't correlate with each other. If I wanted access to paid datasets or more requests per minute it would be as simple as to upgrade my API key to a paid plan.

    image

    Over the next two months I built a python based command line interface in my spare time for and released the first lines of code as Open Source under the name "Gamestonk Terminal" since I was an investor in Gamestop and Elon Musk had recently tweeted his now infamous "Gamestonk" tweet.

    The project went viral in a couple of minutes on Reddit and HackerNews. In under 24h we had over 4,000 stars on GitHub, and hundreds of messages requesting features, thanking me for the tool, or reporting bugs.

    The number of issues and feature requests was overwhelming for a single person working part-time, so I created a Discord group and started building a community of users. Many of those same first users went on to become core maintainers of the project. The community started adding new data sources, new features and even new asset classes to the project - soon after we were supporting crypto, ETFs, options, forex, and macro economy.

    My goal was never to build a business/company with this product. My motivation was to create a better investment research platform that was unavailable until then. When we got approached by JJ (from OSS Capital), it was a no-brainer to create OpenBB, as this would allow me to accelerate the product vision and build the world's leading investment research platform.

    + + \ No newline at end of file diff --git a/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveaways/index.html b/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveaways/index.html index b61245031a..ce14435905 100644 --- a/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveaways/index.html +++ b/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveaways/index.html @@ -10,13 +10,13 @@ - - + +
    -

    How I created a bot in python to participate in NFT giveaways

    · 3 min read


    In this blogpost, I share how I created a bot in Python to automate participation in NFT giveaways on Reddit. The bot simplifies tasks such as upvoting posts, commenting, and opening Opensea links to favourite artwork.

    The open source code is available here.

    Lately I’ve been looking into NFTs. I’ve observed that more and more people are trying to innovate and create their own pieces of art. Some of them are impressive, some of them aren’t. But,

    Beauty is in the eye of the beholder — Margaret Wolfe Hungerford


    However, in my humble opinion, what distinguishes some art from others, is most of the time not the art itself but the community around it. For example, when everyone starts talking about the ‘new best thing’ you feel more pressure to get involved.

    Because of this dynamic, creators are investing in ways to increase their collectibles popularity by building their community. A great example is ParallelNFT and the dystopic story that is being created around their cards — in their case, it’s fairly easy to understand that once a big community is formed around such cards, video games, movies and even series are on the table. For the first time ever, we would go from selling collectibles to creating some form of entertainment. A whole new industry in the making.

    However, not every digital creator has the resources to create a full concept around their cards. Does this mean that they can’t create a community around it? No. But they must find other ways. One of the most popular ways I’ve seen is through giveaways. Similar to what small clothing brands do to increase their popularity. This is a great tactic in my opinion, since giveaway not only give you a bigger audience (people that participate and re-share content) but it makes the cards have multiple owners. This, as a result, makes the collection more attractive for NFT collectors.

    When demand exceeds supply, prices tend to rise.

    And these creators are using Reddit as the platform of their giveaways.

    image

    When scrolling through reddit you will notice that all these posts have certain things in common:

    • They ask for an up-vote on the post
    • A comment with your wallet address
    • To favourite their artwork
    • They may also ask to you to join their Discord
    • For a follow on their Twitter or Instagram
    • If you can retweet or share a story

    These are things that take time, and a bot can perfectly do this. Therefore, I wrote a giveaway NFT bot to simplify my work. Now I just sit down and read robot vacuum reviews while the bot: upvotes, comments and opens their Opensea link for me to favourite their artwork.

    I’ve already won multiple NFTs with this, which is exciting— you never know where the next CryptoPunks are at.

    There’s actually 1 collection that I particularly like and believe has a lot of potential, it’s called CryptoCartoonEaters and due to the uniqueness of each collectible (only 100 made), I really think it has a great potential. I acquired my favourite cartoon as a kid: Goku Eating a Burger.

    image

    Let me know if you find this article interesting, and if you used the bot as well!

    - - +

    How I created a bot in python to participate in NFT giveaways

    · 3 min read


    In this blogpost, I share how I created a bot in Python to automate participation in NFT giveaways on Reddit. The bot simplifies tasks such as upvoting posts, commenting, and opening Opensea links to favourite artwork.

    The open source code is available here.

    Lately I’ve been looking into NFTs. I’ve observed that more and more people are trying to innovate and create their own pieces of art. Some of them are impressive, some of them aren’t. But,

    Beauty is in the eye of the beholder — Margaret Wolfe Hungerford


    However, in my humble opinion, what distinguishes some art from others, is most of the time not the art itself but the community around it. For example, when everyone starts talking about the ‘new best thing’ you feel more pressure to get involved.

    Because of this dynamic, creators are investing in ways to increase their collectibles popularity by building their community. A great example is ParallelNFT and the dystopic story that is being created around their cards — in their case, it’s fairly easy to understand that once a big community is formed around such cards, video games, movies and even series are on the table. For the first time ever, we would go from selling collectibles to creating some form of entertainment. A whole new industry in the making.

    However, not every digital creator has the resources to create a full concept around their cards. Does this mean that they can’t create a community around it? No. But they must find other ways. One of the most popular ways I’ve seen is through giveaways. Similar to what small clothing brands do to increase their popularity. This is a great tactic in my opinion, since giveaway not only give you a bigger audience (people that participate and re-share content) but it makes the cards have multiple owners. This, as a result, makes the collection more attractive for NFT collectors.

    When demand exceeds supply, prices tend to rise.

    And these creators are using Reddit as the platform of their giveaways.

    image

    When scrolling through reddit you will notice that all these posts have certain things in common:

    • They ask for an up-vote on the post
    • A comment with your wallet address
    • To favourite their artwork
    • They may also ask to you to join their Discord
    • For a follow on their Twitter or Instagram
    • If you can retweet or share a story

    These are things that take time, and a bot can perfectly do this. Therefore, I wrote a giveaway NFT bot to simplify my work. Now I just sit down and read robot vacuum reviews while the bot: upvotes, comments and opens their Opensea link for me to favourite their artwork.

    I’ve already won multiple NFTs with this, which is exciting— you never know where the next CryptoPunks are at.

    There’s actually 1 collection that I particularly like and believe has a lot of potential, it’s called CryptoCartoonEaters and due to the uniqueness of each collectible (only 100 made), I really think it has a great potential. I acquired my favourite cartoon as a kid: Goku Eating a Burger.

    image

    Let me know if you find this article interesting, and if you used the bot as well!

    + + \ No newline at end of file diff --git a/blog/how-i-created-the-best-discord-meme-bot/index.html b/blog/how-i-created-the-best-discord-meme-bot/index.html index 48739d767d..61f4a923de 100644 --- a/blog/how-i-created-the-best-discord-meme-bot/index.html +++ b/blog/how-i-created-the-best-discord-meme-bot/index.html @@ -10,13 +10,13 @@ - - + +
    -

    How I created the best discord meme bot

    · 4 min read


    In this blog post, I share my journey of creating a Discord meme bot, the role it played in building a vibrant community around our open source project, and how you can add your own memes to the bot.

    The open source code is available here.

    Background

    Over the past few weeks, life has been very chaotic on my end, mostly due to the announcement of OpenBB last week which you can read the full story on here.

    When I started OpenBB Terminal, all my focus was on building, building and building. Once I made the project open source and contributors started to appear, I slowly saw my time shifting from building a product to building a community. This community ultimately would end up building the product, but from my end, I need to be able to pass on my passion to the project and vision.

    Developing features for the terminal only took me a couple of minutes, whereas the connection with the community is a long-time game. You don’t become close with someone you’ve never met within couple of minutes. Instead you need to put effort into the relationship and consistency is key.

    The community on our Discord was growing day by day. And so was my relationship with the people in it. The truth is, we were not only sharing insights about the platform, but were laughing and bonding together whilst building it. And memes/gifs are a big part of these interactions.

    For people who know me, they know how much I love memes and how I can always create memes for every situation (honestly, all the time I spent on Instagram is finally paying off).

    Although I believe that we have one of the most exciting open source projects going on, I also strongly believe that our fun culture (i.e. memes) is what makes contributors want to work in this particualr environment. Building the future of investment research can be fun and this is what we’re proving.

    At this stage, I think I’ve spent more time interacting with people than I have working on the platform. The funny thing is that the platform is 10x better than what it would be if I was working on my own. Creating a strong community pays off and this is why since the start I was having calls with literally everyone to help them install our platform. Today, most of the team at OpenBB was met on Discord whilst working on the platform. I didn’t need any interviews, they weren’t candidates anymore but people that I enjoyed to work with and wanted on the team.

    Sorry for the background story, but it was important to me to explain why I worked on this. The interesting part of the article starts now.

    Development

    The idea of Discord Memes is to avoid to open imgflip everytime I wanted to add text to a meme. Personally, I love the gifs available through Discord but I think a meme with text is much more powerful (and funny).

    When I started coding this here and there, I wanted the code to be super straightforward so it was very simple and fast to add a new meme to the pool. And so I did.

    The process to add new memes is incredibly easy. Go to the project and star it for starters (also OpenBB Terminal since you’re at it). Then,

    1. Add the meme you want to the memes/ folder, e.g. spongebob.jpg

    2. Then create a function with the same name of the image (e.g. spongebob) with the following format


    @create_and_send_meme()
    def spongebob(inter, text: str = None, _=None):
    if text:
    _.text(
    0.5,
    0.2,
    "\n".join(wrap(''.join(choice((str.upper, str.lower))(c) for c in text), 40)),
    fontsize=20,
    color="white",
    alpha=0.9,
    horizontalalignment="center",
    path_effects=[pe.withStroke(linewidth=4, foreground="black")]
    )
    return _
    1. That’s it.

    Note: I created a python decorator @create_and_send_meme() that basically abstracts all the memes created and picks up the image on memes with the same name of the function. This way, the person adding a meme just needs to focus on the text on the image, i.e. it's location, size, where it wraps, colours and alignment.

    I used a playground.ipynb notebook, which is also on the repo, to increase the speed of the text placement on each of the memes I added.

    This is how it looks,

    image

    OR

    image

    As you can see, our Discord server just stepped up. Join us to try out the meme bot, build the future of investment research or just to say hi.

    We’ll be waiting for you. 🦋

    - - +

    How I created the best discord meme bot

    · 4 min read


    In this blog post, I share my journey of creating a Discord meme bot, the role it played in building a vibrant community around our open source project, and how you can add your own memes to the bot.

    The open source code is available here.

    Background

    Over the past few weeks, life has been very chaotic on my end, mostly due to the announcement of OpenBB last week which you can read the full story on here.

    When I started OpenBB Terminal, all my focus was on building, building and building. Once I made the project open source and contributors started to appear, I slowly saw my time shifting from building a product to building a community. This community ultimately would end up building the product, but from my end, I need to be able to pass on my passion to the project and vision.

    Developing features for the terminal only took me a couple of minutes, whereas the connection with the community is a long-time game. You don’t become close with someone you’ve never met within couple of minutes. Instead you need to put effort into the relationship and consistency is key.

    The community on our Discord was growing day by day. And so was my relationship with the people in it. The truth is, we were not only sharing insights about the platform, but were laughing and bonding together whilst building it. And memes/gifs are a big part of these interactions.

    For people who know me, they know how much I love memes and how I can always create memes for every situation (honestly, all the time I spent on Instagram is finally paying off).

    Although I believe that we have one of the most exciting open source projects going on, I also strongly believe that our fun culture (i.e. memes) is what makes contributors want to work in this particualr environment. Building the future of investment research can be fun and this is what we’re proving.

    At this stage, I think I’ve spent more time interacting with people than I have working on the platform. The funny thing is that the platform is 10x better than what it would be if I was working on my own. Creating a strong community pays off and this is why since the start I was having calls with literally everyone to help them install our platform. Today, most of the team at OpenBB was met on Discord whilst working on the platform. I didn’t need any interviews, they weren’t candidates anymore but people that I enjoyed to work with and wanted on the team.

    Sorry for the background story, but it was important to me to explain why I worked on this. The interesting part of the article starts now.

    Development

    The idea of Discord Memes is to avoid to open imgflip everytime I wanted to add text to a meme. Personally, I love the gifs available through Discord but I think a meme with text is much more powerful (and funny).

    When I started coding this here and there, I wanted the code to be super straightforward so it was very simple and fast to add a new meme to the pool. And so I did.

    The process to add new memes is incredibly easy. Go to the project and star it for starters (also OpenBB Terminal since you’re at it). Then,

    1. Add the meme you want to the memes/ folder, e.g. spongebob.jpg

    2. Then create a function with the same name of the image (e.g. spongebob) with the following format


    @create_and_send_meme()
    def spongebob(inter, text: str = None, _=None):
    if text:
    _.text(
    0.5,
    0.2,
    "\n".join(wrap(''.join(choice((str.upper, str.lower))(c) for c in text), 40)),
    fontsize=20,
    color="white",
    alpha=0.9,
    horizontalalignment="center",
    path_effects=[pe.withStroke(linewidth=4, foreground="black")]
    )
    return _
    1. That’s it.

    Note: I created a python decorator @create_and_send_meme() that basically abstracts all the memes created and picks up the image on memes with the same name of the function. This way, the person adding a meme just needs to focus on the text on the image, i.e. it's location, size, where it wraps, colours and alignment.

    I used a playground.ipynb notebook, which is also on the repo, to increase the speed of the text placement on each of the memes I added.

    This is how it looks,

    image

    OR

    image

    As you can see, our Discord server just stepped up. Join us to try out the meme bot, build the future of investment research or just to say hi.

    We’ll be waiting for you. 🦋

    + + \ No newline at end of file diff --git a/blog/how-i-used-openai-api-to-improve-our-product-documentation/index.html b/blog/how-i-used-openai-api-to-improve-our-product-documentation/index.html index 8f3a1f65b3..d57ee5657f 100644 --- a/blog/how-i-used-openai-api-to-improve-our-product-documentation/index.html +++ b/blog/how-i-used-openai-api-to-improve-our-product-documentation/index.html @@ -10,13 +10,13 @@ - - + +
    -

    How I Used OpenAI API to improve our product documentation

    · 2 min read


    In this blog post, I share how I used the OpenAI API to improve our product documentation. I used ChatGPT to generate more detailed descriptions for our OpenBB Bot Discord commands, making them more understandable for new users.

    The open source code is available here.

    The documentation of our free OpenBB Bot was pretty simplistic for most of the commands.

    For instance, the description for the command /dp alldp was: "Last 15 Darkpool Trades", as seen below:

    image

    For more experienced traders, this may be enough. But for new users, these 4 words may not mean much.

    For context, this is the output that a user would get if running /dp alldp on our Discord server.

    image

    So I talked with someone in our team about improving the documentation. Not only for the new users that wanted to utilize our free product but also so that we could train our own LLM on this better dataset.

    Over the weekend I had the idea: What if I provided ChatGPT with the current description and an example of how to use the command and asked it to provide a more detailed description?

    So the next step was to try whether ChatGPT would indeed improve the current documentation.

    After a bit of prompt tweaking, I got a much better description than the one we currently had. See below:

    image

    The next step was rather straightforward. I created a script that iterated through all our OpenBB Bot Discord documentation files and updated the old description with a more detailed one.

    This is the template prompt that I used:

    Context: You are a developer writing a detailed documentation for a function that allows the user to retrieve {desc} utilizing the command {example} how would you explain what this command does in a single paragraph”

    Where desc and example corresponds to the current description and example that each of our commands have, respectively.

    The results can be seen below (done on this PR),

    image

    As usual, I open source the script here.

    The funny thing is that I used an LLM output to improve our documentation. And we may use this data to train our own LLM.

    LLM-ception?

    - - +

    How I Used OpenAI API to improve our product documentation

    · 2 min read


    In this blog post, I share how I used the OpenAI API to improve our product documentation. I used ChatGPT to generate more detailed descriptions for our OpenBB Bot Discord commands, making them more understandable for new users.

    The open source code is available here.

    The documentation of our free OpenBB Bot was pretty simplistic for most of the commands.

    For instance, the description for the command /dp alldp was: "Last 15 Darkpool Trades", as seen below:

    image

    For more experienced traders, this may be enough. But for new users, these 4 words may not mean much.

    For context, this is the output that a user would get if running /dp alldp on our Discord server.

    image

    So I talked with someone in our team about improving the documentation. Not only for the new users that wanted to utilize our free product but also so that we could train our own LLM on this better dataset.

    Over the weekend I had the idea: What if I provided ChatGPT with the current description and an example of how to use the command and asked it to provide a more detailed description?

    So the next step was to try whether ChatGPT would indeed improve the current documentation.

    After a bit of prompt tweaking, I got a much better description than the one we currently had. See below:

    image

    The next step was rather straightforward. I created a script that iterated through all our OpenBB Bot Discord documentation files and updated the old description with a more detailed one.

    This is the template prompt that I used:

    Context: You are a developer writing a detailed documentation for a function that allows the user to retrieve {desc} utilizing the command {example} how would you explain what this command does in a single paragraph”

    Where desc and example corresponds to the current description and example that each of our commands have, respectively.

    The results can be seen below (done on this PR),

    image

    As usual, I open source the script here.

    The funny thing is that I used an LLM output to improve our documentation. And we may use this data to train our own LLM.

    LLM-ception?

    + + \ No newline at end of file diff --git a/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminal/index.html b/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminal/index.html index 30fe16a644..ccbf4ee5c6 100644 --- a/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminal/index.html +++ b/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminal/index.html @@ -10,13 +10,13 @@ - - + +
    -

    How I would do due diligence on $AMT using OpenBB Terminal

    · 2 min read


    This blog post provides a detailed walkthrough on how to conduct due diligence on $AMT using the OpenBB Terminal, a free and open source platform for financial data analysis.

    Last month someone on Twitter asked me to do a thread on how I would do due diligence on $AMT using the free and open source OpenBB Terminal.

    Below I demonstrate what you can expect from using that platform.

    We could go much deeper, but this shows examples of output that you can expect. With over 800 commands and over 100 data sources, this is a very small subset of what you can achieve through this platform.

    In addition, this will only be in relation with stocks data, but the terminal also has access to options, crypto, ETFs, mutual funds, NFTs, macro economy, futures and even alternative data!

    More information on the platform and how to install it here.

    Strap in.

    $ /stocks/load AMT/candle

    image

    $ /stocks/fa/mktcap

    image

    $ /stocks/fa/mgmt

    image

    $ /stocks/fa/income/balance/cash

    image

    image

    image

    $ /stocks/fa/shrs

    image

    $ /stocks/fa/sust

    image

    $ /stocks/fa/divs

    image

    $ /stocks/fa/dcf

    image

    $ /stocks/ins/stats

    image

    $ /stocks/dps/psi

    image

    $ /stocks/gov/histcont

    image

    $ /stocks/dd/rating

    image

    $ /stocks/dd/pt

    image

    $ /stocks/dd/est

    image

    $ /stocks/ta/sma

    image

    $ /stocks/ta/recom/summary

    image

    $ /stocks/ba/sentiment

    image

    $ /stocks/sia/metric tc

    image

    $ /stocks/sia/metric fcf

    image

    $ /stocks/sia/vis oi

    image

    $ /stocks/ca/historical/hcorr

    image

    image

    $ /stocks/ca/cashflow/income/balance

    image

    image

    image

    I know this can be overwhelming information and it takes some time to run all these commands.

    Hence I created a script. So now you can run all of these commands in one go, with:

    $ /exe due_diligence_stock.openbb -i AMT

    Any feedback is welcome!

    And if you want to ask questions about the product before installing it, feel free to join us on Discord here: https://openbb.co/discord

    - - +

    How I would do due diligence on $AMT using OpenBB Terminal

    · 2 min read


    This blog post provides a detailed walkthrough on how to conduct due diligence on $AMT using the OpenBB Terminal, a free and open source platform for financial data analysis.

    Last month someone on Twitter asked me to do a thread on how I would do due diligence on $AMT using the free and open source OpenBB Terminal.

    Below I demonstrate what you can expect from using that platform.

    We could go much deeper, but this shows examples of output that you can expect. With over 800 commands and over 100 data sources, this is a very small subset of what you can achieve through this platform.

    In addition, this will only be in relation with stocks data, but the terminal also has access to options, crypto, ETFs, mutual funds, NFTs, macro economy, futures and even alternative data!

    More information on the platform and how to install it here.

    Strap in.

    $ /stocks/load AMT/candle

    image

    $ /stocks/fa/mktcap

    image

    $ /stocks/fa/mgmt

    image

    $ /stocks/fa/income/balance/cash

    image

    image

    image

    $ /stocks/fa/shrs

    image

    $ /stocks/fa/sust

    image

    $ /stocks/fa/divs

    image

    $ /stocks/fa/dcf

    image

    $ /stocks/ins/stats

    image

    $ /stocks/dps/psi

    image

    $ /stocks/gov/histcont

    image

    $ /stocks/dd/rating

    image

    $ /stocks/dd/pt

    image

    $ /stocks/dd/est

    image

    $ /stocks/ta/sma

    image

    $ /stocks/ta/recom/summary

    image

    $ /stocks/ba/sentiment

    image

    $ /stocks/sia/metric tc

    image

    $ /stocks/sia/metric fcf

    image

    $ /stocks/sia/vis oi

    image

    $ /stocks/ca/historical/hcorr

    image

    image

    $ /stocks/ca/cashflow/income/balance

    image

    image

    image

    I know this can be overwhelming information and it takes some time to run all these commands.

    Hence I created a script. So now you can run all of these commands in one go, with:

    $ /exe due_diligence_stock.openbb -i AMT

    Any feedback is welcome!

    And if you want to ask questions about the product before installing it, feel free to join us on Discord here: https://openbb.co/discord

    + + \ No newline at end of file diff --git a/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla/index.html b/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla/index.html index 69e0414a4e..da4175d1da 100644 --- a/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla/index.html +++ b/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmla/index.html @@ -10,13 +10,13 @@ - - + +
    -

    How I wrote a machine learning paper in 1 week that got accepted to International Conference in Machine Learning Applications

    · 11 min read


    How I wrote a machine learning paper in 1 week that got accepted to ICMLA while working full time and raised $8.8 million for OpenBB Terminal.

    The open source code is available here.

    One year ago, I raised $ 8.8 millions to build OpenBB Terminal full time. But since I was working at a startup in the UK, I had a 3 month notice period.

    During that time I worked on documenting pretty much everything I had been working on, BUT that felt short. I felt like the data that came out of our NURVV Run product could be used with a machine learning algorithm in order to detect a foot strike quite efficiently.

    image

    So I asked my company:

    If I use my spare time to work on this paper will you sponsor me if I get accepted?


    My goal was to increase the visibility of our product in academia. And given I spent some time reading papers in the area, I knew that what I had in mind had a shot at working.

    My background is not data science, and this was my first time “officially” working on machine learning. I wasn’t 100% sure that my idea would work, but after spending more than 1 year at the company, I knew how the data behaved. I thought I could build an algorithm robust enough to be able to detect a foot strike more efficiently than what others had.

    After some time, the company accepted my proposal, and between the time to decide to apply to International Conference on Machine Learning and Applications (ICMLA) and getting ready to start working on the paper, there was 1 week left.

    I thought that this window was rather tight given that I had to clean the data, work on the entire code behind the paper from idea to implementation, and write the damn paper. I knew this was gonna be tight, but oh boy. I had one of the harshest weeks of my life. I barely slept for 7 straight days, and skipped the company team event in order to make it through the deadline.

    Because of that, I will go into what happened at each step along the way with images. I will skip the cleaning data and boring parts, don’t worry. If you just want to read the final paper, you can find it here: ”Step Detection using SVM on NURVV Trackers”.

    Also, if you’ve been following me, you know how much I love open source. Owing to that I open source the code behind the project here.

    Exploratory Data Analysis

    The Nurvv trackers have an Inertial Measurement Unit (IMU) tracks linear acceleration (accelerometer) and rotational rate (gyroscope). Sometimes it also contains a magnetometer. And Nurvv gave me access to 6 runs from 6 different runners.

    My first step was to look into how this data looked. On the left you can see the acceleration (m/s²) and the angular velocity (rad/s).

    image

    I knew that our IMU had a sampling rate of 1125 Hz (which means that each data point gets sampled at approximately every 888.89μs) and this was critical in order to detect the oscillations that occur when a foot strike occurs (i.e. impact of the foot on the floor makes the IMU oscillate). Thus I zoomed in the zone of impact and used a scatter plot to understand if we were “missing” information.

    image

    I found it interesting that the distance between the samples were larger at the time of the impact. So I plotted the IMU accelerometer data and the IMU gyroscope data in a 3D plot interactively as a function of time (below you can see a snapshot).

    image

    From here it was interesting to note that when the foot is in the air, the samples are somehow concentrated (darker blue), whereas when a step occurs (more sparse) they behave erratically. The plot above was snapshotted with 3 steps that occurred.

    From that 3D plot I had the intuition that by utilizing a principal component analysis (PCA)**, I could reduce the dimensionality without losing much information. The result is shown below,

    image

    This made me think that I could use a support vector machine (SVM) in order to detect whether a foot strike has occurred or not. And what I was most excited about it was:

    • This model isn’t time-dependant. Meaning that it would be fascinating to be able to predict whether a step occurred or not without the notion of time, but the current IMU data.
    • We can develop an SVM model for each runner style. Then create an ensemble model with hard voting which allowed for the model that has seen more similar data, to be more confident in the classification of foot strike vs not foot strike.

    But this was all a theory, I needed to prove it.

    The first issue I had was: SVM is a supervised learning model. This meant that for the sampling data I was providing the model, I would have to classify whether those samples corresponded to a foot strike or not.

    The issue? Although the product had force sensitive resistors (FSR) in the insoles, I didn’t have access to the samples that corresponded with these IMU samples.

    So I knew that I would have to classify the data myself. Manually would have been a nightmare and not reliable enough, so I needed to build an algorithm that could classify the data quite reliably. Signal processing theory, here I go.

    Labelling data for a supervised learning problem

    1. Get the raw IMU samples (accelerometer and gyroscope)
    2. Do the difference in magnitude between the accelerometers samples and then the gyroscope samples
    3. Apply root sum squared to the magnitude difference of accelerometer data, and then similarly to gyroscope data
    4. Standardize the accelerometer data and the gyroscope data. This is so the data can be somehow compared with each other since the magnitude varies as one represents linear acceleration and the other angular rate.
    5. Do the average between these 2 signals. This makes the data more robust.
    6. Finally, apply a convolution to the resulting signal with a rectangular pulse. This allows to remove “drops” from the signal and ensures a smoother signal.

    Below you can see the formulas and signal changes that were made in order to obtain the final result:

    image

    image

    After this, I selected a sensible value of 0.3 to be used as a threshold on the resulting signal to classify step vs no-step.

    image

    I applied the difference between each first foot strike detected in order to make sure that there was no missed step. As you can see above the stride time is around 700ms which is what is expected of a runner jogging.

    Someone might be wondering; If this gives such a great result, why did I need machine learning in the first place? The reason is because standardization and convolution (steps 4 and steps 6) are a post-processing signal technique. Therefore, it cannot be deployed in running time, and relies on data that happens in the future.

    For illustration purposes, here is how the initial raw IMU data behaves against the labelling from signal processing approach (red background means no step, while green background means step).

    image

    Support Vector Machine for classification

    For the model, SVM was selected because:

    • It works well with high dimensional data (6 IMU samples) because it only uses a few of these points (called support vectors) to create this hyperplane (decision boundary) between classes.
    • SVM is ideal for binary classification problems.
    • RBF kernel allows to handle non-linear data.

    This is the type of classification that SVM is capable of (this is the raw acceleration data with a PCA applied, and the SVM classification on the background for a model that was trained using that same data).

    image

    C and gamma hyperparameters

    • Given each dataset is rather large to perform grid search optimization on C and gamma, a subset of each of the datasets is used to extract these parameters.
    • Each dataset subset is now split: 80% for training data and 20% for validation.
    • Thus, 80% of the data subset is used to apply SVM with different combinations of C and gamma over a 2D grid. The remaining 20% is used to test the logistic loss and assess optimal hyperparameters.

    Training and testing

    • 80% of data is used for training and 20% is used for testing.
    • Although the testing is done out-of-sample, given the nature of the data (where it comes from the same distribution) it is almost as if it was an in-sample.
    • In our case this is ideal as we want each model to perform very well on its own dataset. We want each model to generalize well for that very specific type of data (runner style, speed and terrain).
    • A 5-sample moving average is applied before assessing the classification of our model, this is to remove spurious samples. A small window needs to be selected to not introduce a delay in the recognition of a step.
    • Since our data set is imbalanced (i.e. there are more samples being no-step than step samples) we’ll use Geometric Mean (G-Mean) evaluation score, since this measure tries to maximize the accuracy on each of the classes while keeping their accuracies balanced.

    Result

    In the same dataset where we trained our SVM, we were able to achieve a G-Mean of 0.9645. This is rather expected since this is a powerful model and it was trained on that same data.

    image

    From the graph above this result is very positive given that the mislabelling always occurs at the boundary of a step / no-step detection. And since the sampling occurs very fast, we have some margin of error.

    Ensemble SVM model architecture

    This model as expected had a poor performance in an unseen dataset. This is normal as the data came from a different runner, running at a different speed in a different terrain. Thus, in order to create a more robust model, we built this ensemble SVM model architecture.

    image

    Each dataset has the signal processing technique applied in order to obtain the labelling. With this labels, an SVM model can be trained.

    Then, an unseen dataset (not used for training) will be used as input for all the trained SVM models. I.e. each input (3 accelerometer samples and 3 gyroscope samples) will be given to each SVM model which will output 0 or 1 to denote no-step or step, respectively.

    My rationale there was: I could do a major voting approach, BUT because of how I trained the data. It could happen that one of the models had the sample being very inside the boundary, whereas 2 others had it just outside, and the later would win. This is not what I was looking for.

    Because of this boundary approach associated with SVMs, I knew that although SVM doesn’t provide probability estimates directly, these could be calculated. So I took advantage of that. And used that probability estimate to select whether the input was considered a stop or not. My rationale was: the model that has seen more similar IMU samples is likely to have a higher confidence in their output and as output they will have what I provided as a label in advance.

    Finally, I applied a 5-sample moving average to the step (1) / no-step (0) output and round the value to be classified as step and no-step. This allowed to remove spurious samples.

    Results

    The prediction for a single SVM was extremely accurate because the model was trained on data samples from that same run (i.e. distribution). On the other hand, the ensemble prediction didn’t run on data from that distribution, hence, making this problem much more complex. However, even with that constraint, a G-Mean of 0.8756 was still achieved.

    image

    Future work

    • Employ the data coming from the ”smart” insoles as an alternative ground-truth for determining step versus no-step conditions.
    • The diversity of the data set can also be expanded to account for more surfaces, running speeds and styles.
    • Explore whether the characteristics of the PCA plot of IMU data can be used to categorize different running styles.
    • The exploration of different classification algorithms for the step detection problem, e.g. applying a long-short term memory (LTSM) neural network algorithm to exploit the time-dependency between samples.
    • Implement this proof-of-concept code on the production NURVV Run system, to test the prediction technique in a real-life scenario and consider computational time.

    Final remarks

    This was my first most technical blogpost where I went into details in how I wrote a ML paper that was accepted in a major conference in 1 week. Would love to know your thoughts on it.

    Feel free to check the full paper version here: https://ieeexplore.ieee.org/abstract/document/9680024

    - - +

    How I wrote a machine learning paper in 1 week that got accepted to International Conference in Machine Learning Applications

    · 11 min read


    How I wrote a machine learning paper in 1 week that got accepted to ICMLA while working full time and raised $8.8 million for OpenBB Terminal.

    The open source code is available here.

    One year ago, I raised $ 8.8 millions to build OpenBB Terminal full time. But since I was working at a startup in the UK, I had a 3 month notice period.

    During that time I worked on documenting pretty much everything I had been working on, BUT that felt short. I felt like the data that came out of our NURVV Run product could be used with a machine learning algorithm in order to detect a foot strike quite efficiently.

    image

    So I asked my company:

    If I use my spare time to work on this paper will you sponsor me if I get accepted?


    My goal was to increase the visibility of our product in academia. And given I spent some time reading papers in the area, I knew that what I had in mind had a shot at working.

    My background is not data science, and this was my first time “officially” working on machine learning. I wasn’t 100% sure that my idea would work, but after spending more than 1 year at the company, I knew how the data behaved. I thought I could build an algorithm robust enough to be able to detect a foot strike more efficiently than what others had.

    After some time, the company accepted my proposal, and between the time to decide to apply to International Conference on Machine Learning and Applications (ICMLA) and getting ready to start working on the paper, there was 1 week left.

    I thought that this window was rather tight given that I had to clean the data, work on the entire code behind the paper from idea to implementation, and write the damn paper. I knew this was gonna be tight, but oh boy. I had one of the harshest weeks of my life. I barely slept for 7 straight days, and skipped the company team event in order to make it through the deadline.

    Because of that, I will go into what happened at each step along the way with images. I will skip the cleaning data and boring parts, don’t worry. If you just want to read the final paper, you can find it here: ”Step Detection using SVM on NURVV Trackers”.

    Also, if you’ve been following me, you know how much I love open source. Owing to that I open source the code behind the project here.

    Exploratory Data Analysis

    The Nurvv trackers have an Inertial Measurement Unit (IMU) tracks linear acceleration (accelerometer) and rotational rate (gyroscope). Sometimes it also contains a magnetometer. And Nurvv gave me access to 6 runs from 6 different runners.

    My first step was to look into how this data looked. On the left you can see the acceleration (m/s²) and the angular velocity (rad/s).

    image

    I knew that our IMU had a sampling rate of 1125 Hz (which means that each data point gets sampled at approximately every 888.89μs) and this was critical in order to detect the oscillations that occur when a foot strike occurs (i.e. impact of the foot on the floor makes the IMU oscillate). Thus I zoomed in the zone of impact and used a scatter plot to understand if we were “missing” information.

    image

    I found it interesting that the distance between the samples were larger at the time of the impact. So I plotted the IMU accelerometer data and the IMU gyroscope data in a 3D plot interactively as a function of time (below you can see a snapshot).

    image

    From here it was interesting to note that when the foot is in the air, the samples are somehow concentrated (darker blue), whereas when a step occurs (more sparse) they behave erratically. The plot above was snapshotted with 3 steps that occurred.

    From that 3D plot I had the intuition that by utilizing a principal component analysis (PCA)**, I could reduce the dimensionality without losing much information. The result is shown below,

    image

    This made me think that I could use a support vector machine (SVM) in order to detect whether a foot strike has occurred or not. And what I was most excited about it was:

    • This model isn’t time-dependant. Meaning that it would be fascinating to be able to predict whether a step occurred or not without the notion of time, but the current IMU data.
    • We can develop an SVM model for each runner style. Then create an ensemble model with hard voting which allowed for the model that has seen more similar data, to be more confident in the classification of foot strike vs not foot strike.

    But this was all a theory, I needed to prove it.

    The first issue I had was: SVM is a supervised learning model. This meant that for the sampling data I was providing the model, I would have to classify whether those samples corresponded to a foot strike or not.

    The issue? Although the product had force sensitive resistors (FSR) in the insoles, I didn’t have access to the samples that corresponded with these IMU samples.

    So I knew that I would have to classify the data myself. Manually would have been a nightmare and not reliable enough, so I needed to build an algorithm that could classify the data quite reliably. Signal processing theory, here I go.

    Labelling data for a supervised learning problem

    1. Get the raw IMU samples (accelerometer and gyroscope)
    2. Do the difference in magnitude between the accelerometers samples and then the gyroscope samples
    3. Apply root sum squared to the magnitude difference of accelerometer data, and then similarly to gyroscope data
    4. Standardize the accelerometer data and the gyroscope data. This is so the data can be somehow compared with each other since the magnitude varies as one represents linear acceleration and the other angular rate.
    5. Do the average between these 2 signals. This makes the data more robust.
    6. Finally, apply a convolution to the resulting signal with a rectangular pulse. This allows to remove “drops” from the signal and ensures a smoother signal.

    Below you can see the formulas and signal changes that were made in order to obtain the final result:

    image

    image

    After this, I selected a sensible value of 0.3 to be used as a threshold on the resulting signal to classify step vs no-step.

    image

    I applied the difference between each first foot strike detected in order to make sure that there was no missed step. As you can see above the stride time is around 700ms which is what is expected of a runner jogging.

    Someone might be wondering; If this gives such a great result, why did I need machine learning in the first place? The reason is because standardization and convolution (steps 4 and steps 6) are a post-processing signal technique. Therefore, it cannot be deployed in running time, and relies on data that happens in the future.

    For illustration purposes, here is how the initial raw IMU data behaves against the labelling from signal processing approach (red background means no step, while green background means step).

    image

    Support Vector Machine for classification

    For the model, SVM was selected because:

    • It works well with high dimensional data (6 IMU samples) because it only uses a few of these points (called support vectors) to create this hyperplane (decision boundary) between classes.
    • SVM is ideal for binary classification problems.
    • RBF kernel allows to handle non-linear data.

    This is the type of classification that SVM is capable of (this is the raw acceleration data with a PCA applied, and the SVM classification on the background for a model that was trained using that same data).

    image

    C and gamma hyperparameters

    • Given each dataset is rather large to perform grid search optimization on C and gamma, a subset of each of the datasets is used to extract these parameters.
    • Each dataset subset is now split: 80% for training data and 20% for validation.
    • Thus, 80% of the data subset is used to apply SVM with different combinations of C and gamma over a 2D grid. The remaining 20% is used to test the logistic loss and assess optimal hyperparameters.

    Training and testing

    • 80% of data is used for training and 20% is used for testing.
    • Although the testing is done out-of-sample, given the nature of the data (where it comes from the same distribution) it is almost as if it was an in-sample.
    • In our case this is ideal as we want each model to perform very well on its own dataset. We want each model to generalize well for that very specific type of data (runner style, speed and terrain).
    • A 5-sample moving average is applied before assessing the classification of our model, this is to remove spurious samples. A small window needs to be selected to not introduce a delay in the recognition of a step.
    • Since our data set is imbalanced (i.e. there are more samples being no-step than step samples) we’ll use Geometric Mean (G-Mean) evaluation score, since this measure tries to maximize the accuracy on each of the classes while keeping their accuracies balanced.

    Result

    In the same dataset where we trained our SVM, we were able to achieve a G-Mean of 0.9645. This is rather expected since this is a powerful model and it was trained on that same data.

    image

    From the graph above this result is very positive given that the mislabelling always occurs at the boundary of a step / no-step detection. And since the sampling occurs very fast, we have some margin of error.

    Ensemble SVM model architecture

    This model as expected had a poor performance in an unseen dataset. This is normal as the data came from a different runner, running at a different speed in a different terrain. Thus, in order to create a more robust model, we built this ensemble SVM model architecture.

    image

    Each dataset has the signal processing technique applied in order to obtain the labelling. With this labels, an SVM model can be trained.

    Then, an unseen dataset (not used for training) will be used as input for all the trained SVM models. I.e. each input (3 accelerometer samples and 3 gyroscope samples) will be given to each SVM model which will output 0 or 1 to denote no-step or step, respectively.

    My rationale there was: I could do a major voting approach, BUT because of how I trained the data. It could happen that one of the models had the sample being very inside the boundary, whereas 2 others had it just outside, and the later would win. This is not what I was looking for.

    Because of this boundary approach associated with SVMs, I knew that although SVM doesn’t provide probability estimates directly, these could be calculated. So I took advantage of that. And used that probability estimate to select whether the input was considered a stop or not. My rationale was: the model that has seen more similar IMU samples is likely to have a higher confidence in their output and as output they will have what I provided as a label in advance.

    Finally, I applied a 5-sample moving average to the step (1) / no-step (0) output and round the value to be classified as step and no-step. This allowed to remove spurious samples.

    Results

    The prediction for a single SVM was extremely accurate because the model was trained on data samples from that same run (i.e. distribution). On the other hand, the ensemble prediction didn’t run on data from that distribution, hence, making this problem much more complex. However, even with that constraint, a G-Mean of 0.8756 was still achieved.

    image

    Future work

    • Employ the data coming from the ”smart” insoles as an alternative ground-truth for determining step versus no-step conditions.
    • The diversity of the data set can also be expanded to account for more surfaces, running speeds and styles.
    • Explore whether the characteristics of the PCA plot of IMU data can be used to categorize different running styles.
    • The exploration of different classification algorithms for the step detection problem, e.g. applying a long-short term memory (LTSM) neural network algorithm to exploit the time-dependency between samples.
    • Implement this proof-of-concept code on the production NURVV Run system, to test the prediction technique in a real-life scenario and consider computational time.

    Final remarks

    This was my first most technical blogpost where I went into details in how I wrote a ML paper that was accepted in a major conference in 1 week. Would love to know your thoughts on it.

    Feel free to check the full paper version here: https://ieeexplore.ieee.org/abstract/document/9680024

    + + \ No newline at end of file diff --git a/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds/index.html b/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds/index.html index 4ea93546e3..13b0759416 100644 --- a/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds/index.html +++ b/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-seconds/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Twitter thread to LinkedIn carousel in python

    · 2 min read


    In this blog post, I share how I built a Python tool that converts a Twitter thread into a LinkedIn carousel in seconds. This tool is open source and contributions for improvements are welcome.

    The open source code is available here.

    As content creators, it would be good if the same content could be utilised across every platform easily. Sometimes you need some tweaks based on audience, but often the same content is used across all platforms.

    I noticed recently that LinkedIn carousels have been picking a lot of traction, and given I have some nice Twitter threads (example) I thought that it would be great if I could convert them into a LinkedIn carousel.

    So, I looked for free tools and didn’t find anything good enough. I ended up using canvas to re-create the thread — which you can find here. It worked well, but it was time consuming and for most cases, I don’t want to be messing around with the design side of things.

    image

    As a true software engineer and pythonist, I obtained the Twitter API keys and built a tool that would convert a Twitter thread into a LinkedIn carousel in a matter of seconds.

    And as usual, I open sourced it: https://github.com/DidierRLopes/thread-to-carousel.

    This tool is far from perfect, and a lot can be improved on the design side of things to: Recognize emojis; Highlight mentions; Change the size of the box based on the text; Better text placement when images attached; Better URL link display.

    The goal for me wasn’t to build a perfect tool, but something easy enough that did the job. And, as the project is open source, I expect to have users contributing to the script so that it can be improved over time.

    Today I run it using:

    python convert2carousel.py https://twitter.com/didier_lopes/status/1581247044228100096

    And the result can be found here.

    image

    Feel free to check the project here and I look forward to having contributors helping me improve it!

    As always, any feedback welcome 🙏🏽

    - - +

    Twitter thread to LinkedIn carousel in python

    · 2 min read


    In this blog post, I share how I built a Python tool that converts a Twitter thread into a LinkedIn carousel in seconds. This tool is open source and contributions for improvements are welcome.

    The open source code is available here.

    As content creators, it would be good if the same content could be utilised across every platform easily. Sometimes you need some tweaks based on audience, but often the same content is used across all platforms.

    I noticed recently that LinkedIn carousels have been picking a lot of traction, and given I have some nice Twitter threads (example) I thought that it would be great if I could convert them into a LinkedIn carousel.

    So, I looked for free tools and didn’t find anything good enough. I ended up using canvas to re-create the thread — which you can find here. It worked well, but it was time consuming and for most cases, I don’t want to be messing around with the design side of things.

    image

    As a true software engineer and pythonist, I obtained the Twitter API keys and built a tool that would convert a Twitter thread into a LinkedIn carousel in a matter of seconds.

    And as usual, I open sourced it: https://github.com/DidierRLopes/thread-to-carousel.

    This tool is far from perfect, and a lot can be improved on the design side of things to: Recognize emojis; Highlight mentions; Change the size of the box based on the text; Better text placement when images attached; Better URL link display.

    The goal for me wasn’t to build a perfect tool, but something easy enough that did the job. And, as the project is open source, I expect to have users contributing to the script so that it can be improved over time.

    Today I run it using:

    python convert2carousel.py https://twitter.com/didier_lopes/status/1581247044228100096

    And the result can be found here.

    image

    Feel free to check the project here and I look forward to having contributors helping me improve it!

    As always, any feedback welcome 🙏🏽

    + + \ No newline at end of file diff --git a/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023/index.html b/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023/index.html index b1f5b17d9f..32a6e212c4 100644 --- a/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023/index.html +++ b/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023/index.html @@ -10,13 +10,13 @@ - - + +
    -

    How to get hired by an exciting tech startup in 2023

    · 6 min read


    The future is a strange place. We’re not entirely sure what it will look like, but we do know that it will be shaped by the choices we make today. And while I can’t tell you exactly how to get a job in 2023, I can help you set yourself up for success by showing you some of the best ways to build your career today.

    Everyone is doing the same hacker tests. Being good at interviews will no longer suffice to get a job in top tech company. Conventional CVs are too boring. Recruiters may like what they read, but this doesn’t make them think any further about a person and think “wow, we really need someone like them”.

    Ultimately, a CV cannot demonstrate creativity and in my opinion, to be a top engineer you need to be creative. Often there isn’t an easy straightforward solution and being creative is what distinguishes top tier engineers from medium. I wrote a post about this here.

    Below I will let you know my views on what I would do to get a job at an exciting tech startup.

    Work on open source projects

    Open source is a great way to build your skills and get your name out there. It’s also a great way to make connections with other developers, which can lead to referrals and job opportunities. If you want to show that you’re a good engineer, open source is an excellent opportunity. This is because it allows you to demonstrate your problem-solving abilities, while also improving the codebase of a project that is potentially used by thousands of users — and because the project is open source, it never dies.

    But which open source projects should you choose?

    I’d say that there are two routes that you can take here. You can select the project based on your own use case or you can be strategic about it.

    Own use case

    Don’t overthink it. The world of software is built on top of open source. If it weren’t for open source, we would be living in the year 2000 or less. This means that your favorite apps are relying on open source projects, which you can be a part of!

    This means that you can:

    • Contribute to an open source library that is used by a project that you like. E.g. someone from our team is a cpython contributor.
    • Contribute to a product that you use that is Open Source. The advantage here is that you are able to literally customize the product that you are using.

    With Red Hat in the 90s this open source movement is starting to be a very hot topic. Joseph Jacks from OSS Capital is one of the best investors (if not the best) in this space. The chart below that he put together illustrates well the growth of open source (shared in this tweet)

    image

    Strategic

    If you’re reading this, there’s a good chance that you want to make a positive impact on the future of technology. If so, it can be helpful to consider how your work will affect the lives of others. Take some time and think about what kind of role you would like to play in shaping those futures — are you someone who wants to improve people’s physical well-being through health innovations? Or maybe achieve more efficient energy use through new technologies? This will help determine which companies or projects might be best suited for any given career path.

    Once you figure out what motivates you, select an industry where you wish to find a job.

    Then there are multiple paths that you can take:

    • Look into the signals provided by top venture capital firms in that selected industry. I.e. see what open source companies are being backed in that space.
    • Look into the developer engagement around the open source projects in that industry. You can not only use GitHub stars and forks, but you can use tools such as https://analyzemyrepo.com or https://ossinsight.io/
    • Cold email VCs to ask them about which open source products they are excited about. I say VCs because often their job is to find these startups early, so usually they have more recent information. But talking with devs or listening to people that you respect in the industry is equally valid.

    Note: By being an early contributor of a promising open source startup, you can become a core maintainer of a project and even make it to the founding team. This is how I met James, OpenBB’s co-founder. He was an active developer in my own open source project, and I invited him to be part of the main maintainers of the project. When we built a company, he became a founding member.

    Develop your own open source project

    I strongly believe that being able to successfully build your own open source project is severely underrated. There are so many components that you need to get right from so many departments that it shows a lot about your strengths as an individual and a preview of the value you could add to the team.

    You may think that the only thing that you are demonstrating is your ability to write high-quality code since it will be open to the public. Well that’s wrong. Here is a non-exhaustive list of skills that you show off

    • Solution to a real-world problem
    • Design around the product
    • User experience
    • How you prioritize task and how fast you can ship high-quality code
    • Interaction with others
    • Marketing
    • Listening to feedback from users

    This is what I did with OpenBB Terminal: https://github.com/OpenBB-finance/OpenBBTerminal and it has single handedly changed my life.

    Conclusion

    If you’re looking for a job in 2023, the best thing you can do is to contribute to/develop open source projects.

    You should be aware that you can also add value to an open source project by reporting bugs. You can even do more than just report a bug, but suggest a solution or workaround for the problem — this shows that not only are you paying attention to what’s going on around you, but also that you have some ideas about how things could be improved — a combination that any hiring manager would love!

    I hope you found this post insightful.

    Any feedback is welcome.

    - - +

    How to get hired by an exciting tech startup in 2023

    · 6 min read


    The future is a strange place. We’re not entirely sure what it will look like, but we do know that it will be shaped by the choices we make today. And while I can’t tell you exactly how to get a job in 2023, I can help you set yourself up for success by showing you some of the best ways to build your career today.

    Everyone is doing the same hacker tests. Being good at interviews will no longer suffice to get a job in top tech company. Conventional CVs are too boring. Recruiters may like what they read, but this doesn’t make them think any further about a person and think “wow, we really need someone like them”.

    Ultimately, a CV cannot demonstrate creativity and in my opinion, to be a top engineer you need to be creative. Often there isn’t an easy straightforward solution and being creative is what distinguishes top tier engineers from medium. I wrote a post about this here.

    Below I will let you know my views on what I would do to get a job at an exciting tech startup.

    Work on open source projects

    Open source is a great way to build your skills and get your name out there. It’s also a great way to make connections with other developers, which can lead to referrals and job opportunities. If you want to show that you’re a good engineer, open source is an excellent opportunity. This is because it allows you to demonstrate your problem-solving abilities, while also improving the codebase of a project that is potentially used by thousands of users — and because the project is open source, it never dies.

    But which open source projects should you choose?

    I’d say that there are two routes that you can take here. You can select the project based on your own use case or you can be strategic about it.

    Own use case

    Don’t overthink it. The world of software is built on top of open source. If it weren’t for open source, we would be living in the year 2000 or less. This means that your favorite apps are relying on open source projects, which you can be a part of!

    This means that you can:

    • Contribute to an open source library that is used by a project that you like. E.g. someone from our team is a cpython contributor.
    • Contribute to a product that you use that is Open Source. The advantage here is that you are able to literally customize the product that you are using.

    With Red Hat in the 90s this open source movement is starting to be a very hot topic. Joseph Jacks from OSS Capital is one of the best investors (if not the best) in this space. The chart below that he put together illustrates well the growth of open source (shared in this tweet)

    image

    Strategic

    If you’re reading this, there’s a good chance that you want to make a positive impact on the future of technology. If so, it can be helpful to consider how your work will affect the lives of others. Take some time and think about what kind of role you would like to play in shaping those futures — are you someone who wants to improve people’s physical well-being through health innovations? Or maybe achieve more efficient energy use through new technologies? This will help determine which companies or projects might be best suited for any given career path.

    Once you figure out what motivates you, select an industry where you wish to find a job.

    Then there are multiple paths that you can take:

    • Look into the signals provided by top venture capital firms in that selected industry. I.e. see what open source companies are being backed in that space.
    • Look into the developer engagement around the open source projects in that industry. You can not only use GitHub stars and forks, but you can use tools such as https://analyzemyrepo.com or https://ossinsight.io/
    • Cold email VCs to ask them about which open source products they are excited about. I say VCs because often their job is to find these startups early, so usually they have more recent information. But talking with devs or listening to people that you respect in the industry is equally valid.

    Note: By being an early contributor of a promising open source startup, you can become a core maintainer of a project and even make it to the founding team. This is how I met James, OpenBB’s co-founder. He was an active developer in my own open source project, and I invited him to be part of the main maintainers of the project. When we built a company, he became a founding member.

    Develop your own open source project

    I strongly believe that being able to successfully build your own open source project is severely underrated. There are so many components that you need to get right from so many departments that it shows a lot about your strengths as an individual and a preview of the value you could add to the team.

    You may think that the only thing that you are demonstrating is your ability to write high-quality code since it will be open to the public. Well that’s wrong. Here is a non-exhaustive list of skills that you show off

    • Solution to a real-world problem
    • Design around the product
    • User experience
    • How you prioritize task and how fast you can ship high-quality code
    • Interaction with others
    • Marketing
    • Listening to feedback from users

    This is what I did with OpenBB Terminal: https://github.com/OpenBB-finance/OpenBBTerminal and it has single handedly changed my life.

    Conclusion

    If you’re looking for a job in 2023, the best thing you can do is to contribute to/develop open source projects.

    You should be aware that you can also add value to an open source project by reporting bugs. You can even do more than just report a bug, but suggest a solution or workaround for the problem — this shows that not only are you paying attention to what’s going on around you, but also that you have some ideas about how things could be improved — a combination that any hiring manager would love!

    I hope you found this post insightful.

    Any feedback is welcome.

    + + \ No newline at end of file diff --git a/blog/how-to-grow-your-open-source-community-from-scratch.md/index.html b/blog/how-to-grow-your-open-source-community-from-scratch.md/index.html index dbf907cf57..c363740a4d 100644 --- a/blog/how-to-grow-your-open-source-community-from-scratch.md/index.html +++ b/blog/how-to-grow-your-open-source-community-from-scratch.md/index.html @@ -10,13 +10,13 @@ - - + +
    -

    How to grow your open source community from scratch

    · 4 min read


    Growing an open source community from scratch is a challenging task. This blogpost shares insights and strategies on how to effectively build and manage an open source community, using the example of the OpenBB Terminal project.

    Project naming

    The name should be short, memorable, unique and related with the project.

    When I started what we call OpenBB Terminal today, the name of the project was “Stock Market Bot” or something silly like that. I knew that wouldn’t be the last name, but I didn’t have any inspiration and in the meantime I was focused on building the platform.

    I am an Elon Musk fan, and was a GameStop investor. This meant that once I saw this tweet — I didn’t blink twice and knew this was the name I was waiting for.

    image

    That’s when Gamestonk Terminal (now OpenBB Terminal) was born.

    Keep the project private until MVP

    • There will be less pressure than building in public, and you will be able to iterate much faster.
    • No users asking for features or reporting bugs when MVP is still under development.
    • Most importantly, this guarantees that when the users see the MVP they know where you are heading with the project.

    I worked on Gamestonk Terminal for 2 months on my own. The code architecture changed several times as I was in this experimental phase. And if you look into the source code I even committed API keys accidentally. But I had no pressure, so I was able to ship extremely fast.

    Prepare to onboard the community

    • Make the documentation standout (not only “getting started” but also “contributing”).
    • Create “quick win” tickets that the community can address quickly.
    • Start a group channel on Discord or Slack, which allows you to interact with contributors and discuss features / roadmap and keep them engaged.
    • Mention “starring” the project. As simple as this sounds, this helps with growth as its easy to forget to star the project, even though you were interested in what you saw.

    Some people from our current team told me recently that they fell in love with the README of the project the first time they saw it. In particular with this quote:

    “Gamestonk Terminal is an awesome stock and crypto market terminal that has been developed for fun, while I saw my GME shares tanking. But hey, I like the stock.”


    This allowed me to gain not only contributors, but maintainers. And nowadays, team members.

    Change the project visibility to public

    • This allows everyone to have a first look into the project, it’s the “Hello World” moment.
    • When sharing the project, describe the problem you are trying to solve and make sure your audience relates with that problem.
    • Share your project on relevant channels (e.g. Reddit, HackerNews, ProductHunt) — where your audience is.

    I have been building in open source for a while, without much success. Until Gamestonk Terminal.

    The difference? I shared Gamestonk Terminal on:

    • Reddit r/SuperStonk — where the retail traders with the same issue as me were gathered
    • Reddit r/python — where the community shares projects built in python
    • HackerNews — where I leveraged the name of a known brand in the same industry and insinuated that my tool was similar but affordable. The title was: “Can’t afford Bloomberg Terminal? No prob, I built the next best thing”.

    Keep developing in public

    • Keep the community updated on the roadmap and progress. You can do this by doing demos of what you have accomplished as you add new features (e.g. on YouTube or on Twitter) which allows the community to understand what sort of tasks you are working on, and what they would learn if they were to contribute. It basically gives the community a hindsight into what a contributor will be able to work on / achieve.
    • Get early feedback and prioritise accordingly.
    • Occasionally go back to the same channels (e.g. Reddit, Hackernews) to report progress. This guarantees that they know the project is not dead and helps your project staying relevant and on their minds.
    • Develop in public through livestreams (e.g. live Coding) or by sharing what you are working on through social media (e.g. adding a futures menu).

    TL;DR: On how to grow your open source project:

    • Project naming
    • Keep project private until MVP
    • Prepare to onboard the community
    • Change the project visibility to public
    • Keep developing in public
    - - +

    How to grow your open source community from scratch

    · 4 min read


    Growing an open source community from scratch is a challenging task. This blogpost shares insights and strategies on how to effectively build and manage an open source community, using the example of the OpenBB Terminal project.

    Project naming

    The name should be short, memorable, unique and related with the project.

    When I started what we call OpenBB Terminal today, the name of the project was “Stock Market Bot” or something silly like that. I knew that wouldn’t be the last name, but I didn’t have any inspiration and in the meantime I was focused on building the platform.

    I am an Elon Musk fan, and was a GameStop investor. This meant that once I saw this tweet — I didn’t blink twice and knew this was the name I was waiting for.

    image

    That’s when Gamestonk Terminal (now OpenBB Terminal) was born.

    Keep the project private until MVP

    • There will be less pressure than building in public, and you will be able to iterate much faster.
    • No users asking for features or reporting bugs when MVP is still under development.
    • Most importantly, this guarantees that when the users see the MVP they know where you are heading with the project.

    I worked on Gamestonk Terminal for 2 months on my own. The code architecture changed several times as I was in this experimental phase. And if you look into the source code I even committed API keys accidentally. But I had no pressure, so I was able to ship extremely fast.

    Prepare to onboard the community

    • Make the documentation standout (not only “getting started” but also “contributing”).
    • Create “quick win” tickets that the community can address quickly.
    • Start a group channel on Discord or Slack, which allows you to interact with contributors and discuss features / roadmap and keep them engaged.
    • Mention “starring” the project. As simple as this sounds, this helps with growth as its easy to forget to star the project, even though you were interested in what you saw.

    Some people from our current team told me recently that they fell in love with the README of the project the first time they saw it. In particular with this quote:

    “Gamestonk Terminal is an awesome stock and crypto market terminal that has been developed for fun, while I saw my GME shares tanking. But hey, I like the stock.”


    This allowed me to gain not only contributors, but maintainers. And nowadays, team members.

    Change the project visibility to public

    • This allows everyone to have a first look into the project, it’s the “Hello World” moment.
    • When sharing the project, describe the problem you are trying to solve and make sure your audience relates with that problem.
    • Share your project on relevant channels (e.g. Reddit, HackerNews, ProductHunt) — where your audience is.

    I have been building in open source for a while, without much success. Until Gamestonk Terminal.

    The difference? I shared Gamestonk Terminal on:

    • Reddit r/SuperStonk — where the retail traders with the same issue as me were gathered
    • Reddit r/python — where the community shares projects built in python
    • HackerNews — where I leveraged the name of a known brand in the same industry and insinuated that my tool was similar but affordable. The title was: “Can’t afford Bloomberg Terminal? No prob, I built the next best thing”.

    Keep developing in public

    • Keep the community updated on the roadmap and progress. You can do this by doing demos of what you have accomplished as you add new features (e.g. on YouTube or on Twitter) which allows the community to understand what sort of tasks you are working on, and what they would learn if they were to contribute. It basically gives the community a hindsight into what a contributor will be able to work on / achieve.
    • Get early feedback and prioritise accordingly.
    • Occasionally go back to the same channels (e.g. Reddit, Hackernews) to report progress. This guarantees that they know the project is not dead and helps your project staying relevant and on their minds.
    • Develop in public through livestreams (e.g. live Coding) or by sharing what you are working on through social media (e.g. adding a futures menu).

    TL;DR: On how to grow your open source project:

    • Project naming
    • Keep project private until MVP
    • Prepare to onboard the community
    • Change the project visibility to public
    • Keep developing in public
    + + \ No newline at end of file diff --git a/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley/index.html b/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley/index.html index b094aa2993..a0297cad22 100644 --- a/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley/index.html +++ b/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valley/index.html @@ -10,14 +10,14 @@ - - + +
    -

    How to handle equity at a seed-stage startup from Silicon Valley

    · 6 min read


    A step-by-step guide on how to handle equity at a seed-stage startup, using a fictional example from OpenBB.

    As a startup founder and CEO, you need to wear multiple hats, from engineering and product to design, marketing, and even finance.

    Today, I’m going through the details of how we handle equity at OpenBB. This blog post provides a step-by-step guide on the implementation process, including links to relevant spreadsheets that you can reuse for your startup.

    To make this post easier to follow, I will create a purely fictional example.

    John Doe, a software engineer from Portugal, has been contributing to the open source OpenBB Terminal for a few consecutive weeks. He not only fixes bugs but also adds features that the community has requested through pull requests and on Discord. Additionally, he is a fast learner and gets along well with the current team. This sparks the interest of the OpenBB team because having this open-source contributor work with us full-time would be great, rather than being limited by his current full-time job.

    From here, we set up an initial exploratory call to better understand John Doe as an individual — what he is passionate about, why he has contributed to the project, and more. We follow up the call with an interview involving engineers to assess his skills and experience. Finally, he joins a call with me, where I sell the vision of the company and explain why what OpenBB is doing matters. At this point, we extend him an offer. Up until this stage, the recruiting process is standard, except for the fact that we have a “filtered” candidate coming from the open-source community.

    However, as a startup, that offer cannot (or at least should not) consist solely of cash compensation. A startup operates at a much faster pace and is riskier than a company. Therefore, in exchange for hard work and long hours, you should offer part of the company through equity, allowing the employee to benefit from the upside in case the company achieves a successful exit (IPO or sale).

    So, how do we decide on the equity to offer the new hire?

    It’s easy. You follow your company Option Guidelines.

    Option Guidelines

    The Option Guidelines are an Excel spreadsheet approved by the board. In this document, you explicitly create bands (minimum and maximum range options) based on the role and stage of the company. Board approval is crucial as it allows you to extend the offer directly without needing permission from the board since the guidelines have already been approved.

    Here’s what the document looks like:

    image +

    How to handle equity at a seed-stage startup from Silicon Valley

    · 6 min read


    A step-by-step guide on how to handle equity at a seed-stage startup, using a fictional example from OpenBB.

    As a startup founder and CEO, you need to wear multiple hats, from engineering and product to design, marketing, and even finance.

    Today, I’m going through the details of how we handle equity at OpenBB. This blog post provides a step-by-step guide on the implementation process, including links to relevant spreadsheets that you can reuse for your startup.

    To make this post easier to follow, I will create a purely fictional example.

    John Doe, a software engineer from Portugal, has been contributing to the open source OpenBB Terminal for a few consecutive weeks. He not only fixes bugs but also adds features that the community has requested through pull requests and on Discord. Additionally, he is a fast learner and gets along well with the current team. This sparks the interest of the OpenBB team because having this open-source contributor work with us full-time would be great, rather than being limited by his current full-time job.

    From here, we set up an initial exploratory call to better understand John Doe as an individual — what he is passionate about, why he has contributed to the project, and more. We follow up the call with an interview involving engineers to assess his skills and experience. Finally, he joins a call with me, where I sell the vision of the company and explain why what OpenBB is doing matters. At this point, we extend him an offer. Up until this stage, the recruiting process is standard, except for the fact that we have a “filtered” candidate coming from the open-source community.

    However, as a startup, that offer cannot (or at least should not) consist solely of cash compensation. A startup operates at a much faster pace and is riskier than a company. Therefore, in exchange for hard work and long hours, you should offer part of the company through equity, allowing the employee to benefit from the upside in case the company achieves a successful exit (IPO or sale).

    So, how do we decide on the equity to offer the new hire?

    It’s easy. You follow your company Option Guidelines.

    Option Guidelines

    The Option Guidelines are an Excel spreadsheet approved by the board. In this document, you explicitly create bands (minimum and maximum range options) based on the role and stage of the company. Board approval is crucial as it allows you to extend the offer directly without needing permission from the board since the guidelines have already been approved.

    Here’s what the document looks like:

    image The total number of shares is random and not representative of OpenBB.

    First, you need to ask yourself what roles your company envisions needing. Within those roles, there are two things to consider:

    • Departments: You may differentiate between Engineering, Marketing, Operations, Sales, Finance, and HR/Admin. You can also add others such as Design, Product, etc. Note that having different departments does not necessarily mean you need different band structures.

    • Titles: You’ll want to be able to “compare” individuals based on their contributions. For instance, Vice President, Director, Manager, Senior Individual Contributor, and Individual Contributor. Note that if you have fewer titles, the bands should be wider to differentiate individuals with the same title. If you add five levels of Individual Contributors, you’ll want narrower bands.

      I recommend starting with fewer titles, KISS: keep it simple stupid. Again, having different levels does not necessarily mean the bands need to be mutually exclusive. A Manager does not necessarily have a higher band than a Senior Individual Contributor; this depends on your own company culture.

    Next, you need to differentiate between company stages. This allows you to distinguish employees who join very early when the startup carries the most risk. We distinguish between three stages: Pre-production revenue, Pre-profit with production revenue, and Profitable.

    Once all these categories are completed, you should have a similar table to the one shared above. Now, it’s important to fill in the equity percentage. For privacy reasons, I will not provide the specific values for OpenBB but will create a random example.

    Let’s imagine that OpenBB Charter has a total of 1 million shares (assuming only one class of stock for simplicity). If our priced round values the company at $10 million, this means that each share is valued at $10.

    On the top left of the document, we will insert the number of shares, which is 1,000,000. Then, we adjust the % LOW and % HIGH columns, representing the range of company ownership we want to grant to this individual.

    Let’s go through a fake example for the SW role:

    image

    The column “Low Shrs” is computed by multiplying the % LOW by the total number of shares. On the other hand, the column “High Shrs” is computed by multiplying the % HIGH by the total number of shares. This value is important as it represents the amount stipulated in the contract.

    Let’s consider a scenario where the company is in the Pre-Profit stage with Production Revenue, and we want to hire an Engineering IC. Based on our assessment of their skillset and fairness in comparison to other team members, we would offer a contract that vests over time between 1000 and 2000 shares.

    image

    Next, you need to decide on the vesting calendar that the company supports. The most common option is a 4-year vesting schedule with a 1-year cliff. This means that while you begin vesting during your first year, you need to stay with the company for the entire year to be able to exercise those options. The 1-year cliff protects the company from employees leaving early or underperforming.

    Carta provides a good explanation on how stock options work here — which I recommend to everyone.

    Please note that in theory, while the value of these options is $10 per share, the startup will need to conduct a 409a valuation to determine the fair market value of each option, which is likely to be much lower than the initial price, such as $1 per share. And this is the strike price that employees will need to pay to exercise the shares.

    Note: when selecting the number of shares, use a number that is divisible by the number of months that the employee is vesting, e.g., for a 4-year vesting period that would be 48 (4 x 12), which ensures that employees get the same amount of shares each month, and there’s no need to account for floating numbers.

    This is it for today.

    In Part II, I will talk about how you can handle equity top-ups.

    So follow me if you want to learn more about what that process may look like.

    - - + + \ No newline at end of file diff --git a/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startup/index.html b/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startup/index.html index d0957276c5..5a86a1a844 100644 --- a/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startup/index.html +++ b/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startup/index.html @@ -10,13 +10,13 @@ - - + +
    -

    How to handle equity top-ups at a seed stage startup

    · 8 min read


    In this post, we discuss how to handle equity top-ups at a seed stage startup, providing a step-by-step guide on the implementation process and including links to relevant spreadsheets.

    Previously, I shared how we handle equity at OpenBB in this post.

    This blog post will continue that discussion and go over how we approach equity top-ups at OpenBB. It will provide a step-by-step guide on the implementation process and include links to relevant spreadsheets that you can use for your own startup.

    I will continue using the purely fictional example that I introduced in the previous blog post with John Doe.

    Let’s imagine that John Doe was indeed the right candidate for OpenBB, and on June 15, 2021, he was hired and accepted an offer with 2000 options vesting over the next 4 years with a 1-year cliff. For simplicity, let’s assume that he will vest the 2000 shares by July 1, 2025 (ignoring the additional 2 weeks).

    This means that by the end of June 2022, John will have vested 542 shares (13 x 2000 / 48), and for every following month, he will vest 42 shares per month. Note that we only start showing the shares from June 2022 because before that, he was in his cliff period.

    image

    If you do this calculation, you’ll see that it adds up to 2022, whereas John was only granted 2000 shares. This is normal and is due to rounding, thus the shares associated with the last month are updated so that it matches the offer.

    image

    If any of the following situations arise:

    1. The initial assessment of the candidate was wrong, and they are not an IC but a Sr. IC.
    2. The employee has exceeded expectations, and their equity no longer reflects the value they bring to the company.
    3. The employee has other job offers, and you want to reinforce that they are an owner of the company and that their success is important.
    4. The employee’s vesting period is coming to an end, and they are considering leaving as they joined the company for the potential upside of an exit.

    One option you have is to increase cash compensation. However, offering equity (ownership) is often a better option, especially for startups with limited cash resources.

    In these situations, you need to consider an equity top-up. This means offering the employee a new equity grant on top of the shares they are currently vesting. There are multiple types of equity grants, but I will focus on the approach we use at OpenBB and explain how you can implement it as well.

    First, determine how many additional shares you want to grant to the individual and, more importantly, how many shares would be fair for them to vest each month. The former helps determine their stake in the company, while the latter helps assess their value compared to other team members.

    In our case, let’s assume it’s February 2023, and John has been with the company for 20 months. We want to reward his contributions and bet on his future at the company, so we decide to grant him an additional 1,500 shares on top of his existing 2,000 shares.

    In theory, some companies start a new 4-year vesting period with a 1-year cliff for the second grant. However, the issue with that approach is that the employee will start vesting two grants simultaneously: 2000/48 + 1500/48 shares per month. Once the first grant is fully vested, they will vest a lower amount of shares per month: 1500/48. This means the employee would have less incentive to stay when only the second grant is being executed.

    To address this, we ensure that for the next 4 years from the vesting commencement date (VCD) of the second grant, the employee vests the same number of shares each month.

    How can we do that?

    Manual

    Here is the information we have:

    • 1st option grant VCD: 15 June 2021
    • 1st option grant shares: 2,000
    • 1st option grant schedule: 1/48 per month with 1 year cliff finishing on 30 June 2025

    From here, we infer that in February 2023, John is vesting 42 shares per month and has already vested 542 shares (after the 1-year cliff) + 294 shares (7 x 42).

    Now, let’s discuss the decisions we need to make for the second option grant:

    • 2nd option grant VCD: We want to start it ASAP, to retain employee — for instance March 2023
    • 2nd option grant shares: around 1,500
    • 2nd option grant schedule: 1/48 per month finishing on 30 March 2027. Note that we removed the cliff since we know the value the employee brings and that “protection”/”retainer” can be removed.

    By utilizing maths, we can create the following equation:

    image

    By filling in the information that we know, we get:

    image

    And thus we know that we can get the value that makes this happen.

    image

    However, we don’t want to give the employee fractional shares each month, so we select a round number around the one that makes him receive around 1,500 additional shares over the course of 4 years.

    In this case, that number could be 55. This means that the top-up number would be 13 (55–42), except on the last month of vesting for the 1st grant where we need the adjustment.

    When we multiply 55 shares per month for the next 48 months starting in March 2023, that adds up to 2,640.

    However, the employee was awarded 1,500 shares (2nd grant) and still has 27 months (from March 2023 to May 2025) to vest 1st grant shares, which corresponds to a total of 1,122 shares (42 * 26 + 30, remembering the adjustment done for the last month). This total would be 2,622, which obviously is different from the expected 2,640.

    Therefore, we update the value of the number of shares given on the 2nd grant so that John receives 55 shares per month. In this case, for that to happen, the 2nd grant has to have a value of 1,573.

    But obviously, you don’t need to pick up your calculator every time you do this. I mean, what kind of engineer would I be if I didn’t somehow automate this?

    Automated

    The spreadsheet below demonstrates what an employee vesting schedule looks like, and below I will write a step-by-step guide so you can fully customize it to your needs.

    image

    • As a result, E5 will be updated with 11 months afterward to represent the month before the cliff terminates, which consequently leads to the following months being displayed in column E.
    1. Fill in the 1st grant shares in B5
    • As a result, G6 is updated with the total shares from the 1st grants vested after the 1st year. The following rows in column G are automatically updated until the vesting schedule terminates.
    1. Adjust G41 so that the sum of shares in column G match the shares from the 1st grant in B5.

    2. Fill in the top up grant vesting commencement date (VCD) in C6

    • As a result, column H will automatically get populated based on the value that, when added with the cells in column G, returns the value in cell B19.

    • This will also allow us to compute the months that have already been vested from the initial shares in B11 and consequently calculate the overlap between shares coming from the 1st and 2nd grant in B12.

    1. Fill in the top-up grant shares that you are thinking about offering to the employee in B6.
    • As a result, the same computations that were explained earlier in theory will occur. This will result in a recommendation for the top-up shares in B15 and consequently the amount of shares that the employee will vest monthly in B16 so that the amount of top-up grant shares is met.
    1. It is very likely that the number in B16 will not be rounded. Hence, we fill B19 with a rounded version of that number.
    • As a result, column H will be updated so that the total shares (from both grants) in column F matches the selected value in B19.

    When looking at the total top-up shares in H67, that value will no longer match the total top-up shares that we wanted to grant to the employee and that we decided at the beginning in B6. This is because we rounded the value and thus impacted the number of shares necessary to achieve that.

    The amount of shares needed to update the recommendation in B16 to the rounded version in B19 is displayed as an “error” in B21.

    1. In order to fix that, we simply need to update B6 with the sum of B6 and the error value from B21.
    • As a result of this, all the values should now match, and the combined total amount of shares given to the employee in B8 should match the sum of the shares spread across dates in F67. Plus, the error should now be null in cell B21.

    And that’s it.

    I hope you found this useful and are able to use it internally to share with your employees so they understand how the top-ups happen at your startup.

    If you want access to this Excel template, feel free to reach out to me on Twitter or LinkedIn.

    - - +

    How to handle equity top-ups at a seed stage startup

    · 8 min read


    In this post, we discuss how to handle equity top-ups at a seed stage startup, providing a step-by-step guide on the implementation process and including links to relevant spreadsheets.

    Previously, I shared how we handle equity at OpenBB in this post.

    This blog post will continue that discussion and go over how we approach equity top-ups at OpenBB. It will provide a step-by-step guide on the implementation process and include links to relevant spreadsheets that you can use for your own startup.

    I will continue using the purely fictional example that I introduced in the previous blog post with John Doe.

    Let’s imagine that John Doe was indeed the right candidate for OpenBB, and on June 15, 2021, he was hired and accepted an offer with 2000 options vesting over the next 4 years with a 1-year cliff. For simplicity, let’s assume that he will vest the 2000 shares by July 1, 2025 (ignoring the additional 2 weeks).

    This means that by the end of June 2022, John will have vested 542 shares (13 x 2000 / 48), and for every following month, he will vest 42 shares per month. Note that we only start showing the shares from June 2022 because before that, he was in his cliff period.

    image

    If you do this calculation, you’ll see that it adds up to 2022, whereas John was only granted 2000 shares. This is normal and is due to rounding, thus the shares associated with the last month are updated so that it matches the offer.

    image

    If any of the following situations arise:

    1. The initial assessment of the candidate was wrong, and they are not an IC but a Sr. IC.
    2. The employee has exceeded expectations, and their equity no longer reflects the value they bring to the company.
    3. The employee has other job offers, and you want to reinforce that they are an owner of the company and that their success is important.
    4. The employee’s vesting period is coming to an end, and they are considering leaving as they joined the company for the potential upside of an exit.

    One option you have is to increase cash compensation. However, offering equity (ownership) is often a better option, especially for startups with limited cash resources.

    In these situations, you need to consider an equity top-up. This means offering the employee a new equity grant on top of the shares they are currently vesting. There are multiple types of equity grants, but I will focus on the approach we use at OpenBB and explain how you can implement it as well.

    First, determine how many additional shares you want to grant to the individual and, more importantly, how many shares would be fair for them to vest each month. The former helps determine their stake in the company, while the latter helps assess their value compared to other team members.

    In our case, let’s assume it’s February 2023, and John has been with the company for 20 months. We want to reward his contributions and bet on his future at the company, so we decide to grant him an additional 1,500 shares on top of his existing 2,000 shares.

    In theory, some companies start a new 4-year vesting period with a 1-year cliff for the second grant. However, the issue with that approach is that the employee will start vesting two grants simultaneously: 2000/48 + 1500/48 shares per month. Once the first grant is fully vested, they will vest a lower amount of shares per month: 1500/48. This means the employee would have less incentive to stay when only the second grant is being executed.

    To address this, we ensure that for the next 4 years from the vesting commencement date (VCD) of the second grant, the employee vests the same number of shares each month.

    How can we do that?

    Manual

    Here is the information we have:

    • 1st option grant VCD: 15 June 2021
    • 1st option grant shares: 2,000
    • 1st option grant schedule: 1/48 per month with 1 year cliff finishing on 30 June 2025

    From here, we infer that in February 2023, John is vesting 42 shares per month and has already vested 542 shares (after the 1-year cliff) + 294 shares (7 x 42).

    Now, let’s discuss the decisions we need to make for the second option grant:

    • 2nd option grant VCD: We want to start it ASAP, to retain employee — for instance March 2023
    • 2nd option grant shares: around 1,500
    • 2nd option grant schedule: 1/48 per month finishing on 30 March 2027. Note that we removed the cliff since we know the value the employee brings and that “protection”/”retainer” can be removed.

    By utilizing maths, we can create the following equation:

    image

    By filling in the information that we know, we get:

    image

    And thus we know that we can get the value that makes this happen.

    image

    However, we don’t want to give the employee fractional shares each month, so we select a round number around the one that makes him receive around 1,500 additional shares over the course of 4 years.

    In this case, that number could be 55. This means that the top-up number would be 13 (55–42), except on the last month of vesting for the 1st grant where we need the adjustment.

    When we multiply 55 shares per month for the next 48 months starting in March 2023, that adds up to 2,640.

    However, the employee was awarded 1,500 shares (2nd grant) and still has 27 months (from March 2023 to May 2025) to vest 1st grant shares, which corresponds to a total of 1,122 shares (42 * 26 + 30, remembering the adjustment done for the last month). This total would be 2,622, which obviously is different from the expected 2,640.

    Therefore, we update the value of the number of shares given on the 2nd grant so that John receives 55 shares per month. In this case, for that to happen, the 2nd grant has to have a value of 1,573.

    But obviously, you don’t need to pick up your calculator every time you do this. I mean, what kind of engineer would I be if I didn’t somehow automate this?

    Automated

    The spreadsheet below demonstrates what an employee vesting schedule looks like, and below I will write a step-by-step guide so you can fully customize it to your needs.

    image

    • As a result, E5 will be updated with 11 months afterward to represent the month before the cliff terminates, which consequently leads to the following months being displayed in column E.
    1. Fill in the 1st grant shares in B5
    • As a result, G6 is updated with the total shares from the 1st grants vested after the 1st year. The following rows in column G are automatically updated until the vesting schedule terminates.
    1. Adjust G41 so that the sum of shares in column G match the shares from the 1st grant in B5.

    2. Fill in the top up grant vesting commencement date (VCD) in C6

    • As a result, column H will automatically get populated based on the value that, when added with the cells in column G, returns the value in cell B19.

    • This will also allow us to compute the months that have already been vested from the initial shares in B11 and consequently calculate the overlap between shares coming from the 1st and 2nd grant in B12.

    1. Fill in the top-up grant shares that you are thinking about offering to the employee in B6.
    • As a result, the same computations that were explained earlier in theory will occur. This will result in a recommendation for the top-up shares in B15 and consequently the amount of shares that the employee will vest monthly in B16 so that the amount of top-up grant shares is met.
    1. It is very likely that the number in B16 will not be rounded. Hence, we fill B19 with a rounded version of that number.
    • As a result, column H will be updated so that the total shares (from both grants) in column F matches the selected value in B19.

    When looking at the total top-up shares in H67, that value will no longer match the total top-up shares that we wanted to grant to the employee and that we decided at the beginning in B6. This is because we rounded the value and thus impacted the number of shares necessary to achieve that.

    The amount of shares needed to update the recommendation in B16 to the rounded version in B19 is displayed as an “error” in B21.

    1. In order to fix that, we simply need to update B6 with the sum of B6 and the error value from B21.
    • As a result of this, all the values should now match, and the combined total amount of shares given to the employee in B8 should match the sum of the shares spread across dates in F67. Plus, the error should now be null in cell B21.

    And that’s it.

    I hope you found this useful and are able to use it internally to share with your employees so they understand how the top-ups happen at your startup.

    If you want access to this Excel template, feel free to reach out to me on Twitter or LinkedIn.

    + + \ No newline at end of file diff --git a/blog/how-to-learn-10x-faster-than-average/index.html b/blog/how-to-learn-10x-faster-than-average/index.html index 03715a335e..74482d247d 100644 --- a/blog/how-to-learn-10x-faster-than-average/index.html +++ b/blog/how-to-learn-10x-faster-than-average/index.html @@ -10,13 +10,13 @@ - - + +
    -

    How to learn 10x faster than average

    · 3 min read


    Learn how to accelerate your learning process and become 10x faster than average. This blog post provides practical steps to enhance your self-learning abilities and master new skills effectively.

    Everyone is a self learner. But people’s rhythm of self learning can be vastly different.

    Have a good reason to learn this new skill

    What is the main fundamental reason why you want to learn this skill? If you don’t have a one sentence answer, you probably don’t need to learn it.

    University teaches you hundreds of topics that you end up not being good at because you have no interest in it.

    Avoid spending your precious time on developing a skill that you have no interest or purpose in. Avoid trends too for this reason.

    Research and read about the best way to learn the basics

    This should take no longer than one afternoon. Avoid promoted content.

    Usually, you’re able to find a course/book/video that is acclaimed by the community to be the best to get started with.

    So we are looking for the equivalent of “Machine Learning from Andrew Ng” for the skill you want to master.

    Consume the basics like your life depends on it

    This will be the foundation of all your subsequent learning in this new area. Put your phone away, and take notes.

    Revisit those notes, and if necessary go back in time to understand the basics.

    It took me above average time to finish Machine Learning from Andrew Ng.

    However, since this, whenever I learn or even think about AI problems this is now easier because of that laid out work.

    Test your knowledge with a real problem (aka get your hands dirty)

    And no, I don’t mean do an exercise that you find online.

    Define a problem that you can solve with the skills you acquired and work on it.

    Don’t ask for the answer. Don’t Google for the solution, but Google for something that is a current impediment on your solution.

    If you are struggling on formulating the Google prompt, revisit your first notes on the skill.

    Keep learning about the topic

    The getting started foundation will only get you so far. It’s likely that soon you will grow out of that and need to expand your knowledge.

    Don’t jump on this step too early. Make sure your basics are covered before you move on.

    Go back to the real problem you worked on, and see how the new learned skills could be applied for that same problem.

    If those skills aren’t necessarily in that first problem, it’s also a good sign. It’s a sign that you learned not only the skill but when it is and it isn’t used.

    Iterate

    Keep iterating between using this new skill to solve a real problem and learning from courses/videos/books.

    There isn’t a “you made it” badge. But you know you did, once you’re able to look for a specific piece of information on a video/book to fill in the gap for something you needed for your real problem.

    TL;DR on how to learn 10x faster than average

    1. Have a good reason to learn this new skill.
    2. Research and read about the best way to learn the basics.
    3. Consume the basics like your life depended on it.
    4. Test your knowledge with a real problem.
    5. Keep learning about the topic.
    6. Iterate.
    - - +

    How to learn 10x faster than average

    · 3 min read


    Learn how to accelerate your learning process and become 10x faster than average. This blog post provides practical steps to enhance your self-learning abilities and master new skills effectively.

    Everyone is a self learner. But people’s rhythm of self learning can be vastly different.

    Have a good reason to learn this new skill

    What is the main fundamental reason why you want to learn this skill? If you don’t have a one sentence answer, you probably don’t need to learn it.

    University teaches you hundreds of topics that you end up not being good at because you have no interest in it.

    Avoid spending your precious time on developing a skill that you have no interest or purpose in. Avoid trends too for this reason.

    Research and read about the best way to learn the basics

    This should take no longer than one afternoon. Avoid promoted content.

    Usually, you’re able to find a course/book/video that is acclaimed by the community to be the best to get started with.

    So we are looking for the equivalent of “Machine Learning from Andrew Ng” for the skill you want to master.

    Consume the basics like your life depends on it

    This will be the foundation of all your subsequent learning in this new area. Put your phone away, and take notes.

    Revisit those notes, and if necessary go back in time to understand the basics.

    It took me above average time to finish Machine Learning from Andrew Ng.

    However, since this, whenever I learn or even think about AI problems this is now easier because of that laid out work.

    Test your knowledge with a real problem (aka get your hands dirty)

    And no, I don’t mean do an exercise that you find online.

    Define a problem that you can solve with the skills you acquired and work on it.

    Don’t ask for the answer. Don’t Google for the solution, but Google for something that is a current impediment on your solution.

    If you are struggling on formulating the Google prompt, revisit your first notes on the skill.

    Keep learning about the topic

    The getting started foundation will only get you so far. It’s likely that soon you will grow out of that and need to expand your knowledge.

    Don’t jump on this step too early. Make sure your basics are covered before you move on.

    Go back to the real problem you worked on, and see how the new learned skills could be applied for that same problem.

    If those skills aren’t necessarily in that first problem, it’s also a good sign. It’s a sign that you learned not only the skill but when it is and it isn’t used.

    Iterate

    Keep iterating between using this new skill to solve a real problem and learning from courses/videos/books.

    There isn’t a “you made it” badge. But you know you did, once you’re able to look for a specific piece of information on a video/book to fill in the gap for something you needed for your real problem.

    TL;DR on how to learn 10x faster than average

    1. Have a good reason to learn this new skill.
    2. Research and read about the best way to learn the basics.
    3. Consume the basics like your life depended on it.
    4. Test your knowledge with a real problem.
    5. Keep learning about the topic.
    6. Iterate.
    + + \ No newline at end of file diff --git a/blog/how-to-use-openai-to-extract-insights-from-team-survey/index.html b/blog/how-to-use-openai-to-extract-insights-from-team-survey/index.html index 5f2bee7657..8ebedff437 100644 --- a/blog/how-to-use-openai-to-extract-insights-from-team-survey/index.html +++ b/blog/how-to-use-openai-to-extract-insights-from-team-survey/index.html @@ -10,13 +10,13 @@ - - + +
    -

    How to Use OpenAI to Extract Insights from Team Survey

    · 9 min read


    This blog post discusses how to use OpenAI to extract insights from team survey data. It covers the motivation behind the project, the requirements, and the implementation process, including the use of the Slack API and Airtable API for automation.

    The open source code is available here.

    Motivation

    I’ve been wanting to play with the OpenAI API for a while, but I’ve had higher priority tasks. Yesterday, I thought that I could use the day to do this, but I didn’t want to just try it in a notebook. Instead, I wanted to use it in a real project that could save me time.

    Last week, I posted about how at OpenBB we have developed a monthly team survey and automated the process of requesting information through Slack and Airtable. You can find more on that post here.

    image

    This made me think that even though I have access to all this data, which OpenBB has made fully available here, I still have to spend some time looking at the data to extract insights.

    Screenshot 2023-11-24 at 4 39 41 PM

    What if I could automate that analysis using OpenAI? This is what I set out to build, and this post will focus on how I went from idea to implementation.

    Requirements

    I already had a notebook that I used to analyze our Airtable data with our team survey in it. However, that analysis was quite “heavy,” and it was not straightforward to extract insights. Thus, one of the requirements was to use OpenAI to analyze the team survey feedback for the current month and highlight anything worth mentioning.

    Additionally, I wanted to compare the team’s experience to the prior month to understand if we were improving or not, and identify areas for further improvement. Finally, based on these insights, I wanted OpenAI to suggest what OpenBB, as a company, could do to improve our culture.

    To achieve this using an OpenAI model, I could either export the team survey responses from Airtable in CSV and copy-paste them into ChatGPT, or I could automate the data retrieval using the Airtable API. Being an engineer, why would I do something in 5 minutes when I can spend 1 day automating it? 🤣

    Lastly, I didn’t want to run this script and have to copy-paste the output into our Slack group so that everyone on the team could have access to the overall analysis and provide feedback/suggestions. Therefore, I would like to have a Slack integration that sends the output in a specific formatted way to our Slack channel.

    So, the idea is as follows:

    1. Retrieve team feedback responses from Airtable
    2. Extract insights from the team survey data using OpenAI
    3. Send the insights output to the OpenBB Slack channel

    Implementation

    Slack API

    First of all, I went to the Slack API page. There, I created an app named “Employee Voice” and selected the “OpenBB” workspace, as shown below:

    image

    After clicking “Create App” I proceeded to update the display information.

    image

    Then I go into “Incoming Webhooks” and select the channel I’m interested in posting messages to. That should be all the settings you need to configure for your app.

    image

    The webhook URL will be necessary, so I copied it and added it to the following script. For the channel name, I used my personal name, “Didier Lopes”, since I was just testing if it worked. As for the message, I used the infamous “Hello World” text.

    Here is a sample that you can use to test whether you can successfully send yourself a direct message using the Slack API.

        SLACK_WEBHOOK_URL=<Webhook URL mentioned above>

    insight="Hello World"

    payload = {
    'text': insight,
    }

    req = Request(SLACK_WEBHOOK_URL, json.dumps(payload).encode('utf-8'))
    try:
    response = urlopen(req)
    response.read()

    print("SUCCESS: Message with insights sent to slack\n")
    except HTTPError as e:
    print(f"Request failed: {e.code} {e.reason}\n")
    except URLError as e:
    print(f"Server connection failed: {e.reason}\n")

    Airtable API

    At OpenBB, we are using Airtable to automate the monthly team survey questionnaire and store the associated data. I wrote more about that process in this blog.

    Now, I want to have programmatic access to this data.

    Firstly, I need to obtain the Airtable API key, which you can get from the Airtable Developer Hub. Secondly, I navigate to Airtable and locate the table that contains the data of interest, as shown below:

    image

    The name of the table, “OpenBB_monthly”, corresponds to the “TABLE NAME” that will be necessary. Additionally, when you are on this table view, your URL will have the following format: https://airtable.com/XXX. That XXX is your “BASE ID,” which will be the final element necessary to retrieve data from Airtable.

    Next, run the following script to ensure that you have access to this data.

        AIRTABLE_API_KEY=<Located in Airtable Developer Hub>
    AIRTABLE_BASE_ID=<Located in URL when accessing data>
    AIRTABLE_TABLE_NAME="OpenBB_monthly"

    response = requests.get(
    url=f'https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/{AIRTABLE_TABLE_NAME}',
    headers={'Authorization': f'Bearer {AIRTABLE_API_KEY}'}
    )

    Check if the data has been loaded correctly
    if response.status_code == 200:
    data = response.json()["records"]
    else:
    print(f"Error: {response.status_code}")

    print(data)

    OpenAI API

    Finally, go to OpenAI Developer platform and grab your OpenAI API key.

    image

    Once you have that, you are pretty much ready to test whether this works or not. In this case, we assume you have access to the data from Airtable, so you can test if the OpenAI code is set up correctly with the following:

        data_previous_month=<dataframe with raw survey data from previous month>
    data_current_month=<dataframe with raw survey data from current month>
    current_month=<current month date>

    openai.api_key=<Located in OpenAI Developer platform>
    response = openai.ChatCompletion.create(
    model="gpt-4", # you can use a different model
    messages=[
    {"role": "system", "content": "You are a Chief of Staff with a MSc. in Data analysis and are trying to improve the culture of the company."},
    {"role": "user",
    "content":
    f"""
    This table represents the company survey for the previous month: {data_previous_month}

    This table represents the company survey for this month: {data_current_month}.

    Based on this data, can you do 3 things:

    1. Summarize main differences since last month
    2. Summarize main highlights for current month
    3. Create suggestions for what could be done to improve those areas

    Please use the following format for the output:
    As the title use the following: Insights from team survey in {current_month}.
    Follow the title by 2 line breaks.
    Use bullet points within each of the points mentioned above.
    Between the 3 points, use 1 line breaks, a line with ----------------------- and another line break.
    Use `` when referring to a component like `Reward` or `Growth`.
    Do not use asterisks '*' or '**'.
    When referring to to Engineering or Product, Marketing, Design, Finance wrap them around asterisk, e.g. _Engineering_.
    """
    },
    ]
    )

    print(response.choices[0].message.content)

    Glue it together

    Once you have the scripts, merging them is straightforward. I will show you what the input vs. output looks like.

    Here is OpenBB’s team survey data from June of 2023:

    image

    If I run the script here, as shown below (yes, you guessed it right — I open-sourced this project as usual. I hope you and your team find it useful):

        $ python extract_insights_from_last_team_survey.py

    This is the expected output if the script runs successfully.

        Loading environment variables...
    Loading team survey data from Airtable...
    Processing data from Airtable...
    Extracting insights from team survey data...
    Sending insights to Slack through a message...
    SUCCESS: Message with insights sent to slack

    image

    Automate with GitHub workflow

    We’re almost there! It doesn’t make sense for us to manually run this script every month. Plus, software engineers are known for their laziness (which is actually a virtue of a great programmer), so let’s create a GitHub action to automate this process.

    To begin, create a file called “main.yml” in the “.github/workflows” directory.

    This workflow will be divided into three main sections:

    When

    Specifies when this GitHub action should run.

        on:
    push:
    branches:
    - main
    schedule:
    - cron: '0 0 3 * *'

    The first section, “on: push: branches: [main]” means that whenever there is a code push to the “main” branch, this workflow will be triggered. This feature allows us to quickly test whether the action is functioning as expected.

    The “schedule-cron” makes it so that the yaml gets run at a specific dates and times.

    Secrets

    What do we need in advance for this to work?

        env:
    SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
    OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
    AIRTABLE_API_KEY: ${{ secrets.AIRTABLE_API_KEY }}
    AIRTABLE_BASE_ID: ${{ secrets.AIRTABLE_BASE_ID }}
    AIRTABLE_TABLE_NAME: ${{ secrets.AIRTABLE_TABLE_NAME }}

    All of these variables need to be set as action secrets. You can do this by selecting the “Settings” tab above, then going into “Scripts and variables,” and selecting “New repository secret.” Fill in the information accordingly, as shown below:

    image

    Workflow

    What commands are we running with this GitHub action? In our case, these are the ones we are interested in.

        jobs:
    build:
    runs-on: ubuntu-latest

    steps:
    - name: checkout repo content
    uses: actions/checkout@v2

    - name: setup python
    uses: actions/setup-python@v2
    with:
    python-version: 3.9

    - name: install python packages
    run: |
    python -m pip install --upgrade pip
    pip install python-dotenv
    pip install pandas
    pip install openai

    - name: extract insights from team feedback
    run: |
    python extract_insights_from_last_team_survey.py

    And that’s it! You now have a complete automation pipeline from employee feedback to insights within seconds.

    I hope you enjoyed reading this post, and I would love to hear your feedback. Do you appreciate the level of technical detail I go into, or would you prefer less?

    Any comments are very helpful. Thank you!

    - - +

    How to Use OpenAI to Extract Insights from Team Survey

    · 9 min read


    This blog post discusses how to use OpenAI to extract insights from team survey data. It covers the motivation behind the project, the requirements, and the implementation process, including the use of the Slack API and Airtable API for automation.

    The open source code is available here.

    Motivation

    I’ve been wanting to play with the OpenAI API for a while, but I’ve had higher priority tasks. Yesterday, I thought that I could use the day to do this, but I didn’t want to just try it in a notebook. Instead, I wanted to use it in a real project that could save me time.

    Last week, I posted about how at OpenBB we have developed a monthly team survey and automated the process of requesting information through Slack and Airtable. You can find more on that post here.

    image

    This made me think that even though I have access to all this data, which OpenBB has made fully available here, I still have to spend some time looking at the data to extract insights.

    Screenshot 2023-11-24 at 4 39 41 PM

    What if I could automate that analysis using OpenAI? This is what I set out to build, and this post will focus on how I went from idea to implementation.

    Requirements

    I already had a notebook that I used to analyze our Airtable data with our team survey in it. However, that analysis was quite “heavy,” and it was not straightforward to extract insights. Thus, one of the requirements was to use OpenAI to analyze the team survey feedback for the current month and highlight anything worth mentioning.

    Additionally, I wanted to compare the team’s experience to the prior month to understand if we were improving or not, and identify areas for further improvement. Finally, based on these insights, I wanted OpenAI to suggest what OpenBB, as a company, could do to improve our culture.

    To achieve this using an OpenAI model, I could either export the team survey responses from Airtable in CSV and copy-paste them into ChatGPT, or I could automate the data retrieval using the Airtable API. Being an engineer, why would I do something in 5 minutes when I can spend 1 day automating it? 🤣

    Lastly, I didn’t want to run this script and have to copy-paste the output into our Slack group so that everyone on the team could have access to the overall analysis and provide feedback/suggestions. Therefore, I would like to have a Slack integration that sends the output in a specific formatted way to our Slack channel.

    So, the idea is as follows:

    1. Retrieve team feedback responses from Airtable
    2. Extract insights from the team survey data using OpenAI
    3. Send the insights output to the OpenBB Slack channel

    Implementation

    Slack API

    First of all, I went to the Slack API page. There, I created an app named “Employee Voice” and selected the “OpenBB” workspace, as shown below:

    image

    After clicking “Create App” I proceeded to update the display information.

    image

    Then I go into “Incoming Webhooks” and select the channel I’m interested in posting messages to. That should be all the settings you need to configure for your app.

    image

    The webhook URL will be necessary, so I copied it and added it to the following script. For the channel name, I used my personal name, “Didier Lopes”, since I was just testing if it worked. As for the message, I used the infamous “Hello World” text.

    Here is a sample that you can use to test whether you can successfully send yourself a direct message using the Slack API.

        SLACK_WEBHOOK_URL=<Webhook URL mentioned above>

    insight="Hello World"

    payload = {
    'text': insight,
    }

    req = Request(SLACK_WEBHOOK_URL, json.dumps(payload).encode('utf-8'))
    try:
    response = urlopen(req)
    response.read()

    print("SUCCESS: Message with insights sent to slack\n")
    except HTTPError as e:
    print(f"Request failed: {e.code} {e.reason}\n")
    except URLError as e:
    print(f"Server connection failed: {e.reason}\n")

    Airtable API

    At OpenBB, we are using Airtable to automate the monthly team survey questionnaire and store the associated data. I wrote more about that process in this blog.

    Now, I want to have programmatic access to this data.

    Firstly, I need to obtain the Airtable API key, which you can get from the Airtable Developer Hub. Secondly, I navigate to Airtable and locate the table that contains the data of interest, as shown below:

    image

    The name of the table, “OpenBB_monthly”, corresponds to the “TABLE NAME” that will be necessary. Additionally, when you are on this table view, your URL will have the following format: https://airtable.com/XXX. That XXX is your “BASE ID,” which will be the final element necessary to retrieve data from Airtable.

    Next, run the following script to ensure that you have access to this data.

        AIRTABLE_API_KEY=<Located in Airtable Developer Hub>
    AIRTABLE_BASE_ID=<Located in URL when accessing data>
    AIRTABLE_TABLE_NAME="OpenBB_monthly"

    response = requests.get(
    url=f'https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/{AIRTABLE_TABLE_NAME}',
    headers={'Authorization': f'Bearer {AIRTABLE_API_KEY}'}
    )

    Check if the data has been loaded correctly
    if response.status_code == 200:
    data = response.json()["records"]
    else:
    print(f"Error: {response.status_code}")

    print(data)

    OpenAI API

    Finally, go to OpenAI Developer platform and grab your OpenAI API key.

    image

    Once you have that, you are pretty much ready to test whether this works or not. In this case, we assume you have access to the data from Airtable, so you can test if the OpenAI code is set up correctly with the following:

        data_previous_month=<dataframe with raw survey data from previous month>
    data_current_month=<dataframe with raw survey data from current month>
    current_month=<current month date>

    openai.api_key=<Located in OpenAI Developer platform>
    response = openai.ChatCompletion.create(
    model="gpt-4", # you can use a different model
    messages=[
    {"role": "system", "content": "You are a Chief of Staff with a MSc. in Data analysis and are trying to improve the culture of the company."},
    {"role": "user",
    "content":
    f"""
    This table represents the company survey for the previous month: {data_previous_month}

    This table represents the company survey for this month: {data_current_month}.

    Based on this data, can you do 3 things:

    1. Summarize main differences since last month
    2. Summarize main highlights for current month
    3. Create suggestions for what could be done to improve those areas

    Please use the following format for the output:
    As the title use the following: Insights from team survey in {current_month}.
    Follow the title by 2 line breaks.
    Use bullet points within each of the points mentioned above.
    Between the 3 points, use 1 line breaks, a line with ----------------------- and another line break.
    Use `` when referring to a component like `Reward` or `Growth`.
    Do not use asterisks '*' or '**'.
    When referring to to Engineering or Product, Marketing, Design, Finance wrap them around asterisk, e.g. _Engineering_.
    """
    },
    ]
    )

    print(response.choices[0].message.content)

    Glue it together

    Once you have the scripts, merging them is straightforward. I will show you what the input vs. output looks like.

    Here is OpenBB’s team survey data from June of 2023:

    image

    If I run the script here, as shown below (yes, you guessed it right — I open-sourced this project as usual. I hope you and your team find it useful):

        $ python extract_insights_from_last_team_survey.py

    This is the expected output if the script runs successfully.

        Loading environment variables...
    Loading team survey data from Airtable...
    Processing data from Airtable...
    Extracting insights from team survey data...
    Sending insights to Slack through a message...
    SUCCESS: Message with insights sent to slack

    image

    Automate with GitHub workflow

    We’re almost there! It doesn’t make sense for us to manually run this script every month. Plus, software engineers are known for their laziness (which is actually a virtue of a great programmer), so let’s create a GitHub action to automate this process.

    To begin, create a file called “main.yml” in the “.github/workflows” directory.

    This workflow will be divided into three main sections:

    When

    Specifies when this GitHub action should run.

        on:
    push:
    branches:
    - main
    schedule:
    - cron: '0 0 3 * *'

    The first section, “on: push: branches: [main]” means that whenever there is a code push to the “main” branch, this workflow will be triggered. This feature allows us to quickly test whether the action is functioning as expected.

    The “schedule-cron” makes it so that the yaml gets run at a specific dates and times.

    Secrets

    What do we need in advance for this to work?

        env:
    SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
    OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
    AIRTABLE_API_KEY: ${{ secrets.AIRTABLE_API_KEY }}
    AIRTABLE_BASE_ID: ${{ secrets.AIRTABLE_BASE_ID }}
    AIRTABLE_TABLE_NAME: ${{ secrets.AIRTABLE_TABLE_NAME }}

    All of these variables need to be set as action secrets. You can do this by selecting the “Settings” tab above, then going into “Scripts and variables,” and selecting “New repository secret.” Fill in the information accordingly, as shown below:

    image

    Workflow

    What commands are we running with this GitHub action? In our case, these are the ones we are interested in.

        jobs:
    build:
    runs-on: ubuntu-latest

    steps:
    - name: checkout repo content
    uses: actions/checkout@v2

    - name: setup python
    uses: actions/setup-python@v2
    with:
    python-version: 3.9

    - name: install python packages
    run: |
    python -m pip install --upgrade pip
    pip install python-dotenv
    pip install pandas
    pip install openai

    - name: extract insights from team feedback
    run: |
    python extract_insights_from_last_team_survey.py

    And that’s it! You now have a complete automation pipeline from employee feedback to insights within seconds.

    I hope you enjoyed reading this post, and I would love to hear your feedback. Do you appreciate the level of technical detail I go into, or would you prefer less?

    Any comments are very helpful. Thank you!

    + + \ No newline at end of file diff --git a/blog/hybrid-work-sucks-its-worse-than-remote-and-office/index.html b/blog/hybrid-work-sucks-its-worse-than-remote-and-office/index.html index 29c1f43a2f..be6ef93500 100644 --- a/blog/hybrid-work-sucks-its-worse-than-remote-and-office/index.html +++ b/blog/hybrid-work-sucks-its-worse-than-remote-and-office/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Hybrid work sucks. It’s worse than remote and office.

    · 12 min read


    Hybrid work, a combination of remote and office work, is not as beneficial as it seems. This blog post discusses the pros and cons of remote and office work, and why hybrid work might not be the best solution.

    This is my hot take for 2023, but bear with me.

    Context

    Everyone on Twitter has been actively discussing that “Remote work failed”, e.g. this tweet from David Sacks where he refers to this blogpost, or this tweet from Paul Graham.

    While I’m not going to pose as an expert on the topic, I feel like I’ve experienced enough to have an opinion. My career so far has been:

    • 1 year of office work for a public company
    • 1 year of remote work for a startup, plus a few months of hybrid work for the same startup
    • 2 years of growing OpenBB from 1 to 20 people, all fully remote.

    Let me first go over the advantages and disadvantages of remote and office work, so that I can focus this blog post on why hybrid sucks.

    Remote work

    First of all, let’s be pragmatic — remote works. (Before people comment, of course if you’re a factory worker or similar, this doesn’t apply).

    Advantages

    1. Increased employee retention and satisfaction: Remote work is seen as a desirable perk, improving job satisfaction and retention rates. You can check OpenBB team engagement here.
    2. Expanded talent pool: It allows hiring from a global talent pool, resulting in a more diverse and skilled workforce, particularly in open source, where contributors come from all over the world.
    3. Increased flexibility: Remote work offers employees more control over their schedules, leading to better work-life balance.
    4. Improved productivity: There are fewer distractions and interruptions, which leads to increased productivity.
    5. No commuting: Remote work eliminates the need to travel to the office, saving time, money, and energy.
    6. Cost savings: It reduces expenses for both employees and employers, such as commuting and office-related costs.

    Disadvantages

    1. Limited face-to-face interaction: Remote work reduces in-person collaboration and social connections among colleagues.
    2. Communication challenges: Reliance on digital tools may lead to misunderstandings or misinterpretations. There may also be technical issues or connectivity problems.
    3. Blurred work-life boundaries: Clear separation between work and personal life becomes challenging.
    4. Potential distractions: Remote work environments expose individuals to various distractions.
    5. Challenges with collaboration: Coordinating tasks and scheduling can be more difficult remotely.
    6. Reduced visibility and career advancement opportunities: Remote workers may have limited visibility and access to career growth.

    Conclusion

    Remote works. It’s not for everyone, but it works. It works particularly well when the company culture is built around it. For it to work exceptionally well, it boils down to two main arguments:

    1. A strong leadership is necessary to keep the team aligned, motivated, and to create the company’s culture. This helps mainly with the limited face-to-face interaction, challenges with collaboration, and reduced visibility and career advancement opportunities.
    2. Do not track team members based on time but assess work based on output. Use meritocracy to reward the best team members and let go of low performers early. Remote work is not for everyone, and for those who cannot produce output/value to the company while working remotely, it means they weren’t a good hire in the first place. In my personal opinion, the disadvantages of potential distractions and blurred work-life boundaries come down to the employee and their relationship with remote work, instead of the company.

    Sometimes someone may not be producing as much value as expected, for one reason or another. When you are working remotely, you accept that you will add value to the company, and time is no longer a measure. Thus, the emphasis on output/value becomes much stronger.

    Office Work

    Office also works.

    Advantages

    1. Enhanced company culture: Offices contribute to a shared sense of identity and mission.
    2. Face-to-face collaboration: It allows for immediate interaction, fostering effective teamwork and problem-solving.
    3. Social interaction: Offices provide opportunities for building relationships with coworkers, enhancing camaraderie.
    4. Clear work-life boundaries: Physical office spaces establish separation between work and personal life.
    5. Mentorship and learning: In-person environments facilitate mentorship and hands-on learning.
    6. Improved supervision: Physical presence aids in monitoring performance and providing timely feedback.

    Disadvantages

    1. Commuting and transportation issues: Office work often involves commuting, which can lead to time-consuming and stressful travel, traffic congestion, and transportation expenses.
    2. Lack of flexibility: Office work typically follows a fixed schedule, leaving less room for personal flexibility or adjustments to achieve work-life balance.
    3. Office politics: Office environments can sometimes involve office politics, conflicts, or gossip that can affect productivity and job satisfaction.
    4. High overhead costs: Maintaining physical office spaces can be costly for organizations, including expenses related to rent, utilities, and office supplies.
    5. Limited geographic talent pool: Offices are often location-dependent, which may restrict access to a diverse and global talent pool, potentially limiting the variety of skills and perspectives within a workforce.
    6. Distractions and interruptions: Open office layouts or noisy work environments can lead to frequent interruptions, reducing focus and productivity.

    Conclusion

    Office works. Most workers are used to office work, and there’s a reason why it works so well, because it is easy for both the employee and the employer.

    From the employee standpoint: The routine of waking up, commuting, working for eight hours, commuting back, and then enjoying the evening is straightforward and requires minimal scheduling or organization. The job begins when the employee arrives at the office and ends when they leave. However, it’s important to note that this fixed schedule does not necessarily guarantee peak performance throughout the entire workday.

    For senior engineers, mentorship and learning opportunities may lead to context switching, disrupting deep focused work. What some refer to social interaction, can be perceived as wasting company resources. While supervision can raise the bar for average workers, top performers do not require constant supervision to excel. So if you’re aiming for top performers, perhaps supervision isn’t really necessary at all?

    From the employer standpoint: Leaders and managers may find it easier to have everyone in the office for quick communication and check-ins. However, relying on in-person communication may result in less documentation, which can be challenging for new joiners. Supervision becomes simpler as managers can track attendance and check on employees throughout the day, but this can also lead to time wasted for both the manager and the person being supervised. (Plus even that supervision allowed “A day in a life of” viral TikToks to highlighted inefficiencies).

    In conclusion, I’d say that your average worker will be better in the office, while your top performers will excel further in a remote environment.

    The question is whether you prefer your top engineers to become 10x more productive working remotely or prefer your average engineers to improve performance by 2x. Personally, I prefer to aim for 10x productivity with top engineers and let go of average ones.

    Hybrid Work

    Ok, now that we’ve discussed remote and office work, let’s go over why hybrid work sucks.

    People in general tend to associate hybrid work with the best of remote and the best of office, but I think that the worst of remote and office have more emphasis. Let’s go over the biggest pain points:

    1. Decreased productivity: When compared with remote or office, hybrid has lower productivity. This is due to the context switching associated with changing working environments. Personally, I have experienced this and found it frustrating to work until late at night, packing up and thinking about what I needed to carry for the next day, plus commuting. The next day, it took me much longer to get back into the flow of work compared to waking up and immediately continuing with the problem at hand.
    2. Decreased flexibility: Hybrid work offers less flexibility than remote work but somewhat more than office work. However, this flexibility is often constrained by company policies, such as designated office and remote days or specific rules regarding remote work. When the company dictates the days employees can work remotely, the flexibility becomes somewhat artificial.
    3. Communication challenges: As mentioned earlier, one of the reasons that office communication is a sword of 2 edges is because while in-person communication can be effective and fast, it often results in less documentation, which can impact new joiners. In a hybrid culture, this issue is so much worse, because it’s hard to get the company aligned into the amount of level of documentation necessary. Plus, when WFH days rotate across divisions and teams, individuals working remotely may suffer from a lack of context that is shared among the team in the office, leading to silos and communication gaps.In addition to that in remote work employees can and expect to have to accommodate for different time zones but when you move people to hybrid the ones that need to go to the office will no longer adjust their times to match the ones WFH based on needs.
    4. Blurred work-life boundaries: Hybrid work blurs the line between work and personal life. It no longer solely involves working from home and spending time with family but also includes being at work, interacting with co-workers, and commuting. This blurring can make it difficult to establish clear boundaries.
    5. Limited geographic talent pool: Since you want employees to commute to the office a certain number of times per week or month, you can’t hire them from anywhere. The geographic scope of talent acquisition becomes restricted, potentially limiting access to diverse skills and perspectives.
    6. Many more distractions: Individuals face distractions both at home when working remotely and in the office from co-workers. PLUS, you get the distractions that come from your co-workers bringing you up to speed if something happened when you weren’t in the office the day before (similar to the additional amount of chit chat that happens on Mondays due to weekend).
    7. Costs and commuting: You may save some money with some WFH, but often the WFH days don’t even justify going into a lower tier than a monthly subscription to public transports. So you end up spending the same, even if you travel less. This argument is less valid here in the Bay area where most people drive. Plus commuting those 3/4 days a week, is still a pain.When we talk about the employer costs then it’s impossible to get it right. On the one hand you have too few people in the office which means you are overpaying for office space, on the other hand you cannot get everyone in. And this will always be impossible with a growing team + managing the WFH days of each team and division.
    8. Decreased employee retention and satisfaction: In general, people tend to lean towards either remote work or office work. With hybrid work, those who prefer the office environment may work in the office most days, using WFH as an opportunity for personal tasks and potentially being less productive. On the other hand, those who prefer remote work will aim to WFH as much as possible and may feel dissatisfied with having to go to the office for the remaining days This can create a divide and decrease overall employee satisfaction. Additionally, this is even more pronounced when everyone in the leadership works in the office, since the company tends to follow culture from leaders and will have less incentives to accommodate team members that are not in the office.
    9. Challenges with supervision: Physical presence in the office often aids in monitoring performance, but it becomes challenging to fairly evaluate the performance of team members in the office versus those working remotely in a hybrid setup. What is the basis that you use to evaluate them? Based on what you see when they are in the office? Do you still create ways to evaluate their output when WFH? Do you still check on them as often when the rest of your team is with you in the office? What about when you are WFH and have half of the team in the office and the other WFH? The amount of complexity that comes from managing this by itself, almost makes hybrid the worst choice.

    Conclusion

    I’m not saying that hybrid work can’t work, but my point is that people tend to use hybrid as the perfect solution between office and remote, and I don’t think it is. In fact, I think for most companies, this is a way to sweep a problem under the rug with a half-baked solution.

    As an engineer, I wouldn’t be happy working in an office because I know I could contribute much more to the company by working from home. I’d be “okay” with doing hybrid work in order to continue working for the company, but I would probably start looking elsewhere due to all the aforementioned issues.

    As a leader, OpenBB has started as a remote company, and as a result, we have become highly efficient at working remotely, even when dealing with a 9-hour time difference. All team members understand that they need to make compromises with their working hours to accommodate the company’s needs. So, it ultimately comes down to the type of team you are building and how committed they are to the mission, as well as how you can cultivate such a culture internally.

    If your team grew accustomed to working in an office and had to switch to remote due to COVID, and you are noticing a decrease in performance, it may be that your team was not prepared to work remotely. In that case, it makes sense to go back to the office. However, if your team grew while working remotely, and you are not satisfied with their performance, let me tell you that bringing the team back to the office is a half-baked solution. Instead, it would be better to investigate the issue and implement better processes or address underperforming individuals.

    - - +

    Hybrid work sucks. It’s worse than remote and office.

    · 12 min read


    Hybrid work, a combination of remote and office work, is not as beneficial as it seems. This blog post discusses the pros and cons of remote and office work, and why hybrid work might not be the best solution.

    This is my hot take for 2023, but bear with me.

    Context

    Everyone on Twitter has been actively discussing that “Remote work failed”, e.g. this tweet from David Sacks where he refers to this blogpost, or this tweet from Paul Graham.

    While I’m not going to pose as an expert on the topic, I feel like I’ve experienced enough to have an opinion. My career so far has been:

    • 1 year of office work for a public company
    • 1 year of remote work for a startup, plus a few months of hybrid work for the same startup
    • 2 years of growing OpenBB from 1 to 20 people, all fully remote.

    Let me first go over the advantages and disadvantages of remote and office work, so that I can focus this blog post on why hybrid sucks.

    Remote work

    First of all, let’s be pragmatic — remote works. (Before people comment, of course if you’re a factory worker or similar, this doesn’t apply).

    Advantages

    1. Increased employee retention and satisfaction: Remote work is seen as a desirable perk, improving job satisfaction and retention rates. You can check OpenBB team engagement here.
    2. Expanded talent pool: It allows hiring from a global talent pool, resulting in a more diverse and skilled workforce, particularly in open source, where contributors come from all over the world.
    3. Increased flexibility: Remote work offers employees more control over their schedules, leading to better work-life balance.
    4. Improved productivity: There are fewer distractions and interruptions, which leads to increased productivity.
    5. No commuting: Remote work eliminates the need to travel to the office, saving time, money, and energy.
    6. Cost savings: It reduces expenses for both employees and employers, such as commuting and office-related costs.

    Disadvantages

    1. Limited face-to-face interaction: Remote work reduces in-person collaboration and social connections among colleagues.
    2. Communication challenges: Reliance on digital tools may lead to misunderstandings or misinterpretations. There may also be technical issues or connectivity problems.
    3. Blurred work-life boundaries: Clear separation between work and personal life becomes challenging.
    4. Potential distractions: Remote work environments expose individuals to various distractions.
    5. Challenges with collaboration: Coordinating tasks and scheduling can be more difficult remotely.
    6. Reduced visibility and career advancement opportunities: Remote workers may have limited visibility and access to career growth.

    Conclusion

    Remote works. It’s not for everyone, but it works. It works particularly well when the company culture is built around it. For it to work exceptionally well, it boils down to two main arguments:

    1. A strong leadership is necessary to keep the team aligned, motivated, and to create the company’s culture. This helps mainly with the limited face-to-face interaction, challenges with collaboration, and reduced visibility and career advancement opportunities.
    2. Do not track team members based on time but assess work based on output. Use meritocracy to reward the best team members and let go of low performers early. Remote work is not for everyone, and for those who cannot produce output/value to the company while working remotely, it means they weren’t a good hire in the first place. In my personal opinion, the disadvantages of potential distractions and blurred work-life boundaries come down to the employee and their relationship with remote work, instead of the company.

    Sometimes someone may not be producing as much value as expected, for one reason or another. When you are working remotely, you accept that you will add value to the company, and time is no longer a measure. Thus, the emphasis on output/value becomes much stronger.

    Office Work

    Office also works.

    Advantages

    1. Enhanced company culture: Offices contribute to a shared sense of identity and mission.
    2. Face-to-face collaboration: It allows for immediate interaction, fostering effective teamwork and problem-solving.
    3. Social interaction: Offices provide opportunities for building relationships with coworkers, enhancing camaraderie.
    4. Clear work-life boundaries: Physical office spaces establish separation between work and personal life.
    5. Mentorship and learning: In-person environments facilitate mentorship and hands-on learning.
    6. Improved supervision: Physical presence aids in monitoring performance and providing timely feedback.

    Disadvantages

    1. Commuting and transportation issues: Office work often involves commuting, which can lead to time-consuming and stressful travel, traffic congestion, and transportation expenses.
    2. Lack of flexibility: Office work typically follows a fixed schedule, leaving less room for personal flexibility or adjustments to achieve work-life balance.
    3. Office politics: Office environments can sometimes involve office politics, conflicts, or gossip that can affect productivity and job satisfaction.
    4. High overhead costs: Maintaining physical office spaces can be costly for organizations, including expenses related to rent, utilities, and office supplies.
    5. Limited geographic talent pool: Offices are often location-dependent, which may restrict access to a diverse and global talent pool, potentially limiting the variety of skills and perspectives within a workforce.
    6. Distractions and interruptions: Open office layouts or noisy work environments can lead to frequent interruptions, reducing focus and productivity.

    Conclusion

    Office works. Most workers are used to office work, and there’s a reason why it works so well, because it is easy for both the employee and the employer.

    From the employee standpoint: The routine of waking up, commuting, working for eight hours, commuting back, and then enjoying the evening is straightforward and requires minimal scheduling or organization. The job begins when the employee arrives at the office and ends when they leave. However, it’s important to note that this fixed schedule does not necessarily guarantee peak performance throughout the entire workday.

    For senior engineers, mentorship and learning opportunities may lead to context switching, disrupting deep focused work. What some refer to social interaction, can be perceived as wasting company resources. While supervision can raise the bar for average workers, top performers do not require constant supervision to excel. So if you’re aiming for top performers, perhaps supervision isn’t really necessary at all?

    From the employer standpoint: Leaders and managers may find it easier to have everyone in the office for quick communication and check-ins. However, relying on in-person communication may result in less documentation, which can be challenging for new joiners. Supervision becomes simpler as managers can track attendance and check on employees throughout the day, but this can also lead to time wasted for both the manager and the person being supervised. (Plus even that supervision allowed “A day in a life of” viral TikToks to highlighted inefficiencies).

    In conclusion, I’d say that your average worker will be better in the office, while your top performers will excel further in a remote environment.

    The question is whether you prefer your top engineers to become 10x more productive working remotely or prefer your average engineers to improve performance by 2x. Personally, I prefer to aim for 10x productivity with top engineers and let go of average ones.

    Hybrid Work

    Ok, now that we’ve discussed remote and office work, let’s go over why hybrid work sucks.

    People in general tend to associate hybrid work with the best of remote and the best of office, but I think that the worst of remote and office have more emphasis. Let’s go over the biggest pain points:

    1. Decreased productivity: When compared with remote or office, hybrid has lower productivity. This is due to the context switching associated with changing working environments. Personally, I have experienced this and found it frustrating to work until late at night, packing up and thinking about what I needed to carry for the next day, plus commuting. The next day, it took me much longer to get back into the flow of work compared to waking up and immediately continuing with the problem at hand.
    2. Decreased flexibility: Hybrid work offers less flexibility than remote work but somewhat more than office work. However, this flexibility is often constrained by company policies, such as designated office and remote days or specific rules regarding remote work. When the company dictates the days employees can work remotely, the flexibility becomes somewhat artificial.
    3. Communication challenges: As mentioned earlier, one of the reasons that office communication is a sword of 2 edges is because while in-person communication can be effective and fast, it often results in less documentation, which can impact new joiners. In a hybrid culture, this issue is so much worse, because it’s hard to get the company aligned into the amount of level of documentation necessary. Plus, when WFH days rotate across divisions and teams, individuals working remotely may suffer from a lack of context that is shared among the team in the office, leading to silos and communication gaps.In addition to that in remote work employees can and expect to have to accommodate for different time zones but when you move people to hybrid the ones that need to go to the office will no longer adjust their times to match the ones WFH based on needs.
    4. Blurred work-life boundaries: Hybrid work blurs the line between work and personal life. It no longer solely involves working from home and spending time with family but also includes being at work, interacting with co-workers, and commuting. This blurring can make it difficult to establish clear boundaries.
    5. Limited geographic talent pool: Since you want employees to commute to the office a certain number of times per week or month, you can’t hire them from anywhere. The geographic scope of talent acquisition becomes restricted, potentially limiting access to diverse skills and perspectives.
    6. Many more distractions: Individuals face distractions both at home when working remotely and in the office from co-workers. PLUS, you get the distractions that come from your co-workers bringing you up to speed if something happened when you weren’t in the office the day before (similar to the additional amount of chit chat that happens on Mondays due to weekend).
    7. Costs and commuting: You may save some money with some WFH, but often the WFH days don’t even justify going into a lower tier than a monthly subscription to public transports. So you end up spending the same, even if you travel less. This argument is less valid here in the Bay area where most people drive. Plus commuting those 3/4 days a week, is still a pain.When we talk about the employer costs then it’s impossible to get it right. On the one hand you have too few people in the office which means you are overpaying for office space, on the other hand you cannot get everyone in. And this will always be impossible with a growing team + managing the WFH days of each team and division.
    8. Decreased employee retention and satisfaction: In general, people tend to lean towards either remote work or office work. With hybrid work, those who prefer the office environment may work in the office most days, using WFH as an opportunity for personal tasks and potentially being less productive. On the other hand, those who prefer remote work will aim to WFH as much as possible and may feel dissatisfied with having to go to the office for the remaining days This can create a divide and decrease overall employee satisfaction. Additionally, this is even more pronounced when everyone in the leadership works in the office, since the company tends to follow culture from leaders and will have less incentives to accommodate team members that are not in the office.
    9. Challenges with supervision: Physical presence in the office often aids in monitoring performance, but it becomes challenging to fairly evaluate the performance of team members in the office versus those working remotely in a hybrid setup. What is the basis that you use to evaluate them? Based on what you see when they are in the office? Do you still create ways to evaluate their output when WFH? Do you still check on them as often when the rest of your team is with you in the office? What about when you are WFH and have half of the team in the office and the other WFH? The amount of complexity that comes from managing this by itself, almost makes hybrid the worst choice.

    Conclusion

    I’m not saying that hybrid work can’t work, but my point is that people tend to use hybrid as the perfect solution between office and remote, and I don’t think it is. In fact, I think for most companies, this is a way to sweep a problem under the rug with a half-baked solution.

    As an engineer, I wouldn’t be happy working in an office because I know I could contribute much more to the company by working from home. I’d be “okay” with doing hybrid work in order to continue working for the company, but I would probably start looking elsewhere due to all the aforementioned issues.

    As a leader, OpenBB has started as a remote company, and as a result, we have become highly efficient at working remotely, even when dealing with a 9-hour time difference. All team members understand that they need to make compromises with their working hours to accommodate the company’s needs. So, it ultimately comes down to the type of team you are building and how committed they are to the mission, as well as how you can cultivate such a culture internally.

    If your team grew accustomed to working in an office and had to switch to remote due to COVID, and you are noticing a decrease in performance, it may be that your team was not prepared to work remotely. In that case, it makes sense to go back to the office. However, if your team grew while working remotely, and you are not satisfied with their performance, let me tell you that bringing the team back to the office is a half-baked solution. Instead, it would be better to investigate the issue and implement better processes or address underperforming individuals.

    + + \ No newline at end of file diff --git a/blog/index.html b/blog/index.html index 7272a71019..27d465b6b5 100644 --- a/blog/index.html +++ b/blog/index.html @@ -10,13 +10,13 @@ - - + +
    -

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    · 3 min read


    In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    · 4 min read


    In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    - - +

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    · 3 min read


    In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    · 4 min read


    In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    + + \ No newline at end of file diff --git a/blog/k-means-clustering-to-visit-a-new-city/index.html b/blog/k-means-clustering-to-visit-a-new-city/index.html index 879be6cae9..b214d786e2 100644 --- a/blog/k-means-clustering-to-visit-a-new-city/index.html +++ b/blog/k-means-clustering-to-visit-a-new-city/index.html @@ -10,13 +10,13 @@ - - + +
    -

    K-means algorithm to visit a new city

    · 3 min read


    In this blogpost, I share how I used the K-means algorithm to plan a visit to London. The algorithm helps to decide which attractions to visit based on the number of days of the visit and the GPS coordinates of the attractions.

    The open source code is available here.

    Usually when I book a weekend getaway, I spend quite some time doing 2 things:

    • Writing down the main attractions I want to see
    • Depicting the travel path to maximise efficiency and see the most in less time (I’m a bit of an efficiency freak myself, sorry)

    This repository aims to decide which attractions to visit in London as a function of the number of days that you will be visiting, by applying K-means algorithm.

    As input you need to give the GPS coordinates of the main attractions you want to visit during your stay, and the number of days you are planning to visit. Notice that attractions that are not within the map screenshot boundaries will be discarded. See disclaimer below.

    The K-means algorithm will interpret: List of GPS coordinates of the main attractions that you want to visit as 2D samples, after converting to UTM. Number of days of the visit as Number of clusters.

    Of course, this is rather unrealistic because of several reasons, such as:

    • Not taking into account if they want to just pass by the London Eye, or have a ride on it;
    • Assumes that we are in a no man’s land since it completely bypasses the existence of other buildings, roads, …;
    • Does not consider altitude, even though London is rather plane;
    • Does not consider the number of attractions that one can possibly do per day;
    • Plus, if there was to be an attraction really far from the centre, it may happen that the algorithm considers an entire day for it (this would depend upon kernel initialisation)

    Nonetheless, I think this is a funny exercise, and if I were to select the areas to visit by myself, it would most likely be a similar choice to the one taken by K-means.

    Disclaimer: I did not know how to use Google API (neither wanted to pay for a key to be fair) hence I just took a screenshot of google maps and wrote down the coordinate of the lower left corner, so that I could use it as my origin. I also took the right top corner coordinate so that I could give the map with an “accurate” scaling.

    Note: GPS coordinates (latitude, longitude) have degrees has units, thus, explaining why the conversion to UTM coordinates, which uses meters.

    Immediately below you can see the result of a visit to London for 2, 3 and 4 days.

    image


    This project was done for fun. However, I believe that by creating a tuple per location with coordinates and estimate of time taken on each attraction, something nice could come out of this.

    Hope you find this interesting. Let me know your thoughts.

    - - +

    K-means algorithm to visit a new city

    · 3 min read


    In this blogpost, I share how I used the K-means algorithm to plan a visit to London. The algorithm helps to decide which attractions to visit based on the number of days of the visit and the GPS coordinates of the attractions.

    The open source code is available here.

    Usually when I book a weekend getaway, I spend quite some time doing 2 things:

    • Writing down the main attractions I want to see
    • Depicting the travel path to maximise efficiency and see the most in less time (I’m a bit of an efficiency freak myself, sorry)

    This repository aims to decide which attractions to visit in London as a function of the number of days that you will be visiting, by applying K-means algorithm.

    As input you need to give the GPS coordinates of the main attractions you want to visit during your stay, and the number of days you are planning to visit. Notice that attractions that are not within the map screenshot boundaries will be discarded. See disclaimer below.

    The K-means algorithm will interpret: List of GPS coordinates of the main attractions that you want to visit as 2D samples, after converting to UTM. Number of days of the visit as Number of clusters.

    Of course, this is rather unrealistic because of several reasons, such as:

    • Not taking into account if they want to just pass by the London Eye, or have a ride on it;
    • Assumes that we are in a no man’s land since it completely bypasses the existence of other buildings, roads, …;
    • Does not consider altitude, even though London is rather plane;
    • Does not consider the number of attractions that one can possibly do per day;
    • Plus, if there was to be an attraction really far from the centre, it may happen that the algorithm considers an entire day for it (this would depend upon kernel initialisation)

    Nonetheless, I think this is a funny exercise, and if I were to select the areas to visit by myself, it would most likely be a similar choice to the one taken by K-means.

    Disclaimer: I did not know how to use Google API (neither wanted to pay for a key to be fair) hence I just took a screenshot of google maps and wrote down the coordinate of the lower left corner, so that I could use it as my origin. I also took the right top corner coordinate so that I could give the map with an “accurate” scaling.

    Note: GPS coordinates (latitude, longitude) have degrees has units, thus, explaining why the conversion to UTM coordinates, which uses meters.

    Immediately below you can see the result of a visit to London for 2, 3 and 4 days.

    image


    This project was done for fun. However, I believe that by creating a tuple per location with coordinates and estimate of time taken on each attraction, something nice could come out of this.

    Hope you find this interesting. Let me know your thoughts.

    + + \ No newline at end of file diff --git a/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widget/index.html b/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widget/index.html index edcde888a8..c3f00c0c26 100644 --- a/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widget/index.html +++ b/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widget/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Keep track of your startup metrics using a custom iOS widget

    · 4 min read


    Keep track of your startup metrics using a custom iOS widget. This blog post will guide you on how to build a custom iOS widget that displays your startup metrics at all times. The entire code is open source and requires minimal coding skills.

    The open source code is available here.

    If you have a high level role in your organization, you are likely obsessed over a few metrics that act as the north star for your company. Whether that is MRR, number of customers, GitHub stars, AUM, .. depends on the type and stage of company, and what you are optimizing for.

    At OpenBB we are currently optimizing for OpenBB Hub users, since this is the place where you have access to our entire suite of products. From OpenBB Terminal, OpenBB SDK, OpenBB Bot and soon — the highly awaited OpenBB Terminal Pro.

    So everyday I spent some time checking our startup /open page. However, whenever I had to check these on mobile I had to open up the browser, type the link and then look for the metric of interest.

    Hence, to save time, I built a custom iOS widget that displays these metrics of interest at all times. All I need to do is unlock my phone and BAM, they are right there.

    So, today, I’ll teach you how you can do the same with minimal coding skills required. I open source the entire code, so that you can get up to speed as fast as possible here: https://github.com/DidierRLopes/opensource-scriptable-widget

    Track your open source metrics

    This section will provide a plug-and-play example for your open source repository.

    image

    These are the steps necessary to have it working on your iOS device:

    1/ Download Scriptable app to your iOS device

    2/ Open Scriptable app and click on the “+” on the top right corner

    3/ Rename that script to whatever repo you would like to track

    4/ Copy the code from the file opensource.js on this repository

    5/ Paste it into that new script on your phone

    6/ Change the 4 initial parameters from the file:

        const WIDGET_TITLE = "openbb.co/open"
    const GITHUB_REPO = "OpenBB-finance/OpenBBTerminal"
    const PIP_PACKAGE_NAME = "openbb"
    const CACHED_DATA_HOURS = 1
    • If you only want to track GitHub stats, do PIP_PACKAGE_NAME="".
    • If you only want to track PiPy stats, do GITHUB_REPO="".
    • The CACHED_DATA_HOURS corresponds to the amount of hours where the data is not updated.

    7/ Run script to make sure that it works using the “play button” on the bottom right corner

    8/ Leave the app

    9/ Leave your finger pressed on the iOS homepage

    10/ Click on the “+” on the left top corner

    11/ In the “Search Widgets” tab look for “Scriptable”

    12/ You will see “Run Script” and there are 3 pages. Select the type of widget size that you are interested in

    13/ Select “Add Widget”

    14/ The widget will appear with the sentence “Long press and edit widget to select the script to run”

    15/ Do that and then you will have 3 options:

    • Script — Select script name that you renamed to earlier
    • When Interacting — Select “Open URL” — A new field will appear with “URL” then provide the link you want to open you cick on the widget (e.g. http://openbb.co)
    • Parameter — If there’s any parameter needed to the script

    16/ Click outside the window, and you should be all set!

    Feel free to contribute to the repository with other examples / templates!

    - - +

    Keep track of your startup metrics using a custom iOS widget

    · 4 min read


    Keep track of your startup metrics using a custom iOS widget. This blog post will guide you on how to build a custom iOS widget that displays your startup metrics at all times. The entire code is open source and requires minimal coding skills.

    The open source code is available here.

    If you have a high level role in your organization, you are likely obsessed over a few metrics that act as the north star for your company. Whether that is MRR, number of customers, GitHub stars, AUM, .. depends on the type and stage of company, and what you are optimizing for.

    At OpenBB we are currently optimizing for OpenBB Hub users, since this is the place where you have access to our entire suite of products. From OpenBB Terminal, OpenBB SDK, OpenBB Bot and soon — the highly awaited OpenBB Terminal Pro.

    So everyday I spent some time checking our startup /open page. However, whenever I had to check these on mobile I had to open up the browser, type the link and then look for the metric of interest.

    Hence, to save time, I built a custom iOS widget that displays these metrics of interest at all times. All I need to do is unlock my phone and BAM, they are right there.

    So, today, I’ll teach you how you can do the same with minimal coding skills required. I open source the entire code, so that you can get up to speed as fast as possible here: https://github.com/DidierRLopes/opensource-scriptable-widget

    Track your open source metrics

    This section will provide a plug-and-play example for your open source repository.

    image

    These are the steps necessary to have it working on your iOS device:

    1/ Download Scriptable app to your iOS device

    2/ Open Scriptable app and click on the “+” on the top right corner

    3/ Rename that script to whatever repo you would like to track

    4/ Copy the code from the file opensource.js on this repository

    5/ Paste it into that new script on your phone

    6/ Change the 4 initial parameters from the file:

        const WIDGET_TITLE = "openbb.co/open"
    const GITHUB_REPO = "OpenBB-finance/OpenBBTerminal"
    const PIP_PACKAGE_NAME = "openbb"
    const CACHED_DATA_HOURS = 1
    • If you only want to track GitHub stats, do PIP_PACKAGE_NAME="".
    • If you only want to track PiPy stats, do GITHUB_REPO="".
    • The CACHED_DATA_HOURS corresponds to the amount of hours where the data is not updated.

    7/ Run script to make sure that it works using the “play button” on the bottom right corner

    8/ Leave the app

    9/ Leave your finger pressed on the iOS homepage

    10/ Click on the “+” on the left top corner

    11/ In the “Search Widgets” tab look for “Scriptable”

    12/ You will see “Run Script” and there are 3 pages. Select the type of widget size that you are interested in

    13/ Select “Add Widget”

    14/ The widget will appear with the sentence “Long press and edit widget to select the script to run”

    15/ Do that and then you will have 3 options:

    • Script — Select script name that you renamed to earlier
    • When Interacting — Select “Open URL” — A new field will appear with “URL” then provide the link you want to open you cick on the widget (e.g. http://openbb.co)
    • Parameter — If there’s any parameter needed to the script

    16/ Click outside the window, and you should be all set!

    Feel free to contribute to the repository with other examples / templates!

    + + \ No newline at end of file diff --git a/blog/leaving-london-to-live-in-san-francisco/index.html b/blog/leaving-london-to-live-in-san-francisco/index.html index 6a0012b3b6..193d9dc84b 100644 --- a/blog/leaving-london-to-live-in-san-francisco/index.html +++ b/blog/leaving-london-to-live-in-san-francisco/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Leaving London to live in San Francisco

    · 18 min read


    Leaving London to live in San Francisco: A personal journey of relocating and starting a tech company in the heart of Silicon Valley.

    Background

    I was born in Geneva, and when I was 8 years old, we moved back to Portugal, which is where my parents are originally from. After spending most of my teenage years in Portugal, I left sunny Lisbon ☀️ to pursue a MSc. degree at Imperial College London 💻. That’s where I’ve been living and working up until now. The main reasons behind my desire to move to San Francisco ☀️ 💻 are the weather and the thriving tech ecosystem that surrounds it.

    During the Covid pandemic while in London, I took the opportunity to build my own personal open source investment research platform. This project allowed me to secure VC funding and establish a company called OpenBB. As the CEO of this company, I feel privileged to have the chance to make a lasting impact on the financial industry. Embracing this adventure and collaborating with individuals who are much smarter than I am is the least I can do for our team and for OpenBB.

    As a first-time founder, I often find myself feeling slightly behind, which is why I’m eager to absorb as much experience and knowledge as possible from other successful entrepreneurs. This is also why I managed to convince my wife and our dogs to join me in packing our bags and embarking on this journey into the unknown, much like my Portuguese ancestors did centuries ago 🚢.

    Now, let’s dive into what truly matters. This will be a lengthy ride, so make sure you’re prepared for the journey ahead.

    VISA

    First of all, you need to determine which visa you are eligible for in order to live and work in the US. You can find more information on this topic here.

    In my case, I decided to apply for an “O-1 Visa: Individuals with Extraordinary Ability or Achievement” and specifically highlighted my extraordinary ability in the field of Computer Science, specifically within the subfield of Automated Systems. It is crucial to specify a particular field to make the defense process smoother.

    I had the privilege of working with an exceptional immigration lawyer who assisted me in crafting my case, significantly increasing my chances of a successful approval. Here is a portion of the O-1 Petition that was submitted:

    image

    As you can see, there is quite a bit of paperwork required to support your case. In my situation, I needed the following documents: Curriculum Vitae, university grades, transcripts and diplomas, LinkedIn and GitHub profiles, posts that gained viral attention on platforms like Reddit and HackerNews, podcasts and conferences where I had spoken, projects that received online praise, any media coverage I had received, scholarly scientific publications, expert opinion letters, and even emails or direct messages from venture capitalists or professionals in the industry.

    Essentially, any relevant evidence is used to strengthen your case. For me, the most crucial elements were the expert opinion letters provided by our lead investor, former colleagues, or respected individuals in the field who were familiar with my work, as well as the research papers I had published and the media coverage I had received.

    Once my O-1 visa was approved, I simply needed to take my passport to the US embassy in London to obtain the visa stamp. It’s worth noting that if the wait time at the US embassy is lengthy, you have the option to visit another US embassy in another country where the process may be faster.

    Arriving to the country

    I arrived in California on my own initially, with the plan for my wife and dogs to join me later. Thankfully, I had some contacts in California who provided me with their phone number and house address, which was helpful for getting settled. Since I didn’t have a phone before finding an apartment, I had to rely on roaming data using my plan from the UK, which resulted in additional expenses.

    I would suggest either having a good deal for data roaming and international calls outside your country or obtaining a prepaid US phone. The latter is especially important if you’re traveling alone because I often encountered registration forms that didn’t accept foreign phone numbers.

    Regarding payments, I used my Revolut VISA card, which offers excellent foreign exchange rates for converting pounds to dollars. It’s worth noting that I couldn’t open a US bank account without a Social Security Number (SSN).

    Social Security Number (SSN)

    If you know someone in the US, it is advisable to apply for a Social Security Number (SSN) as soon as possible and provide their address and contact information if you don’t have a US address of your own. An SSN is necessary for various purposes, and it may take up to two weeks for the card to arrive. When going to you nearest Social Security Administration (SSA) office, I would suggest arriving 30 minutes before opening hours to avoid long queues.

    To apply for an SSN, you will need to bring the following documents to the SSA office: your passport, the I-797 form (O-1 visa approval notice), and the I-94 form (arrival record in the US).

    Transportation

    I had the fortunate opportunity of having a friend lend me a car as soon as I arrived in California, and it made my life ten times easier. I highly recommend having something lined up in terms of transportation, as having a car enables you to get anywhere you need to go much more efficiently. To ensure I was covered, I simply needed to arrange car insurance. I opted for Progressive, and the process was quick and straightforward.

    While settling in, I occasionally relied on public transportation instead of driving, especially when traveling to the center of San Francisco. It took me some time to adjust to driving in the US, so public transport was a convenient alternative. If you plan on using public transportation services like BART or Caltrain, I suggest visiting this website that provides information on available transportation options. It’s also a good idea to purchase a Clipper card, which allows you to load funds and easily tap it when boarding.

    Additionally, if you anticipate passing through tolls, bridges, or utilizing the fast lane on the freeway, I recommend looking into acquiring a Fastrack transponder for a more seamless experience.

    Finding an apartment

    Apartment hunting proved to be quite stressful, considering that every day spent searching meant unnecessary expenses piling up while I still had my company to manage.

    Using Uber for transportation was convenient and efficient, but the costs could add up quickly with multiple trips. To save money, I recommend scheduling house viewings on the same day in specific areas of interest and simply walking from one location to another.

    While dealing with lease agents, I encountered a mix of competence levels. Some were highly efficient, while others were less so. If you’re genuinely interested in a particular apartment, it’s important to exert some pressure to keep the process moving forward. Don’t hesitate to call and inquire about updates.

    I was fond of the first house we saw, so I promptly paid $300, which covered certain fees. These fees were refundable if we decided not to proceed, but more importantly, they ensured that the house would be taken off the market. At this stage, both the agents and I wanted the process to move as quickly as possible. In our case, the target timeframe was three business days; if the process exceeded that, the house would be made available again.

    Even if you believe you’ve found the perfect apartment, I still recommend continuing your search until the lease contract is signed. It’s crucial to secure the apartment before assuming it’s yours.

    Before obtaining the keys, we had several tasks to complete: making the first payment, setting up utilities (PG&E for Gas and Electricity, and Conservice for water), providing proof of renter’s liability insurance (I used Assurant’s as it was conveniently associated with the community), and undergoing a pet screening (note that certain dog breeds are considered more dangerous and may not be accepted).

    Most importantly, my salary alone wasn’t sufficient to guarantee that we could afford the rent. I needed a guarantor to vouch for me, as Europe does not have the concept of credit ratings.

    Fortunately, our lead investor graciously agreed to be our guarantor when I asked him. Without someone fulfilling this role, I would have had to rely on a third-party service and pay several thousands of dollars, which would have been non-refundable and solely for the right to lease the house. This arrangement seemed rather illogical.

    After the apartment

    I needed to notify USCIS of my new address since the last one on file was associated with the hotel where I was staying. I informed them that my new residence would be the updated address.

    Following that, my dogs flew from the UK using Pets abroad UK. To save money, my wife didn’t accompany them on the flight; instead, she arranged for them to be transported in the cargo hold of the airplane while I waited at the destination.

    However, I must admit that I didn’t enjoy the experience, and in hindsight, I would have been willing to pay more for my dogs to have a better and safer flight. Although flying them from London, meant that unfortunately cargo was the option due to UK requirements. When I picked them up, they were visibly scared, and both my wife and I held our breath with worry throughout their entire journey. Our dogs’ well-being was of utmost importance to us.

    image

    The house was mostly empty, so to save money, we acquired a lot of second-hand items for free. It was beneficial to know people in the area who were aware of others with unused items stored in their garages, which we were able to take. To retrieve this furniture and other objects, we either needed to rent a U-Haul (which wasn’t possible without a California driver’s license) or hire a moving company.

    Our next task was to search for second-hand items at significant discounts on websites such as Craigslist, Nextdoor and Facebook Marketplace. However, we had to be cautious of scammers and remember that if a deal seemed too good to be true, it probably was.

    Once we had gathered most of the second-hand items, we visited Home Depot to paint and improve the newly acquired furniture. For the items we couldn’t find second-hand, we made purchases at Costco.

    We highly recommend getting an executive membership at Costco as it provides great value for money. Additionally, the gas prices at Costco are significantly cheaper compared to other places we’ve seen.

    Wi-Fi + Mobile plan

    After securing an apartment, I used my passport to visit an AT&T store. Since I didn’t have my SSN yet, they were accommodating and allowed me to use my passport for identification. However, if you choose a different service provider like Xfinity, you will need your SSN. Before selecting a plan, it’s important to check the coverage in your area to ensure that 4G/5G works well.

    Initially, I set up Wi-Fi through Xfinity, but then I used that as leverage to negotiate a discount with AT&T. This worked because I was interested in a double play package, which included two phone plans and Wi-Fi. As a result, I obtained an e-sim with unlimited 5G data for both myself and my wife, along with Wi-Fi for our home, at a cost of approximately $150 per month.

    Shopping

    There’s going to be a big shock in terms of prices; at least, we experienced one. Life in the Bay Area is over 2x more expensive than London.

    image

    So, we started learning how to buy things at a lower cost. Whole Foods is not a viable option as it’s one of the most expensive stores. The 10 items above cost $69.34 on Whole Foods.

    Instead, we now tend to shop at Safeway and always try to time our visits to take advantage of discounts. Many shopping places offer coupons that can help you save a lot of money. Additionally, when you come across products on sale, it’s better to buy them in larger quantities as it’s usually worth it.

    My wife is also a big fan of Trader Joe’s with the prices there being quite reasonable too. They also have a great selection of cheeses which is a must being from Europe.

    After obtaining an SSN

    After you obtain your SSN, there are a lot of new things that you are able to do since you are recognized as a “person.”

    Bank account

    Credit cards are recommended over debit cards, not just because of the security benefits, but also because of the credit rating associated with them. This is a concept that doesn’t really exist in Europe but is significant in the US. Your credit score will determine whether you are approved for a loan and what interest rate you will be charged.

    The agencies that handle your credit score are Equifax.com, TransUnion.com and Experian.com. It’s free to register, and you should keep an eye on your credit files to ensure that your credit score doesn’t decrease for any reason.

    We ended up opening an account with Bank of America. However, since we didn’t have a credit score yet, we couldn’t get a regular credit card. Instead, we had to apply for a secured credit card, where the maximum spending limit is determined by the amount of cash we use to back the credit card.

    We also applied for an AMEX card because American Express has a partnership with the international credit-reporting startup Nova Credit. This allows immigrants to instantly translate credit reports from the UK to U.S.-equivalent credit reports when applying for AmEx consumer cards. However, it’s important to note that AMEX cards are less widely accepted compared to VISA and MasterCard, so we were aware that they would only work in certain establishments.

    For more information, these video were extremely helpful:

    Car

    It was now time for us to buy a car. We searched online for a few options. There are two things worth considering when buying a used car, as we did:

    • Firstly, you can use https://www.kbb.com/car-values/ to research the value of the car. This ensures that you don’t get ripped off and provides an estimate of how much the car is worth based on the details you provide.
    • Secondly, you can use https://www.carfax.com/ to research a car and its license plate. This helps you understand its accident history and any repairs it has undergone. It provides information about whether there have been major accidents in the car’s history, frequent visits to the mechanic, and whether the repairs were done by authorized mechanics (e.g., BMW) or not.

    If you prefer to play it safe, you can even bring a mechanic with you to the dealership to assess the car’s condition.

    We spoke with individuals, but ultimately decided to buy a car from a dealership because it offered fewer risks compared to buying from individuals. Moreover, the dealership took care of updating the vehicle records, ensuring that the vehicle would be registered under our name. This allowed us to update our car insurance with the Vehicle Identification Number (VIN) of the new vehicle.

    After a few months, we received the California Certificate of Title, which confirmed that I was the legal owner of the vehicle and included important vehicle identification information. Since this was my first car, I had to add an OpenBB reference to the front plate :)

    image

    Shoutouts to:

    • Jiffy Lube for their car inspection services, tire inflation, oil changes, and more. They don’t charge for the inspection and only charge for the services performed on the car. We had a great experience with them.
    • Costco gas station for the cheapest gas we’ve found so far.

    Health Insurance

    California offers a portal called Covered California, which provides state-approved health plans from various insurance companies. If your income is low, the state can subsidize your monthly premium. These plans fall into three categories, each with differences in costs and provider networks:

    1. HMOs (Health Maintenance Organizations): Typically cheaper than PPOs, HMOs have smaller networks. You need to see your primary care physician before getting a referral to a specialist.
    2. PPOs (Preferred Provider Organizations): Usually more expensive, PPOs offer a larger network and the ability to see providers outside of the network. You can also see specialists without a referral.
    3. EPOS (Exclusive Provider Organizations): EPOS plans combine features of HMOs and PPOs. They have exclusive networks like HMOs, making them generally less expensive. However, you can make your own appointments with specialists, similar to PPOs.

    In our case, we chose an HMO called Kaiser. Kaiser is a not-for-profit, all-inclusive healthcare company with its own doctors and hospitals. When selecting the plan within Kaiser, we had to choose between Bronze, Silver, and Gold tiers. These tiers are influenced by three main factors:

    1. Monthly premium: The amount you pay each month for health plan coverage. It may be subsidized based on your income and household size.
    2. Annual deductible: The amount you must pay before your plan starts covering services.
    3. Annual maximum out-of-pocket: The total amount you pay in a calendar year (in addition to monthly premiums) for most services covered by your health care plan.

    California Driving License

    The Department of Motor Vehicles (DMV) is responsible for vehicle registrations and driving licenses in California. When you arrive in California, you can use a foreign driving license for only 10 days, after which you must obtain a California Driving License (CDL).

    To apply for the CDL, you can start the process online by completing the driver’s license application on the DMV website. This online application saves time by allowing you to fill it out before visiting a DMV field office.

    When you visit the DMV, the employees will review your completed application and request certain documents, including:

    • Social Security Number (SSN)
    • Unexpired foreign passport with a valid U.S. visa
    • Approved I-94 form
    • Bank and financial institution records
    • Insurance documents

    After submitting the required documents, you will have your picture taken and then proceed to take the written driving test. It’s advisable to practice for the test in advance. As I have many years of driving experience, I personally used practice tests available at https://www.dmv-written-test.com/california/practice-test-1.html.

    A few days later, I returned to the DMV to take the written test. The test consists of 36 multiple-choice questions, and you are allowed to fail up to 6 questions. You will immediately know whether you passed or not.

    Upon passing the written test, you will receive a document that allows you to schedule your driving exam. It is recommended to book the exam as soon as possible, as available slots may be several weeks away due to high demand.

    On the day of the driving exam, you will need to bring someone who holds a CDL, the document provided after passing the written exam, and your passport.

    The driving exam evaluates your performance, and you will receive a score sheet outlining the criteria and aspects that will be assessed during the exam. This will give you an idea of what to expect and what the examiners will be evaluating.

    image

    After successfully passing the driving exam, the DMV will issue you a temporary document that serves as your California Driving License (CDL). This temporary document will allow you to legally drive while you wait for your physical CDL to be sent to you by mail.

    It typically takes a few months for the physical CDL to be processed and mailed to your designated address. During this time, you can use the temporary document as proof of your driving privileges in California. Once you receive the physical CDL, you should carry it with you whenever you are driving.

    It’s important to note that the temporary document and the physical CDL have the same validity and serve as official proof of your driver’s license status.

    Final thoughts

    I’ve moved countries a few times within Europe, and those moves were much easier than moving to the USA.

    Nonetheless, I think you can get settled within 3 months of moving to the country. So far, we are really enjoying our experience and can’t wait to explore more of the area.

    If you are looking to do the same and want some feedback, feel free to reach out. It helped us a lot to have people who could help us with the move, so I’d love to be able to do the same for others.

    - - +

    Leaving London to live in San Francisco

    · 18 min read


    Leaving London to live in San Francisco: A personal journey of relocating and starting a tech company in the heart of Silicon Valley.

    Background

    I was born in Geneva, and when I was 8 years old, we moved back to Portugal, which is where my parents are originally from. After spending most of my teenage years in Portugal, I left sunny Lisbon ☀️ to pursue a MSc. degree at Imperial College London 💻. That’s where I’ve been living and working up until now. The main reasons behind my desire to move to San Francisco ☀️ 💻 are the weather and the thriving tech ecosystem that surrounds it.

    During the Covid pandemic while in London, I took the opportunity to build my own personal open source investment research platform. This project allowed me to secure VC funding and establish a company called OpenBB. As the CEO of this company, I feel privileged to have the chance to make a lasting impact on the financial industry. Embracing this adventure and collaborating with individuals who are much smarter than I am is the least I can do for our team and for OpenBB.

    As a first-time founder, I often find myself feeling slightly behind, which is why I’m eager to absorb as much experience and knowledge as possible from other successful entrepreneurs. This is also why I managed to convince my wife and our dogs to join me in packing our bags and embarking on this journey into the unknown, much like my Portuguese ancestors did centuries ago 🚢.

    Now, let’s dive into what truly matters. This will be a lengthy ride, so make sure you’re prepared for the journey ahead.

    VISA

    First of all, you need to determine which visa you are eligible for in order to live and work in the US. You can find more information on this topic here.

    In my case, I decided to apply for an “O-1 Visa: Individuals with Extraordinary Ability or Achievement” and specifically highlighted my extraordinary ability in the field of Computer Science, specifically within the subfield of Automated Systems. It is crucial to specify a particular field to make the defense process smoother.

    I had the privilege of working with an exceptional immigration lawyer who assisted me in crafting my case, significantly increasing my chances of a successful approval. Here is a portion of the O-1 Petition that was submitted:

    image

    As you can see, there is quite a bit of paperwork required to support your case. In my situation, I needed the following documents: Curriculum Vitae, university grades, transcripts and diplomas, LinkedIn and GitHub profiles, posts that gained viral attention on platforms like Reddit and HackerNews, podcasts and conferences where I had spoken, projects that received online praise, any media coverage I had received, scholarly scientific publications, expert opinion letters, and even emails or direct messages from venture capitalists or professionals in the industry.

    Essentially, any relevant evidence is used to strengthen your case. For me, the most crucial elements were the expert opinion letters provided by our lead investor, former colleagues, or respected individuals in the field who were familiar with my work, as well as the research papers I had published and the media coverage I had received.

    Once my O-1 visa was approved, I simply needed to take my passport to the US embassy in London to obtain the visa stamp. It’s worth noting that if the wait time at the US embassy is lengthy, you have the option to visit another US embassy in another country where the process may be faster.

    Arriving to the country

    I arrived in California on my own initially, with the plan for my wife and dogs to join me later. Thankfully, I had some contacts in California who provided me with their phone number and house address, which was helpful for getting settled. Since I didn’t have a phone before finding an apartment, I had to rely on roaming data using my plan from the UK, which resulted in additional expenses.

    I would suggest either having a good deal for data roaming and international calls outside your country or obtaining a prepaid US phone. The latter is especially important if you’re traveling alone because I often encountered registration forms that didn’t accept foreign phone numbers.

    Regarding payments, I used my Revolut VISA card, which offers excellent foreign exchange rates for converting pounds to dollars. It’s worth noting that I couldn’t open a US bank account without a Social Security Number (SSN).

    Social Security Number (SSN)

    If you know someone in the US, it is advisable to apply for a Social Security Number (SSN) as soon as possible and provide their address and contact information if you don’t have a US address of your own. An SSN is necessary for various purposes, and it may take up to two weeks for the card to arrive. When going to you nearest Social Security Administration (SSA) office, I would suggest arriving 30 minutes before opening hours to avoid long queues.

    To apply for an SSN, you will need to bring the following documents to the SSA office: your passport, the I-797 form (O-1 visa approval notice), and the I-94 form (arrival record in the US).

    Transportation

    I had the fortunate opportunity of having a friend lend me a car as soon as I arrived in California, and it made my life ten times easier. I highly recommend having something lined up in terms of transportation, as having a car enables you to get anywhere you need to go much more efficiently. To ensure I was covered, I simply needed to arrange car insurance. I opted for Progressive, and the process was quick and straightforward.

    While settling in, I occasionally relied on public transportation instead of driving, especially when traveling to the center of San Francisco. It took me some time to adjust to driving in the US, so public transport was a convenient alternative. If you plan on using public transportation services like BART or Caltrain, I suggest visiting this website that provides information on available transportation options. It’s also a good idea to purchase a Clipper card, which allows you to load funds and easily tap it when boarding.

    Additionally, if you anticipate passing through tolls, bridges, or utilizing the fast lane on the freeway, I recommend looking into acquiring a Fastrack transponder for a more seamless experience.

    Finding an apartment

    Apartment hunting proved to be quite stressful, considering that every day spent searching meant unnecessary expenses piling up while I still had my company to manage.

    Using Uber for transportation was convenient and efficient, but the costs could add up quickly with multiple trips. To save money, I recommend scheduling house viewings on the same day in specific areas of interest and simply walking from one location to another.

    While dealing with lease agents, I encountered a mix of competence levels. Some were highly efficient, while others were less so. If you’re genuinely interested in a particular apartment, it’s important to exert some pressure to keep the process moving forward. Don’t hesitate to call and inquire about updates.

    I was fond of the first house we saw, so I promptly paid $300, which covered certain fees. These fees were refundable if we decided not to proceed, but more importantly, they ensured that the house would be taken off the market. At this stage, both the agents and I wanted the process to move as quickly as possible. In our case, the target timeframe was three business days; if the process exceeded that, the house would be made available again.

    Even if you believe you’ve found the perfect apartment, I still recommend continuing your search until the lease contract is signed. It’s crucial to secure the apartment before assuming it’s yours.

    Before obtaining the keys, we had several tasks to complete: making the first payment, setting up utilities (PG&E for Gas and Electricity, and Conservice for water), providing proof of renter’s liability insurance (I used Assurant’s as it was conveniently associated with the community), and undergoing a pet screening (note that certain dog breeds are considered more dangerous and may not be accepted).

    Most importantly, my salary alone wasn’t sufficient to guarantee that we could afford the rent. I needed a guarantor to vouch for me, as Europe does not have the concept of credit ratings.

    Fortunately, our lead investor graciously agreed to be our guarantor when I asked him. Without someone fulfilling this role, I would have had to rely on a third-party service and pay several thousands of dollars, which would have been non-refundable and solely for the right to lease the house. This arrangement seemed rather illogical.

    After the apartment

    I needed to notify USCIS of my new address since the last one on file was associated with the hotel where I was staying. I informed them that my new residence would be the updated address.

    Following that, my dogs flew from the UK using Pets abroad UK. To save money, my wife didn’t accompany them on the flight; instead, she arranged for them to be transported in the cargo hold of the airplane while I waited at the destination.

    However, I must admit that I didn’t enjoy the experience, and in hindsight, I would have been willing to pay more for my dogs to have a better and safer flight. Although flying them from London, meant that unfortunately cargo was the option due to UK requirements. When I picked them up, they were visibly scared, and both my wife and I held our breath with worry throughout their entire journey. Our dogs’ well-being was of utmost importance to us.

    image

    The house was mostly empty, so to save money, we acquired a lot of second-hand items for free. It was beneficial to know people in the area who were aware of others with unused items stored in their garages, which we were able to take. To retrieve this furniture and other objects, we either needed to rent a U-Haul (which wasn’t possible without a California driver’s license) or hire a moving company.

    Our next task was to search for second-hand items at significant discounts on websites such as Craigslist, Nextdoor and Facebook Marketplace. However, we had to be cautious of scammers and remember that if a deal seemed too good to be true, it probably was.

    Once we had gathered most of the second-hand items, we visited Home Depot to paint and improve the newly acquired furniture. For the items we couldn’t find second-hand, we made purchases at Costco.

    We highly recommend getting an executive membership at Costco as it provides great value for money. Additionally, the gas prices at Costco are significantly cheaper compared to other places we’ve seen.

    Wi-Fi + Mobile plan

    After securing an apartment, I used my passport to visit an AT&T store. Since I didn’t have my SSN yet, they were accommodating and allowed me to use my passport for identification. However, if you choose a different service provider like Xfinity, you will need your SSN. Before selecting a plan, it’s important to check the coverage in your area to ensure that 4G/5G works well.

    Initially, I set up Wi-Fi through Xfinity, but then I used that as leverage to negotiate a discount with AT&T. This worked because I was interested in a double play package, which included two phone plans and Wi-Fi. As a result, I obtained an e-sim with unlimited 5G data for both myself and my wife, along with Wi-Fi for our home, at a cost of approximately $150 per month.

    Shopping

    There’s going to be a big shock in terms of prices; at least, we experienced one. Life in the Bay Area is over 2x more expensive than London.

    image

    So, we started learning how to buy things at a lower cost. Whole Foods is not a viable option as it’s one of the most expensive stores. The 10 items above cost $69.34 on Whole Foods.

    Instead, we now tend to shop at Safeway and always try to time our visits to take advantage of discounts. Many shopping places offer coupons that can help you save a lot of money. Additionally, when you come across products on sale, it’s better to buy them in larger quantities as it’s usually worth it.

    My wife is also a big fan of Trader Joe’s with the prices there being quite reasonable too. They also have a great selection of cheeses which is a must being from Europe.

    After obtaining an SSN

    After you obtain your SSN, there are a lot of new things that you are able to do since you are recognized as a “person.”

    Bank account

    Credit cards are recommended over debit cards, not just because of the security benefits, but also because of the credit rating associated with them. This is a concept that doesn’t really exist in Europe but is significant in the US. Your credit score will determine whether you are approved for a loan and what interest rate you will be charged.

    The agencies that handle your credit score are Equifax.com, TransUnion.com and Experian.com. It’s free to register, and you should keep an eye on your credit files to ensure that your credit score doesn’t decrease for any reason.

    We ended up opening an account with Bank of America. However, since we didn’t have a credit score yet, we couldn’t get a regular credit card. Instead, we had to apply for a secured credit card, where the maximum spending limit is determined by the amount of cash we use to back the credit card.

    We also applied for an AMEX card because American Express has a partnership with the international credit-reporting startup Nova Credit. This allows immigrants to instantly translate credit reports from the UK to U.S.-equivalent credit reports when applying for AmEx consumer cards. However, it’s important to note that AMEX cards are less widely accepted compared to VISA and MasterCard, so we were aware that they would only work in certain establishments.

    For more information, these video were extremely helpful:

    Car

    It was now time for us to buy a car. We searched online for a few options. There are two things worth considering when buying a used car, as we did:

    • Firstly, you can use https://www.kbb.com/car-values/ to research the value of the car. This ensures that you don’t get ripped off and provides an estimate of how much the car is worth based on the details you provide.
    • Secondly, you can use https://www.carfax.com/ to research a car and its license plate. This helps you understand its accident history and any repairs it has undergone. It provides information about whether there have been major accidents in the car’s history, frequent visits to the mechanic, and whether the repairs were done by authorized mechanics (e.g., BMW) or not.

    If you prefer to play it safe, you can even bring a mechanic with you to the dealership to assess the car’s condition.

    We spoke with individuals, but ultimately decided to buy a car from a dealership because it offered fewer risks compared to buying from individuals. Moreover, the dealership took care of updating the vehicle records, ensuring that the vehicle would be registered under our name. This allowed us to update our car insurance with the Vehicle Identification Number (VIN) of the new vehicle.

    After a few months, we received the California Certificate of Title, which confirmed that I was the legal owner of the vehicle and included important vehicle identification information. Since this was my first car, I had to add an OpenBB reference to the front plate :)

    image

    Shoutouts to:

    • Jiffy Lube for their car inspection services, tire inflation, oil changes, and more. They don’t charge for the inspection and only charge for the services performed on the car. We had a great experience with them.
    • Costco gas station for the cheapest gas we’ve found so far.

    Health Insurance

    California offers a portal called Covered California, which provides state-approved health plans from various insurance companies. If your income is low, the state can subsidize your monthly premium. These plans fall into three categories, each with differences in costs and provider networks:

    1. HMOs (Health Maintenance Organizations): Typically cheaper than PPOs, HMOs have smaller networks. You need to see your primary care physician before getting a referral to a specialist.
    2. PPOs (Preferred Provider Organizations): Usually more expensive, PPOs offer a larger network and the ability to see providers outside of the network. You can also see specialists without a referral.
    3. EPOS (Exclusive Provider Organizations): EPOS plans combine features of HMOs and PPOs. They have exclusive networks like HMOs, making them generally less expensive. However, you can make your own appointments with specialists, similar to PPOs.

    In our case, we chose an HMO called Kaiser. Kaiser is a not-for-profit, all-inclusive healthcare company with its own doctors and hospitals. When selecting the plan within Kaiser, we had to choose between Bronze, Silver, and Gold tiers. These tiers are influenced by three main factors:

    1. Monthly premium: The amount you pay each month for health plan coverage. It may be subsidized based on your income and household size.
    2. Annual deductible: The amount you must pay before your plan starts covering services.
    3. Annual maximum out-of-pocket: The total amount you pay in a calendar year (in addition to monthly premiums) for most services covered by your health care plan.

    California Driving License

    The Department of Motor Vehicles (DMV) is responsible for vehicle registrations and driving licenses in California. When you arrive in California, you can use a foreign driving license for only 10 days, after which you must obtain a California Driving License (CDL).

    To apply for the CDL, you can start the process online by completing the driver’s license application on the DMV website. This online application saves time by allowing you to fill it out before visiting a DMV field office.

    When you visit the DMV, the employees will review your completed application and request certain documents, including:

    • Social Security Number (SSN)
    • Unexpired foreign passport with a valid U.S. visa
    • Approved I-94 form
    • Bank and financial institution records
    • Insurance documents

    After submitting the required documents, you will have your picture taken and then proceed to take the written driving test. It’s advisable to practice for the test in advance. As I have many years of driving experience, I personally used practice tests available at https://www.dmv-written-test.com/california/practice-test-1.html.

    A few days later, I returned to the DMV to take the written test. The test consists of 36 multiple-choice questions, and you are allowed to fail up to 6 questions. You will immediately know whether you passed or not.

    Upon passing the written test, you will receive a document that allows you to schedule your driving exam. It is recommended to book the exam as soon as possible, as available slots may be several weeks away due to high demand.

    On the day of the driving exam, you will need to bring someone who holds a CDL, the document provided after passing the written exam, and your passport.

    The driving exam evaluates your performance, and you will receive a score sheet outlining the criteria and aspects that will be assessed during the exam. This will give you an idea of what to expect and what the examiners will be evaluating.

    image

    After successfully passing the driving exam, the DMV will issue you a temporary document that serves as your California Driving License (CDL). This temporary document will allow you to legally drive while you wait for your physical CDL to be sent to you by mail.

    It typically takes a few months for the physical CDL to be processed and mailed to your designated address. During this time, you can use the temporary document as proof of your driving privileges in California. Once you receive the physical CDL, you should carry it with you whenever you are driving.

    It’s important to note that the temporary document and the physical CDL have the same validity and serve as official proof of your driver’s license status.

    Final thoughts

    I’ve moved countries a few times within Europe, and those moves were much easier than moving to the USA.

    Nonetheless, I think you can get settled within 3 months of moving to the country. So far, we are really enjoying our experience and can’t wait to explore more of the area.

    If you are looking to do the same and want some feedback, feel free to reach out. It helped us a lot to have people who could help us with the move, so I’d love to be able to do the same for others.

    + + \ No newline at end of file diff --git a/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literally/index.html b/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literally/index.html index 26b26205b2..f58a0e415a 100644 --- a/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literally/index.html +++ b/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literally/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Looking for a new tattoo? OpenBB has you covered… literally.

    · 4 min read


    Exploring unconventional ways to increase brand visibility, OpenBB's co-founder gets a tattoo of the company logo. This blog post discusses the thought process behind this unique marketing strategy.

    When OpenBB Terminal started last year, I went from having your typical career as a Software Engineer to becoming a co-founder & CEO of a C-Corporation overnight. One thing that I’ve really learnt from this change, is I can no longer code for 12–16 hours a day straight as my role now involves so much more than this… and most interestingly, one of those things is marketing.

    During Easter in Lisbon, I was thinking about how to increase the visability of OpenBB. An investment research platform for everyone, anywhere. Seems self-explanatory and something most of us would relate to, but the problem is reaching a bigger audience.

    Due to our $8.5M funding we have money in the bank, which means we can afford to do some ads campaigns. However, I very much dislike the traditional type of ads, whether that is with Google, Instagram, Twitter or YouTube. Particularly YouTube ones, when I see an ad there I immediately think less of the product being advertised due to how intrusive these are.

    That’s why I started thinking of ways to share our OpenBB brand in a non-intrusive way. In fact, I went one step further and started thinking when I personally would welcome ads.

    Funnily enough, the first thing that came to my mind was when I go to the bathroom without my phone. Although there’s no ads on the back of shampoos/shower gel/soap/spray, I would very much welcome them.

    image

    It’s not like knowing the %s of ingredients that makes up cleaning products has a lot of use cases…

    This brought me to the conclusion that I would only welcome ads if I was bored and didn’t have anything keeping me “too busy”. This immediately made me think of London underground ads (the most effective type of DOOH imho). I always read those ads. The main reason being that I don’t have WiFi underground and the noise is too loud to listen to a podcast. Hence, I imagined the underground looking like:

    image

    When I checked for the prices, I was looking at a marketing campaign for a couple of days in a couple of stations costing over 5 digits, which is quite expensive for the short time-span.

    Therefore, I started to think of cheaper alternatives that yielded a better ROI. The next thing that passed through my mind was wearing OpenBB swag (yet to be revealed, subscribe to our newsletter to know more). However, I feel like nowadays everyone has a t-shirt with a different logo and these aren’t as noticeable as before — at least that’s my perspective.

    This lead me to think: What about a tattoo? It’s a similar concept than OpenBB clothes but more powerful. In addition, when wearing OpenBB clothes with a visible tattoo, this will create a “curiosity” effect since the symbol is repeated (clothes and tattoo). In addition, I’ve not come across anyone using their body to express their brand.

    Later that day I booked a tattoo slot, paid 100 euros, and got the OpenBB logo on the back of my arm as shown below,

    image

    I will let you know on my socials how many people ask about this tattoo over the course of my life.

    And if you like our logo and our values, OpenBB will pay you for the tattoo.

    One things for sure, now I can definitely put the gym membership as a company expense since I’m a walking billboard 😄

    The first walking/running/coding/eating/drinking OpenBB billboard.

    - - +

    Looking for a new tattoo? OpenBB has you covered… literally.

    · 4 min read


    Exploring unconventional ways to increase brand visibility, OpenBB's co-founder gets a tattoo of the company logo. This blog post discusses the thought process behind this unique marketing strategy.

    When OpenBB Terminal started last year, I went from having your typical career as a Software Engineer to becoming a co-founder & CEO of a C-Corporation overnight. One thing that I’ve really learnt from this change, is I can no longer code for 12–16 hours a day straight as my role now involves so much more than this… and most interestingly, one of those things is marketing.

    During Easter in Lisbon, I was thinking about how to increase the visability of OpenBB. An investment research platform for everyone, anywhere. Seems self-explanatory and something most of us would relate to, but the problem is reaching a bigger audience.

    Due to our $8.5M funding we have money in the bank, which means we can afford to do some ads campaigns. However, I very much dislike the traditional type of ads, whether that is with Google, Instagram, Twitter or YouTube. Particularly YouTube ones, when I see an ad there I immediately think less of the product being advertised due to how intrusive these are.

    That’s why I started thinking of ways to share our OpenBB brand in a non-intrusive way. In fact, I went one step further and started thinking when I personally would welcome ads.

    Funnily enough, the first thing that came to my mind was when I go to the bathroom without my phone. Although there’s no ads on the back of shampoos/shower gel/soap/spray, I would very much welcome them.

    image

    It’s not like knowing the %s of ingredients that makes up cleaning products has a lot of use cases…

    This brought me to the conclusion that I would only welcome ads if I was bored and didn’t have anything keeping me “too busy”. This immediately made me think of London underground ads (the most effective type of DOOH imho). I always read those ads. The main reason being that I don’t have WiFi underground and the noise is too loud to listen to a podcast. Hence, I imagined the underground looking like:

    image

    When I checked for the prices, I was looking at a marketing campaign for a couple of days in a couple of stations costing over 5 digits, which is quite expensive for the short time-span.

    Therefore, I started to think of cheaper alternatives that yielded a better ROI. The next thing that passed through my mind was wearing OpenBB swag (yet to be revealed, subscribe to our newsletter to know more). However, I feel like nowadays everyone has a t-shirt with a different logo and these aren’t as noticeable as before — at least that’s my perspective.

    This lead me to think: What about a tattoo? It’s a similar concept than OpenBB clothes but more powerful. In addition, when wearing OpenBB clothes with a visible tattoo, this will create a “curiosity” effect since the symbol is repeated (clothes and tattoo). In addition, I’ve not come across anyone using their body to express their brand.

    Later that day I booked a tattoo slot, paid 100 euros, and got the OpenBB logo on the back of my arm as shown below,

    image

    I will let you know on my socials how many people ask about this tattoo over the course of my life.

    And if you like our logo and our values, OpenBB will pay you for the tattoo.

    One things for sure, now I can definitely put the gym membership as a company expense since I’m a walking billboard 😄

    The first walking/running/coding/eating/drinking OpenBB billboard.

    + + \ No newline at end of file diff --git a/blog/meet-the-most-advanced-investment-research-platform/index.html b/blog/meet-the-most-advanced-investment-research-platform/index.html index f105aa8936..184099b101 100644 --- a/blog/meet-the-most-advanced-investment-research-platform/index.html +++ b/blog/meet-the-most-advanced-investment-research-platform/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Meet the most advanced investment research platform

    · 2 min read


    Meet the most advanced investment research platform. This blog post introduces Gamestonk Terminal, an advanced investment research platform, and discusses its features and automation capabilities.

    The open source code is available here.

    Several people have asked me why Gamestonk Terminal doesn’t have release versions, and the main reason is because at the pace the team codes and the rate that new features / bug fixes appear it doesn’t yet makes sense to do so.

    To give you an example, recently I shared the first DEMO of what the terminal can do, and I mention about our “routines” automation concept.


    One week later, using the latest version of the terminal, on top of that simplistic routine type you are able to:

    1. Provide variable input variables when calling the routine using $ARGV[i] (I used Perl convention here eheh)
    2. Execute routines from within the terminal directly
    3. Add comments to the routines so the process is more clear
    4. Exporting data to a folder of choice is now possible
    5. Exporting a file with a pre-defined name is now possible
    6. Allow for the first line of the routines to be selecting a folder to export ALL the data

    See below a 1 minute video of what these routine automated scripts look like!


    Reach out if you have any question to the team, there’s very little we can’t do!

    This is the way!

    - - +

    Meet the most advanced investment research platform

    · 2 min read


    Meet the most advanced investment research platform. This blog post introduces Gamestonk Terminal, an advanced investment research platform, and discusses its features and automation capabilities.

    The open source code is available here.

    Several people have asked me why Gamestonk Terminal doesn’t have release versions, and the main reason is because at the pace the team codes and the rate that new features / bug fixes appear it doesn’t yet makes sense to do so.

    To give you an example, recently I shared the first DEMO of what the terminal can do, and I mention about our “routines” automation concept.


    One week later, using the latest version of the terminal, on top of that simplistic routine type you are able to:

    1. Provide variable input variables when calling the routine using $ARGV[i] (I used Perl convention here eheh)
    2. Execute routines from within the terminal directly
    3. Add comments to the routines so the process is more clear
    4. Exporting data to a folder of choice is now possible
    5. Exporting a file with a pre-defined name is now possible
    6. Allow for the first line of the routines to be selecting a folder to export ALL the data

    See below a 1 minute video of what these routine automated scripts look like!


    Reach out if you have any question to the team, there’s very little we can’t do!

    This is the way!

    + + \ No newline at end of file diff --git a/blog/minion-recipes-program/index.html b/blog/minion-recipes-program/index.html index 1924b55286..65c87e865e 100644 --- a/blog/minion-recipes-program/index.html +++ b/blog/minion-recipes-program/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Minion Recipes Program

    · 3 min read


    In this blogpost, I share how I developed a program to help my mum manage her recipes. The program allows for adding, editing, and removing recipes, and even includes fun minion icons.

    The open source code is available here.

    Once I developed the Housebills program, I really enjoyed the feeling of being able to create usable software from scratch. Therefore, that year during Christmas, I wanted to challenge myself to see if I could find any interesting project to do in only 1 week.

    I started by nagging my dad and brother for them to tell me something that would be useful to them in their daily lives. Sadly, none of them had any idea. Then, I went to the kitchen to ask my mum the same. She was busy searching recipes for xmas on her messy notebook, so she also said no.

    I sat there next to her thinking about what I could do, while she kept on going back and forth in her notebook searching. I don’t know if she had been reading about the binary search algorithm, or if she was just opening pages randomly. What I know is that 1 week later I did a program for her to keep her recipes. Safe to say that I saved Christmas, I guess.

    Note: Before the end of that year, I still upgraded the software for its version 2.0, which included more than 20 minion icons. To this day, I think she opens the program to see the minion icons more than the recipes themselves.

    Below it displays the interfaces used, and these correspond to: Red-Visualize; Add; Blue-Add; Green-Edit; and Yellow-Remove recipes.

    image

    PS: Any resemblance with the Microsoft colour scheme is pure coincidence eheh.

    When adding a recipe, the following window will be displayed.

    image

    This allows you to add both a recipe, and a category (i.e. the “Tiramisu” recipe would be within “Desserts” category).

    The recipe content would include:

    • Name of the recipe
    • Ingredients
    • Preparation
    • Comment

    When visualising a recipe, the following window will be displayed.

    image

    Where the recipe dialog box would prompt the recipes based on the category chosen on its left. Then, after selecting a recipe, the ingredients, preparation and comment would be filled out.

    When editing a recipe, the following window will be displayed. This is similar to the visualisation window, with the difference that the text boxes are editable, and therefore, the recipe can be improved.

    image

    Note: throughout the program there are Message Dialog boxes (as shown above) that tell the user whether the recipe has been successfully (or not) edited, added or removed.

    Finally, in order to remove a recipe, the following window would be displayed. Where you can either delete a single recipe, or the entire category.

    image

    The recipe database is handled in the most robust way: with plain text files, obviously.

    As always, hope you had a nice read.

    - - +

    Minion Recipes Program

    · 3 min read


    In this blogpost, I share how I developed a program to help my mum manage her recipes. The program allows for adding, editing, and removing recipes, and even includes fun minion icons.

    The open source code is available here.

    Once I developed the Housebills program, I really enjoyed the feeling of being able to create usable software from scratch. Therefore, that year during Christmas, I wanted to challenge myself to see if I could find any interesting project to do in only 1 week.

    I started by nagging my dad and brother for them to tell me something that would be useful to them in their daily lives. Sadly, none of them had any idea. Then, I went to the kitchen to ask my mum the same. She was busy searching recipes for xmas on her messy notebook, so she also said no.

    I sat there next to her thinking about what I could do, while she kept on going back and forth in her notebook searching. I don’t know if she had been reading about the binary search algorithm, or if she was just opening pages randomly. What I know is that 1 week later I did a program for her to keep her recipes. Safe to say that I saved Christmas, I guess.

    Note: Before the end of that year, I still upgraded the software for its version 2.0, which included more than 20 minion icons. To this day, I think she opens the program to see the minion icons more than the recipes themselves.

    Below it displays the interfaces used, and these correspond to: Red-Visualize; Add; Blue-Add; Green-Edit; and Yellow-Remove recipes.

    image

    PS: Any resemblance with the Microsoft colour scheme is pure coincidence eheh.

    When adding a recipe, the following window will be displayed.

    image

    This allows you to add both a recipe, and a category (i.e. the “Tiramisu” recipe would be within “Desserts” category).

    The recipe content would include:

    • Name of the recipe
    • Ingredients
    • Preparation
    • Comment

    When visualising a recipe, the following window will be displayed.

    image

    Where the recipe dialog box would prompt the recipes based on the category chosen on its left. Then, after selecting a recipe, the ingredients, preparation and comment would be filled out.

    When editing a recipe, the following window will be displayed. This is similar to the visualisation window, with the difference that the text boxes are editable, and therefore, the recipe can be improved.

    image

    Note: throughout the program there are Message Dialog boxes (as shown above) that tell the user whether the recipe has been successfully (or not) edited, added or removed.

    Finally, in order to remove a recipe, the following window would be displayed. Where you can either delete a single recipe, or the entire category.

    image

    The recipe database is handled in the most robust way: with plain text files, obviously.

    As always, hope you had a nice read.

    + + \ No newline at end of file diff --git a/blog/momentum-football-bets/index.html b/blog/momentum-football-bets/index.html index ac99d295a1..901850b441 100644 --- a/blog/momentum-football-bets/index.html +++ b/blog/momentum-football-bets/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Momentum Football Bets

    · 4 min read


    In this blogpost, I share how I developed an automated task to estimate the momentum of football teams for betting purposes using Beautiful Soup and Python.

    The open source code is available here.

    This Easter, I spoke with my girlfriend’s father and there were several football matches happening that weekend, he started talking about betting on some of those matches.

    He carried on to explain me his betting routine, which consisted of:

    1. Checking the next fixtures for a specific competition: https://www.skysports.com/premier-league-fixtures
    2. Checking the last results of each of the team and “estimate” their momentum (e.g. https://www.skysports.com/football/wolverhampton-wanderers-vs-liverpool/stats/429116)

    Then, iterate these 2 steps for all the fixtures happening, from Premier League, Championship, League One, and League Two.

    Since I recently learned how to use Beautiful Soup to scrap data from web pages (see GamestonkTerminal), I thought that I could create an automated task that would do all of these steps with a simple double click executable. After checking that I could extract such data from SkySports, I let him know that by the next day I would have something working.

    After dinner, I started working on the project, and before I went to sleep I had the first prototype working, which you can see in here.

    On top of “his” automated task, I created a “momentum score” which tries to estimate the momentum score based on what my girlfriend’s father told me that he does. He looks into the last games of the team and see if they have a positive momentum by looking to see if they come from a winning series.

    So, I thought it would be good to attribute a weight to each of the last matches where the most recent match would have the biggest weight, and last one from the 6 provided from SkySports stats would have the lowest weight. Together with this weight, I thought we could use the sum of the weight to the score in case of a win, subtract in case of loss, and don’t do anything in case of a draw.

    So, in simple terms, if score is positive the team is likely to have been winning their last matches, if score is negative the team is likely to have loss their last matches.

    But then, I thought:

    “Ok, this is nice. But when you bet, you don’t bet on a single team, but on the result between the 2 teams that are playing each other.” I.e. if team A has an amazing momentum, and so has team B, the bet will — in theory — be risky.

    Hence, the next step was to address this concern. This was done by checking the momentum score difference between the teams, the bigger the momentum score, the less risky — in theory — a bet would be. What we want to see is a team that has been doing amazing for the past 6 games, and one that has been performing consistently bad.

    Lastly, I added a confidence filter so that the terminal would only output the games that shown at least a certain X confidence. And also, an argument that would select the number of days in the future that we could look for fixtures.

    After having this implemented, the day after was about polishing the code, adding some colouring and emojis, creating a repository for it, a README, discussing the binning of the momentum score and bet confidence terms, creating a logo for it, and creating an executable + adding the logo which my girlfriend did.

    image

    After this, we were quite excited to backtest the app. We filtered the next features with a big confidence bet score (to have less risk), and put 20 pounds on 3 different accumulators. And it’s gone.

    Hope you had a good read. Feedback is always appreciated.

    - - +

    Momentum Football Bets

    · 4 min read


    In this blogpost, I share how I developed an automated task to estimate the momentum of football teams for betting purposes using Beautiful Soup and Python.

    The open source code is available here.

    This Easter, I spoke with my girlfriend’s father and there were several football matches happening that weekend, he started talking about betting on some of those matches.

    He carried on to explain me his betting routine, which consisted of:

    1. Checking the next fixtures for a specific competition: https://www.skysports.com/premier-league-fixtures
    2. Checking the last results of each of the team and “estimate” their momentum (e.g. https://www.skysports.com/football/wolverhampton-wanderers-vs-liverpool/stats/429116)

    Then, iterate these 2 steps for all the fixtures happening, from Premier League, Championship, League One, and League Two.

    Since I recently learned how to use Beautiful Soup to scrap data from web pages (see GamestonkTerminal), I thought that I could create an automated task that would do all of these steps with a simple double click executable. After checking that I could extract such data from SkySports, I let him know that by the next day I would have something working.

    After dinner, I started working on the project, and before I went to sleep I had the first prototype working, which you can see in here.

    On top of “his” automated task, I created a “momentum score” which tries to estimate the momentum score based on what my girlfriend’s father told me that he does. He looks into the last games of the team and see if they have a positive momentum by looking to see if they come from a winning series.

    So, I thought it would be good to attribute a weight to each of the last matches where the most recent match would have the biggest weight, and last one from the 6 provided from SkySports stats would have the lowest weight. Together with this weight, I thought we could use the sum of the weight to the score in case of a win, subtract in case of loss, and don’t do anything in case of a draw.

    So, in simple terms, if score is positive the team is likely to have been winning their last matches, if score is negative the team is likely to have loss their last matches.

    But then, I thought:

    “Ok, this is nice. But when you bet, you don’t bet on a single team, but on the result between the 2 teams that are playing each other.” I.e. if team A has an amazing momentum, and so has team B, the bet will — in theory — be risky.

    Hence, the next step was to address this concern. This was done by checking the momentum score difference between the teams, the bigger the momentum score, the less risky — in theory — a bet would be. What we want to see is a team that has been doing amazing for the past 6 games, and one that has been performing consistently bad.

    Lastly, I added a confidence filter so that the terminal would only output the games that shown at least a certain X confidence. And also, an argument that would select the number of days in the future that we could look for fixtures.

    After having this implemented, the day after was about polishing the code, adding some colouring and emojis, creating a repository for it, a README, discussing the binning of the momentum score and bet confidence terms, creating a logo for it, and creating an executable + adding the logo which my girlfriend did.

    image

    After this, we were quite excited to backtest the app. We filtered the next features with a big confidence bet score (to have less risk), and put 20 pounds on 3 different accumulators. And it’s gone.

    Hope you had a good read. Feedback is always appreciated.

    + + \ No newline at end of file diff --git a/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminal/index.html b/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminal/index.html index 75444e8248..0725f2f7f3 100644 --- a/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminal/index.html +++ b/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminal/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Move over Bloomberg Terminal, here comes Gamestonk Terminal

    · 3 min read


    In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    Hey all,

    2 months ago I made a terminal that I had been working on my spare time, to help me on my stock research, open-source. See here.

    The motto

    Gamestonk Terminal provides a modern Python-based integrated environment for investment research, that allows the average joe retail trader to leverage state-of-the-art Data Science and Machine Learning technologies.

    As a modern Python-based environment, Gamestonk Terminal opens access to numerous Python data libraries in Data Science (Pandas, Numpy, Scipy, Jupyter), Machine Learning (Pytorch, Tensorflow, Sklearn, Flair), and Data Acquisition (Beautiful Soup, and numerous third-party APIs).

    As of today, and thanks to all your help and the traction created around it, the terminal is looking better than ever. Now it’s no longer only me taking care of the repo, but also 2 other experienced devs, who are adding features on a daily basis and increasing the robustness of the codebase. Feel free to wander through the FEATURES page to see what you would get out of this tool!

    If some of you thought it was amazing 2 months ago, you won’t believe what it looks like now. You can check out the ROADMAP for all the features that have been added since, but let me list some of them:

    • New Screener for stocks, which allows users to save their presets and share them
    • New Options menu
    • New Comparison Analysis to compare several tickers in their historical price, sentiment, or fundamental analysis
    • New Portfolio Optimisation that assigns stocks weights based on risk level specified by the user
    • New Exploratory Data Analysis menu that looks at historical data from a statistic point of view
    • New Residual Analysis after using a statistical model for prediction
    • New menu to provide access to your portfolio (supports Robinhood, Ally invest, Alpaca, and Degiro)
    • New Cryptocurrency, Forex, and FRED menus
    • Prediction with backtesting
    • Technical analysis that includes a score and a summary
    • Due Diligence menu with data from Dark Pools, and also Failure to Deliver
    • Sentiment analysis from news provided from collaboration with a company that provides this feature paid. Free for us!

    As always feedback is appreciated, and contributions even more so!

    Let’s try to reduce the gap between the amount of information that the Hedge Funds have access to in comparison with the usual retail trader.

    Bloomberg Terminal, we’re coming for you.

    Feel free to join our discord at https://discord.gg/Up2QGbMKHY.

    - - +

    Move over Bloomberg Terminal, here comes Gamestonk Terminal

    · 3 min read


    In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    Hey all,

    2 months ago I made a terminal that I had been working on my spare time, to help me on my stock research, open-source. See here.

    The motto

    Gamestonk Terminal provides a modern Python-based integrated environment for investment research, that allows the average joe retail trader to leverage state-of-the-art Data Science and Machine Learning technologies.

    As a modern Python-based environment, Gamestonk Terminal opens access to numerous Python data libraries in Data Science (Pandas, Numpy, Scipy, Jupyter), Machine Learning (Pytorch, Tensorflow, Sklearn, Flair), and Data Acquisition (Beautiful Soup, and numerous third-party APIs).

    As of today, and thanks to all your help and the traction created around it, the terminal is looking better than ever. Now it’s no longer only me taking care of the repo, but also 2 other experienced devs, who are adding features on a daily basis and increasing the robustness of the codebase. Feel free to wander through the FEATURES page to see what you would get out of this tool!

    If some of you thought it was amazing 2 months ago, you won’t believe what it looks like now. You can check out the ROADMAP for all the features that have been added since, but let me list some of them:

    • New Screener for stocks, which allows users to save their presets and share them
    • New Options menu
    • New Comparison Analysis to compare several tickers in their historical price, sentiment, or fundamental analysis
    • New Portfolio Optimisation that assigns stocks weights based on risk level specified by the user
    • New Exploratory Data Analysis menu that looks at historical data from a statistic point of view
    • New Residual Analysis after using a statistical model for prediction
    • New menu to provide access to your portfolio (supports Robinhood, Ally invest, Alpaca, and Degiro)
    • New Cryptocurrency, Forex, and FRED menus
    • Prediction with backtesting
    • Technical analysis that includes a score and a summary
    • Due Diligence menu with data from Dark Pools, and also Failure to Deliver
    • Sentiment analysis from news provided from collaboration with a company that provides this feature paid. Free for us!

    As always feedback is appreciated, and contributions even more so!

    Let’s try to reduce the gap between the amount of information that the Hedge Funds have access to in comparison with the usual retail trader.

    Bloomberg Terminal, we’re coming for you.

    Feel free to join our discord at https://discord.gg/Up2QGbMKHY.

    + + \ No newline at end of file diff --git a/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cards/index.html b/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cards/index.html index f692daece9..6b339217f4 100644 --- a/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cards/index.html +++ b/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cards/index.html @@ -10,13 +10,13 @@ - - + +
    -

    My journey of memorising a deck of 52 shuffled cards

    · 10 min read


    In this blogpost, I share my journey of memorising a deck of 52 shuffled cards using the PAO system and Memory Palace technique.

    A few years back, I wanted to read a book about memory and found the best-selling book “Moonwalking with Einstein: The Art and Science of Remembering Everything” an ideal choice. I won’t go into too much detail about the book which is a great read, if you don’t trust me, trust Bill Gates, who called the book “absolutely phenomenal”. But let me give you a brief sequence of events from the author and journalist of the book, Joshua Foer:

    • It starts by observing the extraordinary accomplishments of mental athletes at a memory championship.
    • Foer meets Tony Buzan, the trim 67-year-old English self-help guru who founded the World Memory Championships in 1991 and who insists the brain is “like a muscle”: exercise it and it gets stronger.
    • Foer learns the art of memory training.
    • He practices his memory muscles for 1 year with help of a shambling 24-year-old from Oxford who becomes his mentor.
    • He then finds himself in the finals of the US Memory Championships, alongside ‘mental athletes’ who could memorise the precise order of ten shuffled decks of cards in under an hour.

    If you’re interested, here’s a nice review on the book.

    My thoughts after reading book

    After finishing this book, more than anything I was curious. Unlike Joshua Foer, I didn’t want to dedicate a full year to the cause, but I still wanted to give it a go so I could look back and think: “Here’s something pretty useless for the day-to-day. Yet, how cool is that I can memorise 52 random cards?”.

    image

    For people who know me, they know how much I hate to leave things unfinished. Whether that’s a task that I set myself, or ‘just’ not leaving any pizza leftover. Therefore, I knew that if I really wanted to do this, I’d have to set aside time for it, and so I did. The text under is my journey to memorise a shuffled deck of 52 cards.

    Technique (PAO + Memory Palace)

    The mnemonic “Memory Palace” technique that I was about to use was referred to on the aforementioned book. The ancient mnemonic technique was first practiced by Simonides of Ceos over 2,500 years ago. When googling the term, the definition is:

    A Memory Palace is an imaginary location in your mind where you can store mnemonic images. The most common type of memory palace involves making a journey through a place you know well, like a building or town. Along that journey there are specific locations that you always visit in the same order.

    The mnemonic images would be conceived using the famous PAO system. This term means:

    The Person-Action-Object System (or “PAO” System) is a popular method for memorising long random numbers and decks of playing cards. … Some people assign arbitrary images to the numbers without any phonetic conversion. The digits are usually chunked in 2 or 3 digits and then placed into loci in a Memory Palace.

    The idea is to take advantage of what we humans are best at, photographic memory.

    The journey of memorising a shuffled deck of 52 cards

    1. Create your own personal PAO system.

    For each card of the deck you have to have an associated Person, Action and Object. It’s useful to have the least possible rules, and have these intersecting simultaneous cards, so that there’s less to memorise. Here’s how I did it:

    • Define a category for each suit (e.g. Hearts represents friends)
    • Define something for each type.
      • From 1 to 10 I’ve defined the starting letter of the person (e.g. Card 7 represents a person with name starting with letter K or C).
      • For the court (Queen, Jack, King) I’ve defined them as a powerful male/female. (e.g. King is the GOAT of the category).

    Below you can see what the table looks like:

    image

    Note: The Person is the main existing link, hence it needs to be something that you think of immediately when the category and the type of the card is known.

    I had to change my cards several times as some of the PAO’s I had weren’t memorable enough, either because the name was too common, or because I didn’t relate that much to this person.

    2. Memorise each card with it’s PAO system

    Once the table above is filled in, the next step is to associate each card with it’s Person-Action-Object. I find that as long as you can remember the person name of the card by doing the cross between category and type, the action-object comes easily.

    For instance:

    image

    Jack ♦: Einstein — Writing Equations — Blackboard

    • When I see a Diamond, I know we are in the Celebrities category. Since this is a Jack I know it’s an important person. I’ve selected Musk to be my GOAT, so this has to be Einstein. The writing equations and blackboard comes trivially when thinking about Einstein.

    8 ♣: Floyd Mayweather — Skipping — Rope

    • When a Club appears, I know we are in the Athletes category. Since this is an 8 I know the name starts with an F or V. This promptly reminds me of Floyd. The skipping and rope come immediately, due to my own personal experiences from improving my skipping skills and looking at videos of Mayweather. I find that the more the personal and creative you get with this, the easier it is to remember.

    King ♠: Goku — Powering up — Blonde Hair

    • If I see a Spade, I know we are in the Cartoon category. Since this is a King I know that this character is the GOAT. Which immediately triggers my brain to Goku, since it used to be my favourite cartoon as a kid. Trivially, comes the powering up as action, and the blonde hair as object.

    In order to remember all the cards, my trick was to have a deck of cards where on the back of each card I wrote its own PAO. So that if I didn’t remember, instead of looking at the table, I could look at the back of the card. However, I find it important to sometimes not quit trying to remember immediately, as when you initially struggle to remember a card, when you eventually do, your brain retains this information so much better.

    Note: At this step you may realise that you keep forgetting the same PAO card. I recommend you going back to step 1 and re-defining it. Once I did this to the cards I kept forgetting, I was in a much better position.

    3. Create your own memory palace

    This is the easiest step. I used the house I grew up in in Portugal, and decided to place 4 PAO instruments (i.e. 12 cards) per house division. Meaning that by the time I was in the first room upstairs, I was already 36 cards down the deck.

    Since I’m not living in Portugal, let me show you what I mean by using a picture of my current living room in London. The spots I would select in here would have been: 1. Top of table with candles; 2. Top of side table; 3. Inside my gecko’s vivarium; 4. As a program on the TV.

    image

    Note: Make sure you always remember your memory palace spots, otherwise you may overlook them once looking for the next 3 set of cards. The way I think about this is imagining that I lost my keys, and mentally going back in time to try to understand where they could be.

    4. Practice memorising each set of 3 cards PAO

    This is where the creativity comes in. When picking 3 cards from the deck, you picture the Person of the 1st card, the Action of the 2nd one, and the Object of the 3rd one.

    Let’s imagine we’ve got the cards aforementioned.

    - Card 1: Jack ♦

    • Einstein — Writing Equations — Blackboard

    - Card 2: 8 ♣

    • Floyd Mayweather — Skipping — Rope

    - Card 3: King ♠

    • Goku — Powering up — Blonde Hair

    In my brain, this would lead to

    image

    Note: At this point you may realise that some combos of cards don’t work well together. If this is bad enough to not make you remember the 3 card PAO, I recommend updating your PAO system to something that’s easier to generalise.

    5. Place each 3 cards PAO onto the memory palace

    For instance, if I were to place the Einstein Skipping with Blonde Hair on the 3rd spot of my living room (my gecko’s vivarium), in my head, I would picture something like this:

    image

    Note: I recommend trying to have the 3 card PAO interacting with the environment to improve memory. In this case, I would have thought about the Blonde Skipping Einstein having to do skipping so fast that the gecko coudn’t come close because the rope was going too fast. The more original/different, the more chances you have to remember this scenario.

    6. Re-iterate the memory palace with new 3 card PAO every time

    Instead of memorising a new 3 card PAO in a memory palace location and then moving on, I always go back to the start and think about all the previous 3 card PAO’s from start. This will ensure you don’t forget the oldest 3 card PAO. In fact, it will make it so that the oldest 3 card PAO are repeated more times than the newer ones, so it’s all balanced out.

    7. Practice and Practice

    I found out that after memorising my PAO system (which took a long time) and the memory palace, it was fairly easy to memorise the shuffled 52 deck of cards. However, it was taking me way too long to memorise it AND say it out loud.

    Once I started practicing more and more time started decreasing. The last time I tried, I managed to do it under 10 minutes, which is not great but I’ll take it. As I mentioned, I just wanted to be able to do it, I didn’t care much about the time.

    Also, I still needed to think about the category + type of the card every-time, I think the time to memorise the deck of cards decreases exponentially once you actually associate each card image to it’s PAO. But for that you need to practice more, which for me was getting boring.

    ...

    This is a different post than the ones I usually do, but I find it extremely interesting. Hence why I was keen on sharing it.

    Let me know if you’ve heard about it, or want to give this a go.

    Thanks for reading!

    - - +

    My journey of memorising a deck of 52 shuffled cards

    · 10 min read


    In this blogpost, I share my journey of memorising a deck of 52 shuffled cards using the PAO system and Memory Palace technique.

    A few years back, I wanted to read a book about memory and found the best-selling book “Moonwalking with Einstein: The Art and Science of Remembering Everything” an ideal choice. I won’t go into too much detail about the book which is a great read, if you don’t trust me, trust Bill Gates, who called the book “absolutely phenomenal”. But let me give you a brief sequence of events from the author and journalist of the book, Joshua Foer:

    • It starts by observing the extraordinary accomplishments of mental athletes at a memory championship.
    • Foer meets Tony Buzan, the trim 67-year-old English self-help guru who founded the World Memory Championships in 1991 and who insists the brain is “like a muscle”: exercise it and it gets stronger.
    • Foer learns the art of memory training.
    • He practices his memory muscles for 1 year with help of a shambling 24-year-old from Oxford who becomes his mentor.
    • He then finds himself in the finals of the US Memory Championships, alongside ‘mental athletes’ who could memorise the precise order of ten shuffled decks of cards in under an hour.

    If you’re interested, here’s a nice review on the book.

    My thoughts after reading book

    After finishing this book, more than anything I was curious. Unlike Joshua Foer, I didn’t want to dedicate a full year to the cause, but I still wanted to give it a go so I could look back and think: “Here’s something pretty useless for the day-to-day. Yet, how cool is that I can memorise 52 random cards?”.

    image

    For people who know me, they know how much I hate to leave things unfinished. Whether that’s a task that I set myself, or ‘just’ not leaving any pizza leftover. Therefore, I knew that if I really wanted to do this, I’d have to set aside time for it, and so I did. The text under is my journey to memorise a shuffled deck of 52 cards.

    Technique (PAO + Memory Palace)

    The mnemonic “Memory Palace” technique that I was about to use was referred to on the aforementioned book. The ancient mnemonic technique was first practiced by Simonides of Ceos over 2,500 years ago. When googling the term, the definition is:

    A Memory Palace is an imaginary location in your mind where you can store mnemonic images. The most common type of memory palace involves making a journey through a place you know well, like a building or town. Along that journey there are specific locations that you always visit in the same order.

    The mnemonic images would be conceived using the famous PAO system. This term means:

    The Person-Action-Object System (or “PAO” System) is a popular method for memorising long random numbers and decks of playing cards. … Some people assign arbitrary images to the numbers without any phonetic conversion. The digits are usually chunked in 2 or 3 digits and then placed into loci in a Memory Palace.

    The idea is to take advantage of what we humans are best at, photographic memory.

    The journey of memorising a shuffled deck of 52 cards

    1. Create your own personal PAO system.

    For each card of the deck you have to have an associated Person, Action and Object. It’s useful to have the least possible rules, and have these intersecting simultaneous cards, so that there’s less to memorise. Here’s how I did it:

    • Define a category for each suit (e.g. Hearts represents friends)
    • Define something for each type.
      • From 1 to 10 I’ve defined the starting letter of the person (e.g. Card 7 represents a person with name starting with letter K or C).
      • For the court (Queen, Jack, King) I’ve defined them as a powerful male/female. (e.g. King is the GOAT of the category).

    Below you can see what the table looks like:

    image

    Note: The Person is the main existing link, hence it needs to be something that you think of immediately when the category and the type of the card is known.

    I had to change my cards several times as some of the PAO’s I had weren’t memorable enough, either because the name was too common, or because I didn’t relate that much to this person.

    2. Memorise each card with it’s PAO system

    Once the table above is filled in, the next step is to associate each card with it’s Person-Action-Object. I find that as long as you can remember the person name of the card by doing the cross between category and type, the action-object comes easily.

    For instance:

    image

    Jack ♦: Einstein — Writing Equations — Blackboard

    • When I see a Diamond, I know we are in the Celebrities category. Since this is a Jack I know it’s an important person. I’ve selected Musk to be my GOAT, so this has to be Einstein. The writing equations and blackboard comes trivially when thinking about Einstein.

    8 ♣: Floyd Mayweather — Skipping — Rope

    • When a Club appears, I know we are in the Athletes category. Since this is an 8 I know the name starts with an F or V. This promptly reminds me of Floyd. The skipping and rope come immediately, due to my own personal experiences from improving my skipping skills and looking at videos of Mayweather. I find that the more the personal and creative you get with this, the easier it is to remember.

    King ♠: Goku — Powering up — Blonde Hair

    • If I see a Spade, I know we are in the Cartoon category. Since this is a King I know that this character is the GOAT. Which immediately triggers my brain to Goku, since it used to be my favourite cartoon as a kid. Trivially, comes the powering up as action, and the blonde hair as object.

    In order to remember all the cards, my trick was to have a deck of cards where on the back of each card I wrote its own PAO. So that if I didn’t remember, instead of looking at the table, I could look at the back of the card. However, I find it important to sometimes not quit trying to remember immediately, as when you initially struggle to remember a card, when you eventually do, your brain retains this information so much better.

    Note: At this step you may realise that you keep forgetting the same PAO card. I recommend you going back to step 1 and re-defining it. Once I did this to the cards I kept forgetting, I was in a much better position.

    3. Create your own memory palace

    This is the easiest step. I used the house I grew up in in Portugal, and decided to place 4 PAO instruments (i.e. 12 cards) per house division. Meaning that by the time I was in the first room upstairs, I was already 36 cards down the deck.

    Since I’m not living in Portugal, let me show you what I mean by using a picture of my current living room in London. The spots I would select in here would have been: 1. Top of table with candles; 2. Top of side table; 3. Inside my gecko’s vivarium; 4. As a program on the TV.

    image

    Note: Make sure you always remember your memory palace spots, otherwise you may overlook them once looking for the next 3 set of cards. The way I think about this is imagining that I lost my keys, and mentally going back in time to try to understand where they could be.

    4. Practice memorising each set of 3 cards PAO

    This is where the creativity comes in. When picking 3 cards from the deck, you picture the Person of the 1st card, the Action of the 2nd one, and the Object of the 3rd one.

    Let’s imagine we’ve got the cards aforementioned.

    - Card 1: Jack ♦

    • Einstein — Writing Equations — Blackboard

    - Card 2: 8 ♣

    • Floyd Mayweather — Skipping — Rope

    - Card 3: King ♠

    • Goku — Powering up — Blonde Hair

    In my brain, this would lead to

    image

    Note: At this point you may realise that some combos of cards don’t work well together. If this is bad enough to not make you remember the 3 card PAO, I recommend updating your PAO system to something that’s easier to generalise.

    5. Place each 3 cards PAO onto the memory palace

    For instance, if I were to place the Einstein Skipping with Blonde Hair on the 3rd spot of my living room (my gecko’s vivarium), in my head, I would picture something like this:

    image

    Note: I recommend trying to have the 3 card PAO interacting with the environment to improve memory. In this case, I would have thought about the Blonde Skipping Einstein having to do skipping so fast that the gecko coudn’t come close because the rope was going too fast. The more original/different, the more chances you have to remember this scenario.

    6. Re-iterate the memory palace with new 3 card PAO every time

    Instead of memorising a new 3 card PAO in a memory palace location and then moving on, I always go back to the start and think about all the previous 3 card PAO’s from start. This will ensure you don’t forget the oldest 3 card PAO. In fact, it will make it so that the oldest 3 card PAO are repeated more times than the newer ones, so it’s all balanced out.

    7. Practice and Practice

    I found out that after memorising my PAO system (which took a long time) and the memory palace, it was fairly easy to memorise the shuffled 52 deck of cards. However, it was taking me way too long to memorise it AND say it out loud.

    Once I started practicing more and more time started decreasing. The last time I tried, I managed to do it under 10 minutes, which is not great but I’ll take it. As I mentioned, I just wanted to be able to do it, I didn’t care much about the time.

    Also, I still needed to think about the category + type of the card every-time, I think the time to memorise the deck of cards decreases exponentially once you actually associate each card image to it’s PAO. But for that you need to practice more, which for me was getting boring.

    ...

    This is a different post than the ones I usually do, but I find it extremely interesting. Hence why I was keen on sharing it.

    Let me know if you’ve heard about it, or want to give this a go.

    Thanks for reading!

    + + \ No newline at end of file diff --git a/blog/neistpoint-project/index.html b/blog/neistpoint-project/index.html index c5623d956e..17e91c2b95 100644 --- a/blog/neistpoint-project/index.html +++ b/blog/neistpoint-project/index.html @@ -10,13 +10,13 @@ - - + +
    -

    NeistPoint Project

    · 4 min read


    In this blogpost, I share my journey of starting a sustainable clothing brand, managing the project, and developing a stock management tool in C++.

    The open source code is available here.

    Context

    More than 2 years ago, me and some friends started a clothing brand - NeistPoint. The logo and name is inspired by the Neist Point Lighthouse in the Isle of Skye. The motto was “For a greener future and a bluer ocean”, and the goal was to raise awareness to contribute for a sustainable environment.

    At Neist, we tried to not be yet another clothing brand, but actually to fill the current gap in the retail industry by producing high-quality, eco-friendly clothes at affordable prices. And we achieved that. For instance, our t-shirts are made of 100% organic ring-spun combed cotton, and they last longer than my Lacoste t-shirts — seriously.

    The problem is that to be profitable, you need to either increase the prices of your products, or decrease the quality, which were not things we wanted to do since they didn’t represent the value of our brand. Due to that, and the fact that the team behind our brand no longer has time/resources, we’re dropping our last ever season now.

    Anyway, no regrets from my side, it has been a great learning experience to understand what is involved around the creation of a brand, being a project manager internally, and doing something other than coding in my spare time. Also, most importantly, ending up with a full new wardrobe of pieces that I love and that will probably last for my kids.

    Sorry for this rambling, just wanted to share this context with everyone.

    Implementation

    Given that our team had no experience in clothing whatsoever, and based on our needs, our steps to make this a high-quality product were:

    1. Get the best (environmentaly friendly) clothing material
    2. Send it to the best embroidery store in Portugal
    3. Package it and forward it onto the customer

    image

    This process was far from being optimised. In fact, pretty much everything was manual. Apart from the creation of the clothes. Therefore, we needed a Software to keep track of the products at each of it’s stages: material to request, material shipping, material in stock, product to create, product creating, product in stock, and product sent.

    Since I didn’t find anything that I liked online, and I knew how to code, I thought the best solution was to develop something myself. This way it could be adapted to perfectly fit my own requirements (advantages of being your own product owner eheh). In addition, I wanted to improve my C++ skills, so I thought, why not?

    image

    For 1 week or so, during my commute I worked on the NeistPoint Stock Managemen tool. To be honest, I think it took longer to devise the architecture behind it than to actually write the code, as there were lots of things that I wanted to be taken into account. Also, the fact that the “database” is a .csv file, was intentional. This way, we could share this file between the team members.

    Hope someone finds this tool interesting, and gets inspired to develop their own software to meet their own project requirements. In the meantime, feel free to check us one last time on our website or instagram. You may even spot me in some of the pictures!

    The repository for the code can be found here: https://github.com/DidierRLopes/NeistpointCLI

    Thanks for reading, as always!

    - - +

    NeistPoint Project

    · 4 min read


    In this blogpost, I share my journey of starting a sustainable clothing brand, managing the project, and developing a stock management tool in C++.

    The open source code is available here.

    Context

    More than 2 years ago, me and some friends started a clothing brand - NeistPoint. The logo and name is inspired by the Neist Point Lighthouse in the Isle of Skye. The motto was “For a greener future and a bluer ocean”, and the goal was to raise awareness to contribute for a sustainable environment.

    At Neist, we tried to not be yet another clothing brand, but actually to fill the current gap in the retail industry by producing high-quality, eco-friendly clothes at affordable prices. And we achieved that. For instance, our t-shirts are made of 100% organic ring-spun combed cotton, and they last longer than my Lacoste t-shirts — seriously.

    The problem is that to be profitable, you need to either increase the prices of your products, or decrease the quality, which were not things we wanted to do since they didn’t represent the value of our brand. Due to that, and the fact that the team behind our brand no longer has time/resources, we’re dropping our last ever season now.

    Anyway, no regrets from my side, it has been a great learning experience to understand what is involved around the creation of a brand, being a project manager internally, and doing something other than coding in my spare time. Also, most importantly, ending up with a full new wardrobe of pieces that I love and that will probably last for my kids.

    Sorry for this rambling, just wanted to share this context with everyone.

    Implementation

    Given that our team had no experience in clothing whatsoever, and based on our needs, our steps to make this a high-quality product were:

    1. Get the best (environmentaly friendly) clothing material
    2. Send it to the best embroidery store in Portugal
    3. Package it and forward it onto the customer

    image

    This process was far from being optimised. In fact, pretty much everything was manual. Apart from the creation of the clothes. Therefore, we needed a Software to keep track of the products at each of it’s stages: material to request, material shipping, material in stock, product to create, product creating, product in stock, and product sent.

    Since I didn’t find anything that I liked online, and I knew how to code, I thought the best solution was to develop something myself. This way it could be adapted to perfectly fit my own requirements (advantages of being your own product owner eheh). In addition, I wanted to improve my C++ skills, so I thought, why not?

    image

    For 1 week or so, during my commute I worked on the NeistPoint Stock Managemen tool. To be honest, I think it took longer to devise the architecture behind it than to actually write the code, as there were lots of things that I wanted to be taken into account. Also, the fact that the “database” is a .csv file, was intentional. This way, we could share this file between the team members.

    Hope someone finds this tool interesting, and gets inspired to develop their own software to meet their own project requirements. In the meantime, feel free to check us one last time on our website or instagram. You may even spot me in some of the pictures!

    The repository for the code can be found here: https://github.com/DidierRLopes/NeistpointCLI

    Thanks for reading, as always!

    + + \ No newline at end of file diff --git a/blog/openbb-2-year-anniversary/index.html b/blog/openbb-2-year-anniversary/index.html index 7bc5a96124..68416560f0 100644 --- a/blog/openbb-2-year-anniversary/index.html +++ b/blog/openbb-2-year-anniversary/index.html @@ -10,13 +10,13 @@ - - + +
    -

    OpenBB 2 year anniversary

    · 3 min read


    Two years of OpenBB: A look back at our achievements and growth in the world of open-source finance.

    Today is OpenBB 2 years anniversary of our incorporation. So it’s important to look back and understand the magnitude of what we achieved in 24 months.

    In that time we’ve had:

    • 100k+ downloads of our installer since we started tracking it
    • 2.5M bot commands have been run on Discord and Telegram from over 40k users
    • GitHub project grew from 8k stars to 23k+, becoming #1 open source project in the topic of finance
    • Our Discord group grew from 1k users to 13k+
    • Our SDK has been pip installed over 25k times
    • Our team grew from 3 to 19 around the globe
    • For more, see http://openbb.co/open

    But where were we 2 years ago?

    • Only Gamestonk Terminal, the name OpenBB only appeared when we came out of stealth mode in March 2022
    • No OpenBB Hub (only launched in May 2023)
    • No OpenBB SDK (only launched in Dec 2022)
    • No OpenBB Bot (only launched in July 2022)
    • No Terminal Pro or Excel Add-In early alpha (development started in 2023)
    • No SDK v4 which allows community and data providers to build their own data connectors, easily (to be announced soon)
    • No community routines — our first feature aimed at community with upvoting and sharing of routines
    • No open source PyWry — A web-view rendering library in python we open source in Feb 2023
    • No OpenBB Champions — Our way to highlight users that do impressive work on top of our ecosystem
    • No partnerships with universities, financial societies or investment clubs
    • No partnerships with data vendors — now we have close relationships with most vendors you would know

    If we only focus on where Gamestonk Terminal was 2 years ago we had:

    • Static charts using matplotlib (Interactive ones using PyWry was launched in May 2023)
    • No way for users to run routines from other users from the terminal directly (launched 3 days ago)
    • No AskOBB feature with LlamaIndex (launched in June 2023)
    • No way for users to customise the terminal, select default data sources and set their API keys — all from the Hub
    • No way to double click an installer and get started in a few minutes — hassle free
    • The documentation on markdown files across the repository, today people often praise our documentation in conversations
    • No AI features, no reports menu, no dashboards menu, no fixed income, no futures, …
    • And the OpenBB Terminal charts looked like this

    image

    Bill Gates said the famous saying:

    People overestimate what they can do in one year and underestimate what they can do in 10 years.


    In fast-paced startups, I think a better sentence would be, “People overestimate what they can do in one week and underestimate what they can do in 1 year”.

    Looking forward to continue building the future of investment research, we’re just getting started.

    PS: On a personal level within those 2 years: I quit my full-time job to build OpenBB, got 2 dogs, got married and moved to the Bay Area. Life is great ❤️

    - - +

    OpenBB 2 year anniversary

    · 3 min read


    Two years of OpenBB: A look back at our achievements and growth in the world of open-source finance.

    Today is OpenBB 2 years anniversary of our incorporation. So it’s important to look back and understand the magnitude of what we achieved in 24 months.

    In that time we’ve had:

    • 100k+ downloads of our installer since we started tracking it
    • 2.5M bot commands have been run on Discord and Telegram from over 40k users
    • GitHub project grew from 8k stars to 23k+, becoming #1 open source project in the topic of finance
    • Our Discord group grew from 1k users to 13k+
    • Our SDK has been pip installed over 25k times
    • Our team grew from 3 to 19 around the globe
    • For more, see http://openbb.co/open

    But where were we 2 years ago?

    • Only Gamestonk Terminal, the name OpenBB only appeared when we came out of stealth mode in March 2022
    • No OpenBB Hub (only launched in May 2023)
    • No OpenBB SDK (only launched in Dec 2022)
    • No OpenBB Bot (only launched in July 2022)
    • No Terminal Pro or Excel Add-In early alpha (development started in 2023)
    • No SDK v4 which allows community and data providers to build their own data connectors, easily (to be announced soon)
    • No community routines — our first feature aimed at community with upvoting and sharing of routines
    • No open source PyWry — A web-view rendering library in python we open source in Feb 2023
    • No OpenBB Champions — Our way to highlight users that do impressive work on top of our ecosystem
    • No partnerships with universities, financial societies or investment clubs
    • No partnerships with data vendors — now we have close relationships with most vendors you would know

    If we only focus on where Gamestonk Terminal was 2 years ago we had:

    • Static charts using matplotlib (Interactive ones using PyWry was launched in May 2023)
    • No way for users to run routines from other users from the terminal directly (launched 3 days ago)
    • No AskOBB feature with LlamaIndex (launched in June 2023)
    • No way for users to customise the terminal, select default data sources and set their API keys — all from the Hub
    • No way to double click an installer and get started in a few minutes — hassle free
    • The documentation on markdown files across the repository, today people often praise our documentation in conversations
    • No AI features, no reports menu, no dashboards menu, no fixed income, no futures, …
    • And the OpenBB Terminal charts looked like this

    image

    Bill Gates said the famous saying:

    People overestimate what they can do in one year and underestimate what they can do in 10 years.


    In fast-paced startups, I think a better sentence would be, “People overestimate what they can do in one week and underestimate what they can do in 1 year”.

    Looking forward to continue building the future of investment research, we’re just getting started.

    PS: On a personal level within those 2 years: I quit my full-time job to build OpenBB, got 2 dogs, got married and moved to the Bay Area. Life is great ❤️

    + + \ No newline at end of file diff --git a/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family/index.html b/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family/index.html index 8d21d951ea..b10c1aed3b 100644 --- a/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family/index.html +++ b/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-family/index.html @@ -10,13 +10,13 @@ - - + +
    -

    OpenBB Bot - our new addition to the OpenBB open source family

    · 5 min read


    The OpenBB Bot is now open source. Check out our Discord Bot architecture now on GitHub.

    The open source code is available here.

    What is the OpenBB Bot, and why did we build it?

    When the OpenBB Terminal first went viral, users were writing online that one of the things missing from our product was a chat feature like other investment platforms provide.

    However, we didn’t understand why the chatting experience needed to be centralized in the application where users research their financial data. Plus, with the ever-growing userbase of apps like Discord, Telegram, Slack, and others, combined with their capabilities to build apps on top, we thought we could do more.

    We believe in a future where you can query financial data right from where you are. Meaning you can chat with colleagues, from any of the apps you’re already using.

    This is when we partnered with OptionsFamBot (the biggest Discord financial bot that was present in 15k+ servers, reaching 1 M+ users) to build the OpenBB Bot.

    You can read more about our launch in August 2022 here.

    Failing to monetize. Failing to grow user base.

    To provide OpenBB Bot users with access to 100+ financial commands (including expensive datasets such as the options and dark pool ones) we had to pay not just the data vendors but also for the display rights.

    This was relatively expensive, but we considered it a marketing cost since we expected exponential user growth. We expected that since the Bot could be deployed in any server in a few seconds, more users would be exposed to the Bot, bringing the Bot to other servers, and so on...

    However, that didn’t happen.

    In September 2022, Discord changed its command syntax to force commands to start with “/” and the user drop was noticeable.

    In the meantime, with the end of the Covid-19 Pandemic, people started leaving their houses more and spending less time with communities investing online. Other companies with financial bots were experiencing the same: investors spending less time talking about investing on apps like Discord.

    We saw a trend that these same companies started increasing their prices to balance out the number of users.

    This is when we went in the other direction: we upgraded our free tier package and decreased the price of our paid version. That announcement can be found here.

    This happened at the same time as we added more innovative features to the bot. Features that OpenBB brought to market, while other bots copied from us today.

    We created a codebase that was robust and scalable, but still flexible so that it could be quickly tweaked and deployed on other chatting apps.

    A couple of days after the price reduction, we announced OpenBB Bot for Telegram (read more about this announcement here).

    With the growth of Telegram users and crypto communities, we were well posed to capture that market.

    Or so we thought. But our growth never achieved the numbers we had initially estimated.

    Our conclusion is that the market for financial chatbots is much smaller than what we had originally forecasted. This also meant that our goal with the OpenBB Bot as a marketing tool wasn’t returning the ROI that we were expecting.

    So in May 2023 we went pretty much all-in on considering the OpenBB Bot as a marketing expense, and removed the individual paid tier. You can see that announcement here.

    Note that we maintained the control of the Billboard message. This is a feature that allows us to add OpenBB events and announcements to the top of these commands, hence increasing awareness. See below how it looks,

    However, even with that change and adding an AI feature to the OpenBB Bot, the user base never grew past what we had hoped.

    So we decided to open source the architecture behind the OpenBB Bot.

    Decision to open source

    When talking with Roberto Talamas (check out his OpenBB champion story), he mentioned that he was building his own financial chatbot for his fund from scratch.

    That was the trigger we needed to open source our architecture, so the “Robertos” of the world wouldn’t have to start building their chatbot from scratch, but could piggyback on our architecture, which just works (it has never been down since launch and processed over 2.75 M Discord requests).

    Since we failed to monetize the Bot, and our adoption trajectory never grew past our expectations, open-sourcing the architecture behind the OpenBB Bot made a ton of sense.

    This architecture utilizes data from the OpenBB platform (check out last week’s beta announcement) which means that developers can simultaneously get familiar with our platform while seeing how easy it is to pull financial data from OpenBB - effectively growing OpenBB’s ecosystem.

    I’m looking forward to seeing what products are built around the OpenBB Bot in the future.

    You can check the repository here.

    Welcome to the OpenBB open source family.

    - - +

    OpenBB Bot - our new addition to the OpenBB open source family

    · 5 min read


    The OpenBB Bot is now open source. Check out our Discord Bot architecture now on GitHub.

    The open source code is available here.

    What is the OpenBB Bot, and why did we build it?

    When the OpenBB Terminal first went viral, users were writing online that one of the things missing from our product was a chat feature like other investment platforms provide.

    However, we didn’t understand why the chatting experience needed to be centralized in the application where users research their financial data. Plus, with the ever-growing userbase of apps like Discord, Telegram, Slack, and others, combined with their capabilities to build apps on top, we thought we could do more.

    We believe in a future where you can query financial data right from where you are. Meaning you can chat with colleagues, from any of the apps you’re already using.

    This is when we partnered with OptionsFamBot (the biggest Discord financial bot that was present in 15k+ servers, reaching 1 M+ users) to build the OpenBB Bot.

    You can read more about our launch in August 2022 here.

    Failing to monetize. Failing to grow user base.

    To provide OpenBB Bot users with access to 100+ financial commands (including expensive datasets such as the options and dark pool ones) we had to pay not just the data vendors but also for the display rights.

    This was relatively expensive, but we considered it a marketing cost since we expected exponential user growth. We expected that since the Bot could be deployed in any server in a few seconds, more users would be exposed to the Bot, bringing the Bot to other servers, and so on...

    However, that didn’t happen.

    In September 2022, Discord changed its command syntax to force commands to start with “/” and the user drop was noticeable.

    In the meantime, with the end of the Covid-19 Pandemic, people started leaving their houses more and spending less time with communities investing online. Other companies with financial bots were experiencing the same: investors spending less time talking about investing on apps like Discord.

    We saw a trend that these same companies started increasing their prices to balance out the number of users.

    This is when we went in the other direction: we upgraded our free tier package and decreased the price of our paid version. That announcement can be found here.

    This happened at the same time as we added more innovative features to the bot. Features that OpenBB brought to market, while other bots copied from us today.

    We created a codebase that was robust and scalable, but still flexible so that it could be quickly tweaked and deployed on other chatting apps.

    A couple of days after the price reduction, we announced OpenBB Bot for Telegram (read more about this announcement here).

    With the growth of Telegram users and crypto communities, we were well posed to capture that market.

    Or so we thought. But our growth never achieved the numbers we had initially estimated.

    Our conclusion is that the market for financial chatbots is much smaller than what we had originally forecasted. This also meant that our goal with the OpenBB Bot as a marketing tool wasn’t returning the ROI that we were expecting.

    So in May 2023 we went pretty much all-in on considering the OpenBB Bot as a marketing expense, and removed the individual paid tier. You can see that announcement here.

    Note that we maintained the control of the Billboard message. This is a feature that allows us to add OpenBB events and announcements to the top of these commands, hence increasing awareness. See below how it looks,

    However, even with that change and adding an AI feature to the OpenBB Bot, the user base never grew past what we had hoped.

    So we decided to open source the architecture behind the OpenBB Bot.

    Decision to open source

    When talking with Roberto Talamas (check out his OpenBB champion story), he mentioned that he was building his own financial chatbot for his fund from scratch.

    That was the trigger we needed to open source our architecture, so the “Robertos” of the world wouldn’t have to start building their chatbot from scratch, but could piggyback on our architecture, which just works (it has never been down since launch and processed over 2.75 M Discord requests).

    Since we failed to monetize the Bot, and our adoption trajectory never grew past our expectations, open-sourcing the architecture behind the OpenBB Bot made a ton of sense.

    This architecture utilizes data from the OpenBB platform (check out last week’s beta announcement) which means that developers can simultaneously get familiar with our platform while seeing how easy it is to pull financial data from OpenBB - effectively growing OpenBB’s ecosystem.

    I’m looking forward to seeing what products are built around the OpenBB Bot in the future.

    You can check the repository here.

    Welcome to the OpenBB open source family.

    + + \ No newline at end of file diff --git a/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-data/index.html b/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-data/index.html index 4180acebe3..0d588c5a8c 100644 --- a/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-data/index.html +++ b/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-data/index.html @@ -10,13 +10,13 @@ - - + +
    -

    OpenBB Terminal 3.0 - a new interactive way to analyze data

    · 4 min read


    A game-changing update to OpenBB Terminal, introducing interactive charts and tables, empowering users with a new way to analyze data.

    The open source code is available here.

    Nothing has changed, yet everything is different. A game-changing update empowering users with interactive charts and tables

    Our commitment to listening to user feedback and continuously improving our platform has led to a major update that will revolutionize the way you analyze data.

    One of the main requests from our community has been regarding the interactivity of the charts and tables output by the OpenBB Terminal. We are happy to say that we have delivered on this request with a complete overhaul of the terminal plotting library.

    Not only that, but our engineering team wasn’t happy with the technical solutions available to bring interactivity to the terminal. So, in a true open-source fashion, the team built our own open-source library which will be announced soon.

    Interactive charts


    One of the most significant additions in this update is the introduction of interactive charts. Gone are the days of static data representations.

    With the OpenBB Terminal, you can now immerse yourself in a dynamic visual experience. Hover over specific data points to reveal detailed information, or effortlessly adjust the charts using intuitive pan and zoom capabilities. But that’s not all — our drawing tools and annotations allow you to highlight crucial data points and ranges, giving you complete control over your analysis.

    Through our user interviews, we discovered that many users faced challenges when overlaying financial time series. Taking this into account, we’ve designed our new charting feature to make this process seamless. With the ability to easily overlay time series data and combine it with our powerful data exporting capabilities, OpenBB Terminal empowers you to perform in-depth analysis with unparalleled ease and precision.

    Interactive tables


    We listened to our users’ concerns about readability when dealing with large tables, and we have addressed these challenges head-on. The OpenBB Terminal now boasts interactive tables that are as aesthetically pleasing as they are functional.

    Leveraging our innovative open-source project, we have crafted a state-of-the-art table that is easy on the eyes and effortlessly responsive. Sorting, filtering, and manipulating table data has never been easier. This game-changing feature enables you to quickly and efficiently extract insights from vast amounts of data, enhancing your productivity and saving valuable time.

    New fixed income menu


    In addition to the remarkable advancements in interactivity, we have squashed bugs and introduced a new Fixed Income menu. This means you now have access to an even wider range of data to fuel your analysis. OpenBB Terminal ensures that you are equipped with the right tools to gain a competitive edge in your investment research.

    Wrap up - embrace the future of data analysis

    We firmly believe that these new features will take your user experience to new heights and unlock a realm of possibilities for data analysis. Our dedicated team has poured countless hours into bringing these cutting-edge features to life, and we cannot wait to witness the impact they will have on your work.

    To further amplify our commitment to open source, we will open source a powerful project that taps into web browser functionality from Python, opening up endless opportunities for developers and data enthusiasts.

    We value your feedback and are eager to iterate on the OpenBB Terminal to ensure it meets your evolving needs. Reach out to us via email at hello@openbb.finance, Twitter, or Discord and let us know how we can enhance your experience further.

    If you missed our exciting webinar unveiling these transformative features, fear not! We’ve got you covered. Watch the video below to catch up and witness firsthand the incredible new capabilities our team has unleashed.


    Welcome to a new era of data analysis with OpenBB Terminal. Get ready to explore, discover, and gain a competitive edge like never before.

    - - +

    OpenBB Terminal 3.0 - a new interactive way to analyze data

    · 4 min read


    A game-changing update to OpenBB Terminal, introducing interactive charts and tables, empowering users with a new way to analyze data.

    The open source code is available here.

    Nothing has changed, yet everything is different. A game-changing update empowering users with interactive charts and tables

    Our commitment to listening to user feedback and continuously improving our platform has led to a major update that will revolutionize the way you analyze data.

    One of the main requests from our community has been regarding the interactivity of the charts and tables output by the OpenBB Terminal. We are happy to say that we have delivered on this request with a complete overhaul of the terminal plotting library.

    Not only that, but our engineering team wasn’t happy with the technical solutions available to bring interactivity to the terminal. So, in a true open-source fashion, the team built our own open-source library which will be announced soon.

    Interactive charts


    One of the most significant additions in this update is the introduction of interactive charts. Gone are the days of static data representations.

    With the OpenBB Terminal, you can now immerse yourself in a dynamic visual experience. Hover over specific data points to reveal detailed information, or effortlessly adjust the charts using intuitive pan and zoom capabilities. But that’s not all — our drawing tools and annotations allow you to highlight crucial data points and ranges, giving you complete control over your analysis.

    Through our user interviews, we discovered that many users faced challenges when overlaying financial time series. Taking this into account, we’ve designed our new charting feature to make this process seamless. With the ability to easily overlay time series data and combine it with our powerful data exporting capabilities, OpenBB Terminal empowers you to perform in-depth analysis with unparalleled ease and precision.

    Interactive tables


    We listened to our users’ concerns about readability when dealing with large tables, and we have addressed these challenges head-on. The OpenBB Terminal now boasts interactive tables that are as aesthetically pleasing as they are functional.

    Leveraging our innovative open-source project, we have crafted a state-of-the-art table that is easy on the eyes and effortlessly responsive. Sorting, filtering, and manipulating table data has never been easier. This game-changing feature enables you to quickly and efficiently extract insights from vast amounts of data, enhancing your productivity and saving valuable time.

    New fixed income menu


    In addition to the remarkable advancements in interactivity, we have squashed bugs and introduced a new Fixed Income menu. This means you now have access to an even wider range of data to fuel your analysis. OpenBB Terminal ensures that you are equipped with the right tools to gain a competitive edge in your investment research.

    Wrap up - embrace the future of data analysis

    We firmly believe that these new features will take your user experience to new heights and unlock a realm of possibilities for data analysis. Our dedicated team has poured countless hours into bringing these cutting-edge features to life, and we cannot wait to witness the impact they will have on your work.

    To further amplify our commitment to open source, we will open source a powerful project that taps into web browser functionality from Python, opening up endless opportunities for developers and data enthusiasts.

    We value your feedback and are eager to iterate on the OpenBB Terminal to ensure it meets your evolving needs. Reach out to us via email at hello@openbb.finance, Twitter, or Discord and let us know how we can enhance your experience further.

    If you missed our exciting webinar unveiling these transformative features, fear not! We’ve got you covered. Watch the video below to catch up and witness firsthand the incredible new capabilities our team has unleashed.


    Welcome to a new era of data analysis with OpenBB Terminal. Get ready to explore, discover, and gain a competitive edge like never before.

    + + \ No newline at end of file diff --git a/blog/ranking-99-mind-f-ck-movies/index.html b/blog/ranking-99-mind-f-ck-movies/index.html index 800727ffc8..58bdaef9db 100644 --- a/blog/ranking-99-mind-f-ck-movies/index.html +++ b/blog/ranking-99-mind-f-ck-movies/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Ranking 99 Mind f*ck movies

    · 3 min read


    Ranking and sorting a list of 99 mind-bending thriller movies using IMDbPy API in Python.

    The open source code is available here.

    During the Christmas holidays, me and my girlfriend, after watching The Office [US] twice in a row, and knowing most of Dwight’s pranks off by heart, decided that it was time to find something worth watching.

    Although there’s lots of tempting series out there, we didn’t want to follow that path as we don’t like the “addiction” effect that a series has. Also, we have the same taste regarding movies, where we both enjoy complex thriller plots, that leave your mind to resonate about them long after being done with it. Personally, I consider a movie great when it still crosses my mind when trying to sleep or the day after. So, thriller movies it was.

    After doing a little research work I came across this list of movies on Reddit: 99 mind f*ck movies. I knew this list was good because most of my favourite movies were there, e.g. The Prestige, Inception, The Usual Suspects, Primal Fear, and Ex Machina.

    So, the movie list was decided, and with that, also our new year’s resolution.

    However, this list had 2 issues:

    1. The list didn’t have any particular order. We would like to have the list ranked from best to worst, so that watching the best ones first will keep our motivation levels up to finish the list.

    2. The movie title didn’t have the released year. Although we don’t particularly mind old movies, sometimes we’re just not in the mood to watch a B&W screen, or poor image resolution.

    Therefore, while Meg was busy, I was on a role to hack something that would both sort the list based on IMDB ranking, and add the release years to the titles.

    In a couple of minutes, I was already playing with IMDbPy API. This allowed me to have the sorting algorithm running in the background pretty quick. Within the hour, we already had our sorted movie list. Which I have attached below for future reference.

    image

    The first movie of the list that none of us had already watched was the movie Incendies. After having watched this movie, I can already tell you that sorting out this list was worth it. Definitely mind blowing, and a great watch.

    As usual, you can find the source code on my github: SortMoviesPerRating.

    Hope you enjoyed this read!

    - - +

    Ranking 99 Mind f*ck movies

    · 3 min read


    Ranking and sorting a list of 99 mind-bending thriller movies using IMDbPy API in Python.

    The open source code is available here.

    During the Christmas holidays, me and my girlfriend, after watching The Office [US] twice in a row, and knowing most of Dwight’s pranks off by heart, decided that it was time to find something worth watching.

    Although there’s lots of tempting series out there, we didn’t want to follow that path as we don’t like the “addiction” effect that a series has. Also, we have the same taste regarding movies, where we both enjoy complex thriller plots, that leave your mind to resonate about them long after being done with it. Personally, I consider a movie great when it still crosses my mind when trying to sleep or the day after. So, thriller movies it was.

    After doing a little research work I came across this list of movies on Reddit: 99 mind f*ck movies. I knew this list was good because most of my favourite movies were there, e.g. The Prestige, Inception, The Usual Suspects, Primal Fear, and Ex Machina.

    So, the movie list was decided, and with that, also our new year’s resolution.

    However, this list had 2 issues:

    1. The list didn’t have any particular order. We would like to have the list ranked from best to worst, so that watching the best ones first will keep our motivation levels up to finish the list.

    2. The movie title didn’t have the released year. Although we don’t particularly mind old movies, sometimes we’re just not in the mood to watch a B&W screen, or poor image resolution.

    Therefore, while Meg was busy, I was on a role to hack something that would both sort the list based on IMDB ranking, and add the release years to the titles.

    In a couple of minutes, I was already playing with IMDbPy API. This allowed me to have the sorting algorithm running in the background pretty quick. Within the hour, we already had our sorted movie list. Which I have attached below for future reference.

    image

    The first movie of the list that none of us had already watched was the movie Incendies. After having watched this movie, I can already tell you that sorting out this list was worth it. Definitely mind blowing, and a great watch.

    As usual, you can find the source code on my github: SortMoviesPerRating.

    Hope you enjoyed this read!

    + + \ No newline at end of file diff --git a/blog/remote-flexible-work-salary/index.html b/blog/remote-flexible-work-salary/index.html index 478aeb94b9..91340d4ba3 100644 --- a/blog/remote-flexible-work-salary/index.html +++ b/blog/remote-flexible-work-salary/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Remote + Flexible work >> Salary

    · 5 min read


    This blog post discusses the importance of remote and flexible work hours, and how it can significantly improve work-life balance and productivity.

    I was thinking about remote + flexible hours, and I don’t think I would ever work for a company without these. At least by choice 🙃

    I mean, who would tell Morty and Sum Sum that I wouldn’t be at home to play?

    I’m a strong believer that work should wrap around your lifestyle and not vice-versa.

    On average, a person works 40 hours a week and sleeps 8 hours a day. This means that out of 168h per week you have 72h for personal time. In terms of percentage we have: 24% for work, 33% for sleep, and 43% for personal time.

    So how come most people have almost 2x as much personal time compared to work time and they still feel like they are in this 9–5 rat race and their life revolves around work?

    Well, here’s the 4 scenarios as I see it…

    1. The work is not remote (and not flexible).

    • If we account for the commute and stress associated with, personal time gets directly transferred into work time.
    • E.g. with a daily 2 hour commute Mon-Fri, which is very typical, this means that your personal time is divided into 30% for work and 37% for personal. This isn’t event including the part where you have to prepare to leave the house, and the tiredness resultant from the commute.

    2. The work is remote but not flexible.

    • This is much better than the previous. But it’s still not good enough. The argument here is not due to absolute time but performance and state of mind.
    • Life is not straightforward. We, as individuals, are very different between ourselves. Our bodies, mind, brain, relationships, … work very differently. By not being flexible on the working hours you are basically ignoring all of that diversity and grouping everyone into a single 9–5 + Mon-Fri category.
    • The “ironic” part is that most companies promote diversity and don’t think about this. Which just shows that the diversity topic has become very much a marketing vehicle.
    • In my case, I’m a night owl, I don’t usually wake up too early, because I am much more productive when I stay awake until 3/4 am. If I have to wake up early because someone decided that 8:30am was the time that everyone needed to “check in” you are basically not getting the most out of me.
    • One may wonder, well, this is a company problem because they are paying for an employee that is not performing as much as they could. Unfortunately, that’s not true, it’s a much bigger problem to the employee. This is because when an employee excels at a job they tend to have a much happier life which in turn increases performance, which increases happiness, and so on and so forth.

    3. There is no mention for not remote but flexible because, in my opinion, that makes very little sense.

    4. Now, let’s imagine the scenario where the work is remote and flexible.

    • This is where it gets interesting. When we fall on this scenario your job perspective changes drastically. This is because at this point you put yourself first and can define your own priorities while having a pool of time to get a job done at your own time.
    • E.g. you can plan activities with friends, do exercise, meditate, … whatever suits your lifestyle. Which will give you a boost of energy to perform even better at your job. On top of this, you don’t need to squash the work within Mon-Fri, once you are in this flexible regime you may use the weekend to your advantage. Flights at 20 Euros on Tuesday to come back Thursday? Fine, I’ll work during weekend to make up for this time
    • There are people that love a 9–5 Mon-Fri schedule and that is fine. For those it means that the 9–5 Mon-Fri system implemented got it right. In fact, I would argue, that they are still wrapping work around lifestyle, it’s just that their lifestyle is working 9–5 Mon-Fri and enjoying time outside these hours.

    The downsides of this fully flexible work are:

    • Interaction with coworkers and communication. But with us going global due to remote work, it doesn’t really matter, since the 9–5 hours of different countries would already lead to this problem
    • Tracking employee timesheet. I think that a company shouldn’t track an employee timesheet because results are far more important than working hours, and can be just as measurable.

    All of this to say that at OpenBB we have:

    • REMOTE WORK: As long as you are in a location with internet access, we are not worried. This allows us to build a strong diverse team with different backgrounds and ideas.
    • FLEXIBLE HOURS: We believe that your work should wrap around your lifestyle and not vice-versa. As long as you excel, you will not be asked why you woke up at noon.
    • UNLIMITED HOLIDAYS: Who has time to track holidays when building such an exciting project? We trust in our people to manage their own PTO and keep performing at the highest level.

    AND this is how I sleep at night having no idea at what time John logged in and out:

    image

    Ohhh, and we’re hiring!

    If you provide a referral to someone that ends up joining OpenBB, I will transfer you $100 as a token of appreciation 🦋

    - - +

    Remote + Flexible work >> Salary

    · 5 min read


    This blog post discusses the importance of remote and flexible work hours, and how it can significantly improve work-life balance and productivity.

    I was thinking about remote + flexible hours, and I don’t think I would ever work for a company without these. At least by choice 🙃

    I mean, who would tell Morty and Sum Sum that I wouldn’t be at home to play?

    I’m a strong believer that work should wrap around your lifestyle and not vice-versa.

    On average, a person works 40 hours a week and sleeps 8 hours a day. This means that out of 168h per week you have 72h for personal time. In terms of percentage we have: 24% for work, 33% for sleep, and 43% for personal time.

    So how come most people have almost 2x as much personal time compared to work time and they still feel like they are in this 9–5 rat race and their life revolves around work?

    Well, here’s the 4 scenarios as I see it…

    1. The work is not remote (and not flexible).

    • If we account for the commute and stress associated with, personal time gets directly transferred into work time.
    • E.g. with a daily 2 hour commute Mon-Fri, which is very typical, this means that your personal time is divided into 30% for work and 37% for personal. This isn’t event including the part where you have to prepare to leave the house, and the tiredness resultant from the commute.

    2. The work is remote but not flexible.

    • This is much better than the previous. But it’s still not good enough. The argument here is not due to absolute time but performance and state of mind.
    • Life is not straightforward. We, as individuals, are very different between ourselves. Our bodies, mind, brain, relationships, … work very differently. By not being flexible on the working hours you are basically ignoring all of that diversity and grouping everyone into a single 9–5 + Mon-Fri category.
    • The “ironic” part is that most companies promote diversity and don’t think about this. Which just shows that the diversity topic has become very much a marketing vehicle.
    • In my case, I’m a night owl, I don’t usually wake up too early, because I am much more productive when I stay awake until 3/4 am. If I have to wake up early because someone decided that 8:30am was the time that everyone needed to “check in” you are basically not getting the most out of me.
    • One may wonder, well, this is a company problem because they are paying for an employee that is not performing as much as they could. Unfortunately, that’s not true, it’s a much bigger problem to the employee. This is because when an employee excels at a job they tend to have a much happier life which in turn increases performance, which increases happiness, and so on and so forth.

    3. There is no mention for not remote but flexible because, in my opinion, that makes very little sense.

    4. Now, let’s imagine the scenario where the work is remote and flexible.

    • This is where it gets interesting. When we fall on this scenario your job perspective changes drastically. This is because at this point you put yourself first and can define your own priorities while having a pool of time to get a job done at your own time.
    • E.g. you can plan activities with friends, do exercise, meditate, … whatever suits your lifestyle. Which will give you a boost of energy to perform even better at your job. On top of this, you don’t need to squash the work within Mon-Fri, once you are in this flexible regime you may use the weekend to your advantage. Flights at 20 Euros on Tuesday to come back Thursday? Fine, I’ll work during weekend to make up for this time
    • There are people that love a 9–5 Mon-Fri schedule and that is fine. For those it means that the 9–5 Mon-Fri system implemented got it right. In fact, I would argue, that they are still wrapping work around lifestyle, it’s just that their lifestyle is working 9–5 Mon-Fri and enjoying time outside these hours.

    The downsides of this fully flexible work are:

    • Interaction with coworkers and communication. But with us going global due to remote work, it doesn’t really matter, since the 9–5 hours of different countries would already lead to this problem
    • Tracking employee timesheet. I think that a company shouldn’t track an employee timesheet because results are far more important than working hours, and can be just as measurable.

    All of this to say that at OpenBB we have:

    • REMOTE WORK: As long as you are in a location with internet access, we are not worried. This allows us to build a strong diverse team with different backgrounds and ideas.
    • FLEXIBLE HOURS: We believe that your work should wrap around your lifestyle and not vice-versa. As long as you excel, you will not be asked why you woke up at noon.
    • UNLIMITED HOLIDAYS: Who has time to track holidays when building such an exciting project? We trust in our people to manage their own PTO and keep performing at the highest level.

    AND this is how I sleep at night having no idea at what time John logged in and out:

    image

    Ohhh, and we’re hiring!

    If you provide a referral to someone that ends up joining OpenBB, I will transfer you $100 as a token of appreciation 🦋

    + + \ No newline at end of file diff --git a/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig/index.html b/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig/index.html index c10850d74d..5383a0a35e 100644 --- a/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig/index.html +++ b/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwig/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Revolutionizing AI at OpenBB with new leader, Michael Struwig

    · 5 min read


    With the launch of the OpenBB Terminal Pro approaching, we're excited to announce the hiring of Michael Struwig, a Ph.D. with expertise in AI and quantitative finance. Michael will help us to further our AI capabilities, reinforcing our commitment to innovation in the open-source finance space.

    AI will be one of the technologies that will be looked back in hundreds of years as revolutionary, changing how humans live.

    With the upcoming launch of the OpenBB Terminal Pro, we believe AI can push the limits of the way users do investment research.

    We believe our ecosystem is positioned at the forefront of finance in terms of investment research. With the inception of the OpenBB Terminal Pro, we are standing at the cusp of a significant leap. Our journey began with AskOBB, a tool that facilitated natural language interaction with financial data, but that was just the start.

    Last month, I wrote a tweet explaining why we spent over $500,000 in revamping our core platform. We are committed to creating the best finance platform for quants/analysts to build with. Some key features are:

    • We are data vendor agnostic - we enable them
    • We are open source - everyone can contribute data
    • We standardize data across close to 100 different data providers
    • We put a lot of effort into our documentation

    These features allow us to bring AI to our platform from the ground up, and think about how that will impact the user experience at the core level.

    For instance this is an extension that James added to the OpenBB Platform.

    There are a lot of products out there utilizing generative AI for finance. Most of these can be classified as:

    • Startups built around a particular feature - e.g. chatting with news. With LLMs becoming a commodity, over time it will be easy to understand that this is a feature and not a product itself.
    • Larger companies that put a small team together to explore generative AI to be seen as leaders in the space - but without an intention to bring such to market. Often because of outdated tech stack.

    We are different. The OpenBB Terminal Pro is the most customizable investment research platform for teams of quants and analysts. It contains generative AI features, but these are embodied inside the app, and treated as part of the user experience.

    Some examples below:

  • Summarize news articles in seconds

  • Ask more detailed questions to your widgets like earnings transcript or even insider trading

  • And more.

  • Most of these generative AI features have been started as side projects by our team members, and once we validated the use case with financial professionals we incorporated it into the roadmap. However, we want to double down on this effort and therefore we're excited to welcome Michael to OpenBB.

    Michael has a PhD in Electrical and Electronic Engineering, has been doing AI for a few years, and prior to joining us was the CEO of Hudson & Thames Quantitative Research.

    I first heard him from his reading groups:


    From watching these videos it was clear that Michael is an expert in the field and was capable of understanding deep topics and not solely staying on the surface. So I was keen to have a chat with him. It turns out that he was a big supporter of OpenBB in particular due to our open-source approach to finance and the connection was immediate.

    Michael met a few of our team members, and a week later we had a signed contract.

    I couldn’t be more excited to welcome him to the team and see the amazing products we are going to build at OpenBB.

    Here’s what Michael has to say about joining OpenBB:

    "At OpenBB, I've discovered the perfect blend of my core passions: ML/AI, Opensource, and, more recently, quantitative finance. Joining the OpenBB team truly feels like a fairytale come true. I've never encountered a team so singularly-focused and driven. They genuinely "get it," and working alongside such talented individuals is incredibly inspiring. I'm ecstatic to be on board and am eager to help contribute to OpenBB's AI initiatives."


    If you are excited about the field of open source, AI, and finance, and want to help - you can reach out to Michael on Twitter.

    - - +

    Revolutionizing AI at OpenBB with new leader, Michael Struwig

    · 5 min read


    With the launch of the OpenBB Terminal Pro approaching, we're excited to announce the hiring of Michael Struwig, a Ph.D. with expertise in AI and quantitative finance. Michael will help us to further our AI capabilities, reinforcing our commitment to innovation in the open-source finance space.

    AI will be one of the technologies that will be looked back in hundreds of years as revolutionary, changing how humans live.

    With the upcoming launch of the OpenBB Terminal Pro, we believe AI can push the limits of the way users do investment research.

    We believe our ecosystem is positioned at the forefront of finance in terms of investment research. With the inception of the OpenBB Terminal Pro, we are standing at the cusp of a significant leap. Our journey began with AskOBB, a tool that facilitated natural language interaction with financial data, but that was just the start.

    Last month, I wrote a tweet explaining why we spent over $500,000 in revamping our core platform. We are committed to creating the best finance platform for quants/analysts to build with. Some key features are:

    • We are data vendor agnostic - we enable them
    • We are open source - everyone can contribute data
    • We standardize data across close to 100 different data providers
    • We put a lot of effort into our documentation

    These features allow us to bring AI to our platform from the ground up, and think about how that will impact the user experience at the core level.

    For instance this is an extension that James added to the OpenBB Platform.

    There are a lot of products out there utilizing generative AI for finance. Most of these can be classified as:

    • Startups built around a particular feature - e.g. chatting with news. With LLMs becoming a commodity, over time it will be easy to understand that this is a feature and not a product itself.
    • Larger companies that put a small team together to explore generative AI to be seen as leaders in the space - but without an intention to bring such to market. Often because of outdated tech stack.

    We are different. The OpenBB Terminal Pro is the most customizable investment research platform for teams of quants and analysts. It contains generative AI features, but these are embodied inside the app, and treated as part of the user experience.

    Some examples below:

  • Summarize news articles in seconds

  • Ask more detailed questions to your widgets like earnings transcript or even insider trading

  • And more.

  • Most of these generative AI features have been started as side projects by our team members, and once we validated the use case with financial professionals we incorporated it into the roadmap. However, we want to double down on this effort and therefore we're excited to welcome Michael to OpenBB.

    Michael has a PhD in Electrical and Electronic Engineering, has been doing AI for a few years, and prior to joining us was the CEO of Hudson & Thames Quantitative Research.

    I first heard him from his reading groups:


    From watching these videos it was clear that Michael is an expert in the field and was capable of understanding deep topics and not solely staying on the surface. So I was keen to have a chat with him. It turns out that he was a big supporter of OpenBB in particular due to our open-source approach to finance and the connection was immediate.

    Michael met a few of our team members, and a week later we had a signed contract.

    I couldn’t be more excited to welcome him to the team and see the amazing products we are going to build at OpenBB.

    Here’s what Michael has to say about joining OpenBB:

    "At OpenBB, I've discovered the perfect blend of my core passions: ML/AI, Opensource, and, more recently, quantitative finance. Joining the OpenBB team truly feels like a fairytale come true. I've never encountered a team so singularly-focused and driven. They genuinely "get it," and working alongside such talented individuals is incredibly inspiring. I'm ecstatic to be on board and am eager to help contribute to OpenBB's AI initiatives."


    If you are excited about the field of open source, AI, and finance, and want to help - you can reach out to Michael on Twitter.

    + + \ No newline at end of file diff --git a/blog/rss.xml b/blog/rss.xml index c87aa83733..d2a366dd23 100644 --- a/blog/rss.xml +++ b/blog/rss.xml @@ -4,10 +4,26 @@ Didier Lopes Blog https://didierlopes.com/blog Didier Lopes Blog - Wed, 29 Nov 2023 00:00:00 GMT + Fri, 15 Dec 2023 00:00:00 GMT https://validator.w3.org/feed/docs/rss2.html https://github.com/jpmonette/feed en + + <![CDATA[The new FinAI Tech Stack]]> + https://didierlopes.com/blog/the-new-finai-tech-stack + https://didierlopes.com/blog/the-new-finai-tech-stack + Fri, 15 Dec 2023 00:00:00 GMT + +


    This blog post delves into how our collaboration with MindsDB, Nixtla, LlamaIndex, and Langchain is revolutionizing the financial world. Read on to learn all about the event "The New FinAI Tech Stack" held last week in SF, California.

    Context

    In early September, I attended a “Future of Finance” event in NYC. Despite the presence of well-known financial professionals from top firms in the industry, I found the event lacked practical applications demonstrating how AI is impacting the financial sector.

    Once I was back in the Bay Area, I had a barbecue with Jorge and Max from MindsDB and Nixtla, and I was commenting on that experience. To which Jorge promptly replied - why don’t we do it ourselves? So following this discussion, we decided to put the AI in finance event in motion.

    At OpenBB, AI has become a key component in our approach to refactoring the OpenBB Platform from the ground up. We've recently recruited a Head of AI to help us build our strategy and work on this effort full-time.

    You can find more details on this here.

    OpenBB x MindsDB

    A few days later, I visited the MindsDB office to discuss collaborating with Jorge on potential partnerships. I suggested the idea of gaining access to MindsDB's data, a proposal that seemed feasible to implement.

    Eventually, we accomplished this, and I even showcased it during the event last week. The code for this endeavour is open source. Take a look here.

    However, Jorge had an even bigger idea. He proposed the concept of granting MindsDB users access to OpenBB data via SQL and harnessing MindsDB's capabilities for machine learning. Essentially, we could convert the data frame in runtime into a virtual SQL table, since we have access to the Pydantic model from the OpenBB platform, and we can build that on the go.

    After tweeting about this, I received numerous messages, which validated that there was interest in OBB SQL. So, we set off to work on this. Together with the OpenBB team, we made it easy to access all available inputs/outputs for each endpoint, while the MindsDB team worked on virtualizing the tables. The result can be seen here.

    At the event last week, Jorge shared this work. Additionally, in collaboration with LangChain, he successfully developed a Slack bot with direct access to this data, all accessible within Slack

    OpenBB x Nixtla

    Back in August, Nixtla introduced the initial foundation generative AI model for temporal data at MindsDB. At that time, we received an invitation to showcase the practical applications of TimeGPT in production, and for the first time, we unveiled Terminal Pro briefly.

    I detailed this experience in a blog post and shared a similar demo during the event last week.

    Following that, Max and Azul from Nixtla proceeded to share a presentation where they used OpenBB data to assess price targets from analysts and develop an approach on how it is possible to reduce the bias inherent to price estimates and produce better estimates.

    OpenBB x LlamaIndex

    Back in July, we initiated the development of AskOBB, enabling users to interact with the open source OpenBB Terminal using natural language. In this effort, we leveraged LlamaIndex and you can see more about it here.

    So when we started discussing an AI in Finance event, it only made sense to reach out to Jerry and Simon to invite their team to present at the event. And so we did. Jerry ended up presenting their open source SEC insights repo that uses the Retrieval Augmented Generation (RAG) capabilities of LlamaIndex to answer questions about SEC 10-K & 10-Q documents.

    As for the OpenBB Terminal Pro, we demonstrated how we are using LlamaIndex to chat with documents that are uploaded to the OpenBB Terminal Pro. The video below highlights these features.

    OpenBB x Langchain

    After attending the AI Engineering Summit event, specifically Harrison’s workshop on how to get started with agents using Langchain, I felt inspired to create an agent on top of the OpenBB platform.

    So that very day, I went home and started to work on this repo. By the end of the day, the agent was already able to perform complex queries.

    Over time I iterated on it to make the agent more robust, but the improvement on the architecture started to happen after Michael joined OpenBB and he was able to focus on this full-time - the progress can be found on this open source repo. An example of a prompt that the agent can answer is:

    Check what are TSLA peers. From those, check which one has the highest market cap. Then, on the ticker that has the highest market cap get the most recent price target estimate from an analyst, and tell me who it was and on what date the estimate was made.


    So at the event, Harrison presented this architecture which heavily relies on Langchain and OpenBB tools.

    Later on, I demonstrated how we can integrate this architecture into OpenBB Copilot and make it available from the OpenBB Terminal Pro.

    Wrap up

    Finally, this was an amazing event organized by MindsDB and a team that put together 5 of the most prominent open-source companies working on problems at the intersection of AI and Finance.

    You can rewatch the entire event here:


    We're considering organizing another event like this soon, possibly even in NYC.

    And if your firm is interested in early access to the OpenBB Terminal Pro, you can reach out to hello@openbb.finance, we’d love to chat.

    ]]>
    + openbb + finance + ai + agents + langchain + llamaindex + mindsdb + nixtla +
    <![CDATA[Goodbye OpenBB SDK. Hello OpenBB Platform]]> https://didierlopes.com/blog/goodbye-openbb-sdk-hello-openbb-platform diff --git a/blog/sector-and-industry-analysis-gamestonk-terminal/index.html b/blog/sector-and-industry-analysis-gamestonk-terminal/index.html index e4f074d875..4b2e565aee 100644 --- a/blog/sector-and-industry-analysis-gamestonk-terminal/index.html +++ b/blog/sector-and-industry-analysis-gamestonk-terminal/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Sector and Industry Analysis — Gamestonk Terminal

    · 5 min read


    The development journey of a new Sector and Industry Analysis feature for Gamestonk Terminal, integrating the FinanceDatabase package.

    The open source code is available here.

    The end-to-end story of developing a new Sector and Industry Analysis for Gamestonk Terminal from scratch.

    On the 13th of October, Jeroen Bouma (a ALM advisor and python enthusiast) reached out in order to integrate his FinanceDatabase package into Gamestonk Terminal.

    image

    After having a call with Jeroen to bounce ideas, it was clear that our terminal needed such capability to be even more powerful (as if over 500 features already and counting didn’t already do the trick eheh). However, at the time I was too busy to work on the concept so I asked Jeroen if he could sketch something up on a jupyter notebook.

    Within the following week, Jeroen sent a Jupyter notebook explaining the FinanceDatabase module and what we could have in a Sector and Industry analysis.

    image

    In addition, he also mentioned his PassiveInvestor package, and ended up implementing it on his own in Gamestonk Terminal! This was a great addition, as it strengthened our ETF context and provided a slick Excel report for the Excel fans out there! See his LinkedIn post on the experience.

    image

    ...

    Forward to last weekend (1.5 months later), I had a free Sunday afternoon so started working on the development of this menu. I started by thinking about what would make this menu more flexible and powerful.

    image

    These were my thoughts about what it needs:

    • Several filtering parameters as the number of companies in the database is pretty huge with 155.705 tickers, 16 sectors, 242 industries, 111 countries and 82 exchanges. These were the filters selected: Country, Sector, Industry, Market Cap and Flag to include/exclude international exchanges.
    • To be able to do some statistics on the sector, industries and countries (e.g. companies per sector/industry with a specified country and market cap) which allows users to better understand companies landscape of a sector and industry.
    • To get the financials of the companies that fall under that filter subset (e.g. return on assets, quick ratio, debt to equity), and then compare these in order to get the best performers.
    • Since one of the previous financials isn’t enough to understand which company would be best to invest in, I wanted the filtered companies to have the capability to jump onto the comparison analysis menu so you could get all the capabilities of comparing historical price data, volume data, income/balance/cash flow, sentiment, or even technical indicators.
    • If in the stocks context I had Tesla loaded, I wanted to go into this sia menu and get all the filtering parameters to be ready to filter for companies similar to Tesla in terms of (Sector, Industry, Country and Market Cap).

    By Sunday night, I created the pull request for this. Due to the due diligent reviews performed by the main contributors of the project, the menu got a lot of improvements. Some of them were:

    • Do not display companies that account for under a certain threshold (1%) and therefore sum them in an “Others” slice.
    • Allow to export all the data as a table.
    • After filtering and getting financials, save the data for faster data retrieval if the same filters are used.
    • Minor bug fixes.

    After a lot of comments and feedback from the main maintainers, and everyone being happy with this first iteration, the PR got merged. In fact, one of the main maintainers found a hidden gem while testing it.

    image

    In the meantime, I’ve been in contact with Jeroen about adding some more capabilities to his FinanceDatabase package so that everyone could benefit from them. Some examples are:

    • When an industry is selected, the corresponding sector should be automatically filled.
    • If I select a country and a market cap for filtering, my sector choices should be bounded by what exists within those.
    • I should be able to query about companies landscape in terms of a country. E.g. I want to understand what countries have the most large cap companies within the Financial Services sector.

    This would not only make the FinanceDatabase a more powerful Package, which would in turn benefit Gamestonk Terminal sia menu, and ultimately our thousands of users!

    image

    This is an example of how the Sector and Industry Analysis menu looks (as a bonus I show how you can go into the Comparison Analysis menu):

    image

    Next time you know, it all starts with an e-mail. At Gamestonk Terminal we are on a role to have the best investment research terminal, and hope this story reflects it.

    Try it now, it’s free. ❤️

    - - +

    Sector and Industry Analysis — Gamestonk Terminal

    · 5 min read


    The development journey of a new Sector and Industry Analysis feature for Gamestonk Terminal, integrating the FinanceDatabase package.

    The open source code is available here.

    The end-to-end story of developing a new Sector and Industry Analysis for Gamestonk Terminal from scratch.

    On the 13th of October, Jeroen Bouma (a ALM advisor and python enthusiast) reached out in order to integrate his FinanceDatabase package into Gamestonk Terminal.

    image

    After having a call with Jeroen to bounce ideas, it was clear that our terminal needed such capability to be even more powerful (as if over 500 features already and counting didn’t already do the trick eheh). However, at the time I was too busy to work on the concept so I asked Jeroen if he could sketch something up on a jupyter notebook.

    Within the following week, Jeroen sent a Jupyter notebook explaining the FinanceDatabase module and what we could have in a Sector and Industry analysis.

    image

    In addition, he also mentioned his PassiveInvestor package, and ended up implementing it on his own in Gamestonk Terminal! This was a great addition, as it strengthened our ETF context and provided a slick Excel report for the Excel fans out there! See his LinkedIn post on the experience.

    image

    ...

    Forward to last weekend (1.5 months later), I had a free Sunday afternoon so started working on the development of this menu. I started by thinking about what would make this menu more flexible and powerful.

    image

    These were my thoughts about what it needs:

    • Several filtering parameters as the number of companies in the database is pretty huge with 155.705 tickers, 16 sectors, 242 industries, 111 countries and 82 exchanges. These were the filters selected: Country, Sector, Industry, Market Cap and Flag to include/exclude international exchanges.
    • To be able to do some statistics on the sector, industries and countries (e.g. companies per sector/industry with a specified country and market cap) which allows users to better understand companies landscape of a sector and industry.
    • To get the financials of the companies that fall under that filter subset (e.g. return on assets, quick ratio, debt to equity), and then compare these in order to get the best performers.
    • Since one of the previous financials isn’t enough to understand which company would be best to invest in, I wanted the filtered companies to have the capability to jump onto the comparison analysis menu so you could get all the capabilities of comparing historical price data, volume data, income/balance/cash flow, sentiment, or even technical indicators.
    • If in the stocks context I had Tesla loaded, I wanted to go into this sia menu and get all the filtering parameters to be ready to filter for companies similar to Tesla in terms of (Sector, Industry, Country and Market Cap).

    By Sunday night, I created the pull request for this. Due to the due diligent reviews performed by the main contributors of the project, the menu got a lot of improvements. Some of them were:

    • Do not display companies that account for under a certain threshold (1%) and therefore sum them in an “Others” slice.
    • Allow to export all the data as a table.
    • After filtering and getting financials, save the data for faster data retrieval if the same filters are used.
    • Minor bug fixes.

    After a lot of comments and feedback from the main maintainers, and everyone being happy with this first iteration, the PR got merged. In fact, one of the main maintainers found a hidden gem while testing it.

    image

    In the meantime, I’ve been in contact with Jeroen about adding some more capabilities to his FinanceDatabase package so that everyone could benefit from them. Some examples are:

    • When an industry is selected, the corresponding sector should be automatically filled.
    • If I select a country and a market cap for filtering, my sector choices should be bounded by what exists within those.
    • I should be able to query about companies landscape in terms of a country. E.g. I want to understand what countries have the most large cap companies within the Financial Services sector.

    This would not only make the FinanceDatabase a more powerful Package, which would in turn benefit Gamestonk Terminal sia menu, and ultimately our thousands of users!

    image

    This is an example of how the Sector and Industry Analysis menu looks (as a bonus I show how you can go into the Comparison Analysis menu):

    image

    Next time you know, it all starts with an e-mail. At Gamestonk Terminal we are on a role to have the best investment research terminal, and hope this story reflects it.

    Try it now, it’s free. ❤️

    + + \ No newline at end of file diff --git a/blog/stop-doing-your-cv-in-word-or-latex/index.html b/blog/stop-doing-your-cv-in-word-or-latex/index.html index 8d484a158c..62282d8f0f 100644 --- a/blog/stop-doing-your-cv-in-word-or-latex/index.html +++ b/blog/stop-doing-your-cv-in-word-or-latex/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Stop doing your CV in Word or LaTeX

    · 3 min read


    The future of CVs for engineers and developers lies within GitHub. This post discusses why GitHub profiles are becoming the new CVs and how they can provide a more comprehensive view of a candidate's skills and contributions.

    The purpose of a CV is to summarize someone’s career, qualifications and education. As an engineer or developer, I strongly believe that the future of CVs lies within GitHub.

    In fact, GitHub has realized this and they now allow you to create your own “profile page” by creating a repository with the same name as your GitHub username. E.g. https://github.com/DidierRLopes

    In my humble opinion, this isn’t being talked enough. Previously, you needed a CV document to talk about your background, education, previous jobs and could rely on your GitHub profile to show your projects. With this update, CVs have become obsolete. When hiring for OpenBB, I put a lot of weight into the public GitHub of each engineer.

    This is my current GitHub profile page.

    image

    My profile page is now much simpler since I’ve worked on my own personal website, but you can see here what my GitHub profile page looked like before. Creating your own personalized website for me is the next step after GitHub, as you can be as creative as you want while showing off your coding skills.

    My repository is my way of showing the world what I can do on my own. From a blank sheet to a finalized project. Sometimes useful, sometimes for fun, but always with the intention to learn more and challenge myself.

    The reason I think that GitHub profile’s are the CVs of the future for engineers/developers, is not only because you can now both talk about yourself in it and display your portfolio, but because of its open source nature.

    With products like: https://ossinsight.io/analyze/DidierRLopes, you will be able to dive deeper on engineering skills than ever before.

    image

    Companies will be able to assess a candidate based on their open source work:

    • How do they interact with the community? What are their communication skills?
    • Do they practice teamwork? And mentor more junior developers?
    • Are they leaving comments in the code? Is their code readable in the first place?
    • What about testing? Are they following good practices?
    • What’s their time to reply to issues? Or to review PRs from peers?
    • Activity? What are their working hour patterns like?

    Imagine a world where everyone develops in the wild. You can see everything and be part of any project. You have your own profile, you talk with others through issues or PRs, you build together. There is no gender, no race, no nationality,.. people are conneced through projects they believe in. In essence, this is the developer metaverse, and I’m all here for it.

    image

    EDIT: The reader should be aware that nowadays a properly formatted resume is still critical when added to a job board. This is because automated resume readers expect a certain format in order to recommend candidates to companies and vice-versa.

    Hope you enjoyed this post. As always, any feedback welcome! 🙏

    - - +

    Stop doing your CV in Word or LaTeX

    · 3 min read


    The future of CVs for engineers and developers lies within GitHub. This post discusses why GitHub profiles are becoming the new CVs and how they can provide a more comprehensive view of a candidate's skills and contributions.

    The purpose of a CV is to summarize someone’s career, qualifications and education. As an engineer or developer, I strongly believe that the future of CVs lies within GitHub.

    In fact, GitHub has realized this and they now allow you to create your own “profile page” by creating a repository with the same name as your GitHub username. E.g. https://github.com/DidierRLopes

    In my humble opinion, this isn’t being talked enough. Previously, you needed a CV document to talk about your background, education, previous jobs and could rely on your GitHub profile to show your projects. With this update, CVs have become obsolete. When hiring for OpenBB, I put a lot of weight into the public GitHub of each engineer.

    This is my current GitHub profile page.

    image

    My profile page is now much simpler since I’ve worked on my own personal website, but you can see here what my GitHub profile page looked like before. Creating your own personalized website for me is the next step after GitHub, as you can be as creative as you want while showing off your coding skills.

    My repository is my way of showing the world what I can do on my own. From a blank sheet to a finalized project. Sometimes useful, sometimes for fun, but always with the intention to learn more and challenge myself.

    The reason I think that GitHub profile’s are the CVs of the future for engineers/developers, is not only because you can now both talk about yourself in it and display your portfolio, but because of its open source nature.

    With products like: https://ossinsight.io/analyze/DidierRLopes, you will be able to dive deeper on engineering skills than ever before.

    image

    Companies will be able to assess a candidate based on their open source work:

    • How do they interact with the community? What are their communication skills?
    • Do they practice teamwork? And mentor more junior developers?
    • Are they leaving comments in the code? Is their code readable in the first place?
    • What about testing? Are they following good practices?
    • What’s their time to reply to issues? Or to review PRs from peers?
    • Activity? What are their working hour patterns like?

    Imagine a world where everyone develops in the wild. You can see everything and be part of any project. You have your own profile, you talk with others through issues or PRs, you build together. There is no gender, no race, no nationality,.. people are conneced through projects they believe in. In essence, this is the developer metaverse, and I’m all here for it.

    image

    EDIT: The reader should be aware that nowadays a properly formatted resume is still critical when added to a job board. This is because automated resume readers expect a certain format in order to recommend candidates to companies and vice-versa.

    Hope you enjoyed this post. As always, any feedback welcome! 🙏

    + + \ No newline at end of file diff --git a/blog/streamline-your-openbb-terminal-experience-with-openbb-hub/index.html b/blog/streamline-your-openbb-terminal-experience-with-openbb-hub/index.html index 5c5c96059c..9335d91e5d 100644 --- a/blog/streamline-your-openbb-terminal-experience-with-openbb-hub/index.html +++ b/blog/streamline-your-openbb-terminal-experience-with-openbb-hub/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Streamline your OpenBB Terminal experience with OpenBB Hub

    · 4 min read


    Streamline your OpenBB Terminal experience with OpenBB Hub. Learn about its key features, including API key management, data customization, personalization, and script management.

    The open source code is available here.

    If you’re using the OpenBB Terminal, there’s an essential component you shouldn’t miss out on: the OpenBB Hub. In this blog post, we’ll explore the significance of OpenBB Hub and why it truly matters for OpenBB users.

    By delving into its key features, we’ll uncover how OpenBB Hub elevates your experience with the OpenBB Terminal, providing you with enhanced capabilities and customization options. Let’s dive in!

    Login

    As highlighted in our previous blog post Introducing the OpenBB Hub, the OpenBB Hub is more than just a platform to access the OpenBB product ecosystem; it adds value to each individual product. Specifically, when it comes to the OpenBB Terminal, having an OpenBB Hub account offers tremendous advantages.

    Notably, the settings and features you configure within the hub persist across terminal updates and even when you log in from a new machine, allowing for a seamless and personalized experience.

    Streamlining API key management

    A common question we receive is about the source of our data. OpenBB doesn’t own any data; instead, we enable users to access data from various vendors by signing up for plans on their respective websites. This approach allows us to focus on platform development and data standardization while giving users the freedom to pay for the high-quality datasets they desire.

    Previously, managing API keys was only accessible through the terminal CLI, which could be suboptimal. To alleviate this, we introduced the capability to manage API keys directly from a web page, reducing friction and putting the focus back on what matters most: access to data.

    Enhanced data customization

    With OpenBB Hub, you have the power to set default data sources, enabling you to choose the data vendor that aligns best with your needs for each command within the terminal. This flexibility empowers you to curate your preferred data sources, providing a tailored experience that optimizes your decision-making process.

    Infuse personal style into your terminal

    OpenBB Hub lets you personalize your terminal by customizing its colors to your liking. From the command line interface menu to interactive tables and even charting colors, you have the freedom to create your own custom color scheme. Whether you prefer soothing pastel shades or bold neon colors, the choice is yours.

    This feature not only adds a touch of personalization but also ensures a comfortable and visually pleasing experience, reducing eye strain during extended usage. Say goodbye to the standard white background and say hello to a terminal that reflects your unique style.

    Effortless routine scripts management

    We’ve noticed a growing trend among our users: the development and adoption of routine scripts. These .openbb files contain OpenBB commands and allow users to save their investment research workflows, as well as share them with others.

    While OpenBB Hub provides access to pre-defined scripts developed by our team, which have been extensively used in academia, it also allows you to manage your own scripts. In the near future, we will introduce a community scripts page, fostering script sharing and discussions on individual use cases.

    Final thoughts

    The OpenBB Hub has become the central platform where we closely engage with the community, continuously striving to add value to your experience when utilizing our suite of products. We encourage you to share your feedback and ideas with us to help shape the future of OpenBB.

    Join the OpenBB Hub today, and spread the word among your peers, so we can grow together and create an even more vibrant community.

    Check out the OpenBB Hub user metrics here, and if you missed our recent webinar, you can catch up on all the exciting new features in the video below.


    With the OpenBB Hub, you unlock a world of possibilities.

    - - +

    Streamline your OpenBB Terminal experience with OpenBB Hub

    · 4 min read


    Streamline your OpenBB Terminal experience with OpenBB Hub. Learn about its key features, including API key management, data customization, personalization, and script management.

    The open source code is available here.

    If you’re using the OpenBB Terminal, there’s an essential component you shouldn’t miss out on: the OpenBB Hub. In this blog post, we’ll explore the significance of OpenBB Hub and why it truly matters for OpenBB users.

    By delving into its key features, we’ll uncover how OpenBB Hub elevates your experience with the OpenBB Terminal, providing you with enhanced capabilities and customization options. Let’s dive in!

    Login

    As highlighted in our previous blog post Introducing the OpenBB Hub, the OpenBB Hub is more than just a platform to access the OpenBB product ecosystem; it adds value to each individual product. Specifically, when it comes to the OpenBB Terminal, having an OpenBB Hub account offers tremendous advantages.

    Notably, the settings and features you configure within the hub persist across terminal updates and even when you log in from a new machine, allowing for a seamless and personalized experience.

    Streamlining API key management

    A common question we receive is about the source of our data. OpenBB doesn’t own any data; instead, we enable users to access data from various vendors by signing up for plans on their respective websites. This approach allows us to focus on platform development and data standardization while giving users the freedom to pay for the high-quality datasets they desire.

    Previously, managing API keys was only accessible through the terminal CLI, which could be suboptimal. To alleviate this, we introduced the capability to manage API keys directly from a web page, reducing friction and putting the focus back on what matters most: access to data.

    Enhanced data customization

    With OpenBB Hub, you have the power to set default data sources, enabling you to choose the data vendor that aligns best with your needs for each command within the terminal. This flexibility empowers you to curate your preferred data sources, providing a tailored experience that optimizes your decision-making process.

    Infuse personal style into your terminal

    OpenBB Hub lets you personalize your terminal by customizing its colors to your liking. From the command line interface menu to interactive tables and even charting colors, you have the freedom to create your own custom color scheme. Whether you prefer soothing pastel shades or bold neon colors, the choice is yours.

    This feature not only adds a touch of personalization but also ensures a comfortable and visually pleasing experience, reducing eye strain during extended usage. Say goodbye to the standard white background and say hello to a terminal that reflects your unique style.

    Effortless routine scripts management

    We’ve noticed a growing trend among our users: the development and adoption of routine scripts. These .openbb files contain OpenBB commands and allow users to save their investment research workflows, as well as share them with others.

    While OpenBB Hub provides access to pre-defined scripts developed by our team, which have been extensively used in academia, it also allows you to manage your own scripts. In the near future, we will introduce a community scripts page, fostering script sharing and discussions on individual use cases.

    Final thoughts

    The OpenBB Hub has become the central platform where we closely engage with the community, continuously striving to add value to your experience when utilizing our suite of products. We encourage you to share your feedback and ideas with us to help shape the future of OpenBB.

    Join the OpenBB Hub today, and spread the word among your peers, so we can grow together and create an even more vibrant community.

    Check out the OpenBB Hub user metrics here, and if you missed our recent webinar, you can catch up on all the exciting new features in the video below.


    With the OpenBB Hub, you unlock a world of possibilities.

    + + \ No newline at end of file diff --git a/blog/sweepstake-world-cup-2022-for-your-startup-team/index.html b/blog/sweepstake-world-cup-2022-for-your-startup-team/index.html index dca22635c4..1f5457322f 100644 --- a/blog/sweepstake-world-cup-2022-for-your-startup-team/index.html +++ b/blog/sweepstake-world-cup-2022-for-your-startup-team/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Sweepstake World Cup 2022 for your startup team

    · 3 min read


    In this blogpost, we share how we organized a World Cup 2022 sweepstake for our startup team as a team building activity, and how we built a slack bot to facilitate discussions around the event.

    The open source code is available here.

    At OpenBB, the team puts in so much hard work for our product that doing a team event is like a breath of fresh air. With the World Cup 2022 now taking place and more than half of the team being from Europe (where football is the main sport), we thought that it would be nice to run an OpenBB sweepstake.

    We decided to offer a prize to the teams that end up on the podium. 1st place gets X, 2nd place gets Y and 3rd place gets Z - with $ X > $ Y > $Z.

    The next step was to assign teams to each employee, so at the end of our all hands meeting we did just that. For that we used this free website: https://spinnerwheel.com/fifa-world-cup-sweepstake-generator.

    This allowed us to spin the wheel of team members and then spin wheel of countries, and get a 1:1 match — it was quite funny to have everyone involved and see the reactions as the wheel was slowing down.

    image

    Most companies stop here.

    ...

    The best part about the sweepstake for me, is that the team members that don’t usually interact with each other on a day to day basis have the opportunity to talk amongst themselves for this.

    So, to encourage these team interactions, the first step was to create a slack channel #worldcup-2022 that we could use to discuss each game.

    But that isn’t enough, because sometimes you require a trigger to start a discussion about the results and the next fixtures.

    I looked for a slack bot that achieved this, but I didn’t find one.

    So I built one using Python which you can find here.

    This is the notification that the #worldcup-2022 receives everyday after all the matches have been played.

    image

    The outcome has been great so far! Our team engagement is even higher than usual and we see team members that don’t work directly with each other having the opportunity to get to know others better.

    If you want to do the same for your team, follow the instructions highlighted here.

    Any feedback is appreciated!

    - - +

    Sweepstake World Cup 2022 for your startup team

    · 3 min read


    In this blogpost, we share how we organized a World Cup 2022 sweepstake for our startup team as a team building activity, and how we built a slack bot to facilitate discussions around the event.

    The open source code is available here.

    At OpenBB, the team puts in so much hard work for our product that doing a team event is like a breath of fresh air. With the World Cup 2022 now taking place and more than half of the team being from Europe (where football is the main sport), we thought that it would be nice to run an OpenBB sweepstake.

    We decided to offer a prize to the teams that end up on the podium. 1st place gets X, 2nd place gets Y and 3rd place gets Z - with $ X > $ Y > $Z.

    The next step was to assign teams to each employee, so at the end of our all hands meeting we did just that. For that we used this free website: https://spinnerwheel.com/fifa-world-cup-sweepstake-generator.

    This allowed us to spin the wheel of team members and then spin wheel of countries, and get a 1:1 match — it was quite funny to have everyone involved and see the reactions as the wheel was slowing down.

    image

    Most companies stop here.

    ...

    The best part about the sweepstake for me, is that the team members that don’t usually interact with each other on a day to day basis have the opportunity to talk amongst themselves for this.

    So, to encourage these team interactions, the first step was to create a slack channel #worldcup-2022 that we could use to discuss each game.

    But that isn’t enough, because sometimes you require a trigger to start a discussion about the results and the next fixtures.

    I looked for a slack bot that achieved this, but I didn’t find one.

    So I built one using Python which you can find here.

    This is the notification that the #worldcup-2022 receives everyday after all the matches have been played.

    image

    The outcome has been great so far! Our team engagement is even higher than usual and we see team members that don’t work directly with each other having the opportunity to get to know others better.

    If you want to do the same for your team, follow the instructions highlighted here.

    Any feedback is appreciated!

    + + \ No newline at end of file diff --git a/blog/tags/a-players/index.html b/blog/tags/a-players/index.html index da03a4082d..7504f64dff 100644 --- a/blog/tags/a-players/index.html +++ b/blog/tags/a-players/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "A Players"

    View All Tags
    - - +

    One post tagged with "A Players"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/academia/index.html b/blog/tags/academia/index.html index aa7effd2cc..ffdbe2ad2f 100644 --- a/blog/tags/academia/index.html +++ b/blog/tags/academia/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Academia"

    View All Tags
    - - +

    One post tagged with "Academia"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/achievements/index.html b/blog/tags/achievements/index.html index 40456ce2e0..ec7003b3a6 100644 --- a/blog/tags/achievements/index.html +++ b/blog/tags/achievements/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Achievements"

    View All Tags
    - - +

    One post tagged with "Achievements"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/agents/index.html b/blog/tags/agents/index.html index 746f36937c..e00621567a 100644 --- a/blog/tags/agents/index.html +++ b/blog/tags/agents/index.html @@ -3,20 +3,20 @@ -One post tagged with "Agents" | Didier Lopes +2 posts tagged with "agents" | Didier Lopes - - + +
    -

    One post tagged with "Agents"

    View All Tags
    - - +

    2 posts tagged with "agents"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/ai/index.html b/blog/tags/ai/index.html index bae570d674..f28ef5dc06 100644 --- a/blog/tags/ai/index.html +++ b/blog/tags/ai/index.html @@ -3,20 +3,20 @@ -5 posts tagged with "ai" | Didier Lopes +6 posts tagged with "ai" | Didier Lopes - - + +
    -

    5 posts tagged with "ai"

    View All Tags
    - - +

    6 posts tagged with "ai"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/airtable/index.html b/blog/tags/airtable/index.html index bdfa00ae2c..5ed9d649d6 100644 --- a/blog/tags/airtable/index.html +++ b/blog/tags/airtable/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Airtable"

    View All Tags
    - - +

    One post tagged with "Airtable"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/algorithm/index.html b/blog/tags/algorithm/index.html index ee74d21894..3a60782192 100644 --- a/blog/tags/algorithm/index.html +++ b/blog/tags/algorithm/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Algorithm"

    View All Tags
    - - +

    One post tagged with "Algorithm"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/anniversary/index.html b/blog/tags/anniversary/index.html index 08157dcf8e..4e9f81afbf 100644 --- a/blog/tags/anniversary/index.html +++ b/blog/tags/anniversary/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Anniversary"

    View All Tags
    - - +

    One post tagged with "Anniversary"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/ap-is/index.html b/blog/tags/ap-is/index.html index 533c6f6fbf..25e675b5b9 100644 --- a/blog/tags/ap-is/index.html +++ b/blog/tags/ap-is/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "APIs"

    View All Tags
    - - +

    One post tagged with "APIs"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/api-key-management/index.html b/blog/tags/api-key-management/index.html index 38df848308..53a0571a3d 100644 --- a/blog/tags/api-key-management/index.html +++ b/blog/tags/api-key-management/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "API Key Management"

    View All Tags
    - - +

    One post tagged with "API Key Management"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/api/index.html b/blog/tags/api/index.html index 8cfc6d74b1..a2ef0fc473 100644 --- a/blog/tags/api/index.html +++ b/blog/tags/api/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "API"

    View All Tags
    - - +

    One post tagged with "API"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/automation/index.html b/blog/tags/automation/index.html index 57d5c10a17..077e1cee2f 100644 --- a/blog/tags/automation/index.html +++ b/blog/tags/automation/index.html @@ -10,13 +10,13 @@ - - + +
    -

    3 posts tagged with "Automation"

    View All Tags
    - - +

    3 posts tagged with "Automation"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/bcg-matrix/index.html b/blog/tags/bcg-matrix/index.html index f784d01dee..b932e01363 100644 --- a/blog/tags/bcg-matrix/index.html +++ b/blog/tags/bcg-matrix/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "BCG Matrix"

    View All Tags

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    - - +

    One post tagged with "BCG Matrix"

    View All Tags

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    + + \ No newline at end of file diff --git a/blog/tags/beautiful-soup/index.html b/blog/tags/beautiful-soup/index.html index cb8bb5fb43..955abaff91 100644 --- a/blog/tags/beautiful-soup/index.html +++ b/blog/tags/beautiful-soup/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Beautiful Soup"

    View All Tags
    - - +

    One post tagged with "Beautiful Soup"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/betting/index.html b/blog/tags/betting/index.html index 2a6ea79b8d..855b2ecb0e 100644 --- a/blog/tags/betting/index.html +++ b/blog/tags/betting/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Betting"

    View All Tags
    - - +

    One post tagged with "Betting"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/blockchain/index.html b/blog/tags/blockchain/index.html index 622791e62d..7915679fce 100644 --- a/blog/tags/blockchain/index.html +++ b/blog/tags/blockchain/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Blockchain"

    View All Tags
    - - +

    One post tagged with "Blockchain"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/bot/index.html b/blog/tags/bot/index.html index 8b41d02010..fde8b2c29d 100644 --- a/blog/tags/bot/index.html +++ b/blog/tags/bot/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "bot"

    View All Tags
    - - +

    2 posts tagged with "bot"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/brand-awareness/index.html b/blog/tags/brand-awareness/index.html index 2830d44d12..eea21e5feb 100644 --- a/blog/tags/brand-awareness/index.html +++ b/blog/tags/brand-awareness/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Brand Awareness"

    View All Tags
    - - +

    One post tagged with "Brand Awareness"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/c/index.html b/blog/tags/c/index.html index b8a139d227..3e8d54b46b 100644 --- a/blog/tags/c/index.html +++ b/blog/tags/c/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "C++"

    View All Tags
    - - +

    One post tagged with "C++"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/card-memorisation/index.html b/blog/tags/card-memorisation/index.html index 733b17d542..3e9271018f 100644 --- a/blog/tags/card-memorisation/index.html +++ b/blog/tags/card-memorisation/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Card Memorisation"

    View All Tags
    - - +

    One post tagged with "Card Memorisation"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/career-advice/index.html b/blog/tags/career-advice/index.html index efc9e2de62..f88780e4bb 100644 --- a/blog/tags/career-advice/index.html +++ b/blog/tags/career-advice/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "Career Advice"

    View All Tags
    - - +

    2 posts tagged with "Career Advice"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/career/index.html b/blog/tags/career/index.html index 4ec78719d1..bd765c8378 100644 --- a/blog/tags/career/index.html +++ b/blog/tags/career/index.html @@ -10,13 +10,13 @@ - - + +
    -

    3 posts tagged with "career"

    View All Tags
    - - +

    3 posts tagged with "career"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/carousel/index.html b/blog/tags/carousel/index.html index fd1f1c9a94..696ab38bf2 100644 --- a/blog/tags/carousel/index.html +++ b/blog/tags/carousel/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Carousel"

    View All Tags
    - - +

    One post tagged with "Carousel"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/chat-gpt/index.html b/blog/tags/chat-gpt/index.html index a05ed42ea1..f6ed727269 100644 --- a/blog/tags/chat-gpt/index.html +++ b/blog/tags/chat-gpt/index.html @@ -10,13 +10,13 @@ - - + +
    -

    3 posts tagged with "ChatGPT"

    View All Tags
    - - +

    3 posts tagged with "ChatGPT"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/chatbots/index.html b/blog/tags/chatbots/index.html index cdd52c39a2..0b96d989be 100644 --- a/blog/tags/chatbots/index.html +++ b/blog/tags/chatbots/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "chatbots"

    View All Tags
    - - +

    One post tagged with "chatbots"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/clothing-brand/index.html b/blog/tags/clothing-brand/index.html index c5052606f9..4b76822fe5 100644 --- a/blog/tags/clothing-brand/index.html +++ b/blog/tags/clothing-brand/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Clothing Brand"

    View All Tags
    - - +

    One post tagged with "Clothing Brand"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/clustering/index.html b/blog/tags/clustering/index.html index 57a9bd9267..fd386e1bda 100644 --- a/blog/tags/clustering/index.html +++ b/blog/tags/clustering/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Clustering"

    View All Tags
    - - +

    One post tagged with "Clustering"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/community-building/index.html b/blog/tags/community-building/index.html index aa119b695c..fb9943686c 100644 --- a/blog/tags/community-building/index.html +++ b/blog/tags/community-building/index.html @@ -10,13 +10,13 @@ - - + +
    -

    3 posts tagged with "Community Building"

    View All Tags
    - - +

    3 posts tagged with "Community Building"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/community/index.html b/blog/tags/community/index.html index 77579aa5df..e8ff0eb2b7 100644 --- a/blog/tags/community/index.html +++ b/blog/tags/community/index.html @@ -10,13 +10,13 @@ - - + +
    -

    3 posts tagged with "Community"

    View All Tags
    - - +

    3 posts tagged with "Community"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/competitive-advantage/index.html b/blog/tags/competitive-advantage/index.html index 2b4bf5c200..12fd94ff0e 100644 --- a/blog/tags/competitive-advantage/index.html +++ b/blog/tags/competitive-advantage/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Competitive Advantage"

    View All Tags

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    - - +

    One post tagged with "Competitive Advantage"

    View All Tags

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    + + \ No newline at end of file diff --git a/blog/tags/content-creation/index.html b/blog/tags/content-creation/index.html index d4c715ac1a..1fa2d77f69 100644 --- a/blog/tags/content-creation/index.html +++ b/blog/tags/content-creation/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Content Creation"

    View All Tags
    - - +

    One post tagged with "Content Creation"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/core/index.html b/blog/tags/core/index.html index a0819d88f2..d0c39e1ffb 100644 --- a/blog/tags/core/index.html +++ b/blog/tags/core/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "core"

    View All Tags
    - - +

    One post tagged with "core"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/cross-validation/index.html b/blog/tags/cross-validation/index.html index 3c3b3c4650..dee25e7a76 100644 --- a/blog/tags/cross-validation/index.html +++ b/blog/tags/cross-validation/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Cross Validation"

    View All Tags
    - - +

    One post tagged with "Cross Validation"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/crypto/index.html b/blog/tags/crypto/index.html index 8da4f617df..ce472e4045 100644 --- a/blog/tags/crypto/index.html +++ b/blog/tags/crypto/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Crypto"

    View All Tags
    - - +

    One post tagged with "Crypto"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/cv/index.html b/blog/tags/cv/index.html index 75a7c888e5..d9f221ff68 100644 --- a/blog/tags/cv/index.html +++ b/blog/tags/cv/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "CV"

    View All Tags
    - - +

    One post tagged with "CV"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/darkpool/index.html b/blog/tags/darkpool/index.html index 6245fe9910..3794a9eb68 100644 --- a/blog/tags/darkpool/index.html +++ b/blog/tags/darkpool/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Darkpool"

    View All Tags
    - - +

    One post tagged with "Darkpool"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/data-access/index.html b/blog/tags/data-access/index.html index 211aaf0905..e92ea9b687 100644 --- a/blog/tags/data-access/index.html +++ b/blog/tags/data-access/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Data Access"

    View All Tags
    - - +

    One post tagged with "Data Access"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/data-analysis/index.html b/blog/tags/data-analysis/index.html index aca80311fc..b68d94fbd0 100644 --- a/blog/tags/data-analysis/index.html +++ b/blog/tags/data-analysis/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Data Analysis"

    View All Tags
    - - +

    One post tagged with "Data Analysis"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/data-customization/index.html b/blog/tags/data-customization/index.html index fab748ea3b..99dc0a00cb 100644 --- a/blog/tags/data-customization/index.html +++ b/blog/tags/data-customization/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Data Customization"

    View All Tags
    - - +

    One post tagged with "Data Customization"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/data-licensing/index.html b/blog/tags/data-licensing/index.html index 105706488e..a40cb94538 100644 --- a/blog/tags/data-licensing/index.html +++ b/blog/tags/data-licensing/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Data Licensing"

    View All Tags
    - - +

    One post tagged with "Data Licensing"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/data-science/index.html b/blog/tags/data-science/index.html index 6057ed8c5e..ce0203ac9b 100644 --- a/blog/tags/data-science/index.html +++ b/blog/tags/data-science/index.html @@ -10,13 +10,13 @@ - - + +
    -

    3 posts tagged with "Data Science"

    View All Tags
    - - +

    3 posts tagged with "Data Science"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/decentralization/index.html b/blog/tags/decentralization/index.html index 151d13f0a0..52388f05b4 100644 --- a/blog/tags/decentralization/index.html +++ b/blog/tags/decentralization/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Decentralization"

    View All Tags
    - - +

    One post tagged with "Decentralization"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/deep-learning/index.html b/blog/tags/deep-learning/index.html index 1f315e73a2..3ffb80c541 100644 --- a/blog/tags/deep-learning/index.html +++ b/blog/tags/deep-learning/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Deep Learning"

    View All Tags
    - - +

    One post tagged with "Deep Learning"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/developer/index.html b/blog/tags/developer/index.html index 484b00d63f..f3d2f176ea 100644 --- a/blog/tags/developer/index.html +++ b/blog/tags/developer/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Developer"

    View All Tags
    - - +

    One post tagged with "Developer"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/discord/index.html b/blog/tags/discord/index.html index a8226680be..c570a89558 100644 --- a/blog/tags/discord/index.html +++ b/blog/tags/discord/index.html @@ -10,13 +10,13 @@ - - + +
    -

    6 posts tagged with "discord"

    View All Tags
    - - +

    6 posts tagged with "discord"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/docker/index.html b/blog/tags/docker/index.html index da401f82fd..e252ec006e 100644 --- a/blog/tags/docker/index.html +++ b/blog/tags/docker/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Docker"

    View All Tags
    - - +

    One post tagged with "Docker"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/documentation/index.html b/blog/tags/documentation/index.html index 5d2b143c2e..c5fafe5c2b 100644 --- a/blog/tags/documentation/index.html +++ b/blog/tags/documentation/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "documentation"

    View All Tags
    - - +

    One post tagged with "documentation"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/due-diligence/index.html b/blog/tags/due-diligence/index.html index 9ff9c004f6..8c724c4cee 100644 --- a/blog/tags/due-diligence/index.html +++ b/blog/tags/due-diligence/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Due Diligence"

    View All Tags
    - - +

    One post tagged with "Due Diligence"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/economy/index.html b/blog/tags/economy/index.html index 77a1333653..1b6b989637 100644 --- a/blog/tags/economy/index.html +++ b/blog/tags/economy/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Economy"

    View All Tags
    - - +

    One post tagged with "Economy"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/education/index.html b/blog/tags/education/index.html index 2bed275104..d4cc6527fb 100644 --- a/blog/tags/education/index.html +++ b/blog/tags/education/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "education"

    View All Tags
    - - +

    2 posts tagged with "education"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/efficiency/index.html b/blog/tags/efficiency/index.html index b97255fe6e..99c6e60109 100644 --- a/blog/tags/efficiency/index.html +++ b/blog/tags/efficiency/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Efficiency"

    View All Tags
    - - +

    One post tagged with "Efficiency"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/employee-compensation/index.html b/blog/tags/employee-compensation/index.html index 9f80b3e7ec..5ee1467a1a 100644 --- a/blog/tags/employee-compensation/index.html +++ b/blog/tags/employee-compensation/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "employee compensation"

    View All Tags
    - - +

    One post tagged with "employee compensation"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/employee-engagement/index.html b/blog/tags/employee-engagement/index.html index ecb6932442..1d96636e27 100644 --- a/blog/tags/employee-engagement/index.html +++ b/blog/tags/employee-engagement/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "employee engagement"

    View All Tags
    - - +

    One post tagged with "employee engagement"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/equity-top-ups/index.html b/blog/tags/equity-top-ups/index.html index 26edc7b5ff..fb1a3fb76b 100644 --- a/blog/tags/equity-top-ups/index.html +++ b/blog/tags/equity-top-ups/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "equity top-ups"

    View All Tags
    - - +

    One post tagged with "equity top-ups"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/equity/index.html b/blog/tags/equity/index.html index bbe3f7ad4a..712d8dbea6 100644 --- a/blog/tags/equity/index.html +++ b/blog/tags/equity/index.html @@ -10,13 +10,13 @@ - - + +
    -

    3 posts tagged with "equity"

    View All Tags
    - - +

    3 posts tagged with "equity"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/extensions/index.html b/blog/tags/extensions/index.html index f98b66257e..8590ad3d7a 100644 --- a/blog/tags/extensions/index.html +++ b/blog/tags/extensions/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "extensions"

    View All Tags
    - - +

    One post tagged with "extensions"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/face-recognition/index.html b/blog/tags/face-recognition/index.html index deb446bf87..be2ce67d39 100644 --- a/blog/tags/face-recognition/index.html +++ b/blog/tags/face-recognition/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Face Recognition"

    View All Tags
    - - +

    One post tagged with "Face Recognition"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/feedback/index.html b/blog/tags/feedback/index.html index bc3e4092ea..a8ea671c6a 100644 --- a/blog/tags/feedback/index.html +++ b/blog/tags/feedback/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "feedback"

    View All Tags
    - - +

    One post tagged with "feedback"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/finance-database/index.html b/blog/tags/finance-database/index.html index c2f31d2396..3f0693524d 100644 --- a/blog/tags/finance-database/index.html +++ b/blog/tags/finance-database/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "FinanceDatabase"

    View All Tags
    - - +

    One post tagged with "FinanceDatabase"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/finance/index.html b/blog/tags/finance/index.html index a1592fb7d6..cb43b77168 100644 --- a/blog/tags/finance/index.html +++ b/blog/tags/finance/index.html @@ -3,20 +3,20 @@ -7 posts tagged with "finance" | Didier Lopes +8 posts tagged with "finance" | Didier Lopes - - + +
    -

    7 posts tagged with "finance"

    View All Tags

    · 3 min read


    In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    · 4 min read


    In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    - - +

    8 posts tagged with "finance"

    View All Tags

    · 3 min read


    In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    · 4 min read


    In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    + + \ No newline at end of file diff --git a/blog/tags/financial-chatbot/index.html b/blog/tags/financial-chatbot/index.html index 3c4941dd84..c39b91031c 100644 --- a/blog/tags/financial-chatbot/index.html +++ b/blog/tags/financial-chatbot/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Financial Chatbot"

    View All Tags
    - - +

    One post tagged with "Financial Chatbot"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/financial-data/index.html b/blog/tags/financial-data/index.html index fcfc43acc4..131ecbdd1c 100644 --- a/blog/tags/financial-data/index.html +++ b/blog/tags/financial-data/index.html @@ -10,13 +10,13 @@ - - + +
    -

    3 posts tagged with "Financial Data"

    View All Tags
    - - +

    3 posts tagged with "Financial Data"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/financial-world/index.html b/blog/tags/financial-world/index.html index 703acd10f6..39f3bc7855 100644 --- a/blog/tags/financial-world/index.html +++ b/blog/tags/financial-world/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "financial world"

    View All Tags
    - - +

    One post tagged with "financial world"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/flexible-hours/index.html b/blog/tags/flexible-hours/index.html index 4f84d52bc0..53eff00063 100644 --- a/blog/tags/flexible-hours/index.html +++ b/blog/tags/flexible-hours/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Flexible Hours"

    View All Tags
    - - +

    One post tagged with "Flexible Hours"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/football/index.html b/blog/tags/football/index.html index ec17cef01d..f0e5aa677c 100644 --- a/blog/tags/football/index.html +++ b/blog/tags/football/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Football"

    View All Tags
    - - +

    One post tagged with "Football"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/founder/index.html b/blog/tags/founder/index.html index a3494ef5d1..60efba406f 100644 --- a/blog/tags/founder/index.html +++ b/blog/tags/founder/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "founder"

    View All Tags
    - - +

    One post tagged with "founder"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/free/index.html b/blog/tags/free/index.html index 8c54025169..73ec94d667 100644 --- a/blog/tags/free/index.html +++ b/blog/tags/free/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Free"

    View All Tags
    - - +

    One post tagged with "Free"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/future/index.html b/blog/tags/future/index.html index 90368a4eae..ad7a4a8170 100644 --- a/blog/tags/future/index.html +++ b/blog/tags/future/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "future"

    View All Tags
    - - +

    2 posts tagged with "future"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/gamestonk-terminal/index.html b/blog/tags/gamestonk-terminal/index.html index c64e635a81..7afa6b76fd 100644 --- a/blog/tags/gamestonk-terminal/index.html +++ b/blog/tags/gamestonk-terminal/index.html @@ -10,13 +10,13 @@ - - + +
    -

    7 posts tagged with "Gamestonk Terminal"

    View All Tags

    · 3 min read


    In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    · 4 min read


    In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    - - +

    7 posts tagged with "Gamestonk Terminal"

    View All Tags

    · 3 min read


    In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    · 4 min read


    In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    + + \ No newline at end of file diff --git a/blog/tags/ge-mc-kinsey-matrix/index.html b/blog/tags/ge-mc-kinsey-matrix/index.html index 5b1e653b6e..688ce8a467 100644 --- a/blog/tags/ge-mc-kinsey-matrix/index.html +++ b/blog/tags/ge-mc-kinsey-matrix/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "GE McKinsey Matrix"

    View All Tags

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    - - +

    One post tagged with "GE McKinsey Matrix"

    View All Tags

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    + + \ No newline at end of file diff --git a/blog/tags/git-hub/index.html b/blog/tags/git-hub/index.html index 41340d6bb4..c2b2b4d2c4 100644 --- a/blog/tags/git-hub/index.html +++ b/blog/tags/git-hub/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "GitHub"

    View All Tags
    - - +

    One post tagged with "GitHub"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/giveaways/index.html b/blog/tags/giveaways/index.html index bd1b587c37..8d9749ffc4 100644 --- a/blog/tags/giveaways/index.html +++ b/blog/tags/giveaways/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Giveaways"

    View All Tags
    - - +

    One post tagged with "Giveaways"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/gps/index.html b/blog/tags/gps/index.html index c0d1d5f1f9..ea13e39228 100644 --- a/blog/tags/gps/index.html +++ b/blog/tags/gps/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "GPS"

    View All Tags
    - - +

    One post tagged with "GPS"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/growth/index.html b/blog/tags/growth/index.html index eb5a3d8a18..3d5d8f7cd1 100644 --- a/blog/tags/growth/index.html +++ b/blog/tags/growth/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Growth"

    View All Tags
    - - +

    One post tagged with "Growth"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/gui/index.html b/blog/tags/gui/index.html index cf493dbb0d..9480bb64de 100644 --- a/blog/tags/gui/index.html +++ b/blog/tags/gui/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "GUI"

    View All Tags
    - - +

    One post tagged with "GUI"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/hard-work/index.html b/blog/tags/hard-work/index.html index 8a9c7b28c7..e1fd3406ff 100644 --- a/blog/tags/hard-work/index.html +++ b/blog/tags/hard-work/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "hard work"

    View All Tags
    - - +

    2 posts tagged with "hard work"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/hiring/index.html b/blog/tags/hiring/index.html index 535b73c505..794bf50015 100644 --- a/blog/tags/hiring/index.html +++ b/blog/tags/hiring/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "hiring"

    View All Tags
    - - +

    2 posts tagged with "hiring"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/hugo-website/index.html b/blog/tags/hugo-website/index.html index 73574af69c..740338ba80 100644 --- a/blog/tags/hugo-website/index.html +++ b/blog/tags/hugo-website/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Hugo Website"

    View All Tags
    - - +

    One post tagged with "Hugo Website"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/hybrid-work/index.html b/blog/tags/hybrid-work/index.html index cf36d61da4..598a5a340e 100644 --- a/blog/tags/hybrid-work/index.html +++ b/blog/tags/hybrid-work/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "hybrid work"

    View All Tags
    - - +

    One post tagged with "hybrid work"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/i-os/index.html b/blog/tags/i-os/index.html index 9d34e23f5a..d31bdce41c 100644 --- a/blog/tags/i-os/index.html +++ b/blog/tags/i-os/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "iOS"

    View All Tags
    - - +

    One post tagged with "iOS"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/icmla/index.html b/blog/tags/icmla/index.html index 46dd2146ea..db59bd198c 100644 --- a/blog/tags/icmla/index.html +++ b/blog/tags/icmla/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "ICMLA"

    View All Tags
    - - +

    One post tagged with "ICMLA"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/im-db-py/index.html b/blog/tags/im-db-py/index.html index 28acaf2a58..ebdb0fe819 100644 --- a/blog/tags/im-db-py/index.html +++ b/blog/tags/im-db-py/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "IMDbPy"

    View All Tags
    - - +

    One post tagged with "IMDbPy"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/image-processing/index.html b/blog/tags/image-processing/index.html index 535a07d93e..5b3f72afa3 100644 --- a/blog/tags/image-processing/index.html +++ b/blog/tags/image-processing/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Image Processing"

    View All Tags
    - - +

    One post tagged with "Image Processing"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html index 96f4360734..493f7d3867 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Tags

    - - +

    Tags

    + + \ No newline at end of file diff --git a/blog/tags/industry-analysis/index.html b/blog/tags/industry-analysis/index.html index fd5f594455..d467aca289 100644 --- a/blog/tags/industry-analysis/index.html +++ b/blog/tags/industry-analysis/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Industry Analysis"

    View All Tags
    - - +

    One post tagged with "Industry Analysis"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/infrastructure/index.html b/blog/tags/infrastructure/index.html index 41b6df91f4..dfeffc8c2b 100644 --- a/blog/tags/infrastructure/index.html +++ b/blog/tags/infrastructure/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "infrastructure"

    View All Tags
    - - +

    One post tagged with "infrastructure"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/insights/index.html b/blog/tags/insights/index.html index a858e6c7da..f0da913985 100644 --- a/blog/tags/insights/index.html +++ b/blog/tags/insights/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Insights"

    View All Tags
    - - +

    One post tagged with "Insights"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/interactive-charts/index.html b/blog/tags/interactive-charts/index.html index 401485398f..9547c30327 100644 --- a/blog/tags/interactive-charts/index.html +++ b/blog/tags/interactive-charts/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Interactive Charts"

    View All Tags
    - - +

    One post tagged with "Interactive Charts"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/interactive-tables/index.html b/blog/tags/interactive-tables/index.html index e0138d8f69..3776564880 100644 --- a/blog/tags/interactive-tables/index.html +++ b/blog/tags/interactive-tables/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Interactive Tables"

    View All Tags
    - - +

    One post tagged with "Interactive Tables"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/investment-research/index.html b/blog/tags/investment-research/index.html index ecc2a71ecb..a837c4a9a7 100644 --- a/blog/tags/investment-research/index.html +++ b/blog/tags/investment-research/index.html @@ -10,13 +10,13 @@ - - + +
    -

    6 posts tagged with "Investment Research"

    View All Tags
    - - +

    6 posts tagged with "Investment Research"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/investment/index.html b/blog/tags/investment/index.html index bedefe4bf6..fc87de4db7 100644 --- a/blog/tags/investment/index.html +++ b/blog/tags/investment/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "investment"

    View All Tags
    - - +

    2 posts tagged with "investment"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/java/index.html b/blog/tags/java/index.html index 91e20d555a..77ffa008c9 100644 --- a/blog/tags/java/index.html +++ b/blog/tags/java/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Java"

    View All Tags
    - - +

    One post tagged with "Java"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/job-change/index.html b/blog/tags/job-change/index.html index 3baba0d28e..42f5cb8305 100644 --- a/blog/tags/job-change/index.html +++ b/blog/tags/job-change/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "job change"

    View All Tags
    - - +

    One post tagged with "job change"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/job-hunting/index.html b/blog/tags/job-hunting/index.html index 8df7256d88..57055b9909 100644 --- a/blog/tags/job-hunting/index.html +++ b/blog/tags/job-hunting/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Job Hunting"

    View All Tags
    - - +

    One post tagged with "Job Hunting"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/jupyter-lab/index.html b/blog/tags/jupyter-lab/index.html index a94a321f41..b0f2672a60 100644 --- a/blog/tags/jupyter-lab/index.html +++ b/blog/tags/jupyter-lab/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Jupyter Lab"

    View All Tags
    - - +

    One post tagged with "Jupyter Lab"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/k-means/index.html b/blog/tags/k-means/index.html index 84c6a818d3..f0e4f1276c 100644 --- a/blog/tags/k-means/index.html +++ b/blog/tags/k-means/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "K-means"

    View All Tags
    - - +

    One post tagged with "K-means"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/langchain/index.html b/blog/tags/langchain/index.html new file mode 100644 index 0000000000..ccf5ddcc25 --- /dev/null +++ b/blog/tags/langchain/index.html @@ -0,0 +1,22 @@ + + + + + +One post tagged with "langchain" | Didier Lopes + + + + + + + + + + +
    +

    One post tagged with "langchain"

    View All Tags
    + + + + \ No newline at end of file diff --git a/blog/tags/learning/index.html b/blog/tags/learning/index.html index 61c0abd75e..825b436f22 100644 --- a/blog/tags/learning/index.html +++ b/blog/tags/learning/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "learning"

    View All Tags
    - - +

    One post tagged with "learning"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/linked-in/index.html b/blog/tags/linked-in/index.html index 002883a514..d02583bf5e 100644 --- a/blog/tags/linked-in/index.html +++ b/blog/tags/linked-in/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "LinkedIn"

    View All Tags
    - - +

    One post tagged with "LinkedIn"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/ll-ms/index.html b/blog/tags/ll-ms/index.html index a89dbf9ea3..d82c94f140 100644 --- a/blog/tags/ll-ms/index.html +++ b/blog/tags/ll-ms/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "LLMs"

    View All Tags

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    - - +

    One post tagged with "LLMs"

    View All Tags

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    + + \ No newline at end of file diff --git a/blog/tags/llamaindex/index.html b/blog/tags/llamaindex/index.html new file mode 100644 index 0000000000..23277bc953 --- /dev/null +++ b/blog/tags/llamaindex/index.html @@ -0,0 +1,22 @@ + + + + + +One post tagged with "llamaindex" | Didier Lopes + + + + + + + + + + +
    +

    One post tagged with "llamaindex"

    View All Tags
    + + + + \ No newline at end of file diff --git a/blog/tags/london/index.html b/blog/tags/london/index.html index 7a893017ed..fc668d761b 100644 --- a/blog/tags/london/index.html +++ b/blog/tags/london/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "London"

    View All Tags
    - - +

    2 posts tagged with "London"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/machine-learning/index.html b/blog/tags/machine-learning/index.html index a02e96b708..816a359c4c 100644 --- a/blog/tags/machine-learning/index.html +++ b/blog/tags/machine-learning/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "Machine Learning"

    View All Tags
    - - +

    2 posts tagged with "Machine Learning"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/management/index.html b/blog/tags/management/index.html index fa791c1850..9aac0bfba1 100644 --- a/blog/tags/management/index.html +++ b/blog/tags/management/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Management"

    View All Tags
    - - +

    One post tagged with "Management"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/market-attractiveness/index.html b/blog/tags/market-attractiveness/index.html index 6704ef11ae..035759c80a 100644 --- a/blog/tags/market-attractiveness/index.html +++ b/blog/tags/market-attractiveness/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Market Attractiveness"

    View All Tags

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    - - +

    One post tagged with "Market Attractiveness"

    View All Tags

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    + + \ No newline at end of file diff --git a/blog/tags/marketing/index.html b/blog/tags/marketing/index.html index 4dbbe76400..17608a6c13 100644 --- a/blog/tags/marketing/index.html +++ b/blog/tags/marketing/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Marketing"

    View All Tags
    - - +

    One post tagged with "Marketing"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/meme-bot/index.html b/blog/tags/meme-bot/index.html index dff3e782aa..77e416f4ca 100644 --- a/blog/tags/meme-bot/index.html +++ b/blog/tags/meme-bot/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Meme Bot"

    View All Tags
    - - +

    One post tagged with "Meme Bot"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/meme-filter/index.html b/blog/tags/meme-filter/index.html index d062a4e5fa..4ba6e1b91e 100644 --- a/blog/tags/meme-filter/index.html +++ b/blog/tags/meme-filter/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Meme Filter"

    View All Tags
    - - +

    One post tagged with "Meme Filter"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/memory-palace/index.html b/blog/tags/memory-palace/index.html index 5a8c3dde6e..a7ae738e95 100644 --- a/blog/tags/memory-palace/index.html +++ b/blog/tags/memory-palace/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Memory Palace"

    View All Tags
    - - +

    One post tagged with "Memory Palace"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/memory-training/index.html b/blog/tags/memory-training/index.html index 3eaef09543..acb2bd71fc 100644 --- a/blog/tags/memory-training/index.html +++ b/blog/tags/memory-training/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Memory Training"

    View All Tags
    - - +

    One post tagged with "Memory Training"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/metrics/index.html b/blog/tags/metrics/index.html index 33a48789f6..1cf87facfe 100644 --- a/blog/tags/metrics/index.html +++ b/blog/tags/metrics/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Metrics"

    View All Tags
    - - +

    One post tagged with "Metrics"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/mindsdb/index.html b/blog/tags/mindsdb/index.html new file mode 100644 index 0000000000..4d42cdeef5 --- /dev/null +++ b/blog/tags/mindsdb/index.html @@ -0,0 +1,22 @@ + + + + + +One post tagged with "mindsdb" | Didier Lopes + + + + + + + + + + +
    +

    One post tagged with "mindsdb"

    View All Tags
    + + + + \ No newline at end of file diff --git a/blog/tags/ml/index.html b/blog/tags/ml/index.html index 4145eafc8c..755f62dccb 100644 --- a/blog/tags/ml/index.html +++ b/blog/tags/ml/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "ML"

    View All Tags
    - - +

    One post tagged with "ML"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/momentum/index.html b/blog/tags/momentum/index.html index 20e464b96f..91d9ac693a 100644 --- a/blog/tags/momentum/index.html +++ b/blog/tags/momentum/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Momentum"

    View All Tags
    - - +

    One post tagged with "Momentum"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/monetization/index.html b/blog/tags/monetization/index.html index 0cc296678f..2fdf97e190 100644 --- a/blog/tags/monetization/index.html +++ b/blog/tags/monetization/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "monetization"

    View All Tags
    - - +

    One post tagged with "monetization"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/movies/index.html b/blog/tags/movies/index.html index 83602bb712..ff20049429 100644 --- a/blog/tags/movies/index.html +++ b/blog/tags/movies/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Movies"

    View All Tags
    - - +

    One post tagged with "Movies"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/neist-point/index.html b/blog/tags/neist-point/index.html index add88e3e9d..fb78033794 100644 --- a/blog/tags/neist-point/index.html +++ b/blog/tags/neist-point/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "NeistPoint"

    View All Tags
    - - +

    One post tagged with "NeistPoint"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/neural-networks/index.html b/blog/tags/neural-networks/index.html index 7d905a9c0f..fa560f0b4d 100644 --- a/blog/tags/neural-networks/index.html +++ b/blog/tags/neural-networks/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "Neural Networks"

    View All Tags
    - - +

    2 posts tagged with "Neural Networks"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/nft/index.html b/blog/tags/nft/index.html index e37cb2c5a3..215c3777e5 100644 --- a/blog/tags/nft/index.html +++ b/blog/tags/nft/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "NFT"

    View All Tags
    - - +

    One post tagged with "NFT"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/nixtla/index.html b/blog/tags/nixtla/index.html new file mode 100644 index 0000000000..4176b42a08 --- /dev/null +++ b/blog/tags/nixtla/index.html @@ -0,0 +1,22 @@ + + + + + +One post tagged with "nixtla" | Didier Lopes + + + + + + + + + + +
    +

    One post tagged with "nixtla"

    View All Tags
    + + + + \ No newline at end of file diff --git a/blog/tags/nurvv-run/index.html b/blog/tags/nurvv-run/index.html index fd469a7bab..e2c4fd71bf 100644 --- a/blog/tags/nurvv-run/index.html +++ b/blog/tags/nurvv-run/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "NURVV Run"

    View All Tags
    - - +

    One post tagged with "NURVV Run"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/office-work/index.html b/blog/tags/office-work/index.html index 97dbe97ff4..cedeb8d8dc 100644 --- a/blog/tags/office-work/index.html +++ b/blog/tags/office-work/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "office work"

    View All Tags
    - - +

    One post tagged with "office work"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/open-ai/index.html b/blog/tags/open-ai/index.html index 534caf9c86..4d2000c2d4 100644 --- a/blog/tags/open-ai/index.html +++ b/blog/tags/open-ai/index.html @@ -10,13 +10,13 @@ - - + +
    -

    3 posts tagged with "OpenAI"

    View All Tags
    - - +

    3 posts tagged with "OpenAI"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/open-bb-bot/index.html b/blog/tags/open-bb-bot/index.html index 6157cd9f38..94b66df44d 100644 --- a/blog/tags/open-bb-bot/index.html +++ b/blog/tags/open-bb-bot/index.html @@ -10,13 +10,13 @@ - - + +
    -

    3 posts tagged with "OpenBB Bot"

    View All Tags
    - - +

    3 posts tagged with "OpenBB Bot"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/open-bb-champion/index.html b/blog/tags/open-bb-champion/index.html index 3c51e2f673..955c1667da 100644 --- a/blog/tags/open-bb-champion/index.html +++ b/blog/tags/open-bb-champion/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "OpenBB Champion"

    View All Tags
    - - +

    One post tagged with "OpenBB Champion"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/open-bb-hub/index.html b/blog/tags/open-bb-hub/index.html index 43cc887a4c..0741a5c7c5 100644 --- a/blog/tags/open-bb-hub/index.html +++ b/blog/tags/open-bb-hub/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "OpenBB Hub"

    View All Tags
    - - +

    2 posts tagged with "OpenBB Hub"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/open-bb-sdk/index.html b/blog/tags/open-bb-sdk/index.html index cffc9e38cf..8e5dd00a3d 100644 --- a/blog/tags/open-bb-sdk/index.html +++ b/blog/tags/open-bb-sdk/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "OpenBB SDK"

    View All Tags
    - - +

    2 posts tagged with "OpenBB SDK"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/open-bb-terminal-2-0/index.html b/blog/tags/open-bb-terminal-2-0/index.html index 9fc355afef..51e22d55fa 100644 --- a/blog/tags/open-bb-terminal-2-0/index.html +++ b/blog/tags/open-bb-terminal-2-0/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "OpenBB Terminal 2.0"

    View All Tags
    - - +

    One post tagged with "OpenBB Terminal 2.0"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/open-bb-terminal/index.html b/blog/tags/open-bb-terminal/index.html index e55ea02f25..5749af9aa7 100644 --- a/blog/tags/open-bb-terminal/index.html +++ b/blog/tags/open-bb-terminal/index.html @@ -10,13 +10,13 @@ - - + +
    -

    4 posts tagged with "OpenBB Terminal"

    View All Tags
    - - +

    4 posts tagged with "OpenBB Terminal"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/open-bb/index.html b/blog/tags/open-bb/index.html index 8360a2cbde..f0a7f92469 100644 --- a/blog/tags/open-bb/index.html +++ b/blog/tags/open-bb/index.html @@ -10,13 +10,13 @@ - - + +
    -

    15 posts tagged with "OpenBB"

    View All Tags

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    - - +

    15 posts tagged with "OpenBB"

    View All Tags

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    + + \ No newline at end of file diff --git a/blog/tags/open-source/index.html b/blog/tags/open-source/index.html index 9d50ab4fdc..3c3be890e3 100644 --- a/blog/tags/open-source/index.html +++ b/blog/tags/open-source/index.html @@ -10,13 +10,13 @@ - - + +
    -

    18 posts tagged with "open source"

    View All Tags

    · 3 min read


    In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    · 4 min read


    In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    - - +

    18 posts tagged with "open source"

    View All Tags

    · 3 min read


    In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    · 4 min read


    In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    + + \ No newline at end of file diff --git a/blog/tags/open-startup/index.html b/blog/tags/open-startup/index.html index 202d418e19..fd98dc0257 100644 --- a/blog/tags/open-startup/index.html +++ b/blog/tags/open-startup/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "open-startup"

    View All Tags
    - - +

    One post tagged with "open-startup"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/openbb/index.html b/blog/tags/openbb/index.html index 44950654db..976254db50 100644 --- a/blog/tags/openbb/index.html +++ b/blog/tags/openbb/index.html @@ -3,20 +3,20 @@ -3 posts tagged with "openbb" | Didier Lopes +4 posts tagged with "openbb" | Didier Lopes - - + +
    -

    3 posts tagged with "openbb"

    View All Tags
    - - +

    4 posts tagged with "openbb"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/options-fam-bot/index.html b/blog/tags/options-fam-bot/index.html index 474f94b638..d9c3ff9f3e 100644 --- a/blog/tags/options-fam-bot/index.html +++ b/blog/tags/options-fam-bot/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "OptionsFamBot"

    View All Tags
    - - +

    One post tagged with "OptionsFamBot"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/options/index.html b/blog/tags/options/index.html index 171a13a976..a549e4ba27 100644 --- a/blog/tags/options/index.html +++ b/blog/tags/options/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Options"

    View All Tags
    - - +

    One post tagged with "Options"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/package/index.html b/blog/tags/package/index.html index 64a25fa484..b61a49bed5 100644 --- a/blog/tags/package/index.html +++ b/blog/tags/package/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "package"

    View All Tags
    - - +

    One post tagged with "package"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/pao-system/index.html b/blog/tags/pao-system/index.html index 1e6982707d..6fed002fb0 100644 --- a/blog/tags/pao-system/index.html +++ b/blog/tags/pao-system/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "PAO System"

    View All Tags
    - - +

    One post tagged with "PAO System"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/personalization/index.html b/blog/tags/personalization/index.html index 426ac8bf20..f10ca931fa 100644 --- a/blog/tags/personalization/index.html +++ b/blog/tags/personalization/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Personalization"

    View All Tags
    - - +

    One post tagged with "Personalization"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/ph-d-thesis/index.html b/blog/tags/ph-d-thesis/index.html index 8e1ab3cbc9..5061453834 100644 --- a/blog/tags/ph-d-thesis/index.html +++ b/blog/tags/ph-d-thesis/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "PhD Thesis"

    View All Tags
    - - +

    One post tagged with "PhD Thesis"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/platform/index.html b/blog/tags/platform/index.html index dfbfbadb57..d76a44470a 100644 --- a/blog/tags/platform/index.html +++ b/blog/tags/platform/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "platform"

    View All Tags
    - - +

    One post tagged with "platform"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/product-documentation/index.html b/blog/tags/product-documentation/index.html index a578865302..72579157a9 100644 --- a/blog/tags/product-documentation/index.html +++ b/blog/tags/product-documentation/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Product Documentation"

    View All Tags
    - - +

    One post tagged with "Product Documentation"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/product/index.html b/blog/tags/product/index.html index 2ce03f973c..65eae5715c 100644 --- a/blog/tags/product/index.html +++ b/blog/tags/product/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "product"

    View All Tags
    - - +

    One post tagged with "product"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/productivity/index.html b/blog/tags/productivity/index.html index 2aeb1ff049..8092e8da78 100644 --- a/blog/tags/productivity/index.html +++ b/blog/tags/productivity/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "productivity"

    View All Tags
    - - +

    2 posts tagged with "productivity"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/programming/index.html b/blog/tags/programming/index.html index 030f1e705a..a0e96cd151 100644 --- a/blog/tags/programming/index.html +++ b/blog/tags/programming/index.html @@ -10,13 +10,13 @@ - - + +
    -

    5 posts tagged with "Programming"

    View All Tags

    · 3 min read


    In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    · 4 min read


    In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    - - +

    5 posts tagged with "Programming"

    View All Tags

    · 3 min read


    In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    · 4 min read


    In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    + + \ No newline at end of file diff --git a/blog/tags/project-management/index.html b/blog/tags/project-management/index.html index 9ad52dcf77..4399878954 100644 --- a/blog/tags/project-management/index.html +++ b/blog/tags/project-management/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "Project Management"

    View All Tags
    - - +

    2 posts tagged with "Project Management"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/publishing/index.html b/blog/tags/publishing/index.html index ce56fe7e56..2ee792a6b4 100644 --- a/blog/tags/publishing/index.html +++ b/blog/tags/publishing/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "publishing"

    View All Tags
    - - +

    One post tagged with "publishing"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/pypi/index.html b/blog/tags/pypi/index.html index cbdb41fe8d..d5126e7681 100644 --- a/blog/tags/pypi/index.html +++ b/blog/tags/pypi/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "pypi"

    View All Tags
    - - +

    One post tagged with "pypi"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/python/index.html b/blog/tags/python/index.html index 8258e5eb1c..61141cc56a 100644 --- a/blog/tags/python/index.html +++ b/blog/tags/python/index.html @@ -10,13 +10,13 @@ - - + +
    -

    12 posts tagged with "Python"

    View All Tags
    - - +

    12 posts tagged with "Python"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/recipes/index.html b/blog/tags/recipes/index.html index c2479a645b..1f8ed4d015 100644 --- a/blog/tags/recipes/index.html +++ b/blog/tags/recipes/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Recipes"

    View All Tags
    - - +

    One post tagged with "Recipes"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/reddit/index.html b/blog/tags/reddit/index.html index 2aadeaa5b5..0de50f912f 100644 --- a/blog/tags/reddit/index.html +++ b/blog/tags/reddit/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Reddit"

    View All Tags
    - - +

    One post tagged with "Reddit"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/relocation/index.html b/blog/tags/relocation/index.html index 76a4882808..11641e0481 100644 --- a/blog/tags/relocation/index.html +++ b/blog/tags/relocation/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Relocation"

    View All Tags
    - - +

    One post tagged with "Relocation"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/remote-work/index.html b/blog/tags/remote-work/index.html index d5b596c845..ab5d811071 100644 --- a/blog/tags/remote-work/index.html +++ b/blog/tags/remote-work/index.html @@ -10,13 +10,13 @@ - - + +
    -

    3 posts tagged with "remote work"

    View All Tags
    - - +

    3 posts tagged with "remote work"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/research/index.html b/blog/tags/research/index.html index f55eafd906..0b91b20560 100644 --- a/blog/tags/research/index.html +++ b/blog/tags/research/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "research"

    View All Tags
    - - +

    One post tagged with "research"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/roadmap/index.html b/blog/tags/roadmap/index.html index 0938e55765..751855d903 100644 --- a/blog/tags/roadmap/index.html +++ b/blog/tags/roadmap/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "roadmap"

    View All Tags
    - - +

    One post tagged with "roadmap"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/routines/index.html b/blog/tags/routines/index.html index 1ae68be34f..596ce5663c 100644 --- a/blog/tags/routines/index.html +++ b/blog/tags/routines/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Routines"

    View All Tags
    - - +

    One post tagged with "Routines"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/san-francisco/index.html b/blog/tags/san-francisco/index.html index ae336bec53..773179811e 100644 --- a/blog/tags/san-francisco/index.html +++ b/blog/tags/san-francisco/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "San Francisco"

    View All Tags
    - - +

    One post tagged with "San Francisco"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/script-management/index.html b/blog/tags/script-management/index.html index 2bc0a14e40..dab161513d 100644 --- a/blog/tags/script-management/index.html +++ b/blog/tags/script-management/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Script Management"

    View All Tags
    - - +

    One post tagged with "Script Management"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/scriptable/index.html b/blog/tags/scriptable/index.html index 88905d82e5..bc09682f2f 100644 --- a/blog/tags/scriptable/index.html +++ b/blog/tags/scriptable/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Scriptable"

    View All Tags
    - - +

    One post tagged with "Scriptable"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/sdk/index.html b/blog/tags/sdk/index.html index 8a1075a233..fe19e1e343 100644 --- a/blog/tags/sdk/index.html +++ b/blog/tags/sdk/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "sdk"

    View All Tags
    - - +

    2 posts tagged with "sdk"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/sector-analysis/index.html b/blog/tags/sector-analysis/index.html index e9f508ebd1..f5fef1f03e 100644 --- a/blog/tags/sector-analysis/index.html +++ b/blog/tags/sector-analysis/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Sector Analysis"

    View All Tags
    - - +

    One post tagged with "Sector Analysis"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/seed-stage/index.html b/blog/tags/seed-stage/index.html index 087cf0a1b2..218a2192ca 100644 --- a/blog/tags/seed-stage/index.html +++ b/blog/tags/seed-stage/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "seed stage"

    View All Tags
    - - +

    2 posts tagged with "seed stage"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/self-improvement/index.html b/blog/tags/self-improvement/index.html index f6deeb4fbb..b846595085 100644 --- a/blog/tags/self-improvement/index.html +++ b/blog/tags/self-improvement/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "self-improvement"

    View All Tags
    - - +

    One post tagged with "self-improvement"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/self-learning/index.html b/blog/tags/self-learning/index.html index 3335af9bd5..0b13ea65c1 100644 --- a/blog/tags/self-learning/index.html +++ b/blog/tags/self-learning/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Self-Learning"

    View All Tags
    - - +

    One post tagged with "Self-Learning"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/sensor-fusion-engineer/index.html b/blog/tags/sensor-fusion-engineer/index.html index 4a9fde25f1..2099d5fa5a 100644 --- a/blog/tags/sensor-fusion-engineer/index.html +++ b/blog/tags/sensor-fusion-engineer/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "sensor fusion engineer"

    View All Tags
    - - +

    One post tagged with "sensor fusion engineer"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/side-project/index.html b/blog/tags/side-project/index.html index feb4866ac2..dc53de81e2 100644 --- a/blog/tags/side-project/index.html +++ b/blog/tags/side-project/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Side Project"

    View All Tags
    - - +

    One post tagged with "Side Project"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/silicon-valley/index.html b/blog/tags/silicon-valley/index.html index d445e13d10..a47a745e16 100644 --- a/blog/tags/silicon-valley/index.html +++ b/blog/tags/silicon-valley/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Silicon Valley"

    View All Tags
    - - +

    One post tagged with "Silicon Valley"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/skills/index.html b/blog/tags/skills/index.html index cbf81372bd..03009fdc83 100644 --- a/blog/tags/skills/index.html +++ b/blog/tags/skills/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "skills"

    View All Tags
    - - +

    One post tagged with "skills"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/slack-bot/index.html b/blog/tags/slack-bot/index.html index 3f548f50a4..66ba6f6660 100644 --- a/blog/tags/slack-bot/index.html +++ b/blog/tags/slack-bot/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Slack Bot"

    View All Tags
    - - +

    One post tagged with "Slack Bot"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/slack/index.html b/blog/tags/slack/index.html index 0f8446c48d..11461e129f 100644 --- a/blog/tags/slack/index.html +++ b/blog/tags/slack/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Slack"

    View All Tags
    - - +

    One post tagged with "Slack"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/smart-contracts/index.html b/blog/tags/smart-contracts/index.html index 4a854ff23e..dce2cc823b 100644 --- a/blog/tags/smart-contracts/index.html +++ b/blog/tags/smart-contracts/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Smart Contracts"

    View All Tags
    - - +

    One post tagged with "Smart Contracts"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/software-development/index.html b/blog/tags/software-development/index.html index eb8603e47c..4564591967 100644 --- a/blog/tags/software-development/index.html +++ b/blog/tags/software-development/index.html @@ -10,13 +10,13 @@ - - + +
    -

    3 posts tagged with "Software Development"

    View All Tags
    - - +

    3 posts tagged with "Software Development"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/software-engineering/index.html b/blog/tags/software-engineering/index.html index 908157f94c..44c6532702 100644 --- a/blog/tags/software-engineering/index.html +++ b/blog/tags/software-engineering/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Software Engineering"

    View All Tags
    - - +

    One post tagged with "Software Engineering"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/sorting-algorithm/index.html b/blog/tags/sorting-algorithm/index.html index d4231eb174..5cebb4ada7 100644 --- a/blog/tags/sorting-algorithm/index.html +++ b/blog/tags/sorting-algorithm/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Sorting Algorithm"

    View All Tags
    - - +

    One post tagged with "Sorting Algorithm"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/startup-team/index.html b/blog/tags/startup-team/index.html index 15a2e702c0..f889c80286 100644 --- a/blog/tags/startup-team/index.html +++ b/blog/tags/startup-team/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Startup Team"

    View All Tags
    - - +

    One post tagged with "Startup Team"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/startup/index.html b/blog/tags/startup/index.html index eb773ac629..70dd1920dd 100644 --- a/blog/tags/startup/index.html +++ b/blog/tags/startup/index.html @@ -10,13 +10,13 @@ - - + +
    -

    5 posts tagged with "startup"

    View All Tags
    - - +

    5 posts tagged with "startup"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/startups/index.html b/blog/tags/startups/index.html index 5d1780c1dc..098910de13 100644 --- a/blog/tags/startups/index.html +++ b/blog/tags/startups/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "startups"

    View All Tags
    - - +

    One post tagged with "startups"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/stock-management/index.html b/blog/tags/stock-management/index.html index 6651274c9e..f98545cec8 100644 --- a/blog/tags/stock-management/index.html +++ b/blog/tags/stock-management/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Stock Management"

    View All Tags
    - - +

    One post tagged with "Stock Management"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/stock-market/index.html b/blog/tags/stock-market/index.html index 3675b8a769..959a446f03 100644 --- a/blog/tags/stock-market/index.html +++ b/blog/tags/stock-market/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "Stock Market"

    View All Tags

    · 3 min read


    In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    · 4 min read


    In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    - - +

    2 posts tagged with "Stock Market"

    View All Tags

    · 3 min read


    In this blogpost, we introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    · 4 min read


    In this blogpost, I introduce Gamestonk Terminal, an open-source project that aims to be a comprehensive tool for financial analysis and stock market research. It includes functionalities for discovering stocks, market sentiment analysis, fundamental and technical analysis, due diligence, prediction techniques, and more.

    The open source code is available here.

    + + \ No newline at end of file diff --git a/blog/tags/stocks/index.html b/blog/tags/stocks/index.html index a2f34d2f9b..26fba10278 100644 --- a/blog/tags/stocks/index.html +++ b/blog/tags/stocks/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Stocks"

    View All Tags
    - - +

    One post tagged with "Stocks"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/success/index.html b/blog/tags/success/index.html index c5dccd7aba..060a9b89f6 100644 --- a/blog/tags/success/index.html +++ b/blog/tags/success/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "success"

    View All Tags
    - - +

    One post tagged with "success"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/sustainability/index.html b/blog/tags/sustainability/index.html index f0652b0e98..84fb410d4e 100644 --- a/blog/tags/sustainability/index.html +++ b/blog/tags/sustainability/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Sustainability"

    View All Tags
    - - +

    One post tagged with "Sustainability"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/sweepstake/index.html b/blog/tags/sweepstake/index.html index 68a4790e8a..0c18d0f793 100644 --- a/blog/tags/sweepstake/index.html +++ b/blog/tags/sweepstake/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Sweepstake"

    View All Tags
    - - +

    One post tagged with "Sweepstake"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/target-market-analysis/index.html b/blog/tags/target-market-analysis/index.html index 8b4392b648..fa67b7ce3e 100644 --- a/blog/tags/target-market-analysis/index.html +++ b/blog/tags/target-market-analysis/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Target Market Analysis"

    View All Tags

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    - - +

    One post tagged with "Target Market Analysis"

    View All Tags

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    + + \ No newline at end of file diff --git a/blog/tags/tattoo/index.html b/blog/tags/tattoo/index.html index 905c1eb022..ced0c3ac41 100644 --- a/blog/tags/tattoo/index.html +++ b/blog/tags/tattoo/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Tattoo"

    View All Tags
    - - +

    One post tagged with "Tattoo"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/team-building/index.html b/blog/tags/team-building/index.html index 53618e4bf8..502f20d2fb 100644 --- a/blog/tags/team-building/index.html +++ b/blog/tags/team-building/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Team Building"

    View All Tags
    - - +

    One post tagged with "Team Building"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/team-happiness/index.html b/blog/tags/team-happiness/index.html index 1b5ec4ae0d..97aca6ec1c 100644 --- a/blog/tags/team-happiness/index.html +++ b/blog/tags/team-happiness/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "team happiness"

    View All Tags
    - - +

    One post tagged with "team happiness"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/team-survey/index.html b/blog/tags/team-survey/index.html index 2d0bc12f37..02bea3736f 100644 --- a/blog/tags/team-survey/index.html +++ b/blog/tags/team-survey/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Team Survey"

    View All Tags
    - - +

    One post tagged with "Team Survey"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/teamwork/index.html b/blog/tags/teamwork/index.html index 3085d7b23a..19c1395b4b 100644 --- a/blog/tags/teamwork/index.html +++ b/blog/tags/teamwork/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Teamwork"

    View All Tags
    - - +

    One post tagged with "Teamwork"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/tech-startups/index.html b/blog/tags/tech-startups/index.html index 8e2633a929..fb2172dabc 100644 --- a/blog/tags/tech-startups/index.html +++ b/blog/tags/tech-startups/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Tech Startups"

    View All Tags
    - - +

    One post tagged with "Tech Startups"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/telegram/index.html b/blog/tags/telegram/index.html index dd29a268b4..752282d111 100644 --- a/blog/tags/telegram/index.html +++ b/blog/tags/telegram/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Telegram"

    View All Tags
    - - +

    One post tagged with "Telegram"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/terminal/index.html b/blog/tags/terminal/index.html index d4d5ddb17a..e60268201b 100644 --- a/blog/tags/terminal/index.html +++ b/blog/tags/terminal/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Terminal"

    View All Tags
    - - +

    One post tagged with "Terminal"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/thrillers/index.html b/blog/tags/thrillers/index.html index 6ea9b54e3c..75895035dc 100644 --- a/blog/tags/thrillers/index.html +++ b/blog/tags/thrillers/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Thrillers"

    View All Tags
    - - +

    One post tagged with "Thrillers"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/time-series-forecasting/index.html b/blog/tags/time-series-forecasting/index.html index 1dca97dd5e..2868cbf670 100644 --- a/blog/tags/time-series-forecasting/index.html +++ b/blog/tags/time-series-forecasting/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Time Series Forecasting"

    View All Tags
    - - +

    One post tagged with "Time Series Forecasting"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/time-series/index.html b/blog/tags/time-series/index.html index 1b20a63557..7c437f4b47 100644 --- a/blog/tags/time-series/index.html +++ b/blog/tags/time-series/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Time Series"

    View All Tags
    - - +

    One post tagged with "Time Series"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/trading/index.html b/blog/tags/trading/index.html index 8549139477..55d8f66182 100644 --- a/blog/tags/trading/index.html +++ b/blog/tags/trading/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Trading"

    View All Tags
    - - +

    One post tagged with "Trading"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/transparency/index.html b/blog/tags/transparency/index.html index 0ec28fa1d4..25a8b58d69 100644 --- a/blog/tags/transparency/index.html +++ b/blog/tags/transparency/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "Transparency"

    View All Tags
    - - +

    2 posts tagged with "Transparency"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/travel/index.html b/blog/tags/travel/index.html index e7b0de3f24..bb91ae7b83 100644 --- a/blog/tags/travel/index.html +++ b/blog/tags/travel/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Travel"

    View All Tags
    - - +

    One post tagged with "Travel"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/tweepy/index.html b/blog/tags/tweepy/index.html index 0972e201a0..731734b8e2 100644 --- a/blog/tags/tweepy/index.html +++ b/blog/tags/tweepy/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Tweepy"

    View All Tags
    - - +

    One post tagged with "Tweepy"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/twitter-api/index.html b/blog/tags/twitter-api/index.html index 417e087563..26928de242 100644 --- a/blog/tags/twitter-api/index.html +++ b/blog/tags/twitter-api/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Twitter API"

    View All Tags
    - - +

    One post tagged with "Twitter API"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/twitter/index.html b/blog/tags/twitter/index.html index 504d2824a1..f3fcb19a7e 100644 --- a/blog/tags/twitter/index.html +++ b/blog/tags/twitter/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "Twitter"

    View All Tags
    - - +

    2 posts tagged with "Twitter"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/ux-ui/index.html b/blog/tags/ux-ui/index.html index 7819387152..34c5f64938 100644 --- a/blog/tags/ux-ui/index.html +++ b/blog/tags/ux-ui/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "UX/UI"

    View All Tags
    - - +

    One post tagged with "UX/UI"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/visa-process/index.html b/blog/tags/visa-process/index.html index 32a44f8d3f..a1a95acc52 100644 --- a/blog/tags/visa-process/index.html +++ b/blog/tags/visa-process/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Visa Process"

    View All Tags
    - - +

    One post tagged with "Visa Process"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/web-3/index.html b/blog/tags/web-3/index.html index 21c5f89e6f..5906c94f12 100644 --- a/blog/tags/web-3/index.html +++ b/blog/tags/web-3/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Web3"

    View All Tags
    - - +

    One post tagged with "Web3"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/web-scraping/index.html b/blog/tags/web-scraping/index.html index e2c667bfc4..fccd9d51dc 100644 --- a/blog/tags/web-scraping/index.html +++ b/blog/tags/web-scraping/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "Web Scraping"

    View All Tags
    - - +

    One post tagged with "Web Scraping"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/work-culture/index.html b/blog/tags/work-culture/index.html index 7a1e0ea4cc..acc101eb2e 100644 --- a/blog/tags/work-culture/index.html +++ b/blog/tags/work-culture/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "work culture"

    View All Tags
    - - +

    2 posts tagged with "work culture"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/work-life-balance/index.html b/blog/tags/work-life-balance/index.html index 7e1a3149cf..6e2e761b35 100644 --- a/blog/tags/work-life-balance/index.html +++ b/blog/tags/work-life-balance/index.html @@ -10,13 +10,13 @@ - - + +
    -

    2 posts tagged with "work-life balance"

    View All Tags
    - - +

    2 posts tagged with "work-life balance"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/world-cup-2022/index.html b/blog/tags/world-cup-2022/index.html index 44d2c91c72..694a8f0f3f 100644 --- a/blog/tags/world-cup-2022/index.html +++ b/blog/tags/world-cup-2022/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "World Cup 2022"

    View All Tags
    - - +

    One post tagged with "World Cup 2022"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/writing/index.html b/blog/tags/writing/index.html index c109cea889..05f1302d9e 100644 --- a/blog/tags/writing/index.html +++ b/blog/tags/writing/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "writing"

    View All Tags
    - - +

    One post tagged with "writing"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/tags/yfinance-api/index.html b/blog/tags/yfinance-api/index.html index 0297b572c6..846d25380a 100644 --- a/blog/tags/yfinance-api/index.html +++ b/blog/tags/yfinance-api/index.html @@ -10,13 +10,13 @@ - - + +
    -

    One post tagged with "yfinance API"

    View All Tags
    - - +

    One post tagged with "yfinance API"

    View All Tags
    + + \ No newline at end of file diff --git a/blog/target-market-analysis-with-the-help-of-llms/index.html b/blog/target-market-analysis-with-the-help-of-llms/index.html index 8ae70972b1..8ddc87ab2d 100644 --- a/blog/target-market-analysis-with-the-help-of-llms/index.html +++ b/blog/target-market-analysis-with-the-help-of-llms/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Target Market Analysis with the help of LLMs

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    After working on OpenBB for over 2 years, we learned which markets to go after and which markets to ignore. You may think that this is intuition, but it’s actually the data that you gathered from talking with 100+ users and learning from others in the industry.

    However, people who don’t know your business as well as you do (new joiners, advisors, or investors), don’t understand why your target market is X and not Y. Hence, it’s important to backtrace your “experience” with data.

    This blog post will focus on how you can perform target market analysis for your company. I will provide the framework and the code to leverage OpenAI to speed up that research process. All of this will be replicable, and you can do it for your own company.

    Context

    This framework is utilized for portfolio analysis in corporate strategy to analyze business units or product lines.

    BCG Matrix

    Initially, BCG implemented its own framework, which you can read more about here. In a nutshell:

    It uses two variables: relative market share and the market growth rate. By combining these two variables into a matrix, a corporation can plot their business units accordingly and determine where to allocate extra (financial) resources, where to cash out and where to divest.

    image

    GE McKinsey Matrix

    Then, the GE McKinsey Matrix was invented, which you can read more about here. To put it briefly:

    It uses two variables: industry attractiveness and the competitive strength of a business unit. By combining these two variables into a matrix, a corporation can plot their business units accordingly and determine where to invest, where to hold their position, and where to harvest or divest.

    image

    As per the blog post, the main difference between these comes from the fact that the latter uses multiple factors that are combined to determine the measure of the two variables: industry attractiveness and competitive strength. Whereas the BCG Matrix only uses 1 variable per axis — relative market share and market growth rate.

    The GE McKinsey Matrix (also known as the Nine-box matrix) has industry attractiveness on the y-axis and competitive strength on the x-axis.

    For industry attractiveness, factors to consider can be: Industry size; Long-run growth rate; Industry structure; Industry life cycle; Macro environment; and Market segmentation.

    For competitive strength, factors to consider can be: Profitability; Market share; Business growth; Brand equity; Level of differentiation; Firm resources; Efficiency and effectiveness of internal linkages; and Customer loyalty.

    How do you build your Matrix?

    All the data will be hypothetical. The goal is to share the process and framework. Each company and market will have its own.

    1. Define your factors

    When we talk about market attractiveness, from your company’s perspective, what makes a market attractive? Consider all those factors and list them. Try to list all the factors that have a weight in that equation, but try to keep them under 10; otherwise, it’s too many to have to assess, and at some point, their weight into the attractiveness is negligible.

    Now do the same for the factors that give your company a competitive advantage.

    2. Weigh each factor

    Not all factors are created equal. Some factors will influence whether a market is attractive or not. Similarly, for your competitive advantage, what factors give your company a bigger edge?

    The goal is to select a weight for each factor so that the sum of the weights for all the factors adds up to 1. The outcome should look something like:

    image

    3. Categorize each factor

    Now you need to decide how granular you want your assessment to be. Initially, at OpenBB, we started with a scale of 1–3 where 1 is low, 2 is medium, and 3 is high. However, soon we found this to not be good enough since there was not enough granularity. Thus, we increased the range from 1 to 5.

    Once you decide on that range, you need to categorize it in a way that makes sense for each factor. This ensures that everyone on the team is on the same page when it comes to assessing a factor. For instance:

    image

    This Google / Excel spreadsheet should look like:

    image

    4. Select a list of target markets you want to evaluate

    Create a new Google spreadsheet / Excel page for each of them. This will allow you to contain all details for each target market on the same page.

    For the purposes of this demonstration, we will use “TargetMarket1,” “TargetMarket2,” and “TargetMarket3.”

    5. Assess a target market based on selected factors

    Now that we have decided on all the factors associated with the target market attractiveness, as well as the competitive advantage, you need to assess each of these based on the target markets that you have selected.

    Each target market page should look something like this:

    image

    The factors and weights are automatically pulled from the “Framework page” built previously.

    Here you just need to set the rating from 1 to 5 (or according to the range you previously specified) based on the evaluation criteria defined. Each of these ratings is multiplied by the weight, and all of those values are summed up together. If your selected range is from 1 to 5, then it means that the minimum and maximum values are 1 and 5, since the weights add up to 1.

    Note that the last column allows you to add comments based on any additional information/criteria that you used to make a rating choice.

    6. Discover Total Addressable Market

    On the spreadsheet above, you may have seen the total addressable market value. I will address how to find this value in a subsequent post.

    This is extremely important because even if the market is really attractive, its size can dictate whether to pursue it or not. Most of the time, you don’t want to be chasing a small market opportunity.

    7. Final matrix / chart

    Once you have all this data, you can build the following for each of the target markets:

    image

    Note that all you need from each target market is:

    Competitive advantage — the sum of all the factors and their levels multiplied by their weights gives the x-axis.

    Target market attractiveness — the sum of all the factors and their levels multiplied by their weights gives the y-axis.

    Total Addressable Market (TAM) — gives the bubble size on the chart.

    Then you are ready to make a decision on which market you wish to pursue, and you have data to back it up.

    Note: There are a lot of assumptions, and you’ll never have it perfect. But with several iterations with your team, you’ll gain more confidence in those assumptions over time, ensuring that you are on the right track and pursuing the right opportunity.

    Using OpenAI to bounce ideas to assess a target market

    Sometimes, it can be hard to provide a rating for each of the factors, or it would be better to bounce ideas off someone. This is where you can leverage OpenAI’s GPT-4 to help you get started.

    I built a script that would read from an Excel spreadsheet all the information from the framework page that we have set. That basically means:

    • All the factors associated with target market attractiveness, and their levels of description
    • All the factors associated with competitive advantage, and their levels of description

    Then I prompted GPT-4 to select a level for each of the factors of interest for both attractiveness and competitive advantage, based on what it knows about a specific target market.

    For example, let’s say we want to assess the competitive advantage for the target market “Hedge Funds” — this is what the prompt looks like:

    We want to assess our competitive advantage based in relation 
    with factors where we are have an advantage.

    Can you classify those for the following target market: 'Hedge Funds'

    The factors that we will access this market are presented below:

    When assessing Data Aggregation, these are the rules:
    We attribute a value of 5 if We provide all data a market needs
    We attribute a value of 4 if We provide most data a market needs
    We attribute a value of 3 if We provide some data a market needs
    We attribute a value of 2 if We provide very little data a market needs
    We attribute a value of 1 if We provide no data a market needs

    When assessing Customization, these are the rules:
    We attribute a value of 5 if Market will leverage our open source code
    We attribute a value of 4 if Market will fully customize our platform to make it their own
    We attribute a value of 3 if Market will customize a bit their platform
    We attribute a value of 2 if Market will use platform as is and customize after some time
    We attribute a value of 1 if Market will use platform as is

    When assessing Automation, these are the rules:
    We attribute a value of 5 if Allows to save more than 70% of time
    We attribute a value of 4 if Allows to save 50%-70% of time
    We attribute a value of 3 if Allows to save 30%-50% of time
    We attribute a value of 2 if Allows to save 15%-30% of time
    We attribute a value of 1 if Doesn't save any time on automation

    When assessing Factor4, these are the rules:
    We attribute a value of 5 if Very high
    We attribute a value of 4 if High
    We attribute a value of 3 if Medium
    We attribute a value of 2 if Low
    We attribute a value of 1 if Very low

    When assessing Factor5, these are the rules:
    We attribute a value of 5 if Very high
    We attribute a value of 4 if High
    We attribute a value of 3 if Medium
    We attribute a value of 2 if Low
    We attribute a value of 1 if Very low

    Given this information, can you return a level for each of the factors
    that is our competitive advantage from a viewpoint of Hedge Funds target market.

    Please return it in a json dictionary format with the factor and level only.
    Do not add any other text apart from that.
    Indent the json with 4 spaces.

    Then, using the following block of code, we can get OpenAI’s GPT-4 to provide its input:

        response = openai.ChatCompletion.create(
    model="gpt-4",
    messages=[
    {
    "role": "system",
    "content":
    """
    You are an outstanding financial analyst and were given the task
    to perform market research on a possible market segment.
    The company succces relies on your accuracy to categorize a
    segment and classify according to the factors and levels specified.
    """
    },
    {
    "role": "user",
    "content": prompt
    },
    ]
    )
    print(response.choices[0].message.content)

    This is what the output looks like:

        {
    "Data Aggregation": 3,
    "Customization": 4,
    "Automation": 5,
    "Factor4": 2,
    "Factor5": 3
    }

    And that’s it for today.

    All of this code is open source and available on my GitHub, here: https://github.com/DidierRLopes/target-market-analysis/tree/main

    I hope you find this insightful, I appreciate any feedback as always.

    - - +

    Target Market Analysis with the help of LLMs

    · 10 min read


    This blog post provides a comprehensive guide on how to perform target market analysis for your company using LLMs. It includes a detailed explanation of the BCG Matrix and the GE McKinsey Matrix, and how these frameworks can be used to determine market attractiveness and competitive advantage.

    The open source code is available here.

    After working on OpenBB for over 2 years, we learned which markets to go after and which markets to ignore. You may think that this is intuition, but it’s actually the data that you gathered from talking with 100+ users and learning from others in the industry.

    However, people who don’t know your business as well as you do (new joiners, advisors, or investors), don’t understand why your target market is X and not Y. Hence, it’s important to backtrace your “experience” with data.

    This blog post will focus on how you can perform target market analysis for your company. I will provide the framework and the code to leverage OpenAI to speed up that research process. All of this will be replicable, and you can do it for your own company.

    Context

    This framework is utilized for portfolio analysis in corporate strategy to analyze business units or product lines.

    BCG Matrix

    Initially, BCG implemented its own framework, which you can read more about here. In a nutshell:

    It uses two variables: relative market share and the market growth rate. By combining these two variables into a matrix, a corporation can plot their business units accordingly and determine where to allocate extra (financial) resources, where to cash out and where to divest.

    image

    GE McKinsey Matrix

    Then, the GE McKinsey Matrix was invented, which you can read more about here. To put it briefly:

    It uses two variables: industry attractiveness and the competitive strength of a business unit. By combining these two variables into a matrix, a corporation can plot their business units accordingly and determine where to invest, where to hold their position, and where to harvest or divest.

    image

    As per the blog post, the main difference between these comes from the fact that the latter uses multiple factors that are combined to determine the measure of the two variables: industry attractiveness and competitive strength. Whereas the BCG Matrix only uses 1 variable per axis — relative market share and market growth rate.

    The GE McKinsey Matrix (also known as the Nine-box matrix) has industry attractiveness on the y-axis and competitive strength on the x-axis.

    For industry attractiveness, factors to consider can be: Industry size; Long-run growth rate; Industry structure; Industry life cycle; Macro environment; and Market segmentation.

    For competitive strength, factors to consider can be: Profitability; Market share; Business growth; Brand equity; Level of differentiation; Firm resources; Efficiency and effectiveness of internal linkages; and Customer loyalty.

    How do you build your Matrix?

    All the data will be hypothetical. The goal is to share the process and framework. Each company and market will have its own.

    1. Define your factors

    When we talk about market attractiveness, from your company’s perspective, what makes a market attractive? Consider all those factors and list them. Try to list all the factors that have a weight in that equation, but try to keep them under 10; otherwise, it’s too many to have to assess, and at some point, their weight into the attractiveness is negligible.

    Now do the same for the factors that give your company a competitive advantage.

    2. Weigh each factor

    Not all factors are created equal. Some factors will influence whether a market is attractive or not. Similarly, for your competitive advantage, what factors give your company a bigger edge?

    The goal is to select a weight for each factor so that the sum of the weights for all the factors adds up to 1. The outcome should look something like:

    image

    3. Categorize each factor

    Now you need to decide how granular you want your assessment to be. Initially, at OpenBB, we started with a scale of 1–3 where 1 is low, 2 is medium, and 3 is high. However, soon we found this to not be good enough since there was not enough granularity. Thus, we increased the range from 1 to 5.

    Once you decide on that range, you need to categorize it in a way that makes sense for each factor. This ensures that everyone on the team is on the same page when it comes to assessing a factor. For instance:

    image

    This Google / Excel spreadsheet should look like:

    image

    4. Select a list of target markets you want to evaluate

    Create a new Google spreadsheet / Excel page for each of them. This will allow you to contain all details for each target market on the same page.

    For the purposes of this demonstration, we will use “TargetMarket1,” “TargetMarket2,” and “TargetMarket3.”

    5. Assess a target market based on selected factors

    Now that we have decided on all the factors associated with the target market attractiveness, as well as the competitive advantage, you need to assess each of these based on the target markets that you have selected.

    Each target market page should look something like this:

    image

    The factors and weights are automatically pulled from the “Framework page” built previously.

    Here you just need to set the rating from 1 to 5 (or according to the range you previously specified) based on the evaluation criteria defined. Each of these ratings is multiplied by the weight, and all of those values are summed up together. If your selected range is from 1 to 5, then it means that the minimum and maximum values are 1 and 5, since the weights add up to 1.

    Note that the last column allows you to add comments based on any additional information/criteria that you used to make a rating choice.

    6. Discover Total Addressable Market

    On the spreadsheet above, you may have seen the total addressable market value. I will address how to find this value in a subsequent post.

    This is extremely important because even if the market is really attractive, its size can dictate whether to pursue it or not. Most of the time, you don’t want to be chasing a small market opportunity.

    7. Final matrix / chart

    Once you have all this data, you can build the following for each of the target markets:

    image

    Note that all you need from each target market is:

    Competitive advantage — the sum of all the factors and their levels multiplied by their weights gives the x-axis.

    Target market attractiveness — the sum of all the factors and their levels multiplied by their weights gives the y-axis.

    Total Addressable Market (TAM) — gives the bubble size on the chart.

    Then you are ready to make a decision on which market you wish to pursue, and you have data to back it up.

    Note: There are a lot of assumptions, and you’ll never have it perfect. But with several iterations with your team, you’ll gain more confidence in those assumptions over time, ensuring that you are on the right track and pursuing the right opportunity.

    Using OpenAI to bounce ideas to assess a target market

    Sometimes, it can be hard to provide a rating for each of the factors, or it would be better to bounce ideas off someone. This is where you can leverage OpenAI’s GPT-4 to help you get started.

    I built a script that would read from an Excel spreadsheet all the information from the framework page that we have set. That basically means:

    • All the factors associated with target market attractiveness, and their levels of description
    • All the factors associated with competitive advantage, and their levels of description

    Then I prompted GPT-4 to select a level for each of the factors of interest for both attractiveness and competitive advantage, based on what it knows about a specific target market.

    For example, let’s say we want to assess the competitive advantage for the target market “Hedge Funds” — this is what the prompt looks like:

    We want to assess our competitive advantage based in relation 
    with factors where we are have an advantage.

    Can you classify those for the following target market: 'Hedge Funds'

    The factors that we will access this market are presented below:

    When assessing Data Aggregation, these are the rules:
    We attribute a value of 5 if We provide all data a market needs
    We attribute a value of 4 if We provide most data a market needs
    We attribute a value of 3 if We provide some data a market needs
    We attribute a value of 2 if We provide very little data a market needs
    We attribute a value of 1 if We provide no data a market needs

    When assessing Customization, these are the rules:
    We attribute a value of 5 if Market will leverage our open source code
    We attribute a value of 4 if Market will fully customize our platform to make it their own
    We attribute a value of 3 if Market will customize a bit their platform
    We attribute a value of 2 if Market will use platform as is and customize after some time
    We attribute a value of 1 if Market will use platform as is

    When assessing Automation, these are the rules:
    We attribute a value of 5 if Allows to save more than 70% of time
    We attribute a value of 4 if Allows to save 50%-70% of time
    We attribute a value of 3 if Allows to save 30%-50% of time
    We attribute a value of 2 if Allows to save 15%-30% of time
    We attribute a value of 1 if Doesn't save any time on automation

    When assessing Factor4, these are the rules:
    We attribute a value of 5 if Very high
    We attribute a value of 4 if High
    We attribute a value of 3 if Medium
    We attribute a value of 2 if Low
    We attribute a value of 1 if Very low

    When assessing Factor5, these are the rules:
    We attribute a value of 5 if Very high
    We attribute a value of 4 if High
    We attribute a value of 3 if Medium
    We attribute a value of 2 if Low
    We attribute a value of 1 if Very low

    Given this information, can you return a level for each of the factors
    that is our competitive advantage from a viewpoint of Hedge Funds target market.

    Please return it in a json dictionary format with the factor and level only.
    Do not add any other text apart from that.
    Indent the json with 4 spaces.

    Then, using the following block of code, we can get OpenAI’s GPT-4 to provide its input:

        response = openai.ChatCompletion.create(
    model="gpt-4",
    messages=[
    {
    "role": "system",
    "content":
    """
    You are an outstanding financial analyst and were given the task
    to perform market research on a possible market segment.
    The company succces relies on your accuracy to categorize a
    segment and classify according to the factors and levels specified.
    """
    },
    {
    "role": "user",
    "content": prompt
    },
    ]
    )
    print(response.choices[0].message.content)

    This is what the output looks like:

        {
    "Data Aggregation": 3,
    "Customization": 4,
    "Automation": 5,
    "Factor4": 2,
    "Factor5": 3
    }

    And that’s it for today.

    All of this code is open source and available on my GitHub, here: https://github.com/DidierRLopes/target-market-analysis/tree/main

    I hope you find this insightful, I appreciate any feedback as always.

    + + \ No newline at end of file diff --git a/blog/the-future-of-finance-with-open-source-and-ai/index.html b/blog/the-future-of-finance-with-open-source-and-ai/index.html index a0c6df42b4..7c19e0e50d 100644 --- a/blog/the-future-of-finance-with-open-source-and-ai/index.html +++ b/blog/the-future-of-finance-with-open-source-and-ai/index.html @@ -10,13 +10,13 @@ - - + +
    -

    The future of finance with open source and AI

    · 6 min read


    The future of finance is being reshaped by open source and AI. This post discusses the potential of these technologies in disrupting the financial industry, the advantages of open source, and the role of AI in user interface.

    This post will talk about my (very) u̶n̶biased opinion about the future of finance built on top of open source and AI.

    Open Source platform

    image

    Data licensing vs Marketplace

    Current monopolies spend an enormous amount of cash on financial data licensing. There are dozens of different asset classes (stocks, options, crypto, NFTs, currencies, bonds, ETFs, mutual funds, …) and these often vary based on geography. That makes the overall investment research industry a very tough market to compete. Startups cannot disrupt the space without a massive capital injection. This is also why startups usually focus on a certain asset class in a certain geography.

    In my opinion, the only shot we have to disrupt incumbents is by not owning the data but becoming the infra layer between data sources and users. This is no different than Uber not owning cars, Airbnb not owning apartments or Deliveroo not owning restaurants.

    This also has a great advantage which is being able to integrate new data sources very fast and easily. Plus, owing to open source, anyone can add it. On the other hand, it’s very unlikely that an incumbent will add data that you require. Plus, if they do, they will need to license the data and therefore decrease their margins — unless they increase the price to users.

    Full-price bundle

    Current incumbents pricing is usually a complete bundled offering. This means that regardless of what you are utilizing in terms of both breadth and depth, you pay the full price tag. A good analogy is like a restaurant ONLY having a buffet when all you want is a bottle of water, or some chips. What happens is that a user ends up paying for data that they are not using.

    In 2022, this is a very outdated take. Companies are looking to get leaner, and it doesn’t make sense to pay for data that you aren’t going to leverage. Being the infrastructure between users and data sources allows you to create value to both; Since users will have access to all the data they want and pay for the ones they use, and data sources will have access to a big pool of users and may not need to create a dashboard product to monetize their offerings.

    Transparency & Customization

    Current incumbents have built several in-house financial models. Although these are often customizable, their customization is typically limited. That is because what is usually customizable are the values/weights, but not necessarily the formulas — that is kept hidden in their source code. This is an issue because that code cannot be validated and users cannot modify it.

    With open source, the story is completely different. Users can see every single line of code, and therefore not only audit the code quality but adapt the models/formulas to their own needs. At the end of the day, there is no point in re-inventing the wheel for financial theory that has been around for decades.

    By having the code open source, users can rely on the fact that these formulas have been validated/tested by thousands or millions of users and, therefore, there’s a very low chance that these are wrong. In addition, users are more secure because they can investigate the code and check/fix any vulnerabilities.

    Community

    One of the best parts of open source is the integrated community that it creates. This attracts people from every background, gender or ethnicity. Such a pool of diversity tends to allow for better ideas and pushes a project further. With people from the community being able to contribute, this also drives innovation.

    OpenBB has been driven a lot by the community so far. What started as a terminal mostly focused on stocks, soon evolved into including a broad range of datasets and considering several geographies. E.g. A contributor from Sweeden integrated Avanza API to the mutual funds menu that would only appear if users were looking into mutual funds from Sweden. This shows the power of community.

    Having the platform be open source is key.

    GPT as the interface

    One of the hedges that incumbents have is the fact that they have been around for a very long time and spent a lot on educating users about their product. As a result, users are used to their platform. This makes them harder to switch to an unknown product. This is also why a product needs to be 10x better than competition for users to switch.

    However, what if there was no learning curve? What if you could use a product for the first time and knew how to access all the data without spending any time reading the documentation. In essence, the educational incumbent advantage would become obsolete.

    With the new LLM advancements, such as ChatGPT. We are not far from this reality.

    cool1

    Plus, if this is built on top of an open source project it means that the community can help in improving the model by providing more training data (e.g. provide a text as input and the corresponding command as output) or even confirm whether or not the chart that pops up was accurate. In addition, along with data sources you can imagine that the community could start contributing with new languages for the GPT model.

    You can easily imagine that such interface would work well with a speech recognition model (something like whisper but that allowed real-time).

    This makes using a new investment research platform easy, but more importantly makes retrieving information much faster and efficient.

    GPT to build investment research reports

    One of the new features that were announced with OpenBB Terminal 2.0 was the automated reports generation that utilizes papermill to leverage jupyter notebook templates.

    cool2

    As it stands creating one of these notebook templates requires some coding skills and reading OpenBB documentation to understand how to retrieve the data of interest providing the correct function and necessary arguments.

    But, for a second, imagine if you could build these notebook templates with almost no-code?

    The proof-of-concept below in combination with the automated report generation should allow you to further understand the breakthrough that we may accomplish in the following few months.

    image

    My prediction is that open source + AI will disrupt the financial sector in the upcoming years.

    OpenBB will be leading that wave.

    Thanks for reading!

    - - +

    The future of finance with open source and AI

    · 6 min read


    The future of finance is being reshaped by open source and AI. This post discusses the potential of these technologies in disrupting the financial industry, the advantages of open source, and the role of AI in user interface.

    This post will talk about my (very) u̶n̶biased opinion about the future of finance built on top of open source and AI.

    Open Source platform

    image

    Data licensing vs Marketplace

    Current monopolies spend an enormous amount of cash on financial data licensing. There are dozens of different asset classes (stocks, options, crypto, NFTs, currencies, bonds, ETFs, mutual funds, …) and these often vary based on geography. That makes the overall investment research industry a very tough market to compete. Startups cannot disrupt the space without a massive capital injection. This is also why startups usually focus on a certain asset class in a certain geography.

    In my opinion, the only shot we have to disrupt incumbents is by not owning the data but becoming the infra layer between data sources and users. This is no different than Uber not owning cars, Airbnb not owning apartments or Deliveroo not owning restaurants.

    This also has a great advantage which is being able to integrate new data sources very fast and easily. Plus, owing to open source, anyone can add it. On the other hand, it’s very unlikely that an incumbent will add data that you require. Plus, if they do, they will need to license the data and therefore decrease their margins — unless they increase the price to users.

    Full-price bundle

    Current incumbents pricing is usually a complete bundled offering. This means that regardless of what you are utilizing in terms of both breadth and depth, you pay the full price tag. A good analogy is like a restaurant ONLY having a buffet when all you want is a bottle of water, or some chips. What happens is that a user ends up paying for data that they are not using.

    In 2022, this is a very outdated take. Companies are looking to get leaner, and it doesn’t make sense to pay for data that you aren’t going to leverage. Being the infrastructure between users and data sources allows you to create value to both; Since users will have access to all the data they want and pay for the ones they use, and data sources will have access to a big pool of users and may not need to create a dashboard product to monetize their offerings.

    Transparency & Customization

    Current incumbents have built several in-house financial models. Although these are often customizable, their customization is typically limited. That is because what is usually customizable are the values/weights, but not necessarily the formulas — that is kept hidden in their source code. This is an issue because that code cannot be validated and users cannot modify it.

    With open source, the story is completely different. Users can see every single line of code, and therefore not only audit the code quality but adapt the models/formulas to their own needs. At the end of the day, there is no point in re-inventing the wheel for financial theory that has been around for decades.

    By having the code open source, users can rely on the fact that these formulas have been validated/tested by thousands or millions of users and, therefore, there’s a very low chance that these are wrong. In addition, users are more secure because they can investigate the code and check/fix any vulnerabilities.

    Community

    One of the best parts of open source is the integrated community that it creates. This attracts people from every background, gender or ethnicity. Such a pool of diversity tends to allow for better ideas and pushes a project further. With people from the community being able to contribute, this also drives innovation.

    OpenBB has been driven a lot by the community so far. What started as a terminal mostly focused on stocks, soon evolved into including a broad range of datasets and considering several geographies. E.g. A contributor from Sweeden integrated Avanza API to the mutual funds menu that would only appear if users were looking into mutual funds from Sweden. This shows the power of community.

    Having the platform be open source is key.

    GPT as the interface

    One of the hedges that incumbents have is the fact that they have been around for a very long time and spent a lot on educating users about their product. As a result, users are used to their platform. This makes them harder to switch to an unknown product. This is also why a product needs to be 10x better than competition for users to switch.

    However, what if there was no learning curve? What if you could use a product for the first time and knew how to access all the data without spending any time reading the documentation. In essence, the educational incumbent advantage would become obsolete.

    With the new LLM advancements, such as ChatGPT. We are not far from this reality.

    cool1

    Plus, if this is built on top of an open source project it means that the community can help in improving the model by providing more training data (e.g. provide a text as input and the corresponding command as output) or even confirm whether or not the chart that pops up was accurate. In addition, along with data sources you can imagine that the community could start contributing with new languages for the GPT model.

    You can easily imagine that such interface would work well with a speech recognition model (something like whisper but that allowed real-time).

    This makes using a new investment research platform easy, but more importantly makes retrieving information much faster and efficient.

    GPT to build investment research reports

    One of the new features that were announced with OpenBB Terminal 2.0 was the automated reports generation that utilizes papermill to leverage jupyter notebook templates.

    cool2

    As it stands creating one of these notebook templates requires some coding skills and reading OpenBB documentation to understand how to retrieve the data of interest providing the correct function and necessary arguments.

    But, for a second, imagine if you could build these notebook templates with almost no-code?

    The proof-of-concept below in combination with the automated report generation should allow you to further understand the breakthrough that we may accomplish in the following few months.

    image

    My prediction is that open source + AI will disrupt the financial sector in the upcoming years.

    OpenBB will be leading that wave.

    Thanks for reading!

    + + \ No newline at end of file diff --git a/blog/the-new-finai-tech-stack/index.html b/blog/the-new-finai-tech-stack/index.html new file mode 100644 index 0000000000..dfdb5f6bcf --- /dev/null +++ b/blog/the-new-finai-tech-stack/index.html @@ -0,0 +1,22 @@ + + + + + +The new FinAI Tech Stack | Didier Lopes + + + + + + + + + + +
    +

    The new FinAI Tech Stack

    · 6 min read


    This blog post delves into how our collaboration with MindsDB, Nixtla, LlamaIndex, and Langchain is revolutionizing the financial world. Read on to learn all about the event "The New FinAI Tech Stack" held last week in SF, California.

    Context

    In early September, I attended a “Future of Finance” event in NYC. Despite the presence of well-known financial professionals from top firms in the industry, I found the event lacked practical applications demonstrating how AI is impacting the financial sector.

    Once I was back in the Bay Area, I had a barbecue with Jorge and Max from MindsDB and Nixtla, and I was commenting on that experience. To which Jorge promptly replied - why don’t we do it ourselves? So following this discussion, we decided to put the AI in finance event in motion.

    At OpenBB, AI has become a key component in our approach to refactoring the OpenBB Platform from the ground up. We've recently recruited a Head of AI to help us build our strategy and work on this effort full-time.

    You can find more details on this here.

    OpenBB x MindsDB

    A few days later, I visited the MindsDB office to discuss collaborating with Jorge on potential partnerships. I suggested the idea of gaining access to MindsDB's data, a proposal that seemed feasible to implement.

    Eventually, we accomplished this, and I even showcased it during the event last week. The code for this endeavour is open source. Take a look here.

    However, Jorge had an even bigger idea. He proposed the concept of granting MindsDB users access to OpenBB data via SQL and harnessing MindsDB's capabilities for machine learning. Essentially, we could convert the data frame in runtime into a virtual SQL table, since we have access to the Pydantic model from the OpenBB platform, and we can build that on the go.

    After tweeting about this, I received numerous messages, which validated that there was interest in OBB SQL. So, we set off to work on this. Together with the OpenBB team, we made it easy to access all available inputs/outputs for each endpoint, while the MindsDB team worked on virtualizing the tables. The result can be seen here.

    At the event last week, Jorge shared this work. Additionally, in collaboration with LangChain, he successfully developed a Slack bot with direct access to this data, all accessible within Slack

    OpenBB x Nixtla

    Back in August, Nixtla introduced the initial foundation generative AI model for temporal data at MindsDB. At that time, we received an invitation to showcase the practical applications of TimeGPT in production, and for the first time, we unveiled Terminal Pro briefly.

    I detailed this experience in a blog post and shared a similar demo during the event last week.

    Following that, Max and Azul from Nixtla proceeded to share a presentation where they used OpenBB data to assess price targets from analysts and develop an approach on how it is possible to reduce the bias inherent to price estimates and produce better estimates.

    OpenBB x LlamaIndex

    Back in July, we initiated the development of AskOBB, enabling users to interact with the open source OpenBB Terminal using natural language. In this effort, we leveraged LlamaIndex and you can see more about it here.

    So when we started discussing an AI in Finance event, it only made sense to reach out to Jerry and Simon to invite their team to present at the event. And so we did. Jerry ended up presenting their open source SEC insights repo that uses the Retrieval Augmented Generation (RAG) capabilities of LlamaIndex to answer questions about SEC 10-K & 10-Q documents.

    As for the OpenBB Terminal Pro, we demonstrated how we are using LlamaIndex to chat with documents that are uploaded to the OpenBB Terminal Pro. The video below highlights these features.

    OpenBB x Langchain

    After attending the AI Engineering Summit event, specifically Harrison’s workshop on how to get started with agents using Langchain, I felt inspired to create an agent on top of the OpenBB platform.

    So that very day, I went home and started to work on this repo. By the end of the day, the agent was already able to perform complex queries.

    Over time I iterated on it to make the agent more robust, but the improvement on the architecture started to happen after Michael joined OpenBB and he was able to focus on this full-time - the progress can be found on this open source repo. An example of a prompt that the agent can answer is:

    Check what are TSLA peers. From those, check which one has the highest market cap. Then, on the ticker that has the highest market cap get the most recent price target estimate from an analyst, and tell me who it was and on what date the estimate was made.


    So at the event, Harrison presented this architecture which heavily relies on Langchain and OpenBB tools.

    Later on, I demonstrated how we can integrate this architecture into OpenBB Copilot and make it available from the OpenBB Terminal Pro.

    Wrap up

    Finally, this was an amazing event organized by MindsDB and a team that put together 5 of the most prominent open-source companies working on problems at the intersection of AI and Finance.

    You can rewatch the entire event here:


    We're considering organizing another event like this soon, possibly even in NYC.

    And if your firm is interested in early access to the OpenBB Terminal Pro, you can reach out to hello@openbb.finance, we’d love to chat.

    + + + + \ No newline at end of file diff --git a/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-research/index.html b/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-research/index.html index d122b80660..b7e301ea61 100644 --- a/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-research/index.html +++ b/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-research/index.html @@ -10,13 +10,13 @@ - - + +
    -

    The role of AI and OpenBB in the future of investment research

    · 4 min read


    How OpenBB can lead the future of finance using AI on top of an open source investment research platform.

    The open source code is available here.

    Introduction

    This blogpost won't speak about what the OpenBB Terminal can offer today. Instead, we are going to share where we think AI can play a role in the future of investment research, and how through an open source platform, we can lead that wave.

    A lot of this blog is based on the fact that the OpenBB Terminal is an open source investment research platform, and therefore it's very relevant to read our blogpost about why we are open source.

    Note: This blogpost will share several proof-of-concepts that are still within R&D and are not yet ready for production. Also, this blogpost will assume that you are aware of LLMs such as ChatGPT and WhisperAI.

    ChatGPT as the interface

    An edge that incumbents have is the fact that they have been around for a very long time and spent a lot on educating users about their product. As a result, users are used to their platform. This makes it harder for users to switch to an unknown product, meaning they need to be 10x better than the competition for them to do so.

    However, what if there was no learning curve? What if you could use a product for the first time and know how to access all the information you wanted without spending any time reading the documentation? In essence, the educational incumbent advantage would become obsolete.

    With the new LLM advancements, such as ChatGPT. We are not far from this reality. Below is a proof-of-concept of what this could look like:

    Plus, if this is built on top of an open source project it means that the community can help in improving the model by providing more training data (e.g. provide a text as input and the corresponding command as output) or even confirm whether or not the chart that pops up was accurate.

    In addition, along with data sources you can imagine that the community could start contributing with new languages for the GPT model. This makes using a new investment research platform easy, but more importantly makes retrieving information much faster and efficient.

    The screenshot below shows that ChatGPT can accurately return the right OpenBB command when the user requests a certain type of data, as long as the model can be trained on our documentation:

    image

    EDIT: Bloomberg introduced BloombergGPT last week, and the following screenshot is taken from their research paper which validates the argument above.

    image

    WhisperAI as the interface

    If we go one step further, instead of relying on text as input, the platform could rely on voice. With models such as WhisperAI we will be able to speak with the platform in order to retrieve financial data.

    Below is a proof-of-concept showing how you can retrieve this data through voice.

    One of the advantages of an automatic speech recognition (ASR) system is the fact that it doesn't rely solely on english and therefore, it would welcome people from all over the world to interact with the platform. Note: WhisperAI is open source and you can find more information on it here.

    GPT to build investment research reports

    One of the new features that was announced with the OpenBB Terminal 2.0 was the automated reports generation that utilizes Netflix's papermill to leverage jupyter notebook templates.

    As it stands creating one of these notebook templates requires some coding skills and reading OpenBB documentation to understand how to retrieve the data of interest providing the correct function and necessary arguments.

    But, for a second, imagine if you could build these notebook templates with almost no-code?

    The proof-of-concept below in combination with the automated report generation should allow you to further understand the breakthrough that we may accomplish in the future.

    image

    My prediction is that open source + AI will disrupt the financial sector in the upcoming years, and OpenBB will be leading that wave.

    - - +

    The role of AI and OpenBB in the future of investment research

    · 4 min read


    How OpenBB can lead the future of finance using AI on top of an open source investment research platform.

    The open source code is available here.

    Introduction

    This blogpost won't speak about what the OpenBB Terminal can offer today. Instead, we are going to share where we think AI can play a role in the future of investment research, and how through an open source platform, we can lead that wave.

    A lot of this blog is based on the fact that the OpenBB Terminal is an open source investment research platform, and therefore it's very relevant to read our blogpost about why we are open source.

    Note: This blogpost will share several proof-of-concepts that are still within R&D and are not yet ready for production. Also, this blogpost will assume that you are aware of LLMs such as ChatGPT and WhisperAI.

    ChatGPT as the interface

    An edge that incumbents have is the fact that they have been around for a very long time and spent a lot on educating users about their product. As a result, users are used to their platform. This makes it harder for users to switch to an unknown product, meaning they need to be 10x better than the competition for them to do so.

    However, what if there was no learning curve? What if you could use a product for the first time and know how to access all the information you wanted without spending any time reading the documentation? In essence, the educational incumbent advantage would become obsolete.

    With the new LLM advancements, such as ChatGPT. We are not far from this reality. Below is a proof-of-concept of what this could look like:

    Plus, if this is built on top of an open source project it means that the community can help in improving the model by providing more training data (e.g. provide a text as input and the corresponding command as output) or even confirm whether or not the chart that pops up was accurate.

    In addition, along with data sources you can imagine that the community could start contributing with new languages for the GPT model. This makes using a new investment research platform easy, but more importantly makes retrieving information much faster and efficient.

    The screenshot below shows that ChatGPT can accurately return the right OpenBB command when the user requests a certain type of data, as long as the model can be trained on our documentation:

    image

    EDIT: Bloomberg introduced BloombergGPT last week, and the following screenshot is taken from their research paper which validates the argument above.

    image

    WhisperAI as the interface

    If we go one step further, instead of relying on text as input, the platform could rely on voice. With models such as WhisperAI we will be able to speak with the platform in order to retrieve financial data.

    Below is a proof-of-concept showing how you can retrieve this data through voice.

    One of the advantages of an automatic speech recognition (ASR) system is the fact that it doesn't rely solely on english and therefore, it would welcome people from all over the world to interact with the platform. Note: WhisperAI is open source and you can find more information on it here.

    GPT to build investment research reports

    One of the new features that was announced with the OpenBB Terminal 2.0 was the automated reports generation that utilizes Netflix's papermill to leverage jupyter notebook templates.

    As it stands creating one of these notebook templates requires some coding skills and reading OpenBB documentation to understand how to retrieve the data of interest providing the correct function and necessary arguments.

    But, for a second, imagine if you could build these notebook templates with almost no-code?

    The proof-of-concept below in combination with the automated report generation should allow you to further understand the breakthrough that we may accomplish in the future.

    image

    My prediction is that open source + AI will disrupt the financial sector in the upcoming years, and OpenBB will be leading that wave.

    + + \ No newline at end of file diff --git a/blog/the-start-of-my-machine-learning-journey/index.html b/blog/the-start-of-my-machine-learning-journey/index.html index 6f9f6fb0a0..6bbe907f08 100644 --- a/blog/the-start-of-my-machine-learning-journey/index.html +++ b/blog/the-start-of-my-machine-learning-journey/index.html @@ -10,13 +10,13 @@ - - + +
    -

    The Start of my Machine Learning journey

    · 5 min read


    The start of my journey into the world of Machine Learning, from learning Python to understanding the underlying mathematics of ML algorithms.

    During my studies at Imperial College London - 3ish years ago - I was introduced to the topic of Machine Learning, an area that I had always been interested about.

    At that time, not only I didn't know python, as from sklearn.decomposition import PCA wasn’t allowed. Therefore, we had to write the PCA (and other) algorithms in Matlab from scratch, which was great because it exposed us to the maths behind each algorithm.

    image

    The gif above is from my graduation at Royal Albert Hall with a MSc. in Control Systems with Distinction.

    After concluding my thesis (and paper): "Energy savings from an Ecological Cooperative Adaptive Cruise Control: a Battery Electric Vehicle platoon investigation", which was presented at the 2019 European Control Conference in Napoli, I had finally time to focus on Machine Learning topics during my spare time through late hours and into weekends.

    I started by doing the famous MOOC “Machine Learning - Andrew Ng”. Saying that the course was good is an understatement. I ended up spending a long time on the course as I was taking notes and revising daily; I was still behaving like a university student even without the exam at the end! Not only the theory is really detailed, but the coursework in Matlab allowed me to understand what’s going on under the hood. Given that I was already a heavy Matlab user, due to its usage throughout my entire academic journey, I could focus on the ML section.

    After this course, I knew that I had learnt a lot, but I also knew that if I wanted to use ML for real-applications, I’d have to learn Python. Given that I knew Matlab, I choose to start reading a python book that had Data Science application in mind. Hence, I started reading “Python Data Science Handbook”. This, along with several hours of practicing on available datasets, has taught me pretty much all I know about Numpy, Pandas and Matplotlib. Although this book also contains a last chapter with ML algorithms, these are rather brief.

    In my previous job at Nurvv, where I worked as Sensor Fusion Engineer, I developed a python analysis tool that parsed all the raw data from a running session and conveyed that information into meaningful plots. This allowed us to analyse whether a run was successful from the Firmware side of things, and this was critical for our development. This tool was created mainly from the knowledged gathered from the book mentioned above.


    Following this, I was rather confident with my Python skills. Therefore, I wanted to crack-on learning how to use ML algorithms with Python through the beauty of imports. It comes without saying that I had to start from the best-seller “Hands-on Machine Learning with Scikit-Learn, Keras and TensorFlow”. This book was what I was expecting and more. From time to time, when I’m working on personal projects, I still flick through it. This book also allowed me to develop many more personal projects (most of them public in my GitHub, as I’m a big Open-Source fan — you should know that as I made Gamestonk Terminal repository public).

    image

    The project that has been my biggest challenge was working with a friend on his PhD thesis entitled “Modelling and Forecasting of Time-Series: A data science approach that compares classic methodologies with deep learning methodologies”. Not only interpreting and discussing results but writing the code behind it. S/O to the resources: “Forecasting: Principles and Practice” and https://machinelearningmastery.com”. Without these, this work would have been much harder.

    Throughout my short journey, I followed many people related with DS. People that I thought that in some shape or form added value through their posts. One of these, was Andriy Burkov. I remember when he started talking about creating the “The Hundred-Page Machine Learning Book” and specifically, I remember his Linkedin's poll to select the colour of one of the bubbles for his books' cover. I voted purple; the result was yellow. So, I took the freedom to fix the cover of his book, as you can see below.

    image

    My gecko Reidid on “The Hundred-Page Machine Learning Book”​, in order to keep industry standards of ML books with reptiles.

    I really enjoyed his book since it can explain everything, while keeping it simple and short. As I learned at University, Keep It Simple, Stupid. Also, his book is distributed in a “read first, buy later” principle. This meant that I was able to flick through the content of the book before buying it. Personally, I think this should be adopted more often, at least for technical books.

    Finally, last summer, while on holiday in Portugal, I read “Approaching (almost) any machine learning”, which I found to be great for people that have read about the theory but were wondering where/how to apply it.

    The next ML books in my list are:

    • Deep Learning — Aaron Courville, Ian Goodfellow, and Yoshua Bengio
    • The Elements of Statistical Learning — Jerome H. Friedman, Robert Tibshirani e Trevor Hastie
    • Pattern Recognition and Machine Learning — Christopher Bishop
    • Understanding Machine Learning: From Theory to Algorithms — Shai Ben-David and Shai Shalev-Shwartz

    Let me know if you think these are good books, or if there are others that you’d recommend.

    - - +

    The Start of my Machine Learning journey

    · 5 min read


    The start of my journey into the world of Machine Learning, from learning Python to understanding the underlying mathematics of ML algorithms.

    During my studies at Imperial College London - 3ish years ago - I was introduced to the topic of Machine Learning, an area that I had always been interested about.

    At that time, not only I didn't know python, as from sklearn.decomposition import PCA wasn’t allowed. Therefore, we had to write the PCA (and other) algorithms in Matlab from scratch, which was great because it exposed us to the maths behind each algorithm.

    image

    The gif above is from my graduation at Royal Albert Hall with a MSc. in Control Systems with Distinction.

    After concluding my thesis (and paper): "Energy savings from an Ecological Cooperative Adaptive Cruise Control: a Battery Electric Vehicle platoon investigation", which was presented at the 2019 European Control Conference in Napoli, I had finally time to focus on Machine Learning topics during my spare time through late hours and into weekends.

    I started by doing the famous MOOC “Machine Learning - Andrew Ng”. Saying that the course was good is an understatement. I ended up spending a long time on the course as I was taking notes and revising daily; I was still behaving like a university student even without the exam at the end! Not only the theory is really detailed, but the coursework in Matlab allowed me to understand what’s going on under the hood. Given that I was already a heavy Matlab user, due to its usage throughout my entire academic journey, I could focus on the ML section.

    After this course, I knew that I had learnt a lot, but I also knew that if I wanted to use ML for real-applications, I’d have to learn Python. Given that I knew Matlab, I choose to start reading a python book that had Data Science application in mind. Hence, I started reading “Python Data Science Handbook”. This, along with several hours of practicing on available datasets, has taught me pretty much all I know about Numpy, Pandas and Matplotlib. Although this book also contains a last chapter with ML algorithms, these are rather brief.

    In my previous job at Nurvv, where I worked as Sensor Fusion Engineer, I developed a python analysis tool that parsed all the raw data from a running session and conveyed that information into meaningful plots. This allowed us to analyse whether a run was successful from the Firmware side of things, and this was critical for our development. This tool was created mainly from the knowledged gathered from the book mentioned above.


    Following this, I was rather confident with my Python skills. Therefore, I wanted to crack-on learning how to use ML algorithms with Python through the beauty of imports. It comes without saying that I had to start from the best-seller “Hands-on Machine Learning with Scikit-Learn, Keras and TensorFlow”. This book was what I was expecting and more. From time to time, when I’m working on personal projects, I still flick through it. This book also allowed me to develop many more personal projects (most of them public in my GitHub, as I’m a big Open-Source fan — you should know that as I made Gamestonk Terminal repository public).

    image

    The project that has been my biggest challenge was working with a friend on his PhD thesis entitled “Modelling and Forecasting of Time-Series: A data science approach that compares classic methodologies with deep learning methodologies”. Not only interpreting and discussing results but writing the code behind it. S/O to the resources: “Forecasting: Principles and Practice” and https://machinelearningmastery.com”. Without these, this work would have been much harder.

    Throughout my short journey, I followed many people related with DS. People that I thought that in some shape or form added value through their posts. One of these, was Andriy Burkov. I remember when he started talking about creating the “The Hundred-Page Machine Learning Book” and specifically, I remember his Linkedin's poll to select the colour of one of the bubbles for his books' cover. I voted purple; the result was yellow. So, I took the freedom to fix the cover of his book, as you can see below.

    image

    My gecko Reidid on “The Hundred-Page Machine Learning Book”​, in order to keep industry standards of ML books with reptiles.

    I really enjoyed his book since it can explain everything, while keeping it simple and short. As I learned at University, Keep It Simple, Stupid. Also, his book is distributed in a “read first, buy later” principle. This meant that I was able to flick through the content of the book before buying it. Personally, I think this should be adopted more often, at least for technical books.

    Finally, last summer, while on holiday in Portugal, I read “Approaching (almost) any machine learning”, which I found to be great for people that have read about the theory but were wondering where/how to apply it.

    The next ML books in my list are:

    • Deep Learning — Aaron Courville, Ian Goodfellow, and Yoshua Bengio
    • The Elements of Statistical Learning — Jerome H. Friedman, Robert Tibshirani e Trevor Hastie
    • Pattern Recognition and Machine Learning — Christopher Bishop
    • Understanding Machine Learning: From Theory to Algorithms — Shai Ben-David and Shai Shalev-Shwartz

    Let me know if you think these are good books, or if there are others that you’d recommend.

    + + \ No newline at end of file diff --git a/blog/time-series-crossvalidation-for-nn/index.html b/blog/time-series-crossvalidation-for-nn/index.html index 2b214f8411..eb7f96668b 100644 --- a/blog/time-series-crossvalidation-for-nn/index.html +++ b/blog/time-series-crossvalidation-for-nn/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Time-Series CrossValidation for NN

    · 3 min read


    This blog post discusses the creation of a Python module for splitting univariate time-series data using cross-validation techniques. The module is designed to prepare data for training, validation, and testing in a Deep Neural Network (DNN).

    The open source code is available here.

    2 years ago, Filipe Ramos my previous maths and probability teacher, knowing that I had a special interest in Data Science, challenged me to help him in his PhD thesis “Data Science na Modelação e Previsão de Séries Económico-financeiras: das Metodologias Clássicas ao Deep Learning”.

    Although we have been discussing theory, analysis and results, my main contribution was to write the Python code behind the thesis.

    As a result, I have written a python module that splits a given univariate time-series based on cross-validation techniques so that these can be fed to a Deep Neural Network (DNN) to extract training/validation/test errors.

    I know that there are examples of these online, but this was made from scratch so that we could personalise it according to the thesis’ needs, and grasp better what was at stake when performing different cross-validation techniques.

    The idea is given a training dataset, the package will split it into Train, Validation and Test sets, by means of either Forward Chaining, K-Fold or Group K-Fold.

    As parameters the user can not only select the number of inputs (n_steps_input) and outputs (n_steps_forecast), but also the number of samples (n_steps_jump) to jump in the data to train.

    The best way to install the package is as follows: pip install timeseries-cv and then use it with import tsxv. See the module developed here.

    This can be seen more intuitively using the jupyter notebook: “example.ipynb” Below you can find an example of the usage of each function for the following Time-Series:

    timeSeries = array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26])

    Split Train

    from tsxv.splitTrain import 
    split_train,
    split_train_variableInput
    X, y = split_train(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)
    X, y = split_train_variableInput(timeSeries, minSamplesTrain=10, n_steps_forecast=3, n_steps_jump=3)

    Split Train Val

    from tsxv.splitTrainVal import 
    split_train_val_forwardChaining,
    split_train_val_kFold,
    split_train_val_groupKFold
    X, y, Xcv, ycv = split_train_val_forwardChaining(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)
    X, y, Xcv, ycv = split_train_val_kFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)
    X, y, Xcv, ycv = split_train_val_groupKFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)

    image

    Split Train Val Test

    from tsxv.splitTrainValTest import split_train_val_test_forwardChaining, 
    split_train_val_test_kFold,
    split_train_val_test_groupKFold
    X, y, Xcv, ycv, Xtest, ytest = split_train_val_test_forwardChaining(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)
    X, y, Xcv, ycv, Xtest, ytest = split_train_val_test_kFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)
    X, y, Xcv, ycv, Xtest, ytest = split_train_val_test_groupKFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)

    image

    This module has not only been used for my friends’ thesis but also for a Data Science company and Gamestonk Terminal, that I know of :)

    You can check the stats of the module here.

    - - +

    Time-Series CrossValidation for NN

    · 3 min read


    This blog post discusses the creation of a Python module for splitting univariate time-series data using cross-validation techniques. The module is designed to prepare data for training, validation, and testing in a Deep Neural Network (DNN).

    The open source code is available here.

    2 years ago, Filipe Ramos my previous maths and probability teacher, knowing that I had a special interest in Data Science, challenged me to help him in his PhD thesis “Data Science na Modelação e Previsão de Séries Económico-financeiras: das Metodologias Clássicas ao Deep Learning”.

    Although we have been discussing theory, analysis and results, my main contribution was to write the Python code behind the thesis.

    As a result, I have written a python module that splits a given univariate time-series based on cross-validation techniques so that these can be fed to a Deep Neural Network (DNN) to extract training/validation/test errors.

    I know that there are examples of these online, but this was made from scratch so that we could personalise it according to the thesis’ needs, and grasp better what was at stake when performing different cross-validation techniques.

    The idea is given a training dataset, the package will split it into Train, Validation and Test sets, by means of either Forward Chaining, K-Fold or Group K-Fold.

    As parameters the user can not only select the number of inputs (n_steps_input) and outputs (n_steps_forecast), but also the number of samples (n_steps_jump) to jump in the data to train.

    The best way to install the package is as follows: pip install timeseries-cv and then use it with import tsxv. See the module developed here.

    This can be seen more intuitively using the jupyter notebook: “example.ipynb” Below you can find an example of the usage of each function for the following Time-Series:

    timeSeries = array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26])

    Split Train

    from tsxv.splitTrain import 
    split_train,
    split_train_variableInput
    X, y = split_train(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)
    X, y = split_train_variableInput(timeSeries, minSamplesTrain=10, n_steps_forecast=3, n_steps_jump=3)

    Split Train Val

    from tsxv.splitTrainVal import 
    split_train_val_forwardChaining,
    split_train_val_kFold,
    split_train_val_groupKFold
    X, y, Xcv, ycv = split_train_val_forwardChaining(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)
    X, y, Xcv, ycv = split_train_val_kFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)
    X, y, Xcv, ycv = split_train_val_groupKFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)

    image

    Split Train Val Test

    from tsxv.splitTrainValTest import split_train_val_test_forwardChaining, 
    split_train_val_test_kFold,
    split_train_val_test_groupKFold
    X, y, Xcv, ycv, Xtest, ytest = split_train_val_test_forwardChaining(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)
    X, y, Xcv, ycv, Xtest, ytest = split_train_val_test_kFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)
    X, y, Xcv, ycv, Xtest, ytest = split_train_val_test_groupKFold(timeSeries, n_steps_input=4, n_steps_forecast=3, n_steps_jump=2)

    image

    This module has not only been used for my friends’ thesis but also for a Data Science company and Gamestonk Terminal, that I know of :)

    You can check the stats of the module here.

    + + \ No newline at end of file diff --git a/blog/web3-symbols-and-community/index.html b/blog/web3-symbols-and-community/index.html index cf761f00cc..e52cf49e83 100644 --- a/blog/web3-symbols-and-community/index.html +++ b/blog/web3-symbols-and-community/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Web3, symbols and community

    · 6 min read


    This blog post discusses the importance of strong communities in the Web 3.0 space, the role of decentralization, and how voting frameworks based on smart contracts can empower users.

    If you have been paying attention to the Web 3.0 space, you should have realized that most of the projects in the space rely on strong communities.

    Why on Web 3.0?

    On a centralized concept (Web 2), there is usually a regulatory entity that decides whether something is True or False on a project/product. This means that there’s a single centralized company responsible for making a decision and users must trust that this entity is acting on their best interests.

    Furthermore, the users do not stand to win anything whether the decision is True or False. They may identify more with one of the outcomes, but there is no personal incentive to the user. Even if a user can relate with the outcomes they never feel a sense of belonging, as deep down they are aware that their opinion is not being taken into account.

    On a decentralized concept (Web 3), the story is the very different. A decentralized community is responsible for deciding the True or False, based on a voting framework defined a-priori. This means that the group of users, based on smart contracts executed on the blockchain, can vote on a particular decision. This is where the importance of a strong community kicks in.

    On Web 2 the users must trust that such entity is acting on user’s best interests. That trust, on Web 3, occurs in form of a strong community. The best way for a user to trust the decisions of a group of people is to know that a group shares the same values and has incentives towards the success of the same project/product.

    In fact, I believe that in general when these votes occur, the more unanimous the decisions are, the stronger the community is.

    NOTE: Although Web 3 communities are stronger than Web 2 ones, I believe that when something goes wrong the Web 3 communities break faster as they don’t have a common enemy due to the decentralized concept (e.g. LUNA debacle). On the other hand, Web 2 communities can “hold” onto the fact that their common enemy is now the entity that they trusted to act on their best interests (e.g. Robinhood vs wallstreetbets).

    Why build strong communities?

    The Web 3.0 concept doesn’t only benefit from strong communities but is built on top of it. For worldwide adoption in products/projects/companies the space need strong communities.

    Why does money have value? Because people believe that they will be able to exchange it for goods/services in the future. Why do people believe that? Because they trust the entity that is managing such currency.

    Analogously, for a digital asset to have value, people need to believe that they will be able to exchange it for goods/services in the future. Since there is no entity to trust, people need to believe that the community will believe that a certain digital asset has value. This belief exists because there are incentives (usually financial or status) for its members.

    Once this happens we enter into the law of supply and demand where the value of digital asset goes up as there is either less supply or more demand.

    These communities can easily be found on CT or Discord/Telegram servers.

    image

    How are strong communities created?

    If we learn from history, we see that the most loyal and bigger communities always recurred at symbology to achieve such, some examples: sports clubs, religion, countries, clans, societies, …

    The truth is that we humans constantly seek this sense of belonging (or are afraid of being alone). When we see multiple people on social media utilizing the same symbols to represent their beliefs, we want to be part of that group, of that community.

    This can be seen over and over again on Web3, particularly in CT:

    • Changing the eyes’ color of your twitter’s pfp which represents being bullish on crypto (usually red for BTC and blue for ETH)
    • Emojis after the username
    • Utilizing the NFT you acquired from a collection that you believe in
    • Adding a “.eth” at the end of the username

    image

    Why does this matter?

    Companies outside of the Web 3.0 space will start picking up on this to build stronger communities and have a stronger identity (e.g. Notion and their employees pfp on social media). This is even more relevant for open source companies (Web 2.5 if you will), which rely on their communities to build a successful company (e.g. Hugging Face 🤗 ).

    I believe that companies will start thinking about the emojis that their community can use while coming up with the name of the brand and logo.


    As for OpenBB, we are a fintech open source company that focuses on providing better investment research for everyone, anywhere. The finance sector we are in is composed of multiple players that have been on the top of the industry for decades. We come in with a radical different approach, bottom-up.

    Being open source for us is not a choice but a need if we are to disrupt traditional investment research platforms with years of head start.


    Once we knew that we wanted the logo to be extracted from the “BB”, it was immediate that the butterfly emoji (🦋) would be used. Furthermore, a butterfly is a metaphor for transformation, which in our context, represents OpenBB Terminal allowing each investor to evolve and finally fly (i.e. achieve financial freedom).

    In order for our users to start relating to the butterfly emoji (🦋) with our brand we have several cues:

    • On the landing page

    image

    • Official social media channels
    • Our team members use it in their socials

    image

    • On the OpenBB Terminal as the default flair,

    image

    And even to replace the asterisk (*) when inserting the password to enter our OpenBB Bot platform, because details matter.

    image

    And that is what we are doing at OpenBB to build a stronger community? Do you have any other tips/tricks? Feel free to share them!

    Hope you enjoyed this post and as always, am looking to hear feedback!

    PS: I’d like to take this chance to say that our OpenBB Bot launch will occur in the coming weeks, you won’t have to wait much longer 🦋

    - - +

    Web3, symbols and community

    · 6 min read


    This blog post discusses the importance of strong communities in the Web 3.0 space, the role of decentralization, and how voting frameworks based on smart contracts can empower users.

    If you have been paying attention to the Web 3.0 space, you should have realized that most of the projects in the space rely on strong communities.

    Why on Web 3.0?

    On a centralized concept (Web 2), there is usually a regulatory entity that decides whether something is True or False on a project/product. This means that there’s a single centralized company responsible for making a decision and users must trust that this entity is acting on their best interests.

    Furthermore, the users do not stand to win anything whether the decision is True or False. They may identify more with one of the outcomes, but there is no personal incentive to the user. Even if a user can relate with the outcomes they never feel a sense of belonging, as deep down they are aware that their opinion is not being taken into account.

    On a decentralized concept (Web 3), the story is the very different. A decentralized community is responsible for deciding the True or False, based on a voting framework defined a-priori. This means that the group of users, based on smart contracts executed on the blockchain, can vote on a particular decision. This is where the importance of a strong community kicks in.

    On Web 2 the users must trust that such entity is acting on user’s best interests. That trust, on Web 3, occurs in form of a strong community. The best way for a user to trust the decisions of a group of people is to know that a group shares the same values and has incentives towards the success of the same project/product.

    In fact, I believe that in general when these votes occur, the more unanimous the decisions are, the stronger the community is.

    NOTE: Although Web 3 communities are stronger than Web 2 ones, I believe that when something goes wrong the Web 3 communities break faster as they don’t have a common enemy due to the decentralized concept (e.g. LUNA debacle). On the other hand, Web 2 communities can “hold” onto the fact that their common enemy is now the entity that they trusted to act on their best interests (e.g. Robinhood vs wallstreetbets).

    Why build strong communities?

    The Web 3.0 concept doesn’t only benefit from strong communities but is built on top of it. For worldwide adoption in products/projects/companies the space need strong communities.

    Why does money have value? Because people believe that they will be able to exchange it for goods/services in the future. Why do people believe that? Because they trust the entity that is managing such currency.

    Analogously, for a digital asset to have value, people need to believe that they will be able to exchange it for goods/services in the future. Since there is no entity to trust, people need to believe that the community will believe that a certain digital asset has value. This belief exists because there are incentives (usually financial or status) for its members.

    Once this happens we enter into the law of supply and demand where the value of digital asset goes up as there is either less supply or more demand.

    These communities can easily be found on CT or Discord/Telegram servers.

    image

    How are strong communities created?

    If we learn from history, we see that the most loyal and bigger communities always recurred at symbology to achieve such, some examples: sports clubs, religion, countries, clans, societies, …

    The truth is that we humans constantly seek this sense of belonging (or are afraid of being alone). When we see multiple people on social media utilizing the same symbols to represent their beliefs, we want to be part of that group, of that community.

    This can be seen over and over again on Web3, particularly in CT:

    • Changing the eyes’ color of your twitter’s pfp which represents being bullish on crypto (usually red for BTC and blue for ETH)
    • Emojis after the username
    • Utilizing the NFT you acquired from a collection that you believe in
    • Adding a “.eth” at the end of the username

    image

    Why does this matter?

    Companies outside of the Web 3.0 space will start picking up on this to build stronger communities and have a stronger identity (e.g. Notion and their employees pfp on social media). This is even more relevant for open source companies (Web 2.5 if you will), which rely on their communities to build a successful company (e.g. Hugging Face 🤗 ).

    I believe that companies will start thinking about the emojis that their community can use while coming up with the name of the brand and logo.


    As for OpenBB, we are a fintech open source company that focuses on providing better investment research for everyone, anywhere. The finance sector we are in is composed of multiple players that have been on the top of the industry for decades. We come in with a radical different approach, bottom-up.

    Being open source for us is not a choice but a need if we are to disrupt traditional investment research platforms with years of head start.


    Once we knew that we wanted the logo to be extracted from the “BB”, it was immediate that the butterfly emoji (🦋) would be used. Furthermore, a butterfly is a metaphor for transformation, which in our context, represents OpenBB Terminal allowing each investor to evolve and finally fly (i.e. achieve financial freedom).

    In order for our users to start relating to the butterfly emoji (🦋) with our brand we have several cues:

    • On the landing page

    image

    • Official social media channels
    • Our team members use it in their socials

    image

    • On the OpenBB Terminal as the default flair,

    image

    And even to replace the asterisk (*) when inserting the password to enter our OpenBB Bot platform, because details matter.

    image

    And that is what we are doing at OpenBB to build a stronger community? Do you have any other tips/tricks? Feel free to share them!

    Hope you enjoyed this post and as always, am looking to hear feedback!

    PS: I’d like to take this chance to say that our OpenBB Bot launch will occur in the coming weeks, you won’t have to wait much longer 🦋

    + + \ No newline at end of file diff --git a/blog/why-the-need-for-an-open-source-investment-research-platform/index.html b/blog/why-the-need-for-an-open-source-investment-research-platform/index.html index 65ec435476..fb47f06adc 100644 --- a/blog/why-the-need-for-an-open-source-investment-research-platform/index.html +++ b/blog/why-the-need-for-an-open-source-investment-research-platform/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Why the need for an open source investment research platform?

    · 5 min read


    OpenBB Terminal, an open-source investment research platform, is transforming the financial industry by addressing issues like data licensing, full-price bundle, lack of transparency and customization, and the need for a diverse community. This post explores why open source is crucial for us and the main problems in the space.

    Having a closed source OpenBB Terminal was never on the table.

    The OpenBB Terminal is the platform it is today due to its open source nature. Launched almost 2.5 years ago, the interest on this platform was clear — aggregating an impressive 4000 stars on GitHub in under 24 hours from launch.

    This number kept on growing along with the community (most of which gathers on our Discord server) and allowed us to create the company OpenBB, see the story here.

    image

    But why is open source so important for us? To understand this, it’s important for us go over the main problems in the space.

    1. Data licensing
    2. Full-price bundle
    3. Transparency and customization
    4. Community

    Data licensing

    Current monopolies spend an enormous amount of capital on financial data licensing. There are dozens of different asset classes (equities, options, crypto, NFTs, forex, bonds, ETFs, mutual funds, …) and these often vary based on geography. In addition, alternative datasets have grown a lot in popularity as they can provide a hedge in the market (e.g. a hurricane can impact orange juice futures).

    That makes the overall investment research industry a very tough market to compete. Startups cannot disrupt the space without a massive capital injection. Explaining why the data offered by startups usually focuses on a certain asset class, in a certain geography.

    This is why OpenBB doesn’t own the data (similar to Uber not owning cars, Airbnb not owning apartments, Deliveroo not owning restaurants). OpenBB wants to be the infrastructure layer between data sources and users.

    This is the typical two-sided market, where on the one hand users benefit from having access to multiple datasets in one place, and on the other hand data sources benefit from having users on our platform as they can monetize their data. This allows us to focus on the product while our number of data integrations and users grows.

    Full-price bundle

    Current incumbents pricing is usually a complete bundled offering. This means that regardless of what you are utilizing in terms of both breadth and depth, you pay the full price tag. A good analogy is like a restaurant ONLY having a buffet when all you want is a bottle of water, or some chips.

    What happens is that a user ends up paying for data that they are not using. In 2023, this is a very outdated take. Companies are looking to get leaner, and it doesn’t make sense to pay for data that you aren’t leveraging.

    Being the infrastructure between users and data sources allows you to create value to both. Users will have access to all the data they want and pay for the ones they use, and data sources will have access to a big pool of users.

    In addition some data providers (e.g. a team of machine learning engineers) will not need to create a dashboard for their users to visualize their data and hire a team to start a sales/marketing motion, as they will be able to rely on OpenBB’s infrastructure.

    Transparency and customization

    Current incumbents have built several in-house financial models. Although these are often customizable, their customization is typically limited. That is because what is usually customizable are the values/weights, but not necessarily the formulas — that is kept hidden in their source code. This is an issue because that code cannot be validated and users cannot modify it.

    With open source, the story is completely different. Users can see every single line of code and therefore, not only audit the code quality but adapt the models/formulas to their own needs. At the end of the day, there is no point in re-inventing the wheel for financial theory that has been around for decades.

    By having the code open source, users can rely on the fact that these formulas have been validated/tested by thousands or millions of users and therefore, there’s a very low chance that these are wrong. In addition, users are more secure because they can investigate the code and check/fix any vulnerabilities.

    Community

    One of the best parts of open source is the integrated community that it creates. This attracts people from every background, gender or ethnicity. Such a pool of diversity allows for better ideas and pushes a project further. With people from the community being able to contribute, this also drives innovation.

    OpenBB has been driven a lot by the community so far. What started as a terminal mostly focused on equities, soon evolved into including a broad range of datasets and considering several geographies. For instance: A contributor from Sweeden integrated Avanza API to the mutual funds menu that would only appear if users were looking into mutual funds from Sweden — this shows the power of community.

    image

    We are close to 23,000 stars. If you haven’t already, starring our project would mean the world.

    image

    Any feedback is welcome 🙏🏽

    - - +

    Why the need for an open source investment research platform?

    · 5 min read


    OpenBB Terminal, an open-source investment research platform, is transforming the financial industry by addressing issues like data licensing, full-price bundle, lack of transparency and customization, and the need for a diverse community. This post explores why open source is crucial for us and the main problems in the space.

    Having a closed source OpenBB Terminal was never on the table.

    The OpenBB Terminal is the platform it is today due to its open source nature. Launched almost 2.5 years ago, the interest on this platform was clear — aggregating an impressive 4000 stars on GitHub in under 24 hours from launch.

    This number kept on growing along with the community (most of which gathers on our Discord server) and allowed us to create the company OpenBB, see the story here.

    image

    But why is open source so important for us? To understand this, it’s important for us go over the main problems in the space.

    1. Data licensing
    2. Full-price bundle
    3. Transparency and customization
    4. Community

    Data licensing

    Current monopolies spend an enormous amount of capital on financial data licensing. There are dozens of different asset classes (equities, options, crypto, NFTs, forex, bonds, ETFs, mutual funds, …) and these often vary based on geography. In addition, alternative datasets have grown a lot in popularity as they can provide a hedge in the market (e.g. a hurricane can impact orange juice futures).

    That makes the overall investment research industry a very tough market to compete. Startups cannot disrupt the space without a massive capital injection. Explaining why the data offered by startups usually focuses on a certain asset class, in a certain geography.

    This is why OpenBB doesn’t own the data (similar to Uber not owning cars, Airbnb not owning apartments, Deliveroo not owning restaurants). OpenBB wants to be the infrastructure layer between data sources and users.

    This is the typical two-sided market, where on the one hand users benefit from having access to multiple datasets in one place, and on the other hand data sources benefit from having users on our platform as they can monetize their data. This allows us to focus on the product while our number of data integrations and users grows.

    Full-price bundle

    Current incumbents pricing is usually a complete bundled offering. This means that regardless of what you are utilizing in terms of both breadth and depth, you pay the full price tag. A good analogy is like a restaurant ONLY having a buffet when all you want is a bottle of water, or some chips.

    What happens is that a user ends up paying for data that they are not using. In 2023, this is a very outdated take. Companies are looking to get leaner, and it doesn’t make sense to pay for data that you aren’t leveraging.

    Being the infrastructure between users and data sources allows you to create value to both. Users will have access to all the data they want and pay for the ones they use, and data sources will have access to a big pool of users.

    In addition some data providers (e.g. a team of machine learning engineers) will not need to create a dashboard for their users to visualize their data and hire a team to start a sales/marketing motion, as they will be able to rely on OpenBB’s infrastructure.

    Transparency and customization

    Current incumbents have built several in-house financial models. Although these are often customizable, their customization is typically limited. That is because what is usually customizable are the values/weights, but not necessarily the formulas — that is kept hidden in their source code. This is an issue because that code cannot be validated and users cannot modify it.

    With open source, the story is completely different. Users can see every single line of code and therefore, not only audit the code quality but adapt the models/formulas to their own needs. At the end of the day, there is no point in re-inventing the wheel for financial theory that has been around for decades.

    By having the code open source, users can rely on the fact that these formulas have been validated/tested by thousands or millions of users and therefore, there’s a very low chance that these are wrong. In addition, users are more secure because they can investigate the code and check/fix any vulnerabilities.

    Community

    One of the best parts of open source is the integrated community that it creates. This attracts people from every background, gender or ethnicity. Such a pool of diversity allows for better ideas and pushes a project further. With people from the community being able to contribute, this also drives innovation.

    OpenBB has been driven a lot by the community so far. What started as a terminal mostly focused on equities, soon evolved into including a broad range of datasets and considering several geographies. For instance: A contributor from Sweeden integrated Avanza API to the mutual funds menu that would only appear if users were looking into mutual funds from Sweden — this shows the power of community.

    image

    We are close to 23,000 stars. If you haven’t already, starring our project would mean the world.

    image

    Any feedback is welcome 🙏🏽

    + + \ No newline at end of file diff --git a/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdk/index.html b/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdk/index.html index d8ff822a94..7ea47b581b 100644 --- a/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdk/index.html +++ b/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdk/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Why you should drop yfinance API and adopt OpenBB SDK

    · 3 min read


    Why you should consider switching from yfinance API to OpenBB SDK for financial data retrieval. OpenBB SDK offers access to multiple data sources, potential for unlimited data, and incentives for data source partners.

    The open source code is available here.

    OpenBB SDK will be released later this month 👀.

    yfinance API is an unofficial (not affiliated) API around Yahoo Finance website.

    Although it is used in over 12,600 projects on GitHub and is downloaded on average 90,000 per week. This is still an unofficial wrapper. As you can see from Yahoo Finance website, it uses an ad revenue business model. This means that Yahoo Finance doesn’t has any incentive from having users utilizing it through Yfinance API.

    If one day Yahoo Finance website adds a paywall through an API key, then Yahoo Finance would:

    1. Either become obsolete
    2. Or adopt the same architecture of OpenBB where an API key from a data source is necessary

    Regardless, Yfinance API retrieves data that exists on a third-party website: Yahoo Finance website. This means that this API is limited by the data Yahoo Finance is currently paying for redistribution. And thus, users get only what data is supported through the website.

    On the other hand, OpenBB SDK allows you to retrieve data from over 50 different APIs (and growing). With yfinance being one of these APIs.

    Since OpenBB SDK requires API keys from most of the data sources, these have incentives to partner with OpenBB. Because:

    1. Marketing opportunity due to significant larger pool of users
    2. New revenue stream

    In essence, Yfinance API:

    • Not officially supported by Yahoo Finance
    • No incentive for Yahoo Finance
    • Limited data by what Yahoo Finance displays
    • May become obsolete

    On the other hand, OpenBB SDK:

    • Marketing for new data sources
    • New revenue stream for partners through premium API keys
    • (Almost) unlimited data - open source project that keeps on adding new data sources
    • Multiple data sources for same data (user has choices)

    As counter-intuitive as it sounds:

    The shutting down of yfinance API (which is one of the data sources that OpenBB SDK has access to) would be beneficial to OpenBB adoption. This is because users would need to migrate to OpenBB SDK as that’s the most mature and maintained open source financial API.

    If you have any questions, feel free to drop me a message!

    - - +

    Why you should drop yfinance API and adopt OpenBB SDK

    · 3 min read


    Why you should consider switching from yfinance API to OpenBB SDK for financial data retrieval. OpenBB SDK offers access to multiple data sources, potential for unlimited data, and incentives for data source partners.

    The open source code is available here.

    OpenBB SDK will be released later this month 👀.

    yfinance API is an unofficial (not affiliated) API around Yahoo Finance website.

    Although it is used in over 12,600 projects on GitHub and is downloaded on average 90,000 per week. This is still an unofficial wrapper. As you can see from Yahoo Finance website, it uses an ad revenue business model. This means that Yahoo Finance doesn’t has any incentive from having users utilizing it through Yfinance API.

    If one day Yahoo Finance website adds a paywall through an API key, then Yahoo Finance would:

    1. Either become obsolete
    2. Or adopt the same architecture of OpenBB where an API key from a data source is necessary

    Regardless, Yfinance API retrieves data that exists on a third-party website: Yahoo Finance website. This means that this API is limited by the data Yahoo Finance is currently paying for redistribution. And thus, users get only what data is supported through the website.

    On the other hand, OpenBB SDK allows you to retrieve data from over 50 different APIs (and growing). With yfinance being one of these APIs.

    Since OpenBB SDK requires API keys from most of the data sources, these have incentives to partner with OpenBB. Because:

    1. Marketing opportunity due to significant larger pool of users
    2. New revenue stream

    In essence, Yfinance API:

    • Not officially supported by Yahoo Finance
    • No incentive for Yahoo Finance
    • Limited data by what Yahoo Finance displays
    • May become obsolete

    On the other hand, OpenBB SDK:

    • Marketing for new data sources
    • New revenue stream for partners through premium API keys
    • (Almost) unlimited data - open source project that keeps on adding new data sources
    • Multiple data sources for same data (user has choices)

    As counter-intuitive as it sounds:

    The shutting down of yfinance API (which is one of the data sources that OpenBB SDK has access to) would be beneficial to OpenBB adoption. This is because users would need to migrate to OpenBB SDK as that’s the most mature and maintained open source financial API.

    If you have any questions, feel free to drop me a message!

    + + \ No newline at end of file diff --git a/blog/work-life-balance-is-bullsh-t/index.html b/blog/work-life-balance-is-bullsh-t/index.html index 7437a4e73f..3c317e5d16 100644 --- a/blog/work-life-balance-is-bullsh-t/index.html +++ b/blog/work-life-balance-is-bullsh-t/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Work-life balance is bullsh*t

    · 2 min read


    This blog post challenges the concept of work-life balance, arguing that success often requires sacrifices in personal time and relationships. It suggests that true balance comes from finding joy in your work and surrounding yourself with like-minded individuals.

    For successful individuals, achieving a work-life balance is a luxury often associated with those born into wealth.

    Let me explain.

    There must be a clear inverse correlation between success (let’s say measured by wealth) and the size of your circle of friends.

    If you want to be at the top of a field, you must work hard.

    End.

    Regardless of what BS people say about work-life balance.

    You may be lucky — right place right time kind of thing. But by default, you need to work hard to expand your luck’s surface.

    And that means that you need to spend your personal time working harder, to be above average.

    Since time is limited you need to sacrifice time spent outside working hours, otherwise you will only be average.

    People will soon realize that in order to optimize for a successful career, cutting time spent with friends is a necessary evil.

    Plus, as you become older you’ll prioritize physical health (which impacts your longevity + performance) and your relationship with your partner (which provides the most significant ROI in terms of happiness).

    So, I suggest 2 things:

    • Work on a problem and in a space that you truly enjoy so you don’t consider it work
    • Build with people who share the same values as you so you consider them friends Once that happens, work-life balance means nothing.

    What’s your take?

    - - +

    Work-life balance is bullsh*t

    · 2 min read


    This blog post challenges the concept of work-life balance, arguing that success often requires sacrifices in personal time and relationships. It suggests that true balance comes from finding joy in your work and surrounding yourself with like-minded individuals.

    For successful individuals, achieving a work-life balance is a luxury often associated with those born into wealth.

    Let me explain.

    There must be a clear inverse correlation between success (let’s say measured by wealth) and the size of your circle of friends.

    If you want to be at the top of a field, you must work hard.

    End.

    Regardless of what BS people say about work-life balance.

    You may be lucky — right place right time kind of thing. But by default, you need to work hard to expand your luck’s surface.

    And that means that you need to spend your personal time working harder, to be above average.

    Since time is limited you need to sacrifice time spent outside working hours, otherwise you will only be average.

    People will soon realize that in order to optimize for a successful career, cutting time spent with friends is a necessary evil.

    Plus, as you become older you’ll prioritize physical health (which impacts your longevity + performance) and your relationship with your partner (which provides the most significant ROI in terms of happiness).

    So, I suggest 2 things:

    • Work on a problem and in a space that you truly enjoy so you don’t consider it work
    • Build with people who share the same values as you so you consider them friends Once that happens, work-life balance means nothing.

    What’s your take?

    + + \ No newline at end of file diff --git a/blog/writing-documentation-as-a-founder-is-underrated/index.html b/blog/writing-documentation-as-a-founder-is-underrated/index.html index 074ab32dbb..b8b2f0451e 100644 --- a/blog/writing-documentation-as-a-founder-is-underrated/index.html +++ b/blog/writing-documentation-as-a-founder-is-underrated/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Writing documentation, as a founder, is underrated.

    · 2 min read


    This blog post emphasizes the importance of writing documentation as a founder. It discusses how it can give an edge when pitching your product and how it can result in less customer support and a better user experience overall.

    A founder spending time writing documentation is f*king underrated.

    Working on your product documentation may not be the most rewarding task, but I strongly believe that it gives you an edge when pitching your product.

    Good documentation needs to strike the perfect balance between having enough context and being straight to the point.

    This week someone asked us how many people worked on our documentation.

    There have been less than 3 people working on it. Our North Star metric has been common sense and putting out documentation that we would enjoy reading/learning from ourselves.

    Earlier this year I also heard suggestions of hiring a dedicated technical writer.

    I think that’s BS, at least at the early stages of your company.

    It’s the equivalent of saying that you should hire someone to tell your company vision or that the first sales shouldn’t come from the founders.

    No one knows your product better than yourself. And users (particularly devs) will notice the love put into documentation. + This will result in less customer support and a better user experience overall.

    Honestly, a very underrated task if you ask me.

    - - +

    Writing documentation, as a founder, is underrated.

    · 2 min read


    This blog post emphasizes the importance of writing documentation as a founder. It discusses how it can give an edge when pitching your product and how it can result in less customer support and a better user experience overall.

    A founder spending time writing documentation is f*king underrated.

    Working on your product documentation may not be the most rewarding task, but I strongly believe that it gives you an edge when pitching your product.

    Good documentation needs to strike the perfect balance between having enough context and being straight to the point.

    This week someone asked us how many people worked on our documentation.

    There have been less than 3 people working on it. Our North Star metric has been common sense and putting out documentation that we would enjoy reading/learning from ourselves.

    Earlier this year I also heard suggestions of hiring a dedicated technical writer.

    I think that’s BS, at least at the early stages of your company.

    It’s the equivalent of saying that you should hire someone to tell your company vision or that the first sales shouldn’t come from the founders.

    No one knows your product better than yourself. And users (particularly devs) will notice the love put into documentation. + This will result in less customer support and a better user experience overall.

    Honestly, a very underrated task if you ask me.

    + + \ No newline at end of file diff --git a/books/already-read/index.html b/books/already-read/index.html index c9807543a9..fb77c2989a 100644 --- a/books/already-read/index.html +++ b/books/already-read/index.html @@ -10,13 +10,13 @@ - - + +
    -

    Already Read

    Not all the books I have read, but the ones I have enjoyed the most.

    The Presentation Secrets of Steve Jobs: How to Be Insanely Great in Front of Any Audience
    The Presentation Secrets of Steve Jobs: How to Be Insanely Great in Front of Any Audience
    Carmine Gallo
    Principles: Life and Work
    Principles: Life and Work
    Ray Dalio
    Never Split the Difference: Negotiating as if Your Life Depended on It
    Never Split the Difference: Negotiating as if Your Life Depended on It
    Chris Voss
    Homo Deus: A Brief History of Tomorrow
    Homo Deus: A Brief History of Tomorrow
    Yuval Noah Harari
    Crossing the Chasm, 3rd Edition: Marketing and Selling Disruptive Products to Mainstream Customer
    Crossing the Chasm, 3rd Edition: Marketing and Selling Disruptive Products to Mainstream Customer
    Geoffrey A. Moore
    The Great CEO Within: The Tactical Guide to Company Building
    The Great CEO Within: The Tactical Guide to Company Building
    Matt Mochary
    Hooked: How to Build Habit-Forming Products
    Hooked: How to Build Habit-Forming Products
    Nir Eyal
    What Got You Here Won't Get You There: How successful people become even more successful
    What Got You Here Won't Get You There: How successful people become even more successful
    Marshall Goldsmith
    A Random Walk Down Wall Street: The Time-Tested Strategy for Successful Investing
    A Random Walk Down Wall Street: The Time-Tested Strategy for Successful Investing
    Burton G. Malkiel
    To Sell Is Human: The Surprising Truth About Moving Others
    To Sell Is Human: The Surprising Truth About Moving Others
    Daniel H. Pink
    Who: The A Method for Hiring
    Who: The A Method for Hiring
    Geoff Smart
    Blitzscaling: The Lightning-Fast Path to Building Massively Valuable Companies
    Blitzscaling: The Lightning-Fast Path to Building Massively Valuable Companies
    Reid Hoffman
    Refactoring UI
    Refactoring UI
    Adam Wathan, Steve Schoger
    No Red Lights: Reflections on Life, 50 Years in Venture Capital, and Never Driving Alone
    No Red Lights: Reflections on Life, 50 Years in Venture Capital, and Never Driving Alone
    Alan J. Patricof
    The Lean Startup: How Constant Innovation Creates Radically Successful Businesses
    The Lean Startup: How Constant Innovation Creates Radically Successful Businesses
    Eric Ries
    Elon Musk
    Elon Musk
    Walter Isaacson
    The Almanack of Naval Ravikant: A Guide to Wealth and Happiness
    The Almanack of Naval Ravikant: A Guide to Wealth and Happiness
    Eric Jorgenson, Tim Feriss
    Build: An Unorthodox Guide to Making Things Worth Making
    Build: An Unorthodox Guide to Making Things Worth Making
    Tony Fadell
    The (Mis)Behaviour of Markets: A Fractal View of Risk, Ruin and Reward
    The (Mis)Behaviour of Markets: A Fractal View of Risk, Ruin and Reward
    Benoit B. Mandelbrot
    The Courage to Be Disliked: The Japanese Phenomenon That Shows You How to Change Your Life and Achieve Real Happiness
    The Courage to Be Disliked: The Japanese Phenomenon That Shows You How to Change Your Life and Achieve Real Happiness
    Ichiro Kishimi, Fumitake Koga
    High Growth Handbook: Scaling Startups from 10 to 10,000 People
    High Growth Handbook: Scaling Startups from 10 to 10,000 People
    Elad Gil
    The Mom Test: How to Talk to Customers & Learn If Your Business Is a Good Idea When Everyone Is Lying to You
    The Mom Test: How to Talk to Customers & Learn If Your Business Is a Good Idea When Everyone Is Lying to You
    Rob Fitzpatrick
    The Sales Acceleration Formula: Using Data, Technology, and Inbound Selling to Go from $0 to $100 Million
    The Sales Acceleration Formula: Using Data, Technology, and Inbound Selling to Go from $0 to $100 Million
    Mark Roberge
    21 Lessons for the 21st Century
    21 Lessons for the 21st Century
    Yuval Noah Harari
    Measure What Matters: The Simple Idea that Drives 10x Growth
    Measure What Matters: The Simple Idea that Drives 10x Growth
    John Doerr
    The 15 Commitments of Conscious Leadership: A New Paradigm for Sustainable Success
    The 15 Commitments of Conscious Leadership: A New Paradigm for Sustainable Success
    Jim Dethmer
    The Lean Startup: The Million Copy Bestseller Driving Entrepreneurs to Success
    The Lean Startup: The Million Copy Bestseller Driving Entrepreneurs to Success
    Eric Ries
    Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!
    Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!
    Robert T. Kiyosaki
    Getting Things Done: The Art of Stress-Free Productivity
    Getting Things Done: The Art of Stress-Free Productivity
    David Allen
    The Design of Everyday Things
    The Design of Everyday Things
    Donald Norman
    Zero to One: Notes on Start Ups, or How to Build the Future
    Zero to One: Notes on Start Ups, or How to Build the Future
    Peter Thiel, Blake Masters
    Moonwalking with Einstein: The Art and Science of Remembering Everything
    Moonwalking with Einstein: The Art and Science of Remembering Everything
    Joshua Foer
    Inspired: How to Create Tech Products Customers Love
    Inspired: How to Create Tech Products Customers Love
    Marty Cagan
    Sapiens: A Brief History of Humankind
    Sapiens: A Brief History of Humankind
    Yuval Noah Harari
    Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones
    Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones
    James Clear
    The Psychology of Money: Timeless Lessons on Wealth, Greed, and Happiness
    The Psychology of Money: Timeless Lessons on Wealth, Greed, and Happiness
    Morgan Housel
    How to Win Friends & Influence People
    How to Win Friends & Influence People
    Dale Carnegle
    Disciplined Entrepreneurship: 24 Steps to a Successful Startup
    Disciplined Entrepreneurship: 24 Steps to a Successful Startup
    Bill Aulet
    - - +

    Already Read

    Not all the books I have read, but the ones I have enjoyed the most.

    Homo Deus: A Brief History of Tomorrow
    Homo Deus: A Brief History of Tomorrow
    Yuval Noah Harari
    Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!
    Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!
    Robert T. Kiyosaki
    Refactoring UI
    Refactoring UI
    Adam Wathan, Steve Schoger
    Zero to One: Notes on Start Ups, or How to Build the Future
    Zero to One: Notes on Start Ups, or How to Build the Future
    Peter Thiel, Blake Masters
    The Great CEO Within: The Tactical Guide to Company Building
    The Great CEO Within: The Tactical Guide to Company Building
    Matt Mochary
    Never Split the Difference: Negotiating as if Your Life Depended on It
    Never Split the Difference: Negotiating as if Your Life Depended on It
    Chris Voss
    The Presentation Secrets of Steve Jobs: How to Be Insanely Great in Front of Any Audience
    The Presentation Secrets of Steve Jobs: How to Be Insanely Great in Front of Any Audience
    Carmine Gallo
    The Lean Startup: How Constant Innovation Creates Radically Successful Businesses
    The Lean Startup: How Constant Innovation Creates Radically Successful Businesses
    Eric Ries
    The 15 Commitments of Conscious Leadership: A New Paradigm for Sustainable Success
    The 15 Commitments of Conscious Leadership: A New Paradigm for Sustainable Success
    Jim Dethmer
    Inspired: How to Create Tech Products Customers Love
    Inspired: How to Create Tech Products Customers Love
    Marty Cagan
    Disciplined Entrepreneurship: 24 Steps to a Successful Startup
    Disciplined Entrepreneurship: 24 Steps to a Successful Startup
    Bill Aulet
    21 Lessons for the 21st Century
    21 Lessons for the 21st Century
    Yuval Noah Harari
    Crossing the Chasm, 3rd Edition: Marketing and Selling Disruptive Products to Mainstream Customer
    Crossing the Chasm, 3rd Edition: Marketing and Selling Disruptive Products to Mainstream Customer
    Geoffrey A. Moore
    Blitzscaling: The Lightning-Fast Path to Building Massively Valuable Companies
    Blitzscaling: The Lightning-Fast Path to Building Massively Valuable Companies
    Reid Hoffman
    Getting Things Done: The Art of Stress-Free Productivity
    Getting Things Done: The Art of Stress-Free Productivity
    David Allen
    How to Win Friends & Influence People
    How to Win Friends & Influence People
    Dale Carnegle
    Sapiens: A Brief History of Humankind
    Sapiens: A Brief History of Humankind
    Yuval Noah Harari
    To Sell Is Human: The Surprising Truth About Moving Others
    To Sell Is Human: The Surprising Truth About Moving Others
    Daniel H. Pink
    The Psychology of Money: Timeless Lessons on Wealth, Greed, and Happiness
    The Psychology of Money: Timeless Lessons on Wealth, Greed, and Happiness
    Morgan Housel
    High Growth Handbook: Scaling Startups from 10 to 10,000 People
    High Growth Handbook: Scaling Startups from 10 to 10,000 People
    Elad Gil
    Principles: Life and Work
    Principles: Life and Work
    Ray Dalio
    Build: An Unorthodox Guide to Making Things Worth Making
    Build: An Unorthodox Guide to Making Things Worth Making
    Tony Fadell
    Elon Musk
    Elon Musk
    Walter Isaacson
    Who: The A Method for Hiring
    Who: The A Method for Hiring
    Geoff Smart
    No Red Lights: Reflections on Life, 50 Years in Venture Capital, and Never Driving Alone
    No Red Lights: Reflections on Life, 50 Years in Venture Capital, and Never Driving Alone
    Alan J. Patricof
    The Sales Acceleration Formula: Using Data, Technology, and Inbound Selling to Go from $0 to $100 Million
    The Sales Acceleration Formula: Using Data, Technology, and Inbound Selling to Go from $0 to $100 Million
    Mark Roberge
    Measure What Matters: The Simple Idea that Drives 10x Growth
    Measure What Matters: The Simple Idea that Drives 10x Growth
    John Doerr
    The Courage to Be Disliked: The Japanese Phenomenon That Shows You How to Change Your Life and Achieve Real Happiness
    The Courage to Be Disliked: The Japanese Phenomenon That Shows You How to Change Your Life and Achieve Real Happiness
    Ichiro Kishimi, Fumitake Koga
    Hooked: How to Build Habit-Forming Products
    Hooked: How to Build Habit-Forming Products
    Nir Eyal
    Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones
    Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones
    James Clear
    What Got You Here Won't Get You There: How successful people become even more successful
    What Got You Here Won't Get You There: How successful people become even more successful
    Marshall Goldsmith
    The Almanack of Naval Ravikant: A Guide to Wealth and Happiness
    The Almanack of Naval Ravikant: A Guide to Wealth and Happiness
    Eric Jorgenson, Tim Feriss
    Moonwalking with Einstein: The Art and Science of Remembering Everything
    Moonwalking with Einstein: The Art and Science of Remembering Everything
    Joshua Foer
    The Lean Startup: The Million Copy Bestseller Driving Entrepreneurs to Success
    The Lean Startup: The Million Copy Bestseller Driving Entrepreneurs to Success
    Eric Ries
    The Mom Test: How to Talk to Customers & Learn If Your Business Is a Good Idea When Everyone Is Lying to You
    The Mom Test: How to Talk to Customers & Learn If Your Business Is a Good Idea When Everyone Is Lying to You
    Rob Fitzpatrick
    The Design of Everyday Things
    The Design of Everyday Things
    Donald Norman
    The (Mis)Behaviour of Markets: A Fractal View of Risk, Ruin and Reward
    The (Mis)Behaviour of Markets: A Fractal View of Risk, Ruin and Reward
    Benoit B. Mandelbrot
    A Random Walk Down Wall Street: The Time-Tested Strategy for Successful Investing
    A Random Walk Down Wall Street: The Time-Tested Strategy for Successful Investing
    Burton G. Malkiel
    + + \ No newline at end of file diff --git a/books/to-read/index.html b/books/to-read/index.html index 17d400e9ac..a62647f3f7 100644 --- a/books/to-read/index.html +++ b/books/to-read/index.html @@ -10,13 +10,13 @@ - - + +
    -

    To Read

    If there is a particular book that you think I should read, feel free to recommend it.

    Product Leadership: How Top Product Managers Launch Awesome Products and Build Successful Teams
    Product Leadership: How Top Product Managers Launch Awesome Products and Build Successful Teams
    Richard Banfield, Martin Eriksson, Nate Walkingshaw
    Dare to Lead: Brave Work. Tough Conversations. Whole Hearts.
    Dare to Lead: Brave Work. Tough Conversations. Whole Hearts.
    Brene Brown
    Traction: Get a Grip on Your Business
    Traction: Get a Grip on Your Business
    Gino Wickman
    Thinking, Fast and Slow
    Thinking, Fast and Slow
    Daniel Kahneman
    How Google Works
    How Google Works
    Eric Schmidt, Jonathan Rosenberg
    Start with Why: How Great Leaders Inspire Everyone to Take Action
    Start with Why: How Great Leaders Inspire Everyone to Take Action
    Simon Sinek
    From Project to Profit: How to Build a Business Around Your Open Source Project
    From Project to Profit: How to Build a Business Around Your Open Source Project
    Heather Meeker
    Thinking in Bets: Making Smarter Decisions When You Don't Have All the Facts
    Thinking in Bets: Making Smarter Decisions When You Don't Have All the Facts
    Annie Duke
    Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability
    Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability
    Steve Krug
    The Power Presenter: Technique, Style, and Strategy from Americas Top Speaking Coach
    The Power Presenter: Technique, Style, and Strategy from Americas Top Speaking Coach
    Jerry Weissman
    Escaping the Build Trap: How Effective Product Management Creates Real Value
    Escaping the Build Trap: How Effective Product Management Creates Real Value
    Melissa Perri
    User Story Mapping: Discover the Whole Story, Build the Right Product
    User Story Mapping: Discover the Whole Story, Build the Right Product
    Jeff Patton (Author)
    The Beginning of Infinity: Explanations That Transform the World
    The Beginning of Infinity: Explanations That Transform the World
    David Deutsch
    The Rational Optimist: How Prosperity Evolves
    The Rational Optimist: How Prosperity Evolves
    Matt Ridley
    The Challenger Sale: Taking Control of the Customer Conversation
    The Challenger Sale: Taking Control of the Customer Conversation
    Matthew Dixon, Brent Adamson
    Predictably Irrational, Revised and Expanded Edition: The Hidden Forces That Shape Our Decisions
    Predictably Irrational, Revised and Expanded Edition: The Hidden Forces That Shape Our Decisions
    Dr. Dan Ariely
    Change: How to Make Big Things Happen
    Change: How to Make Big Things Happen
    Damon Centola
    High Output Management
    High Output Management
    Andrew S. Grove
    The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company
    The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company
    Robert Iger
    The Alchemy of Finance
    The Alchemy of Finance
    George Soros
    Influence: The Psychology of Persuasion
    Influence: The Psychology of Persuasion
    Robert B. Cialdini
    The Messy Middle: Finding Your Way Through the Hardest and Most Crucial Part of Any Bold Venture
    The Messy Middle: Finding Your Way Through the Hardest and Most Crucial Part of Any Bold Venture
    Scott Belsky
    People Powered: How Communities Can Supercharge Your Business, Brand, and Teams
    People Powered: How Communities Can Supercharge Your Business, Brand, and Teams
    Jono Bacon
    Market Wizards: Interviews with Top Traders
    Market Wizards: Interviews with Top Traders
    Jack D. Schwager
    Sprint: How to Solve Big Problems and Test New Ideas in Just Five Days
    Sprint: How to Solve Big Problems and Test New Ideas in Just Five Days
    Jake Knapp, John Zeratsky, Braden Kowitz, Dan Bittner
    Working in Public: The Making and Maintenance of Open Source Software
    Working in Public: The Making and Maintenance of Open Source Software
    Nadia Eghbal
    Think Again: The Power of Knowing What You Don't Know
    Think Again: The Power of Knowing What You Don't Know
    Adam Grant
    Strong Product People: A Complete Guide to Developing Great Product Managers
    Strong Product People: A Complete Guide to Developing Great Product Managers
    Petra Wille
    Shoe Dog: A Memoir by the Creator of Nike
    Shoe Dog: A Memoir by the Creator of Nike
    Phil Knight
    Actionable Gamification: Beyond Points, Badges and Leaderboards
    Actionable Gamification: Beyond Points, Badges and Leaderboards
    Yu-Kai Chou
    Indistractable: How to Control Your Attention and Choose Your Life
    Indistractable: How to Control Your Attention and Choose Your Life
    Nir Eyal
    No Rules Rules: Netflix and the Culture of Reinvention
    No Rules Rules: Netflix and the Culture of Reinvention
    Reed Hastings, Erin Meyer
    The Innovator's Solution: Creating and Sustaining Successful Growth
    The Innovator's Solution: Creating and Sustaining Successful Growth
    Clayton M. Christensen
    Built to Sell: Creating a Business That Can Thrive Without You
    Built to Sell: Creating a Business That Can Thrive Without You
    John Warrilow
    The Most Important Thing: Uncommon Sense for The Thoughtful Investor
    The Most Important Thing: Uncommon Sense for The Thoughtful Investor
    Howard Marks
    Do Less Better: The Power of Strategic Sacrifice in a Complex World
    Do Less Better: The Power of Strategic Sacrifice in a Complex World
    J. Bell
    Cracking the PM Career: The Skills, Frameworks, and Practices To Become a Great Product Manager
    Cracking the PM Career: The Skills, Frameworks, and Practices To Become a Great Product Manager
    Jackie Bavaro, Gayle McDowell
    Cracking the PM Interview: How to Land a Product Manager Job in Technology
    Cracking the PM Interview: How to Land a Product Manager Job in Technology
    Gayle Laakmann McDowell, Jackie Bavaro
    Sell the Way You Buy: A Modern Approach To Sales That Actually Works (Even On You!)
    Sell the Way You Buy: A Modern Approach To Sales That Actually Works (Even On You!)
    David Priemer
    The Inmates Are Running the Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity
    The Inmates Are Running the Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity
    Alan Cooper
    Poor Charlie's Almanack: The Wit and Wisdom of Charles T. Munger
    Poor Charlie's Almanack: The Wit and Wisdom of Charles T. Munger
    Peter D. Kaufman
    More Money Than God: Hedge Funds and the Making of a New Elite
    More Money Than God: Hedge Funds and the Making of a New Elite
    Sebastian Mallaby
    The intelligent investor: The Definitive Book on Value Investing
    The intelligent investor: The Definitive Book on Value Investing
    Benjamin Graham
    Recruiting
    Recruiting
    Ryan Breslow
    Continuous Discovery Habits: Discover Products that Create Customer Value and Business Value
    Continuous Discovery Habits: Discover Products that Create Customer Value and Business Value
    Teresa Torres
    The Challenger Sale: Taking Control of the Customer Conversation
    The Challenger Sale: Taking Control of the Customer Conversation
    Matthew Dixon, Brent Adamson
    Story: Substance, Structure, Style, and the Principles of Screenwriting
    Story: Substance, Structure, Style, and the Principles of Screenwriting
    Robert McKee
    Loved: How to Rethink Marketing for Tech Products (Silicon Valley Product Group)
    Loved: How to Rethink Marketing for Tech Products (Silicon Valley Product Group)
    Martina Lauchengco, Todd Wilms, Chris Jones
    The Amazon Way: Amazon's 14 Leadership Principles
    The Amazon Way: Amazon's 14 Leadership Principles
    John Rossman
    A Guide to the Good Life: The Ancient Art of Stoic Joy
    A Guide to the Good Life: The Ancient Art of Stoic Joy
    William B. Irvine
    Obviously Awesome: How to Nail Product Positioning so Customers Get It, Buy It, Love It
    Obviously Awesome: How to Nail Product Positioning so Customers Get It, Buy It, Love It
    April Dunford, Geoffrey Moore
    Rework
    Rework
    Jason Fried, David Heinemeier Hansson
    Buy Back Your Time: Get Unstuck, Reclaim Your Freedom, and Build Your Empire
    Buy Back Your Time: Get Unstuck, Reclaim Your Freedom, and Build Your Empire
    Dan Martell
    Lights Out: Pride, Delusion, and the Fall of General Electric
    Lights Out: Pride, Delusion, and the Fall of General Electric
    Ted Mann, Thomas Gryta
    The Beginning of Infinity: Explanations That Transform the World
    The Beginning of Infinity: Explanations That Transform the World
    David Deutsch
    Resilience: Hard-Won Wisdom for Living a Better Life
    Resilience: Hard-Won Wisdom for Living a Better Life
    Eric Greitens
    The Voltage Effect: How to Make Good Ideas Great and Great Ideas Scale
    The Voltage Effect: How to Make Good Ideas Great and Great Ideas Scale
    John A List
    When Coffee and Kale Compete: Become great at making products people will buy
    When Coffee and Kale Compete: Become great at making products people will buy
    Alan Klement
    The Hero with a Thousand Faces
    The Hero with a Thousand Faces
    Joseph Campbell
    $100M Offers: How to Make Offers So Good People Feel Stupid Saying No
    $100M Offers: How to Make Offers So Good People Feel Stupid Saying No
    Alex Hormozi
    Nudge: The Final Edition: Improving Decisions About Money, Health, and the Environment
    Nudge: The Final Edition: Improving Decisions About Money, Health, and the Environment
    Richard H. Thaler, Cass R. Sunstein
    Blue Ocean Strategy, Expanded Edition: How to Create Uncontested Market Space and Make the Competition Irrelevant
    Blue Ocean Strategy, Expanded Edition: How to Create Uncontested Market Space and Make the Competition Irrelevant
    W. Chan Kim, Renée Mauborgne
    The Startup Owners Manual: The Step-By-Step Guide for Building a Great Company
    The Startup Owners Manual: The Step-By-Step Guide for Building a Great Company
    Steve Blank, Bob Dorf
    Predictable Revenue: Turn Your Business Into a Sales Machine with the $100 Million Best Practices of Salesforce.com
    Predictable Revenue: Turn Your Business Into a Sales Machine with the $100 Million Best Practices of Salesforce.com
    Aaron Ross, Marylou Tyler
    The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers
    The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers
    Ben Horowitz
    The Innovator's Dilemma: The Revolutionary Book That Will Change the Way You Do Business
    The Innovator's Dilemma: The Revolutionary Book That Will Change the Way You Do Business
    Clayton M. Christensen
    Founders at Work: Stories of Startups' Early Days
    Founders at Work: Stories of Startups' Early Days
    Jessica Livingston
    Competing Against Luck: The Story of Innovation and Customer Choice
    Competing Against Luck: The Story of Innovation and Customer Choice
    Clayton M. Christensen, Karen Dillon, Taddy Hall, David S. Duncan
    Man's Search for Meaning
    Man's Search for Meaning
    Viktor E. Frankl
    Empowered: Ordinary People, Extraordinary Products (Silicon Valley Product Group)
    Empowered: Ordinary People, Extraordinary Products (Silicon Valley Product Group)
    Marty Cagan
    Radical Candor: Fully Revised & Updated Edition: Be a Kick-Ass Boss Without Losing Your Humanity
    Radical Candor: Fully Revised & Updated Edition: Be a Kick-Ass Boss Without Losing Your Humanity
    Kim Scott
    - - +

    To Read

    If there is a particular book that you think I should read, feel free to recommend it.

    Thinking in Bets: Making Smarter Decisions When You Don't Have All the Facts
    Thinking in Bets: Making Smarter Decisions When You Don't Have All the Facts
    Annie Duke
    Blue Ocean Strategy, Expanded Edition: How to Create Uncontested Market Space and Make the Competition Irrelevant
    Blue Ocean Strategy, Expanded Edition: How to Create Uncontested Market Space and Make the Competition Irrelevant
    W. Chan Kim, Renée Mauborgne
    When Coffee and Kale Compete: Become great at making products people will buy
    When Coffee and Kale Compete: Become great at making products people will buy
    Alan Klement
    Influence: The Psychology of Persuasion
    Influence: The Psychology of Persuasion
    Robert B. Cialdini
    The Voltage Effect: How to Make Good Ideas Great and Great Ideas Scale
    The Voltage Effect: How to Make Good Ideas Great and Great Ideas Scale
    John A List
    Resilience: Hard-Won Wisdom for Living a Better Life
    Resilience: Hard-Won Wisdom for Living a Better Life
    Eric Greitens
    The Inmates Are Running the Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity
    The Inmates Are Running the Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity
    Alan Cooper
    Predictably Irrational, Revised and Expanded Edition: The Hidden Forces That Shape Our Decisions
    Predictably Irrational, Revised and Expanded Edition: The Hidden Forces That Shape Our Decisions
    Dr. Dan Ariely
    Do Less Better: The Power of Strategic Sacrifice in a Complex World
    Do Less Better: The Power of Strategic Sacrifice in a Complex World
    J. Bell
    Sell the Way You Buy: A Modern Approach To Sales That Actually Works (Even On You!)
    Sell the Way You Buy: A Modern Approach To Sales That Actually Works (Even On You!)
    David Priemer
    The Power Presenter: Technique, Style, and Strategy from Americas Top Speaking Coach
    The Power Presenter: Technique, Style, and Strategy from Americas Top Speaking Coach
    Jerry Weissman
    Product Leadership: How Top Product Managers Launch Awesome Products and Build Successful Teams
    Product Leadership: How Top Product Managers Launch Awesome Products and Build Successful Teams
    Richard Banfield, Martin Eriksson, Nate Walkingshaw
    Buy Back Your Time: Get Unstuck, Reclaim Your Freedom, and Build Your Empire
    Buy Back Your Time: Get Unstuck, Reclaim Your Freedom, and Build Your Empire
    Dan Martell
    Cracking the PM Career: The Skills, Frameworks, and Practices To Become a Great Product Manager
    Cracking the PM Career: The Skills, Frameworks, and Practices To Become a Great Product Manager
    Jackie Bavaro, Gayle McDowell
    Escaping the Build Trap: How Effective Product Management Creates Real Value
    Escaping the Build Trap: How Effective Product Management Creates Real Value
    Melissa Perri
    A Guide to the Good Life: The Ancient Art of Stoic Joy
    A Guide to the Good Life: The Ancient Art of Stoic Joy
    William B. Irvine
    The Innovator's Solution: Creating and Sustaining Successful Growth
    The Innovator's Solution: Creating and Sustaining Successful Growth
    Clayton M. Christensen
    How Google Works
    How Google Works
    Eric Schmidt, Jonathan Rosenberg
    Empowered: Ordinary People, Extraordinary Products (Silicon Valley Product Group)
    Empowered: Ordinary People, Extraordinary Products (Silicon Valley Product Group)
    Marty Cagan
    Dare to Lead: Brave Work. Tough Conversations. Whole Hearts.
    Dare to Lead: Brave Work. Tough Conversations. Whole Hearts.
    Brene Brown
    Built to Sell: Creating a Business That Can Thrive Without You
    Built to Sell: Creating a Business That Can Thrive Without You
    John Warrilow
    Shoe Dog: A Memoir by the Creator of Nike
    Shoe Dog: A Memoir by the Creator of Nike
    Phil Knight
    Market Wizards: Interviews with Top Traders
    Market Wizards: Interviews with Top Traders
    Jack D. Schwager
    The Messy Middle: Finding Your Way Through the Hardest and Most Crucial Part of Any Bold Venture
    The Messy Middle: Finding Your Way Through the Hardest and Most Crucial Part of Any Bold Venture
    Scott Belsky
    Change: How to Make Big Things Happen
    Change: How to Make Big Things Happen
    Damon Centola
    The Beginning of Infinity: Explanations That Transform the World
    The Beginning of Infinity: Explanations That Transform the World
    David Deutsch
    Loved: How to Rethink Marketing for Tech Products (Silicon Valley Product Group)
    Loved: How to Rethink Marketing for Tech Products (Silicon Valley Product Group)
    Martina Lauchengco, Todd Wilms, Chris Jones
    The Innovator's Dilemma: The Revolutionary Book That Will Change the Way You Do Business
    The Innovator's Dilemma: The Revolutionary Book That Will Change the Way You Do Business
    Clayton M. Christensen
    Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability
    Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability
    Steve Krug
    More Money Than God: Hedge Funds and the Making of a New Elite
    More Money Than God: Hedge Funds and the Making of a New Elite
    Sebastian Mallaby
    The Most Important Thing: Uncommon Sense for The Thoughtful Investor
    The Most Important Thing: Uncommon Sense for The Thoughtful Investor
    Howard Marks
    Recruiting
    Recruiting
    Ryan Breslow
    The Alchemy of Finance
    The Alchemy of Finance
    George Soros
    The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company
    The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company
    Robert Iger
    Story: Substance, Structure, Style, and the Principles of Screenwriting
    Story: Substance, Structure, Style, and the Principles of Screenwriting
    Robert McKee
    The Amazon Way: Amazon's 14 Leadership Principles
    The Amazon Way: Amazon's 14 Leadership Principles
    John Rossman
    No Rules Rules: Netflix and the Culture of Reinvention
    No Rules Rules: Netflix and the Culture of Reinvention
    Reed Hastings, Erin Meyer
    Think Again: The Power of Knowing What You Don't Know
    Think Again: The Power of Knowing What You Don't Know
    Adam Grant
    The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers
    The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers
    Ben Horowitz
    The Beginning of Infinity: Explanations That Transform the World
    The Beginning of Infinity: Explanations That Transform the World
    David Deutsch
    The Rational Optimist: How Prosperity Evolves
    The Rational Optimist: How Prosperity Evolves
    Matt Ridley
    Cracking the PM Interview: How to Land a Product Manager Job in Technology
    Cracking the PM Interview: How to Land a Product Manager Job in Technology
    Gayle Laakmann McDowell, Jackie Bavaro
    Working in Public: The Making and Maintenance of Open Source Software
    Working in Public: The Making and Maintenance of Open Source Software
    Nadia Eghbal
    Lights Out: Pride, Delusion, and the Fall of General Electric
    Lights Out: Pride, Delusion, and the Fall of General Electric
    Ted Mann, Thomas Gryta
    The Hero with a Thousand Faces
    The Hero with a Thousand Faces
    Joseph Campbell
    High Output Management
    High Output Management
    Andrew S. Grove
    The intelligent investor: The Definitive Book on Value Investing
    The intelligent investor: The Definitive Book on Value Investing
    Benjamin Graham
    Sprint: How to Solve Big Problems and Test New Ideas in Just Five Days
    Sprint: How to Solve Big Problems and Test New Ideas in Just Five Days
    Jake Knapp, John Zeratsky, Braden Kowitz, Dan Bittner
    People Powered: How Communities Can Supercharge Your Business, Brand, and Teams
    People Powered: How Communities Can Supercharge Your Business, Brand, and Teams
    Jono Bacon
    Strong Product People: A Complete Guide to Developing Great Product Managers
    Strong Product People: A Complete Guide to Developing Great Product Managers
    Petra Wille
    Continuous Discovery Habits: Discover Products that Create Customer Value and Business Value
    Continuous Discovery Habits: Discover Products that Create Customer Value and Business Value
    Teresa Torres
    User Story Mapping: Discover the Whole Story, Build the Right Product
    User Story Mapping: Discover the Whole Story, Build the Right Product
    Jeff Patton (Author)
    Traction: Get a Grip on Your Business
    Traction: Get a Grip on Your Business
    Gino Wickman
    Predictable Revenue: Turn Your Business Into a Sales Machine with the $100 Million Best Practices of Salesforce.com
    Predictable Revenue: Turn Your Business Into a Sales Machine with the $100 Million Best Practices of Salesforce.com
    Aaron Ross, Marylou Tyler
    Obviously Awesome: How to Nail Product Positioning so Customers Get It, Buy It, Love It
    Obviously Awesome: How to Nail Product Positioning so Customers Get It, Buy It, Love It
    April Dunford, Geoffrey Moore
    The Challenger Sale: Taking Control of the Customer Conversation
    The Challenger Sale: Taking Control of the Customer Conversation
    Matthew Dixon, Brent Adamson
    Thinking, Fast and Slow
    Thinking, Fast and Slow
    Daniel Kahneman
    $100M Offers: How to Make Offers So Good People Feel Stupid Saying No
    $100M Offers: How to Make Offers So Good People Feel Stupid Saying No
    Alex Hormozi
    Indistractable: How to Control Your Attention and Choose Your Life
    Indistractable: How to Control Your Attention and Choose Your Life
    Nir Eyal
    Actionable Gamification: Beyond Points, Badges and Leaderboards
    Actionable Gamification: Beyond Points, Badges and Leaderboards
    Yu-Kai Chou
    From Project to Profit: How to Build a Business Around Your Open Source Project
    From Project to Profit: How to Build a Business Around Your Open Source Project
    Heather Meeker
    Competing Against Luck: The Story of Innovation and Customer Choice
    Competing Against Luck: The Story of Innovation and Customer Choice
    Clayton M. Christensen, Karen Dillon, Taddy Hall, David S. Duncan
    Start with Why: How Great Leaders Inspire Everyone to Take Action
    Start with Why: How Great Leaders Inspire Everyone to Take Action
    Simon Sinek
    The Challenger Sale: Taking Control of the Customer Conversation
    The Challenger Sale: Taking Control of the Customer Conversation
    Matthew Dixon, Brent Adamson
    Radical Candor: Fully Revised & Updated Edition: Be a Kick-Ass Boss Without Losing Your Humanity
    Radical Candor: Fully Revised & Updated Edition: Be a Kick-Ass Boss Without Losing Your Humanity
    Kim Scott
    Poor Charlie's Almanack: The Wit and Wisdom of Charles T. Munger
    Poor Charlie's Almanack: The Wit and Wisdom of Charles T. Munger
    Peter D. Kaufman
    Founders at Work: Stories of Startups' Early Days
    Founders at Work: Stories of Startups' Early Days
    Jessica Livingston
    Rework
    Rework
    Jason Fried, David Heinemeier Hansson
    The Startup Owners Manual: The Step-By-Step Guide for Building a Great Company
    The Startup Owners Manual: The Step-By-Step Guide for Building a Great Company
    Steve Blank, Bob Dorf
    Man's Search for Meaning
    Man's Search for Meaning
    Viktor E. Frankl
    Nudge: The Final Edition: Improving Decisions About Money, Health, and the Environment
    Nudge: The Final Edition: Improving Decisions About Money, Health, and the Environment
    Richard H. Thaler, Cass R. Sunstein
    + + \ No newline at end of file diff --git a/index.html b/index.html index 7be520e174..02590e316c 100644 --- a/index.html +++ b/index.html @@ -10,13 +10,13 @@ - - + +

    Who am I?

    Co-founder & CEO at OpenBB
    Time-GPT event from NixtlaOpenBB Tattoo

    Reach out, anytime.

    Let's catch up

    I am available for 15 minutes calls as long as you set an agenda.

    (and it is not a sales call)

    I love to experience new cultures

    Nowadays I put work first. But one day I hope to visit over 100 countries.
    - - + + \ No newline at end of file diff --git a/markdown-page/index.html b/markdown-page/index.html index be146173eb..22ee4e3ba9 100644 --- a/markdown-page/index.html +++ b/markdown-page/index.html @@ -10,13 +10,13 @@ - - + + - - + + \ No newline at end of file diff --git a/media/news-mentions/index.html b/media/news-mentions/index.html index a87f1ded58..15facd9eb4 100644 --- a/media/news-mentions/index.html +++ b/media/news-mentions/index.html @@ -10,13 +10,13 @@ - - + +

    News Mentions

    2022-11-29 - Newswire

    OpenBB Releases Its Second Generation Open Source Investment Research Platform With a Software Development Kit (SDK) and an AI/ML Toolkit

    Learn more
    2022-03-30 - Venture Beat

    OpenBB wants to be an open source challenger to Bloomberg Terminal

    Learn more
    2021-03-01 - VICE Magazine

    Gamestonk Terminal Is a DIY, Meme Stock Version of Bloomberg Terminal

    Learn more
    - - + + \ No newline at end of file diff --git a/media/podcasts/index.html b/media/podcasts/index.html index 809e59b831..fc0e0ef8ce 100644 --- a/media/podcasts/index.html +++ b/media/podcasts/index.html @@ -10,13 +10,13 @@ - - + +

    Podcasts

    2022-05-10

    Making Investment Data Easy To Access And Analyze With The OpenBB Terminal

    Podcast.__init__

    Investing effectively is largely a game of information access and analysis. This can involve a substantial amount of research and time spent on finding, validating, and acquiring different information sources. In order to reduce the barrier to entry and provide a powerful framework for amateur and professional investors alike Didier Rodrigues Lopes created the OpenBB Terminal. In this episode he explains how a pandemic project that started as an experiment has led to him founding a new company and dedicating his time to growing and improving the project and its community.

    2023-11-28

    Interview with Didier Lopes: CEO and Founder, OpenBB

    Flagsmith

    OpenBB stands at the crossroads of innovation, uniting open-source spirit with financial prowess to empower every individual. In this episode of our podcast, Didier Lopes discusses OpenBB, a revolutionary platform aiming to democratize access to financial data. From its inception to its evolution into a versatile financial data hub, Didier shows how OpenBB thrives as a bridge connecting financial data for everyone. Join us as we explore the potential future directions for OpenBB, envisioning an ecosystem where financial data is seamlessly accessible, customized, and affordable for all types of users. Tune in now!

    - - + + \ No newline at end of file diff --git a/media/videos/interviews/index.html b/media/videos/interviews/index.html index 66c96ee6a6..abd03ca4dc 100644 --- a/media/videos/interviews/index.html +++ b/media/videos/interviews/index.html @@ -10,13 +10,13 @@ - - + +

    Interviews

    2023-12-12

    Fintech CEO Fireside Chat: Open Source Fintech Ft. OpenBB

    1h 7min - In our latest Fintech CEO Fireside Chat, our CEO dives in with Didier Lopes, the Founder & CEO of OpenBB. Topics Covered: Open-source and "freemium" business models Competing with Bloomberg, Reinventing the "terminal", Startup fundraising, How to scale a startup, Retail and institutional investment trends, and more!!

    2023-08-02

    Open source interviews #20 - Didier Lopes, founder of OpenB

    37 minutes - Open source investment research platform | Terminal | SDK | Bot.

    2023-07-14

    LlamaIndex Webinar: LLMs for Investment Research

    46 minutes - OpenBB has an awesome Terminal product, and it's made even better with AI! We'll talk about AskOBB, powered by LlamaIndex - it gives users a natural language interface to access financial data. We'll also talk about their future plans: utilizing LLMs to chat with financial data and extract insights more efficiently, or even creating a custom research report.

    - - + + \ No newline at end of file diff --git a/media/videos/on-stage/index.html b/media/videos/on-stage/index.html index 06afbb1024..07c9480a0e 100644 --- a/media/videos/on-stage/index.html +++ b/media/videos/on-stage/index.html @@ -10,13 +10,13 @@ - - + +

    On stage

    2023-12-07

    Creating an AI-Powered Financial Analyst with OpenBB

    24 minutes - In this session, we will go over how analysts and quants can build their own AI-powered financial analysts using AI and open source. This will rely on building an agent, in Python, that can access 500+ data endpoints through the OpenBB platform.

    2023-12-05

    The new FinAI Tech Stack - OpenBB Terminal Pro

    22 minutes - Didier Lopes, CEO of OpenBB, presented the OpenBB Platform and the OpenBB Terminal Pro at the event "The new FinAI Tech Stack" hosted by MindsDB in SF, California.

    2023-09-06

    TimeGPT Launch | Didier Lopes, OpenBB: Democratizing Quantitative Finance

    13 minutes - Didier Lopes, CEO and Co-Founder of OpenBB, he explores how his company is democratizing the world of Quantitative Finance. Don't miss out on a live code demonstration showing the integration of TimeGPT by Nixtla into the OpenBB terminal to predict stock prices.

    2023-06-14

    Revolutionizing the financial industry through Python - SF Python @ GGU

    32 minutes - Didier talks about his journey from the pain points of doing investment research to starting his own investment research platform in Python and raising $8.8M to democratize investment research through open source. He will introduce the OpenBB Terminal - the famous open source investment research platform, and some of its functionalities. In addition, he will present the OpenBB SDK which allows devs to build products on OpenBB.

    2022-11-09

    How to grow your open-source community from scratch

    3 minutes - Learn how to grow your open-source community from scratch. This presentation was done during the Web Summit 2022.

    2022-07-19

    Why Proprietary Investment Research Platforms won't Last

    29 minutes - Today's investment research platforms are proprietary, expensive, come bundled with a full suite of services, and do not offer a custom solution to fit your business's needs. OpenBB Terminal offers the first open source, fully customisable investment research platform that your company can tailor to their own needs, all built off of GitHub's top investment research platform.

    - - + + \ No newline at end of file diff --git a/media/videos/openbb-champions/index.html b/media/videos/openbb-champions/index.html index 11eb4e51ad..ce42000a23 100644 --- a/media/videos/openbb-champions/index.html +++ b/media/videos/openbb-champions/index.html @@ -10,13 +10,13 @@ - - + +

    OpenBB Champions

    2023-05-28

    Meet Jason Strimpel - OpenBB Champion

    25 minutes - Jason Strimpel's passion for teaching and simplifying complex concepts aligned perfectly with OpenBB's mission to democratize financial data access. That's why we are super proud to announce that Jason Strimpel - founder of PyQuant News - is our next OpenBB Champion.

    2023-09-27

    Meet Roberto Talamas - OpenBB Champion

    43 minutes - We sat down with the remarkable Roberto Talamas, partner at Syncracy Capital, a leading hedge fund in the cryptocurrency industry, to hear about his career and experience using OpenBB. In this conversation, he talked about the crucial role Python plays in the world of finance, discussed the immense potential of tools like the OpenBB Terminal, and emphasized the transformative power of community-driven platforms. Roberto's insights provide a valuable perspective on the evolving needs of analysts in the crypto space and explain why OpenBB's commitment to user-centric features, from Excel integration to intuitive interfaces, aligns with the needs of a modern analyst.

    2023-10-26

    Meet Cordell Tanny - OpenBB Champion

    41 minutes - In a world where the boundaries between traditional fields continue to blur, individuals with diverse experiences often bring fresh and innovative perspectives. Cordell Tanny's story serves as a testament to this. His journey from a Bachelor's degree in Biology at McGill University to the intricate world of finance is as fascinating as it is inspiring. That's why we were excited to interview him as an OpenBB Champion!

    - - + + \ No newline at end of file diff --git a/media/videos/product-videos/index.html b/media/videos/product-videos/index.html index aef35ca8d4..a8d1d68293 100644 --- a/media/videos/product-videos/index.html +++ b/media/videos/product-videos/index.html @@ -10,13 +10,13 @@ - - + +

    Product videos

    2023-12-14

    OpenBB Terminal Pro Tutorial - full length version

    55 minutes - Discover the superior investment research capabilities of the OpenBB Terminal Pro. Built on top of the open-source OpenBB Terminal, our platform provides a sleek graphical interface that is intuitive and fully customizable, making it easier for you to access and analyze financial information with ease.

    2023-10-22

    How to use the OpenBB Terminal - full length version

    40 minutes - Get started with the OpenBB Terminal today and learn everything you need to perform your investment research and analysis.

    2023-02-26

    OpenBB x Keychron: Doing due diligence on a stock will never be the same

    17 minutes - In this video I show the concept of routines in the OpenBB Terminal and how you can automate your investment research workflows. In addition, I share how you can create your own custom MACROS on your Keychron mechanical keyboard

    2022-06-20

    Adding feargreed command to OpenBB Terminal

    70 minutes - This is a video of myself live coding on Gamestonk Terminal. More precisely, adding the 'feargreed' command to the 'economy' menu. Along with the coding, I explain the architecture that we are currently using, so that more developers can add features.

    2022-02-24

    OpenBB Terminal Demo

    43 minutes - OpenBB Terminal Demo after 1 year of development. In this video I go over: introducing the terminal, how to set API keys, enable feature flags, export data, integrate excel, prediction menu, advanced user and routines, +500 features, portfolio menu, automatic reports, dashboards, OpenBB API, and even our OpenBB Bot.

    - - + + \ No newline at end of file diff --git a/media/videos/webinars-presentations/index.html b/media/videos/webinars-presentations/index.html index 7ea188af4a..796d28da0c 100644 --- a/media/videos/webinars-presentations/index.html +++ b/media/videos/webinars-presentations/index.html @@ -10,13 +10,13 @@ - - + +

    Webinars / Presentations

    2022-12-13

    Didier's journey and Demo of the OpenBB Terminal and OpenBB SDK

    36 minutes - During a course of PyQuant News titled 'Getting Started with Quant Finance' I speaks about my background and do a demo about the OpenBB Terminal and the OpenBB SDK. Please note that this version of the OpenBB Terminal was an Early Release Candidate.

    2022-11-30

    OpenBB - Terminal 2.0 Launch Event

    56 minutes - Webinar regarding the release of the OpenBB Terminal 2.0. Within this release, the OpenBB SDK and the AI/ML Toolkit are released. Furthermore, many improvements to the already existing 914 commands in the OpenBB Terminal supported by 92 data sources were made.

    2021-10-5

    First presentation of Gamestonk Terminal

    15 minutes - In this Hacktoberfest '21 kickoff by DeepSource I go over why I started an open source investment research terminal, share some highlights and early growth, talk about our discord bot and finally discuss how we will accommodate powerful machine learning models.

    - - + + \ No newline at end of file diff --git a/projects/index.html b/projects/index.html index 102209cce9..7d31550914 100644 --- a/projects/index.html +++ b/projects/index.html @@ -10,13 +10,13 @@ - - + +

    Projects

    Technically OpenBB is no longer a personal project, but for historical reasons it will remain here. Follow me on GitHub for more.

    OpenBB Terminal
    OpenBB Terminal
    Investment Research for Everyone, Anywhere.
    My Website
    My Website
    This very same personal website.
    Step Detection using Machine Learning
    Step Detection using Machine Learning
    Step Detection using SVM on NURVV trackers
    Univariate Time-Series Forecast
    Univariate Time-Series Forecast
    PhD Thesis: "Data Science in the Modeling and Forecasting of Financial Timeseries: from Classic methodologies to Deep Learning"
    Meme Filter
    Meme Filter
    Multiplayer customizable snapchat kind of filter
    Reddit Giveaway NFT Bot
    Reddit Giveaway NFT Bot
    Bot that automatically signs up to NFT giveaways on Reddit
    Discord Memes
    Discord Memes
    Discord bot that allows to send memes with text populated
    Momentum Football Bets
    Momentum Football Bets
    Football bets prediction based on momentum from Honer family
    World Cup 2022 Sweepstake Slack bot
    World Cup 2022 Sweepstake Slack bot
    Slack channel daily update about World Cup 2022 sweepstake results
    Time-Series Cross-Validation
    Time-Series Cross-Validation
    Time-Series Cross-Validation Module
    Personal Website
    Personal Website
    Another personal website that I started in javascript
    Twitter Thread to LinkedIn Carousel
    Twitter Thread to LinkedIn Carousel
    Convert Twitter thread into LinkedIn carousel
    Unofficial CNN Fear and Greed Index
    Unofficial CNN Fear and Greed Index
    Python CNN Fear and Greed Index wrapper
    Neistpoint Stock Management Database
    Neistpoint Stock Management Database
    Allow the clothing brand NeistPoint to manage their cloths stocks
    Household Bills
    Household Bills
    Tracks bills between me and my brother when we lived together
    Job Analysis
    Job Analysis
    Extracts statistics from my old 9-5 job
    Minion Recipes Program
    Minion Recipes Program
    Tracks favourite recipes of my mom
    London Visits
    London Visits
    K-means algorithm to decide what to visit in London based on days
    Sort Movies
    Sort Movies
    Sort movies according to their IMDB rating
    Similar Stocks
    Similar Stocks
    Similar stocks based on their description through NLP models
    - - + + \ No newline at end of file diff --git a/resume/articles/index.html b/resume/articles/index.html index 9b202b60f8..274289bd1d 100644 --- a/resume/articles/index.html +++ b/resume/articles/index.html @@ -10,13 +10,13 @@ - - + +

    Articles

    2019, 18th European Control Conference (ECC)

    Energy savings from an Eco-Cooperative Adaptive Cruise Control: a BEV platoon investigation

    Learn more
    2021, 20th IEEE International Conference on Machine Learning and Applications (ICMLA)

    Step Detection using SVM on NURVV Trackers

    Learn more
    2021, XXV Portuguese Statistical Society (SPE)

    Forecasting models for time-series: a comparative study between classical methodologies and Deep Learning

    Learn more
    - - + + \ No newline at end of file diff --git a/resume/courses/index.html b/resume/courses/index.html index 05e176725d..ca1755bc86 100644 --- a/resume/courses/index.html +++ b/resume/courses/index.html @@ -10,13 +10,13 @@ - - + +

    Courses

    2022 August, Mountain Goat

    Scrum Master

    Certificate here
    2022 July, FINOS

    Speaker: Open Source in Finance Forum London 2022

    Certificate here
    2021 June, University of Colorado

    Kinematics: Describing the Motions of Spacecraft

    Certificate here
    2020 May, University of Toronto

    Self-Driving Cars Specialization

    Certificate here
    2020 May, University of Toronto

    Motion Planning for Self-Driving Cars

    Certificate here
    2020 May, University of Toronto

    Visual Perception for Self-Driving Cars

    Certificate here
    2020 April, University of Toronto

    State Estimation and Localization for Self-Driving Cars

    Certificate here
    2020 April, University of Toronto

    Introduction to Self-Driving Cars

    Certificate here
    2020 January, Stanford

    Machine Learning

    Certificate here
    - - + + \ No newline at end of file diff --git a/resume/education/index.html b/resume/education/index.html index d2b8187f7a..52d3cebf89 100644 --- a/resume/education/index.html +++ b/resume/education/index.html @@ -10,13 +10,13 @@ - - + +

    Education

    October 2017 - October 2018
    Imperial College London, United Kingdom 🇬🇧

    MSc. in Control Systems, Distinction

    - Mathematics for Signals and Systems, System Identification, Optimisation, Predictive Control, Estimation and Fault Detection, Pattern Recognition and Machine Learning for Computer Vision.

    - The overall examination mark was 75.4 / 100.

    - Achieved 83.4 / 100 on thesis: "Energy savings from an Ecological Cooperative Adaptive Cruise Control: a Battery Electric Vehicle platoon investigation".

    Learn more
    February 2017 - July 2017
    Delft University of Technology, The Netherlands 🇳🇱

    Student Exchange Program

    - Adaptive and Predictive Control, Modelling and Control of Hybrid Systems, Knowledge Based Control Systems, Networked and Distributed Control Systems, Integration Project Systems and Control and Space Robotics.

    - Finished with 7.6 out of 10.

    Learn more
    September 2013 - January 2017
    Faculty of Sciences and Technology, New University of Lisbon, Portugal 🇵🇹

    BSc. in Electrical and Computer Engineering, Top 1

    - Mathematics, Physics, Energy, Telecommunication, Digital Systems, Electronics, Robotics and Control Systems.

    - Finished the degree with 17.4 out of 20 being top 1 out of 96 students.

    Learn more
    - - + + \ No newline at end of file diff --git a/resume/experience/index.html b/resume/experience/index.html index 595cd149fc..952fbf28b7 100644 --- a/resume/experience/index.html +++ b/resume/experience/index.html @@ -10,13 +10,13 @@ - - + +

    Experience

    September 2021 - Present

    Co-founder & CEO @ OpenBB

    - Raised $ 8.5M in funding from an open source project I started in my spare time.

    - Built a team of over 20 people from scratch in less than 1 year, including: engineering, product, marketing, design and finance departments.

    March 2020 - October 2021

    Embedded Firmware Engineer | Sensor Fusion Engineer @ NURVV

    - The job required proficiency with C and C++ programming language and Python scripting.

    - Improved the time-to-first-fix of the GNSS receiver.

    - Re-designed the concept of altitude estimation using Kalman Filter.

    - Added a GPS filtering algorithm for outliers, including an approach to pick a valid start point.

    - Developed a new method of calibrating insoles to increase their life span and accuracy.

    - Created and cleaned Nurvv running dataset which allowed to implement a new footstrike detection and INS algorithm to improve distance covered and speed reported to users.

    - Developed a python data analyzer that processes the data from a running session and produces a html report, which allows us to assess the state of the product, and helps us in development to make sure the product is behaving as expected.

    - Developed a python sensor analyzer that allows to analyze the raw samples seen by the trackers over a running session, to understand - at a low level - if something unexpected is happening.

    - Started the development of a python CLI, similar to the iOS and Android apps, to be used by the firmware team to communicate with the trackers.

    November 2018 - February 2020

    Software Design Engineer @ U-blox

    - Designing and maintaining the internal and external customer-facing features and other higher-level software features

    - Taking part in the whole embedded software development life cycle, in order to release state of the art GNSS receivers.

    - Proficiency in programming and scripting languages (C, C++, MATLAB and Perl).

    - Knowledge in software testing, test automation and continuous integration concepts.

    - Project tracking and collaboration (e.g. Jira)

    - Experience with integrated development environments (e.g. Visual Studio Code), revision control systems (e.g. Git) and Linux computing.

    January 2016 - June 2016

    Teacher Assistant @ Faculty of Sciences and Technology, New University of Lisbon

    - Help 75 students to understand the theory of the Signal Theory course, and guide them throughout their MATLAB assignments.

    - - + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 6a47bcce60..3a6d5fe158 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://didierlopes.com/404weekly0.5https://didierlopes.com/blogweekly0.5https://didierlopes.com/blog/5-steps-i-used-to-change-my-job-title-in-less-than-1-yearweekly0.5https://didierlopes.com/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-dataweekly0.5https://didierlopes.com/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesisweekly0.5https://didierlopes.com/blog/archiveweekly0.5https://didierlopes.com/blog/become-an-openbb-championweekly0.5https://didierlopes.com/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-releasedweekly0.5https://didierlopes.com/blog/building-the-worlds-investment-research-infrastructureweekly0.5https://didierlopes.com/blog/customizable-meme-filterweekly0.5https://didierlopes.com/blog/employees-are-leaving-be-proactive-about-employee-feedbackweekly0.5https://didierlopes.com/blog/financial-chat-bots-are-underrated-and-heres-whyweekly0.5https://didierlopes.com/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-playersweekly0.5https://didierlopes.com/blog/free-investment-research-ecosystem-to-consistently-beat-the-marketweekly0.5https://didierlopes.com/blog/from-open-source-to-open-startupweekly0.5https://didierlopes.com/blog/fully-free-financial-chatbotweekly0.5https://didierlopes.com/blog/gamestonk-terminal-cant-stop-won-t-stopweekly0.5https://didierlopes.com/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminalweekly0.5https://didierlopes.com/blog/gamestonk-terminal-ux-featuresweekly0.5https://didierlopes.com/blog/goodbye-openbb-sdk-hello-openbb-platformweekly0.5https://didierlopes.com/blog/handing-your-twitter-account-to-your-most-avid-community-memberweekly0.5https://didierlopes.com/blog/household-bills-programweekly0.5https://didierlopes.com/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-fasterweekly0.5https://didierlopes.com/blog/how-i-became-ceo-of-openbbweekly0.5https://didierlopes.com/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveawaysweekly0.5https://didierlopes.com/blog/how-i-created-the-best-discord-meme-botweekly0.5https://didierlopes.com/blog/how-i-used-openai-api-to-improve-our-product-documentationweekly0.5https://didierlopes.com/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminalweekly0.5https://didierlopes.com/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmlaweekly0.5https://didierlopes.com/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-secondsweekly0.5https://didierlopes.com/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023weekly0.5https://didierlopes.com/blog/how-to-grow-your-open-source-community-from-scratch.mdweekly0.5https://didierlopes.com/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valleyweekly0.5https://didierlopes.com/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startupweekly0.5https://didierlopes.com/blog/how-to-learn-10x-faster-than-averageweekly0.5https://didierlopes.com/blog/how-to-use-openai-to-extract-insights-from-team-surveyweekly0.5https://didierlopes.com/blog/hybrid-work-sucks-its-worse-than-remote-and-officeweekly0.5https://didierlopes.com/blog/k-means-clustering-to-visit-a-new-cityweekly0.5https://didierlopes.com/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widgetweekly0.5https://didierlopes.com/blog/leaving-london-to-live-in-san-franciscoweekly0.5https://didierlopes.com/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literallyweekly0.5https://didierlopes.com/blog/meet-the-most-advanced-investment-research-platformweekly0.5https://didierlopes.com/blog/minion-recipes-programweekly0.5https://didierlopes.com/blog/momentum-football-betsweekly0.5https://didierlopes.com/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminalweekly0.5https://didierlopes.com/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cardsweekly0.5https://didierlopes.com/blog/neistpoint-projectweekly0.5https://didierlopes.com/blog/openbb-2-year-anniversaryweekly0.5https://didierlopes.com/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-familyweekly0.5https://didierlopes.com/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-dataweekly0.5https://didierlopes.com/blog/ranking-99-mind-f-ck-moviesweekly0.5https://didierlopes.com/blog/remote-flexible-work-salaryweekly0.5https://didierlopes.com/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwigweekly0.5https://didierlopes.com/blog/sector-and-industry-analysis-gamestonk-terminalweekly0.5https://didierlopes.com/blog/stop-doing-your-cv-in-word-or-latexweekly0.5https://didierlopes.com/blog/streamline-your-openbb-terminal-experience-with-openbb-hubweekly0.5https://didierlopes.com/blog/sweepstake-world-cup-2022-for-your-startup-teamweekly0.5https://didierlopes.com/blog/tagsweekly0.5https://didierlopes.com/blog/tags/a-playersweekly0.5https://didierlopes.com/blog/tags/academiaweekly0.5https://didierlopes.com/blog/tags/achievementsweekly0.5https://didierlopes.com/blog/tags/agentsweekly0.5https://didierlopes.com/blog/tags/aiweekly0.5https://didierlopes.com/blog/tags/airtableweekly0.5https://didierlopes.com/blog/tags/algorithmweekly0.5https://didierlopes.com/blog/tags/anniversaryweekly0.5https://didierlopes.com/blog/tags/ap-isweekly0.5https://didierlopes.com/blog/tags/apiweekly0.5https://didierlopes.com/blog/tags/api-key-managementweekly0.5https://didierlopes.com/blog/tags/automationweekly0.5https://didierlopes.com/blog/tags/bcg-matrixweekly0.5https://didierlopes.com/blog/tags/beautiful-soupweekly0.5https://didierlopes.com/blog/tags/bettingweekly0.5https://didierlopes.com/blog/tags/blockchainweekly0.5https://didierlopes.com/blog/tags/botweekly0.5https://didierlopes.com/blog/tags/brand-awarenessweekly0.5https://didierlopes.com/blog/tags/cweekly0.5https://didierlopes.com/blog/tags/card-memorisationweekly0.5https://didierlopes.com/blog/tags/careerweekly0.5https://didierlopes.com/blog/tags/career-adviceweekly0.5https://didierlopes.com/blog/tags/carouselweekly0.5https://didierlopes.com/blog/tags/chat-gptweekly0.5https://didierlopes.com/blog/tags/chatbotsweekly0.5https://didierlopes.com/blog/tags/clothing-brandweekly0.5https://didierlopes.com/blog/tags/clusteringweekly0.5https://didierlopes.com/blog/tags/communityweekly0.5https://didierlopes.com/blog/tags/community-buildingweekly0.5https://didierlopes.com/blog/tags/competitive-advantageweekly0.5https://didierlopes.com/blog/tags/content-creationweekly0.5https://didierlopes.com/blog/tags/coreweekly0.5https://didierlopes.com/blog/tags/cross-validationweekly0.5https://didierlopes.com/blog/tags/cryptoweekly0.5https://didierlopes.com/blog/tags/cvweekly0.5https://didierlopes.com/blog/tags/darkpoolweekly0.5https://didierlopes.com/blog/tags/data-accessweekly0.5https://didierlopes.com/blog/tags/data-analysisweekly0.5https://didierlopes.com/blog/tags/data-customizationweekly0.5https://didierlopes.com/blog/tags/data-licensingweekly0.5https://didierlopes.com/blog/tags/data-scienceweekly0.5https://didierlopes.com/blog/tags/decentralizationweekly0.5https://didierlopes.com/blog/tags/deep-learningweekly0.5https://didierlopes.com/blog/tags/developerweekly0.5https://didierlopes.com/blog/tags/discordweekly0.5https://didierlopes.com/blog/tags/dockerweekly0.5https://didierlopes.com/blog/tags/documentationweekly0.5https://didierlopes.com/blog/tags/due-diligenceweekly0.5https://didierlopes.com/blog/tags/economyweekly0.5https://didierlopes.com/blog/tags/educationweekly0.5https://didierlopes.com/blog/tags/efficiencyweekly0.5https://didierlopes.com/blog/tags/employee-compensationweekly0.5https://didierlopes.com/blog/tags/employee-engagementweekly0.5https://didierlopes.com/blog/tags/equityweekly0.5https://didierlopes.com/blog/tags/equity-top-upsweekly0.5https://didierlopes.com/blog/tags/extensionsweekly0.5https://didierlopes.com/blog/tags/face-recognitionweekly0.5https://didierlopes.com/blog/tags/feedbackweekly0.5https://didierlopes.com/blog/tags/financeweekly0.5https://didierlopes.com/blog/tags/finance-databaseweekly0.5https://didierlopes.com/blog/tags/financial-chatbotweekly0.5https://didierlopes.com/blog/tags/financial-dataweekly0.5https://didierlopes.com/blog/tags/financial-worldweekly0.5https://didierlopes.com/blog/tags/flexible-hoursweekly0.5https://didierlopes.com/blog/tags/footballweekly0.5https://didierlopes.com/blog/tags/founderweekly0.5https://didierlopes.com/blog/tags/freeweekly0.5https://didierlopes.com/blog/tags/futureweekly0.5https://didierlopes.com/blog/tags/gamestonk-terminalweekly0.5https://didierlopes.com/blog/tags/ge-mc-kinsey-matrixweekly0.5https://didierlopes.com/blog/tags/git-hubweekly0.5https://didierlopes.com/blog/tags/giveawaysweekly0.5https://didierlopes.com/blog/tags/gpsweekly0.5https://didierlopes.com/blog/tags/growthweekly0.5https://didierlopes.com/blog/tags/guiweekly0.5https://didierlopes.com/blog/tags/hard-workweekly0.5https://didierlopes.com/blog/tags/hiringweekly0.5https://didierlopes.com/blog/tags/hugo-websiteweekly0.5https://didierlopes.com/blog/tags/hybrid-workweekly0.5https://didierlopes.com/blog/tags/i-osweekly0.5https://didierlopes.com/blog/tags/icmlaweekly0.5https://didierlopes.com/blog/tags/im-db-pyweekly0.5https://didierlopes.com/blog/tags/image-processingweekly0.5https://didierlopes.com/blog/tags/industry-analysisweekly0.5https://didierlopes.com/blog/tags/infrastructureweekly0.5https://didierlopes.com/blog/tags/insightsweekly0.5https://didierlopes.com/blog/tags/interactive-chartsweekly0.5https://didierlopes.com/blog/tags/interactive-tablesweekly0.5https://didierlopes.com/blog/tags/investmentweekly0.5https://didierlopes.com/blog/tags/investment-researchweekly0.5https://didierlopes.com/blog/tags/javaweekly0.5https://didierlopes.com/blog/tags/job-changeweekly0.5https://didierlopes.com/blog/tags/job-huntingweekly0.5https://didierlopes.com/blog/tags/jupyter-labweekly0.5https://didierlopes.com/blog/tags/k-meansweekly0.5https://didierlopes.com/blog/tags/learningweekly0.5https://didierlopes.com/blog/tags/linked-inweekly0.5https://didierlopes.com/blog/tags/ll-msweekly0.5https://didierlopes.com/blog/tags/londonweekly0.5https://didierlopes.com/blog/tags/machine-learningweekly0.5https://didierlopes.com/blog/tags/managementweekly0.5https://didierlopes.com/blog/tags/market-attractivenessweekly0.5https://didierlopes.com/blog/tags/marketingweekly0.5https://didierlopes.com/blog/tags/meme-botweekly0.5https://didierlopes.com/blog/tags/meme-filterweekly0.5https://didierlopes.com/blog/tags/memory-palaceweekly0.5https://didierlopes.com/blog/tags/memory-trainingweekly0.5https://didierlopes.com/blog/tags/metricsweekly0.5https://didierlopes.com/blog/tags/mlweekly0.5https://didierlopes.com/blog/tags/momentumweekly0.5https://didierlopes.com/blog/tags/monetizationweekly0.5https://didierlopes.com/blog/tags/moviesweekly0.5https://didierlopes.com/blog/tags/neist-pointweekly0.5https://didierlopes.com/blog/tags/neural-networksweekly0.5https://didierlopes.com/blog/tags/nftweekly0.5https://didierlopes.com/blog/tags/nurvv-runweekly0.5https://didierlopes.com/blog/tags/office-workweekly0.5https://didierlopes.com/blog/tags/open-aiweekly0.5https://didierlopes.com/blog/tags/open-bbweekly0.5https://didierlopes.com/blog/tags/open-bb-botweekly0.5https://didierlopes.com/blog/tags/open-bb-championweekly0.5https://didierlopes.com/blog/tags/open-bb-hubweekly0.5https://didierlopes.com/blog/tags/open-bb-sdkweekly0.5https://didierlopes.com/blog/tags/open-bb-terminalweekly0.5https://didierlopes.com/blog/tags/open-bb-terminal-2-0weekly0.5https://didierlopes.com/blog/tags/open-sourceweekly0.5https://didierlopes.com/blog/tags/open-startupweekly0.5https://didierlopes.com/blog/tags/openbbweekly0.5https://didierlopes.com/blog/tags/optionsweekly0.5https://didierlopes.com/blog/tags/options-fam-botweekly0.5https://didierlopes.com/blog/tags/packageweekly0.5https://didierlopes.com/blog/tags/pao-systemweekly0.5https://didierlopes.com/blog/tags/personalizationweekly0.5https://didierlopes.com/blog/tags/ph-d-thesisweekly0.5https://didierlopes.com/blog/tags/platformweekly0.5https://didierlopes.com/blog/tags/productweekly0.5https://didierlopes.com/blog/tags/product-documentationweekly0.5https://didierlopes.com/blog/tags/productivityweekly0.5https://didierlopes.com/blog/tags/programmingweekly0.5https://didierlopes.com/blog/tags/project-managementweekly0.5https://didierlopes.com/blog/tags/publishingweekly0.5https://didierlopes.com/blog/tags/pypiweekly0.5https://didierlopes.com/blog/tags/pythonweekly0.5https://didierlopes.com/blog/tags/recipesweekly0.5https://didierlopes.com/blog/tags/redditweekly0.5https://didierlopes.com/blog/tags/relocationweekly0.5https://didierlopes.com/blog/tags/remote-workweekly0.5https://didierlopes.com/blog/tags/researchweekly0.5https://didierlopes.com/blog/tags/roadmapweekly0.5https://didierlopes.com/blog/tags/routinesweekly0.5https://didierlopes.com/blog/tags/san-franciscoweekly0.5https://didierlopes.com/blog/tags/script-managementweekly0.5https://didierlopes.com/blog/tags/scriptableweekly0.5https://didierlopes.com/blog/tags/sdkweekly0.5https://didierlopes.com/blog/tags/sector-analysisweekly0.5https://didierlopes.com/blog/tags/seed-stageweekly0.5https://didierlopes.com/blog/tags/self-improvementweekly0.5https://didierlopes.com/blog/tags/self-learningweekly0.5https://didierlopes.com/blog/tags/sensor-fusion-engineerweekly0.5https://didierlopes.com/blog/tags/side-projectweekly0.5https://didierlopes.com/blog/tags/silicon-valleyweekly0.5https://didierlopes.com/blog/tags/skillsweekly0.5https://didierlopes.com/blog/tags/slackweekly0.5https://didierlopes.com/blog/tags/slack-botweekly0.5https://didierlopes.com/blog/tags/smart-contractsweekly0.5https://didierlopes.com/blog/tags/software-developmentweekly0.5https://didierlopes.com/blog/tags/software-engineeringweekly0.5https://didierlopes.com/blog/tags/sorting-algorithmweekly0.5https://didierlopes.com/blog/tags/startupweekly0.5https://didierlopes.com/blog/tags/startup-teamweekly0.5https://didierlopes.com/blog/tags/startupsweekly0.5https://didierlopes.com/blog/tags/stock-managementweekly0.5https://didierlopes.com/blog/tags/stock-marketweekly0.5https://didierlopes.com/blog/tags/stocksweekly0.5https://didierlopes.com/blog/tags/successweekly0.5https://didierlopes.com/blog/tags/sustainabilityweekly0.5https://didierlopes.com/blog/tags/sweepstakeweekly0.5https://didierlopes.com/blog/tags/target-market-analysisweekly0.5https://didierlopes.com/blog/tags/tattooweekly0.5https://didierlopes.com/blog/tags/team-buildingweekly0.5https://didierlopes.com/blog/tags/team-happinessweekly0.5https://didierlopes.com/blog/tags/team-surveyweekly0.5https://didierlopes.com/blog/tags/teamworkweekly0.5https://didierlopes.com/blog/tags/tech-startupsweekly0.5https://didierlopes.com/blog/tags/telegramweekly0.5https://didierlopes.com/blog/tags/terminalweekly0.5https://didierlopes.com/blog/tags/thrillersweekly0.5https://didierlopes.com/blog/tags/time-seriesweekly0.5https://didierlopes.com/blog/tags/time-series-forecastingweekly0.5https://didierlopes.com/blog/tags/tradingweekly0.5https://didierlopes.com/blog/tags/transparencyweekly0.5https://didierlopes.com/blog/tags/travelweekly0.5https://didierlopes.com/blog/tags/tweepyweekly0.5https://didierlopes.com/blog/tags/twitterweekly0.5https://didierlopes.com/blog/tags/twitter-apiweekly0.5https://didierlopes.com/blog/tags/ux-uiweekly0.5https://didierlopes.com/blog/tags/visa-processweekly0.5https://didierlopes.com/blog/tags/web-3weekly0.5https://didierlopes.com/blog/tags/web-scrapingweekly0.5https://didierlopes.com/blog/tags/work-cultureweekly0.5https://didierlopes.com/blog/tags/work-life-balanceweekly0.5https://didierlopes.com/blog/tags/world-cup-2022weekly0.5https://didierlopes.com/blog/tags/writingweekly0.5https://didierlopes.com/blog/tags/yfinance-apiweekly0.5https://didierlopes.com/blog/target-market-analysis-with-the-help-of-llmsweekly0.5https://didierlopes.com/blog/the-future-of-finance-with-open-source-and-aiweekly0.5https://didierlopes.com/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-researchweekly0.5https://didierlopes.com/blog/the-start-of-my-machine-learning-journeyweekly0.5https://didierlopes.com/blog/time-series-crossvalidation-for-nnweekly0.5https://didierlopes.com/blog/web3-symbols-and-communityweekly0.5https://didierlopes.com/blog/why-the-need-for-an-open-source-investment-research-platformweekly0.5https://didierlopes.com/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdkweekly0.5https://didierlopes.com/blog/work-life-balance-is-bullsh-tweekly0.5https://didierlopes.com/blog/writing-documentation-as-a-founder-is-underratedweekly0.5https://didierlopes.com/markdown-pageweekly0.5https://didierlopes.com/weekly0.5https://didierlopes.com/books/already-readweekly0.5https://didierlopes.com/books/to-readweekly0.5https://didierlopes.com/media/news-mentionsweekly0.5https://didierlopes.com/media/podcastsweekly0.5https://didierlopes.com/media/videos/interviewsweekly0.5https://didierlopes.com/media/videos/on-stageweekly0.5https://didierlopes.com/media/videos/openbb-championsweekly0.5https://didierlopes.com/media/videos/product-videosweekly0.5https://didierlopes.com/media/videos/webinars-presentationsweekly0.5https://didierlopes.com/projectsweekly0.5https://didierlopes.com/resume/articlesweekly0.5https://didierlopes.com/resume/coursesweekly0.5https://didierlopes.com/resume/educationweekly0.5https://didierlopes.com/resume/experienceweekly0.5 \ No newline at end of file +https://didierlopes.com/404weekly0.5https://didierlopes.com/blogweekly0.5https://didierlopes.com/blog/5-steps-i-used-to-change-my-job-title-in-less-than-1-yearweekly0.5https://didierlopes.com/blog/a-500k-bet-to-build-the-best-platform-to-do-ai-using-financial-dataweekly0.5https://didierlopes.com/blog/an-unusual-journey-learning-about-nns-for-a-phd-thesisweekly0.5https://didierlopes.com/blog/archiveweekly0.5https://didierlopes.com/blog/become-an-openbb-championweekly0.5https://didierlopes.com/blog/bloomberg-terminal-is-no-more-openbb-terminal-2-0-has-just-been-releasedweekly0.5https://didierlopes.com/blog/building-the-worlds-investment-research-infrastructureweekly0.5https://didierlopes.com/blog/customizable-meme-filterweekly0.5https://didierlopes.com/blog/employees-are-leaving-be-proactive-about-employee-feedbackweekly0.5https://didierlopes.com/blog/financial-chat-bots-are-underrated-and-heres-whyweekly0.5https://didierlopes.com/blog/firing-sucks-how-to-avoid-doing-so-by-hiring-a-playersweekly0.5https://didierlopes.com/blog/free-investment-research-ecosystem-to-consistently-beat-the-marketweekly0.5https://didierlopes.com/blog/from-open-source-to-open-startupweekly0.5https://didierlopes.com/blog/fully-free-financial-chatbotweekly0.5https://didierlopes.com/blog/gamestonk-terminal-cant-stop-won-t-stopweekly0.5https://didierlopes.com/blog/gamestonk-terminal-the-next-best-thing-after-bloomberg-terminalweekly0.5https://didierlopes.com/blog/gamestonk-terminal-ux-featuresweekly0.5https://didierlopes.com/blog/goodbye-openbb-sdk-hello-openbb-platformweekly0.5https://didierlopes.com/blog/handing-your-twitter-account-to-your-most-avid-community-memberweekly0.5https://didierlopes.com/blog/household-bills-programweekly0.5https://didierlopes.com/blog/how-chatgpt-allowed-me-to-leverage-twitter-api-10x-fasterweekly0.5https://didierlopes.com/blog/how-i-became-ceo-of-openbbweekly0.5https://didierlopes.com/blog/how-i-created-a-bot-in-python-to-participate-in-nft-giveawaysweekly0.5https://didierlopes.com/blog/how-i-created-the-best-discord-meme-botweekly0.5https://didierlopes.com/blog/how-i-used-openai-api-to-improve-our-product-documentationweekly0.5https://didierlopes.com/blog/how-i-would-do-due-diligence-on-amt-using-openbb-terminalweekly0.5https://didierlopes.com/blog/how-i-wrote-a-machine-learning-paper-in-1-week-that-got-accepted-to-icmlaweekly0.5https://didierlopes.com/blog/how-to-convert-a-twitter-thread-into-a-linkedin-carousel-in-secondsweekly0.5https://didierlopes.com/blog/how-to-get-hired-by-an-exciting-tech-startup-in-2023weekly0.5https://didierlopes.com/blog/how-to-grow-your-open-source-community-from-scratch.mdweekly0.5https://didierlopes.com/blog/how-to-handle-equity-at-a-seed-stage-startup-from-silicon-valleyweekly0.5https://didierlopes.com/blog/how-to-handle-equity-top-ups-at-a-seed-stage-startupweekly0.5https://didierlopes.com/blog/how-to-learn-10x-faster-than-averageweekly0.5https://didierlopes.com/blog/how-to-use-openai-to-extract-insights-from-team-surveyweekly0.5https://didierlopes.com/blog/hybrid-work-sucks-its-worse-than-remote-and-officeweekly0.5https://didierlopes.com/blog/k-means-clustering-to-visit-a-new-cityweekly0.5https://didierlopes.com/blog/keep-track-of-your-startup-metrics-using-a-custom-ios-widgetweekly0.5https://didierlopes.com/blog/leaving-london-to-live-in-san-franciscoweekly0.5https://didierlopes.com/blog/looking-for-a-new-tattoo-openbb-has-you-covered-literallyweekly0.5https://didierlopes.com/blog/meet-the-most-advanced-investment-research-platformweekly0.5https://didierlopes.com/blog/minion-recipes-programweekly0.5https://didierlopes.com/blog/momentum-football-betsweekly0.5https://didierlopes.com/blog/move-over-bloomberg-terminal-here-comes-gamestonk-terminalweekly0.5https://didierlopes.com/blog/my-journey-of-memorising-a-deck-of-52-shuffled-cardsweekly0.5https://didierlopes.com/blog/neistpoint-projectweekly0.5https://didierlopes.com/blog/openbb-2-year-anniversaryweekly0.5https://didierlopes.com/blog/openbb-bot-our-new-addition-to-the-openbb-open-source-familyweekly0.5https://didierlopes.com/blog/openbb-terminal-3-0-a-new-interactive-way-to-analyze-dataweekly0.5https://didierlopes.com/blog/ranking-99-mind-f-ck-moviesweekly0.5https://didierlopes.com/blog/remote-flexible-work-salaryweekly0.5https://didierlopes.com/blog/revolutionizing-ai-at-openbb-with-new-leader-michael-struwigweekly0.5https://didierlopes.com/blog/sector-and-industry-analysis-gamestonk-terminalweekly0.5https://didierlopes.com/blog/stop-doing-your-cv-in-word-or-latexweekly0.5https://didierlopes.com/blog/streamline-your-openbb-terminal-experience-with-openbb-hubweekly0.5https://didierlopes.com/blog/sweepstake-world-cup-2022-for-your-startup-teamweekly0.5https://didierlopes.com/blog/tagsweekly0.5https://didierlopes.com/blog/tags/a-playersweekly0.5https://didierlopes.com/blog/tags/academiaweekly0.5https://didierlopes.com/blog/tags/achievementsweekly0.5https://didierlopes.com/blog/tags/agentsweekly0.5https://didierlopes.com/blog/tags/aiweekly0.5https://didierlopes.com/blog/tags/airtableweekly0.5https://didierlopes.com/blog/tags/algorithmweekly0.5https://didierlopes.com/blog/tags/anniversaryweekly0.5https://didierlopes.com/blog/tags/ap-isweekly0.5https://didierlopes.com/blog/tags/apiweekly0.5https://didierlopes.com/blog/tags/api-key-managementweekly0.5https://didierlopes.com/blog/tags/automationweekly0.5https://didierlopes.com/blog/tags/bcg-matrixweekly0.5https://didierlopes.com/blog/tags/beautiful-soupweekly0.5https://didierlopes.com/blog/tags/bettingweekly0.5https://didierlopes.com/blog/tags/blockchainweekly0.5https://didierlopes.com/blog/tags/botweekly0.5https://didierlopes.com/blog/tags/brand-awarenessweekly0.5https://didierlopes.com/blog/tags/cweekly0.5https://didierlopes.com/blog/tags/card-memorisationweekly0.5https://didierlopes.com/blog/tags/careerweekly0.5https://didierlopes.com/blog/tags/career-adviceweekly0.5https://didierlopes.com/blog/tags/carouselweekly0.5https://didierlopes.com/blog/tags/chat-gptweekly0.5https://didierlopes.com/blog/tags/chatbotsweekly0.5https://didierlopes.com/blog/tags/clothing-brandweekly0.5https://didierlopes.com/blog/tags/clusteringweekly0.5https://didierlopes.com/blog/tags/communityweekly0.5https://didierlopes.com/blog/tags/community-buildingweekly0.5https://didierlopes.com/blog/tags/competitive-advantageweekly0.5https://didierlopes.com/blog/tags/content-creationweekly0.5https://didierlopes.com/blog/tags/coreweekly0.5https://didierlopes.com/blog/tags/cross-validationweekly0.5https://didierlopes.com/blog/tags/cryptoweekly0.5https://didierlopes.com/blog/tags/cvweekly0.5https://didierlopes.com/blog/tags/darkpoolweekly0.5https://didierlopes.com/blog/tags/data-accessweekly0.5https://didierlopes.com/blog/tags/data-analysisweekly0.5https://didierlopes.com/blog/tags/data-customizationweekly0.5https://didierlopes.com/blog/tags/data-licensingweekly0.5https://didierlopes.com/blog/tags/data-scienceweekly0.5https://didierlopes.com/blog/tags/decentralizationweekly0.5https://didierlopes.com/blog/tags/deep-learningweekly0.5https://didierlopes.com/blog/tags/developerweekly0.5https://didierlopes.com/blog/tags/discordweekly0.5https://didierlopes.com/blog/tags/dockerweekly0.5https://didierlopes.com/blog/tags/documentationweekly0.5https://didierlopes.com/blog/tags/due-diligenceweekly0.5https://didierlopes.com/blog/tags/economyweekly0.5https://didierlopes.com/blog/tags/educationweekly0.5https://didierlopes.com/blog/tags/efficiencyweekly0.5https://didierlopes.com/blog/tags/employee-compensationweekly0.5https://didierlopes.com/blog/tags/employee-engagementweekly0.5https://didierlopes.com/blog/tags/equityweekly0.5https://didierlopes.com/blog/tags/equity-top-upsweekly0.5https://didierlopes.com/blog/tags/extensionsweekly0.5https://didierlopes.com/blog/tags/face-recognitionweekly0.5https://didierlopes.com/blog/tags/feedbackweekly0.5https://didierlopes.com/blog/tags/financeweekly0.5https://didierlopes.com/blog/tags/finance-databaseweekly0.5https://didierlopes.com/blog/tags/financial-chatbotweekly0.5https://didierlopes.com/blog/tags/financial-dataweekly0.5https://didierlopes.com/blog/tags/financial-worldweekly0.5https://didierlopes.com/blog/tags/flexible-hoursweekly0.5https://didierlopes.com/blog/tags/footballweekly0.5https://didierlopes.com/blog/tags/founderweekly0.5https://didierlopes.com/blog/tags/freeweekly0.5https://didierlopes.com/blog/tags/futureweekly0.5https://didierlopes.com/blog/tags/gamestonk-terminalweekly0.5https://didierlopes.com/blog/tags/ge-mc-kinsey-matrixweekly0.5https://didierlopes.com/blog/tags/git-hubweekly0.5https://didierlopes.com/blog/tags/giveawaysweekly0.5https://didierlopes.com/blog/tags/gpsweekly0.5https://didierlopes.com/blog/tags/growthweekly0.5https://didierlopes.com/blog/tags/guiweekly0.5https://didierlopes.com/blog/tags/hard-workweekly0.5https://didierlopes.com/blog/tags/hiringweekly0.5https://didierlopes.com/blog/tags/hugo-websiteweekly0.5https://didierlopes.com/blog/tags/hybrid-workweekly0.5https://didierlopes.com/blog/tags/i-osweekly0.5https://didierlopes.com/blog/tags/icmlaweekly0.5https://didierlopes.com/blog/tags/im-db-pyweekly0.5https://didierlopes.com/blog/tags/image-processingweekly0.5https://didierlopes.com/blog/tags/industry-analysisweekly0.5https://didierlopes.com/blog/tags/infrastructureweekly0.5https://didierlopes.com/blog/tags/insightsweekly0.5https://didierlopes.com/blog/tags/interactive-chartsweekly0.5https://didierlopes.com/blog/tags/interactive-tablesweekly0.5https://didierlopes.com/blog/tags/investmentweekly0.5https://didierlopes.com/blog/tags/investment-researchweekly0.5https://didierlopes.com/blog/tags/javaweekly0.5https://didierlopes.com/blog/tags/job-changeweekly0.5https://didierlopes.com/blog/tags/job-huntingweekly0.5https://didierlopes.com/blog/tags/jupyter-labweekly0.5https://didierlopes.com/blog/tags/k-meansweekly0.5https://didierlopes.com/blog/tags/langchainweekly0.5https://didierlopes.com/blog/tags/learningweekly0.5https://didierlopes.com/blog/tags/linked-inweekly0.5https://didierlopes.com/blog/tags/ll-msweekly0.5https://didierlopes.com/blog/tags/llamaindexweekly0.5https://didierlopes.com/blog/tags/londonweekly0.5https://didierlopes.com/blog/tags/machine-learningweekly0.5https://didierlopes.com/blog/tags/managementweekly0.5https://didierlopes.com/blog/tags/market-attractivenessweekly0.5https://didierlopes.com/blog/tags/marketingweekly0.5https://didierlopes.com/blog/tags/meme-botweekly0.5https://didierlopes.com/blog/tags/meme-filterweekly0.5https://didierlopes.com/blog/tags/memory-palaceweekly0.5https://didierlopes.com/blog/tags/memory-trainingweekly0.5https://didierlopes.com/blog/tags/metricsweekly0.5https://didierlopes.com/blog/tags/mindsdbweekly0.5https://didierlopes.com/blog/tags/mlweekly0.5https://didierlopes.com/blog/tags/momentumweekly0.5https://didierlopes.com/blog/tags/monetizationweekly0.5https://didierlopes.com/blog/tags/moviesweekly0.5https://didierlopes.com/blog/tags/neist-pointweekly0.5https://didierlopes.com/blog/tags/neural-networksweekly0.5https://didierlopes.com/blog/tags/nftweekly0.5https://didierlopes.com/blog/tags/nixtlaweekly0.5https://didierlopes.com/blog/tags/nurvv-runweekly0.5https://didierlopes.com/blog/tags/office-workweekly0.5https://didierlopes.com/blog/tags/open-aiweekly0.5https://didierlopes.com/blog/tags/open-bbweekly0.5https://didierlopes.com/blog/tags/open-bb-botweekly0.5https://didierlopes.com/blog/tags/open-bb-championweekly0.5https://didierlopes.com/blog/tags/open-bb-hubweekly0.5https://didierlopes.com/blog/tags/open-bb-sdkweekly0.5https://didierlopes.com/blog/tags/open-bb-terminalweekly0.5https://didierlopes.com/blog/tags/open-bb-terminal-2-0weekly0.5https://didierlopes.com/blog/tags/open-sourceweekly0.5https://didierlopes.com/blog/tags/open-startupweekly0.5https://didierlopes.com/blog/tags/openbbweekly0.5https://didierlopes.com/blog/tags/optionsweekly0.5https://didierlopes.com/blog/tags/options-fam-botweekly0.5https://didierlopes.com/blog/tags/packageweekly0.5https://didierlopes.com/blog/tags/pao-systemweekly0.5https://didierlopes.com/blog/tags/personalizationweekly0.5https://didierlopes.com/blog/tags/ph-d-thesisweekly0.5https://didierlopes.com/blog/tags/platformweekly0.5https://didierlopes.com/blog/tags/productweekly0.5https://didierlopes.com/blog/tags/product-documentationweekly0.5https://didierlopes.com/blog/tags/productivityweekly0.5https://didierlopes.com/blog/tags/programmingweekly0.5https://didierlopes.com/blog/tags/project-managementweekly0.5https://didierlopes.com/blog/tags/publishingweekly0.5https://didierlopes.com/blog/tags/pypiweekly0.5https://didierlopes.com/blog/tags/pythonweekly0.5https://didierlopes.com/blog/tags/recipesweekly0.5https://didierlopes.com/blog/tags/redditweekly0.5https://didierlopes.com/blog/tags/relocationweekly0.5https://didierlopes.com/blog/tags/remote-workweekly0.5https://didierlopes.com/blog/tags/researchweekly0.5https://didierlopes.com/blog/tags/roadmapweekly0.5https://didierlopes.com/blog/tags/routinesweekly0.5https://didierlopes.com/blog/tags/san-franciscoweekly0.5https://didierlopes.com/blog/tags/script-managementweekly0.5https://didierlopes.com/blog/tags/scriptableweekly0.5https://didierlopes.com/blog/tags/sdkweekly0.5https://didierlopes.com/blog/tags/sector-analysisweekly0.5https://didierlopes.com/blog/tags/seed-stageweekly0.5https://didierlopes.com/blog/tags/self-improvementweekly0.5https://didierlopes.com/blog/tags/self-learningweekly0.5https://didierlopes.com/blog/tags/sensor-fusion-engineerweekly0.5https://didierlopes.com/blog/tags/side-projectweekly0.5https://didierlopes.com/blog/tags/silicon-valleyweekly0.5https://didierlopes.com/blog/tags/skillsweekly0.5https://didierlopes.com/blog/tags/slackweekly0.5https://didierlopes.com/blog/tags/slack-botweekly0.5https://didierlopes.com/blog/tags/smart-contractsweekly0.5https://didierlopes.com/blog/tags/software-developmentweekly0.5https://didierlopes.com/blog/tags/software-engineeringweekly0.5https://didierlopes.com/blog/tags/sorting-algorithmweekly0.5https://didierlopes.com/blog/tags/startupweekly0.5https://didierlopes.com/blog/tags/startup-teamweekly0.5https://didierlopes.com/blog/tags/startupsweekly0.5https://didierlopes.com/blog/tags/stock-managementweekly0.5https://didierlopes.com/blog/tags/stock-marketweekly0.5https://didierlopes.com/blog/tags/stocksweekly0.5https://didierlopes.com/blog/tags/successweekly0.5https://didierlopes.com/blog/tags/sustainabilityweekly0.5https://didierlopes.com/blog/tags/sweepstakeweekly0.5https://didierlopes.com/blog/tags/target-market-analysisweekly0.5https://didierlopes.com/blog/tags/tattooweekly0.5https://didierlopes.com/blog/tags/team-buildingweekly0.5https://didierlopes.com/blog/tags/team-happinessweekly0.5https://didierlopes.com/blog/tags/team-surveyweekly0.5https://didierlopes.com/blog/tags/teamworkweekly0.5https://didierlopes.com/blog/tags/tech-startupsweekly0.5https://didierlopes.com/blog/tags/telegramweekly0.5https://didierlopes.com/blog/tags/terminalweekly0.5https://didierlopes.com/blog/tags/thrillersweekly0.5https://didierlopes.com/blog/tags/time-seriesweekly0.5https://didierlopes.com/blog/tags/time-series-forecastingweekly0.5https://didierlopes.com/blog/tags/tradingweekly0.5https://didierlopes.com/blog/tags/transparencyweekly0.5https://didierlopes.com/blog/tags/travelweekly0.5https://didierlopes.com/blog/tags/tweepyweekly0.5https://didierlopes.com/blog/tags/twitterweekly0.5https://didierlopes.com/blog/tags/twitter-apiweekly0.5https://didierlopes.com/blog/tags/ux-uiweekly0.5https://didierlopes.com/blog/tags/visa-processweekly0.5https://didierlopes.com/blog/tags/web-3weekly0.5https://didierlopes.com/blog/tags/web-scrapingweekly0.5https://didierlopes.com/blog/tags/work-cultureweekly0.5https://didierlopes.com/blog/tags/work-life-balanceweekly0.5https://didierlopes.com/blog/tags/world-cup-2022weekly0.5https://didierlopes.com/blog/tags/writingweekly0.5https://didierlopes.com/blog/tags/yfinance-apiweekly0.5https://didierlopes.com/blog/target-market-analysis-with-the-help-of-llmsweekly0.5https://didierlopes.com/blog/the-future-of-finance-with-open-source-and-aiweekly0.5https://didierlopes.com/blog/the-new-finai-tech-stackweekly0.5https://didierlopes.com/blog/the-role-of-ai-and-openbb-in-the-future-of-investment-researchweekly0.5https://didierlopes.com/blog/the-start-of-my-machine-learning-journeyweekly0.5https://didierlopes.com/blog/time-series-crossvalidation-for-nnweekly0.5https://didierlopes.com/blog/web3-symbols-and-communityweekly0.5https://didierlopes.com/blog/why-the-need-for-an-open-source-investment-research-platformweekly0.5https://didierlopes.com/blog/why-you-should-drop-yfinance-api-and-adopt-openbb-sdkweekly0.5https://didierlopes.com/blog/work-life-balance-is-bullsh-tweekly0.5https://didierlopes.com/blog/writing-documentation-as-a-founder-is-underratedweekly0.5https://didierlopes.com/markdown-pageweekly0.5https://didierlopes.com/weekly0.5https://didierlopes.com/books/already-readweekly0.5https://didierlopes.com/books/to-readweekly0.5https://didierlopes.com/media/news-mentionsweekly0.5https://didierlopes.com/media/podcastsweekly0.5https://didierlopes.com/media/videos/interviewsweekly0.5https://didierlopes.com/media/videos/on-stageweekly0.5https://didierlopes.com/media/videos/openbb-championsweekly0.5https://didierlopes.com/media/videos/product-videosweekly0.5https://didierlopes.com/media/videos/webinars-presentationsweekly0.5https://didierlopes.com/projectsweekly0.5https://didierlopes.com/resume/articlesweekly0.5https://didierlopes.com/resume/coursesweekly0.5https://didierlopes.com/resume/educationweekly0.5https://didierlopes.com/resume/experienceweekly0.5 \ No newline at end of file