guide

  • Facebook Graph API: Swift 3 Guide

    المشكلة التي تواجهها تبدو واضحة، وهي أنّ الهيكل ViewController.UserProfileRequest.Response لا يتوافق مع بروتوكول GraphRequestProtocol. لحل هذه المشكلة، يتطلب الأمر تعديل الهيكل UserProfileRequest.Response ليتوافق مع متطلبات البروتوكول.

    بموجب البروتوكول GraphRequestProtocol، يجب أن يتضمن الهيكل الداخلي لـ Response خاصية rawResponse من النوع Any?، وبالتالي، يجب تحديد مُعمَّم البداية (initializer) لتحويل الاستجابة الخام من نوع Any? إلى الخصائص الأخرى المرغوبة.

    لذا، يُمكن تعديل الهيكل UserProfileRequest.Response كما يلي:

    swift
    struct UserProfileRequest { struct Response: GraphResponseProtocol { let email: String? init(rawResponse: Any?) { if let json = rawResponse as? [String: Any], let email = json["email"] as? String { self.email = email } else { self.email = nil } } } }

    في هذا التعديل، تمت إضافة خاصية email التي تمثل البريد الإلكتروني المسترجع من الاستجابة. وفي المُعمَّم البداية init، يتم فك ترميز الـ JSON لاستخراج البريد الإلكتروني من الاستجابة الخام، وتخزينه في الخاصية المحددة.

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

    المزيد من المعلومات

    بعد تعديل هيكل الاستجابة، يمكن الآن استخدامه بشكل صحيح في الاتصال مع الطلب الرسمي. تتضمن الخطوات التالية الطريقة المناسبة لتكملة الكود:

    swift
    fileprivate struct UserProfileRequest: GraphRequestProtocol { struct Response: GraphResponseProtocol { let email: String? init(rawResponse: Any?) { if let json = rawResponse as? [String: Any], let email = json["email"] as? String { self.email = email } else { self.email = nil } } } let graphPath: String = "me" let parameters: [String: Any]? = ["fields": "email"] let accessToken: AccessToken? = AccessToken.current let httpMethod: GraphRequestHTTPMethod = .GET let apiVersion: GraphAPIVersion = .defaultVersion } fileprivate func returnUserData() { let connection = GraphRequestConnection() connection.add(UserProfileRequest()) { (response: HTTPURLResponse?, result: GraphRequestResult<UserProfileRequest.Response>) in switch result { case .success(let response): if let email = response.email { print("User's email is: \(email)") } else { print("Email not found in response.") } case .failed(let error): print("Graph request failed with error: \(error)") } } connection.start() }

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

    من خلال هذه الخطوات، يجب أن يكون بإمكانك الآن استرجاع بيانات المستخدم بنجاح من Facebook Graph API باستخدام Swift 3 دون أي مشاكل.

  • Python Email Attachment Guide

    بدون معرفة مسبقة كبيرة بـ MIME، حاولت تعلم كيفية كتابة سكريبت Python لإرسال بريد إلكتروني مع مرفق ملف. بعد التحقق المتقاطع من وثائق Python، وأسئلة Stack Overflow، والبحث العام على الويب، اخترت الكود التالي[1] واختبرته للتأكد من أنه يعمل.

    python
    import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders fromaddr = "YOUR EMAIL" toaddr = "EMAIL ADDRESS YOU SEND TO" msg = MIMEMultipart() msg['From'] = fromaddr msg['To'] = toaddr msg['Subject'] = "SUBJECT OF THE EMAIL" body = "TEXT YOU WANT TO SEND" msg.attach(MIMEText(body, 'plain')) filename = "NAME OF THE FILE WITH ITS EXTENSION" attachment = open("PATH OF THE FILE", "rb") part = MIMEBase('application', 'octet-stream') part.set_payload((attachment).read()) encoders.encode_base64(part) part.add_header('Content-Disposition', "attachment; filename= %s" % filename) msg.attach(part) server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(fromaddr, "YOUR PASSWORD") text = msg.as_string() server.sendmail(fromaddr, toaddr, text) server.quit()
    1. لدي فكرة تقريبية عن كيفية عمل هذا السكريبت الآن، ووضعت الخطوات التالية. يرجى إعلامي عما إذا كانت خطواتي دقيقة أم لا.
    scss
    msg.as_string() | +------------MIMEMultipart | |---content-type | +---header---+---content disposition +----.attach()-----+----MIMEBase----| | +---payload (to be encoded in Base64) +----MIMEText
    1. كيف يمكنني معرفة متى يتعين استخدام MIMEMultipart و MIMEText و MIMEBase؟ يبدو أن هذا سؤال معقد، لذلك ربما يمكنكم تقديم بعض القواعد العامة لي؟

    2. لقد قرأت أن MIME لديها هيكل شبيه بالشجرة[2]، هل هذا يعني أن MIMEMultipart دائمًا في القمة؟

    3. في الكود البرمجي الأول، قام MIMEMultipart بترميز [‘From’] و [‘To’] و [‘Subject’]، لكن في وثائق Python، يمكن أيضًا استخدام MIMEText لترميز [‘From’] و [‘To’] و [‘Subject’]. كيف أقرر أيهما يجب استخدامه؟

    4. ما هو بالضبط “payload”؟ هل هو محتوى ما يجب نقله؟ إذا كان الأمر كذلك، فما هو نوع المحتوى الذي يتضمنه هذا (لاحظت أن النص الرئيسي والمرفق يتم التعامل معهما على أنها payloads)? اعتقدت أن هذا سؤال سهل ولكني فقط لم أتمكن من العثور على إجابة مرضية وموثوقة وبسيطة.

    5. هل من الصحيح أنه على الرغم من أن MIME يمكنه إرفاق تنسيقات ملف أسهل بكثير من مجرد بعض النصوص، في النهاية تُحوَّل جميع عمليات الترميز ومعلومات الرأس والأحمال إلى سلاسل نصية حتى يمكن تمريرها إلى .sendmail()؟

    [1] http://naelshiab.com/tutorial-send-email-python/
    [2] http://blog.magiksys.net/generate-and-send-mail-with-python-tutorial

    المزيد من المعلومات

    بالطبع، إليك المزيد من المعلومات:

    1. كيفية استخدام MIMEMultipart و MIMEText و MIMEBase:

      • MIMEMultipart: تُستخدم لإنشاء جسم رسالة متعددة الأجزاء، حيث يمكن إرفاق العديد من الأجزاء مثل النصوص والملفات.
      • MIMEText: تُستخدم لإنشاء جسم رسالة نصية بسيطة، مثل جسم البريد الإلكتروني الذي يحتوي على نص.
      • MIMEBase: تُستخدم لإنشاء جسم رسالة قاعدة MIME عامة، والتي يمكن استخدامها لإرفاق ملفات أو بيانات غير نصية.
    2. بالنسبة للهيكل الشبيه بالشجرة لـ MIME، فعادةً يتم وضع MIMEMultipart في القمة لأنه يمكن أن يحتوي على أجزاء متعددة، بما في ذلك نصوص MIME وملفات MIME.

    3. في الكود المعروض، يتم استخدام MIMEMultipart لتشكيل الرسالة الأساسية وإضافة التوجيهات والموضوع. يمكن استخدام MIMEText بدلاً من MIMEMultipart إذا كنت ترغب فقط في إرسال نص بسيط دون مرفقات. عمومًا، يُفضل استخدام MIMEMultipart إذا كنت تخطط لإرفاق مرفقات.

    4. “Payload” هو المحتوى الفعلي للرسالة، بما في ذلك النصوص والملفات. يمكن أن تكون هذه البيانات مشفرة أو غير مشفرة وتكون جزءًا من جسم الرسالة.

    5. بالنعمة، في نهاية المطاف، يتم تحويل جميع الأجزاء من جسم الرسالة إلى سلسلة نصية واحدة باستخدام الوظيفة as_string()، التي تمكنك من تمرير الرسالة إلى وظيفة .sendmail() لإرسالها عبر البروتوكول SMTP.

    هذه المعلومات يمكن أن تساعدك في فهم كيفية استخدام MIMEMultipart و MIMEText و MIMEBase بشكل أفضل عند إنشاء سكريبتات Python لإرسال البريد الإلكتروني مع مرفقات.

  • Rx.NET for .NET Core: Installation Guide

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

    على الرغم من ذلك، يُعتقد أن Rx.NET يمكن استخدامها مع .NET Core من خلال تثبيت مكونات Rx.NET اللازمة من NuGet. يمكنك البحث في مكتبة NuGet عن مكتبة Rx.NET وتثبيتها في مشروعك الخاص بـ .NET Core.

    إليك الخطوات التفصيلية لتثبيت Rx.NET لـ .NET Core:

    1. افتح Visual Studio 2015 وقم بفتح مشروعك الخاص بـ .NET Core.
    2. انتقل إلى “Tools” -> “NuGet Package Manager” -> “Manage NuGet Packages for Solution”.
    3. ابحث عن “System.Reactive” في مكتبة NuGet.
    4. حدد الإصدار الذي ترغب في تثبيته وانقر فوق “Install” لتثبيت المكونات اللازمة.
    5. بعد التثبيت، قم بإضافة استيراد لمكتبة Rx.NET في ملفات الكود الخاصة بك، على سبيل المثال:
      csharp
      using System.Reactive.Linq;

    بهذه الطريقة، يجب أن تكون قادرًا على استخدام Rx.NET في مشروعك الخاص بـ .NET Core. إذا كانت هناك أي مشاكل أو استفسارات أخرى، فلا تتردد في طرحها.

    المزيد من المعلومات

    Rx.NET هي إصدار من Reactive Extensions (Rx) لـ .NET Framework، وهي مكتبة تساعد في برمجة التطبيقات المتفاعلة والمبنية على التدفقات (Reactive Programming). تساعد Rx.NET في التعامل مع التغيرات الزمنية في البيانات والأحداث بشكل سهل وبديهي.

    تم تطوير Rx.NET لأول مرة لدعم .NET Framework الكلاسيكي، ولكن مع تقدم .NET Core ومكتباته، أصبح من الممكن استخدام Rx.NET مع .NET Core أيضًا. يوفر Rx.NET العديد من الفئات والأساليب لإنشاء وتحويل وتصفية التدفقات (streams) من البيانات، مما يسهل على المطورين برمجة تطبيقات فعالة ومستجيبة.

    إذا كنت ترغب في مزيد من المعلومات حول كيفية استخدام Rx.NET في مشاريع .NET Core الخاصة بك، يمكنك البحث عن موارد تعليمية عبر الإنترنت أو الرجوع إلى الوثائق الرسمية لـ Rx.NET على GitHub للحصول على معلومات مفصلة ومحدثة.

  • حل مشكلة ERR_TOO_MANY_REDIRECTS في WordPress: دليل الإصلاح

    عند مواجهتك لمشكلة ERR_TOO_MANY_REDIRECTS في موقع ووردبريس الخاص بك، يبدو أن هناك حلقة توجيه تحدث على صفحة البداية خاصتك عند استخدام متصفح Google Chrome. الأمر يتسبب في تكرار التوجيه (redirection loop)، ولكن يبدو أن هذا السلوك يختفي عند الوصول إلى لوحة التحكم الإدارية أولاً ومن ثم العودة إلى الصفحة الرئيسية.

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

    علاوة على ذلك، يمكن أن يكون هناك تكوين خاص بمتصفح Google Chrome يؤدي إلى هذا السلوك. يمكنك محاولة حذف ذاكرة التخزين المؤقتة للمتصفح أو استخدام نافذة متصفح خاصة (incognito) لتجاوز أي تأثيرات متصفح مخصصة.

    تأكد من أن عنوان موقعك الإلكتروني معتمد على البروتوكول الصحيح (http أو https) وتأكد من أن توجيهات النطاقات مُكوَّنة بشكل صحيح في لوحة التحكم الخاصة بمقدم الاستضافة.

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

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

    المزيد من المعلومات

    تحتوي مشكلة ERR_TOO_MANY_REDIRECTS التي تواجهك في صفحة البداية لموقع WordPress الخاص بك على تحديات فنية معقدة يجب التعامل معها بحذر. يبدو أن هذه المشكلة تظهر فقط عند استخدام متصفح Google Chrome وتختفي عند الوصول إلى لوحة التحكم الإدارية أولاً، مما يشير إلى أن هناك عاملًا خاصًا يتفاعل مع هذا المتصفح بشكل خاص.

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

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

    تجربة تحديث بيانات النطاق والتأكد من تكوين النطاق الصحيح في لوحة التحكم لديك أيضًا قد تكون مفيدة. قم بالتحقق من إعدادات البروتوكول (http أو https) للتأكد من التوجيه الصحيح.

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

  • An IPv6 Deployment Guide

    An IPv6 Deployment Guide

    [image_with_animation image_url=”649″ alignment=”center” animation=”Fade In” img_link_target=”_blank” border_radius=”none” box_shadow=”none” max_width=”100%” img_link=”http://agileurbia.com/2lCI”]

    The History of IPv6

    The IPv6 story began in the early nineties when it was discovered that the address space available in IPv4 was vanishing quite rapidly. Contemporary studies indicated that it may be depleted within the next ten years – around 2005! These findings challenged the Internet community to start looking for a solution. Two possible approaches were at hand: 1. Minimal: Keep the protocol intact, just increase the address length. This was the easier way promising less pain in the deployment phase. 2. Maximal: Develop an entirely new version of the protocol. Taking this approach would enable incorporating new features and enhancements in IP. Because there was no urgent need for a quick solution, the development of a new protocol was chosen. Its original name IP Next Generation (IPng) was soon replaced by IP version 6 which is now the definitive name. The main architects of this new protocol were Steven Deering and Robert Hinden. The first set of RFCs specifying the IPv6 were released at the end of 1995, namely, RFC 1883: Internet Protocol, Version 6 (IPv6) Specification [RFC1883] and its relatives. Once the definition was available, implementations were eagerly awaited. But they did not come. The second half of the nineties was a period of significant Internet boom. Companies on the market had to solve a tricky business problem: while an investment in IPv6 can bring some benefits in the future, an investment in the blossoming IPv4 Internet earns money now. For a vast majority of them it was essentially a no-brainer: they decided to prefer the rapid and easy return of investments and developed IPv4-based products. Another factor complicating IPv6 deployment was the change of rules in the IPv4 domain. Methods to conserve the address space were developed and put into operation. The most important of these was Classless Inter-Domain Routing (CIDR). The old address classes were removed and address assignment rules hardened. As a consequence, newly connected sites obtained significantly less addresses than in previous years. The use of CIDR may well have delayed the need for IPv6 in the eyes of many people, but not in all. Somewhat perversely, the use of CIDR accelerated the perception of a lack of address space in the

    CLICK ON DOWNLOAD ICON TO DOWNLOAD FULL PDF

    [image_with_animation image_url=”1617″ alignment=”center” animation=”Fade In” border_radius=”none” box_shadow=”none” max_width=”100%”]
    [nectar_icon icon_family=”iconsmind” icon_style=”default” icon_color=”Extra-Color-2″ icon_padding=”0px” icon_iconsmind=”iconsmind-Folder-Remove” margin_left=”20″][recent_posts style=”title_only” category=”network” columns=”2″ order=”DESC” orderby=”date” posts_per_page=”12″]

    [recent_posts style=”title_only” category=”line” columns=”4″ order=”DESC” orderby=”date” posts_per_page=”4″]
زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر