AHMADSSB BLOG

مدونة تحتوي على مواضيع متخصصة في تطوير اجهزة الاندرويد ومواضيع متفرقة

التصنيف: الدروس

(تطوير UsersActivity و ListViewAdapter) ربط تطبيق أندرويد مع MySQL و PHP و JSON

السلام عليكم ورحمة الله وبركاته

(جاري تحديث الموضوع)

فهرس سلسلة دروس ربط تطبيق أندرويد مع MySQL و PHP و JSON :

  1. مقدمة وشرح توضيحي عن Web Services وعن المشروع.
  2. إعداد السيرفر المحلي WAMP و بناء قاعدة بيانات MySQL.
  3. التعامل مع PHP لبناء Web Service  تقوم بعمل Login و Register (مع شرح مبسط عن JSON) .
  4. التعامل مع PHP لبناء Web Service  بجلب بيانات المستخدمين الموجودة بقاعدة البيانات.
  5. بناء مشروع أندرويد  جديد و إعداد واجهة تطبيق الأندرويد.
  6. تطوير كلاسات Register و Login وJSONParser في أندرويد.
  7. تطوير UsersActivity و ListViewAdapter لعمل قائمة المستخدمين بالتنسيق الذي نحتاجه.

 

 

ListViewAdapter.java

/***
 * @author Ahmed Saleh
 * Created by ahmadssb on 2014-12-13
 * Website: http://www.ahmadssb.com
 * Email: ahmad@ahmadssb.com
 * Facebook: https://www.facebook.com/ahmadssbblog
 * Twitter: https://twitter.com/ahmadssb
 * YouTube: http://www.youtube.com/user/ahmadssbblog
 */

package com.ahmaadssb.androidwebservices;

import java.util.ArrayList;
import java.util.HashMap;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ListViewAdapter extends BaseAdapter {

	// نقوم بتعريف المتغيرات المطلوبة
	Context context;
	LayoutInflater inflater;
	ArrayList<HashMap<String, String>> data;
	HashMap<String, String> resultp = new HashMap<String, String>();

	// تعريف الكونستركتر 
	// حيث يحتوي على المتغيرات 
	//context = اسم الكلاس 
	// arraylist = مصفوفة users التي سنحصل عليها من JSONArray
	public ListViewAdapter(Context context,
			ArrayList<HashMap<String, String>> arraylist) {
		this.context = context;
		// هنا سنتعامل مع المصفوفة التي حصلنا عليها من الكونستركتر لكي نتحكم بمحتوياتها ونضعها في single_user_layout
		data = arraylist;
	}

	@Override
	public int getCount() {
		// نحصل على حجم data 
		// والتي هي عدد مصفوفة JSON
		return data.size();
	}

	@Override
	public Object getItem(int position) {
		return null;
	}

	@Override
	public long getItemId(int position) {
		return 0;
	}

	/***
	 * في هذه الدالة سنقوم بالربط مع  single_user_layout
	 * و نقوم بتعريف كل كائن TextView 
	 * و من ثم نقوم بأخذ القيم الموجودة في data
	 * وربطها مع كل TextView
	 */
	public View getView(final int position, View convertView, ViewGroup parent) {

		// تعريف متغيرات TextView المطلوبة
		TextView tvUserID, tvUsername, tvDisplayName;

		// نقوم بتعريف inflater 
		// LayoutInflater : توضيح مبسط
		// يسمح لك بتحويل اي كائن (نص-زر-صورة...الخ) الى View Objects 
		inflater = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

		// نقوم بتعريف itemView Object 
		// inflater.inflate (int resource, ViewGroup root, boolean attachToRoot)
		// resource = single_user_layout بمعنى التصميم الذي تود التحكم بمحتوياته
		// ViewGroup root = parent نفس الباراميتر الموجود في getViwe() و الهدف منه الحصول على أول عنصر في ملف التصميم
		View itemView = inflater.inflate(R.layout.single_user_layout, parent, false);

		// نحصل على موضع الداتا
		// بمعنى آخر ان كان هناك 4 مستخدمين حصلنا على بياناتهم من JSON Array
		// كل مستخدم له مصفوفة تحتوي على id - username - displayname 
		// هنا نحن نحدد موضع المصفوفة للمستخدم
		// فإذا كانت 2 سنحصل على بيانات المستخدم رقم 2
		resultp = data.get(position);

		// نقوم بتعين كل متغير TextView بما هو موجود في ملف single_user_layout
		tvUserID = (TextView) itemView.findViewById(R.id.txtID);
		tvUsername = (TextView) itemView.findViewById(R.id.txtUsername);
		tvDisplayName = (TextView) itemView.findViewById(R.id.txtDisplayName);

		// نقوم بوضع بيانات TextView في أماكنها
		tvUserID.setText(resultp.get(UsersActivity.TAG_USER_ID));
		tvUsername.setText(resultp.get(UsersActivity.TAG_USER_USERNAME));
		tvDisplayName.setText(resultp.get(UsersActivity.TAG_USER_DISPLAYNAME));

		// اخيرا نقوم بإرجاع itemView 
		return itemView;
	}

}

 

