Categories
Technical

Creating a feedback form for the Weather Bot and connecting it with Facebook and Telegram.

في الفيديو ده بشرح ازاي تبني للـ Weather Bot زي Feedback dialog، و ازاي تربطه بـ Facebook و Telegram.

Categories
Technical

Punnycode Phishing Checker

دي chrome extension بسيطة كتبتها بتعرف اذا كان ال website ده مستخدم ال Punycode phishing technique ولا لا. الفكرة اني بجيب ال Url و بجرب اعمله decode ب punycode js library. لو النتيجة اللي طلعت ف الاخر كانت غير ال URL الحالي تبقى دي ممكن تكون فعلا phishing و بتظهر رسالة ف اول الصفحة تقول ده. شكل الرسالة

 ال extension و ال source code و شرح التحميل

https://github.com/ShawkyZ/PunycodePhishingChecker

Categories
Technical

Building A Weather Bot Using LUIS and MS BotFramework

الbot المفروض في الاخر ياخد الرسالة من الuser و يبعتها لل Cognitive Services تحللها و منها يعرف لو ال user متضايق مثلا او لا و على اساس كده ممكن يرد عليه رد معين.

 

Categories
Technical

Building A Simple Bot Using Microsoft Bot Framework

في الفيديو ده بشرح ازاي تبني bot بسيط باستخدام ال Microsoft Bot Framework و Microsoft Cognitive Services.

الbot المفروض في الاخر ياخد الرسالة من الuser و يبعتها لل Cognitive Services تحللها و منها يعرف لو ال user متضايق مثلا او لا و على اساس كده ممكن يرد عليه رد معين.

 

Categories
Technical

Host ASP.Net WebApps On Linux

تكمن المشكلة في إنشاء موقع إلكتروني على الإنترنت في الإستضافة الخاصة بالموقع والتي تأتيك بين أحد الإختيارات التالية:

إستضافة Windows أم إستضافة Linux

وهل العميل على إستعداد للدفع مقابل هذه الإستضافة، وهذا كان هو التحدى لإي مبرمج يعمل بـ لغة ASP البرمجية لإنشاء وبرمجة المواقع

اليوم وبعد أن أصبح لدينا ASP vNext والذي أصبح منتح مفتوح المصدر بالكامل أصبح لدينا خوادم غير الـ IIS والتي كانت لا تعمل إلّا على خوادم Windows فقط

لم نكن نحلم في يوم من الأيام أن نستطيع عمل ASP.NET WebApp ونقوم بإنشاء إستضافة خاصة به على خادم Linux

الآن أصبح الأمر ممكنًا ومتاح للجميع، فمنذ فترة أعلنت شركة Microsoft عن ASP.NET vNext وأطلقت عليه الآن “ASP.Net 5” ويمكنك تطوير موقع كامل على خادم OSX و Linux ويمكنك إستضافة الموقع عليه

كيف يمكننا فعل ذلك؟ وماذا حدث بالظبط، وما هي الخطوات التي يجب أن اتخذها وما هي الـ vNext ؟

مبدأيًا: الـ ASP vNext جميعها مفتوحة المصدر يمكنك التعديل عليها بالكامل كما تحب وقراءة ومشاهدة الكود المصدري، بالإضافة إلى إرسال إقتراحات لـ شركة مايكروسوفت خاصة بتعديلاتك.

سوف تجد الـ repo على GitHub من هنا:

https://github.com/aspnet/home

يذكر أنّ شركة مايكروسوفت في الآونة الأخيرة بدأت تتحد مع فريق Mono فيمكننا في الفترة القادمة توقع ان اي تحديثات خاصة بالـ .NET سوف نجدها في الحال على Mono ولن نضطر للإنتظار بعد الآن بالإضافة إلى إن Mono كـ IDE سوف تتحسن بصورة كبيرة.

ما تم في ASP vNext كان ببساطة نقلة تاريخية لعدة أسباب:

١- الـ CSharp Compiler موجود مفتوح المصدر تحت اسم Roslyn.

٢- لسنا بحاجة إلى إستخدام الـ IIS Web Server بعد الآن فقد أصبح هناك Kestrel وبسببه يمكننا إستضافة المواقع على خوادم تعمل بـ Linux وكذلك OSX.

٣- أصبح الآن كل شئ على Nuget.

٤- بعد أن كان لدينا ملفين في المشروع الواحد، ملف خاص بملفات المشروع والثاني خاص بـ Nuget Packages أصبح الاثنين في ملف واحد تحت اسم Project.json

