بایگانی دسته‌ی: دسته‌بندی نشده

محاسبه فاصله بین دو مختصات در نقشه با استفاده از API Google Maps

کلاس آموزش اندروید مشهد

محاسبه فاصله بین دو مختصات در نقشه با استفاده از API Google Maps

سلام دوستان .در این پست میخواهیم  مسافت بین دو مختصات نقشه را محاسبه کنیم. همچنین مسیر بین مختصاتهای داده شده را ترسیم خواهیم کرد.

قبل از اینکه این پست را دنبال کنید باید یک مروری روی آموزش برنامه Google maps داشته باشید.

ایجاد پروژه اندروید

  • اندروید استودیو را باز کرده ویک پروژه جدید ایجاد کنید. حالا باید اکتیویتی مپ (Activity Maps ) را انتخاب کنید.
  • همچنین به یک کلید API نیاز داریدکه شما میتوانید از کنسول توسعه دهنده اندروید بگیرید . ما یک کلید API برای اندروید داریم . اما برای اپلیکیشن محاسبه مسافت گوگل به یک کلید API برای سرور نیاز داریم.
  • به Google Maps Direction API بروید و روی GET A KEY کلیک کنید.

حالا پروژه خود را انتخاب کرده و روی ادامه کلیک کنید.

حالا به Credential جدید بروید و یک کلید سرور ایجاد کنید(فرض میکنیم که شما قبلا کلید اندروید را دارید)

کلید سرور  خودتان را یادداشت کنید و به پروژه خود در اندروید استودیو باز گردید.

اضافه کردن Google Maps Android API  و کتابخانه Volly

  • در این برنامه باید فاصله بین دو مختصات از نقشه را محاسبه کنیم .
  • باید یک درخواست Http برای گرفتن مسیر بین دو مختصات بفرستیم .
  • برای اینکارها از کتابخانه Volly استفاده میکنیم
  • پس به فایل gradle.build رفته و dependencies های زیر را اضافه میکنیم.
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.google.android.gms:play-services:8.3.0'

    compile 'com.google.maps.android:android-maps-utils:0.4+'

    compile 'com.mcxiaoke.volley:library-aar:1.0.0'
}

حالا به activity_maps.xml بروید و کد زیر را بنویسید.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MapsActivity">

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:map="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="net.simplifiedcoding.mymapapp.MapsActivity" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="bottom"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#cc3b60a7"
            android:orientation="horizontal">

            <Button
                android:id="@+id/buttonSetFrom"
                android:text="Set From"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <Button
                android:id="@+id/buttonSetTo"
                android:text="Set To"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />


            <Button
                android:id="@+id/buttonCalcDistance"
                android:text="Calc Distance"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />


        </LinearLayout>
    </LinearLayout>
</FrameLayout>
  • همانطور که میبینید تنها سه دکمه روی لایوت داریم و یک فرگمنت (fragment) برای نمایش نقشه داریم .دکمه ها برای تنظیم مختصات و محاسبه مسافت هستند .زمانی که کاربر مسافت را محاسبه کرد ما مسیر بین دو مختصات را نشان خواهیم داد.
  • پس به  MapsActivity.java بروید و کد زیر را بنویسید:
public class MapsActivity extends FragmentActivity implements
        OnMapReadyCallback,
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener,
        GoogleMap.OnMarkerDragListener,
        GoogleMap.OnMapLongClickListener,
        View.OnClickListener{

    //Our Map
    private GoogleMap mMap;

    //To store longitude and latitude from map
    private double longitude;
    private double latitude;

    //From -> the first coordinate from where we need to calculate the distance
    private double fromLongitude;
    private double fromLatitude;

    //To -> the second coordinate to where we need to calculate the distance
    private double toLongitude;
    private double toLatitude;

    //Google ApiClient
    private GoogleApiClient googleApiClient;

    //Our buttons
    private Button buttonSetTo;
    private Button buttonSetFrom;
    private Button buttonCalcDistance;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        //Initializing googleapi client
        // ATTENTION: This "addApi(AppIndex.API)"was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        googleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .addApi(AppIndex.API).build();

        buttonSetTo = (Button) findViewById(R.id.buttonSetTo);
        buttonSetFrom = (Button) findViewById(R.id.buttonSetFrom);
        buttonCalcDistance = (Button) findViewById(R.id.buttonCalcDistance);

        buttonSetTo.setOnClickListener(this);
        buttonSetFrom.setOnClickListener(this);
        buttonCalcDistance.setOnClickListener(this);
    }

    @Override
    protected void onStart() {
        googleApiClient.connect();
        super.onStart();
        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        Action viewAction = Action.newAction(
                Action.TYPE_VIEW, // TODO: choose an action type.
                "Maps Page", // TODO: Define a title for the content shown.
                // TODO: If you have web page content that matches this app activity's content,
                // make sure this auto-generated web page URL is correct.
                // Otherwise, set the URL to null.
                Uri.parse("http://host/path"),
                // TODO: Make sure this auto-generated app deep link URI is correct.
                Uri.parse("android-app://net.simplifiedcoding.googlemapsdistancecalc/http/host/path")
        );
        AppIndex.AppIndexApi.start(googleApiClient, viewAction);
    }

    @Override
    protected void onStop() {
        googleApiClient.disconnect();
        super.onStop();
        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        Action viewAction = Action.newAction(
                Action.TYPE_VIEW, // TODO: choose an action type.
                "Maps Page", // TODO: Define a title for the content shown.
                // TODO: If you have web page content that matches this app activity's content,
                // make sure this auto-generated web page URL is correct.
                // Otherwise, set the URL to null.
                Uri.parse("http://host/path"),
                // TODO: Make sure this auto-generated app deep link URI is correct.
                Uri.parse("android-app://net.simplifiedcoding.googlemapsdistancecalc/http/host/path")
        );
        AppIndex.AppIndexApi.end(googleApiClient, viewAction);
    }

    //Getting current location
    private void getCurrentLocation() {
        mMap.clear();
        //Creating a location object
        Location location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
        if (location != null) {
            //Getting longitude and latitude
            longitude = location.getLongitude();
            latitude = location.getLatitude();

            //moving the map to location
            moveMap();
        }
    }

    //Function to move the map
    private void moveMap() {
        //Creating a LatLng Object to store Coordinates
        LatLng latLng = new LatLng(latitude, longitude);

        //Adding marker to map
        mMap.addMarker(new MarkerOptions()
                .position(latLng) //setting position
                .draggable(true) //Making the marker draggable
                .title("Current Location")); //Adding a title

        //Moving the camera
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

        //Animating the camera
        mMap.animateCamera(CameraUpdateFactory.zoomTo(15));
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        LatLng latLng = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(latLng).draggable(true));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
        mMap.setOnMarkerDragListener(this);
        mMap.setOnMapLongClickListener(this);
    }

    @Override
    public void onConnected(Bundle bundle) {
        getCurrentLocation();
    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {

    }

    @Override
    public void onMapLongClick(LatLng latLng) {
        //Clearing all the markers
        mMap.clear();
        //Adding a new marker to the current pressed position
        mMap.addMarker(new MarkerOptions()
                .position(latLng)
                .draggable(true));

        latitude = latLng.latitude;
        longitude = latLng.longitude;
    }

    @Override
    public void onMarkerDragStart(Marker marker) {

    }

    @Override
    public void onMarkerDrag(Marker marker) {

    }

    @Override
    public void onMarkerDragEnd(Marker marker) {
        //Getting the coordinates
        latitude = marker.getPosition().latitude;
        longitude = marker.getPosition().longitude;

        //Moving the map
        moveMap();
    }

    @Override
    public void onClick(View v) {
        if(v == buttonSetFrom){
            fromLatitude = latitude;
            fromLongitude = longitude;
            Toast.makeText(this,"From set",Toast.LENGTH_SHORT).show();
        }

        if(v == buttonSetTo){
            toLatitude = latitude;
            toLongitude = longitude;
            Toast.makeText(this,"To set",Toast.LENGTH_SHORT).show();
        }

        if(v == buttonCalcDistance){
            //This method will show the distance and will also draw the path 
            calculateDistance();
        }
    }
}
  • تا اینجا میتوانیم دو مختصات نقشه را بگیریم . آخرین کارهایی که برای این برنامه باید انجام دهیم این است:

۱- باید فاصله بین دو مختصات را محاسبه کنیم.

۲- باید یک مسیر بین دو مختصات بکشیم.

  • با استفاده از Google Maps API Utility Library , محاسبه فاصله بسیار آسان است. میتوانیم از کد زیر برای محاسبه فاصله بین مختصاتها استفاده کنیم.
        //Getting both the coordinates 
        LatLng from = new LatLng(fromLatitude,fromLongitude);
        LatLng to = new LatLng(toLatitude,toLongitude);
        
        //Calculating the distance in meters 
        Double distance = SphericalUtil.computeDistanceBetween(from, to);
        
        //Displaying the distance 
        Toast.makeText(this,String.valueOf(distance+" Meters"),Toast.LENGTH_SHORT).show();
  • برای ترسیم مسیر بین مختصاتها نیاز به دانستن مسیر داریم . اینکار کمی مشکل است چون ما نیاز داریم که API  Google Maps Direction را صدا بزنیم.برای اینکار نشانی اینترنتی(URL) درخواستمانمان را ایجادخواهیم کرد. از کد زیر میتوانیم استفاده کنیم( SERVER-KEY رابا کلید سرور خودکه در اکانت توسعه دهنده گوگل (Google Developer’Account)ایجادکردید جایگزین  کنید.)
    public String makeURL (double sourcelat, double sourcelog, double destlat, double destlog ){
        StringBuilder urlString = new StringBuilder();
        urlString.append("https://maps.googleapis.com/maps/api/directions/json");
        urlString.append("?origin=");// from
        urlString.append(Double.toString(sourcelat));
        urlString.append(",");
        urlString
                .append(Double.toString( sourcelog));
        urlString.append("&destination=");// to
        urlString
                .append(Double.toString( destlat));
        urlString.append(",");
        urlString.append(Double.toString(destlog));
        urlString.append("&sensor=false&mode=driving&alternatives=true");
        urlString.append("&key=SERVER-KEY");
        return urlString.toString();
    }