UsersActivity.java

/***
 * @author Ahmed Saleh
 * Created by ahmadssb on 2014-12-13
 * Website: http://www.ahmadssb.com
 * Email: ahmad@ahmadssb.com
 * Facebook: https://www.facebook.com/ahmadssbblog
 * Twitter: https://twitter.com/ahmadssb
 * YouTube: http://www.youtube.com/user/ahmadssbblog
 */
package com.ahmaadssb.androidwebservices;

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

import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;

public class UsersActivity extends Activity {
	
	// Declare Variables
	JSONObject jsonobject;
	JSONArray jsonArrayUsers;
	
	ListView listview;
	ListViewAdapter adapterListView;
	
	ProgressDialog mProgressDialog;
	
	ArrayList<HashMap<String, String>> arraylistUsers;
	
	// JSON parser Class
	JSONParser jsonParser = new JSONParser();

	// من خلال شبكة الواي فاي
	private static String USERS_URL = "http://192.168.1.103/GoogleDrive/android-webservice1/users.php";

	// من خلال Android emulator
	// private static String USERS_URL = "http://10.0.2.2/GoogleDrive/android-webservice1/users.php";

	// من خلال رابط الموقع على الانترنت
	// private static String USERS_URL = "http://www.YOUR-DOMAIN.com/GoogleDrive/android-webservice1/users.php";

	
	// JSON IDS:
	static final String TAG_SUCCESS = "success";
	static final String TAG_USERS_LIST = "users";
	static final String TAG_USER_ID = "id";
	static final String TAG_USER_USERNAME = "username";
	static final String TAG_USER_DISPLAYNAME = "displayname";
	private static final String TAG_MESSAGE = "message";
    
