DEPENDENCY INJECTION IN ANDROID

dep

There is a very good video talking about Dependency injection and Dagger 2 (Sophisticated library developed by google for implementing decency injection) . I wanted to save it here as a reference to refer to others later. I will also update this post whenever I have something better or more info to add.

Here you go : https://youtu.be/oK_XtfXPkqw

Advertisements
Image

نصائح فى تعلم اللغات – كيف تتعلم لغة جديدة بشكل صحيح وفعال

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

هناك بعض النقاط يجب أن تعرفها جيدا حتى لا تيأس من تعلم لغتك الجديدة:

1- لن تتعلم اللغة بسرعة فلا تكون متسرعا.

  • اللغة يجب ممارستها مثل المهنة أو الحرفة. لن تتعلمها فى يوم وليلة. فلا تتسرع. فقبل البدأ بأى نصيحة أخرى يجب أن تدرك هذا جيدا لأن تسرعك فى تعلم اللغات يؤثر سلبا عليك وعادة ما يسببلك احباط لأنك ترى ان مستواك لم يتقدم بعد فترة معينة.
  • اتقانك اللغة يعتمد على الكثير من العوامل أولها الممارسة وسنتحدث عن ذلك لاحقا. فى حالة عدم وجود تلك العوامل لن تتعلم مطلقا ولو بعد مائة عام.
  • فى رأيي  يمكنك البدأ بوضع سنة كاملة لاتقان اللغة بشكل يسمح لك بالتحدث
  • 6 أشهر لتتحدث بشكل متوسط وتعرف الكثير من المواقف.
  • 3 أشهر لتلاحظ انك بدأت تستطيع التعبير باللغة الجديدة
  • هذا فقط اذا قمت بتطبيق النصائح القادمة. تجاهلها ربما يزيد تلك المدة.

2- ضع اهدافك مكتوبة وواضحة

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

3- التحق بدورة تدريبية داخل فصل دراسى وليست فى المنزل (ان أمكن)

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

4- الممارسة.

  • لا تخجل من التحدث باللغة الجديدة مع الناس واظهار أخطاءك. مع الوقت ستتحسن
  • يمكنك الممارسة اونلاين عن طريق التعرف على أشخاص ممكن يتحدثون اللغة ومحاولة التعارف عليهم
  • مارس فى حياتك اليومية بالتعبير باللغة الجديدة. بمعنى…
    • ابدأ بالبحث عن التعبير عن مواقفك اليومية باللغة الجديدة. مثلا يومك يبدأ بالقاء صباح الخير على من تسكن معهم. فتعلم كيف تقول صباح الخير باللغة الجديدة.
    • تقابل بعض الاشخاص فى المصعد وتسألهم اسأله بسيطة مثل .. هل انت عربى ؟ هل تعيش هنا ؟ ماذا تعمل ؟ تشرفت بمعرفتك. تعلم كيف تقول تلك التعبيرات باللغة الجديدة واذا كنت فى دولة تتحدث اللغة الجديدة فهذا سوف يساعدك جدا جدا فى ممارسة ذلك. اذا لم تكن فعليك بالانترنت (تفاصيل أكثر فى الاسفل)
    • تركب المواصلات العامة ؟ تعلم كيف تسأل السائق هل تذهب للمكان كذا ؟. اريد النزول هنا.
    • هل تأكل فى مطاعم كثيرا؟ تعلم كيف تطلب الطعام باللغة الجديدة …. وهكذا.
    • لا تستعجل فى اتقان الأمر. فسوف تمر بأوقات كثيرة لا تفهم ماذا يخبرك الشخص الاخر .. لا تقلق .. ستتحسن مع الوقت 

5- ابحث عن شريك لتبادل اللغات

6- ابحث عن شخص يجيب عن اسئلتك ( برنامج جوال رائع)

  • وهذا أمر مهم جدا جدا جدا. سؤاء كنت تذاكر بمفردك فى المنزل أو مع الالتحاق بدورة تدريبية. يجب ايجاد شخص يجيب على اسئلتك.
  • اذا كنت فى فصل دراسى فالمعلم يجب ان يقوم بتلك الوظيفة (وان كان لن تجده فى معظم الوقت). ربما أيضا صديق تعرفه يتقن اللغة او تعرفت عليه من خلال الانترنت مثلما ذكرنا فى النقطة السابقة
  • اليكم برنامج رائع فى هذا الصدد. يمكنك ارسال سؤال فى اى وقت والكثير ممن يتحدثون اللغة سوف يجيبوا. انا استخدمه بشكل شخصى بصورة كبيرة اسمه linqapp  ورابط التحميل http://www.linqapp.com/get-the-app/
  • قم بتحميل البرنامج وابدأ بطرح أسئلتك