متد بالا نشانی اینترنتی (URL)را به عنوان یک رشته به ما میدهد . ما باید  یک درخواست  نشانی اینترنتی (URL) بفرستیم  و در برگشت  JSON را دریافت خواهیم کرد.

  • برای فرستادن درخواست ما از Volly استفاده میکنیم.
    private void getDirection(){
        //Getting the URL
        String url = makeURL(fromLatitude, fromLongitude, toLatitude, toLongitude);

        //Showing a dialog till we get the route
        final ProgressDialog loading = ProgressDialog.show(this, "Getting Route", "Please wait...", false, false);

        //Creating a string request
        StringRequest stringRequest = new StringRequest(url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        loading.dismiss();
                        //Calling the method drawPath to draw the path
                        drawPath(response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        loading.dismiss();
                    }
                });

        //Adding the request to request queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }

این دو متد مسیر را روی نقشه ترسیم میکنند. ما اینرا از Stack Overflowگرفتیم.

    //The parameter is the server response
    public void drawPath(String  result) {
        //Getting both the coordinates
        LatLng from = new LatLng(fromLatitude,fromLongitude);
        LatLng to = new LatLng(toLatitude,toLongitude);

        //Calculating the distance in meters
        Double distance = SphericalUtil.computeDistanceBetween(from, to);

        //Displaying the distance
        Toast.makeText(this,String.valueOf(distance+" Meters"),Toast.LENGTH_SHORT).show();


        try {
            //Parsing json
            final JSONObject json = new JSONObject(result);
            JSONArray routeArray = json.getJSONArray("routes");
            JSONObject routes = routeArray.getJSONObject(0);
            JSONObject overviewPolylines = routes.getJSONObject("overview_polyline");
            String encodedString = overviewPolylines.getString("points");
            List<LatLng> list = decodePoly(encodedString);
            Polyline line = mMap.addPolyline(new PolylineOptions()
                            .addAll(list)
                            .width(20)
                            .color(Color.RED)
                            .geodesic(true)
            );


        }
        catch (JSONException e) {

        }
    }

    private List<LatLng> decodePoly(String encoded) {
        List<LatLng> poly = new ArrayList<LatLng>();
        int index = 0, len = encoded.length();
        int lat = 0, lng = 0;

        while (index < len) {
            int b, shift = 0, result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lat += dlat;

            shift = 0;
            result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lng += dlng;

            LatLng p = new LatLng( (((double) lat / 1E5)),
                    (((double) lng / 1E5) ));
            poly.add(p);
        }

        return poly;
    }

کد آخر از MapsActivity.java برای محاسبه مسافت خوهد بود.

package net.simplifiedcoding.googlemapsdistancecalc;

import android.app.ProgressDialog;
import android.graphics.Color;
import android.location.Location;
import android.net.Uri;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.android.gms.appindexing.Action;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;
import com.google.maps.android.SphericalUtil;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class MapsActivity extends FragmentActivity implements
        OnMapReadyCallback,
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener,
        GoogleMap.OnMarkerDragListener,
        GoogleMap.OnMapLongClickListener,
        View.OnClickListener{

    //Our Map
    private GoogleMap mMap;

    //To store longitude and latitude from map
    private double longitude;
    private double latitude;

    //From -> the first coordinate from where we need to calculate the distance
    private double fromLongitude;
    private double fromLatitude;

    //To -> the second coordinate to where we need to calculate the distance
    private double toLongitude;
    private double toLatitude;

    //Google ApiClient
    private GoogleApiClient googleApiClient;

    //Our buttons
    private Button buttonSetTo;
    private Button buttonSetFrom;
    private Button buttonCalcDistance;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        //Initializing googleapi client
        // ATTENTION: This "addApi(AppIndex.API)"was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        googleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .addApi(AppIndex.API).build();

        buttonSetTo = (Button) findViewById(R.id.buttonSetTo);
        buttonSetFrom = (Button) findViewById(R.id.buttonSetFrom);
        buttonCalcDistance = (Button) findViewById(R.id.buttonCalcDistance);

        buttonSetTo.setOnClickListener(this);
        buttonSetFrom.setOnClickListener(this);
        buttonCalcDistance.setOnClickListener(this);
    }

    @Override
    protected void onStart() {
        googleApiClient.connect();
        super.onStart();
        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        Action viewAction = Action.newAction(
                Action.TYPE_VIEW, // TODO: choose an action type.
                "Maps Page", // TODO: Define a title for the content shown.
                // TODO: If you have web page content that matches this app activity's content,
                // make sure this auto-generated web page URL is correct.
                // Otherwise, set the URL to null.
                Uri.parse("http://host/path"),
                // TODO: Make sure this auto-generated app deep link URI is correct.
                Uri.parse("android-app://net.simplifiedcoding.googlemapsdistancecalc/http/host/path")
        );
        AppIndex.AppIndexApi.start(googleApiClient, viewAction);
    }

    @Override
    protected void onStop() {
        googleApiClient.disconnect();
        super.onStop();
        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        Action viewAction = Action.newAction(
                Action.TYPE_VIEW, // TODO: choose an action type.
                "Maps Page", // TODO: Define a title for the content shown.
                // TODO: If you have web page content that matches this app activity's content,
                // make sure this auto-generated web page URL is correct.
                // Otherwise, set the URL to null.
                Uri.parse("http://host/path"),
                // TODO: Make sure this auto-generated app deep link URI is correct.
                Uri.parse("android-app://net.simplifiedcoding.googlemapsdistancecalc/http/host/path")
        );
        AppIndex.AppIndexApi.end(googleApiClient, viewAction);
    }

    //Getting current location
    private void getCurrentLocation() {
        mMap.clear();
        //Creating a location object
        Location location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
        if (location != null) {
            //Getting longitude and latitude
            longitude = location.getLongitude();
            latitude = location.getLatitude();

            //moving the map to location
            moveMap();
        }
    }

    //Function to move the map
    private void moveMap() {
        //Creating a LatLng Object to store Coordinates
        LatLng latLng = new LatLng(latitude, longitude);

        //Adding marker to map
        mMap.addMarker(new MarkerOptions()
                .position(latLng) //setting position
                .draggable(true) //Making the marker draggable
                .title("Current Location")); //Adding a title

        //Moving the camera
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

        //Animating the camera
        mMap.animateCamera(CameraUpdateFactory.zoomTo(15));
    }

    public String makeURL (double sourcelat, double sourcelog, double destlat, double destlog ){
        StringBuilder urlString = new StringBuilder();
        urlString.append("https://maps.googleapis.com/maps/api/directions/json");
        urlString.append("?origin=");// from
        urlString.append(Double.toString(sourcelat));
        urlString.append(",");
        urlString
                .append(Double.toString( sourcelog));
        urlString.append("&destination=");// to
        urlString
                .append(Double.toString( destlat));
        urlString.append(",");
        urlString.append(Double.toString(destlog));
        urlString.append("&sensor=false&mode=driving&alternatives=true");
        urlString.append("&key=SERVER-KEY");
        return urlString.toString();
    }

    private void getDirection(){
        //Getting the URL
        String url = makeURL(fromLatitude, fromLongitude, toLatitude, toLongitude);

        //Showing a dialog till we get the route
        final ProgressDialog loading = ProgressDialog.show(this, "Getting Route", "Please wait...", false, false);

        //Creating a string request
        StringRequest stringRequest = new StringRequest(url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        loading.dismiss();
                        //Calling the method drawPath to draw the path
                        drawPath(response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        loading.dismiss();
                    }
                });

        //Adding the request to request queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }

    //The parameter is the server response
    public void drawPath(String  result) {
        //Getting both the coordinates
        LatLng from = new LatLng(fromLatitude,fromLongitude);
        LatLng to = new LatLng(toLatitude,toLongitude);

        //Calculating the distance in meters
        Double distance = SphericalUtil.computeDistanceBetween(from, to);

        //Displaying the distance
        Toast.makeText(this,String.valueOf(distance+" Meters"),Toast.LENGTH_SHORT).show();


        try {
            //Parsing json
            final JSONObject json = new JSONObject(result);
            JSONArray routeArray = json.getJSONArray("routes");
            JSONObject routes = routeArray.getJSONObject(0);
            JSONObject overviewPolylines = routes.getJSONObject("overview_polyline");
            String encodedString = overviewPolylines.getString("points");
            List<LatLng> list = decodePoly(encodedString);
            Polyline line = mMap.addPolyline(new PolylineOptions()
                            .addAll(list)
                            .width(20)
                            .color(Color.RED)
                            .geodesic(true)
            );


        }
        catch (JSONException e) {

        }
    }

    private List<LatLng> decodePoly(String encoded) {
        List<LatLng> poly = new ArrayList<LatLng>();
        int index = 0, len = encoded.length();
        int lat = 0, lng = 0;

        while (index < len) {
            int b, shift = 0, result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lat += dlat;

            shift = 0;
            result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lng += dlng;

            LatLng p = new LatLng( (((double) lat / 1E5)),
                    (((double) lng / 1E5) ));
            poly.add(p);
        }

        return poly;
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        LatLng latLng = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(latLng).draggable(true));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
        mMap.setOnMarkerDragListener(this);
        mMap.setOnMapLongClickListener(this);
    }

    @Override
    public void onConnected(Bundle bundle) {
        getCurrentLocation();
    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {

    }

    @Override
    public void onMapLongClick(LatLng latLng) {
        //Clearing all the markers
        mMap.clear();
        //Adding a new marker to the current pressed position
        mMap.addMarker(new MarkerOptions()
                .position(latLng)
                .draggable(true));

        latitude = latLng.latitude;
        longitude = latLng.longitude;
    }

    @Override
    public void onMarkerDragStart(Marker marker) {

    }

    @Override
    public void onMarkerDrag(Marker marker) {

    }

    @Override
    public void onMarkerDragEnd(Marker marker) {
        //Getting the coordinates
        latitude = marker.getPosition().latitude;
        longitude = marker.getPosition().longitude;

        //Moving the map
        moveMap();
    }

    @Override
    public void onClick(View v) {
        if(v == buttonSetFrom){
            fromLatitude = latitude;
            fromLongitude = longitude;
            Toast.makeText(this,"From set",Toast.LENGTH_SHORT).show();
        }

        if(v == buttonSetTo){
            toLatitude = latitude;
            toLongitude = longitude;
            Toast.makeText(this,"To set",Toast.LENGTH_SHORT).show();
        }

        if(v == buttonCalcDistance){
            getDirection();
        }
    }
}