	@Override 
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.users_layout);

		new DownloadJSON().execute();
	}
	
	


	/***
	 * 
	 * @author Ahmadssb 
	 * في هذا الكلاس سنقوم بالإتصال برابط تسجيل مستخدم جديد  ونقوم
	 * ومن ثم نحصل على JSON Response
	 * وأخيرا حسب قيمة success نقرر ما سنقوم بعمله
	 * 
	 */
	private class DownloadJSON extends AsyncTask<Void, Void, Void> {
		int status;

		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			
		}

		@Override
		protected Void doInBackground(Void... params) {
			// نقوم بتعريف ArrayList 
			arraylistUsers = new ArrayList<HashMap<String, String>>();
			
			try {
				
				List<NameValuePair> param = new ArrayList<NameValuePair>();
				//فقط لتتبع ما يحصل في LogCat
				Log.d("request!", "Starting");
				

				// نقوم بارسال طلب POST الى رابط Users 
				// للحصول على JSON Objects 
			jsonobject = JSONParser.makeHttpRequest(USERS_URL,"POST",param);

			//فقط لتتبع ما يحصل في LogCat
			Log.d("Loding Restaurant", jsonobject.toString());
			

			// نضع قيمة success والتي حصلنا عليها من JSON
			// بداخل المتغير success
			status = jsonobject.getInt(TAG_SUCCESS);
			
			if(status != 0)
			{
				// نقوم بالحصول على مصفوفة users في JSON 
				jsonArrayUsers = jsonobject.getJSONArray(TAG_USERS_LIST);


				for (int i = 0; i < jsonArrayUsers.length(); i++) {
					HashMap<String, String> map = new HashMap<String, String>();
					JSONObject jsonobject = jsonArrayUsers.getJSONObject(i);
					
					// نقوم بالحصول على JSON Objects مع قيمة كل Object 
					// ونقوم بحفظها في كائن HashMap 
					map.put(TAG_USER_ID, jsonobject.getString(TAG_USER_ID));
					map.put(TAG_USER_USERNAME, jsonobject.getString(TAG_USER_USERNAME));
					map.put(TAG_USER_DISPLAYNAME, jsonobject.getString(TAG_USER_DISPLAYNAME));
					
					
					// نقوم بحفظ البيانات المخزنة في map  بداخل arraylistUsers
					arraylistUsers.add(map);
				}
				//فقط لتتبع ما يحصل في LogCat
				Log.d("jsonArrayKioskRestaurant Size:", ""+arraylistUsers.size());
				
				
				
			}else{
				//فقط لتتبع ما يحصل في LogCat
				Log.d("Loding Restaurant Failure!", jsonobject.getString(TAG_MESSAGE));
			}
					
			
			} catch (JSONException e) {
				Log.e("Error", e.getMessage());
				e.printStackTrace();
			}
			return null;
		}

		@Override
		protected void onPostExecute(Void args) {

			if (status != 0) {
				
				// أولا نقوم بتعريف listView
				listview = (ListView) findViewById(R.id.listView1);
				// نقوم بإرسال بيانات المصفوفة arraylistUsers بداخل ListViewAdapter
				// حيث ان ListViewAdapter سيتكفل بتنسيق البيانات 
				adapterListView = new ListViewAdapter(UsersActivity.this, arraylistUsers);
				// نقوم بتعيين adapterListView بداخل listView
				listview.setAdapter(adapterListView);
				
				//  في حال كنت تريد ان تقوم بتنفيذ امر معين عند النقر على احد الحقول في ListView
				// عليك استدعاء الدالة setOnItemClickListener()
				listview.setOnItemClickListener(new OnItemClickListener() {

					@Override
					public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
						
						TextView tvUserID = (TextView) (arg1.findViewById(R.id.txtID));
						String sUserID = tvUserID.getText().toString();
						TextView tvUsername = (TextView) (arg1.findViewById(R.id.txtUsername));
						String sUsername = tvUsername.getText().toString();
						TextView tvDisplayName = (TextView) (arg1.findViewById(R.id.txtDisplayName));
						String sDisplayName = tvDisplayName.getText().toString();
						
						Toast.makeText(UsersActivity.this, sUserID + " - " + sUsername + " - " + sDisplayName, Toast.LENGTH_LONG).show();
						

					}
				});
				
			}
			
		}
	}	
}

بإمكانك تحميل المشروع من خلال GitHub :

https://github.com/ahmadssb/Android-PHP-MySQL-JSON-Tutorial.git

Updated: فبراير 4, 2015 — 5:55 ص

هل توجد خصوصية في الإنترنت؟


 

السلام عليكم ورحمة الله وبركاته

كثر الحديث عن موضوع الخصوصية (Privacy) في مواقع التواصل الاجماعي (Facebook, Twitter, Google Plus) و الشركات الكبرى مثل جوجل و ابل ومايكروسوفت وغيرها…

اغلب من تحدث عن الخصوصية في تلك المواقع يتفقوا على امر واحد تقريبا ألا و هو أن تلك المواقع تقوم بحفظ جميع بيانات مستخدميها في سيرفراتهم و أن بإمكانهم التحكم بها أو تعقب جميع حركات مستخدميها ومعرفة أماكنهم، وقد أيضا يقوموا ببيع بيانات مستخدميها للحكومات و نحوها.

