Featured

Scraping JavaScript-based websites using Selenium and .NET Core

Intro

At work, I needed to find a way to scrape a website and gather data required by some team, and that is quite trivial task IF the website is just a normal one with pages that could be fetched/downloaded using regular HttpClient/WebRequest calls and parse the content via tools like HtmlAgilityPack, but that wasn’t the case, the website was built with Angular, and it makes lots and lots of API calls and then aggregate the data and render them in a meaningful way.

JavaScript-based websites require a different approach for scraping, you need to treat them exactly like an end user does, via browsers, and that exactly what I did.

The other option beside automating this process, is by hiring someone doing all this manually, tinkering with the website DOM and the browser console to retrieve the displayed data, and the hidden info like the items’ IDs. This is quite hectic, so boring, and quite error prone.

So the decision was to automate this, and I already have some good experience with this topic, but that was on .NET Framework WinForms and Node.js with Electron, and I would prefer to build this using the latest .NET Core 2.x, which I’m going to show you in a minute.
Besides that I want to develop on my MacBook machine, using my favourite IDE, Rider, so the solution needs to work cross-platform.

Also, it’s important for me to be able to test my algorithm, is to see the actual browser and the actual behaviour of my code tinkering with the website live.

I started by running some research, and I was disappointed a lot, most of the resources I found were about the old .NET Framework, very little are about .NET Core, and even those are focusing on integration testing rather than scraping, so “headless” browsers are more appreciated there.

In the coming few lines, I will go through each option I found, and the pros and cons of each, and will go deeply over the option I picked.

Option 1: WebBroswer

WebBroswer is a WinForms control that you can use for rendering HTML or just navigating to URLs. It’s basically a wrapper for your local IE, but it has quite aggressive compatibility which makes the rendered results inside it look weird, different, and probably suffer from lots of JS errors, specially if the website is built using quite recent and modern JS framework/library.

For the above reasons, I decided to skip this option and just keep it as my last resort, specially I don’t think that .NET Core WinForms is mature enough, besides of course the other obvious reasons of how bad it is for using IE for browsing and scraping.

Option 2: PhantomJS

PhantomJS is a headless web browser scriptable with JavaScript. It runs on Windows, macOS, Linux, and FreeBSD. Paired with Selenium, you get the job done!

This was my initial choice due to my experience and maturity of the platform, PhantomJS is a quite famous in the field, Selenium and PhantomJS are like the perfect and well known pair for the job.

But, on March 2018, PhantomJS guys decided to suspend further development due to the decrease in contributors and in the community interest, you can read more about this here. This means no more bug fixes, and of course lack of recent browser capabilities support.

Though, I still decided to give it a try. After installing the latest version of Selenium.WebDriver nuget package in a new .NET Core Console application, I found that they stripped out all PhantomJS references, for example the PhantomJSDriver class is not there any more, so I decided to downgrade my Selenium version further down, till I found the classes I was looking for, but with big warnings that those classes are obsolete and are going to be removed in next versions, then I downgraded further, v1.10 to be exact, till I felt that PhantomJS is fully supported by Selenium.

The developing process was straight forward, by initiating PhantomJSDriver by passing the bin location of my OS PhantomJS which I downloaded from https://phantomjs.org/download.html

Since it’s a headless bowser, I had to do lots of trial and error, and the first issue I faced was getting warnings from the target website server that I’m using outdated browser and I need to upgrade to get the best user experience, PhantomJS sends old user-agent information, and that could be overwritten in the code, but that wasn’t my biggest problem.

The biggest issue was reading the nested nodes/elements of a custom HTML component tag, it’s quite normal in Angular application to see tags like <app-root> and <router-outlet>, and those are not really standard HTML tags, and PhantomJS was facing bad times trying to read them and their children.

So the conclusion was a big “No”, sadly enough due to the good times I had with this great tool. It’s time to move on.

Option 3: ChromeDriver

It took me sometime to update my knowledge and learn this new kid. Also I heard about a similar one for FireFox, but I decided Chrome would be a good fit.

