0%

If you go to many places with open wireless access you might find it annoying that every time you have to open the browser to accept the same rules and conditions from that provider before you can have real internet access. It is even worse if you have tabs left open from your last session and they all now point to the same wifi login page!

However, if you are using Linux and you have NetworkManager set as the default network management tool then I have a solution for you, NetworkManager will run the scripts inside the folder “dispatcher.d” whenever the connection status changed for any of the network cards on the machine. Under Fedora the folder is located in “/etc/NetworkManager/dispatcher.d/“ and I will assume other Linux distributions will be similar if not the same.

So all you have to do is create a script in that folder that will run whenever the wireless connection is up and the network name (SSID) matches the location that have the open wifi, then the script should automate the process of clicking on the accept button or whatever it takes to get internet access.

I have already made such a script that will allow me to login to Panera Bread and Baltimore County Public Library, but it can be expanded easily to include other locations. The first part of the script should be placed under the “dispatcher.d“ folder and should be accessible by “root“ only (This is a security feature, since NetworkManager will execute all scripts in that folder as root and anyone with access to these files can change their content to do other stuff that might harm your system, so make sure to set the permission to root only). That script will parse the iwconfig output to find the name of the wifi and call the script that matches the name if any.

Here is my main script (07-autologin_openwifi)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash
#------------------------------
# By Fahad Alduraibi
# Last update: June 12, 2012
# Version: 1.1
#------------------------------

export LC_ALL=C
LogFile="/var/log/07-WIFI_ACCESS.log"

# The parameters that get passed to the script are:
# $1 = The interface name ( eth0, wlan0 ...etc)
# $2 = Interface status ( "up" or "down" )

# Check if wireless status is up
# I have two wifi cards in my laptop, named "wlan0 and wlan1"
# so I use regular expression "wlan[01]" to match both of them.
if [[ "$1" =~ wlan[01] && $2 == "up" ]]; then

# Get the network name from "iwconfig" or (can also locate the network based on IP or MAC address if needed)
ESSID=$(/sbin/iwconfig $1 | grep ESSID | cut -d'"' -f2)

# Record the date and time for debugging purposes only
echo "[`date`] ESSID=($ESSID)" >> $LogFile

# If the wireless name matches then run its python script
if [[ "$ESSID" == "BCPL-PUBLIC-WIFI" ]]; then
/usr/bin/python /myscripts/baltimore-county_library_wifi.py 1>> $LogFile 2>&1
elif [[ "$ESSID" == "PANERA" ]]; then
/usr/bin/python /myscripts/panera.py 1>> $LogFile 2>&1
elif [[ "$ESSID" == "Nordstrom_Wi-Fi" ]]; then
/usr/bin/python /myscripts/nordstrom.py 1>> $LogFile 2>&1
#elif .... (you can add more open wifi here)
fi
fi

#if [[ "$1" =~ wlan[01] && $2 == "down" ]]; then
##If you want to do somehting when the network is down
#fi

As you can see that the above script will call another python script when a name matches which are located in another folder (change it to whatever suits you and don’t forget to set the root only permissions) And here is the script for “baltimore-county_library_wifi.py”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#------------------------------
# By Fahad Alduraibi
# Last update: June 12, 2012
# Version: 1.0
#------------------------------
import httplib
conn = httplib.HTTPConnection("1.1.1.1")
conn.request("GET", "/fs/customwebauth/login.html?switch_url=http://1.1.1.1/login.html&wlan=BCPL-PUBLIC-WIFI")
r1 = conn.getresponse()
print r1.status, r1.reason
output1 = r1.read()

headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
params = "buttonClicked=4&err_flag=0&err_msg=&info_flag=0&info_msg=&redirect_url=&username=guest&password=guest"
conn.request("POST", "/login.html", params, headers)
r2 = conn.getresponse()
print r2.status, r2.reason
output2 = r2.read()

conn.close()

In this script I used the “httplib” python library which is kind of a low level library since you have to setup all HTTP stuff manually also if one of the URL or its parameters changed in the future the script will not work and will need to be updated. However, in the second script “panera.py” I use the “mechanize” library which act as a web browser and takes care of the low level HTTP details (mechanize might not be among the standard library and you might have to install it) panera.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#------------------------------
# By Fahad Alduraibi
# Last update: June 12, 2012
# Version: 1.1
#------------------------------
import mechanize
import sys

br = mechanize.Browser()
br.set_handle_equiv(True)
#br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0')]

testURL = 'http://www.fadvisor.net/blog/'
response = br.open(testURL)

if response.geturl() == testURL:
print "FAD: You are already logged in to Panera."
sys.exit()

try:
forms = mechanize.ParseResponse(response, backwards_compat=False)
except:
print "FAD: Error in parsing forms, Am I already logged in to Panera?"
sys.exit()

response.close

form = forms[0]
#print form
#print "----------------------------------- Login"
request = form.click()
response = mechanize.urlopen(request)
forms = mechanize.ParseResponse(response, backwards_compat=False)
response.close()

form = forms[0]
#print form
#print "----------------------------------- Validate"
#print
request = form.click()
response = mechanize.urlopen(request)
forms = mechanize.ParseResponse(response, backwards_compat=False)
response.close()

form = forms[0]
#print form
#print "----------------------------------- ConfirmLogin New"
#print
request = form.click()
response = mechanize.urlopen(request)
forms = mechanize.ParseResponse(response, backwards_compat=False)
response.close()

form = forms[0]
#print form
#print "----------------------------------- ConfirmLogin Validate"
#print
request = form.click()
response = mechanize.urlopen(request)
forms = mechanize.ParseResponse(response, backwards_compat=False)
response.close()

form = forms[0]
#print form
#print "----------------------------------- CompleteLogin New"
#print

request = form.click()
response = mechanize.urlopen(request)
forms = mechanize.ParseResponse(response, backwards_compat=False)
response.close()

form = forms[0]
#print form
#print "----------------------------------- HttpLoginRequest"
#print

request = form.click()
response = br.open(request)
#print response.read()

response.close()
print "--- Panera Done ---"

Panera uses a more complicated process, but mechanize made it much easier to develop the script, and I didn’t hardcode any link or parameters which means the script will work even if they change the URLs, but will still fail if they change the login process.

nordstrom.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#------------------------------
# By Fahad Alduraibi
# Last update: June 12, 2012
# Version: 1.0
#------------------------------