بالفعل جميع ما قيل صحيح ولكن أنا كمهندس برمجيات ومطور ويب و تطبيقات للهواتف الذكية لدي وجهة نظر مختلفة كليا عن كل ما قيل عن تلك المواقع والشركات.
لأكون واضحاً معكم وجهة نظري من ناحية (تقنية) فجميع ما تقوم به تلك المواقع من حفظ بيانات مستخدميها والتحكم بها و تعقب حركات مستخدميها وزوارها بإمكان أي موقع صغيراً كان أو ضخما أن يقوم به، هذا إن كان صاحب الموقع من أصحاب النفوس الضعيفة.

قبل أن اتحدث عن الخصوصية في الانترنت لنتحدث عن الخصوصية في الحياة الواقعية، جميعنا نتفق أن بإمكان شركات الاتصالات في اي بلد كان ان تقوم بالتنصت على المحادثات التي تقوم بها. (لا أعلم إن كانت تقوم بحفظ تلك التسجيلات في سيرفراتهم)

ولكن لا يمكن للشركة (بحسب العقد المتفق أو قوانين الدولة) أن تقوم بالتنصت على محادثات عملائها بدون أمر رسمي من الحكومة أو أي جهة رسمية.

لذلك لنفترض مثلا (وهذا لا يمكن أن يحصل إلا بأمر رسمي) أنهم قاموا بالتنصت على مكالمتك وأنت تتحدث مع الأهل أو لديك عمل وتريد التحدث مع زميل لك عن أسرار العمل. أليس بإمكانهم التنصت عليك أيضا؟ بما أن لديهم صلاحية لذلك فهذا لا يعني أنهم لا يستطيعوا اختراق القانون والتنصت على مكالمتك.

بالتأكيد لا يتم التنصت إلا ان كنت شخص مجرم و يريدوا التوصل إليك غير ذلك لن يتم من الأساس إصدار قرار التنصت عليك.

ما يحصل في الإنترنت أمر مشابه، فجميع المواقع في الانترنت بإمكانها بمجرد دخولك على الموقع التوصل على عنوان IP الخاص بك وهذا ليس إختراقا لجهازك أو أي شي مماثل، ولكن الهدف الرئيسي من هذا هو عمل إحصائيات للموقع كعدد الزوار و معرفة زيارات الموقع من أي دولة و أي مدينة و نحو ذلك.

فأنا كمدير لموقع معين بإمكاني معرفة بيانات كثيرة عنك من خلال فقط عنوان IP الخاص بك كموقعك في الكرة الأرضية ليس فقط الدولة والمدينة ولكن موقعك التقريبي على الخريطة ، بالإضافة الى معرفة مزود خدمة الانترنت لديك. و أيضا لنقل أنه تم اختراق جهازك من خلال أحد الهكرز وقام بفتح منفذ Port معين على جهازك بإمكاني تجربة جميع المنافذ (ولو أنها عملية طويلة جدا) ولكنها ممكنة.

كما قلت هذا فقط بمجرد دخولك للموقع ولكن لنقل أنك قمت بالتسجيل بالموقع فأنت بذلك قمت بحفظ بياناتك في قاعدة بيانات هذا الموقع و إن قمت بكتابة مواضيع أو ردود في ذلك الموقع فجميعها تكون محفوظة في قاعدة بيانات الموقع

ما أريد الوصول إليه انه جميع البيانات التي تقوم بإدخالها في أي موقع كان فسوف تحفظ في قاعدة بيانات ذلك الموقع فعندما يزيد عدد مستخدمي هذا الموقع و تزيد شهرة الموقع فبالتأكيد ستزيد البيانات المسجلة في ذلك الموقع.

