كيف تتعامل مع برنامج ادارة الاصدارات git

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

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

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

Continue reading

Nexus 6P Headset Volume down button fix

Nexus 4 owners, and I am one of them, were disappointed to find out that it only support 1 button headset control, so no buttons for Vol+ and Vol-. When I bought the Nexus 6P I was hoping it will have support for 3 buttons control. After I got the phone I tested it with my Samsung headset, the play/pause button and the Volume Up button work, however, Volume Down didn’t!!!

I was hoping it is a faulty headset since that I can replace easily, but if it was a design mistake in the Nexus then it might be a problem forever. Luckily and after a quick Google search I found a post on reddit from someone asking if the Nexus 6P has support for 3 buttons headset. The answer was yes, so that is a good news, but one of the replies was from a reddit user “buddhra” who was having a similar problem as mine and did a further test to find out that the Nexus 6P acceptable resistance range for the Vol- doesn’t stretch to the maximum range which the Android specs allows.
Here is a snapshot for part of the post:

Reddit Nexus 6P 3 button headset support problemSo I tested mine and found the resistance of the third button (Vol-) to be 630 ohms, which is within the Android specs but seems out of what the Nexus 6P can recognize.  Not sure if it is a software or a hardware problem in the Nexus 6P which I won’t be able to fix easily, but I know that I can instead fix the headset itself to give the readings that the Nexus 6P expects.

So I opened up the headset control, it is very small and was glued together, but using a thin blade i managed to open it up:

Opening up Samsung headset controlZooming into the circuit board and tracing the PCB wires I figured how the resistors were connected and managed to replace one of the resistors (R3 = 356 ohms) with one of a smaller value (200 ohms) and it now works. (The resistors used in the board are size 402, however, I had one with size 603 which is a little bigger but there was enough space to fit it without any problems):

Samsung Headset Fix for Nexus 6PAll Android headset controls follow a similar way to provide the needed resistance, so your control board might differ but it should be similar.

Let your Arduino get enough sleep

The sensor I am building is based on an Arduino Pro Mini (Atmega328p) with ESP8266 wifi module and a sensor. It will run on batteries with a sample rate of 1 sample per hour. With such low sampling rate it is very obvious that I need to make my microcontroller and the wifi module sleep to reduce power consumption. To wake up the Atmega328p MCU from power down sleep I have to use either the Watchdog Timer (WDT) or an external interrupt. The problem with the WDT on that MCU is that the maximum sleep time it supports is 8 seconds. And to make it sleep longer you need to put the sleep statement in a loop that puts it back into sleep until it reaches a certain count value then resume working.

This is an example of such solution:

for (int i = 1; i <= count ; i++) {
    sleep_cpu ();
}

However, in 1 hour of needed sleep the MCU will wake up 450 times!

Continue reading

Arduino resets when disabling Watchdog Timer!

While working on a small arduino project that will run on batteries I needed to enable deep sleep mode to reduce the energy consumption when not needed until the arduino is awaken by an external interrupt.  However, I am also using the Watchdog Timer (WDT) to make sure the system will not hang up or get into in infinite loop due to some bug or unknown situation. The maximum time that the WDT on the Atmega328p supports is 8 seconds, and if 8 seconds has passed before calling wdt_reset() the WDT will reset the microcontroller, however, my boards will sleep for way longer than 8 seconds so I have to disable the WDT before going to sleep and enable it back once waken up.

Disabling WDT should be an easy thing to do by simply calling wdt_disable(), however, calling this statement also caused the atmega328 to reset!

After looking into the content of the header file “avr/wdt.h” it seems like the Arduino IDE or AVR compiler (not sure who is responsible) is not defining the correct board/chip even though I set the correct board & processor in the Arduino IDE. And the way I solved the issue was to define the correct microcontroller before including the wdt.h:

#define __AVR_ATmega328P__
#include <avr/wdt.h>

Now the code works as intended without causing a reset.

Add Wireless charging to your car phone holder

