Skip to content

Instantly share code, notes, and snippets.

@danishjamal104
Last active August 31, 2021 07:06

Revisions

  1. danishjamal104 revised this gist Aug 19, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gsoc_21_report.md
    Original file line number Diff line number Diff line change
    @@ -69,7 +69,7 @@ Defining the abstract class and interface which will be used in [Android Client]
    val base_url = "https://10.0.2.2:8443/fineract-provider/api/v1/"
    val tenant = "default"

    val baseApiManager = BaseApiManager.getInstance()
    val baseApiManager = BaseApiManager.getInstance();
    baseApiManager.createService("mifos", "password", base_url, tenant)

    baseApiManager.getAuthApi().authenticate(true, "")
  2. danishjamal104 revised this gist Aug 16, 2021. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions gsoc_21_report.md
    Original file line number Diff line number Diff line change
    @@ -138,12 +138,12 @@ JIRA Ticket | PR
    [FINERACT-1383](https://issues.apache.org/jira/browse/FINERACT-1383) | [#1819](https://github.com/apache/fineract/pull/1819)

    ### 3. Fineract Client | Java
    [![](https://img.shields.io/jitpack/v/github/openMF/fineract-client?color=green&style=for-the-badge)](https://jitpack.io/#openMF/fineract-client)
    [![](https://img.shields.io/jitpack/v/github/openMF/fineract-client?color=green&style=for-the-badge)](https://jitpack.io/#openMF/fineract-client) <br>
    Made a stable release of the client library, please do checkout the [release changelog](https://github.com/openMF/fineract-client/releases) for getting more info about the changes. Apart from the release their has been some of the major improvements and fixes after the initial release. Refer below link for all the PRs that are merged.
    [Merged pull request](https://github.com/openMF/fineract-client/pulls?q=is%3Apr+is%3Aclosed+label%3A%22GSoC+2021%22)

    ### 4. Fineract Android SDK | Android(Kotlin + Java)
    [![](https://img.shields.io/jitpack/v/github/openMF/fineract-android-sdk?color=green&style=for-the-badge)](https://jitpack.io/#openMF/mifos-android-sdk-arch)
    [![](https://img.shields.io/jitpack/v/github/openMF/fineract-android-sdk?color=green&style=for-the-badge)](https://jitpack.io/#openMF/mifos-android-sdk-arch) <br>
    Release version one of the SDK. The main changes here include updation of fineract client version to resolve the issues mentioned earlier in this post also added project build check using github actions. Refer below link for all the PRs that are merged.
    [Merged pull request](https://github.com/openMF/fineract-android-sdk/pulls?q=is%3Apr+author%3Adanishjamal104+is%3Aclosed)

  3. danishjamal104 revised this gist Aug 16, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gsoc_21_report.md
    Original file line number Diff line number Diff line change
    @@ -102,7 +102,7 @@ This application is dependent on many legacy libraries which are now deprecated,
    - Migrated the PrefManager to extend the [`UserPreferences`](https://github.com/openMF/mifos-android-sdk-arch/blob/development/core/src/main/java/org/mifos/core/sharedpreference/UserPreferences.kt).
    - References
    - Pull Requests: [#1814](https://github.com/openMF/android-client/pull/1814), [#1816](https://github.com/openMF/android-client/pull/1816)

    ---
    ## Phase 2
    In phase 2 the main work was done in the integration/migration part. The [Android-Client](https://github.com/openMF/android-client) consumes fineract api and was diffining all the services and retrofit client on the domain level, but now it needs to be migrated to make use of generated SDK in the phase 1. Since the migration was majorly related to apis this task can be achieved by only changing the api calls in [DataManager](https://github.com/openMF/android-client/tree/master/mifosng-android/src/main/java/com/mifos/api/datamanager) to make use of sdk client for making api request and use [abstract/entity mapper](https://github.com/openMF/fineract-android-sdk/tree/master/core/src/main/java/org/mifos/core/data) for casting data from entity to domain model. Apart from integration this phase also include major improvements in the sdk and the swagger documentation resources in fineract project.

  4. danishjamal104 revised this gist Aug 16, 2021. 1 changed file with 44 additions and 3 deletions.
    47 changes: 44 additions & 3 deletions gsoc_21_report.md
    Original file line number Diff line number Diff line change
    @@ -95,19 +95,60 @@ Defining the abstract class and interface which will be used in [Android Client]
    - Pull Requests: [#12](https://github.com/openMF/mifos-android-sdk-arch/pull/12), [#13](https://github.com/openMF/mifos-android-sdk-arch/pull/13), [#14](https://github.com/openMF/mifos-android-sdk-arch/pull/14), [#15](https://github.com/openMF/mifos-android-sdk-arch/pull/15), [#16](https://github.com/openMF/mifos-android-sdk-arch/pull/16)
    - Issues: [#8](https://github.com/openMF/mifos-android-sdk-arch/issues/8)

    ### 3. Mifos Android Client | Android(Kotlin + Java)
    ### 3. Fineract Android Client | Android(Kotlin + Java)
    Here I worked on [Mifos Android Client](https://github.com/openMF/android-client) application. In this project the major change this year would be to remove the existing api services and make use of [Mifos Android SDK](https://github.com/openMF/mifos-android-sdk-arch) library.
    This application is dependent on many legacy libraries which are now deprecated, so it is a bit challenging migrating the API code to sdk. Hence the SDK will be having support for most of the older libraries. Below are the implementation and work done so far.
    - Added [Mifos Android SDK](https://github.com/openMF/mifos-android-sdk-arch) dependency, fixed some major depenedncy clash and minor issues. Until this point all the three projects are lined up.
    - Migrated the PrefManager to extend the [`UserPreferences`](https://github.com/openMF/mifos-android-sdk-arch/blob/development/core/src/main/java/org/mifos/core/sharedpreference/UserPreferences.kt).
    - References
    - Pull Requests: [#1814](https://github.com/openMF/android-client/pull/1814), [#1816](https://github.com/openMF/android-client/pull/1816)

    ## Phase 2 - Coming soon
    ## Phase 2
    In phase 2 the main work was done in the integration/migration part. The [Android-Client](https://github.com/openMF/android-client) consumes fineract api and was diffining all the services and retrofit client on the domain level, but now it needs to be migrated to make use of generated SDK in the phase 1. Since the migration was majorly related to apis this task can be achieved by only changing the api calls in [DataManager](https://github.com/openMF/android-client/tree/master/mifosng-android/src/main/java/com/mifos/api/datamanager) to make use of sdk client for making api request and use [abstract/entity mapper](https://github.com/openMF/fineract-android-sdk/tree/master/core/src/main/java/org/mifos/core/data) for casting data from entity to domain model. Apart from integration this phase also include major improvements in the sdk and the swagger documentation resources in fineract project.

    ### 1. Android Client | Android(Kotlin + Java)
    Integrated the sdk and removed the old api calls. As mentioned in my proposal I migrated all the basic endpoints like `clients`/`centers`/`groups`/`savingsAccounts` etc, rest of the endpoint will be migrated post GSoC. The migration include getting the appropriate api and deffining the mapper depending on the enity. All the changes made are mostly consoncentrated over datamanagers without making the much changes in the rest of the code. Below are the list of PRs related to integration.
    Type | PR
    -- | --
    Client Integration | [#1825](https://github.com/openMF/android-client/pull/1825)
    Groups Integration| [#1827](https://github.com/openMF/android-client/pull/1827)
    Centers Integration | [#1828](https://github.com/openMF/android-client/pull/1828)
    Staff and Search Integration | [#1829](https://github.com/openMF/android-client/pull/1829)
    Survey Integration | [#1831](https://github.com/openMF/android-client/pull/1831)
    Sdk version update | [#1832](https://github.com/openMF/android-client/pull/1832)

    ### 2. Apache Fineract | Java
    Throughout the migration of SDK many issues with the swagger doc and generated SDK was encountered which had to be fixed in order for the SDK to work as expected. Below is the list of JIRA ticket and respected PRs.
    JIRA Ticket | PR
    -- | --
    [FINERACT-1363](https://issues.apache.org/jira/browse/FINERACT-1363) | [#1817](https://github.com/apache/fineract/pull/1817)
    [FINERACT-1364](https://issues.apache.org/jira/browse/FINERACT-1365) | [#1810](https://github.com/apache/fineract/pull/1810)
    [FINERACT-1365](https://issues.apache.org/jira/browse/FINERACT-1365) | [#1813](https://github.com/apache/fineract/pull/1813)
    [FINERACT-1366](https://issues.apache.org/jira/browse/FINERACT-1366) | [#1812](https://github.com/apache/fineract/pull/1812)
    [FINERACT-1369](https://issues.apache.org/jira/browse/FINERACT-1369) | [#1814](https://github.com/apache/fineract/pull/1814)
    [FINERACT-1370](https://issues.apache.org/jira/browse/FINERACT-1370) | [#1815](https://github.com/apache/fineract/pull/1815)
    [FINERACT-1372](https://issues.apache.org/jira/browse/FINERACT-1372) | [#1828](https://github.com/apache/fineract/pull/1828)
    [FINERACT-1373](https://issues.apache.org/jira/browse/FINERACT-1373) | [#1827](https://github.com/apache/fineract/pull/1827)
    [FINERACT-1376](https://issues.apache.org/jira/browse/FINERACT-1376) | [#1826](https://github.com/apache/fineract/pull/1826)
    [FINERACT-1377](https://issues.apache.org/jira/browse/FINERACT-1366) | [#1825](https://github.com/apache/fineract/pull/1825)
    [FINERACT-1378](https://issues.apache.org/jira/browse/FINERACT-1378) | [#1824](https://github.com/apache/fineract/pull/1824)
    [FINERACT-1380](https://issues.apache.org/jira/browse/FINERACT-1380) | [#1815](https://github.com/apache/fineract/pull/1815)
    [FINERACT-1381](https://issues.apache.org/jira/browse/FINERACT-1381) | [#1821](https://github.com/apache/fineract/pull/1821)
    [FINERACT-1382](https://issues.apache.org/jira/browse/FINERACT-1382) | [#1820](https://github.com/apache/fineract/pull/1820)
    [FINERACT-1383](https://issues.apache.org/jira/browse/FINERACT-1383) | [#1819](https://github.com/apache/fineract/pull/1819)

    ### 3. Fineract Client | Java
    [![](https://img.shields.io/jitpack/v/github/openMF/fineract-client?color=green&style=for-the-badge)](https://jitpack.io/#openMF/fineract-client)
    Made a stable release of the client library, please do checkout the [release changelog](https://github.com/openMF/fineract-client/releases) for getting more info about the changes. Apart from the release their has been some of the major improvements and fixes after the initial release. Refer below link for all the PRs that are merged.
    [Merged pull request](https://github.com/openMF/fineract-client/pulls?q=is%3Apr+is%3Aclosed+label%3A%22GSoC+2021%22)

    ### 4. Fineract Android SDK | Android(Kotlin + Java)
    [![](https://img.shields.io/jitpack/v/github/openMF/fineract-android-sdk?color=green&style=for-the-badge)](https://jitpack.io/#openMF/mifos-android-sdk-arch)
    Release version one of the SDK. The main changes here include updation of fineract client version to resolve the issues mentioned earlier in this post also added project build check using github actions. Refer below link for all the PRs that are merged.
    [Merged pull request](https://github.com/openMF/fineract-android-sdk/pulls?q=is%3Apr+author%3Adanishjamal104+is%3Aclosed)

    ## Contact
    [![](https://img.shields.io/badge/Gmail-f00?style=for-the-badge&logo=gmail&logoColor=white)](mailto:danishjamal104@gmail.com?subject=[GSoC'21])
    [![](https://img.shields.io/badge/LinkedIn-2568bc?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/danishjamal104/)
    [![](https://img.shields.io/badge/Gitter-6d3f84?style=for-the-badge&logo=gitter&logoColor=white)](https://gitter.im/danishjamal104)
    [![](https://img.shields.io/badge/Github-000?style=for-the-badge&logo=github&logoColor=white)](http://github.com/danishjamal104/)
    [![](https://img.shields.io/badge/Github-000?style=for-the-badge&logo=github&logoColor=white)](http://github.com/danishjamal104/)
  5. danishjamal104 created this gist Jul 9, 2021.
    113 changes: 113 additions & 0 deletions gsoc_21_report.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,113 @@
    ![](https://user-images.githubusercontent.com/31315800/124964490-b8536780-e03e-11eb-8a37-8b5646523308.png)

    # GSoC 2021 @ The Mifos Initiative | The Apache Software Foundation

    This gist contains the details about [My GSoC '21 Project](https://summerofcode.withgoogle.com/projects/#5795113839624192) with [The Mifos Initiative](https://mifos.org/) as an umbrella under [The Apache Software Foundation](https://www.apache.org). During summer, I will be working on architecting and developing the [Mifos Android SDK](https://github.com/openMF/mifos-android-sdk-arch), releasing the [Fineract Client API Library](https://github.com/openMF/fineract-client) using the open api generator in the [Apache Fineract](https://github.com/apache/fineract) project and finally integrate it with the [Mifos Android SDK](https://github.com/openMF/mifos-android-sdk-arch) project. The generated [SDK](https://github.com/openMF/mifos-android-sdk-arch) project will further be used in [MIFOS Android Client](https://github.com/openMF/android-client) project.

    In all the Android Applications of Mifos, [android-client](https://github.com/openMF/android-client), [mifos-mobile](https://github.com/openMF/mifos-mobile), [mobile-wallet](https://github.com/openMF/mobile-wallet) there is a lot of repeated code defining all the services file separately for all the apps which deals with interacting with the Fineract APIs. Considering this idea last year the library was generated for older version of fineract, this year I will be generating the library for [Fineract v1.5.0](https://github.com/apache/fineract/releases/tag/1.5.0) and adding an android specific abstraction layer over it and releasing [Mifos Android SDK](https://github.com/openMF/mifos-android-sdk-arch), which will replace all the boiler plate code in [MIFOS Android Client](https://github.com/openMF/android-client) project..

    ## Goals of the Project
    1. To release Fineract-Client new version based on Fineract 1.5.0 latest release.
    2. To automate the SDK generation by optimising the gradle task in Fineract project.
    3. To build an android specific abstract layer over generated sdk and release it as an android library.
    4. To integrate the mifos-android-sdk-architecture in android-client.

    ## Features
    1. Alpha version of [Fineract Client Library](https://github.com/openMF/fineract-client) is released and can be added in the gradle dependency for Mifos Android SDK.
    2. The [Mifos Android SDK](https://github.com/openMF/mifos-android-sdk-arch) will be containing all the abstraction code and serve as an entry point to the SDK.
    3. All the API call implementations are abstracted from the developer. So the only concern of the developer is to request the data from SDK and update UI for the user.
    4. Testing coverage will be provided in the SDK itself.
    5. Base class for User management/preferences will be provided by [Mifos Android SDK](https://github.com/openMF/mifos-android-sdk-arch).

    ## Phase 1 - Project Development

    Initially the [Fineract Client Library](https://github.com/openMF/fineract-client) was generated manually but later it was defined as a [`buildJavaSdk`](https://github.com/apache/fineract/blob/1.5.0/fineract-client/build.gradle) gradle task but still there are many scopes of optimisation. So my **1st Coding Period** started with working on [Apache Fineract](https://github.com/apache/fineract/) project followed by [Fineract Client Library](https://github.com/openMF/fineract-client), [Mifos Android SDK](https://github.com/openMF/mifos-android-sdk-arch) & [Mifos Android Client](https://github.com/openMF/android-client). Following are the details of each project:

    ### 1. Apache Fineract | Java
    I worked on **[Fineract Client Module](https://github.com/apache/fineract/tree/develop/fineract-client)**.
    Since the [services and util](https://github.com/apache/fineract/tree/develop/fineract-client/src/main/java/org/apache/fineract/client) classes are defined separately hence each time a the SDK is generated we have to copy and paste those file in the generated library, so this task has to be automated apart from that there are some missing dependency which need to be fixed using mustache template. Below are the work done.
    - Added [pom.mustache](https://github.com/danishjamal104/fineract/blob/FINERACT-1356/fineract-client/src/main/resources/java/template/pom.mustache)
    - Added missing dependency `logging-interceptor`, since it was used in [FineractClient.java](https://github.com/apache/fineract/blob/develop/fineract-client/src/main/java/org/apache/fineract/client/util/FineractClient.java).
    - Added `okhttp3-4.9.0`.(This was initially done to avoid `RequestBody.create()` deprecation. Need to be downgraded to 3.5.0 to match [Mifos Android Client](https://github.com/openMF/android-client) dependency version)
    - Added [build.gradle.mustache](https://github.com/danishjamal104/fineract/blob/FINERACT-1356/fineract-client/src/main/resources/java/template/build.gradle.mustache).
    - Added `okhttp3-4.9.0`.(This is same change as in pom, for gradle based project)
    - **References**
    - JIRA Ticket: [FINERACT-1356](https://issues.apache.org/jira/browse/FINERACT-1356)
    - Pull Request: [#1764](https://github.com/apache/fineract/pull/1764)

    ### 2. Fineract Client | Java
    Here I worked on [Fineract Client Library](https://github.com/openMF/fineract-client), where the major goal was to generate the library for [Apache Fineract v1.5.0](https://github.com/apache/fineract/releases/tag/1.5.0).
    So I created a new branch named [`development-1.5.0`](https://github.com/openMF/fineract-client/tree/development-1.5.0) where the new library will be pushed and once the library is pretty stable then I will be creating the release.
    Initially the [2.1.0-alpha](https://github.com/openMF/fineract-client/releases/tag/2.1.0-alpha) is released for testing purpose. Below are the implementation and work done so far.
    - [2.0.0-alpha](https://github.com/openMF/fineract-client/releases/tag/2.0.0-alpha) released.
    - This is the first upgraded release whith proper documentation and sample codes.
    - [2.1.0-alpha](https://github.com/openMF/fineract-client/releases/tag/2.1.0-alpha) released.
    - In previous release the library was using newer version of rxjava which is reactivex, but in [Android Client](https://github.com/openMF/android-client) the older version is used hence to support the legacy support the rxjava version was downgraded to `1.3.0` from `2.1.1`.
    - Debugged and tested the generated SDK, found some major bug checkout issues in below references.
    - References
    - Commits: [4e9c0c4](https://github.com/openMF/fineract-client/commit/4e9c0c48bde75e517d2723be7c216c62151bc412), [f3f8315](https://github.com/openMF/fineract-client/commit/f3f8315e845375b3983f94614660c083d6819430)
    - Issues: [#49](https://github.com/openMF/fineract-client/issues/49), [#50](https://github.com/openMF/fineract-client/issues/50)

    ### 3. Mifos Android Architecture | Kotlin
    Here I worked on [Mifos Android SDK](https://github.com/openMF/mifos-android-sdk-arch). The main goal of this project is to add abstraction layer over the generated [Fineract Client SDK](https://github.com/openMF/fineract-client).
    Defining the abstract class and interface which will be used in [Android Client](https://github.com/openMF/android-client) project, making the code short and reusable. Below are the main things I have worked on.
    - Initial implementation of shared preference abstract base class, named [`BasePreferenceManager`](https://github.com/openMF/mifos-android-sdk-arch/blob/development/core/src/main/java/org/mifos/core/sharedpreference/BasePreferenceManager.kt)
    - SharedPreference has different methods for accessing the preferences, this class provides single point of access for all type of data. for example for putting string with custom key use `put(Key.Custom("demo_key"), "example data")` and for accessing use `get(Key.Custom("demo_key"), default = "I am default data, can be nullable")`.
    - Implemented [UserPreferences](https://github.com/openMF/mifos-android-sdk-arch/blob/development/core/src/main/java/org/mifos/core/sharedpreference/UserPreferences.kt) abstract class.
    - This class will be act as a base for [PrefManager](https://github.com/openMF/android-client/blob/master/mifosng-android/src/main/java/com/mifos/utils/PrefManager.java) in android-client project.
    - This class has the implementation of basic user settings like tokens, instant urls, user status etc.
    - Added [EntityMapper](https://github.com/openMF/mifos-android-sdk-arch/blob/development/core/src/main/java/org/mifos/core/data/EntityMapper.kt) interface and [AbstractMapper](https://github.com/openMF/mifos-android-sdk-arch/blob/development/core/src/main/java/org/mifos/core/data/AbstractMapper.kt).
    - Since the services return the response as custom models which is generated along with the services files and hence in order to convert them to domain specific models the client application has to define the custom mapper for each conversion implementing these interface or abstract class.
    - AbstractMapper internally defines the function body for `mapFromEntityList` and `mapToEntityList`, so for most of the cases client can extend this class but in case client has to define some custom logic for these two methods then it must implement EntityMapper.
    - Added [BaseApiManager](https://github.com/openMF/mifos-android-sdk-arch/blob/development/core/src/main/java/org/mifos/core/apimanager/BaseApiManager.kt) interface and its implementation concrete class [BaseApiManagerImpl](https://github.com/openMF/mifos-android-sdk-arch/blob/development/core/src/main/java/org/mifos/core/apimanager/BaseApiManagerImpl.kt)
    - This will be the entry point to the sdk.
    - The BaseApiManager interface declares all the necessary functions which are required to access the APIs currently required by [Android Client](https://github.com/openMF/android-client) project, refer [client's BaseApiManager](https://github.com/openMF/android-client/blob/master/mifosng-android/src/main/java/com/mifos/api/BaseApiManager.java) for the supported services.
    - Client app has to get instant using the companion's object `getInstance()` method.
    - `createService(username: String, password: String, baseUrl: String, tenant: String)` has to be called to initiate the services, currently the api manager does not allow client to intervene in the service creation and hence not able to add a custom interceptor or add custom ok http client.
    - Below is the code snippet for making a basic http auth request using the sdk.
    ```kotlin
    val base_url = "https://10.0.2.2:8443/fineract-provider/api/v1/"
    val tenant = "default"

    val baseApiManager = BaseApiManager.getInstance()
    baseApiManager.createService("mifos", "password", base_url, tenant)

    baseApiManager.getAuthApi().authenticate(true, "")
    .observeOn(AndroidSchedulers.mainThread())
    .subscribeOn(Schedulers.io())
    .subscribe(object : Subscriber<PostAuthenticationResponse>() {
    override fun onCompleted() {
    Log.i("subscriber", "completed")
    }

    override fun onError(e: Throwable?) {
    Log.i("subscriber", "error: ${e?.localizedMessage}")
    }

    override fun onNext(t: PostAuthenticationResponse?) {
    Log.i("subscriber", "next: ${t.toString()}")
    }

    })
    }
    ```
    - References
    - Pull Requests: [#12](https://github.com/openMF/mifos-android-sdk-arch/pull/12), [#13](https://github.com/openMF/mifos-android-sdk-arch/pull/13), [#14](https://github.com/openMF/mifos-android-sdk-arch/pull/14), [#15](https://github.com/openMF/mifos-android-sdk-arch/pull/15), [#16](https://github.com/openMF/mifos-android-sdk-arch/pull/16)
    - Issues: [#8](https://github.com/openMF/mifos-android-sdk-arch/issues/8)

    ### 3. Mifos Android Client | Android(Kotlin + Java)
    Here I worked on [Mifos Android Client](https://github.com/openMF/android-client) application. In this project the major change this year would be to remove the existing api services and make use of [Mifos Android SDK](https://github.com/openMF/mifos-android-sdk-arch) library.
    This application is dependent on many legacy libraries which are now deprecated, so it is a bit challenging migrating the API code to sdk. Hence the SDK will be having support for most of the older libraries. Below are the implementation and work done so far.
    - Added [Mifos Android SDK](https://github.com/openMF/mifos-android-sdk-arch) dependency, fixed some major depenedncy clash and minor issues. Until this point all the three projects are lined up.
    - Migrated the PrefManager to extend the [`UserPreferences`](https://github.com/openMF/mifos-android-sdk-arch/blob/development/core/src/main/java/org/mifos/core/sharedpreference/UserPreferences.kt).
    - References
    - Pull Requests: [#1814](https://github.com/openMF/android-client/pull/1814), [#1816](https://github.com/openMF/android-client/pull/1816)

    ## Phase 2 - Coming soon


    ## Contact
    [![](https://img.shields.io/badge/Gmail-f00?style=for-the-badge&logo=gmail&logoColor=white)](mailto:danishjamal104@gmail.com?subject=[GSoC'21])
    [![](https://img.shields.io/badge/LinkedIn-2568bc?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/danishjamal104/)
    [![](https://img.shields.io/badge/Gitter-6d3f84?style=for-the-badge&logo=gitter&logoColor=white)](https://gitter.im/danishjamal104)
    [![](https://img.shields.io/badge/Github-000?style=for-the-badge&logo=github&logoColor=white)](http://github.com/danishjamal104/)