import mechanize
import sys

br = mechanize.Browser()
br.set_handle_equiv(True)
#br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0')]

testURL = 'http://www.fadvisor.net/blog/'
response = br.open(testURL)

if response.geturl() == testURL:
print "FAD: You are already logged in to Nordstrom."
sys.exit()

try:
forms = mechanize.ParseResponse(response, backwards_compat=False)
except:
print "FAD: Error in parsing forms, Am I already logged in?"
sys.exit()

response.close

form = forms[0]
#print form
#print "----------------------------------- Login"
request = form.click()
response = mechanize.urlopen(request)
forms = mechanize.ParseResponse(response, backwards_compat=False)
response.close()
print "--- Nordstrom Done ---"

You can add other providers as well like starbucks and many other coffee shops, all you need is some network capturing tool like tcpdump or wireshark and some scripting skills. A similar thing can be done under Microsoft Windows Vista and above, since you can create a task under “Task Scheduler” that will trigger based on network event.

Disclaimer: you still have to read and agree to the terms and conditions before you start using such script, and you will be responsible for not complying with them.

هل رغبت يوما في عمل لوحة إلكترونية لكن تراجعت بسبب صعوبة العملية أو عدم وجود الأجهزة اللازمة؟

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

NOTE: These cheats do not work anymore

I am going to list here few tricks and cheats that you can use while playing airline manager on facebook. But be careful as some might get you banned from the game. For all of these tricks all you need is Google Chrome browser or Firefox with the Firebug add-on. 1- The BIG Money maker For this cheat to work you need to have cargo planes, so get your pax points up and buy the cargo feature. Once you buy your cargo plane (get one that can carry big load for short distance, it makes more money) start creating its route (again demand is important, distance is not) but stop at the point where you need to sign a contract. As you can see most prices are about $1.0 to $2.5. So pick any of these contracts, lets say the first one, and right click on the “Sign“ button, from the list you will see an item called “Inspect Element” click on that and the browser will open a small box at the bottom of the page showing you some HTML code of that page and the code for the button you right click on is highlighted. See the picture:

Now double click of that highlighted part of the code, and it will allow you to edit. Look for “tcc=x.xxxx” where the x is a the current price of the contract. Simply change that value to whatever your like, the limit that you can set it to is $99,999 per lbs. Don’t set it to high or you will be noticed 8)

Now, click on the same “Sign” button which you modified the code for and you are done. You will be rich in no time ;-) 2- Buying more than 10 aircraft at once (Thanks Luke for this trick) For most aircraft, pax and cargo, the limit that can be bought at once is just 10 (i don’t know why, seems that they like you to click and click more), to get more than that at once, maximum you can get is 99, go to the page for buying the plane you like, like in this picture:

then right click on the drop down box for the “Amount to purchase” and select “Inspect Element”, see the picture:

in the above picture click on the part of code that is highlighted with the second red oval, click on the code to change the number from value=”1“ to value=”99“ or whatever number you like, but 99 is the max, see picture:

You are done, set registration name and click “Buy aircraft”. I am sure you can use the same method to do other tricks and make playing the game easier. But my number one recommendation is to use the Autopilot script ;) that will make you on the top 10 list like me

After upgrading to Fedora 14 I noticed that the built-in mic in my Dell D620 stopped working, after searching here and there I the problem is between ALSA and Pulseaudio, since alsa will show to capture devices “Mic” & “Front Mic” and Pulseaudio will use Mic as the default instead of Front Mic.

So I used “alsamixer” to set the correct capture source and that worked but after a reboot it was set back to Mic. Then I found about “alsactl” which should store the current setting by doing “alsactl store” but that did not work either since I think pulseaudio does not look into that.

Uninstalling pulseaudio as some people suggested solved the Mic problem but caused many other problems when playing many applications that want to play audio (like flash apps such as youtube and video apps…etc), this is an ALSA problem that pulseaudio try to solve AFAIK.

The solution that I found was to use “amixer” which can be run from the command line with the parameters to set “Front Mic” as the capture source. Here is the full command for my device:

1
amixer -c 0 cset numid=6,iface=MIXER,name='Input Source' 1

To explain the previous command: [-c 0] is to select the first sound card (the only card in my laptop, but if you have two cards they will be 0 and 1) [cset] is to tell amixer that you want to set these settings [numid, iface, and MIXER] are information about your card and what source you want to change the settings for, and here is how I get these information:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[[email protected] ~\]$ amixer -c0 contents
numid=2,iface=MIXER,name='Master Playback Switch'
; type=BOOLEAN,access=rw------,values=2
: values=on,on
numid=1,iface=MIXER,name='Master Playback Volume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=31,step=0
: values=14,14
| dBscale-min=-46.50dB,step=1.50dB,mute=0
......
......
numid=6,iface=MIXER,name='Input Source'
; type=ENUMERATED,access=rw------,values=1,items=2
; Item #0 'Mic'
; Item #1 'Front Mic'
: values=0
......
......

And as you can see in the previous result the part that am looking for is (numid=6,iface=MIXER,name=’Input Source’) and it lists Mic=0 and Front Mic=1 but the selected values=0 which is for Mic and I need to set it to 1

Here is the command again:

1
amixer -c 0 cset numid=6,iface=MIXER,name='Input Source' 1

put this command in a script file and make it run whenever you login to your profile (I tried adding it to the rc.local so it will execute with every boot but that didn’t work, since I think the settings is applied during login time for each user)

For KDE users you can put that script (or a link to it) under:

1
/home/<username>/.kde/Autostart/

or through the KDE “System Settings”>”Startup and Shutdown”>”Autostart” Now at each login this command should set the correct input source which pulseaudio will use it.

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

اول هذه الاوامر هو lsof وهو اختصار (List Open Files) يعني عرض الملفات المفتوحة، والملفات في نظام اللنكس ليس محصورة بالملفات العادية كما تعرف في نظام الوندوز ولكنها تشمل المجلدات و المكتبات و ارتباطات الشبكة و انواع اخرى من الملفات الخاصه. وعند تنفيد الامر فسيقوم بعرض قائمة بجميع الملفات المفتوحه حاليا و اسم المستخدم الذي قام بفتح الملف ورقم العملية التي تم من خلالها فتح الملف (Process ID) و نوع الملف وحجمة (اذا كان ذو حجم معروف) و مسار الملف. القائمة في الغالب ستكون كبيره جدا ولذا تحتاج في الغالب لعمل تخصيص للتحكم في المخرجات.

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