The process is very straight forward, you just need to install these two nuget packages, lets say in a new .NET Core Console app:

  • Selenium.WebDriver: latest version
  • Selenium.WebDriver.ChromeDriver: latest version is OK, but you need to check the Chrome version installed on your machine, and you might need to downgrade this one or update your Chrome. This package puts the necessary executable files in your project output folder, so you don’t need to download any custom ones, if you do and want to skip this package, you can still download the target version from http://chromedriver.storage.googleapis.com/index.html

That’s really all you need. After that it’s time for writing some code:

// finding the chrome executable path (bin)
var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var driver = new ChromeDriver(path);

driver.Navigate().GoToUrl("https://js-website.com);

// doing some web storage manipulation
driver.ExecuteScript("localStorage.setItem('language', 'en');");
driver.ExecuteScript("localStorage.setItem('lat', '30');");
driver.ExecuteScript("localStorage.setItem('lng', '30');");

// refreshing is important for the website js to handle the updated localStorage
driver.Navigate().Refresh();

// sleeping/throttling waiting for everything to settle
Thread.Sleep(10 * 1000);

var header = driver.FindElementByCssSelector(".navbar-brand");
Console.WriteLine("Header: " + header.GetAttribute("innerHTML"));

var items = driver.FindElementsByCssSelector("div.container span.item");
Console.WriteLine("Items Count: " + items.Count);
foreach (var item in items)
{
    var title = item.Text;
    Console.WriteLine("Item: " + title);
    if (string.IsNullOrWhiteSpace(title) || title == "All Items") continue;

    item.Click();
    Thread.Sleep(5 * 1000);

    // continue...
}

That’s it basically, you can put this code inside your Console Main method, or organize the code the way you like.

This option has been my choice obviously. When I run this code, it initiates a Chrome instance in front of me and I see how my code interacts with the website. Also still you can set some capabilities to make it for example a headless browser, besides some other options specific to Chrome.

Final Notes

  • It’s very important to do throttling between certain actions in your code, giving the website’s JavaScript the time to do its work, it’s quite difficult to detect programmatically when the website’s JavaScript is doing or done with something, that’s why sleeping could be your best option, specially due to inconsistency, lots of JavaScript libraries and non-standard code that you don’t have control over
  • Hitting the same server from the same IP too much, could be flagged automatically by recent servers as a DoS attack, and you might even get your IP blocked, so throttling and slowing down the process and running only through a single thread to resemble a normal human user interaction, would be beneficial
  • Slowing down the process helps me a lot to monitor my code, at least during development/debug times, so the sleeping time could be a setting maybe if you want to publish your scraper
  • You need to have your compliances in check, legal and alike agreements could be needed when you need to scrape others’s websites, respecting their ownership over their data and their conditions. In this specific case I demonstrated, the target website is actually owned the company but the designated team is not working with the company anymore, so it’s much easier just to scrape than running into cycles of discussions and developing and fixing
  • You need to be smart. Maybe instead of writing code for clicking on several elements in a certain order to reach a certain page, you can do the same by just storing something in the localStorage or in a cookie. You need to study your target website and notice it’s behaviours
  • Web scraping requires good experience on both the backend and the frontend, and how the web works and how browsers handle them

That’s it, I hope you enjoy it and hopefully you learn something new, looking forward to your feedback and any questions. Happy coding!

Featured

أين اختفت المبرمجات؟

تمهيد

لا يخفى على أحد يعمل في مجال البرمجة خاصة أو تكنولوجيا المعلومات Information Technology عامة ، الانخفاض المستمر في أعداد الإناث في هذا المجال مقارنة بأعداد الذكور … للدرجة التي جعلت الجميع يتصور أن هذه المهنة تناسب الذكور أكثر … وهذه الظاهرة ليست قاصرة فقط على دول بعينها ، ولكنها ظاهرة عالمية يمكن ملاحظتها تقريباً في كل مكان.

في الشركات التي عملت بها سواءً في مصر أو في هولندا ، أو الدول الأخرى التي عملت مع شركاتها عن بعد remotely … يمكنني أن أتنبأ بأن أكثر من ٩٠٪ من العاملين في هذا المجال هم ذكور. ونفس ذلك التقدير تراه جلياً في المؤتمرات العالمية مثل AWS Summit أو Microsoft Ignite أو غيرهم ، فقط ملاحظة سريعة على الحاضرين في أي من المحاضرات التقنية ستعطيك انطباع حقيقي عن حجم الاختلاف الشاسع بين أعداد الذكور والإناث.

يدخل أيضاً في هذه الملاحظة أعداد المنسحبات من هذه المهنة … لقد عملت في مرات كثيرة مع مبرمجين ذكور أعمارهم أكبر من ٤٥ عاماً ، لكن لم أقابل أي مبرمجة أنثى تخطت ال٤٠ ، لا في مصر ولا خارجها … وقد لاحظت أيضاً أن الكثيرات يفضلن تغيير مسار عملهن إلى مسارات أخرى قد تكون قريبة نوعاً ما مثل Scrum Master أو بعيدة كل البعد مثل المحاسبة!

أنا هنا لا أتحدث عن صناعة البرمجيات ككل ، ولكن أخص حرفة البرمجة ومن يمتهنونها ، المبرمجين اللذين يدخل كتابة الكود جزءاً أساسياً من يومهم ومسؤولياتهم الوظيفية ، أولئك الغارقون في التأمل يبحثون عن عالم أفضل. هؤلاء ، وأنا منهم ، هم من أكتب عنهم.

مناقشات

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

وأيضاً يرى هؤلاء أن فرق العمل تكون في حالة انسجام أكثر عندما تكون كلها من الذكور ، فمثلاً يمكن في حالات الضرورة الاحتدام في المناقشات الفنية ، وهو ما لا يمكن حدوثه في وجود إناث لأنهن سيشرعن في البكاء عند علو الأصوات وتوجيه الاتهامات. ربما هذا أيضاً يدفع الإناث بعيدا عن هذا المجال كرههن للمنافسات والتحديات “الذكورية” Alpha-male أو على الأقل منافسات الأفضلية في الفريق ومن الأكثر اطلاعاً ومتابعة للجديد في هذا المجال سريع التغير.

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

سابق

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

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

ويتفق مع رأيي هذا “السيدة” الدكتورة في علم النفس العصبي Louann Brizendine … في كتابها The Female Brain ، تقول أن الجزء من المخ المسؤول عن الاستماع والاستقبال والتذكر والكلام ، يكون أكبر حجماً في الإناث بمعدل الضعف تقريباً عن الذكور ، وهذا يفسر قدرتهن على التذكر الجيد وكذا سماع طبقات صوتية تمكنهن مثلاً من إدراك حاجة الرضيع للنظافة أو الأكل دون أن يتكلم ، وأيضاً قدرتهن على الكلام وتكوين علاقات اجتماعية أفضل من الذكور ومالهذا من أهمية في بناء المجتمعات ، ولهذا الأخير فالإناث لا يفضلن الأعمال التي تطلب عزلة طويلة بعيداً عن تواصل بشري مثلما يحدث في البرمجة في بعض الأوقات.

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

لاحق

رأيي السابق كنت أحتفظ به لنفسي معظم الوقت ، من ناحية حتى لا أتسبب في أحتقانات وجدالات أنا في غنى عنها ولا طائل من ورائها ، ومن ناحية أخرى لأني ما زلت غير مقتنع ١٠٠٪ بهذه الأسباب … إذن قررت ترك باب البحث مفتوحاً حتى يتضح لي المزيد.

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

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

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

الكاتب والصحفي Clive Thompson في كتابه الشيق القيم Coders ، ناقش في جزء كبير منه هذا الموضوع … ولمح أن النشأة الاجتماعية لها دور مهم ، فبلدان شرق ووسط أسيا مثل الهند يشجعون بناتهن على الخوض في هذا المجال ، والمجتمع ككل يتقبل هذا بشكل جيد ، على عكس مجتمعات أخرى كثيرة مثل المجتمع الأمريكي ، حيث يحصل الأولاد في أعياد ميلادهم على كمبيوترات بينما تحصل الفتيات على عرائس ، هذا غير نظرة الأقران السيئة بين البنات تجاه المهووسات بالبرمجة والتكنولوجيا geeks ، وغيرها من فروقات جنسية اجتماعية.

وفي مجتمعاتنا الشرقية ، يتم تنشئة البنات أن مآلهن إلى بيت الزوجية وأن هذا هو دورهن وهدفهن في الحياة ، غير الكثير من الأعراف والتقاليد الأخرى … وكل هذا بالطبع يؤثر على تطور شخص وعقل الأنثى واختياراتها وادراكها الواعي واللاواعي ومن ثم قراراتها في الحياة.

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

هذه الشركات في الحقيقة بيئات عمل غير مستدامة unsustainable ، وسيحدث إن آجلاً أو عاجلاً هروب العمالة من هذه الشركات ولا سيما العمالة الماهرة وفي القطاعات ذات المرتبات المرتفعة مثل البرمجة ، ومن ثم خسارة هذه الشركات وخروجها من السوق تباعاً.

الخلاصة

الموضوع جل وكبير ، حاولت قدر استطاعتي تلخيصه وتسليط الضوء على أهم جوانبه وأبعاده … ومع اجتهادي فيه وحرصي ، يبقى احتمال خطأي قائماً ، فكلي ترحاب بمن يخالفني أو بمن يريد تعليمي وتصويبي.

وتبق الإجابة على السؤال: “أين ذهبت المبرمجات؟” مرهونة بالمجتمع والأسرة والفرد ، وكلي خوف أن تكون أسئلة أخرى من هذا النوع مطروحة بالفعل دون إجابات أو تصحيح … أعتقد أن كافة المجالات بشكل وبأخر تستحق دراسة مشابهة ، ولكن هذا مجالي وهو ما أعرفه.

ادعموهم وشجعوهم … أو على الأقل دعوهن يخترن ، فقط قفوا على الحياد وتأملوا.

#include
Scott Hanselman

طار مع السحاب

طارت الوظيفة

لم يكن هذا الصباح مثل غيره ، بعد أن تلقيت رسالة من زميل قديم يسألني كيف يمكنه أن يصبح مبرمجاً مثلي وبالتحديد في نفس تخصصي في ASP.NET … لم أستغرب الطلب إذ أتلقى مثل هذه الأسئلة من آخرين من آن إلى آخر ، لكن وجه استغرابي هو أن تأتيني من هذا الزميل ذو ال٤٥ عاماً والذي يعمل في مجال IT منذ ٣٠ عاماً ، ما بين إدارة الشبكات وإعداد الخوادم servers وضبط الـ data centers وتنصيب قواعد البيانات المركزية وغيرها من الأمور الفنية الدقيقة التي تحتاج خبرة وعلم كبيرين.

كنت أعلم جيداً ما لزميلي هذا من معرفة وخبرة بمجاله وعمله في شركات كبرى في عدة مدن مهمة آخرهم لندن ثم أمستردام ، ولكن لم أكن أعلم ما يعانيه زميلي هذا بسبب “السحاب”.

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

الشركات صارت تتجه بخطى متسارعة ثابتة نحو الحوسبة السحابية cloud computing عبر نقل كل البنى التحتية infrastructure إلى السحاب cloud ، وما يستتبع ذلك من قتل مستمر لوظائف الـ IT وتحويل كثير من مسؤولياتهم تدريجياً لفرق البرمجة ذاتها أو ما يعرف بـ DevOps … ليتبق في النهاية “صناع الطرابيش” اللذين كانوا يمتلكون صناعة مزدهرة ، ولكن تتغير الأحوال والأذواق والقوانين ، فتصبح صناعة عفا عليها الزمن obsolete.

موفري الخدمة من شركات الحوسبة الكبرى يسوقون بشدة للسحاب ولمفهوم الـ DevOps ويصورون الشركات الغير سحابية كأصحاب الكهف ، ويدعونهم باستماتة للتخلص من بنيتهم التحتية ونقل كل أعمالهم وبياناتهم إلى السحاب ، حتى يحدث ما أسميه “زواج المسيار” vendor marriage أو الزواج من موفر الخدمة ، فلا يقدر هؤلاء الزبائن أبداً من الإفلات من الشباك ويبقون رهينة للسحاب إلى الأبد ، ويبقى تدفق النقود مستمراً.

يريد زميلي أن يتطور محاولاً بث الروح من جديد في عمله ، ولكن هل يقدر وقد امتلأ عقله بالفعل بسنوات طوال من العلم والعمل والخبرات المتسعة في مجال صعب معقد … إنها لعنة التخصص وتقسيم العمل. كلي أمل أن يقدر وسأساعد ما استطعت ، ولكن النوايا لا تكفي والبوادر لا تطمئن.

طارت النقود

منذ أشهر قليلة ، تحديداً فبراير ٢٠١٩ ، أعلنت Microsoft Azure عن توفير خدمة Azure Cost Management لعملائها في أوروبا ، وهي خدمة تمكن العملاء من متابعة دقيقة لتكاليف الخدمات المستخدمة من الخدمات السحابية Azure … في السابق كان هناك خواص مماثلة لمراقبة النفقات لكنها لم تكن بذات العمق والتخصص.

تلك الخدمة الجديدة مكنت أحد بنوك هولندا من تتبع بعض التكاليف ومن ثم تقليصها بنسبة ٣٠٪ ، من ٥٠ ألف يورو مدفوعات شهرية إلى ٣٥ ألف يورو ، فقط عبرإيقاف خاصية واحدة هي الـ Replication في خدمة قواعد البيانات Azure Cosmos DB.

الطريف أن هذه الخدمة من قواعد البيانات Azure Cosmos DB كان يتم تسويقها بأنها مجانية تماماً طالما لم يتخط المستخدم حداً معيناً من الاستهلاك والمصادر ، وذلك نكاية  في الغريم التقليدي لخدمة قواعد البيانات من أمازون Amazon AWS Document DB والذي يوفر خواص ومزايا شبيهة … كانت ميزة “المجانية في البداية” ما دفع هذا البنك إلى تبني هذه الخدمة ، لكنه لم يكن يعلم أن الضبط الافتراضي لهذه الخدمة سيكون شاملاً لخصائص داخلية مدفوعة وأيضاً مكلفة جداً مثل الـ Replication ، ولا أعتقد أبداً أن في الأمر حسن نية من Microsoft.

خدمة Azure Cost Management التي مكنت هذا البنك من توفير أموال طائلة ، ربما أيضاً مكنت أخرون من فعل المثل ، هو الأمر الذي انعكس جلياً على تناقص إيرادات وتباطؤ في نمو الخدمات السحابية Azure طوال هذا العام … ولكن ماذا عن الأعوام السابقة؟ هذا البنك مثلاً يدفع مقابل هذه الخدمات منذ ٣ سنوات … وأيضاً ماذا عن الخدمات الأخرى التي تبدوا “مجانية في البداية” مثل Azure Functions و AWS Lambda؟ أظن أن الكثيرين في انتظارهم “خازوق”.

من ناحية أخرى ، ما الذي دفع هذا البنك إلى تبني السحاب؟ علماً بأن ٩٩٪ من عملاء البنك هولنديين مقيمين بهولندا وعددهم في حدود ٥٠٠٠ عميل فقط ، وأن البنك لديه data centers محلية ضخمة ومهيئة لكافة الأغراض والتي بالفعل يعمل منها عدد من تطبيقات البنك المهمة ، ولدى البنك بالطبع فريقاً متخصصاً على أعلى مستوى في إدارة وضبط وتأمين هذه الـ data centers. البنك لا يحتاج scalability فعدد عملائه ثابت ومحدود ، ولا يحتاج geo-availability مطلقاً فكل العملاء تقريباً في ذات الدولة ، ولكنه قرر في النهاية السير في هذا الطريق ، ومن ثم دفع أجور باهظة لمهندسين ومصممين متخصصين في السحاب cloud architect ، وأجور فريق متخصص للدعم platform team ، بالطبع غير أجور التدريب وتكاليف استهلاك الخدمة ذاتها.

شركة كبرى مثل Indeed والتي تعتبر محرك البحث الأهم للوظائف والتي تعمل في أكثر من ٦٠ دولة بـ ٢٨ لغة ،  قررت الابتعاد مطلقاً عن السحاب والتركيز على بناء بنيتها التحتية الخاصة حول العالم ، والسبب والدافع الأهم ببساطة هو توفير النفقات.

صديق لي ، لديه موقع إليكتروني كان ينوي استضافته على أحد موفري خدمات السحاب ، طلب مني رأيي في هذا … فقمنا سوياً بالحسابات ووجدنا أن موقعه سيكلفه شهرياً قرابة ١٠٠ يورو عند استضافته على السحاب ، بينما استضافة تقليدية ستكلفه ١٠ يورو في الشهر … بالطبع القرار صار جلياً.

طار الأمان

في حلقة أمازون من برنامج دليل الوطنية Patriot Act لحسن منهاج على نتفلكس Netflex – الحلقة يمكن مشاهدتها هنا على اليوتيوب – بجانب حديثه عن عملاق التسوق أمازون Amazon وممارساته الاحتكارية وظروف العمل السيئة به وتفحله كشركة فوق القانون والدول ، تطرق منهاج أيضاً إلى الخدمات السحابية المقدمة من أمازون Amazon Web Services – AWS.

على عكس فيسبوك وجوجل ، أمازون تراقب المستخدمين من أجل منفعتها الخاصة … عبر تتبع سلوكياتهم وتحليل أنماط استهلاكهم ، يمكن لأمازون عمل استهداف للأفراد واحتكار سلع وأسواق كاملة … أمازون تمتلك أكثر من ٨٠٪ من الحصة السوقية للحوسبة السحابية ، ملايين من المواقع والملفات وقواعد البيانات يتم استضافتها على خوادم أمازون ، كمية مهولة من المعلومات عن الأفراد والشركات تمر عبر شبكات أمازون.

لقد أصبحنا في زمن المعلومات فيه هي السلاح الأقوى ، ومن يمتلك هذه المعرفة يمتلك القوة … ومن السذاجة افتراض أن الشركات الكبرى يحكمها الأخلاق والمباديء ، فهم لن يتوانوا لحظة وبأي وسيلة عن زيادة حصيلتهم ورأس مالهم من المعلومات ، وبمنتهى الفظاظة سيخبرونك أنهم يتجسسون عليك وبراقبونك من أجلك أنت.
لقد أصبحنا قاب قوسين أو أدنى من التنفيذ الإجباري لنظام الخدمات مقابل السمعة والمسمى Social Credit System والمزمع تطبيقه إلزامياً سنة ٢٠٢٠م في الصين ، إذ يتلقى المواطنون خدمات أكثر أو أرخص إن كان لديهم سمعة حسنة بناءاً على نظام إليكتروني لاحتساب النقاط … وطبعاً العكس بالعكس ، فقد يحرم مواطنون من خدمات كاملة أو يحصلون عليها متأخراً أو أغلى ، إن كانت نقاطهم منخفضة … يعكف على بناء هذا النظام مجموعة من أكبر الشركات الرقمية في الصين … والتي تعمل وتطبق هذا في مكان ما ، في السحاب.

قبل أن يطير الدخان

نحن كمبرمجين كثيراً ما نخطيء في تقديراتنا للأمور ، إذ نميل إلى التركيز على تحليلاتنا الفنية المبنية على سنوات طويلة من الخبرة ، ونتجاهل في كثير من الأحيان النظر إلى الصورة العامة ومنها التكاليف والعقبات والعيوب. ربما ذلك راجع إلى ظاهرة أو متلازمة الرؤية النفقية Tunnel Vision التي دائماً ما تصاحب أصحاب الخبرات الفنية الطويلة والذين يتعمقون كثيراً في معرفتهم بمجالهم ، وهذا بالطبع محمود لكنه أيضاً مضر في أوقات كثيرة.

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

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

أول مقال أكتبه منذ سنوات

هذا أول مقال أكتبه منذ فترة طويلة ، وقد ترددت كثيرا في كتابته ولا سيما مع اختياري للغتي الأم ، العربية ، لأكتب بها. كانت دائماً ما تكون كتاباتي باللغة الانجليزية بحكم عملي وتخصصي.

أنا محمد قناوي ، مصري مقيم بهولندا منذ ٢٠١٦ ، أعمل مبرمجاً منذ ٢٠٠٦ ، أحب القراءة والفيديو جيمز ، أب وزوج ، أكثر ما يستهويني للقراءة هي التاريخ ، وعلم النفس.

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

بسم الله نبدأ.