در نهایت برای این برنامه شما باید اجازه زیر را بهAndroidManifest.xml اضافه کنید.

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />

حالا میتوانید برنامه خود را اجرا کنید.

گزارش جلسه پنجم دوره متخصص PHP

آموزش PHP

جلسه پنجم دوره متخصص PHP  که یکی از کلاس های برنامه نویسی در مشهد  می باشد برگزار گردید و در این جلسه مباحث زیر آموزش داده شد : 

معرفی زبان قدرتمند PHP  و مزایای آن نسبت به سایر زبان های برنامه نویسی 

آموزش PHP

قابلیت های زبان PHP 

آموزش php در مشهد

شروه کد نویسی در با زبان PHP

دوره آموزش PHP

ساختار کد ها و پروژه های در زبان PHP 

آموزش طراحی سایت مشهد

امکاناتی که PHP  در اختیار برنامه نویس قرار می دهد

راه کار های اجرای پروژه ها با زبان PHP

دوره طراحی وبآموزش طراحی سایت مشهد  یکی دیگر از سرفصل های دوره متخصص PHP  می باشد . 

کسب درآمد از برنامه نویسی

کسب درآمد از برنامه نویسی

کسب درآمد از برنامه نویسی یکی از بهترین شیوه ها برای دست یافتن به درآمدهای عالی و موقعیت های شغلی مناسب می باشد. علاوه بر علاقه ای که بسیاری از افراد به زبان های مختلف برنامه نویسی دارند، یکی از اصلی ترین دلایل برای گرایش پیدا کردن به رشته برنامه نویسی درآمد و آینده شغلی آن می باشد. کسب درآمد از طریق برنامه نویسی تا حد زیادی به ویژگی های اخلاقی و میزان مهارت برنامه نویس و زبانی که به آن تسلط دارد بستگی خواهد داشت. در ادامه با گروه آموزش برنامه نویسی مشهد (آکادمی برنامه نویسان مشهد) همراه باشید تا روش های کسب درآمد از برنامه نویسی را شرح دهیم.

 

آینده شغلی و کسب درآمد از برنامه نویسی چطور است؟

به جرأت می توان گفت یکی از بهترین مشاغل در آینده، برنامه نویسی می باشد و این مساله نه تنها در ایران، بلکه در تمام کشورهای خارجی وجود دارد. آینده شغلی و کسب درآمد از برنامه نویسی با توجه به توسعه کسب و کارهای آنلاین و رشد چشمگیر اپلیکیشن های IOS و اندروید و نیاز به آنها برای بهره مندی از خدمات سازمان و شرکت های مختلف، کاملا روشن خواهد بود. البته، لازم به ذکر است که میزان درآمد برنامه نویسی به کشوری که در آن حضور دارید بستگی داشته و مقدار درآمد ثابت نیست.

 

عوامل مهم در کسب درآمد از طریق برنامه نویسی

با نگاهی گذرا به میزان درآمدی که برنامه نویسان مختلف در طول ماه و یا سالانه کسب می کنند، متوجه خواهید شد که نوسان زیادی در درآمدهای آنها وجود دارد. به طوریکه برخی از برنامه نویسان درآمدهای میلیاردی داشته و برخی ممکن است کمتر از دو میلیون در ماه درآمد داشته باشند. شاید برایتان جالب باشد که دلیل اصلی این تفاوت ها در چیست؟ مهم ترین فاکتورهای موثر در میزان درآمد از طریق برنامه نویسی شامل موارد زیر می باشند:

 

زبان برنامه نویسی

زبان های برنامه نویسی از تنوع بسیار بالایی برخوردار می باشند و هر یک دارای ویژگی های خاصی هستند. نوع زبان برنامه نویسی که به آن تسلط دارید، تاثیر زیادی بر میزان درآمد از طریق برنامه نویسی دارد. به عنوان مثال، شاید تسلط داشتن به زبان برنامه نویسی ویژوال بیسیک می تواند درآمد خوبی را برایتان فراهم کند، اما بدون شک کسب درآمد از طریق برنامه نویسی اندروید و ios از آن بیشتر خواهد بود. در نتیجه برای داشتن درآمد بالا از برنامه نویسی، در مرحله اول باید بتوانید با توجه به کشوری که قصد فعالیت در آن دارید، زبان مورد نظر را انتخاب کنید.

بر اساس آمار و ارقام بدست آمده، برای کسب درآمد از برنامه نویسی در ایران می توانید زبان های مانند اندروید، IOS ، PHP ، پایتون، جاوا اسکریپت، C++، لاراول و طراحی سایت با وردپرس از بالاترین سطوح درآمد برخوردار می باشند.

 

میزان تخصص در برنامه نویسی

بعد از انتخاب زبان برنامه نویسی مورد نظر که بتواند زمینه کسب درآمد خوبی را برایتان فراهم کند، لازم است مهارت و تخصص کافی در این زمینه داشته باشید. از مهم ترین فاکتورهایی که می تواند بر میزان درآمد از طریق برنامه نویسی اثر داشته باشد، مهارت های شما در استفاده از آن زبان می باشد.

به عنوان مثال اگر به عنوان یک برنامه نویس PHP قصد دارید به درآمد خوبی دست پیدا کنید، لازم است مهارت کافی برای استفاده از دیتابیس های مختلف و سرور داشته باشید. تسلط داشتن بر جاوااسکریپت، تسلط بر لاراول، لینوکس، Nodejs و همچنین آشنایی با HTML و CSS3 از دیگر مواردی می باشند که زمینه موفقیت و درآمد بیشتر را برایتان فراهم خواهند نمود.

برای درک بهتر آنچه لازم است شما به عنوان یک فرد حرفه ای برای کسب درآمد از طریق برنامه نویسی داشته باشید، پیشنهاد می کنیم آگهی های استخدام در سایت های مختلف را مطالعه کنید. با کمی جستجو در این سایت ها مانند جاباینجا، جاب ویژن و کارلیب کاملا متوجه خواهید شد که کدام زبان های برنامه نویسی با چه مهارتهایی بیشتر مورد نیاز بازار کار می باشند.

 

درآمد فریلنسر یا شغل ثابت برنامه نویسی

فعالیت در دنیای امروز با گذشته تفاوت های زیادی پیدا کرده است، به طوریکه امروزه اغلب فعالان در حوزه برنامه نویسی، سئو، گرافیک و غیره به دنبال فعالیت های فریلنسری هستند. فریلنسر در واقع به فردی گفته میشود که استخدام جای خاصی نیست و به صورت آزاد فعالیت دارد. بهترین شیوه برای کسب درآمد از طریق برنامه نویسی، فریلنسری می باشد که البته مشکلاتی مانند عدم تضمین شغلی و حق بیمه و غیره را به همراه دارد. در مقابل، می توان به صورت آزاد و بدون محدودیت همزمان بر روی چند پروژه فعالیت داشت.

با استخدام در شرکت های برنامه نویسی نیز می توان به درآمد خوبی دست پیدا کرد. البته میزان درآمد از طریق برنامه نویسی برای شرکت ها در مرحله اول به نوع شرکت و میزان اعتبار آنها بستگی دارد. فعالیت در این شرایط باعث میشود تا امنیت شغلی داشته باشید و در مقابل، فرصت فعالیت بر روی پروژه های دیگر را به صورت دورکار نخواهید داشت. درآمد از طریق برنامه نویسی در شرکت ها در بازه ۳ تا حداکثر ۱۰ میلیون می باشد، اما در فریلنسری می توانید به درآمدهای بسیار بالاتری دست پیدا کنید.

 

کشور و شهر محل سکونت

شهر و کشوری که در آن فعالیت دارید به شدت بر میزان درآمدتان تاثیرگذار خواهد بود. کشور محل فعالیتتان نه تنها بر نوع زبان برنامه نویسی اثر دارد، بلکه در درآمدهای آن نیز موثر است. در داخل ایران نیز درآمدی که برنامه نویسان در تهران بدست می آورند، خیلی بیشتر از شهرستان ها می باشد. البته در چند سال اخیر که اغلب برنامه نویسان به دورکاری گرایش پیدا کرده اند، می توان گفت نقش شهر محل سکونت بر میزان درآمد برنامه نویسی در حال کم رنگ شدن اشت.

 

بهترین راه ها برای کسب درآمد از برنامه نویسی

بعد از آشنایی با عوامل موثر در میزان حقوق برنامه نویسی و درآمدی که می توانند کسب کنند، لازم است با چند راهکار مناسب برای رسیدن به درآمدهای بالا آشنا شوید. از بهترین روش های کسب درآمد با برنامه نویسی می توان به موارد زیر اشاره نمود:

 

کسب درآمد با آموزش برنامه نویسی

