لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 05/31/16 في كل الموقع
-
العناصر الأساسية في تطبيقات أندرويد تتكون تطبيقات أندرويد من أربعة عناصر أساسية لكل منها دورها الخاص الذي تستطيع القيام به، ويتم استخدامها بناءً على الغرض أو المهمة المطلوب تنفيذها وهي: النشاطات Activities يُمثل واجهة واحدة والتي تظهر أمام المستخدم ويتفاعل معها، وقد يتكون التطبيق من عدة واجهات مختلفة وبالتالي عدة Activities مختلفة، فمثلًا تطبيق البريد الإلكتروني لديه واجهة خاصة بعرض البريد الجديد وعند قراءة محتوى رسالة محددة تظهر لك في واجهة أخرى مخصصة لذلك وإذا أردت إرسال رسالة بريد جديدة يظهر لك واجهة جديدة لقيام بهذه المهمة. فأغلب تطبيقات أندرويد تتكون من عدة نشاطات Activities ولكن عند فتح التطبيق هناك واجهة واحدة دائمًا ما تكون هي الواجهة الرئيسية والتي تُعرض أمام المستخدم وينتقل من خلالها إلى باقي النشاطات Activities الخاصة بالتطبيق. الخدمات Services يُستخدم هذا العنصر بشكل أساسي عند القيام بعمليات طويلة ويتم تنفيذها في الخلفية دون تعطيل الواجهة الرئيسية أو تعامل المستخدم مع التطبيق، ومثال على ذلك عند تشغيل تطبيق المتصفح وتحميل ملف من أحد المواقع فيتم تنفيذ هذه المهمة في الخلفية ويتفاعل المستخدم مع المتصفح في ذات الوقت ولا ينتظر انتهاء التحميل، وذلك لأن هذه المهمة تمت من خلال العنصر Service. مستقبلات البث Broadcast Receivers هي حلقة الاتصال بين التطبيق ونظام التشغيل. ويستخدم هذا العنصر لاستقبال الرسائل التي يبُثها نظام التشغيل أو تطبيق آخر، فمثلًا عندما يستقبل نظام التشغيل مكالمة هاتفية يقوم ببث رسالة لكل التطبيقات المتواجدة على الهاتف لإعلامهم بوجود مكالمة تحتاج إلى التطبيق الخاص بالاتصال والذي يستطيع التعامل معها وعرض بيناتها أمام المستخدم ويكون في تطبيق الاتصال هذا العنصر لاستقبال الرسالة من نظام التشغيل والتعامل معها، أو عندما ينتهي تطبيق من تحميل صورة يُرسل لباقي لتطبيقات رسالة أن هناك صوة جديدة على الهاتف يمكن للتطبيق المسؤول عنها التعامل معها. لذا فهذا العنصر هو المسؤول عن استقبال هذا النوع من الرسائل واتخاذ القرار المناسب. مزودو المحتوى Content Providers يوفر هذا العنصر طريقة لمشاركة البيانات بين التطبيقات المختلفة، مثال على ذلك قاعدة البيانات الخاصة بجهات الاتصال على هاتفك نجد أن هناك بعض التطبيقات التي تستخدمها في تقديم خدماتها. النشاطات Activities نبدأ أولًا بالنشاطات Activities حيث لا يخلو تطبيق من واجهة للمستخدم، لصنع نشاط في التطبيق يتم ذلك عن طريق كتابة صنف جديد Class يرث من صنف آخر اسمه Activity، وهذا الصنف هو الأب دائمًا عند عمل نشاط جديدة ويحتوي على التوابع Methods الخاصة بالنشاط والمكوّنة لها. public class MainActivity extends Activity { } إن كانت لديك خبرة سابقة في التعامل مع أي لغة برمجة فمن المؤكد أنك رأيت الدالة ()main والتي تُمثل نقطة البداية للبرنامج، ولكن في أندرويد هناك نشاط رئيسي يُمثل نقطة البداية للتطبيق ولكل نشاط دورة حياة خاصة به، وتتكون من مجموعة من التوابع methods يتم استدعاؤها لحظة إنشاء النّشاط ومجموعة من التوابع التي يتم استدعاؤها لحظة إزالة النّشاط ونجدها في الصورة التالية. دورة حياة النشاط ()onCreate: ويتم استدعاؤه عند إنشاء النشاط أول مرة، ويتم بداخلها ربط الواجهة بالشيفرة التي تتحكم في التطبيق. ()onStart: ويتم استدعاؤه عندما تبدأ الواجهة في الظهور وبعد الانتهاء من ()onCreate. ()onResume: ويتم استدعاؤه عندما تظهر الواجهة الخاصة بالـ Activity ويتفاعل معها المستخدم. ()onPause: ويتم استدعاؤه عندما تبدأ الواجهة في الاختفاء أو تظهر بشكل جزئي ولا يمكن للمستخدم التفاعل معها لوجود شيء ما يحجبها وعند إزالة ما يحجبها يتم استدعاء ()onResume مرة أخرى. ()onStop: ويتم استدعاؤه عندما تختفي الواجهة من أمام المستخدم نتيجة للانتقال إلى واجهة أخرى داخل نفس التطبيق أو لغلق التطبيق والانتقال لتطبيق آخر. ()onRestart: ويتم استدعاؤه عند الرجوع مرة أخرى إلى نفس الواجهة ثم يتم استدعاء ()onStart. ()onDestroy: ويتم استدعاؤه قبل تدمير الواجهة وإزالتها من الذاكرة ويتم ذلك عندما يحتاج نظام التشغيل إلى المزيد من المساحة في الذاكرة أو إزالتها برمجيًا من الذاكرة. مثال 1 الآن قم بفتح Android Studio وسنقوم بعمل تطبيق جديد اسمه "Activity Life Cycle" حتى نرى كيف ينادي النظام التّوابع الخاصة بالنّشاط. سنختار Empty Activity وندع باقي الاختيارات كما هي. بعد الانتهاء ستجد في المجلد java صنف Class يدعى MainActivity ويرث من Activity (قد تجد الصنف يرث من AppCompatActivity يمكنك تغييرها إلى Activity أو دعها كما هي فلا يوجد حاليًا فرق بينها). ستجد داخل الصنف التابع ()onCreate. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } وستجد بداخلها أنها تستدعي ;(setContentView(R.layout.activity_main وتمرر لها R.layout.activity_main، والحرف R يعني المجلد res، و Layout هو المجلد المتواجد داخل res بنفس الاسم، وبداخله نجد الملف activity_main.xml. ويقوم هذا التابع بربط الواجهة التي نقوم بصنعها في ملف XML بالشيفرة المتواجدة في ملف الجافا للتحكم بالعناصر المتواجدة في الواجهة. سنضع هذا السطر بداخل ()onCreate. Toast.makeText(this,"onCreate Method",Toast.LENGTH_SHORT).show(); ومن خلال هذا السطر نقوم بإظهار رسالة للمستخدم لمدة محددة كما في الصورة. والآن نقوم بنفس الشيء لباقي التوابع: package apps.noby.activitylifecycle; import android.app.Activity; import android.os.Bundle; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toast.makeText(this,"onCreate Method",Toast.LENGTH_SHORT).show(); } @Override protected void onStart() { super.onStart(); Toast.makeText(this,"onStart Method",Toast.LENGTH_SHORT).show(); } @Override protected void onResume() { super.onResume(); Toast.makeText(this,"onResume Method",Toast.LENGTH_SHORT).show(); } @Override protected void onStop() { super.onStop(); Toast.makeText(this,"onStop Method",Toast.LENGTH_SHORT).show(); } @Override protected void onPause() { super.onPause(); Toast.makeText(this,"onPause Method",Toast.LENGTH_SHORT).show(); } @Override protected void onDestroy() { super.onDestroy(); Toast.makeText(this,"onDestroy Method",Toast.LENGTH_SHORT).show(); } @Override protected void onRestart() { super.onRestart(); Toast.makeText(this,"onRestart Method",Toast.LENGTH_SHORT).show(); } } ثم نقوم بتشغيله على المحاكي لنرى التطبيق وهو يعمل. ملاحظات التابع ()onCreate هو التابع الوحيد الذي نقوم بداخله بتعريف واجهة المستخدم من داخل المجلد layout باستخدام التابع ()setContentView. لا يشترط عند كتابة التوابع كتابتها بترتيب استدعائها. يجب أن يحتوي النّشاط على التابع ()onCreate وإلا لن تعمل، وباقي التوابع نستخدم منها فقط ما نحتاجه لأداء مهمة محددة في وقت محدد، فمثلًا إذا كان التطبيق يستخدم الكاميرا وقام المستخدم بغلق التطبيق أو الانتقال إلى تطبيق أخر فيجب عند هذه الحالة قبل اختفاء النّشاط غلق الكاميرا حتى لا يتم إهدار الموارد دون استخدام، فأنسب مكان لذلك هو التابع ()onStop فهو الذي يُعبر عن هذه الحالة . عند صنع نشاط جديد يجب تعريفه في ملف AndroidManifest.xml كما بالشكل، وإذا لم يتم تعريفه فلن تعمل ولن يستطيع نظام التشغيل تشغيلها. ... <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> ... يُستخدم ملف AndroidManifest.xml لتعريف نظام التشغيل بالمكونات الأساسية التي يتكون منها التطبيق، داخل الوسم <application> سنجد وسمًا آخر يدعى <activity> وهو الوسم المستخدم لتعريف نظام التشغيل أن التطبيق يحتوي على Activity ولدى هذا الوسم الخاصية name لمعرفة ملف جافا الخاص بهذا الـ Activity. وكما ذكرنا أن تطبيقات أندرويد تتكون من Activity رئيسية تمثل نقطة البداية للتطبيق لذا لتعريف النظام بأن هذا النّشاط هو الرئيسي نستخدم الوسم <intent-filter> وبداخله يتم تعريف Action من النوع MAIN وتعريف Category من النوع LAUNCHER وإذا لم يتم تعريفهما معًا فلن تظهر الأيقونة الخاصة بالتطبيق مع باقي التطبيقات في قائمة التطبيقات الرئيسية. مثال 2 سنقوم بصنع تطبيق كما في الصورة التالية يحتوي على نص وزر عند الضغط عليه يتغير النص إلى كلمة أخرى من اختيارنا. أولًا نقوم بصنع الواجهة الخاصة بالتطبيق في ملف activity_main.xml: <?xml version=”1.0” encoding=”utf-8”?> <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”match_parent” android:layout_height=”match_parent” android:orientation=”vertical”> <TextView android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:text=”Hello World!” android:id=”@+id/txt”/> <Button android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:text=”Change Text” android:id=”@+id/chngbtn”/> </LinearLayout> لا يوجد اختلاف بينه وبين ما قمنا بعمله سابقًا، واستخدمنا خاصية id للتحكم في هذا العنصر من شيفرة الجافا وأعطينا لكل عنصر Id مميز. ثانيًا الاستجابة للزر برمجيًا وتغيير النص، ولكن يجب أولًا أن نصنع متغير ونربطه بالزر المصنوع في xml، ونقوم بذلك كما في الشكل التالي: Button btn; ... btn = (Button) findViewById(R.Id.chngbtn); قمنا بتعريف متغير من الصنف Button وهو صنف موجود في المكتبات الخاصة بأندرويد، وقمنا بربطه باستخدام التابع ()findViewById وتمرير له R.Id.chngbtn وتعني من المجلد res ستجد عنصر له Id قيمته chngbtn. ويقوم هذا التابع بالبحث عن العناصر بمعرفة Id الخاص بها وإرجاعها، وقمنا باستخدام خاصية التحويل Casting وذلك لأن التابع يرجع عنصرًا من النوع View وهو الأب للعنصر Button لذا نقوم بتحويله إلى الصنف المحدد عن طريق (Button). وبالمثل نقوم بربط TextView في شيفرة الجافا. والآن لجعل الزر يفعل شيئًا عند الضغط عليه نقوم باستخدام Listeners والتي تقوم بدورها بانتظار أن يضغط المستخدم على الزر حتى تقوم بوظيفة ما. btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Do Something here } }); باستخدام المتغير btn نقوم باستدعاء التابع setOnClickListener وتمرير له ()new View.OnClickListener وهو ما يدعى بالصنف المجهول Anonymous class، وبداخله نجد الدالة onClick والتي تُستدعى عند الضغط على الزر ويتم تنفيذ الأوامر التي بداخلها. سنقوم الآن بتغيير الكلمة عند الضغط على الزر من !Hello World إلى Hello Android Developer فداخل onClick نكتب: String str = "Hello Android Developer"; tv.setText(str); قمنا بتعريف متغير من النوع String وتخزين النص بداخله، وباستخدام المتغير tv نستدعي التابع setText وهو المسؤول عن كتابة نص في TextView برمجيًا ومساوٍ للخاصية android:text في xml ونمرر له النص المراد كتابته. لتُصبح الشيفرة النهائية هي: package apps.noby.controlapps; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { Button btn; TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn =(Button) findViewById(R.id.chngbtn); tv = (TextView) findViewById(R.id.txt); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String str = "Hello Android Developer"; tv.setText(str); } }); } } عند تشغيل التطبيق على المحاكي والضغط على الزر نجد أن التطبيق يعمل بالشكل المطلوب. ملاحظات يتم تعريف نوع المتغيرات خارج التابع onCreate. تستخدم import عندما يكون هناك صنف متواجد في إحدى المكتبات ونريد تضمينه داخل تطبيقنا فنقوم بكتابة بجانب الأمر import ومكان تواجد هذا الصنف. يجب ذكر اسم الحزمة في بداية الشيفرة الخاصة بالنّشاط. يمكن تمرير النص للتابع setText في سطر واحد مثل: tv.setText("Hello Android Developer"); بدلًا من تخزين قيمة النص في متغير ثم تمرير هذا المتغير. مثال 3 سنضيف في هذا المثال EditText ليستطيع المستخدم كتابة نص ثم سنقوم بعرضه له بدلًا من عرض نص محدد مسبقًا. أولًا نبدأ بصنع الواجهة ولن تختلف عن واجهة المثال السابق إلا بزيادة عنصر من النوع EditText: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:id="@+id/txt"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Write your Name here" android:id="@+id/edt"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Change Text" android:id="@+id/chngbtn"/> </LinearLayout> الآن للتحكم فيما يكتبه المستخدم بداخل EditText برمجيًا نعرف متغيرًا جديدًا داخل ملف MainActivity.java ونربطه بالعنصر الذي قمنا بتعريف في الواجهة. ولتحديد ما سيتم كتابته عند الضغط على الزر: String str = et.getText().toString(); tv.setText("Hello " + str + "!"); باستخدام المتغير get نستدعي التابع getText وهو المسؤول عن إعادة البيانات التي قام المستخدم بكتابتها في العنصر EditText ثم نستدعي التابع toString لتحويلها إلى نص و تخزينه بداخل المتغير str ، ثم نمرر هذا المتغير إلى التابع setText كما سبق، تستخدم "+" للربط بين نصين ففي هذا المثال نريد الربط بين كلمة Hello والقيمة التي أدخلها المستخدم. package apps.noby.controlapps; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { Button btn; TextView tv; EditText et; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.chngbtn); tv = (TextView) findViewById(R.id.txt); et = (EditText) findViewById(R.id.edt); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String str = et.getText().toString(); tv.setText("Hello " + str + "!"); } }); } } ثم نقوم بتجربة التطبيق على المحاكي. مثال 4 سنقوم بصنع تطبيق يظهر صورة عند الضغط على الزر ثم يخفيها عند الضغط عليه مرة أخرى. أولًا نبدأ بصنع واجهة المستخدم: <?xml version="1.0" encoding="utf-8"?> <!-- activit_main.xml --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Show" android:onClick="showImage" android:id="@+id/show"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/and_img" android:visibility="invisible" android:id="@+id/ic"/> </LinearLayout> قمنا بتغيير أماكن ظهور العناصر إلى المنتصف عن طريق الخاصية: android:gravity="center" وجعلنا الصورة عند بداية استخدام التطبيق غير ظاهرة باستخدام الخاصية: android:visibility="invisible" واستخدمنا خاصية جديدة للزر تدعى: android:onClick="showImage" وتستخدم كطريقة أخرى لصنع Listener ينتظر ضغط المستخدم على الزر ولكن عن طريق xml. ثانيًا للتحكم بهذه الواجهة نقوم في ملف MainActivity.java بربط ImageView بمتغير كما سبق. ولظهور واختفاء الصورة عند الضغط على الزر: public void showImage(View view){ if(img.getVisibility() == View.VISIBLE){ img.setVisibility(View.INVISIBLE); showBtn.setText("Show"); } else{ img.setVisibility(View.VISIBLE); showBtn.setText("Hide"); } } نستخدم هذه الدالة والتي يجب أن تكون كالتالي: الوصول لها Public ولا ترجع أية قيمة (يعني تُرجع void) الاسم الخاص بها نفس الاسم الذي كتبناه سابقًا للخاصية onClick. تمرير للدالة عنصر من النوع View. ثم نقوم بكتابة ما سيحدث عند الضغط على الزر كما كنا نفعل سابقًا. ونقوم داخل الدالة بالتحقق إذا ما كان العنصر ظاهرًا باستدعاء التابع ()getVisibility باستخدام المتغير img، فإن كان ظاهرًا نقوم بإخفائه باستدعاء التابع ()setVisibility وتمرير له الثابت View.INVISIBLE، ثم نغير النص المكتوب على الزر. أما إذا كانت الصورة غير ظاهرة نقوم بتمرير الثابت View.VISIBLE للتابع ()setVisibility، ثم تغيير النص المكتوب على الزر أيضًا. package apps.noby.controlapps; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity { Button showBtn; ImageView img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showBtn = (Button) findViewById(R.id.show); img =(ImageView) findViewById(R.id.ic); } public void showImage(View view){ if(img.getVisibility() == View.VISIBLE){ img.setVisibility(View.INVISIBLE); showBtn.setText("Show"); } else{ img.setVisibility(View.VISIBLE); showBtn.setText("Hide"); } } } ثم نقوم بتجربة التطبيق على المحاكي. بهذا نكون قد وصلنا إلى نهاية هذا الدرس، في انتظار تجربتكم وآرائكم.1 نقطة
-
من الأشياء التي يجهلها البعض أن هذه الطابعات لا تتوفر على مداد، فهي تعتمد على تقنية الكتابة على الورقة باستخدام تقنية الحرارة، وتنتشر مثل هذه الماكينتات داخل المقاهي ومحلالت الأكلات السريعة، حيث تعطي الفاتورة محتوية المحتويات، مع إظهار المجموع في ذيل الورقة. بالاضافة إلى ما قدمه خليل، أرفق كود مصدري لتطبيق يطبع بطابعة حرارية. الكود كالتالي: public class printnow { public static void printCard(final String bill ){ final PrinterJob job = PrinterJob.getPrinterJob(); Printable contentToPrint = new Printable(){ @Override public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { Graphics2D g2d = (Graphics2D) graphics; g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); g2d.setFont(new Font("Monospaced", Font.BOLD, 7)); if (pageIndex >0){return NO_SUCH_PAGE;} //Only one page String Bill [] = bill.split(";"); int y = 0; for (int i = 0; i < Bill.length; i++) { g2d.drawString(Bill[i], 0, y); y = y + 15; } return PAGE_EXISTS; } }; PageFormat pageFormat = new PageFormat(); pageFormat.setOrientation(PageFormat.PORTRAIT); Paper pPaper = pageFormat.getPaper(); pPaper.setImageableArea(0, 0, pPaper.getWidth() , pPaper.getHeight() -2); pageFormat.setPaper(pPaper); job.setPrintable(contentToPrint, pageFormat); try { job.print(); } catch (PrinterException e) { System.err.println(e.getMessage()); } } } الكود من شأنه أن يطبع ورقة واحدة فقط، ويبقى لك مهمة تغيير المحتوى المطبوع حسب الحاجة. Printsupport Java Printing reciepts with thermal printer in java Printing example with Java1 نقطة
-
هناك العديد من الطرق المتبعة لذلك، أي لتشغيل تطبيقات أندرويد على حاسوبك الشخصي، فأظن أنه من غير المعقول تثبيث نظام تشغيل أندرويد و هناك إمكانية للعمل بتطبيقاته من خلال عدة اختيارات، من أهمها -على سبيل المثال -: bluestacks لا يُعوض نظام التشغيل بل يشغل تطبيقات Android على ويندوز اعتبارها كباقي التطبيقات على النظام. Android Studio المحاكي الرسمي لشركة جوجل، فبالاضافة إلى تخصصه في برمجة تطبيقات أندرويد، يمكن عمل run للتطبيقات على الحاسوب. Android-x86 هو مشروع مجموعة من المبرمجين، حيث يتيح امكانية تشغيل تطبيقات أندرويد. Android on Intel Architecture How to Run Android Apps on Your PC or Mac How to run Android apps in Windows1 نقطة
-
من بين جميع النصائح التي تسمعها من خبراء ريادة الأعمال، أصدقك القول بأنّ هناك نصيحتان فقط يمكنك الاستفادة منهما على أرض الواقع. قد يخرج هذا المقال عن سياق مقالات ريادة الأعمال التي ألفت قراءتها ولكنّها مقالة تذكيرية مهمّة جدًّا بالنسبة لي وللآخرين على حدّ سواء، ممّن يعملون بجهد في تنمية مشاريعهم التجارية وشركاتهم النّاشئة. لقد سئمت حقًّا من العناوين الرنانة التي يطلقها في الغالب ناشرون محترمون، مثل (هذه الأمثلة حقيقية): 7 أسباب تدفعك إلى الاستثمار في المحتوى التفاعلي. لماذا يجدر بمشروعك التجاري أن يستفيد من Instagram بحلول 2016. 10 أسباب تدفعك إلى الاستعانة بـ Pinterest في مشروعك التجاري. لماذا يجدر بمشروعك التجاري أن يكون في Googl+ Local. 10 أسباب تدفعك إلى الاستفادة من الخدمات السحابية في مشروعك التجاري. 5 أسباب تجعل مشروعك التجاري بحاجة إلى وسائل التواصل الاجتماعي. في أفضل الأحوال، تتضمن هذه العناوين نصائح لا تخلو من المبالغة، وفي أسوء الأحوال، لا تعدو كونها مجرد نصائح كاذبة يمكن أن تكون سببًا في الإضرار بمشروعك التجاريّ أو شركتك النّاشئة؛ لذا أعتقد أن الوقت المناسب قد حان لتجاهل هذه النصائح وضربها عرض الحائط. ما الأمران اللذان يحتاج إليهما كل مشروع تجاري؟ إن كنت ترغب في المحافظة على مشروعك التجاري وإبقاءه على قيد الحياة، يجب عليك القيام بأمرين فقط، هما: تقديم شيء قيِّم لفئة من الناس أو من المؤسّسات. تحقيق الأرباح من هذه القيمة. إن أخبرك أحد ما أنّ مشروعك التجاري يتحتاج إلى تقديم شيء آخر عدا هذين الأمرين، فأنت حينها أمام ثلاثة احتمالات: لا يدرك هذا الشخص معنى كلمة "يحتاج"، (أو ربما يتعمّد تجاهلها). لدى هذا الشخص ما يبيعك إيّاه معتمدًا في ذلك على اعتقادك بهذه "الحاجة". هذا الشخص متحيّز، وذلك لأنّه يعتقد بأنّ طريقته في معالجة الأمور هي الطريقة الوحيدة للقيام بذلك. كما تلاحظ، لا يبدو في أي حالة من هذه الحالات أنّ ما يقدّمه إليك ذلك الشخص هو بمثابة نصيحة يمكن الأخذ بها وبأي شكل من الأشكال. كل شيء عدا هذين الأمرين قابل للنقاش في الواقع، لا يحتاج مشروعك التجاري إلى تأدية أي وظيفة أخرى عدا هاتين الوظيفتين. فعلى الرغم من أنّي أؤيد وبشدّة استفادة المشاريع التجارية من التسويق بالمحتوى، ونحن نقوم بذلك من خلال ما نقدّمه من محتوى، إلا أنّ هناك الكثير من المشاريع التي حقّقت نجاحات كبيرة دون الاستعانة بهذا النوع من التسويق. وعلى الرغم من أني أحب أن تولي المشاريع التجارية اهتمامًا بالغًا بمسألة الدعمّ الفنّي، وأن يستخدم أصحاب تلك المشاريع خدمة Groove للقيام بذلك، إلا أنّ هناك الكثير من المشاريع التجارية التي حقّقت النجاح دون اللجوء إلى هذه الأداة. لذا، ففي كل مرة يخبرك بها أحد الخبراء عن الأشياء التي يجب عليك القيام بها، يمكنك العثور على المئات أو الآلاف من الأمثلة المعاكسة وبكل سهولة عن طريق البحث في Google. إليك قائمة قصيرة بالأمور التي لا يجب عليك القيام بها في مشروعك التجاري (على الرغم من كونها ممارسات جيدة): تويتر فيسبوك Pinterest Snapchat Instagram التسويق بالبريد الإلكتروني التسويق بالمحتوى التسويق بالفيديو تهيئة محركات البحث SEO إعادة الاستهداف الإعلان بنظام الدفع مقابل النقرة (Pay per click (PPC الأتمتة بطاقات الأعمال المؤتمرات الارتقاء بالصفقة العلاقات العامة قبول بطاقات الائتمان المختلفة تطبيقات الهاتف المحمول خدمة عملاء متميزة الدعم الفني عبر الهاتف الدعم الفني عبر البريد الإلكتروني الدعم الفني عبر المحادثة تقديم الحسومات اختبارات A/B تتبع كل شيئ برامج التسويق بالعمولة Affiliate Programs برامج الدعوة Referral تطوير الأعمال/الشراكات يبدو الأمر وكأنّني أخوض في تفاصيل لا فائدة فيها، ولكنّه في الواقع أمر مهمّ للغاية. كل عنصر من عناصر القائمة السابقة يمكن أن يقدّم إليك فائدة كبيرة، ويمكن أن يساعدك على تحقيق أهدافك وتحقيق الوظيفتين اللتين ذكرتهما سابقًا، ألا وهما: توفير القيمة، وجني الأرباح منها. ولكن، ما أهمية هذا الموضوع؟ ولكن باستطاعتك الوصول إلى النجاح الذي تنشده وذلك عبر آلاف الوسائل المختلفة. في اللحظة التي تعتقد فيها أنّك محتاج إلى الاستعانة بأي عنصر من عناصر القائمة السابقة - العلاقات العامة على سبيل المثال - فإنّك تقيّد نفسك بمجموعة من المبادئ التي ستعيق حركتك وحركة مشروعك التجاري. ما الذي سيحدث لو أن العلاقات العامة لم تفلح في توجيه مشروعك التجاري بالاتجاه الصحيح؟ وماذا لو لم تكن العلاقات العامة هي الوسيلة الفضلى بالنسبة إلى مشروعك التجاري؟ إن كنت تعتقد أنّ مشروعك التجاري بحاجة إلى العلاقات العامة، فإنّك ستعمل حينها وبجدّ على تحقيق الفائدة القصوى من هذه الوسيلة، ولكن كن متأكّدًا من أن هذا سيكون على حساب شيء آخر. ولكن لو نظرت إلى العلاقات العامة نظرة صحيحة وذلك باعتبارها استراتيجية تساعدك على تحقيق أهدافك، فإنّ أسلوبك في التعاطي معها سيكون مختلفًا تمامًا، حيث ستُخضعها إلى اختبارات مكثّفة، وستحاول تحقيق النجاح عبر هذه الوسيلة من خلال البحث عن أفضل المصادر والمعلومات المتعلّقة بها، ومن ثَمَّ ستقيّم جدوى هذه الوسيلة من عدمها. وإن تبيّن لك بعد حين أنّ هذه الوسيلة غير ناجعة، فلا مشكلة في ذلك، لأنّ مشروعك التجاري غير مرتبط بها، ويمكنك الانتقال إلى استراتيجية أخرى، ومن يدري قد تدفعك هذه الاستراتيجية إلى الوصول لأهدافك وطموحاتك. يؤسفني القول أنّ الاعتقاد السائد هو عدم حاجة الشّركات النّاشئة إلى استراتيجية واحدة أو اثنتين وحسب لتحقيق النجاح، وإنّما تحتاج إلى العديد منها، وهذا يعني إهدار الكثير من الوقت والجهد والتركيز على أمور قد لا تعطي النتيجة المطلوبة منها. وأؤكّد لك أنّك لو قررت قضاء جلّ وقتك في متابعة الأمور التي يعتقد الآخرون أنّك بحاجة إلى القيام بها، فإنّك حينها ستكون في طريقك إلى الفشل. أهمية التركيز على الأمور الصحيحة هذا الموضوع كان السبب الذي دفعنا إلى حذف صفحتنا على Facebook سنة 2014، ولم نشعر بالندم حيال ذلك على الإطلاق. وممّا قلته في ذلك المقال: من الخطورة أن تعتقد أنّك بحاجة إلى القيام بأي شيء لا يقدّم أي قيمة أو لا يعود عليك بالأرباح. بالنسبة إلينا، فإنّ التسويق بالمحتوى يقدّم نتائج رائعة، وفي الواقع يعدّ مُوجّه النمو الأكبر بالنسبة إلى مشروعنا التجاري. ولكن هذا لا يعني أنّه سيكون ناجحًا في شركتك النّاشئة، وليس أمامك إلا تجربة هذه الوسيلة لمعرفة مدى النجاح الذي ستحققه، وأنصحك بشدّة أن تقوم بذلك مستفيدًا من جميع المصادر المتاحة لديك، وبعد ذلك قد تكتشف أنّ هذه الوسيلة غير ملائمة لمشروعك التجاري، ولا بأس في ذلك حينئذٍ. أرجو أن لا تفهم من كلامي هذا بأنّني أدعوك إلى الجمود وعدم القيام بأي شيء، بل العكس من ذلك تمامًا، فأنا آمل أن يدفعك كلامي هذا إلى تجربة العديد من الأمور - واحدًا أو اثنين في كل مرة - وأن لا تشعر بالندم عندما تتخلّى عن الأمور التي لا تقدّم أي نتيجة إيجابية لمشروعك التجاري. كيف تطبق هذا على شركتك النّاشئة آمل أن يكون هذا المقال منبّهًا لك لتبقى مركّزًا على ما هو مفيد بالفعل، ولا تشعر بالذنب عندما ترى أو تسمع أحد الأشخاص يخبرك بأنّك لا تقوم بأمر معيّن مع أنّك "محتاج" إلى ذلك. لا تنحرف عن المسار الذي رسمته لنفسك، ولا عن الاستراتيجيات التي تختبرها دون الاطلاع على فائدتها بالنسبة إلى مشروعك التجاري. لا تحاول متابعة جميع الأساليب والخطط المتوفّرة فقط لأنّ الآخرين يقولون بضرورة القيام بذلك، لا تقع في هذا الفخّ على الإطلاق. سجّل ملاحظاتك على جميع هذه الأساليب، ثم احفظ هذه الملاحظات في مكان ما (نحن نحفظها في Trello) ثم عد إليها في وقت لاحق لاختبار شيء جديد. وخلال ذلك الوقت، حافظ على تركيزك. ترجمة -وبتصرّف- للمقال Two Things That Every Business NEEDS to Be Doing Right Now لصاحبه Alex Turnbull. حقوق الصورة البارزة: Designed by Freepik.1 نقطة
-
تتميز النسخةPro من ويندوز10 باحترافيتها وتوفر على العديد من المزايا غير المتواجدة في النسخة Home حيث خصصت هذه الأخيرة لاستعمال المستخدم العادية(تحرير نصوص، تصفح أنترنت..) وكذا هي مخصصة لهواتف ويندوز الجديد والأجهزة اللوحية، في حين النسخة Pro مخصصة لماهو عملي أكثر، ويلخص الجدول التالي أهم الاختلافات بين الإصدارين: أيضا الفيديو التالي، يوضح أغلب الاختلافات الموجودة بين نسختي Pro وَHome من ويندوز10 : الصورة التالي تبرز الاختلاف بين مختلف نسخ ويندوز10:1 نقطة
-
أهلا بك أخي لنبدأ أول مع النسخة المنزلية Home هذه النسخة موجهة لأجهزة PC التقليدية، أجهزة التابلت، وأجهزة 2 في 1. وهي تتضمن جميع المزايا الشائعة والرئيسية المطلوبة، وتكافئ نسخة basic التي كانت متوفرة في ويندوز 8 ونسخة Home Basic في ويندوز 7. النسخة الاحترافية Pro مبنية على النسخة السابقة، وتكافئ نسخة Professional في ويندوز 7 ونسخة Ultimate في ويندوز 8. المزايا الإضافية التي تتضمنها موجّهة لعالم الأعمال businesses، عادةً هذه هي النسخة التي تركّبها الشركات على أجهزة الموظفين. أما النسخة الأخيرة فلعلك تقصد IoT Core وليس Pro core موجهة للأجهزة منخفضة المواصفات مثل مكنات ATM، نقاط البيع، وغيرها..1 نقطة