Search This Blog

Monday, July 10, 2023

The Idea of #Decentralizing the #SocialMedia


Came across the below image while exploring the Threads app to see what the fuss was about and, it indicated something about the Open Social Media Protocol.


I was curios 🤔. 

Given that a platform's data is its lifeblood, sharing data across social media networks seemed like a crazy concept to me. 

And that too, Meta is advocating for it (while I expected them to do otherwise, lock the platform data to retain the users), made me to dig into it a bit more. 

What makes the concept noteworthy is the quote from Meta that is emphasised in the paragraph below. 

"We’re committed to giving you more control over your audience on Threads – our plan is to work with ActivityPub to provide you the option to stop using Threads and transfer your content to another service." Sweet. 

But why are they doing it or be so lenient regarding this feature ❓ 

It turns out that Meta does not want people to easily switch to other platforms, but rather drive more traffic to the threads platform from it's rivals. The majority of people are already using the Threads app anyway & knows how to retain them. 

So what is this protocol all about ❓ 

Open social networking protocols are a set of standards and protocols that aim to promote interoperability, data portability, and decentralization in social networking platforms. 

These protocols allow users to interact and share content across different social networks, giving them more control over their data and the ability to connect with a broader range of users. 

It is the Block Chain for Social Media.


 


Some examples of these protocols:

  • ActivityPub: ActivityPub is a decentralized protocol for social networking. It enables different social networking platforms to federate with each other, allowing users on different platforms to follow and interact with each other. Mastodon, Pleroma, and Pixelfed are examples of platforms that use the ActivityPub protocol.
  • Diaspora: The Diaspora protocol is used by the Diaspora social network. It is designed to provide users with control over their data and privacy. Users can host their own "pods" or join existing pods and connect with others across different pods.
  • Zot: Zot is a protocol used by the Hubzilla social networking platform. It allows for decentralization and federation, enabling users to connect and share content across different instances of Hubzilla.
  • OStatus: OStatus is a suite of open protocols that enable federated microblogging and social networking. It includes protocols like ActivityPub, WebSub, and Salmon. StatusNet and GNU social are examples of platforms that use OStatus.
  • Secure Scuttlebutt: Secure Scuttlebutt (SSB) is a peer-to-peer protocol for decentralized social networking. It uses a distributed append-only log to store and share messages among peers. Patchwork and Manyverse are SSB-based social networking applications.
It's worth noting that while these protocols provide the infrastructure for open and decentralized social networking, the adoption and implementation of these protocols vary among platforms and communities.

Some platforms may use a combination of these protocols or develop their own custom protocols to achieve their specific goals of openness and decentralization.
Social media might completely replace emails one day (already happened I guess). Looks like pretty sweet idea to me if it works.

Monday, June 19, 2023

Low Code Application Development in 2023

A few years ago, I was introduced to low-code application development (LCAD) with Oracle APEX and instantly liked the concept of coding less. The product stint did not last long because the product lacked key critical features at the time. I felt it was easier to code with the known frameworks than foray into a product with restrictions.

However, after spending some time preparing for the latest Oracle APEX certification last week, I was quite impressed with how the product evolved over time and how feature-rich it is now.

A couple of features that I absolutely liked: 

🔥 Workflow integration: This was a huge gap in the tool and now included and packed with features. 

🔥 PWA Push Notifications: Apps became more intuitive with this feature 

🔥 REST Data Source Improvements: REST based integrations and data synchronizations is a game changer. Build it once, and then let it breathe. 

🔥 PWA functionalities can now be accessed with the click of a button.

However, the caveat is that all of these benefits are tightly integrated with Oracle products, which isn’t what everyone needs. 

  • APEX is only compatible with Oracle databases 
  • Email client is limited to OCI Email delivery service 
  • Charts limited to Oracle JET Charts etc.
You can now easily create and deploy enterprise packaged software, data archival and query-enabled products, and on-premises/cloud-integrated products with significant cost and effort reductions with #Oracle APEX and #Kovaion's LCAD platforms. The use cases are endless 💡.

For #CIOs: break free from the technical debt by delivering solutions at an increased pace without compromising the user experience or security.

🎙 DM me for more details and to discuss about the options.

Thursday, April 14, 2022

Extract Table Data Using Python

This is a very simple example. But you will know the dynamics to alter for achieving the right results. 

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)
driver.maximize_window()
driver.get('https://www.w3schools.com/html/html_tables.asp')

# Make Python sleep for some time
sleep(2)

rows = len(driver.find_elements("xpath","/html/body/div[7]/div[1]/div[1]/div[3]/div/table/tbody/tr"))

# Obtain the number of columns in table
cols = len(driver.find_elements("xpath","/html/body/div[7]/div[1]/div[1]/div[3]/div/table/tbody/tr/td"))

# Printing the data of the table
for r in range(2, rows+1):
for p in range(1,4):
#obtaining the text from each column of the table
value = driver.find_element("xpath","/html/body/div[7]/div[1]/div[1]/div[3]/div/table/tbody/tr["+str(r)+"]/td["+str(p)+"]").text
print(value)



Friday, February 4, 2022

Execute Selenium in Jupyter Notebook - Headless Mode

In the previous example, when you run the script, you will be able to see the chrome browser getting activated and follows the command in the script. 

Headless mode runs the code without the need of the physical browser. It executes the same script behind the scenes, without opening the browser window at all. 

This makes automation much easier and efficient in a way. Speed and performance is amazing in this scenario. You can run multiple tests in parallel without the overhead of multiple browsers being open all through the execution time frame. 

Below is what how you can run the code from the previous post in the headless mode. 

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)

driver.maximize_window()
driver.get('https://google.com')
driver.find_element("name", "q").send_keys("Elon Musk")
driver.find_element("xpath","/html/body/div[1]/div[3]/form/div[1]/div[1]/div[4]/center/input[1]").send_keys(Keys.ENTER)
print(driver.find_element(By.XPATH,"/html/body/div[7]/div/div[11]/div[3]/div[2]/div/div/div[2]/div/div/div/div[1]/div/div/div/div/span[1]").text)
sleep(3)
driver.close()

Result will be the same, but no browsers are opened. 



Saturday, January 8, 2022

Execute Selenium in Jupyter Notebook

Installing and running selenium is so simple with Jupyter Notebook. Follow the below steps to create a sample program. Creating POCs will be superfast with this method. Steps to run Selenium with Python on Jupyter notebook below:

Install Selenium in Jupyter

!pip install selenium

If its successful, you will get the below message

Install Chrome Webdriver

Install from this link: https://chromedriver.chromium.org/

Make sure that you are downloading the version that matches with your chrome browser version. 

Run the sample program below

Intent of this code sample is to search for a person in Google and retreive the Wiki text displayed on the right side of the page. 

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()  
driver.get('https://google.com')
driver.find_element("name", "q").send_keys("Elon Musk")  
driver.find_element("xpath","/html/body/div[1]/div[3]/form/div[1]/div[1]/div[4]/center/input[1]").send_keys(Keys.ENTER) 
print(driver.find_element(By.XPATH,"/html/body/div[7]/div/div[11]/div[3]/div[2]/div/div/div[2]/div/div/div/div[1]/div/div/div/div/span[1]").text)

sleep(3)
driver.close()

Run the code and you will get the below result.