1
lsof -i

اوامر مشابهه

1
2
ss -ap
netstat -tuap

اما في حال اردت معرفة (او اغلاق) ملف مفتوح (مثلا قمت بفتح ملف في كرت ذاكرة خارجي Flash Drive ولكن عند محاولت ازالة الكرت اخبرك النظام بان احد الملفات لازال مفتوحا) فالتوصل للملف المفتوح ومعرفة البرنامج المتصل بذلك الملف عمليه سهلة جدا باستخدام lsof وهي كالتالي: اولا نفرض ان مسار كرت الذاكرة هو /media/disk/ فتقوم بتنفيذ الامر التالي:

1
lsof | grep /media/disk/

فالامر الاول lsof سيعرض جميع الملفات المفتوحة لكن بدل من تعرض النتائج على الشاشه بل سوف ترسل للامر التالي grep و المسؤل عن عمليه الارسال تلك هي علامة الانبوب | (pipe) حيث ان نظام اللنكس عندما يجد ذلك الخط العمودي بين امرين فانه يمرر مخرجات الامر الاول كمدخلات للامر الثاني. اما الامر grep فان امر ترشيح (Filter) حيث ان يقوم بالبحت في المدخلات عن اي سطر يحتوي على الكلمة المذكورة بعد (في مثالنا هذا فانه يبحث عن /media/disk/) ثم يعرض السطر الكامل الذي يوجد به مثل ذلك النص. فالناتج النهائي من تنفيذ هذا الامر هو قائمة باسم الملف او الملفات التي لاتزال مفتوحة من كرت الذاكرة والبرنامج الذي قام بفتح ذلك الملف ثم ما عليك سوى اغلاق ذلك البرنامج وستتمكن من ازالت الكرت بشكل امن. ولاغلاق البرامج يمكن استخدام الامر kill مع رقم العملية (Process ID) كالتالي:

1
2
kill <PID>  (اغلاق البرنامج بطيقة امنة)
kill -9 <PID>  (اغلاق اجباري للبرنامج)

اوامر اخرى من عائلة lsof هي:

lsusb يعرض قائمة باجهزة USB المتصلة حاليا بالجهاز
lspci يعرض قائمة كروت PCI المركبة بداخل الجهاز
lsmod يعرض قائمة بمعرفات الاجهزة التي تم تشغيلها
lspcmcia قائمة كروت PCMCIA المركبة بالجهاز
lshal قائمة الاجهزة المركبة في الجهاز (USB و PCI و غيرة)
lscpu معلومات عن المعالج المستخدم

في هذا الموضوع سوف احاول تقديم بعض الاوامر المهمة لمستخدمي النظام المفتوح المصدر والمجاني لنكس. جميع هذه الاوامر تنفذ من خلال نافذة الاوامر (Terminal or Command Line) وفي الغالب ستجدها في جميع توزيعات اللينكس واليونكس كذلك مع بعض الاختلافات البسيطه احيانا.

* توضيح: ما أضعه بين علامتي <> يعني انه يجب استبداله بشي مناسب كاسم ملف او مجلد وما هو بين اقواس ( ) فهذا فقط شرح مني للامر المذكور ولايكتب اثناء التنفيذ.

سوف ابدأ بأحد الاوامر المهمة:

الامر: man
التعريف: عرض معلومات عن معظم اومر النظام وشرحها وطرق استخدامها طريقة الاستخدام:

1
man <الامر>

الامر: ls
التعريف: لعرض الملفات الموجود في المجلد الحالي طريقة الاستخدام:

1
2
3
ls (عرض الملفات والمجلدات فقط)
ls -l (الملفات على شكل قائمة مع عرض حجم الملف والصلاحيات)
ls -a (الملفات المخفية اللتي تبدا بنقطه)

كما يمكن دمج بعض الخيارات كدمج a و l للحصول على قائمة الملفات مع الملفات المخفية ولمزيد من الخيارات يمكن استخدام الامر man للحصول على المزيد من التفاصيل

الامر: cp
التعريف: نسخ ملف او ملفات الى مجلد اخر (او انشاء نسخه للملف باسم مختلف) طريقة الاستخدام:

1
2
cp <file> <folder/>  (نسخ ملف الى مجلد)
cp <file> <newfile> (انشاء نسخة من الملف)

الامر: mv
التعريف: نقل ملف او ملفات الى مجلد اخر (او تغيير اسم الملف) طريقة الاستخدام:

1
2
mv <file> <folder/>  (نقل ملف الى مجلد)
mv <file> <newfilename> (تغيير اسم ملف)

الامر: rm
التعريف: مسح ملفات او مجلدات طريقة الاستخدام:

1
2
rm <files>  (مسح ملفات)
rm -r <folder/> (مسح المجلد و الملفات التي بداخله)

الامر: mkdir و rmdir
التعريف: انشاء و حذف مجلد (لحذف مجلد يشترط ان يكون فارغا، وان لم يكن فارغا فيستخدم الامر السابق) طريقة الاستخدام:

1
2
mkdir <folder>  (انشاء مجلد)
rmdir <folder> (حذف مجلد)

الامر: ps
التعريف: عرض قائمة البرامج التي تعمل الان طريقة الاستخدام:

1
2
ps  (سيعرض فقط البرامج التي تعمل في نافذة الاوامر)
ps aux (جميع البرامج اللتي تعمل وتفاصيل مهمه اخرى)

الامر: df
التعريف: عرض معلومات عن المساحة المستخدمة والمتبقية من القرص الصلب لجميع الاقسام طريقة الاستخدام:

1
2
df (عرض الارقام بالبايت)
df -h (عرض الارقام يصيغة اسهل للقرائة مثل ميقا قيقا)

الامر: free
التعريف: عرض معلومات عن استخدام الذاكرة والذاكرة الاحتياطية في القرص الصلب (swap) طريقة الاستخدام:

1
2
free (عرض الارقام بالكيلو بايت)
free -m (عرض الارقام بالميقا بايت)

هذه بعض الاوامر وهناك الكثير وساقوم بكتابه موضوع اخر عن اوامر اخرى متقدمة