Being a lucky Android user with the luxury of Wireless charging  I thought about adding it to my car since I use it at home and love it. I have seen some charging pads for cars but that means you have to place your phone in a way which makes it unusable while I want it to charge while using the phone for navigation so the best place was the phone holder. So i bought one that allows me to place the phone near an A/C vent (so it will cool down the phone during long road trip when charging and using the navigation at the same time), I also bought a bare board Qi wireless charging board from eBay (~$3.6), you can also buy the cheaper round charging pads and take the internal parts, but the bare board uses better components which I though worth the extra dollar.

Phone holder and Qi wireless charging board Continue reading

تفعيل خاصية حماية الخصوصية في فيرفوكس

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

خطوات التفعيل سهلة إذ عليك زيارة صفحة إعدادات فيرفوكس المتقدمة وذلك عن طريق كتابة about:config في حقل عناوين الإنترنت والضغط على مفتاح الإدخال (قد تحتاج إلى ضغط زر “I’ll be careful, I promise!” إذا ظهرت صفحة التنبيه).

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

Firefox Tracking Protectionوالصورة التالية للاندرويد (حاليا متوفرة في Firefox Beta):

Firefox Beta Tracking Protection

الجديد في فيدورا 22

فيدورا 21 والتي استغرق تطويرها ما يقارب السنة حملت في طيَّاتها تغيرات جذرية على راسها تقسيم التوزيعة الى 3 نكهات:
1- خادم
2- محطة عمل (مكتبي)
3- سحابي

فيدورا 22 والتي صدرت بعدها بعدة شهور استكملت هذه النقلة بتنقيحات وتحسينات وكذلك اضافات جديدة على راسها التالي:

  • اعتماد مدير الحزم DNF كبديل ل Yum بشكل كامل.
  • اعتماد نظام الملفات XFS كنظام افتراضي في نكهة الخادم.
  • تحسين لتطبيق “قمرة القيادة” cockpit والذي يمكنك من ادارة عدة خوادم من خلال المتصفح.
  • اعتماد اصدارة واجهة قينوم 3.16 حيث تاتي بنظام تنبيها جديد ورائع وكذلك تحسين في الشكل وايضا امكانية تشغيل تطبيقات واجهات اخرى مثل كدي بحيث تظهر بشكل منسجم مع واجهة قينوم.
  • اعتماد بلازما 5 (كدي 5) كواجهة اساسية لتدويرة (spin) “فيدورا كدي” مع كيوت 5 والتي تاتي بشكل جديد وتقنيات كثيرة.
  • تحديث تدويرة “فيدورا اكسفسي” الى 4.12 حيث تقدم دعم للشاشات ذات الدقة العالية.
  • نقل بعض التدويرات المتخصصة مثل تدويرة الالعاب و الرسم والاختراق الى صفحة “المختبرات” https://labs.fedoraproject.org
  • تخصيص صفحة لنكهات فيدورا مع تدويراتها والمبنية لمعالجات ارم (ARM) كالموجودة في الراسبيري باي 2 https://arm.fedoraproject.org مع انه لايوجد دعم مباشر للرازبري باي 2 بعد لكن هناك طرق لتشغلها عليها.
  • اعتماد GCC 5.1 كحزمة اساسية.
  • تحديثات للنكهة السحابية لكني لا افهمها ههههه

الترقية لاصدار 22 من اي اصدار سابق تتم عن طريق استخدام برنامج fedup

sudo fedup --network 22

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

عند اكتمال التحديث والاقلاع في النظام الجديد قم بتنفيذ الاوامر التالية:

sudo rpm --rebuilddb
sudo dnf distro-sync --setopt=deltarpm=0
sudo dnf install rpmconf
sudo rpmconf -a

الامر الاخير “rpmconf -a” سيقوم بالبحث عن ملفات الاعدادات الجديدة والتي تتعارض مع ملفات قديمة معدلة فبسبب التعديلات لايقوم النظام باستبدالها بل يبقي القديم ويحفظ الجديد بامتداد rpmnew فالامر هذا سيقوم بعرضها ويقدم لك عدة خيارات الاول ان تستخدم الجديد، الثاني ان تبقي القديم، الثالث ان يعرض لك الفروقات بينهما لكي تقرر، الرابع ان يدمج الملفان والخامس اعتقد يقوم بتاجيل القرار والاخير يتجاهل الملف.
انا شخصيا اختار الخيار الاول للملفات التي لم اقم انا بتعديلها واما ما قمت بتعديله فاحاول عرض التغييرات ودمج ما احتاج من القديم مع الجديد.