7- الاستماع للغة من متحدثيها

  • وهذا أمر غاية فى الأهمية أيضا. يجب ان تستمع للغة فى مواقف ممن يتحدثون اللغة انفسهم وليس محاضر وليس تسجيلات صوتية. أذكر فعلا ان مستواي فى اللغة الانجليزية تحسن بشكل كبير جدا عندما بدأت فى تنفيذ تلك النقطة.
  • هذا متوافر عادة  فى الأفلام و المسلسلات و الأغانى و ان كان لديك تحفظ فى مشاهدة ذلك مثل الكثيرون منا يمكنك التعويض بمشاهدة برامج تلفزيونية او لقاءات مسجلة أو افلام كرتونية
  • لا تقلق من عدم فهمك اللقاء بأكلمه او حتى نصفة أو اقل. ربما تفهم 1% منه او 5% منه وهذا طبيعى فى بداية الأمر. مع الوقت ستتحسن
  • يفضل ان يكون الفيديو مترجم للغتين اللغة الأساسية للفيديو ولغة أخرى انت تفهمها. اعرف ان هذا صعب توافره ولكنه موجود.
  • اذا كان لديك محاضر جيد سوف يقوم لك بذلك عن طريق احضار بعض الفيديوهات او الصوتيات الحية وممارستها معكم لتحسين الاستماع

8- اتبع منهج

  • نقطة أخرى هامة جدا. انتقالك من موقع لموقع أو من قناة لقناة على اليوتيوب ما هو الا تشتيت وسيؤثر سلبا علي مدى سرعة تعلمك وايضا من اسباب الاحباط لأنك لن تعرف مستواك ولا تعرف تقييمك. الحل الأمثل من وجهة نظرى ابحث عن منهج واتبعه.
    •  ممكن موقع على الانترنت أو كتاب أو قناة على اليوتيوب ولكن كاملة ومعروف جميع دروسها حيث ان معظم قنوات اليوتيوب محاولات فاشلة للتعليم لا تحتوى اطلاقا على منهج كامل. وأنصح هناك بوجود كتاب معتمد ومشهور فى تعلم تلك اللغة واتبع منهجه. مهما تعددت مصادرك يجب ان تتبع منهج حتى تعرف مستواك وتقييمك.
    • فى اللغة الانجليزية أرى ان منهج Berlitz جيد وفى اللغة التركية أرى مناهج İstanbul Yabancılar için و منهج Gazi University TOMER ومنهج Yeni Hitit جيدة جدا
    • تعرف على المنهج كاملا كمحتوى قبل البدأ. حتى تعرف المواضيع التى ستتعلمها مسبقا فلا يشتتك ذلك فى البحث عن موضوع لاحقا
    • اما عن قنوات اليوتيوب فيمكنك الاستعانة بتلك القنوات فى تدعيم منهجك التى تتبعه عن البحث عن شيء معين تود أن تفهمه أكثر

9- لا تحفظ كلمات وانما مواقف وجمل

  • منذ ايام الدراسة الثانوية والكثير يتبع طريقة خاطئة فى بناء الحاصل اللغوى عن طريق حفظ واعادة قراءة الكلمات والتى ينساها غالبا مع الوقت
  • استمع واقرأ مواقف تستخدم فيها الكلمات فهذا أكثر فاعلية من حفظ الكلمات منفصلة

10- افهم القواعد بعد رؤيتها

  • اذا تعلمت بعض الجمل واستخدمتها كما هى ثم تعرفت على القاعدة سيكون فهم القاعدة أسهل لأنك قطعت نصف الطريق باستخدامك لها مسبقا

11- تحدث بصوت واضح وانت تذاكر

  • لا تقرأ فقط بعينيك. اقرأ واستمع لصوتك وقارنه بما تسمعه من الاخرين او من الفيديوهات