If you are a Fedora user then you must be using RPM Fusion and if you are not then please do since it provides you with many cool packages that Fedora doesn’t come with (like ATI & nVidia drivers, video and audio codec…etc). After you install RPM Fusion repositories (through their provided rpm packages which you can find about under the ‘Configuration’ in their website) you will be able to use it right away from the command line by using ‘yum’ or if you like the GUI (like I do) then it is PackageKit. However, there is one thing that I don’t like about PackageKit which is dealing with dependencies.PackageKit will only resolve dependencies when you apply the changes not while you are making them (selecting to install or remove a package). I find that annoying since sometimes when I select to remove some packages that I think I don’t need and when I click on apply it will show the list of dependencies of all the selected packages and will not tell you which one of the selected packages is needed by those other packages and the only way to find out is by removing packages one by one. Same thing when installing. However, there is a solution to this problem, it is called Smart, Smart is a package manager that can be used to manage ‘rpm’ packages (and also apt as well). You can install Smart and the GUI from Fedora repos with this command:

1
yum install smart smart-gui

The biggest advantage of using Smart over PackageKit is the way it resolves dependencies. Smart will do that instantly while you are clicking to install a new package or trying to remove one. So for example if you are using Fedora with KDE and wanted to remove all Gnome packages and you clicked for example on ‘gnome-vfs2’ Smart will immediately look for all other packages that depends on this one and if any it will show you a windows of the list of all other packages that will be removed as a result of removing this one, among that list you will find ‘Firefox’, ‘vlc’ and other packages that I actually need, so that means this one is important and i will just hit cancel to keep it. Same thing when for example you want to install and try some application but you find that it needs many other packages to be installed as well.

However, it seems that Fedora and RPMfusion are not giving much attention to Smart and the channels files (channel = repo) are not updated for Fedora 14 (was also the case for F13 when it was released) so I decided to update those packages myself and maybe find a way to send them to Fedora and RPMFusion so they will sign them and add them to their main repositories.

Download the appropriate files for your system or the source if you wanna compile the rpms and sign them yourself (you will need to rerun Smart so it detects the changes):

Update: Since not much attention from Fedora and RPMfusion is giving to Smart and it is not supported anymore I stopped making the rpms for it.

While working on my script Autopilot to enable buying advertisement I started collecting information about the price changes over time, and found out that it is not actually random, but repeats every week. So here is a graph that shows the prices for 1 week and a table that shows the same thing and highlights the cheapest ones.

AM Advertisement Prices

SatSunMonTueWedThuFri
12 AM49890480893208043022470173221340693
01 AM48089190043204348612377683579249415
02 AM2389674353284550324322134543949838
03 AM7831140213447547017338694989039308
04 AM8870254823685340843406934983814928
05 AM214588658398013517747250432327530
06 AM2277520310430223221349890238968870
07 AM736621438461123255550097976319060
08 AM203108083486123579248089743525482
09 AM234479777501054069339308887014038
10 AM1009439347503244543923896164998675
11 AM7531501684922948567118512488322794
12 PM1904543179470174989078312277523447
01 PM4616732218440705016874731101511824
02 PM50109492444084349838887086757472
03 PM4317936829377684808914021203109777
04 PM31976365453517743232214582558229278
05 PM44098496113328934525255851903748103
06 PM43972439724397243972439724397243972
07 PM32043415313896736524344393290932080
08 PM48612389673443932080328453685343022
09 PM37768365243208034475430225010547017
10 PM35792344393284543022503244084332213
11 PM49415329093685350105408433197740693

Note: the table and graph timings are based on the US-Eastern Time (-5) so adjust your times accordingly. Also the listed prices are for the most expensive type of advertisements (Billboards on 20 international airports).

NOTE: The script no longer works, and the development was stopped

After being bored with Airline Manager in Facebook in which you have to keep watching your airplanes when they arrive to send them in another flight, I decided to write my own script to use with greasemonkey in FireFox to do that thing for me. Basically, you will need a computer that is connected to the internet and running for most of the time. Install Firefox and add the Greasemonkey add-on to it, then install my script in greasmonkey and enable it if it is not enabled by default. Now when you visit the flight section of the game under facebook you will see the Auto Pilot control box (shown below) in the left column. Simply set the time that you want the script to repeat the task then click on the button. That’s it, now just watch the script fly the first 10 ready airplanes and the count down will start to trigger the next run.

كثير منا يجد العاب الفيسبوك (Facebook) مملة بعد فترة من اللعب بسبب ان اسلوب اللعب يصبح متكر ورتيب ومن امثلتها لعبه مدير الطيران (Airline manager) اذ يجب عليك متابعه مئات من الطائرات وانتظار وصولها لكي تقوم بارسالها مرة اخرى في رحلة جديدة، فلذك السبب قمت ببرمجة برنامج صغير يعمل في متصفح الفايرفوكس (Firefox) تحت اضافة قريسمونكي (Greasemonkey). فاذا كنت من من يلعب هذه اللعبة وعندك جهاز متصل بالانترنت ويعمل بشكل مستمر فكل ما عليك هو تركيب متصفح الفايرفوكس واضافة القريسمونكي له ثم تحميل برنامجي فيه ومن ثم قم بقتح صفحة اللعبة من الفيسبوك واضغط على رابط الطيران (Flight) و سوف تجد ادوات التحكم ظاهرة في الجهه اليسرى من الصفحة كما تراها في الصورة التالية. قم بتحديد الزمن الذي تريدة لتكرار عملية الطيران ثم اضغط زر (Auto Pilot) فسيقوم البرنامج بارسال اول 10 طائرات جاهزة ثم سيكرر العملية بعد انقضاء العد التنازلي.

Here is an image showing the position on the control box in the page:

هذه الصوره توضح موقع ادوات التحكم في الصفحة:

Download the code from here: https://github.com/fduraibi/Autopilot

Change log:

1.2.14: (July/28/2011)

  • Updating the script to work with new AM changes

1.2.13: (July/27/2011)

  • Fix fly link.

1.2.12: (July/25/2011)

  • Allow more wait time (up to 999 minutes + 999 random minutes), using longer time + random makes it hard to get detected ;)
  • Fix: the control box might show up in a weird location and cannot be clicked.
  • Fix: Update fly link.
  • Fix: Reset the tank max to 999999999 since AM will not accept 1000000000 even it is the max as they say!