بعد از مدتها فعالیت در زمینه برنامه نویسی و کسب تجربه در این زمینه، توانایی این را بدست خواهید آورد تا به دیگران آموزش دهید. تولید محتوای متنی و به اشتراک گذاشتن تجربیاتتان در انجام پروژه های مختلف و آموزش طراحی سایت و زبان های برنامه نویسی مختلف در وبلاگ و یا سایت های شخصی می تواند زمینه ساز درآمد های چند میلیونی در آینده باشند. اگر تنها محتوای متنی جذاب و کاربردی تولید کنید، در آینده می توانید بر روی سایت خود تبلیغات انجام دهید و از این طریق درآمد خوبی کسب کنید.

علاوه براین، تولید محتوای ویدئویی رایگان و پولی از دیگر روش های بسیار مناسب برای کسب درآمد از طریق برنامه نویسی می باشند که نباید از آن غافل شد. البته می توان برگزاری کلاس و دوره های حضوری و آنلاین را نیز در راستای فعالیت های خود قرار داد و در کنار انجام سایر فعالیت ها، از این طریق نیز درآمد کسب کرد. سایت های زیادی هستند که می توانید برای فروش فایل های آموزشی متنی و تصویری از آنها استفاده کنید، مانند فرادرس.

از مزایای این شیوه کسب درآمد این است که شما به صورت غیرمستقیم در واقع توانایی هایتان را به دیگران معرفی می کنید. افراد زیادی هستند که در این شرایط برای انجام پروژه های مختلف تمایل خواهند داشت تا به شما سفارش انجام کار دهند.

 

طراحی و پیاده سازی اپلیکیشن های اندروید و IOS

از دیگر روش های کسب درآمد با برنامه نویسی که در چند سال اخیر به شدت مورد توجه قرار گرفته است، طراحی اپلیکیشن های اندروید و IOS می باشد. علاوه بر طراحی و پیاده سازی اپلیکیشن برای شرکت های مختلف، می توانید با ایده پردازی خودتان نیز برنامه های کاربردی درآمدزایی را طراحی کنید. در نهایت این برنامه ها را می توانید از طریق کافه بازار، مایکت، سیب ایرانی و غیره به فروش برسانید.

برای کسب درآمد از طریق طراحی اپلیکیشن چند روش وجود دارد که از بهترین آنها می توان به موارد زیر اشاره نمود:

  • انجام تبلیغات بنری بر روی اپلیکیشن
  • دریافت مبلغ تعیین شده از قبل برای دانلود و نصب برنامه
  • دریافت مبالغ درون برنامه ای برای استفاده از خدمات و سرویس های بیشتر اپلیکیشن
  • ایده پردازی و راه اندازی استارت آپ

از موفق ترین افراد در زمینه کسب درآمد از برنامه نویسی می توان به آن دسته از برنامه نویسانی اشاره کرد که ذهن های خلاق داشته و استارت آپ های موفقی را راه اندازی کرده اند. به عنوان مثال، تپسی و اسنپ از بهترین نمونه ها در این زمینه می باشند که درآمدهای بسیار زیادی را با راه اندازی اپلیکیشن های تاکسی آنلاین به دست آوردند. از دیگر نمونه ها می توان به سایت های بسیار نام آشنا مانند پونیشا اشاره کرد که نه تنها برای کسب درآمد از طریق فریلنسرها مناسب است، بلکه خود نیز از این طریق به درآمد بسیار بالایی دست پیدا میکند.

 

انجام پروژه های دورکار

شرکت ها و افراد مختلفی هستند که برای پروژه های مختلف خود نیاز به برنامه نویسان حرفه ای دارند. همیشه افراد زیادی هستند که ذهن های خلاق دارند اما توانایی اجرای ایده های خود را نداشته و به دنبال حرفه ای ها در این حوزه هستند. شما به عنوان یک برنامه نویس باید بتوانید این گروه از افراد را شناسایی و با انجام پروژه های دورکار به درآمد خوبی دست پیدا کنید. البته، پیشنهاد می کنیم که از انجام پروژه های دانشجویی در سطوح مختلف تحصیلی غافل نشوید. چون بازار درآمد از این طریق بسیار داغ بوده و بدون داشتن تخصص بالا می توان منبع درآمد خوبی برایتان باشند.

 

طراحی قالب و افزونه های وردپرس

طراحی قالب و افزونه های متنوع و کاربردی برای وردپرس از دیگر موارد بسیار عالی برای کسب درآمد از طریق برنامه نویسی می باشد. بعد از طراحی قالب و افرونه های خود می توانید آنها را از طریق سایت های مختلف مانند ژاکت به فروش برسانید.

 

بهترین روش آماده شدن برای کسب درآمد از برنامه نویسی

برای رسیدن به پله های موفقیت، لازم است گام های اولیه با دقت برداشته شوند. به عبارت دیگر، برای رسیدن به موفقیت در حوزه برنامه نویسی لازم است از تجربه افراد حرفه ای در این حوزه استفاده کنید تا با پایه قوی و سرعت عمل بیشتر زودتر به بالاترین پله ها دست پیدا کنید. آکادمی برنامه نویسان مشهد با برگزاری دوره های حضوری و غیرحضوری آموزش برنامه نویسی اندروید، برنامه نویسی PHP و سایر زبان ها می تواند زمینه ساز کسب درآمد از طریق برنامه نویسی در آینده نه چندان دور باشد. برای اطلاع از شرایط حضور و یا خریداری دوره های آموزشی این مجموعه می توانید از راه های ارتباطی پایین صفحه استفاده نمایید.

 

چگونه برنامه نویسی را شروع کنیم ؛ ۸ گام برای ساخت اپلیکیشن از ابتدا

چگونه برنامه نویسی را شروع کنیم

  • بهترین روش برای یادگیری کد نویسی چیست؟
  • چگونه تبدیل به یک برنامه نویس شویم؟
  • چطور یک برنامه بنویسیم؟

اینها از جمله پرسش هایی هستند که اغلب مبتدیان مشتاق به برنامه نویسی می پرسند و بدون شک شما نیز درباره ی این موضوع جستجوهایی را در اینترنت داشته اید. اما اگر شما درباره ی این سوالات جستجو نکرده، لازم است بدانید که ما در ادامه ۳ گام را برای پاسخ دادن به این سوالات معرفی می کنیم:

  • مرحله اول: زبان برنامه نویسی انتخاب کنید
  • مرحله ۲: زبان برنامه نویسی را بیاموزید
  • مرحله ۳: یک برنامه بنویسید و دانشتان را از این طریق در ذهن ثبت کنید.

جواب های زیادی برای مراحل ۱ و ۲ وجود دارد و با جستجوی ساده در اینترنت با آنها مواجه خواهید شد.

تمام مبتدیان برنامه نویسی برای شروع کار و ایجاد یک برنامه دچار سردرگمی هستند و این یک مساله ی کاملا طبیعی می باشد. بدون شک با جستجو در اینترنت آموزش های برنامه نویسی زیادی برای ایجاد برنامه هایی مانند پینترست، اینستاگرام، توئیتر و غیره وجود دارد که با تکنولوژی های مختلف انجام شده اند. اما مساله ی مهمی که در اینجا وجود دارد، این است که درک کد و منطق آنها برای برنامه نویسان کمی سخت است.

در ادامه ی این مطلب از آکادمی برنامه نویسان سعی می کنیم فرآیند  شروع و ایجاد طرح اولیه تا ساخت برنامه را برایتان ارائه دهیم.

پیش نیازها ی چگونه برنامه نویسی را شروع کنیم

اکثر برنامه ها به یک پایگاه داده نیاز دارند و در نتیجه اگر قصد دارید یک برنامه ی جدید را برای خودتان بسازید، به احتمال زیاد به زبان پرس و جوی پایگاه داده (SQL) نیاز خواهید داشت. مگر اینکه برنامه ای داشته باشید که نیاز به برقراری ارتباط با sql نداشته باشد، مانند flappy bird.

علاوه براین، اگر به دنبال ساخت برنامه برای وب هستید، در نتیجه نیاز دارید تا اساس DevOps را بشناسید و برای ایجاد محیط client/server و توسعه ی آن قادر به اجرای برنامه در محیط واقعی باشید.

در شرایطی که فقط قصد دارید به عنوان یک front-end توسعه دهنده وب فعالیت داشته باشید، HTML، CSS، جاوا اسکریپت و داشتن مهارت در codepen یا JSfiddle برایتان ضروری می باشد. در شرایطی که فقط به جاوا اسکریپت مسلط هستید و نمی خواهید زبان برنامه نویسی دیگری را یاد بگیرید، می توانید node.js را امتحان کنید، چون این پلت فرم جاوا اسکریپت برای back-end می باشد (علاوه براین، می توانید از MongoDB به عنوان پایگاه داده استفاده کنید چون بر اساس جاوا اسکریپت می باشد)

در غیر این صورت، اگر میخواهید یک برنامه وب کامل را ایجاد کنید، باید یکی از زبان های زیر را یاد بگیرید:

  • RUBY
  • پایتون
  • PHP
  • Java
  • GO
  • C#

در شرایطی که می خواهید بازی بسازید، نیاز به یادگیریLua می باشد، هر چند که c# یک انتخاب عالی برای ساخت بازی های سه بعدی می باشد. برای توسعه ی اپلیکیشن های تلفن همراه شما نیاز  دارید swiff/objective-c را برای توسعه ی ios و جاوا را برای برنامه نویسی اندروید بیاموزید.

گام اول: خودتان را بشناسید

مهم ترین مرحله در همان ابتدا شناخت علاقه مندی هایتان می باشد. با توجه به اینکه داشتن علاقه به یک کار مهم ترین عامل در ایجاد انگیزه می باشد، در نتیجه همان ابتدا از خودتان بپرسید که چه کاری را دوست دارید.