حينها لدى مدير الموقع قاعدة ضخمة من بيانات المستخدمين وجميع ما قاموا بعمله في موقعه، حينها يأتي التخوف من ذلك الموقع من نشر بيانات مستخدميه.

فمن بادئ الأمر لماذا (أنا) متصفح للإنترنت و مستخدم عادي للإنترنت أقوم بوضع بيانات حساسة ودقيقة في تلك المواقع. فالهدف من جميع المواقع نشر محتوياتها (مقالات أو فديوهات) لكافة متصفحي الانترنت ونشر نظرتهم الخاصة لبعض المواضيع.

لذلك (أنا) المستخدم العادي للإنترنت الملام الأول في حالة أنني قمت بنشر بعض الصور أو البيانات الخاصة و الحساسة جدا بي في تلك المواقع.

من المفترض أن لا نلوم أصحاب تلك المواقع على أخطاء نحن في الأساس كنا السبب الرئيسي فيها، فلا تنسى أنهم قاموا بتقديم تلك الخدمة مجانا لك. ولكن الواقع لا يوجد شيء مجاني فليس من الضروري أن يكسبوا بضعا من النقود منك ولكن فهم يستفيدوا من عدد المستخدمين الضخم ليروجوا لبعض الخدمات الأخرى كالإعلانات و كثير منا يعلم كمية الخيارات الضخمة التي يستطيع المعلن التحكم بها لنشر منتجه من تحديد الدولة والمدينة وحتى العمر والجنس واللغة وغيرها الكثير.

قمت بالتوضيح (تقنيا) في هذا الفديو موضوع الخصوصية على الإنترنت ومن وخبرتي السابقة في هذا المجال، فلا توجد خصوصية (بالمعنى المتعارف عليه) في الانترنت بشكل عام ،
ولكن الخصوصية الحقيقية تعتمد عليك (أنت) أولاً بمعرفتك بما تقوم بنشره على الإنترنت و بعد ذلك ما يقوم (مدراء تلك المواقع ) بالبيانات التي قمت بنشرها في موقعهم.
فكما قلت لكم سابقا هذه مجرد وجهة نظر (تقنية) فإن أصبت فمن الله وإن أخطأت فمن نفسي والشيطان ،وأتمنى من الأخوة التقنيين تصحيحي.

Updated: أغسطس 28, 2014 — 6:17 م

فتح الصندوق لهاتف OPPO Find 7a

بسم الله الرحمن الرحيم

 

فتح الصندوق لهاتف OPPO Find 7a

 

فيديو:

 

صور:

 

المواصفات:

مقاييس أبعاد 152.6 × 75 × سماكة 9.2 mm
الوزن 170 جرام
مقاس الشاشة 5.5 أنش
درجة وضوح 1080p Full HD (1920 x 1080 pixels), 403 PPI
Screen type IPS panel by JDI, 1000:1 contrast ratio مع 16 مليون لون
Touchscreen Multi-touch, capacitive screen, Gorilla Glass 3, Touch-on-Lens Technology, support for gloved and wet touch input
Battery 2800 ملي أمبير مع تقنية الشحن السريع من OPPO باسم Rapid Charge
السعة الداخلية 16 جيجابايت مع 12 جيجابايت للمستخدم فقط
ذاكرة خارجية يدعم حتى 128 جيجابايت  microSD card
الكاميرا الخلفية 13 ميجابيكسل وفتحة العدسة  f/2.0 بمعالج Sony Exmor IMX214 BSI sensor
الكاميرا الأمامية 5.0 ميجابيكسل مع زاوية عرض 80 درجة وفتحة العدسة  f/2.0
Scene modes Normal, Super Zoom, HDR, Panorama, Beautify, Slow Shutter, Audio Photo, GIF mode, RAW mode, Smart Scene, Portrait, Landscape, Sports, Night
تصوير فيديو 4K  @ 30 fps, 1080p  @ 60 fps, 720p slow motion video @120 fps
NFC Yes
الشبكات GSM/GPRS/EDGE: 850/900/1800/1900MHz
WCDMA: 850/900/1900/2100MHz
FDD-LTE: Bands B1/3/7/20
TD-LTE: Band B40
المعالج Qualcomm Snapdragon 801 (MSM8974AB)
سرعة المعالج 2.3GHz رباعي النواة
معالج رسوميات Adreno 330
الذاكرة العشوائية 2 جيجابايت
تقنيات USB OTG, Bluetooth 4.0, 5G Wi-Fi 802.11 b/g/n, Wi-Fi Direct, Wi-Fi Display, GPS, GLONASS
الوايرلس Dual-bandمع  802.11a/ac/b/g/n
الشحن اللاسلكي لا
النظام ColorOS, based on Android 4.3

 

 