1.2.11: (July/21/2011)

  • New: Buying advertisement is now possible.
  • Redesign the way tasks are being done to prevent some tasks from starting before other finish.
  • Added two fields to change the lucky fuel price and the max fuel tank capacity.
  • User interface enhancements.
  • Better use of CSS to make the code smaller and looks neat.

1.2.10: (July/04/2011)

  • Enhanced fly function will not reload for every patch of aircraft.
  • New: Lucky Fuel, when the fuel price drops to 50 (which happens once a month) fill the tank.
  • New: Options box to tune some of the script features to your liking:
    • Autostart on page load.
    • Change the delay and random delay times.

1.2.9: (Jun/10/2011)

  • New: Titlebar for the controlbox which is used to move it.
  • Update: Coloring the box to make it look nicer.

1.2.8: (Jun/8/2011)

  • New: Fuel Rescue option, if fuel tank is empty the script will buy enough fuel to fly the aircraft, no matter what the price is.
  • New: Autopilot Controlbox is movable, and the position will be saved.
  • Fix: Pages fetched will use the same protocol as the main page (http or https).
  • Update: If for unknow reasons a page won’t load, the script will reload AM
  • Removed some unused code.

1.2.7:

  • Added Cargo flights.
  • Script tested and works under Google Chrome using “tampermonkey” extension.
  • Fixed some compatibility with Google Chrome.
  • Small fix to allow running on secure Facebook page (https).
  • Increasing the delay and random delay between tasks, to help people with slow connections and make the script a bit harder to detect.

1.2.6:

  • Server update check of the script is back.
  • Added Tooltips to explain the functionality of the controlbox.
  • Enhanced fly function (if there are more than 10 aircraft waiting it will fly them in the same run).
  • Small changes and fixes here and there.

1.2.5:

  • Aircraft fly Fix (Thanks Olla)

1.2.4:

  • Fixed the script after the game code was updated.
  • Removed the Check4Update function <– since this will be the last update (sorry guys, i would love to keep doing this but I have other stuff to do)
  • Included the developer code (all the code that I use for myself including the unused functions, debuging stuff)
    • If you open Firefox Error Console you can see the logs about what the script is doing, very helpful for debugging.
    • Buy airplanes and sell airplanes functions are there but need to be enabled and integrated to the controlbox.
    • Check4Update is still there but disabled, i will remove the file from my server later so the function will not be useful for this script but I kept the code for others to use if someone want to take over.

1.2.3:

  • Fuel, now you can auto buy fuel by checking the fuel checkbox and setting the maximum amount needed and the highest price. It will check once every hour. (I found a way to fly the airplanes even with no fuel (negative amount) and was about to include it in the script but thought that would be cheating so I did not.)

1.2.2:

  • Added ability to buy catering by selecting the type and amount, so it buys them before flying the airplanes. But you have to make sure that you put the right amount for the selected catering type (minimum and maximum) by following the values giving by the game otherwise it will not buy them. And when the catering finishes it will buy them again in the next round.

1.2.1:

  • Added Note taker to keep notes about the game, like airport names, what to buy next…etc.
  • Fixed a bug in autoupdate if the version file on the server is not accessible.
  • Added a timeout for waiting loops so they will not loop forever in case a page did not load correctly.
  • Refresh (reload) the facebook page, including AM page, every 20 iterations to overcome a bug in AM (which i have no control over) that appears after keeping the script running for long time.

1.2.0:

This version went through a restructuring of the code. In the previous versions I was injecting the whole code inside the AM page (AM iframe inside Facebook page to be precise) and because of that I was also storing the script settings as AM cookies. This approach is simple and makes interacting with the page easy, however, it makes it easy for AM admins to detect the script by either adding a function that searches for my functions or the entries in the cookies. In order to solve this problem I changed the way the script works. Now when you open the AM game under Facebook my script will be loaded twice, the first instance will load under Facebook frame and it will inject the AP Control box in that frame, which AM has no access to so they cannot detect it. The second instance will load under AM frame, however, it will not inject anything but rather will remain in Greasemonkey sandbox and that is also hidden from AM cannot be detected. The last thing is the settings which are now being stored in Firefox itself under GM settings using GM functions (GM_getValue & GM_setValue). The two script instances are working separately and cannot communicate with each other since they run under different domains (facebook.com & airlinemanager.activewebs.dk) as this is a security feature enforced by Firefox to prevent malicious websites from accessing other websites functions and variables. To overcome this obstacle I used the GM stored settings which are shared by both instances to communicate. In addition to all of that I added some randomization to the timer so executing the tasks will not happen at the exact intervals.

  • Replaced using (eval) which can be harmful with location.assign
  • Settings are not stored in AM cookies anymore.
  • No code injection in AM page.
  • Time randomization.
  • Repairs and C-Check have their own check box so you can do one and not the other.
  • Auto check for script update every 3 days.
  • The timer now loops every 5 seconds instead of every 1 second to reduce the load on the browser.

* Note:

  • I recommend removing the stored cookies by the older version (delete all cookies if you are not sure how).
  • Even with all of these precautions this automating script can still be detected by AM admin if they want to, even though I don’t expect them to do it but they can detect and close your AM account. (Farmville knows about the automation tools and the users who use them but they did not prevent/block them because it did not harm them, rather it might have increase their users by keeping the lazy ones like me.)
  • I expect this version to have many bugs, because I did many changes. Also there are still some changes that I wanted to do but decided to release this first and work later on these changes and whatever bugs you guys find.

1.1.2:

  • More enhancement to the C-Check and Repair, it should miss less repairs and checks now. Basically I increased the waiting delay between tasks to give more time for the pages to load before starting the new one. If your internet connection is slow and the script does not work as it should then try increasing the delay by modifying this part of the script “fDelay=5000”, 5000 means 5 seconds, set the value to something suitable for your net speed.
  • Repairs and C-Checks will not work after the new AM update (April-08), so in order to keep using the script to fly airplanes uncheck the repair box, and kindly wait for the coming update.

1.1.1:

  • Solved the problem of not working under Firefox 3.6.x.
  • Removed the dependency on jQuery.
  • Fixed a bug that causes the control box not to show if the airline is not AM trusted.
  • The C-Check and Repairs are not perfect and it get missed sometimes