برای مثال:

  • از کدام برنامه ها بیشترین استفاده را میکنید؟
  • بدون کدام برنامه ها نمی توانید زندگی کنید؟
  • آیا به بازی علاقه مند هستید؟
  • آیا به طراحی علاقه مند هستید؟
  • و غیره

بعد از شناسایی علایق، می توانید تصمیم بگیرید که به چه چیزی علاقه مند هستید و از چه کاری لذت میبرید.

مرحله ۲: ایده پردازی کنید

بعد از اینکه توانایی های لازم را در خود بدست آوردید، حال زمان این میرسد تا برای خودتان یک ایده انتخاب کنید. شروع آن بسیار ساده است.

در اینجا منظور این نیست که اگر برای مثال میخواهید یک بازی بسازید، counterstike بعدی را طراحی کنید، بلکه شما باید یک بازی ساده تر از flappy bird را طراحی و بسازید.

بنابراین، بر اساس علایقتان و ایده ای که برای ساخت یک برنامه ساده در ذهن دارید کار را شروع کنید. اصلا مهم نیست که برنامه قبلا وجود داشته یا خیر.

در ادامه چند مثال ارائه می دهید که این موضوع و ایده پردازی را برایتان آسان تر کند:

  • اگر به آشپزی علاقه مند هستید، یک برنامه که دستور پخت غذاهای خانگی را آموزش دهد می تواند ایده ی خوبی باشد
  • اگر علاقه مند هستید که توییتر چطور کار میکند، سعی کنید یک نمونه ی بسیار ساده از توییتر را بسازید
  • اگر فردی بسیار فراموش کار هستید، سعی کنید یک برنامه برای خودتان بسازید
  • اگر به کارت بازی علاقه مند هستید، سعی کنید یک نمونه ی ساده از آن را بسازید

برنامه نویسی اندروید

۳- قابلیت های اصلی برنامه تان را لیست کنید

اگر به فکر ساخت یک برنامه هستید، قابلیت ها و توانایی های آن را لیست کنید. با قرار گرفتن قابلیت ها در یک لیست باعث میشود تا نگاه بهتری به برنامه داشته باشید و موارد غیر ضروری را حذف کنید. برای مثال می توانید مشخص کنید که آیا برنامه ی شما واقعا نیاز به ورود به فیسبوک دارد یا خیر؟

خیلی خوب است که برنامه تان کامل باشد و تمام قابلیت های عالی را داشته باشد، اما برای شروع کار خیلی ضروری نیست و باید با نمونه های ساده شروع به کار کنید. هیچ وقت سعی نکنید یک برنامه همه جانبه داشته باشید. مگر اینکه واقعا علاقه ی زیادی به چالش داشته باشید و با سختی ها دلسرد نشوید.

برای مثال در ساخت برنامه های مانند Reddit ویژگی های زیر ضروری می باشند:

  • ایجاد حساب کاربری
  • بازیابی رمزهای عبور
  • تغییر رمز عبور
  • ارسال لینک های جدید
  • ارسال نظر روی لینک
  • افزایش یا کاهش لینک
  • داشتن پروفایل برای نمایش history/activity

اما در مقابل ویژگی های زیر ضروری نیست و برای ساخت اولین برنامه ها غیرضروری هستند.

  • اشتراک گذاری مطالب در شبکه های اجتماعی
  • حذف نظرات
  • ویرایش نظرات
  • حذف حساب کاربری

قابلیت های جدید را می توانید در نسخه های بعدی با بروزرسانی اضافه کنید.

آموزش برنامه نویسی در مشهد

۴- طراحی برنامه

بعد از داشتن ایده و مشخص بودن قابلیت های برنامه، باید بتوانید با کاغذ و قلم خیلی سریع ui برنامه را طراحی کنید و مشخص کنید که کدام دکمه ها و در کجای برنامه باید وجود داشته باشند.

مدام یادداشت کنید و طرح را تغییر دهید تا زمانیکه کاملا بتوانید از طرح نهایی راضی شوید. البته بخاطر داشته باشید که، طرح کاملا ساده باشد.

آموزش برنامه نویسی اندروید در مشهد

۵- فلوچارت جریان کاری برنامه را رسم کنید

خیلی خوب و مهم است که بدانید برنامه تان چه چیز هایی لازم دارد و چه عناصری برای آن لازم می باشد و کاربران چطور با آن ارتباط برقرار می کنند. فلوچارت ui در اینجا یعنی اینکه کاربر چطور باید از ابتدا تا آخر از برنامه استفاده کند. برای هر گام نمودار را رسم کنید و سناریوهای مختلف را ترسیم کنید.

برنامه نویسی در مشهد

۶- پایگاه داده طراحی کنید

بعد از طراحی سناریوهای مختلف، حال باید بتوانید مشخص کنید که در هر گام چه نوع اطلاعاتی را نیاز دارید که نگهدارید. برای مثال، اگر برنامه نیاز به ایجاد حساب کاربری دارد، لازم است تا اطلاعاتی مانند نام کاربری و رمز عبور و غیره همگی ذخیره شوند تا کاربر بتواند با آن وارد برنامه شود.

برای برنامه هایی که نیاز دارید تا با سرور ارتباط برقرار کنید (به عنوان مثال یک برنامه کامل تحت وب fullstock)) یا اگر برنامه تان با یک API ارتباط برقرار می کند (مثلا بخواهید اطلاعات را از Yahoo weather دریافت کنید) حتما باید نمودار توالی را رسم کنید تا نحوه ی عملکرد هر فعالیت را شناسایی نمایید.

طراحی ux

UX Wireframe

تا این قسمت از کار، بر روی back end تمرکز داشتید و حالا باید بتوانید به front end نیز دقت کنید. با توجه به اینکه انسان ها موجوداتی بصری هستند، در نتیجه لازم است تا زمان بیشتری را برای درک اینکه چه کاری باید انجام دهید تا دید بصری داشته باشید، اختصاص دهید. خوشبختانه ابزارهای زیادی موکاپ و wireframing برای کمک به رسم جریان UX/UIبه صورت آنلاین وجود دارد (برای مثال framebox, mockflow, Gliffy و غیره)

گام ۶٫۵ (اختیاری): طراحی UI

این گام کاملا اختیاری می باشد و در توسعه ی برنامه در سمت front end به صورت حرفه ای تر می تواند موثر باشد. علاوه بر این، با این گام می توانید متوجه شوید که برنامه بعد از تبدیل شدن به اپلیکیشن نهایی چطور بنظر میرسد و در نتیجه راحت تر می توانید کدنویسی کنید.

اگر قصد دارید طراحی رابط کاربری را انجام دهید، به احتمال زیاد این کار را قبل از انجام هرکاری شروع خواهید کرد. این کار در مرحله ۲ نیز انجام خواهد شد

اگر تا بحال طراحی انجام نداده اید و قصد دارید بدانید که برنامه تان در نهایت چه ظاهری خواهد داشت، می توانید از کیت های ui استفاده کنید. پیشنهاد می کنیم ظاهر کار را زیاد پیچیده نکنید و بیشتر تمرکزتان بر روی ایجاد توابع سازنده باشد.

گام ۷: تحقیق برای بهترین راه حل

بعد از طی مراحل قبلی، حال باید بتوانید بیاموزید که چطور کدگذاری کنید؟ شما به عنوان یک برنامه نویس باید یاد بگیرید که چطور باید ارزیابی کنید و تصمیم بگیرید که چه زمانی باید از کدی که توسعه دهندگان دیگر ایجاد کرده اند، استفاده نمایید و چه زمانی خودتان یک تابع جدید بسازید.

از آنجا که هر شخص یک برنامه منحصر به فرد ایجاد میکند، در نتیجه نمی توان تمام آنها را در جای دیگر استفاده نمود و این شما هستید که باید تصمیم بگیرید چه موقع و از کدام راه حل موجود باید استفاده نمایید و چه زمانی خودتان باید کد را ایجاد کنید.

به دنبال راه حل باشید

به نموداری که در مرحله دو کشیدید نگاه کنید. چه چیزهایی در این نمودار وجود دارند که اصلا به نحوه ی ساخت آنها فکر نمیکنید؟

برای مثال، آیا کاربر نیاز به ایجاد حساب کاربری دارد؟ آیا برنامه نیاز به بروزرسانی در زمان واقعی دارد؟

در بسیاری از مواقع، بهترین کار استفاده از توابع بروزرسانی در زمان واقعی (مانند firebase)، مسیریابی/شبکه (مانند AFNetworking برای ios)، احراز هویت و قطعات مرتبط با رابط کاربری می باشد (مانند flipboard یا pintrerest-esque)

بسیاری از پایگاه داده های آنلاین برای جستجوی عناصر/قطعات/ پکیج های مرتبط با backend وجود دارد، اما لازم است تا شما با دقت چیزهایی که دیگران نوشته اند را ارزیابی کنید، نه اینکه به صورت کورکورانه از آنها استفاده نمایید.

در هر صورت، بهترین کار مطالعه ی کارها و روش هایی می باشد که سایر توسعه دهندگان قبلا استفاده نموده اند. برای این منظور می توانید از github استفاده کنید.

انتخاب ابزار برای شروع

اگر شما در حال ساخت یک برنامه تحت وب هستید، شاید بتوانید yeoman را به منظور کمک در سرعت بخشیدن به پروژه استفاده نمایید.

اگر در حال ساخت یک برنامه React هستید، میتوانید از کیت های استارتر موجود در پیاده سازی های FLUX استفاده نمایید.HTML5Boilerplate و Bootstrap قالب های رایج Front end برای برنامه ی شما محسوب میشوند. در اغلب موارد Boilerplate از Glup یا Grunt برای مدیریت وظایف استفاده میکند.