Updated: مايو 13, 2014 — 12:43 م

سبب تأخر وصول التحديث لأجهزة الأندرويد

Android-Updates

بإذن الله سنتعرف أكثر على الخطوات التي تتبعها الشركات من بداية صدور التحديث الجديد الى وصول التحديث الى أجهزة المستخدمين.

  • مراحل التنفيذ قبل إطلاق التحديث للمستخدمين لأي نظام.
  • الفرق بين IOS  و Android .
  • الفرق بين الأجهزة الخاصة بجوجل (Nexus) والشركات الاخرى.

مراحل التنفيذ قبل إطلاق التحديث للمستخدمين لأي نظام:

مراحل التنفيذ قبل إطلاق التحديث للمستخدمين

مراحل التنفيذ قبل إطلاق التحديث للمستخدمين

 

  • إصدار تحديث النظام:

تقوم الشركة (مالكة النظام) بالإعلان عن النظام الجديد للشركات والمستخدمين.

تقوم الشركات المصنّعة للمعالجات مثل (Samsung , Huawei , Sony, HTC …الخ) بعمل الكود (البوابة) الذي يسمح للنظام بالتحكم بجميع قطع الهاردوير بالجهاز.

تقوم الشركات المصنعة بالتعديل على نظام التشغيل بما يناسب عتاد كل جهاز.

  • الاختبارات:

تقوم الشركات المصنعة بالتأكد من عمل جميع خدمات الجهاز بما في ذلك (الهاردوير والسوفتوير).

  • إطلاق التحديث للمستخذين:

بعد الانتهاء من مرحلة الاختبارات والتأكد من عمل جميع الوظائف، تقوم الشركات المصنعة بإطلاق التحديث الجديد لأجهزتها للمستخدمين.

الفرق بين تحديثات IOS و Android

Android vs. IOS

Android vs. IOS

 

  • نظام Android هو النظام الأساسي لذلك يقومون بالإعلان عن النظام الجديد مبكرا ومن ثم تقوم الشركات المصنعة الحصول على هذا النظام الجديد وبعدها يقومون بالمراحل السابقة ثم يصدرون التحديث الجديد.
  • نظام IOS يمر بجميع المراحل السابقة مثل أي نظام آخر لكن يقومون بالإعلان عن التحديث الجديد بعد ان ينتهوا من جميع المراحل.
  • لكن بالنسبة لأجهزة Nexus الخاصة بجوجل تحصل على التحديثات أسرع من غيرها حيث ان جوجل قامت بجميع المراحل السابقة بالفعل.

كمقارنة عادلة بين النظامين يجب عمل المقارنة على أجهزة Nexus بأنواعها من Google وأجهزة Apple بأنواعها، فكلتا الشركتين يقومان بإطلاق التحديثات لأجهزتها بسرعة لأنهما يقومان بعمل جميع الخطوات السابقة على اجهزتهم الخاصة ولن يطلقوا نظاما جديدا ما لم يتم تجربته أولا على أجهزتهم الأخيرة ومن باب أولى لن يطلقوا أجهزة جديدة ما لم يكن هناك نظاما ملموسا لتجربته أولا ثم التعديل عليه.

إن أصبت فمن الله وإن أخطأت فمن نفسي والشيطان

Updated: مارس 3, 2014 — 4:15 م

