Try : Insurtech, Application Development

AgriTech(1)

Augmented Reality(20)

Clean Tech(8)

Customer Journey(17)

Design(44)

Solar Industry(8)

User Experience(67)

Edtech(10)

Events(34)

HR Tech(3)

Interviews(10)

Life@mantra(11)

Logistics(5)

Strategy(18)

Testing(9)

Android(48)

Backend(32)

Dev Ops(11)

Enterprise Solution(29)

Technology Modernization(8)

Frontend(29)

iOS(43)

Javascript(15)

AI in Insurance(38)

Insurtech(66)

Product Innovation(57)

Solutions(22)

E-health(12)

HealthTech(24)

mHealth(5)

Telehealth Care(4)

Telemedicine(5)

Artificial Intelligence(146)

Bitcoin(8)

Blockchain(19)

Cognitive Computing(7)

Computer Vision(8)

Data Science(21)

FinTech(51)

Banking(7)

Intelligent Automation(27)

Machine Learning(47)

Natural Language Processing(14)

expand Menu Filters

Optimizing Android Apps on Variable Network Speeds

Most of the apps today are developed and designed which can perform on all types of networks. While some of us are probably enjoying great connectivity courtesy of our carriers at our school/office/coffees shop wi-fi, there are still some people suffering from poor mobile connections, particularly in emerging markets. If you are developing an Android app you may already fetching information from internet. While doing so there is a chance that internet connection is not available on users handset, connection is slow or fast. Hence its always a good idea to create an app that can perform accordingly on all types of networks.

Facebook has made it known that their goal is to be able to reach and give access to as many markets as possible, and this includes those that still use 2G connections. In this post, we will share how this is possible by Network Connection Class

Network Connection Class allows you to check the quality of the internet connection of the current user, it is an android library. It is a simple code that will help you identify what kind of internet connection a user has on his/her device. Network Connection Class currently only measures the user’s downstream bandwidth. Latency is also an important factor, but in our tests, we’ve found that bandwidth is a good proxy for both.

The connection gets classified into several Connection Classes that makes it easy to develop against. The library does this by listening to the existing internet traffic done by your app and notifying you when the user’s connection quality changes. Developers can then use this Connection Class information and adjust the application’s behavior (request lower quality images or video, throttle type-ahead, etc).

The Network Connection Class library takes care of spikes using a moving average of the incoming samples, and also applies some hysteresis (both with a minimum number of samples and amount the average has to cross a boundary before triggering a bucket change):

Code Sample:
Connection Class provides an interface for classes to add themselves as listeners for when the network’s connection quality changes. In the subscriber class, implement ConnectionClassStateChangeListener:

[section_tc][column_tc span=’12’][blockquote_tc style=’style4′ class=”blog-code”]package com.example.android.connectionclasstest;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.network.connectionclass.ConnectionClassManager;
import com.facebook.network.connectionclass.ConnectionQuality;
import com.facebook.network.connectionclass.DeviceBandwidthSampler;

import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

public class MainActivity extends AppCompatActivity {

private static final String TAG = “ConnectionClass-Sample”;
private ConnectionClassManager mConnectionClassManager;
private DeviceBandwidthSampler mDeviceBandwidthSampler;
private TextView mTextView;
private ImageView mImageView;
private ImageLoader imageLoader;
private ProgressBar mRunningBar;
private ConnectionChangedListener mListener;
private int mTries = 0;
private ConnectionQuality mConnectionClass = ConnectionQuality.UNKNOWN;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageLoader = ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration.createDefault(getBaseContext()));
mConnectionClassManager = ConnectionClassManager.getInstance();
mDeviceBandwidthSampler = DeviceBandwidthSampler.getInstance();
mRunningBar = (ProgressBar) findViewById(R.id.runnigBar);
mTextView = (TextView) findViewById(R.id.connectionClass);
mImageView = (ImageView) findViewById(R.id.imageView);
findViewById(R.id.testButton).setOnClickListener(DownloadImage);
mTextView.setText(mConnectionClassManager.getCurrentBandwidthQuality().toString());
mListener = new ConnectionChangedListener();
findViewById(R.id.upload).setOnClickListener(UploadImage);
findViewById(R.id.vdButton).setOnClickListener(PlayVideo);
}