از آنجا که به احتمال زیاد میخواهید با استفاده از برخی قطعات موجود با راه حل ها استفاده کنید، در نتیجه باید اجازه ی نصب مرورگر داده شود تا وابستگی ها مدیریت گردند (np برای کسانی که از node.js استفاده می کنند و cocoaPods برای توسعه دهندگان ios). نگران نباشید، اغلب این ابزارها به شما روش نصب را آموزش می دهند.

گام هشتم: ساخت برنامه

در این مرحله شما آماده هستید تا برنامه مورد نظرتان را بسازید. اما چند نکته وجود دارد که باید رعایت کنید.

برنامه نویسی اندروید مشهد

چک لیست تهیه کنید

شما باید بر روی توابع اصلی برنامه تمرکز داشته باشید. بنابراین، اگر با یکی از کارهای مانند سیستم نظر سنجی کار نمیکند، نباید بلافاصله شروع به ساخت یک پروفایل view کنید. به عبارت دیگر، اگر شما در حال ساخت یک فرم هستید، باید روی کدهای سمت front و back end به صورت همزمان کار کنید تا زمانیکه کار به طور کامل انجام شود.

به طور خلاصه می توان گفت، از کارهایی که باید انجام شود چک لیست تهیه نمایید.

اول تست کنید

به استثنای ساخت بازی، بهترین کار در ساخت برنامه ها،تست توابع قبل از اینکه بخشی از کد نهایی گردد، خواهد بود. اشتباهات بخش جدایی ناپذیر در کار می باشند و تست تا حد زیادی اشتباهات شما را کاهش داده و شانستان را برای تهیه ی محصول بدون باگ افزایش می دهد.

بنابراین این یک ایده ی خوب می باشد که کارهای کوچک را شروع کنید و به انجام دادن تست توسعه (TDD) عادت کنید؛ مخصوصا زمانی که تازه کار هستید.

ابزارهای تست زیادی برای این منظور وجود دارند، مانند Jasmine یا karma برای جاوا اسکریپت، Rspec برای Ruby، PyTest برای پایتون، PHPUnit برای PHP و Quick به عنوان یک جایگزین xctest برای توسعه دهندگان ios

علاوه براین، اگر در حال ساخت یک برنامه ios یا اندروید هستید، استفاده از Crashlytics یک ایده ی خوب می باشد.

از گیت استفاده کنید

Git یک سیستم کنترل نسخه می باشد که مخزن کاملی از تغییرات موجود بر روی برنامه می باشد که قابلیت ردیابی کامل تغییرات را دارد. بهترین کار در همان ابتدای شروع برنامه نویسی، یادگیری نحوه ی کار با گیت می باشد. با استفاده از گیت می توانید براحتی اشتباهاتتان را اصلاح کنید و داده های از دست رفته را بازیابی نمایید. علاوه براین، اگر قصد دارید به صورت گروهی روی یک برنامه کار کنید، استفاده از گیت ضروری می باشد. github محبوب ترین سرویس میزبانی از مخزن git برای پروژه های منبع باز می باشد و Bitbucket برای مخازن خصوصی مورد استفاده قرار میگیرد.

گوگل

در گام ۷ به google-fu اشاره کردیم، اما دوباره باید بگوییم که یادگیری اینکه گوگل یک مهارت مهم برای برنامه نویسان می باشد بسیار ضروری است. اگر در یک قطعه از کد با مشکل برخورد کرده باشید، اما ندانید که چطور آن را برطرف کنید، گوگل بهترین راه حل خواهد بود.

در stackoverflow سوال بپرسید

به احتمال بسیار زیاد، در حین جستجو برای پاسخ سوالات با stackoverflow برخورد کرده اید. یکی از بهترین راه ها برای دست یافتن به جواب سوالاتتان، بدون شک سوال پرسیدن در stackoverflow خواهد بود.

مربی آموزش برنامه نویسی پیدا کنید

بسیاری از افراد معتقدند که stackoverflow برای مبتدیان زیاد مناسب نیست، زیرا مبتدیان نمی دانند که چطور باید سوالات خود را بیان کنند. اما راه حل چیست؟

در این شرایط، هیچ چیز به اندازه ی استفاده از برنامه نویس با تجربه نمی تواند راه را برایتان آسان کند. در نتیجه بهتر است در جلسات زنده در Codementor، استفاده کنید که نرخ هر مربی ۱۵ دلار در دقیقه می باشد. در طول این جلسات می توانید از چت ویدئویی با توسعه دهندگان با تجربه تبادل نظر کنید و کدهای خود را با آنها به اشتراک گذاشته و آنها نحوه ی اصلاح و تغییر در کد را به شما آموزش خواهند داد.

سخن آخر چگونه برنامه نویسی را شروع کنیم ?

برنامه نویسان در هر لحظه و زمان ممکن است دچار اشتباه شوند و نباید به برخورد با اولین خطا در مراحل تست ناامید شوید و باید بتوانید به آنها مسلط گردید. ممکن است ساعتها و یا روزها را صرف برنامه نویسی کنید و نباید خسته شوید و فراموش نکنید که شما یک فرد مبتدی در این زمینه هستید و راه دشوار است، اما با کسب تجربه می توانید به مرور موفقیت های زیادی را بدست آوردید.

۱۵ نکته برای رشد کسب و کار آنلاین بدون نیاز به پول زیاد

اگر بدنبال شروع یا توسعه ی کسب درآمد اینترنتی بدون نیاز به صرف هزینه های زیاد هستید، در این مقاله چندین راهکار عملی را پیشنهاد می دهیم. هدف در این مطلب این است تا بدون صرف هزینه های زیاد بتوانید با رقبای خود براحتی به رقابت بپردازید و کسب و کار آنلاین موفقی را راه اندازی کنید.

کسب درآمد اینترنتی

بستر مناسبی برای وب سایت خود انتخاب کنید

یکی از بزرگترین اشتباهات در راه اندازی کسب و کارهای آنلاین، انتخاب پلت فرم یا بستر نامناسب برای ساخت وب سایت می باشد. با انتخاب بستر نامناسب نه تنها از نظر اقتصادی باید ضرر زیادی را متحمل شوید، بلکه پتانسیل رشد اقتصادی تان محدود خواهد شد.

یکی از محبوب ترین و بهترین پلت فرم ها برای طراحی سایت مشهد و راه اندازی کسب و کار آنلاین، وردپرس می باشد که بیش از ۳۱ درصد از وب سایت های دنیا (کسب و کارهای کوچک و بزرگ) از آن استفاده می کنند. البته در اینجا منظور wordpress.org هست نه wordpress.com.

برای راه اندازی یک وب سایت وردپرسی ، در ابتدا به یک نام دامنه و کاربری میزبانی وب نیاز دارید. با توجه به اینکه شرکت های میزبانی مختلف طرح های متنوعی را برای وب سایت های کوچک و بزرگ ارائه می دهند، در نتیجه تاثیر زیادی در هزینه ی نهایی وب سایت خواهد داشت. Bluehost یکی از بزرگترین شرکت های میزبانی در جهان به ارائه ی میزبانی سایت های وردپرسی می پردازد که اغلب سایت های بزرگ از آن استفاده می کنند.

با رشد و توسعه ی کسب و کار، قطعا نیاز به منابع میزبانی بیشتری نیاز خواهید داشت که متعاقبا صرف هزینه ی بیشتری را به همراه خواهد داشت. برای مثال با صرف کمی هزینه ی بیشتر می توانید از سرویس دهنده ی های میزبانی وردپرس WP Engine یا SiteGround بهره مند شوید.

آموزش کسب درآمد اینترنتی

وب سایتی با طراحی ساده و کاربردی انتخاب کنید

بسیاری از مبتدیان و افراد تازه وارد در کسب و کار آنلاین بر این باورند که اگر وب سایت با طراحی پیشرفته و پیچیده نداشته باشند، ممکن است مشتریان خود را از دست بدهند. طراحی سایت حرفه ای زمان بر و هزینه بر می باشد و در مراحل ابتدایی کار یک فاکتور ضروری نیست.

با طراحی سایت وردپرس با تم های ساده و زیبا که رایگان هستند یا نیاز به هزینه ی بسیار کم دارند، می توانید مقدمات شروع کسب و کارتان را فراهم نمایید.

آموزش راه اندازی کسب و کار اینترنتی

ایجاد  راه ارتباطی آسان بین کاربر و خودتان

برای اینکه بتوانید مشتری بیشتری را به سمت خود جذب کنید، باید بتوانید راه ارتباطی آسانی را بین خودتان و آنها ایجاد کنید. یکی از بهترین کارها در این زمینه، قرار دادن فرم تماس با ما در سایت می باشد.

وردپرس به صورت پیش فرض فرم تماس با ما ندارد و با پلاگین های فرم ساز وردپرس براحتی یک فرم تماس را برای سایت خود ایجاد کنید. WPForms Life یکی از محبوب ترین پلاگین های رایگان برای ایجاد فرم در وردپرس هست که بیش از یک میلیون وب سایت از آن استفاده می کنند.

با رشد و توسعه ی کسب درآمد اینترنتی می توانید پلاگین WPForms Life را به WPForms Pro ارتقا دهید تا فرم های پیشرفته تری مانند نظرسنجی، فرم های پرداخت و غیره را ایجاد کنید.

کسب و کار آنلاین

از همان روز اول لیست ایمیل ایجاد کنید

واقعیت این است که اکثر افرادی که سایت شما را ترک می کنند، دوباره به آن برنمی گردند. به عبارت دیگر، اگر نتوانید آدرس ایمیل آنها را دریافت کنید، در آینده هیچ راه ارتباطی با آنها نخواهید داشت. بهترین کار این است که در همان ابتدا یک لیست ایمیل ایجاد کنید. ایمیل مارکتینگ یکی از قابل اعتمادترین راه های برقراری ارتباط با بازدیدکنندگان سایت می باشد.

کسب درآمد از اینترنت