1.1.0:

  • Major change in how the script works.
  • Added the ability to repair airplanes and do C-Check before flying them.
  • Save control box settings in AM cookies.
  • Will load on all AM pages not just the Flight page.
  • Fixed the file name so it will install directly by greasmonkey
  • This version does not work with the new Firefox 3.6.x, I am trying to solve this issue.

1.0.0:

  • Inisial release.

Disclaimer: The author of this script cannot be held responsible for any thing that might result from using this code, so use it at your own risk.

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

إذا كنت تعمل في مجال تقنية المعلومات (IT) او انك ذو المام بتركيب البرامج وتقوم بتركيب برنامج الاوفيس 2007 على العديد من الاجهزة فان هذا الموضوع قد يساعدك في جعل تلك المهمة اسهل بكثير مما اعتدت عليه.

توفر ميكروسوفت امكانية تعديل وتخصيص الاعدادات الافتراضية لبرنامج اعداد الاوفيس (Setup) مما يمكنك من تركيب البرنامج فيما بعد بضغطة زر واحدة، واليكم الطريقة بالصور.

  • اولا قم بنسح برنامج الاوفيس من القرص الضوئي الى مجلد في القرص الصلب (مثلا D:\Office2k7)
  • افتح نافذة الاوامر (Command Prompt) ثم انتقل الى مجلد الاوفيس
  • قم بتشغيل برنامج الاعداد مع تمرير امر تخصيص الاعدادات كالتالي: setup.exe /admin (بامكانك تنفيذ setup.exe /? لروية جميع الاوامر)

نافذة اعدادات الاوفيس

  • من خلال هذة النافذة تستطيع تخصيص البرامج والاعدادات لحزمة الاوفيس بما يتناسب مع متطلباتك او متطلبات الشركة والصور التالية توضح اهم تلك الاعدادات مع شرح مبسط (اضغط على الصورة لرؤيتها بحجم اكبر):

oct-location

  • بعد الانتهاء من جميع الاعدادات قم بحفظها عن طريق “File->Save”، (اسميت ملفي FAD.MSP) ويمكنك فتح الملف مرة اخرى للقيام بمزيد من التعديل والتخصيص.

  • الخطوة الثانية هي دمج التحديثات والرقع الامنية الخاصة بالاوفيس مثل “Sevice Packs” و “Security patches” بحيث يتم تركيبها مباشرة بعد تنصيب البرنامج.

  • قم بتحميل اخر التحديثات و السيرفس باك من موقع ميكروسوفت وستكون ملفات تنفيذية بامتداد exe.

  • من نافذة الاوامر قم بتشغيل تلك الملفات بالطريقة التالية: office_sp2.exe /extract:D:\office2k7\updates حيث ان office_sp2.exe هواسم ملف التحديث و D:\office2k7\updates هو المسار لمجد التحديثات الموجود في مجلد الاوفيس، وستقوم تلك العملية بنسخ ملفات التحديث ذات الامتداد msp الى ذلك المجلد.

  • الخطوة الاخيرة هي عملية التثبيت للاوفيس على الاجهزة كالتالي: setup.exe /adminfile FAD.MSP

  • وبامكانك انشاء ملف باتش “setup.bat” يحتوي على هذا السطر لكي تسهل عملية التنفيذ.

والان لن تحتاج الى ادخال الرقم التسلسلي في كل مرة ولن تحتاج الى تخصيص الاعدادات او تركيب كل البرامج في كل مرة ولا الى تركيب التحديثات.

في البداية اهني من يوجد عندهم تغطية لشبكة الوايماكس (WiMAX) الخاصة بشركة عذيب (Go) بتلك الخدمة اللتي انقذتنا من احتكار شركة الاتصالات. عند بدء الخدمة اشرت على احد اخوتي بالغاء خدمة الدي اس ال (DSL) والاشتراك مع “قو” بسرعة 2 ميقا، قمت بتجربة السرعة مع موقع Speedtest لخادمين في الرياض واوروبا وكانت النتائج تبعث على السرور وانمتى ان تبقى كذلك خصوصا بعد ازدياد عدد المشتركين.

Go-Speedtest-Riyadh

Go-Speedtest-Rome

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

قد يكون التحديث قام بحل بعض المشاكل لكن هناك مشكلة لازالت قائمة الى لحظة كتابة هذا المقال واتنمى ان تحل سريعا من Motorola او عذيب والمشكلة تكمن في تعطل خدمة تمرير طلبات اسماء النطاقات (DNS) الموجودة في المودم. حيث ان المودم يقوم بتعيين نفسه كخادم اسماء النطاقات في شبكتك الداخلية ثم يقوم هو بدورة بتمرير الطلبات الى خادم النطاقات الحقيقي الموجود لدى مزود الخدمة عذيب، لكن ولسبب مجهول تتعطل هذه الخدمة في المودم ولايقوم بتمرير الطلبات ولكن الاتصال لازال يعمل وبامكانك الدخول على المواقع والخوادم باستخدام عنوان ال اي بي (IP address).

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

في حال رغبت في استخدام خادم عذيب فعليك الحصول على عنوان الـ IP من صفحة اعدادات المودم

DNS Server IP

الغريب ان عذيب يستخدمون IP لخادم واحد فقط والعادة بان يكون هناك اثان في حال تعطل احدهم ولعلهم يستخدمون تقنية توزيع الحمل (Load balancing)، المهم العنوان الضاهر في الصورة هو 94.77.215.126 ستقوم بتثيته في اعدادات الشبكة في جميع الاجهزة التي تستخدم الشبكة، الصورة التالية تبين طريقة عمل ذلك في الاجهزة العاملة بنظام وندوز

tcp-dns-setting-small

قمت باستخدام عنوان IP اخر من OpenDNS في حال تعطل خادم عذيب. اما بالنسبة لنظام اللينكس فيمكن القيام بذلك عن طريق ملف (etc/resolv.conf) او اعدادات NetworkManager ولمزيد من الايضاح ارجو السؤال عن طريق التعليقات على هذا الموضوع.

I have just found out that you can include images into gmail, not just through attachments but to embed them with in the email content. To activate this feature go to gmail Setting then Labs and look for and enable “Inserting Images”

Insert Image - Gmail Labs

After enabling this feature you will find a new icon in the email text editing toolbar clicking on this icon will allow you to embed images from your computer or from the internet using a URL