* الخط الجديد المعتمد في الطرفية لايدعم المحرف العربي بعد، لذلك ستحتاج لتغيير الخط الى نوع اخر اذا كنت تحتاج العربية.
الصفحة التالية تبين بعض التغييرات و المشاكل التي قد تواجهها اثناء الترقية او التحميل الجديد http://fedoraproject.org/wiki/Common_F22_bugs

تفعيل فديو HTML5 في فيرفوكس على اللينكس

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

من اهم المواقع المختصة بالفيديو موقع يوتيوب حيث يوفر خاصية استخدام مشغل أفلام يعمل بتقنية HTML5 الحديثة بدلا من الفلاش إذ إنها اكثر أمنا واسرع واخف على المعالج من مشغلات الفلاش وحيث إن الفلاش يستخدم في الغالب من قبل شركات الإعلانات في تعقب تنقلاتك وعرض الإعلانات لك وكذلك من قبل الهاكرز في استغلال ثغراته. عند زيارة صفحة اليوتيوب https://www.youtube.com/html5 الخاصة بتفعيل مشغل HTML5 تقوم الصفحة بفحص المتصفح لمعرفة التراميز التي يدعمها وكانت الصفحة تظهر لي بالشكل التالي:

Firefox on Linux Youtube HTML5 Player

فالعناصر باللون الأحمر تعني أن تلك المرمزات غير متوفرة مما جعل مشغل HTML5 يعرض الفديوات بوضوح محدود في بعض الأحيان مثلا دقة 720HD كحد أقصى أو أن لا تكون الفديوات متوفرة بدون تلك التراميز.

الحل كان سهلا جدا فجميع حزم التراميز قد قمت بتثبيتها سابقا من مخازن RPM Fusion الخاصة بتوزيعة فيدورا وكنت في حاجة لتفعيلها في فيرفوكس فقط، خطوات التفعيل سهلة اذ عليك زيارة صفحة إعدادات فيرفوكس المتقدمة وذلك عن طريق كتابة about:config في حقل عناوين الإنترنت والضغط على مفتاح الإدخال (قد تحتاج إلى ضغط زر “I’ll be careful, I promise!” إذا ظهرت صفحة التنبيه).

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

Firefox H264 decoder settingsقم بعد ذلك بالبحث عن الإعدادات المتعلقة ب “mp4” وفعلها كالصورة التالية:

firefox mediasource settingsأخيرا ابحث عن إعدادات “mediasource” وفعلها كالتالي:firefox mp4 settingsبعد الانتهاء من الإعدادات قم بزيارة صفحة اليوتيوب الخاصة بمشغل فيدو HTML5 و إذا كانت التغييرات صحيحة مع توفر المرمزات المطلوبة ستكون بالشكل التالي:

firefox youtube html5

الآن يمكنك تفعيل المشغل بشكل افتراضي والاستمتاع بيوتيوب اسرع مع القدرة على تشغيل الفديوات بجميع التراميز.

HTML5 and H264 for Firefox on Linux

In some Linux distributions such as Fedora the amazing browser Firefox will ship with some of the video decoders turned off by default, some of it is due to the decoder being in unstable stage or due to some copyrights/patents concerns. In either way trying to play videos that uses one of these formats won’t work even if you have all the packages installed (such as the good, the bad and the ugly gstreamer plugins).

I wanted to make youtube use the HTML5 player instead of the old flash player which is mostly used to track you, show ads and by hackers. Visiting the youtube html5 player page https://www.youtube.com/html5 used to be like this:

Firefox on Linux Youtube HTML5 PlayerThe items in red means they are missing which caused some youtube videos not be available in HTML5 player, or for the resolution to be limited mostly to a maximum of 720 or lower.