12- استخدم الانترنت فى التعلم

  • Youtube  يحتوى على الملايين من الدروس التعليمية ونصيحتى ابحث فقط على ما تريد تعلمه ولا تجعل من تعدد المصادر سبب لتشتيتك. فلا تدخل جميع القنوات وتشترك بها وتسمع مرة درس من هنا ودرس من هناك. هذا تشتيت ومضيعة للوقت
  • اتبع منهج كما ذكرنا سابقا واستخدم اليوتيوب كأداة مساعدة. مثلا اذا كنت تدرس اللغة الانجليزية من كتاب وفى درس بعنوان If statement  وان لم تفهم هذا الدرس جيدا. هنا اداتك الأولى والرائعة هي اليوتيوب YouTube.
  • ابحث عن هذا الموضوع وسوف تجد المئات ممن يشرحونه بأساليب مختلفة وأمثلة متعددة وستجد ما تريد حقا. ثم … استكمل منهجك بشكل طبيعى.

13- اذا لم يكن لديك وقت للالتحاق بدورة تدريبية داخل فصل دراسى يمكنك عمل ذلك نفسه على الانترنت 

  • مثل verbling  والذى يقوم بعمل فصل دراسى اونلاين على hangout  من جوجل https://www.verbling.com/  او رابط التطبيق على الفيس بوك https://apps.facebook.com/verbling/?fb_source=search&ref=br_tf
  • أو البحث عن معلم اونلاين  بأى شكل . أى صورة يمكنك بها مشاهدة او التحدث مع معلم فى محاضرة تعليمية. فى الغالب لن تكون مجانية ونصيحتى لا تجعل هذا سبب فى تأخرك للتعلم. التعليم ليس مجانى ادفع مقابل الخدمة الجيدة

أتمنى ان يكون الموضوع مفيد للجميع

بالتوفيق لكم فى لغتكم الجديدة

———————————————————————

Blog post by: Mohammed Saudi

Libraries to use for easy asynchronous REST web requests and image loading

Here is my list for good libraries to use for that purpose. I may come back later for comments but I’m just listing them now

Volley

https://android.googlesource.com/platform/frameworks/volley/

http://ogrelab.ikratko.com/android-volley-examples-samples-and-demos/

Tutorials:

https://github.com/dmytrodanylyk/dmytrodanylyk

http://www.michenux.net/android-volley-and-gson-tutorial-797.html

Image request : http://www.javacodegeeks.com/2013/11/android-volley-tutorial-post-and-download-image.html

Picasso

http://square.github.io/picasso/

Android Asynchronous

http://loopj.com/android-async-http/

RESTDoid

https://github.com/PCreations/RESTDroid

Retofit

http://square.github.io/retrofit/

Datadroid

http://www.datadroidlib.com/installation

Spring Android

http://projects.spring.io/spring-android/

Android jBridge

https://code.google.com/p/android-jbridge/

Resty

http://beders.github.io/Resty/Resty/Overview.html

mechanoid Ops

http://robotoworks.com/mechanoid/doc/ops/index.html

CRest

http://crest.codegist.org/

Helpful articles

http://blog.bignerdranch.com/3177-solving-the-android-image-loading-problem-volley-vs-picasso/

Fix Eclipse Slow update

Hello all,

I believe that many of eclipse users have faced this problem when updating plugin or something in eclipse , It is EXTREMELY SLOW .  All what you need to do to fix this is to uncheck the check box  “Contact all update sites” option in the update window ( when you click help> install new software) . and you are done.

 

best of  luck,

Add eclipse icon to the luncher ubuntu linux

For 12.04 and 11.10

First, create a .desktop file to eclipse:

gedit ~/.local/share/applications/opt_eclipse.desktop

Then, paste this inside (dont forget to edit Exec and Icon values):

[Desktop Entry]
Type=Application
Name=Eclipse
Comment=Eclipse Integrated Development Environment
Icon=** something like /opt/eclipse/icon.xpm **
Exec= ** something like /opt/eclipse/eclipse **   
Terminal=false
Categories=Development;IDE;Java;

After that, open that folder with nautilus:

nautilus ~/.local/share/applications

add execution permission

sudo chmod +x  ~/.local/share/applications/opt_eclipse.desktop

And then drag and drop opt_eclipse.desktop to launcher.

 

source :http://askubuntu.com/questions/80013/how-to-pin-eclipse-to-the-unity-launcher

Thread vs Process and Service in Android – Part 1

The Problem

Service, Thread and  Process are terms that may cause confusion for many people who do programming in Android or similar platforms.  I’m  going to explain here what they are and the difference between the m in simple words.  I assume you already know the Android application components like activity, service ,….

Let’s start by some basic definitions ,,

Process