كيف تبحث عن روت لهواتف الاندرويد

السلام عليكم ورحمة الله وبركاته

هل مللت من البحث عن روت الجهاز الأندرويد خاصتك و لم تصل لنتيجة ؟ معنا ستعرف روت جهازك بخطوات بسيطة ، و ليس روت و فقط بل سنعلمك أسرار الوصول لأي مشكلة تقابلك عبر جوالك ، قبل أن أطلعك على أسرار البحث عن مشكلتك عبر الانترنت تذكر أنك لست الوحيد في العالم الذي يبحث عن حل للمشكلة التي قابلتك ، و لذا فإن البحث السليم يوصلك لحل أي مشكلة مهما كانت عويصة ..

 

بداية فإن تحتاج لأن يكون هاتفك له ماركة أي هاتف أصلي و ليس مجرد جوال مقلد ، كما يجب أن تبحث عن الموديل الخاص بالجهاز و ليس فقط نوعه ، بعد ذلك تأكد أن بوت لودر ليس مغلقا ، لأنه يجب عليك أن تفتح بوت لودر، ثم تبدأ خطوات البحث السليم .

model number

رابط الموضوع الذي تحدثت فيه عن بوت لودر:

Android Super User : بوت لودر Bootloader

رابط الموضوع الذي تحدثت فيه عن الروت:

 Android Super User : روت – Root

بعد ذلك يمكنك البحث في المواقع الأجنبية ، و أهم هذه المواقع هو منتدى لا يعرفه الكثيرون ، و يعتبره آخرون سر التركيبة لحل كل مشكلات الجوالات الذكية سواء أندرويد أو ويندوز أو أبنتوتتش ، و حتى معظم الأنظمة العالمية.

منتدى المطورين XDA Developer

http://forum.xda-developers.com

هذا المنتدى يشارك به كل عباقرة و محترفي العالم من العرب و الهنود و الأمريكان و من كل الجنسيات في مجال برمجة الجوالات الذكية ؛ ليضعوا أخر ما توصلوا له من نتائج باللغة الانجليزية ، و تجد في المنتدى بيانات ضخمة عن أي هاتف مهما كان غير مشهور .

و أبسط طريقة للبحث و التي ستسهل عليك المهمة مهما كان مستواك متواضعا في الإنجليزية اتبع التالي :

مثلا سأبحث عن هاتف قد لم يسمع عنه الكثير منكم Motorola Droid RAZR HD و هو على سبيل التجربة و يمكن تكرار العملية مع أي جهاز آخر .

– ادخل على منتدى RAZR HD Android Development

– أولا ابحث في المواضيع المثبتة في اي منتدى لأي جهاز بالتأكيد ستجد موضوع مثبت شامل كل شي عن الجهاز أو موضوع عن روت فقط أو عن بوت لودر.

ان وجدت موضوع مثبت يبدأ ب  فيه كلمة ROOT  ادخل عليه وطبق اللي فيه لأنه لن يتم تثبيت الموضوع الا ان كان سليم

ان وجدت موضوع مثبت يبدأ ب [REF] فهذا موضوع مرجع لأي شي يخص هذا الهاتف ادخل على وابحث عن Root  وستجد روابط مواضيع مختلفة تتحدث عن روت لجهازك .

ان لم تجد موضوع مثبت استخدم البحث الموجود في المنتدى اكتب اسم الجهاز رقم المودل وبعده كلمة root  وستجد الموضوع ان شاء الله

هناك طريقة أخرى مضمونة و مفصلة بنسبة أكبر تصل ل 100 % و هي عبر موقع http://wiki.cyanogenmod.org/w/Devices

ابحث عن الجهاز الذي تريد واضغط على طريقة تنصيب الروم وطبق الخطوات

– هذان موقعان عربيان متخصصان في الاندرويد وستجد ما تريد عليهما

أولا موقع http://xq55.ws

هذا الموقع منظم ومرتب ومخصص لمعظم هواتف سامسونج و HTC  وبعض الشركات الأخرى