The solution is very simple after installing all needed packages, I got all my decoders for Fedora from RPM Fusion repos, and it is under the Firefox low level configuration page which you can get to by typing about:config in the URL box + Enter (click on the button “I’ll be careful, I promise!” if you see a warning page).

In the configuration page there is a search box at the top that makes it easy to find the settings which you need to change. So first type in “h264” and enable the disabled settings as you see in the picture below:

Firefox H264 decoder settingsThen type in “mp4” and do the same as the picture below:

firefox mediasource settingsFinally, search for “mediasource” and enable it as follows:firefox mp4 settingsWhen you are done with the settings revisit the youtube html5 page and it should look like this:

firefox youtube html5Now you can enable the HTML5 player as a default player and enjoy a faster youtube thanks to HTML5 and have the ability to play all videos in all formats.

Robo RC

When my son wanted me to buy him a toy robot I asked him if he would like to build one with me instead, he was so interested so I told him that it will be a car robot with two motorized wheels controlled from the phone over bluetooth and he needs to sketch the design then build it using Lego blocks.

IMG_20150110_115340 IMG_20150110_115358 IMG_20150110_115409IMG_20150301_184414 IMG_20150301_184527 IMG_20150301_184516 IMG_20150301_184501 IMG_20150301_184432 device-2015-03-07-210547

While he was busy with the sketches I started looking for parts, so I went to eBay and found these wheels


They come in two speeds, I ordered the slower one since it has more torque.
These wheel will need something to control them since the Arduino micro-controller is not strong enough to drive them with enough current so wanted to build an H-bridge using transistors (which I have already) but I found  a module based on the L298 chip  which is very cheap and has a voltage regulator too, awesome.

Next was the bluetooth module, and I went for the HC-06 which is easy to use and also cheap.

Bluetooth HC06-2And finally is of course the Arduino board, I got the Arduino Pro Mini for its small size and low cost.

arduino_miniEven though I actually used the Arduino Uno for the development since it is much easier to upload the code and fix mistakes.

I got them all from eBay with the cheapest price I can get so some took about a month to arrive and I wasn’t in a hurry:

2x Car Robot Wheels: $6.00
L298N Dual H Bridge: $3.00
HC-06 Bluetooth Module: $4.00
Arduino Pro Mini: $2.60
40pin Dupont Wires: $1.50
Total = about $17

You will also need an Android Phone or tablet, any with Android 3.0 and up should do. Lego blocks or anything to use for the car body.

Here is a video we made showing how to use the app and explaining the car we built and its main parts:

To get the Andriod app click on the Google play icon below:
Android-app-on-google-play

for the Android source code click here
and for the Arduino code click here

Inside a fake ELM 327

I got myself on of those cheap Bluetooth OBDII dongles but it didn’t work in my car (2005 Dodge), it simply couldn’t detect the protocol which is SAE J1850 VPW used on most Chrysler/Dodge I believe before 2008. So I took it apart and as you can see in the picture it has two stacked circuit boards the one of top has a bluetooth chip (BEKEN BK3231Q) and a CAN protocol transceiver from NXP (TJA1040)

Fake ELM327

The flip side of the top board contains a CAN controller (MCP2515) from Microchip.

CAM controller MCP2515

However, and what is surprising is the bottom board which contains only voltage regulators for 5v and 3.3v and most of the OBD-II pins are not even connected!
OBD-II connectionsLet’s compare  the connected pins to the pinout of the OBD-II connector in the image below

OBD2_pinoutSo the 12v VCC (pin 16 in red) is connected and the two ground pins (pin 4 & 5 in gray). How about the different OBD2 protocols? let’s see:

  • CAN  (ISO15765) used pin 6 & 14 (green color) and they are connected.
  • ISO9141/14230 uses pin 7 & 15 (yellow color) and they are connected.
  • J1850 PWM uses pin 2 & 10 (blue color) and they are NOT connected.
  • J1850 VPW uses only pin 2 (blue color) and it is NOT connected.

So it is clear that this will not support any of the J1850 protocols which are used by most old American car makers (Chrysler/Dodge/Jeep, Ford, GM), luckily I think all new cars (2008+) are using the CAN protocol which is the newest among the others.