دریافت ترافیک ارگانیک بیشتر از موتورهای جستجو

موتورهای جستجو مانند گوگل یکی از اصلی ترین منابع ترافیک برای بسیاری از وب سایت ها هستند. برای اینکه بتوانید وب سایت خود را برای موتورهای جستجو بهینه کنید و در نتیجه ترافیک ارگانیک سایت خود را افزایش دهید، بهترین کار یادگیری اصول سئو می باشد.

سئو یا بهینه سازی موتورهای جستجو مجموعه ای از دستورالعمل ها و تکنیک هایی می باشد که سایت شما را بر اساس استانداردهای موتورهای جستجو توسعه داده و نتایج بهتری را دریافت نمایید. یکی از مهم ترین گام ها در جهت سئو در مشهد، تولید محتوای حرفه ای می باشد که در ادامه توضیح خواهیم داد.

آموزش کسب و کار آنلاین

استراتژی بازاریابی محتوا طراحی کنید

بازاریابی محتوا یک استراتژی برای ایجاد محتوای مفید و مرتبط با حوزه ی کاری سایت می باشد که باعث می شود تا ترافیک هدفمندتری را از موتورهای جستجو و بدون هزینه ی زیاد دریافت نمایید.

یکی از ساده ترین راه ها برای اضافه کردن مطالب به وب سایت، داشتن وبلاگ می باشد. وردپرس این امکان را به شما می دهد تا یک صفحه ی جداگانه به نام وبلاگ در سایت داشته باشید و مطالب را دسته بندی کرده و برحسب دسته و برچسب ها مرتب کنید.

برای داشتن یک استراتژی درست برای محتوا، ابتدا باید بتوانید کلمات کلیدی را بدرستی شناسایی کنید. بازاریابی محتوایی را مخصوصا در کسب و کارهای کوچک جدی بگیرید و از این روش موثر غافل نشوید.

آموزش ساخت کسب و کار آنلاین

از داده های گوگل آنالتیک برای تصمیم گیری هایتان در ادامه ی کار استفاده کنید

برنامه ریزی بر اساس حدس و گمان در کسب و کارهای آنلاین یکی از بزرگترین اشتباهات می باشد که شما را به موفقیت سوق نخواهند داد. تا بحال به این فکر کرده اید که چرا از داداه های واقعی و بسیار ارزشمند گوگل آنالتیک در برنامه ریزی هایتان استفاده نکرده اید؟

با این ابزار کاربردی گوگل می توانید تعداد بازدیدکنندگان، مدت زمان ماندگاری در سایت و بسیاری از گزارشات مفید را مشاهده نمایید. گوگل آنالتیک اطلاعات زیادی را در اختیار شما قرار میدهد و برنامه ی سازمان دهی شده با برنامه ریزی درست و ظاهر ساده و زیبا دارد که البته ممکن است در شروع کار شما را کمی سردرگم کند.

برای استفاده از گوگل آنالتیک در وردپرس ، لازم است تا پلاگین MonsterInsights را نصب و فعال کنید. این پلاگین یکی از بهترین انتخاب ها برای راه اندازی گوگل آنالتیک برای سایت های وردپرسی می باشد که امکان گزارش گیری از ترافیک سایت را برایتان فراهم خواهد کرد. اگر سایت شما یک فروشگاه اینترنتی می باشد، می توانید با کمک MonsterInsights مشتریان WooCommerce را با کمک گوگل آنالتیک ردیابی کنید. پلاگین  MonsterInsights رایگان هست و استفاده از آن نیاز به دانش زیادی ندارد.

ایجاد کسب و کار آنلاین

قدرت شبکه های اجتماعی را برای هدایت ترافیک به سایت جدی بگیرید

شبکه های اجتماعی مخاطبان بسیار زیادی داشته و جالب است بدانید که فیسبوک به تنهایی ۱٫۴۷ میلیارد کاربر فعال در روز دارد که حدود ۱۸ درصد از کل افراد در جهان هستند. توئیتر، یوتیوب، لینکدین و دیگر شبکه های اجتماعی نیز کاربران فعالی بسیار زیادی دارند و باید این فرصت را جدی گرفت.

ایجاد پروفایل های کاربری در شبکه های اجتماعی و اشتراک گذاری پست های وبلاگ خود به صورت خودکار ترافیک زیادی را به سمت سایت شما هدایت خواهد کرد. برای اشتراک گذاری راحت مطالب وب سایت در شبکه های اجتماعی مختلف، نیاز دارید تا دکمه های اشتراک گذاری شبکه های اجتماعی را به سایت وردپرسی خود اضافه کنید.

  • پروفایل و فعالیت خود را در شبکه های اجتماعی فعال نگه دارید
  • یک گروه فیسبوک برای مشتریانتان ایجاد کنید
  • در لینکدین گروه فعال داشته باشید
  • نحوه ی تبلیغات در فیسبوک را بیاموزید
  • روی شبکه های اجتماعی متمرکز شوید که برای کسب و کارتان مناسب هستند. برای مثال اگر در حوزه ی غذا یا مُد فعالیت دارید، اینستاگرام یکی از بهترین انتخاب ها می باشد.

بازایابی اینترنتی

ارتباطات فعال در جوامع آنلاین داشته باشید

انجمن های آنلاین یا تالارهای گفتگو یکی از بهترین مکان هایی می باشد که اغلب افراد برای مطرح کردن سوالات خود از آنها استفاده می کنند. برای مثال TripAdvisor، Quora، Stack Exchange، Reddit و غیره از فعال ترین انجمن های آنلاین به شمار می آیند.

با کمک انجمن های آنلاین براحتی می توانید زمینه های مورد علاقه ی حوزه ی کسب و کار خود را شناسایی کنید و بر این اساس به تولید محتوا بپردازید و به تقویت خود در این شاخه ها بپردازید.

نکته ی مهم برای فعالیت در انجمن های آنلاین، انتخاب انجمن متناسب با کسب و کار می باشد تا بتوانید مشتریان بالقوه را از این طریق ایجاد نمایید. به عنوان مثال اگر وب سایت شما در حوزه ی گردشگری و سفر فعالیت دارد، Tripadvisor می تواند یکی از بهترین انتخاب ها باشد.

با قرار دادن مطالب و پیوند دادن آنها با سایت خود و ذکر نام سایت به مرور می توانید ترافیک خوبی را به سمت سایت خود هدایت کنید.

آموزش وردپرس

تبدیل بازدیدکنندگان سایت به مشتریان بالقوه

آیا می دانستید که بیش از ۷۰ درصد افرادی که سایت شما را ترک می کنند، نمی توانند مجدد آنرا پیدا کنند؟ تقصیر شما نیست، اینترنت خیلی گسترده شده و تعداد سایت ها هر روز در حال افزایش هستند.

هر بازدیدکننده ای که سایت شما را ترک می کند، مشتری بالقوه ای می باشد که آنرا از دست داده اید و برای توسعه ی کسب درآمد اینترنتی خود باید بتوانید بازدیدکنندگان را به مشتریان تبدیل کنید.

OptionMoster یکی از بهترین نرم افزارها در بازار می باشد که این امکان را برایتان فراهم می کند تا بازدیدکنندگان را به مشتری تبدیل کنند.

این ابزار با drag &drop سازنده ی کمپین کار می کند و می توانید کمپین های مختلفی را برای جمع آوری ایمیل های کاربران ایجاد کنید یا پیشنهادات خاصی را به آنها نمایش دهید.

کسب و کار آنلاین

برنامه بازاریابی وابسته ایجاد کنید

بازاریابی وابسته یک توافق ارجاعی می باشد که در آن یک خرده فروش آنلاین (تبلیغ کننده) توافق می کند که به ازای هر کاربر که از لینک های سمت شما برای سایت آنها ارسال شود، مبلغی را پرداخت کند. اگر قصد راه اندازی فروشگاه های اینترنتی دارید، می توانید با بازاریابی وابسته از بازاریابان ماهر استفاده کنید و مبلغی از فروش را به آنها پرداخت نمایید.

برای ردیابی مشتریانی که از سمت لینک های مورد نظر وارد سایت ما شده اند، نیاز به برخی ابزارها دارید که با جستجو در اینترنت می توانید موارد خوبی را بدست آورید.

کسب درآمد از طریق اینترنت

از تبلیغات پرداخت به ازای کلیک استفاده کنید و کسب درآمد اینترنتی را افزایش دهید

برخلاف تصور عموم، با هزینه ی کم می توانید تبلیغات پرداخت به ازای کلیک (Pay-per-click) را در google adwords و facebook  و براساس کلمات کلیدی مرتبط با حوزه ی کاریتان راه اندازی نمایید.

تبلیغات رایگان google adwords یکی از بهترین گزینه ها برای داشتن تبلیغ کنندگان می باشد. BlueHost یکی از شرکت های میزبان وردپرس هست که پیشنهاداتی را برای google adwords  رایگان ارائه میدهد.

سایت کسب درآمد اینترنتی

استفاده از تایید اجتماعی یا Social Proof برای مشتریان برنده

تایید اجتماعی یک پدیده ی روانشناختی می باشد که در آن مشتری بر اساس رفتار دیگران هدایت می شود. بسیاری از بازاریابان از این پدیده برای نشان دادن میزان اعتماد سایر مشتریان به یک محصول به مشتریان جدید استفاده می کنند. اشتراک گذاری آمار و یا تعداد مشترکین و همچنین نمایش نظرات سایرین از جمله مواردی می باشد که می تواند در این پدیده موثر باشد.

از FOMO برای افزایش فروش و تبدیل استفاده کنید

FOMO یا ترس از دست دادن، یک اصطلاح روانشناختی می باشد که برای توصیف اضطراب در مورد از دست دادن چیزی هیجان انگیز و معمول استفاده میشود. از این پدیده ی روانشناختی می توانید برای افزایش فروش و تبدیل کاربران به مشتریان بالقوه استفاده کنید. در تصویر زیر یک نمونه از کاربرد FOMO را در یکی از سایت ها مشاهده می کنید.