@Override
protected void onPause() {
super.onPause();
mConnectionClassManager.remove(mListener);
}

@Override
protected void onResume() {
super.onResume();

mConnectionClassManager.register(mListener);
}
String connectionQuality=null;

private class ConnectionChangedListener
implements ConnectionClassManager.ConnectionClassStateChangeListener {

@Override
public void onBandwidthStateChange(ConnectionQuality bandwidthState) {
mConnectionClass = bandwidthState;
runOnUiThread(new Runnable() {
@Override
public void run() {

connectionQuality = mConnectionClass.toString();
switch (connectionQuality){
case “POOR”:
double val1 = mConnectionClassManager.getDownloadKBitsPerSecond();
mTextView.setText(“Quality is “+connectionQuality+” “+val1 +” and Bandwidth under 150 kbps so poor quality Image downloaded”);
android.support.design.widget.Snackbar.make(findViewById(R.id.main),”Quality is “+connectionQuality+ val1 +”\n and Bandwidth under 150 kbps so poor\n quality image is downloading”, android.support.design.widget.Snackbar.LENGTH_LONG).show();
new DnloadImage().execute(“http://storage.googleapis.com/ix_choosemuse/uploads/2016/02/android-logo.png”); // 80 kb
break;

case “MODERATE”:
double val2 = mConnectionClassManager.getDownloadKBitsPerSecond();
mTextView.setText(“Quality is “+connectionQuality+” “+val2 +” and Bandwidth between 150 to 550 kbps so moderate quality Image downloaded”);
android.support.design.widget.Snackbar.make(findViewById(R.id.main),”Quality is “+connectionQuality+ val2 +”\n and Bandwidth between 150 to 550 kbps so moderate\n quality Image is downloading”, android.support.design.widget.Snackbar.LENGTH_LONG).show();
new DnloadImage().execute(“http://static.giantbomb.com/uploads/original/15/157771/2312725-a10.jpeg”); // 454 kb
break;

case “GOOD”:
double val3 = mConnectionClassManager.getDownloadKBitsPerSecond();
android.support.design.widget.Snackbar.make(findViewById(R.id.main),”Quality is “+connectionQuality+ val3 +”\n and Bandwidth between 550 to 2000 kbps so good\n quality Image is downloading”, android.support.design.widget.Snackbar.LENGTH_LONG).show();
mTextView.setText(“Quality is “+connectionQuality+” “+val3 +” and Bandwidth between 550 to 2000 kbps so good quality Image downloaded”);
new DnloadImage().execute(“http://techclones.com/wp-content/uploads/2013/09/Best-Dark-HD-Wallpaper-Android1.png”); // 1.04 mb
break;

case “EXCELLENT”:
double val4 = mConnectionClassManager.getDownloadKBitsPerSecond();
mTextView.setText(“Quality is “+connectionQuality+” “+val4 +” and Bandwidth over 2000 kbps so excellent quality Image downloaded”);
android.support.design.widget.Snackbar.make(findViewById(R.id.main),”Quality is “+connectionQuality+ val4 +”\n and Bandwidth over 2000 kbps so high\n quality Image is downlaoding”, android.support.design.widget.Snackbar.LENGTH_LONG).show();
new DnloadImage().execute(“http://static.giantbomb.com/uploads/original/15/157771/2312721-a7.png”); // 2.49 mb
break;

case “UNKNOWN”:
mTextView.setText(“Sorry we are getting nothing”);
break;
}
}
});
}
}

private final View.OnClickListener DownloadImage = new View.OnClickListener() {
@Override
public void onClick(View v) {
mRunningBar.setVisibility(View.VISIBLE);
mTries=0;
String quality = mConnectionClass.toString();
Toast.makeText(MainActivity.this, “Quality ->”+quality, Toast.LENGTH_SHORT).show();
new DnloadImage().execute(“”);
}
};

private final View.OnClickListener UploadImage = new View.OnClickListener() {
@Override
public void onClick(View v) {
//showFileChooser();
Intent intent = new Intent(MainActivity.this, UplaodActivity.class);
startActivity(intent);
}
};

private final View.OnClickListener PlayVideo = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, VideoActivity.class);
startActivity(intent);
}
};

private class DnloadImage extends AsyncTask<String, Void, Bitmap> {

@Override
protected void onPreExecute() {
mDeviceBandwidthSampler.startSampling();
mRunningBar.setVisibility(View.VISIBLE);
}

@Override
protected Bitmap doInBackground(String… url) {
String imageURL = url[0];
try {
ByteArrayInputStream byteArrayInputStream;
// Bitmap bitmap;
URLConnection connection = new URL(imageURL).openConnection();
connection.setUseCaches(false);
connection.connect();
InputStream input = connection.getInputStream();

try {
Bitmap bitmap = BitmapFactory.decodeStream(input);
return bitmap;
} finally {
input.close();
}
} catch (IOException e) {
Log.e(TAG, “Error while downloading image.”);
}
return null;
}

@Override
protected void onPostExecute(Bitmap bp) {
mDeviceBandwidthSampler.stopSampling();
Toast.makeText(MainActivity.this,””+mTries,Toast.LENGTH_SHORT).show();

if (mConnectionClass == ConnectionQuality.UNKNOWN && mTries < 10) {
mTries++;
new DnloadImage().execute(“https://familysearch.org/learn/wiki/en/images/9/9d/Links-Folder-icon.png”);
}
if (!mDeviceBandwidthSampler.isSampling()) {
mImageView.setImageBitmap(bp);
//imageLoader.getInstance().displayImage(mURL,mImageView);
mRunningBar.setVisibility(View.GONE);

}
}
}
}[/blockquote_tc][/column_tc][/section_tc]

The main way to provide the ConnectionClassManager data is to use the DeviceBandwidthSampler. The DeviceBandwidthSampler samples the device’s underlying network stats, when you tell it you’re performing some sort of network activity (downloading photos, playing a video, etc).

To know more about the Network Connection Class and its implementation, feel free to say hello@mantralabsglobal.com. We would surely respond to your queries.

 

Cancel

Knowledge thats worth delivered in your inbox

Lake, Lakehouse, or Warehouse? Picking the Perfect Data Playground

By :

In 1997, the world watched in awe as IBM’s Deep Blue, a machine designed to play chess, defeated world champion Garry Kasparov. This moment wasn’t just a milestone for technology; it was a profound demonstration of data’s potential. Deep Blue analyzed millions of structured moves to anticipate outcomes. But imagine if it had access to unstructured data—Kasparov’s interviews, emotions, and instinctive reactions. Would the game have unfolded differently?

This historic clash mirrors today’s challenge in data architectures: leveraging structured, unstructured, and hybrid data systems to stay ahead. Let’s explore the nuances between Data Warehouses, Data Lakes, and Data Lakehouses—and uncover how they empower organizations to make game-changing decisions.

Deep Blue’s triumph was rooted in its ability to process structured data—moves on the chessboard, sequences of play, and pre-defined rules. Similarly, in the business world, structured data forms the backbone of decision-making. Customer transaction histories, financial ledgers, and inventory records are the “chess moves” of enterprises, neatly organized into rows and columns, ready for analysis. But as businesses grew, so did their need for a system that could not only store this structured data but also transform it into actionable insights efficiently. This need birthed the data warehouse.

Why was Data Warehouse the Best Move on the Board?

Data warehouses act as the strategic command centers for enterprises. By employing a schema-on-write approach, they ensure data is cleaned, validated, and formatted before storage. This guarantees high accuracy and consistency, making them indispensable for industries like finance and healthcare. For instance, global banks rely on data warehouses to calculate real-time risk assessments or detect fraud—a necessity when billions of transactions are processed daily, tools like Amazon Redshift, Snowflake Data Warehouse, and Azure Data Warehouse are vital. Similarly, hospitals use them to streamline patient care by integrating records, billing, and treatment plans into unified dashboards.

The impact is evident: according to a report by Global Market Insights, the global data warehouse market is projected to reach $30.4 billion by 2025, driven by the growing demand for business intelligence and real-time analytics. Yet, much like Deep Blue’s limitations in analyzing Kasparov’s emotional state, data warehouses face challenges when encountering data that doesn’t fit neatly into predefined schemas.

The question remains—what happens when businesses need to explore data outside these structured confines? The next evolution takes us to the flexible and expansive realm of data lakes, designed to embrace unstructured chaos.

The True Depth of Data Lakes 

While structured data lays the foundation for traditional analytics, the modern business environment is far more complex, organizations today recognize the untapped potential in unstructured and semi-structured data. Social media conversations, customer reviews, IoT sensor feeds, audio recordings, and video content—these are the modern equivalents of Kasparov’s instinctive reactions and emotional expressions. They hold valuable insights but exist in forms that defy the rigid schemas of data warehouses.

Data lake is the system designed to embrace this chaos. Unlike warehouses, which demand structure upfront, data lakes operate on a schema-on-read approach, storing raw data in its native format until it’s needed for analysis. This flexibility makes data lakes ideal for capturing unstructured and semi-structured information. For example, Netflix uses data lakes to ingest billions of daily streaming logs, combining semi-structured metadata with unstructured viewing behaviors to deliver hyper-personalized recommendations. Similarly, Tesla stores vast amounts of raw sensor data from its autonomous vehicles in data lakes to train machine learning models.

However, this openness comes with challenges. Without proper governance, data lakes risk devolving into “data swamps,” where valuable insights are buried under poorly cataloged, duplicated, or irrelevant information. Forrester analysts estimate that 60%-73% of enterprise data goes unused for analytics, highlighting the governance gap in traditional lake implementations.

Is the Data Lakehouse the Best of Both Worlds?

This gap gave rise to the data lakehouse, a hybrid approach that marries the flexibility of data lakes with the structure and governance of warehouses. The lakehouse supports both structured and unstructured data, enabling real-time querying for business intelligence (BI) while also accommodating AI/ML workloads. Tools like Databricks Lakehouse and Snowflake Lakehouse integrate features like ACID transactions and unified metadata layers, ensuring data remains clean, compliant, and accessible.

Retailers, for instance, use lakehouses to analyze customer behavior in real time while simultaneously training AI models for predictive recommendations. Streaming services like Disney+ integrate structured subscriber data with unstructured viewing habits, enhancing personalization and engagement. In manufacturing, lakehouses process vast IoT sensor data alongside operational records, predicting maintenance needs and reducing downtime. According to a report by Databricks, organizations implementing lakehouse architectures have achieved up to 40% cost reductions and accelerated insights, proving their value as a future-ready data solution.

As businesses navigate this evolving data ecosystem, the choice between these architectures depends on their unique needs. Below is a comparison table highlighting the key attributes of data warehouses, data lakes, and data lakehouses:

FeatureData WarehouseData LakeData Lakehouse
Data TypeStructuredStructured, Semi-Structured, UnstructuredBoth
Schema ApproachSchema-on-WriteSchema-on-ReadBoth
Query PerformanceOptimized for BISlower; requires specialized toolsHigh performance for both BI and AI
AccessibilityEasy for analysts with SQL toolsRequires technical expertiseAccessible to both analysts and data scientists
Cost EfficiencyHighLowModerate
ScalabilityLimitedHighHigh
GovernanceStrongWeakStrong
Use CasesBI, ComplianceAI/ML, Data ExplorationReal-Time Analytics, Unified Workloads
Best Fit ForFinance, HealthcareMedia, IoT, ResearchRetail, E-commerce, Multi-Industry
Conclusion

The interplay between data warehouses, data lakes, and data lakehouses is a tale of adaptation and convergence. Just as IBM’s Deep Blue showcased the power of structured data but left questions about unstructured insights, businesses today must decide how to harness the vast potential of their data. From tools like Azure Data Lake, Amazon Redshift, and Snowflake Data Warehouse to advanced platforms like Databricks Lakehouse, the possibilities are limitless.

Ultimately, the path forward depends on an organization’s specific goals—whether optimizing BI, exploring AI/ML, or achieving unified analytics. The synergy of data engineering, data analytics, and database activity monitoring ensures that insights are not just generated but are actionable. To accelerate AI transformation journeys for evolving organizations, leveraging cutting-edge platforms like Snowflake combined with deep expertise is crucial.

At Mantra Labs, we specialize in crafting tailored data science and engineering solutions that empower businesses to achieve their analytics goals. Our experience with platforms like Snowflake and our deep domain expertise makes us the ideal partner for driving data-driven innovation and unlocking the next wave of growth for your enterprise.

Cancel

Knowledge thats worth delivered in your inbox

Loading More Posts ...
Go Top
ml floating chatbot