يعجبني في هذا الموقع أنهم يقومون بعمل الشرح بالتفصيل الممل سواء كانت بالصور أو الفيديو

ثانيا منتدى http://www.ce4arab.com/vb7/

في هذا المنتدى ستجد أقساما متخصصة لترقيات هواتف السامسونج وHTC  و أجهزة جوجل  Nexus وقسم لباقي الهواتف

 ادخل لقسم الشركة التي تمتلكها وانظر الى المواضيع المثبتة إن وجدت موضوع عن يتحدث عن هاتفك فهنيئا لك وان لم تجد استخدم خاصية البحث في المنتدى وابحث عن اسم هاتفك ويفضل رقم المودل و بعدها root

إن لم تجد تفاصيل عن جوالك يمكنك البحث في اليوتيوب و محرك البحث جوجل

بعد ما تقوم بكل هذه الخطوات ولم تجد روت الخاص في بهاتفك بعدها تفضل بسؤال احد الخبراء في اي من المواقع التي ذكرتها في الفيديو

إن أصبت فمن الله  وإن أخطأت فمن نفسي والشيطان

Updated: أبريل 7, 2014 — 9:19 ص

ماذا بعد تعلم لغة البرمجة ؟

programing

 

[note]أي شخص بامكانه تعلم اي لغة برمجة بكل قواعدها، لكن تعلم اللغة وحدها لا يكفي لعمل مشاريع سليمة وكود نظيف. [/note]

اغلب المبرمجين المبتدئين يتعلموا لغة برمجة وما يعرفوا يطبقوا برنامج كامل بشكل سليم او كود مرتب و نظيف

السؤال ماذا بعد تعلم لغة البرمجة ؟

هذه بعض الخطوات اللي انصحك تتعلمها وان شاء الله تقلل من تساؤلاتك

 

(أهم شي خذ راحتك في التعلم ولا تستعجل)

1- يفضل يكون عندك خلفية بسيطة عن الرياضيات خصوصا (الاحتمالات والإحصاء)

2- لغة من لغات Object-oriented

(مو شرط ان تتقنها تماما لكن لازم تعرف المفاهيم الاساسية تمام لأن الخطوات الباقية بتفهمك كل شي)

يعني لا تفكر في عمل مشروع كبير وانت لا تزال في هذه المرحلة بس افهم الاساسيات والخطوات الباقية بتقوم بالواجب 😉

3- ابحث عن دروس عن مشاريع بنفس اللغة اللي تعلمتها وطبقها

(لا تعمل نسخ ولصق) اكتب الكود بنفسك وبعد ما تكتبه ارجع اقرأه مرة ثانية وحاول تفهم محتواه (يفضل تكتب تعليقات عند كل مهمة في الكود )

4- بعد ما تشعر انك طبقت عدد مناسب من المشاريع (لمجرد التعليم) تعلم ال Algorithms

بتعلمك للخوارزميات بتغير طريقة تفكيرك في البرمجة و ستقوم بكتابة الاكواد باحترافية.

هذه كورس مجاني عن Algorithms: Design and Analysis
https://www.coursera.org/course/algo

 

5- Design Patterns
عبارة عن مجموعة انماط لحل مشاكل معينة باي لغة من لغات Object-oriented (تهم هندسة البرمجيات)
كالعلاقة بين الكلاسات (مع بعضها بكافة انواعها) وتحديد المهام عليها

هي علم وبحر واسع ويحتاج (مخمخة) لكي تستوعبه وستلاحظ حتى تطبيق الامثلة الموجودة مختلفة عن كل الامثلة اللي تعلمتها من قبل

وهذه قناة في اليوتيوب متخصصة في Object Oriented Design Patterns

https://www.youtube.com/user/zapatterns/featured

 

 إن أصبت فمن الله  وإن أخطأت فمن نفسي والشيطان 

 

[مصدر الصورة]

 

Updated: أبريل 7, 2014 — 9:21 ص
AHMADSSB BLOG © 2014