Inserting image into an email

You can also find more useful features in gmail Labs like adding more Emoticons and browsing your emails offline.

اكتشفت قبل قليل اثناء قيامي بتعديل بعض الاعدادات في بريد الجيميل (Gmail) انهم قد اضافو امكانية ارفاق الصور في داخل الرسالة وليس كمرفقات فقط، وفي حد علمي اعتقد انهم اول من قام بذالك في بريد متصفح مجاني (Web email). ولتفعيل ذلك ماعليك سوى الذهاب لاعدادات بريدك (Settings) قم اختر من شريط الاعدادات المختبر (Labs) ومن ثم قم بتفعيل خاصية ادراج الصور

Insert Image - Gmail Labs

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

Inserting image into an email

وهناك ادوات وخصائص اخرى مفيدة وجميلة يمكن تفعيلها ايضا من نفس المكان (مختبرات Labs) مثل زيادة الرسومات المضحكة (Emoticons) تصفح البريد بدون اتصال (Offline) حيث يقول الجيميل بحفظ الرسائل في جهازك اثناء اتصالك بالشبكة مما يمكنك من تصفحها وارسال الرسائل بدون اتصال وفي حال وجد اتصال يقوم بعمل تزامن مع الخادم.

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

احد الطلبة دايفيد هوفمان (David Hoffman) قام بسرد قصته في مدونته وذكرت تفاصيل ما قامو به من البدء في المنطقة التجارية وسط المدنية ومحاولة البحث عن عمل والحصول على طعام بما لا يزيد عن قيمة 2 دولار امريكي ثم الانتقال بالمواصلات العامة الى حرم الجامعة للبحث عن ملاذ للنوم، تفاصيل القصة تجدونها في مدونت الكاتب على الرابط التالي: Homeless for a day

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

هذا الموضوع سيكون شرح مبسط عن طريقة عمل Secure Socket Layer او SSL المستخدمة في مواقع الانترنت المشفرة والتي يبدأ عنوانها بـ https. سبب حديثي عن هذا الموضوع هو اهميته واعجابي به وبطريقة عمله.

أولا يوفر نظام SSL ثلاث خصائص:

  1. تشفير البيانات المرسلة عبر الانترنت بحيث لا يستطيع احد فهم محتواها غير المرسل والمستقبل الرسمي Confidentiality.
  2. حماية البيانات المرسلة من العبث او التعديل قبل وصولها للمستقبل Integrity.
  3. التأكد من هوية المرسل حتى يتسنى للمستقبل تحديد اذا كانت البيانات مرسلة من جهه صحيحه او لا Authentication.

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

يستخدم هذا النظام ثلاث انواع من الشفير:

  1. تشفير تثائي الاتجاه: يعتبر هذا اقدم سبل التشفير المعروفة وحاليا يعتبر تشفير AES هو التشفير المتفق عليه عالميا ويتميز بسرعته وقوته. وطريقة عمله تعتمد على اختيار مفتاح سري (Secret Key) من عدة احرف يتفق علية المرسل والمستقبل بشرط ان يكون طويل وصعب التخمين فيقوم المرسل باستخدام المفتاح السري لتشفير البيانات (Encryption) قبل ارسالها ثم يقوم المستقبل باستخدام نفس المفتاح لعكس عملية التشفير واستخراج البيانات (Decryption) الاصلية ولهذا يسمى ثنائي الاتجاه ويسمى كذلك بالتشفير التماثلي (Symmetric key cryptography). من الامثلة المشهورة لهذا النوع: DES و AES و RC4

SSL

  1. الاختزال (Hashing) (التشفير احادي الاتجاه) :وهو يعتبر نوع خاص من انواع التشفير حيث انه يقوم بتحويل البيانات الى شفرة غير مفهومة وتكون ذات حجم ثابت غالبا، ولكن من الصعب عكس العملية والتوصل الى البيانات الاصلية، كما يجب (قدر الامكان) ان لا توجد بيانات عند اختزالها تعطي نتيجة مشابهة لشفرة بيانات اخرى. ومن الامثلة: MD5 و SHA

SSL

  1. تشفير المفتاح العام والخاص (Public-key cryptography): ويسمى ايضا التشفير الغير متماثل (Asymmetric key cryptography) اذ يعتمد هذا النوع من الشفير على وجود مفتاحين مختلفين تماما يستخدم احدهما للتشفير ويستخدم الاخر لفك التشفير (او العكس) ولكن لايمكن استخدام نفس المفتاح لكلا العمليتنين. ومن الامثلة: RSA و Diffie-Hellman.

SSL

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

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

ما هو الحل اذن؟؟ هل نستخدم التشفير التماثلي او المفتاح العام؟ :? الجواب هو باستخدامهما جميعا. كيف؟ … الطريقة ببساطة هي وكما في المثال السابقة ان اقوم بارسال مفتاحي العام لك ثم بدلا من ان تقوم انت باستخدامة لتشفير الرسالة تستخدمة لتشفير المفتاح السري الذي سنقوم باستخدامة في التشفير التماثلي، حيث تقوم انت بانشاء مفتاح (بطول 256 بت مثلا) ويكون صعب التخمين (احرف وارقام عشوائية) ثم تستخدم مفتاحي العام لتشفير ذلك المفتاح السري وارسالة لي ومن ثم اقوم انا باستخدام مفتاحي الخاص لفك التشفير والحصول على ذلك المفتاح العشوائي والذي سنستخدمة جميعا في تشفير بقية الاتصال. فبهذه الطريقة نكون استخدمنا تقنية المفتاح العام (المكلفة حسابيا والبطيء) مرة واحده فقط وبعد ذلك نكمل بقية المراسلات باستخدام التشفير التماثلي (السريع والآمن)

لتبسيط شرح طريقة العمل قمت بعمل هذا المثال المبسط:

طريقة عمل الـ SSL

  1. يقوم المستخدم بالدخول على موقع البنك المشفر (https) او اذا استخدم الموقع العادي (http) فان البنك سيقوم يتحويلة مباشرة الى النمط المشفر.
  2. يقوم البنك بارسال شهادته الرقمية المصدقة وفيها مفتاح التشفير العام.
  3. يقوم متصفح الانترنت لدى المستخدم (مثلا فايرفوكس او انترنت اكسبلورر) بالتحقق من مصداقية وصلاحية تلك الشهادة واذا كانت تخص البنك او لا.
  4. يقوم المتصفح بانشاء رقم سري عشوائي يكون عادته بطول 128 او 256 بت (حسب مواصفات شهادة البنك الرقمية).
  5. يقوم المتصفح باستخراج المفتاح العام الموجود في شهادة البنك الرقمية ويستخدمة لتشفير الرقم السري العشوائي الذي قام بانشائه في خطوة رقم 4.
  6. يقوم المتصفح بارسال الرقم السري المشفر للبنك.
  7. بعد ان يصل الرقم السري المشفر للبنك يقوم البنك باستخدام مفتاحة الخاص لفك التشفير واستخراج الرقم السري.
  8. في هذة اللحظة يكون لدى المستخدم والبنك رقم سري معروف لديهما فقط وصعب الكسر يتم استخدامة لتشفير بقية المعاملات البنكية بين الطرفين.

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

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

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

طريقة التفعيل سهلة جدا وهذه هي الخطوات:

  1. انتقل الى صفحة الاعدادات عن طريق اختيار “Settings” من الزاوية اليمنى في اعلى الشاشة.
  2. في اول صفحة الاعدادات وفي نهاية السطر Language اضغط على “Show all language options”.
  3. سيظهر لك خياران الاول لاخفاء الازرار والثاني لتفعيلها قم باختيار الثاني (الوضع ON) ثم احفظ التعديلات.
  4. قم بانشاء رسالة جديدة وسوف تجد ازرار تغيير الاتجاة موجودة في شريط الادوات.

I have always wanted to write bidirectional posts with English and Arabic languages together. However, to do so I needed to have the support for RTL and LTR from the TinyMCE editor in wordpress which was not there (this is true at the moment of writing this post). The only possible was was to edit the post in the html form and add the required tags and parameters.

كثيرا ما وددت ان اكتب مقالا في مدونتي يحتوي كلمات من اللغة العربية الانجليزية ولكن ذلك يتطلب استخدام محرر نصوص يدعم الكتابة من اليسار لليمين ومن اليمين لليسار و للاسف فان محرر النصوص TinyMCE المدمج مع مدونة wordpress لا يقدم ذلك الدعم (الدعم غير موجود حتى لحظة كتابة هذا الموضوع). وكانت الطريقة الوحيدة لعمل ذلك هي عن طريق تعديل نص html مباشرة.

One day I decided to write my own plugin to enable such this feature and to my suprise I found that the original TineMCE editor already has that support in the needed files are actually installed with wordpress but are being disabled!

في احد الايام قررت ان اكتب plugin لمدونة wordpress لاضافة هذه الخاصية وبعد البحث تفاجت بان البرنامج الاصلي لمحرر TinyMCE يوفر الدعم للكتابة بالجهتين وان الملفات الخاصه بذلك موجودة مع مدونة wordpress ولكنها غير مفعلة!

So that made my day easy and all I have done was to enable these features (LTR & RTL) and add their buttons to the toolbar

هذا الاكتشاف سهل العمل بشكل كبير حيث ان كل ما كان علي عملة هو تفعيل تلك الخاصية واضافة الازرار في شريط التحرير الخاص بـ TineMCE

TinyMCE showing the LTR & RTL buttons

TinyMCE showing the LTR & RTL buttons

صورة تبين الازرار المضافة لشريط التحرير

The resulting HTML code with some LTR and RTL lines

The resulting HTML code with some LTR and RTL lines

نص الـ HTML ويبين تعديلات الاتجاة للنص

The final result

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

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

Compromising Electromagnetic Emanations of Keyboards Experiment 1/2

Compromising Electromagnetic Emanations of Keyboards Experiment 2/2

وهذا رابط الموضوع http://lasecwww.epfl.ch/keyboard

(الطريقة هذه لا تعمل الان… يبدو ان الشركة قد حلت المشكلة)

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

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

  1. القبيلة هي الرومان.
  2. قمت بتدريب فارس قيصر (لانه اقوى الوحدات هجوما ودفاعا فارد ان يكون البطل فويا جدا) وكان هو الفارس الوحيد الذي املكه.
  3. بعد انتهاء تدريب الفارس ذهبت لقصر الابطال وبدات في تدريبه كبطل.
  4. ولكون تدريب البطل يستغرق وقتا خشيت ان يحصل على الهجوم ويموت الفارس فقمت بتعزيزه للقريه المجاورة (يملكها لاعب اخر) قبل انتهاء تدريب البطل وكنت اعتقد انه بمجرد انتهاء التدريب سيختفي الفارس ويتحول الى بطل.
  5. انتهى تدريب البطل ولازالت الفارس في طريقة للقرية المجاورة (لم يصل بعد) فقم بارسال البطل ايضا كتعزيز.
  6. بعد فتره وصلت جميع الوحدات لتلك القرية وبينها الفارس والبطل.

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

This is a small trick that I found while i was playing Travian, the online real-time war game. Travian players know that you can have only one hero for you village, and this hero is just one of your regular soldiers or knights that you choose to have a special training that makes him much stronger. So as I have said you have to taking an existing soldier and convert him to a hero. But what if you can train a hero from nothing and without losing any soldier or knight? This trick was actually discovered by accident while I was moving my army to a neighboring village to save them from an expected attack. Long story short, how does it work? I will tell you what I did exactly and you can confirm if it works for you or not because I have not tried it again since my hero is still alive. So here is how I did it:

  1. I have a Roman tribe.
  2. I trained a “Equites Caesaris” (since i wanted to have the strongest army unit) and it was the only one in my troops.
  3. After the training of the “Equites Caesaris” was finished I went to the hero mansion and started training him to become my hero.
  4. While the hero is being trained usually the selected unit will still be listed with the other units until the training is done in which it will disappear and get listed as a hero.
  5. While I was waiting for my hero to be trained (the hero training has just started) and since I was expecting an attack against my village I sent all my troops as an reinforcement to another village (not mine) including the knight that selected to be trained as a hero.
  6. The hero training was complete and he was listed under my troops, and I was expecting the knight who was selected to disappear, but to my surprise he did not. And after i checked all my troops I found that I have them both

I am not sure if this is a normal behavior or a glitch in the game, try it and give me your feedback.