کسب و کار اینترنتی در منزل

سرعت و کارایی سایت را بهبود دهید

مطالعات نشان می دهند که از سال ۲۰۰۰ تا ۲۰۱۶ میزان توجه و تمرکز انسان ها از ۱۲ ثانیه به ۷ ثانیه کاهش یافته است. این یعنی شما زمان کمی دارید تا  کاربر را در سایت خود نگهدارید و آنها را متقاعد کنید تا در سایت شما بمانند.

علاوه براین، مطالعات نشان می دهد که تاخیر ۱ ثانیه در زمان بارگذاری صفحات سایت می تواند منجر به کاهش ۷ درصدی در نرخ تبدیل و ۱۱ درصد نمایش کمتر صفحه و ۱۶ درصد کاهش رضایت مشتری گردد.

این یعنی باید بتوانید سایت خود را بهینه کنید تا بتوانید ترافیک مطلوبی را به سمت آن هدایت نمایید. امیدواریم این مقاله به شما کمک کند تا بتوانید کسب و کار آنلاین خود را با هزینه ی اندک بهبود و توسعه دهید و از ابزارهای مدیریتی مفیدی را برای این منظور به کار گیرید.

آموزش طراحی سایت مشهد

استخدام برنامه نویس وب در مشهد

استخدام برنامه نویس وب در مشهد : شرکت ارتباط گستران آساد بین الملل واقع در مشهد جهت تکمیل تیم برنامه نویسی استارتاپ خود به تعدادی نیروی جوان که مسلط به مهارت های زیر میباشند نیازمند است

– Asp. net MVC core
– Entity Framework
– SQL server
– HTML / CSS / Java

ارسال رزومه به

Pahlevoon_group@yahoo.com

استخدام برنامه نویس وب در مشهد

 

کتاب آموزش jQuery به زبان فارسی

آموزش jquery

jQuery چیست ؟ jQuery کتابخانه ایی جدید بر اساس جاوا اسکریپت می باشد . jQuery کتابخانه ایی سریع و سبک که با قدرت تمام پیمایش اسناد HTML ، مدیریت رخدادها ، انیمیشن کردن عناصر ، آمایش داده ها و تعامل با AJAX را ارائه می کند . به صورت کلی jQuery برای تغییر در شیوه اسکریپت نویسی جاوا اسکریپت طراحی شده است . در کتاب آموزش jQuery به زبان فارسی به آموزش این کتابخانه قدرتمند جاوا اسکریپت خواهیم پرداخت .

jQuery یک کتابخانه رایگان جاوا اسکریپت است که دارای خصوصیاتی همچون پشتیبانی از مرور گرهای مختلف و انجام کار های بیشتر با کدنویسی کمتر می باشد . کار اصلی با انتخاب عناصر HTML شروع می شود و با پیگیری رویداد ها و کارهایی همچون انیمیشن کردن عناصر ، فراخوانی های AJAX ، تغییر استایل ها و .. ادامه می یابد.

در یک تعریف کلی جی کوئری را می توان اینگونه معرفی کرد : jQuery: The Write Less, Do More, JavaScript Library.

 

کتاب آموزش jQuery به زبان فارسی

سر فصل های کتاب آموزش jQuery به زبان فارسی

  • مبانی jQuery
  • انتخاب کننده های jQuery
  • پیمایش اشیای انتخاب شده توسط jQuery
  • کار با CSS
  • آمایش اشیای انتخاب شده توسط jQuery
  • مدیریت رویدادها
  • افکت ها و جلوه های بصری
  • کار با AJAX
  • توابع سودمند

پیش نیاز های آموزش جی کوئری

  • تجربه کاری با جاوا اسکریپت ( فراخوانی توابع ، ایجاد اشیا و دستکاری آنها و…)
  • درک HTML  ( وظیفه جی کوئری آمایش تگ ها و عناصر HTML است )
  • تجربه کاری با CSS ( جی کوئری امکانات مناسبی برای کار با استایل ها دارد )

 

توضیحات کتاب آموزش jQuery به زبان فارسی

نویسنده : مجید ابراهیمی

موضوع : کتاب آموزش جی کوئری

تعداد صفحات : 127

فرمت : کتاب PDF

ناشر : برنامه نویسان مشهد

زبان : فارسی

دانلود کتاب آموزش جی کوئری

ساخت اشیاء انتقال داده یا DTOها

در این قسمت آموزش ASP MVC WEB Api به  ساخت اشیاء انتقال داده یا DTOها خواهیم پرداخت .

پست های قبلی آموزش ASP MVC Web Api

 

در حال حاضر، API تحت وب ما ساختمان داده انتیتی را در دسترس برنامه سمت کاربر قرار میدهد. کاربر داده‌هایی که مستقیما در جدول‌های ساختمان داده قرار دارند را دریافت می‌کند. هرچند، این مسئله همیشه هم خوب نیست. گاهی اوقات شما می‌خواهید شکل داده‌ای که به مشتری می‌فرستید را تغییر دهید. برای مثال، میخواهید:

 

  • Circular references را حذف کنید (قسمت قبل را مشاهده کنید)
  • ویژگی هایی خاصی که نمیخواهید مشتری آنها را ببیند را پنهان کنید.
  • برخی ویژگی‌ها را حذف کنید تا اندازه payload کاهش یابد.
  • گراف ها و نمودارهای اشیاء را به منظور درک ساده تر آنها توسط کاربر، ساده کنید.
  • از آسیب پذیری over-posting جلوگیری کنید .
  • لایه سرویس را از لایه پایگاه داده جدا کنید.

برای انجام این کار میتوانید یک شی انتقال داده یا DTO تعریف کنید. DTO شیء ایست که نحوه انتقال داده ها را بر روی شبکه مشخص میکند. بیایید ببینیم چگونه DTO با Book Entity کار میکند. در پوشه‌های Folder، دو کلاس DTO اضافه کنید.

namespace BookService.Models
{
    public class BookDTO
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string AuthorName { get; set; }
    }
}

namespace BookService.Models
{
    public class BookDetailDTO
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public int Year { get; set; }
        public decimal Price { get; set; }
        public string AuthorName { get; set; }
        public string Genre { get; set; }
    }
}

کلاس BookDetailDTO شامل تمامی ویژگی‌های مدل کتاب است. به جز AuthorName که نام نویسنده را در خود دارد. کلاس BookDTO شامل زیرمجموعه ویژگی‌های BookDetailDTO است.

آموزش ASP MVC WEB Api

در این مرحله، متدهای GET در کلاس BookController را با ورژن‌های شامل DTO جایگزین کنید. ما از LINQ  با عنوان Select استفاده میکنیم تا انتیتی‌های Book را به DTO تبدیل کنیم.

// GET api/Books
public IQueryable<BookDTO> GetBooks()
{
    var books = from b in db.Books
                select new BookDTO()
                {
                    Id = b.Id,
                    Title = b.Title,
                    AuthorName = b.Author.Name
                };

    return books;
}

// GET api/Books/5
[ResponseType(typeof(BookDetailDTO))]
public async Task<IHttpActionResult> GetBook(int id)
{
    var book = await db.Books.Include(b => b.Author).Select(b =>
        new BookDetailDTO()
        {
            Id = b.Id,
            Title = b.Title,
            Year = b.Year,
            Price = b.Price,
            AuthorName = b.Author.Name,
            Genre = b.Genre
        }).SingleOrDefaultAsync(b => b.Id == id);
    if (book == null)
    {
        return NotFound();
    }

    return Ok(book);
}

در اینجا SQL به دست آمده از متد جدید GetBooks را مشاهده میکنید. میتوانید ببینید که EF، بخش LINQ به نام Select را به عبارت  SQL SELECT ترجمه میکند.

SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Title] AS [Title], 
    [Extent2].[Name] AS [Name]
    FROM  [dbo].[Books] AS [Extent1]
    INNER JOIN [dbo].[Authors] AS [Extent2] ON [Extent1].[AuthorId] = [Extent2].[Id]

در آخر، متد PostBook را اصلاح کنید تا DTO برگشت داده شود .

[ResponseType(typeof(Book))]
public async Task<IHttpActionResult> PostBook(Book book)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    db.Books.Add(book);
    await db.SaveChangesAsync();

    // New code:
    // Load author name
    db.Entry(book).Reference(x => x.Author).Load();

    var dto = new BookDTO()
    {
        Id = book.Id,
        Title = book.Title,
        AuthorName = book.Author.Name
    };

    return CreatedAtRoute("DefaultApi", new { id = book.Id }, dto);
}

 

آموزش asp mvc web api

استخدام برنامه نویس اندروید ، ویندوز ، برنامه نویس وب – مشهد

استخدام برنامه نویس مشهد : ✅ شرکت نرم‌افزاری محک (تولید کننده نرم‌افزارهای مالی) جهت عناوین شغلی زیر برای دفتر مشهد، از متقاضیان واجد شرایط در مشهد دعوت به همکاری می‌نماید .

برنامه‌نویس ویندوز
برنامه‌نویس وب
طراح گرافیست
توسعه دهنده اندروید
توسعه دهنده IOS
کارشناس تست نرم‌افزار

استخدام برنامه نویس مشهد

✅ لطفا درخواست همکاری خود را با ذکر عنوان شغلی در موضوع ایمیل، به آدرس ایمیل زیر ارسال فرمایید. بدیهی است به رزومه‌هایی که عنوان شغلی مورد نظر در subject آنها قید نشده باشد ترتیب اثر داده نخواهد شد.

jobs@mahaksoft.com
☎️ ۰۲۱۶۴۰۵۶۸۰۰۱

استخدام برنامه نویس مشهد