In general, You can define process as a program unit of execution that has its own allocated resources and memory.  Running programs usually consists of multiple processes (one main controller process and many childs) . Multiple processes are independent of each others and can communicate only via Inter Process Communication mechanisms  that are provided by the hosting operating system.

Aside: Have you heard that “Google Chrome” runs the tabs of the browser each in different process ? . By doing this, They provide isolation between the tabs handling web pages so each tab has it’s own resources and handling mechanisms. If one crashed, the others are still Ok. Because they are  independent  😉

Thread

Thread  is part of your program functionality that can run in parallel with the main application execution process (or thread). It runs withing a process. The process may contain only, and that’s rare, one thread and mostly contains multiple threads. Threads share the same resources and memory. Creating new thread need very less work that creating a new process.

Example: Multiple downloads that are running in the same time in a file downloader software. And you may ask here , but if one download crashes, the others are not!!. Yes.  I didn’t say threads are dependent of each others. I said they have the same resources allocated.

That was the difference between thread and process in general, lets go some inside Android.

In Android

When an application’s first  component starts , the Android system starts a new process for the application with a single thread of execution called “main” thread or “UI Thread“. This thread responsible for very important stuff like dispatching events to the user interface widgets. The started Process then may hold Activity, Service or BroadCastReceiver.

All components of the same application usually run in the same process. When new component is started, it will  , by default, run in the same thread and inside the application main process unless you provide some thing else.  For example if you run a service by startService() method from an activity, this service runs in the main application process and thread. This is called “Single Thread Model”.

In this case (running service from an activity to do some intensive work), this single thread model can cause poor performance and may cause your application not responsive and may also see the “ANR” dialog.

Here comes the need for creating worker thread(s) that runs in background in parallel with the “main” thread leaving the main “UI” thread responsive. This is a very common technique that you will do every day when developing Android apps.

Building Worker Threads in Android

Building worker threads can be done in several ways:

– Implementing Thread using the Java style ( Extending Thread class or Implementing runnable interface )

– In case we are working with services, You may use IntentService instead of Service class.

– For the problem of handling and updating user interface from different threads , the  Android SDK is shipped with many ready solution for  that like :

– Using AsyncTask

– Using the view.post method

….. and many others.

We may explore those solutions later in upcoming tutorials.

kindly leave you comments, corrections, additions or suggestions below .

 

Mohmmed Saudi.

why should I attend an interview even I’m not fully qualified, don’t like the company, place, interviewer or ….

why should you accept an interview even you feel your are not fully qualified, don’t like the company, place , interviewer or …

-Well, there are some good things and some bads. Let’s start with the good stuff ..

1- You may actually be qualified. Don’t underestimate yourself when you look at the very long job description and say ” Oh, I don’t know all this stuff, I’m not qualified. They really don’t expect that the candidate will know all the of this, but the best one who will know the most AND have the other non-technical and language skills they are looking for. You may got accepted just because your language is better even you are technically less qualified than the others and this is just example.

2-You will get a new interview experience  and this is the most important point. Absolutely every interview will add a new value to you even if you didn’t do well.

3-See the technology from another approach or prospective.  In many interviews I have went through, I was asked questions that opened my mind to different topics that I was neglecting or didn’t pay attention to them.

4- Hearing about new stuff that you never think they are existed.  Some interviews’ questions will put you in a weird face saying ‘what ?!?!?’ . Don’t take it personal, No one knows every thing :D.  Think positively and add them to your to-do list and study them later.

5- Meeting new people in different positions ( Team Lead, Project Managers, HR ,..) should increase your professional awareness.

6- Meeting different cultures. You should understand the company business field (what they are doing there and what type of projects they are working on). This also will definitely increase you professional awareness.

What about the negative effects for doing this ?

-well, there are also negative effects that may happen through this..

1- The very big one is that you may loss the opportunity for joining this “AMAZING” company. If the company has a good fame , competitive salaries or other good stuff  and you didn’t do well there, you may loss the chance to join it in the mean time (and in the near future as well) because you will not have the chance to be interviewed again soon but may be later.

2- Also you may feel, sorta, bad for not doing well there. Actually you don’t have to after reading this post. As I said, think positively and consider the ” Good Points ” that we discussed in the above paragraph.

3- And finally,  you will spend some money and effort there for the interviews “timing” and “transportation”.  This is the least important aspect in my opinion compared to what you will get.

AND many other things, I will come back when I remember any. Feel free to comment and add your opinion too.

Hope this be useful. Share it if you think it is.