في هذه التدوينة سوف نتكلم عن كيف تبرمج Website بـاستخدام ASP vNext و و ما هي الخطوات اللازمة حتى تستضيف الموقع على Linux Machine ،الامثلة القادمة ستكون مرتبطة بتوزيعات لينكس المبنية على Debian.

مبدأيًا لكي تبرمجASP.Net Website على الويندوز فمن الممكن ان تستعملVisual Studio 2015 و هذا أسهل حل .. أيضًا ، من الممكن ان تستعمل اي محرر أخر.

فلنفترض الآن انك انتهيت من برمجة ال Website بالكامل و تريد استضافته على أحد خوادم Linux فما هي الخطوات اللازمة لذلك؟

اذا كنت تعتقد ان الخطوات القادمة من الصعب تنفيذها فلا تقلق ، فقد جهزنا لك Script سوف يقوم بكل هذه المهام من تلقاء نفسه.

1- تحتاج الى Mono و يكون أعلى من 3.4.1:

اكتب هذه الاوامر في ال Terminal لتحميل و تنصيب Mono 3.8.0

sudo apt-get install build-essential

wget http://download.mono-project.com/sources/mono/mono-3.8.0.tar.bz2

tar -xvf mono-3.8.0.tar.bz2

cd mono-3.8.0/

./configure –prefix=/usr/local

make

sudo make install

2- نحتاج الى تحميل SSL Certificates خاصة بميكروسوفت:

sudo certmgr -ssl -m https://go.microsoft.com

sudo certmgr -ssl -m https://nugetgallery.blob.core.windows.net

sudo certmgr -ssl -m https://nuget.org

sudo certmgr -ssl -m https://www.myget.org/F/aspnetvnext/

mozroots –import –sync

3- نحتاج الى KVM و KRE :

*اكتب ال UserName الخاص بـ السيرفر مكان {USER NAME}

