InfyOm Blog

latest-post

In our daily life, we are going through lots of packages, and some of us don't know how to build our own package into Laravel.

We are going to perform the core steps to create your own package in laravel. In this tutorial we are going to build zoom package, so we will perform steps related to it.

Setup Fresh Laravel Repo 

Setup fresh laravel repo, and then create directories within it. 

for e.g Create infyomlabs/zoom-api directory into root.


Now create src directory into zoom-api

Run Composer init Into src Directory

After hitting composer init it will ask some information from you, as you can see in below image I have entered some of information. you can just hit enter if you do not want to add other information.


Add your config file (Optional)

Create directory config into src directory and add your config.php file there from where you can manage your env variables. 


Add Service Provider

Create your service provider from where you can do lots of actions. like you can publish config/routes/ migrations files from there. here we are publishing the zoom config file. 


Add your class (Which contains all functions) 

Here we have added a Zoom class which will be contained all zoom functions. 

Update Composer.json 


Finally, Test it in your existing project

Put the following code to your main composer.json (in your project's root). and hit composer update

  "repositories": [
        {
            "type": "path",
            "url": "infyomlabs/zoom-api",
            "options": {
                "symlink": true
            }
        }
    ],
    "license": "MIT",
    "require": {
        "infyomlabs/zoom-api": "dev-develop"
    },


January 23, 20211 minuteuserVishal Ribdiya

Posts

post
While developing apps in Android Studio, developers can create an APK file and share it with other developers or to QA people for testing purposes.
APK can be created with two types:
                                                   1.Debug APK
                                                   2.Release APK
  • Debug APK is very fast in building and Release APK is a little bit slow.

How to create Release APK File:



  • Flowing below all steps 
  • Open android studio
  • Click Build on the toolbar
  • Click Generate Signed Bundle/APK.
    c1.PNG 14.37 KB
  •  Select APK 
  • Click the Next button
    c2.PNG 14.5 KB
  • After clicking the next button, you will see the following dialog.
  • Click the "Create new..." button, highlighted in the following image by a red circle if you are creating an APK for the first time. Otherwise, you can choose from existing.
    c3.PNG 13.29 KB
  • It will open one another dialog box
  • Key store path in select save location .jks file 
  • Fill in all the information
  • Set a valid name for key alias
  • Set 100 as validity years
  • Fill Certificate Information
  • Click OK
  • After you click on it, select "release" from the dialog box 
  • Select "V1 (Jar Signature)" & "V2 (Full APK Signature)" checkboxes
  • Click Finish
  • It will start the process of building your APK

How to create a debug .apk file



  • Click Build and select Build Bundles(s)/APK(s) 
  • select "Build APK(s)" from the dialog box 
  • It will start the process of building your debug APK file creating 
January 01, 20211 minuteauthorPankaj Valani
post
In the last Blog we have discussed a few tips on recruitment, let's glance at the more tips.....
  1. Remember only you are not interviewing
  2. Look back years of candidate's career
  3. Trust your Gut
  4. Don't be boring Interviewer 
  5. Represent Job Description
  6. Think like Marketer 
1.Remember only you are not interviewing:
Always keep in mind that only you are not hiring for a particular role, we have a competitive job market, most candidates we interviewed will also be interviewing elsewhere and that's why we need to be active, present a positive company image towards the employee.

2.Look back years of candidate's career:
If we are hiring for an experienced person we need to ask questions related to his job experience, how he/she was handling difficult situations, and listen closely to the answer. you may learn a lot or what you need. Remember, don't forget to examine body language from it would come to know about his/her attitude towards the role.

3.Trust your Gut:
don't ignore your gut. If the candidate found good on paper but still after interviewing something from the inner side tells you it's just not right then don't proceed without more investigation. 

4.Don't be boring Interviewer :
Boring questions will bring boring answers. Don't ask such questions. Ask relevant questions about the job. Don't waste your time and candidate time by asking questions which answer don't matter to you.

5.Represent Job Description:
 While interviewing candidates you need to represent the role and responsibilities for the profile is candidate become more aware of the Job and able to clear doubts. 

6.Think like Marketer :
Due to thought competition in the market, Human Resource Recruiters need to be marketer, we have to present our company in a unique way to attract talent from the market.

The process of recruitment is more difficult as all business owners want to hire more talent in the organization. Hence, we need to make proper strategies for hiring as better Recruitment & selection strategies result in the improvement of organizational outcome. We can say investment in 'Recruitment and Selection  process' is money well spent. 

December 28, 20202 minutesauthorMariyam Bemat
post
Maintaining the integrity of your brand is essential for long-term success. However, Trillion often encounters third-party logo design files that do not appear to have the highest care when created. The logos in question come to us in the form of a sponsor logo, an affiliate logo, and a certificate or award logo.

The following points are often enough that we think it is important to provide guidance so that you can avoid these pitfalls. With the help of a graphic designer, the issues of this logo below can be solved and fixed if you ever consider it in your own logo.

1. Bad lines in the logo

When the characters and design elements in the logo are drawn or modified, great care should be taken by the graphic designer. The lines and dots inside the logo should be smooth and clean. In the logo design example below, you will see how the inside line of the letter does not have a curve towards it. This is one of the most common problems we see in poorly made logos.

image-1.png 24.05 KB
Logo files are made up of many dots and lines. When the logo is small, these imperfections may not be significant, but as the logo gets bigger the issue becomes more obvious and problematic. You should have a graphic designer who will fix the curves and lines of the logo. Then use the new files to replace the problem logo.


2. Improper Alignment of Logo Elements

Since graphic designers create logos, they are composing letters and design elements. They have complete control over the sizing and alignment of objects. With all this control, and especially the number of elements or characters is likely to increase that something does not adjust as it should.

image-2.png 21.79 KB

As with the "bad lines" example above, a small logo size can hide problems when compared to an extended version. But on the screen or in digital access, cutting your logo the wrong way causes it to look blurry (due to pixel interpolation, solid dark pixels are divided into multiple lighter pixels). Graphic designers can adjust the arrangement of elements using the Snap-to-Grid or Snap-to-Guide feature, functions available in Adobe Creative Cloud software. This process will ensure that items are arranged just like your logo.

3. Missing Font in Logo


A logo design should always be presented as a piece of artwork composed of lines and points or pixels. Unfortunately, this is not always the case. If a graphic designer used a particular font in your logo, you may not have that font on your, or your vendor’s, computer. A missing font often leads to it being substituted by another font available on the computer. It’s a major problem that prevents anyone who doesn’t have the font to see the logo properly. This even holds true for a graphic designer trying to fix the problem.

image-3.png 112.53 KB

As a logo is designed, fonts are commonly used either as they are, or as a starting point to be modified for the design. The important step in the logo design process is to “outline” the letters being used in the logo so they become a piece of artwork rather than letters you can edit by typing. Once this process has been done, it is not reversible and the font will no longer be required to view and reproduce the logo. Be aware that fonts can cost between $20 and $150 or more just for one weight, such as Helvetica Neue Bold.


4. The Incorrect Logo File Format


Another one of the most common issues we see with logos that are supplied to us is that they are not in the correct file format. If your graphic designer comes to you and says “it’s not the right format” it can mean a few things. However, if your designer intends on using the logo, it is not going to work.

image-4.png 138.65 KB
The most common incorrect file format we receive is a raster logo such as a .jpg rather than a vector logo, such as a .eps. A .jpg logo might be fine if the resolution is high enough and it does not require being produced on a color or transparent background. Vector logos will offer a graphic designer the most options, including saving the artwork to other file formats. A vector logo can be enlarged or reduced infinitely without losing quality.

5. The Incorrect Logo Color Format


A less common but potentially more challenging logo file format issue is the color mode. A logo that is being printed on paper, on a t-shirt, or being included on a website will have different color spectrum requirements. Some can be easily converted from one to another but others cannot. Again, a vector logo will offer a graphic designer the best chance to fix the issue.

image-5.png 169.69 KB


Logo Design Done Right

Providing our clients with logo designs and all of the necessary file formats they might need is an important part of our creative process. Once our design has been approved, we create full-color, 1-color, 2-color, black, and white (knockout) versions of the logo for both print and digital usage. We clearly label the files and place them into properly named folders, making it easy to find the right logo.
December 28, 20204 minutesauthorKishan Savaliya
post
Zoom Marketplace is providing APIs to create zoom meeting direct using the web interface and calling its API. So first of you need to create your zoom ap into zoom marketplace and need to generate the API Keys and credentials.

Create a Zoom Application
  1. Go to Zoom marketplace and do sign in
  2. Click Develop button on header and select Build App menu.
  3. Choose the JWT and create an application with the app name that you want.
  4. Input required information and click Continue until your app will be activated. 
I hope you already have installed fresh laravel. now you have to add the following packages to your composer.json  to integrate the zoom API.

composer require firebase/php-jwt
composer require guzzlehttp/guzzle
And Now run composer update

And don't forget that we also need to modify .env files to set the zoom API credentials.

ZOOM_API_URL="https://api.zoom.us/v2/"
ZOOM_API_KEY="INPUT_YOUR_ZOOM_API_KEY"
ZOOM_API_SECRET="INPUT_YOUR_ZOOM_API_SECRET"

You can find the zoom credentials from your zoom app.

Now just copy given ZoomMeetingTrait to your controller and call-related methods.

<?php

namespace
App\Traits;

use GuzzleHttp\Client;
use Log;

/**
 * trait ZoomMeetingTrait
 */
trait
ZoomMeetingTrait
{
    public $client;
    public $jwt;
    public $headers;

    public function __construct()
    {
        $this->client = new Client();
        $this->jwt = $this->generateZoomToken();
        $this->headers = [
            'Authorization' => 'Bearer '.$this->jwt,
            'Content-Type'  => 'application/json',
            'Accept'        => 'application/json',
        ];
    }
    public function generateZoomToken()
    {
        $key = env('ZOOM_API_KEY', '');
        $secret = env('ZOOM_API_SECRET', '');
        $payload = [
            'iss' => $key,
            'exp' => strtotime('+1 minute'),
        ];

        return \Firebase\JWT\JWT::encode($payload, $secret, 'HS256');
    }

    private function retrieveZoomUrl()
    {
        return env('ZOOM_API_URL', '');
    }

    public function toZoomTimeFormat(string $dateTime)
    {
        try {
            $date = new \DateTime($dateTime);

            return $date->format('Y-m-d\TH:i:s');
        } catch (\Exception $e) {
            Log::error('ZoomJWT->toZoomTimeFormat : '.$e->getMessage());

            return '';
        }
    }

    public function create($data)
    {
        $path = 'users/me/meetings';
        $url = $this->retrieveZoomUrl();

        $body = [
            'headers' => $this->headers,
            'body'    => json_encode([
                'topic'      => $data['topic'],
                'type'       => self::MEETING_TYPE_SCHEDULE,
                'start_time' => $this->toZoomTimeFormat($data['start_time']),
                'duration'   => $data['duration'],
                'agenda'     => (! empty($data['agenda'])) ? $data['agenda'] : null,
                'timezone'     => 'Asia/Kolkata',
                'settings'   => [
                    'host_video'        => ($data['host_video'] == "1") ? true : false,
                    'participant_video' => ($data['participant_video'] == "1") ? true : false,
                    'waiting_room'      => true,
                ],
            ]),
        ];

        $response =  $this->client->post($url.$path, $body);

        return [
            'success' => $response->getStatusCode() === 201,
            'data'    => json_decode($response->getBody(), true),
        ];
    }
   
    public function update($id, $data)
    {
        $path = 'meetings/'.$id;
        $url = $this->retrieveZoomUrl();

        $body = [
            'headers' => $this->headers,
            'body'    => json_encode([
                'topic'      => $data['topic'],
                'type'       => self::MEETING_TYPE_SCHEDULE,
                'start_time' => $this->toZoomTimeFormat($data['start_time']),
                'duration'   => $data['duration'],
                'agenda'     => (! empty($data['agenda'])) ? $data['agenda'] : null,
                'timezone'     => 'Asia/Kolkata',
                'settings'   => [
                    'host_video'        => ($data['host_video'] == "1") ? true : false,
                    'participant_video' => ($data['participant_video'] == "1") ? true : false,
                    'waiting_room'      => true,
                ],
            ]),
        ];
        $response =  $this->client->patch($url.$path, $body);

        return [
            'success' => $response->getStatusCode() === 204,
            'data'    => json_decode($response->getBody(), true),
        ];
    }
   
    public function get($id)
    {
        $path = 'meetings/'.$id;
        $url = $this->retrieveZoomUrl();
        $this->jwt = $this->generateZoomToken();
        $body = [
            'headers' => $this->headers,
            'body'    => json_encode([]),
        ];

        $response =  $this->client->get($url.$path, $body);

        return [
            'success' => $response->getStatusCode() === 204,
            'data'    => json_decode($response->getBody(), true),
        ];
    }

    /**
     *
@param string $id
     *
     *
@return bool[]
     */
    public function
delete($id)
    {
        $path = 'meetings/'.$id;
        $url = $this->retrieveZoomUrl();
        $body = [
            'headers' => $this->headers,
            'body'    => json_encode([]),
        ];

        $response =  $this->client->delete($url.$path, $body);
       
        return [
            'success' => $response->getStatusCode() === 204,
        ];
    }
}
And add the following constants to your controller.

const MEETING_TYPE_INSTANT = 1;
const MEETING_TYPE_SCHEDULE = 2;
const MEETING_TYPE_RECURRING = 3;
const MEETING_TYPE_FIXED_RECURRING_FIXED = 8;
So the final controller will look like, 


<?php

namespace
App\Http\Controllers;

use App\Models\ZoomMeeting;
use App\Traits\ZoomMeetingTrait;
use Illuminate\Http\Request;

class MeetingController extends AppBaseController
{
    use ZoomMeetingTrait;

    const MEETING_TYPE_INSTANT = 1;
    const MEETING_TYPE_SCHEDULE = 2;
    const MEETING_TYPE_RECURRING = 3;
    const MEETING_TYPE_FIXED_RECURRING_FIXED = 8;

    public function show($id)
    {
        $meeting = $this->get($id);

        return view('meetings.index', compact('meeting'));
    }

    public function store(Request $request)
    {
        $this->create($request->all());

        return redirect()->route('meetings.index');
    }

    public function update($meeting, Request $request)
    {
        $this->update($meeting->zoom_meeting_id, $request->all());

        return redirect()->route('meetings.index');
    }

    public function destroy(ZoomMeeting $meeting)
    {
        $this->delete($meeting->id);

        return $this->sendSuccess('Meeting deleted successfully.');
    }
}

So this is all you need to integrate zoom API, so easy 😊  Right. Enjoy the code. 
December 26, 20201 minuteauthorVishal Ribdiya
post

Introduction

How to maximize profits is on the minds of most business owners. There are only two ways to do this: increase prices or reduce costs. You cannot simply say that you are going to increase the profit of your business without a specific strategy. All you can do to increase profits is to improve the variables that ultimately determine your profitability. Consider the following strategies to make more money for you and your business in 2021.

1. Improve your website

People are using your website to research your company before doing business with you. Can you improve their experience and build their trust so they can use your product or service? There are four things you should clearly do on your website:
  • Explain who you are and what you sell
  • Entice a potential customer to buy
  • Make it easy to buy a product or service
  • There is a way to easily contact sales or customer support with questions

2. Invest in your business

At first glance, you would hesitate to put more money into your business. Especially when you’re trying to figure out how to make more money, not less. Often, especially in times of turmoil where new opportunities arise, the best decision is a short-term price for long-term payments.

3. Increase your advertising

You will not hesitate to spend money on advertising. Maybe you’ve been burned by a marketer in the past who promised results and didn’t get results. Or you tried advertising yourself, such as Facebook ads, and you don't think it works.

4. Raising prices

Both of these strategies are a thoughtful and unpleasant option in today’s economic environment. Still, sometimes, to stay in business, you need to raise prices. To determine the price, consider:
  • How much does it cost you to make a product
  • How much does it cost to deliver
  • Costs for running a business - including administration and employee salaries
  • Competitive price
  • The last time you raised a price
After reviewing this data, determine a possible reasonable price increase. Include any pricing data in your business plan so that if you choose to review it later, you can.
Next, deliver this increase to customers. Explain why you came to this decision. If there’s any way to add value to a product without cutting a profit, do it and let customers know they’re getting more.

5. Follow the 80/20 rule

The 80/20 rule is to focus your most important efforts on your most valued customers. The idea is that 20% of your customers usually bring in 80% of your revenue; These are the people you want to focus on.
On the flip side, 20% of your customers frequently present 80% of your problems. Identify those problem-customers and fire them to free up your time on more positive business activities.

6. Cut costs

One way to think about reducing costs is to consider the profit leverage effect (PLE). P.L.E. The idea is that every dollar saved in the production of goods or delivery of services adds a dollar profit to your bottom line without selling too much.
Check your current processes to reduce costs:
  • Are there areas where you can improve efficiency?
  • Negotiate cheap products or services?
  • Will adopting new software or renting a service save you money in the long run?
We will see more points in our next tutorial.
December 26, 20203 minutesauthorAnkit Kalathiya
post
We are recently developed a site into the gatsby. basically contact us feature is common in all website.
and we are implementing Mailchimp because it's a very popular platform in email market.

So, I will show you how to setup a Mailchimp in the Gatsby site.

## Using gatsby-source-mailchimp

Use your Mailchimp API key to download your campaigns into Gatsby’s GraphQL data layer!

Install the package by running the following command: `npm i gatsby-source-mailchimp --save`

### How to configure
Once the installation is complete, you can now add this plugin to your gatsby-config.js, like so:

Configure mailchimp Key and add this {resolve: `gatsby-source-mailchimp`} into the plugins array. code looks like

```
module.exports = {
  // ...
  plugins: [
    {
      resolve: 'gatsby-source-mailchimp',
      options: {
        // Avoid including your key directly in your file.
        // Instead, opt for adding them to .env files for extra
        // security ;)
        key: 'asd712jdas90122jdas90122jkadsd1-usXX',
        rootURL: 'https://usXX.api.mailchimp.com/3.0',
      },
    },
  ],
  // ...
}
```

Above is the minimal configuration required to have it work. By default,
This plugin was made out of a specific necessity, so it doesn't cover all of Mailchimp’s data sources, focusing only on campaigns.

this plugin are provide few options. you can refer here.

## Using `.env` variables to hide your key
If you don’t want to attach your API key to the repo, you can easily store it in .env files by doing the following:

```
// In your .env file
MAILCHIMP_KEY = 'asd712jdas90122jdas90122jkadsd1-usXX';
```

```
// In your gatsby-config.js file
require('dotenv').config({
  path: `.env.${process.env.NODE_ENV}`,
});

module.exports = {
  // ...
  plugins: [
    {
      resolve: 'gatsby-source-mailchimp',
      options: {
        key: process.env.MAILCHIMP_KEY,
        rootURL: 'https://usXX.api.mailchimp.com/3.0',
        // ...
      },
    },
  ],
  // ...
};
```


December 25, 20201 minuteauthorShailesh Ladumor
post
Hello, friend short cut way all people like. but remember a short cut is improved your self and save time it's a very good way. so in this blog learning the android studio shortcut key.use all short cut key and save time and performance improve 

image1.png 70.61 KB
Search Keys :


  • Shift+Shift — Search Every Where
  • Ctrl+F — Find Text within a Single File
  • Ctrl+Shift+F-Find Text in All Files
  • Ctrl+R — Replace Selected Text in a Single File
  • Ctrl+Shift+R — Replace Selected Text in all Files (Be Careful while Using This)
  • Ctrl+Shift+A —Search for IDE Commands
Navigation Keys  :

  • Ctrl+N — Navigate to Class
  • Ctrl+Shift+N — Navigate to a File
  • Ctrl+B — Jump to Declarations
  • Alt+ ↑ — Jump to the Previous Method
  • Alt+↓ — Jump to Next Method
  • Ctrl+G — Jump to Line
  • Ctrl+E — Recent Files
  • Ctrl+Shift+Back Space — Jump to Last Edited Location
  • Ctrl+B — Find Declarations
  • Ctrl+Left Mouse(or)Ctrl+Alt+F7— Show Usage
  • Alt + F7 / Ctrl + F7 — Find usages /Find usages in file
  • Ctrl+Shift+B — Find Implementations
  • F3 — Find Next
  • Shift+F3 — Find Previous
BookMark Keys :

  • F11 — Toggle bookmark
  • Ctrl+F11 — Toggle bookmark with the mnemonic(0–9 or A-Z)
  • Ctrl +(0–9) — Go to numbered bookmark
  • Shift+F11 — Show all Bookmarks
  • Ctrl + Shift + F7 — Highlight usages in file
Selection Keys :

  • Ctrl + W — Extend selection (selects a word->line->method->Class )
  • Ctrl +Shift+ W — Decrease Selection
  • Alt + J — Select next occurrence
  • Ctrl + Alt + Shift + J — Select all occurrences
  • Alt + Shift + J — Unselect occurrence
  • Ctrl+Shift+V — Paste from recent buffers (from a History of Copied Contents)
Editing Keys :

  • Ctrl+F6  — Refractor Code
  • Ctrl+D — Duplicate a Line/Selected part
  • Ctrl+Y — Delete a Line/Selected part
  • Ctrl+Q — Quick Documentation
  • Ctrl + Space — Code completion
  • Ctrl+Shift+Space — Smart code completion (by expected type removes unrelated suggestions)
  • Alt+Insert — Generate Code
  • Ctrl+J — Insert Live template
  • Ctrl + O — Override methods
  • Ctrl + I — Implement methods
  • Ctrl + Alt + T — Surround with…
  • Ctrl + / — Comment / uncomment with line comment
  • Ctrl + Shift + / — Comment / uncomment with block comment
  • Ctrl+Alt+L — Reformat code
Run  :

  • Ctrl + F9 — Compile and Run Make a project
  • Ctrl + Shift + F9 — Compile selected file, package or module
  • Shift + F10 — Run
  • Shift + F9 — Debug
  • Ctrl + Shift + F10 — Run context configuration from editor
Debugging  :

  • F8 / F7 — Step over / into
  • Shift + F7 / Shift + F8 — Smart step into/Step out
  • Alt + F9 — Run to cursor
  • Alt + F8 — Evaluate expression
  • F9 — Resume program
  • Ctrl + F8 — Toggle break point
  • Ctrl + Shift + F8 — View breakpoints

December 25, 20202 minutesauthorPankaj Valani
post
what is a SplashScreen?

A splash screen is a screen that appears when you open an app on your mobile device. So, we can say that it is the first impression for the user. It is commonly used to show an application logo or an image associated with an application.



















Implementation

So instead of using a layout file, we'll refer to the splash screen as the background of the activity theme. first, create an XML drawable splash_background.xml inside res/drawable folder in

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/white" />
    
    <item
        android:drawable="@drawable/ic_icon_vector"
        android:gravity="center" />

</layer-list>
 next step, set splash_groundground.xml as the background for your splash activity in the theme. Add a new splash to your splash activity.


<!-- Splash Screen theme. -->
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowBackground">@drawable/splash_background</item>
</style>
Add your theme to AndroidManifest.xml as your splash activity theme.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.exmple.splash">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme">
        
        <activity
            android:name=".SplashActivity"
            android:theme="@style/SplashTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Create a blank activity for SplashActivity.java without XML. This class will only redirect to MainActivity.java.

public class SplashActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startActivity(new Intent(SplashActivity.this, MainActivity.class));
        finish();
    }
}



December 25, 20201 minuteauthorVivek Beladiya