(KRE (K Runtime Enviroment) , KVM (K Version Manager

sudo apt-get install curl
curl -sSL https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.sh | sh && source ~/.kre/kvm/kvm.sh
sudo -s
source /home/{USER NAME}/.kre/kvm/kvm.sh
kvm upgrade

4- الآن كل ما نحتاجه لتشغيل Kestrel Web Server اصبح جاهز ، و لكن Kestrel يعتمد على libuv فيجب تنصيبها له:

sudo apt-get install gyp

wget http://dist.libuv.org/dist/v1.0.0-rc2/libuv-v1.0.0-rc2.tar.gz

tar -xvf libuv-v1.0.0-rc2.tar.gz

cd libuv-v1.0.0-rc2/

./gyp_uv.py -f make -Duv_library=shared_library

make -C out

sudo cp out/Debug/lib.target/libuv.so /usr/lib/libuv.so.1.0.0-rc2

sudo ln -s libuv.so.1.0.0-rc2 /usr/lib/libuv.so.1

5- تحميل Template جاهز حتى نتأكد ان كل الخطوات السابقة تمت بطريقة صحيحة :

sudo apt-get install git

git clone http://github.com/aspnet/home

cd home/samples/HelloMvc

kpm restore

kpm build

من الممكن عمل build من خلال الأمر kpm build ، او اذا كنت تريد ان تشغل الserver نكتب k kestrel

الان لو كتبت k kestrel و رايت الرسالة Started اذا فمن الممكن تعاين الموقع من خلال الbrowser ادخل على

http://localhost:5004

ملحوظة: يتم كتابة الاوامر مثل k kestrel او kpm build بداخل ال Directory الخاصة بالموقع.

*اذا كنت لا تريد القيام بكل هذه الخطوات من الممكن تحميل ال Script:

https://gist.github.com/ShawkyZ/0b3831329a0372e33aef#file-kestrel-configuration

*اذا كنت تريد ان تستضيف ال Site على Azure VM مثلًا ، فمن الممكن ان تنشئ واحدة و تستخدم (Putty) مثلًا لكي تتصل بها و تبدأ بعمل كل الخطوات السابقة و عند الانتهاء لا تنسى ان تضبط اعدادات ال EndPoint الخاصة بال VM.

Categories
Technical

Backup and Restore MSSQL DB Using C#

ازاي تاخد Database Backup من البرنامج بتاعك و ازاي تعمل Restore

مدبأيا ازاي نعمل Backup لـ Database MSSQL اصلا ؟

لو عندنا مثلا Database اسمها TestDB و عايز اعملها Backup على ال C:\TestDB.bak

هنكتب الامر ده ف ال SQL

BACKUP DATABASE TestDB TO DISK ='C:\TestDB.bak'

طيب نعملها ازاي ف ال App بتاعنا

ممكن ببساطة نضيف folderBrowserDialog عشان بس نحدد مكان ال Folder اللي الـ User عايز يحفظ فيه ال BackUp

و ناخد بعد كده ال path اللي اختاره و نشتغل عليه احنا

مثال بسيط

انا عامل كلاس اسمه Database فيه كل ال Functions الخاصة بالتعامل مع ال Database بتاعتي

و واخد من الكلاس ده object اسمه db و فيه Function اسمها BackUpDB و بتاخد parameter هو string path

دلوقتي لما ال user يدوس على button بتاع ال Browse اللي هيفتحله ال folderBrowserDialog

ده هيكون code ال button click

private void button6_Click(object sender, EventArgs e)
{
folderBrowserDialog1.ShowDialog();
string path = folderBrowserDialog1.SelectedPath;
if(path!="")
{
 
db.BackUpDB(path);
MessageBox.Show("تم الحفظ بنجاح");
}
else { MessageBox.Show("خطأ في الحفظ"); }
}

ببساطة باخد منه ال path و بديه لل BackUpDB Function

ايه اللي بيحصل ف ال BackUpDB Function بقى

public void BackUpDB(string path)
{
con.Open();
SqlCommand cm = new SqlCommand("USE master", con);
cm.ExecuteNonQuery();
SqlCommand cmd = new SqlCommand("BACKUP DATABASE TestDB TO DISK = '" + path + "\\TestDB" +DateTime.Now.ToShortDateString().Replace('/','-') + ".bak'", con);
 
cmd.ExecuteNonQuery();
con.Close();
}

طيب دلوقتي انا عايز اعمل restore

ال restore هيجيلك exception غبي كده هيقولك ان فيه connection لل database مفتوحة و انها بتستعمل دلوقتي .. طب عشان نخلص من الحوارات دي نعمل ايه ؟

هنعمل 4 حاجات

1- هنشتغل على Master بدل ال Database بتاعتنا بمعنى اني هعمل Use master

2- هخلي ال database بتاعتي Single_User

3-هعمل Restore With Replace بأمر زي ده كده

RESTORE DATABASE TestDB FROM DISK=’C:\TestDB.bak’ With Replace

4- هرجع ال database بتاعتي تاني Multi_User

طيب نعملها ازاي ف ال App بتاعنا

هنعمل المرادي SaveFileDialog عشان نحدد ال path اللي عايز يحفظ فيه ال Backup و ناخد ال path ده و نعمل restore منه

مثال بسيط

الكلاس بتاع ال Database في Function اسمها RestoreDB بتاخد string path برضه

دلوقتي لما ال user يدوس على button عشان يفتح ال SaveFileDialog هاخد ال FileName من ال SaveFileDialog ده و هبعته للـFunction

private void button7_Click(object sender, EventArgs e)
{
openFileDialog2.Filter = "Backup File (*.bak)|*.bak";
openFileDialog2.FileName = null;
openFileDialog2.ShowDialog();
string path = openFileDialog2.FileName;
if (path != "")
{
try
{
db.RestoreDB(path);
MessageBox.Show("تم ");
Application.Restart();
}
catch { MessageBox.Show("خطأ"); }
}
else
{
MessageBox.Show("خطأ في الاسترجاع");
}
}

و ده اللي بيحصل جوة ال Function بتاعت RestoreDB

public void RestoreDB(string path)
{
 
con.Open();
SqlCommand cm = new SqlCommand("USE master", con);
cm.ExecuteNonQuery();
string Alter1 = @"ALTER DATABASE [TestDB] SET Single_User WITH Rollback Immediate";
SqlCommand Alter1Cmd = new SqlCommand(Alter1, con);
Alter1Cmd.ExecuteNonQuery();
try
{
SqlCommand cmd = new SqlCommand("RESTORE DATABASE TestDB FROM DISK='" + path + "' With Replace", con);
cmd.ExecuteNonQuery();
}
catch { }
string Alter2 = @"ALTER DATABASE [TestDB] SET Multi_User";
SqlCommand Alter2Cmd = new SqlCommand(Alter2, con);
Alter2Cmd.ExecuteNonQuery();
con.Close();
}