d خليل سليم – الصفحة 24 – مدونة الفريق

الكاتب: خليل سليم

  • المبرمج والعمل بالسخرة للمعارف

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

    هنالك نوعين من الأعمال في العالم، نوع يقدم سلع Products  ونوع يقدم خدمات Services

    النوع الأول ( السلع ) تقوم بدفع مبلغ مالي فتحصل في المقابل على شيء ملموس، مثلا قميص، جوال، سنادويتش، هذا النوع من الأعمال لا يواجه الناس أي مشكلة في تقبل عملية الدفع، لأنهم ببساطة يحصلون على شيء ملموس في المقابل، ولن أطيل في الحديث عنه.

    المشكلة في تقبل الناس للنوع الثاني الذي يقدم الخدمات.

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

    مثال آخر حينما تذهب لتحلق عن الحلاق، فإنه يقدم لك خدمة، ولا يعطيك سلعة.

    كذلك المبرمج والمصمم وأغلب فنيي الحاسوب، يقدمون خدمات.

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

    أصدقائي وأحبائي، الكثير منهم لا يستوعب هذا الأمر، وهو أمر أعاني منه بشكل شبه يومي.

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

    صديق آخر طلب مني أن أخدمه في مشروع تخرج صغير ( عبارة عن جدولين ) فقلت له وقتي ضيق، فقال سأدفع، قلت له ساعتبرها هدية وستكون مبلغ 100 دولار، فقال لي لا مشكلة.

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

    بعد نهاية المشروع حسبت وإذا بي قد عملت على مشروعه ما يزيد عن 140 ساعة ( وقد اضطررت لأطلب من صديق مساعدة لكي ننهي المشروع).

    انتهى المشروع وحصل صديقي على ما لم يحصل عليه أحد جراء المشروع، لم أتلقى الشكر اللازم، وقلت لصديقي سأحسب أنني عملت بدلا من 140 ساعة فقط 100 ساعة، والساعة نجعلها 3 دولار ( مع ان ساعتي من 17 – 30 دولار وتصل في أحيان الى 60 دولار ).

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

    بعد عناد منه طويل( خلاص المشروع انتهى، وإما أقبل أو لا ) وافقت على مبلغ 147 دولار ، ذهب منهم 47 دولار لصديقي الذي عمل 40 ساعة معي، وأنا أخذت 100 دولار، وهي بالمناسبة لا تساوي ثمن الحذاء الذي يلبسه ليتباهى به أمام الناس، أي أني لا أساوي…

    لو أن هذه الساعات قضيتها مع عائلتي، أو أدرس كتاب، أو أحسن مواقعي، أو أكتب مقالات، أو أتم عمل لعميل، لكانت استفدت أضعاف الأضعاف،

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

    ما الهدف من المقال هذا:

    • الهدف إذا كنت مبرمج محترف،

    •  ألا تعمل مجانا لأحد مهما كان، فالعمل عمل، ولا داعي للعواطف إلا لأمك أو أبيك أو إخوتك،

    •  إذا عملت لشخص وخصوصا إذا كان قريب، إبدأ بتسجيل شاشتك لكي تخبره أنك عملت عدد ساعات كذا لتحاسبه بدون زعل.

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

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

    • إذا المرء لا يرعاك إلا تكلفا … فدعه ولا تكثر عليه التؤسفا

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

  • حل أغلب مشاكل الويندوز فون وخصوصا مشاكل الإنترنت

    يواجه الكثير من مستخدمي للويندوز فون مشاكل عديدة في
    • الدخول الي المتجر.
    • تصفح المواقع عبر الإنترنت اكسبلورر.
    • وضع الايميل وضبط الحساب الرئيسي للنظام.
    • التقويم والاعدادات وغيرها من الخيارات.

    الحل ان شاء الله بسيط وهو عبر خطوتين سهلتين   


    الأول
    ضبط تاريخ ووقت الهاتف


    والثاني
    تعديل الدولة : فاغلب الدول العربية والعالمية غير مدعومة لذلك يجب وضع دولة مدعومة وانا انصح باختيار الولايات المتحدة

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

  • حل خطأ ‘MsAjaxBundle’ is not a valid script name

    عندما تقوم بإنشاء موقع ب ASP.NET 4.5 ، وتقوم بتحديث المكتبات ، يظهر لك هذا الخطأ
    ‘MsAjaxBundle’ is not a valid script name.  The name must end in ‘.js’ ، الخطأ غريب والبحث لا يفيد بالكثير ، ولكن إليكم الحل.

    سبب المشكلة هو تحديث ajaxToolkit إلى الإصدار الجديد بحيث تدعم المنصة 4.5 ، ولحل هذه المشكلة عليك فتح صفحة Site.Master  والذهاب إلى الجمل التالية :

     <asp:ScriptManager runat="server">
    <Scripts>
    <%--Framework scripts--%>
    <asp:ScriptReference Name="MsAjaxBundle" />
    <asp:ScriptReference Name="jquery" />
    <asp:ScriptReference Name="jquery.ui.combined" />
    <asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
    <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
    <asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
    <asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
    <asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
    <asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
    <asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
    <asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />

    <asp:ScriptReference Name="WebFormsBundle" />
    <%--Site scripts--%>

    </Scripts>
    </asp:ScriptManager>

    يجب علينا تحديث ال ScriptManager ، وتحتاج إلى القيام ب 3 خطوات
    1- استبدل asp:ScriptManager ب ajaxToolkit:ToolkitScriptManager
    2- امسح السطر المحترم الذي به MsAjaxBundle  ، لانها لا تلزم كليا
    3- قم بحذف المواصفة System.Web من كل الأسطر

    أي أن الخلاصة ستكون كالتالي

     <ajaxToolkit:ToolkitScriptManager  runat="server">
    <Scripts>
    <%--Framework scripts--%>
    <asp:ScriptReference Name="jquery" />
    <asp:ScriptReference Name="jquery.ui.combined" />
    <asp:ScriptReference Name="WebForms.js" Path="~/Scripts/WebForms/WebForms.js" />
    <asp:ScriptReference Name="WebUIValidation.js" Path="~/Scripts/WebForms/WebUIValidation.js" />
    <asp:ScriptReference Name="MenuStandards.js" Path="~/Scripts/WebForms/MenuStandards.js" />
    <asp:ScriptReference Name="GridView.js" Path="~/Scripts/WebForms/GridView.js" />
    <asp:ScriptReference Name="DetailsView.js" Path="~/Scripts/WebForms/DetailsView.js" />
    <asp:ScriptReference Name="TreeView.js" Path="~/Scripts/WebForms/TreeView.js" />
    <asp:ScriptReference Name="WebParts.js" Path="~/Scripts/WebForms/WebParts.js" />
    <asp:ScriptReference Name="Focus.js" Path="~/Scripts/WebForms/Focus.js" />

    <asp:ScriptReference Name="WebFormsBundle" />
    <%--Site scripts<asp:ScriptReference Name="khjs.js" Assembly="System.Web" Path="~/Scripts/khjs.js" />--%>

    </Scripts>
    </ajaxToolkit:ToolkitScriptManager>

    يا راجل كان من الأول حطيت النص النهائي بدال ما تتتتتتتتتتعبت عينينا واحنا بنقرأ بالخطوات ، شو أعمل أنا ! هيك المخرج بده.

    بالتوفيق

  • حل خطأ Unable to get property ‘UI’ of undefined or null reference

    عند استخدامك لأداة ScriptManager  في ASP.NET الإصدار الأخير ، تجد أن هذا الخطأ يظهر
    Unable to get property ‘UI’ of undefined or null reference
    ويعكر صفوك مع الصفحة. الحل بسيط وهو كذلك

    عليك باستبدال أداة ScriptManager  بأداة ajaxToolkit:ToolkitScriptManager
    وستكون بالشكل التالي
    <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"/>

    تمام تم حل المشكلة بنجاح
    بالتوفيق

  • الفلاش cu3er لا يعمل على الفايرفوكس

    واجهتني مشكلة أن الفلاش cu3er لا يعمل على الفايرفوكس الإصدار 3.6.9 وهو آخر إصدار، وبعد البحث مطولا كان عشرات إن لم يكن مئات المبرمجين لديهم نفس المشكلة
    والحمد لله بعد ضياع يوم برمجي كامل في البحث عن حلول ( لأني لست خبير فلاش ) وجدت الحل بتوفيق من الله، عبر سطر من كلمات لا تلقي لها بالا بعد قراءة مئات السطور من الشركة ومن مشغل الفلاش swfobject.js

    الشركة تقول بأن الملف الفلاشي يعمل على الإصدار 9 من الفلاش وما بعد ، واتضح أنه يعمل على المشغل الإصدار 10 وما بعد
    وبعد التحديث عمل لدي بفضل الله بدون أي مشاكل وهذه صورة

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

  • كيفية التعامل مع أداة Fileupload بداخل أداة Gridview   

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

    سنستخدم أداة جريدفيو ، مع أداة SqlDataSource  وسيكون هنالك عمود على هيئة قالب TemplateField ، وبديهي جدا أن نضع أداتنا ( أداة الرفع ) في بند التعديل بداخل القالب كالمثال

    الآن قمنا بضبط عرض الصورة في الجريدفيو وقمنا بضبط عرض الصورة وأداة الرفع في حالة ضغط المستخدم على زر تعديل الجريد فيو.

    الآن علينا كتابة كود التعديل ، وهذا يتم في حدث RowUpdating
     وسيكون كالتالي

    الكود تقليدي ، قمنا بجلب أداة الرفع من السطر المختار
    ثم استعديت دالة برمجتها سابقا تقوم برفع الملف وإرجاع اسمه لأستخدمه لاحقا
    ثم حذفت الصورة القديمة لأني رفعت صورة بدلا منها.
    الخيار لك في طريقة كتابة الكود ولكن ما يهم في السطر الأخير ، حيث يهمك أن ترسل اسم الملف الجديدة كوسيطة إلى العمود الذي تريد التعديل إليه ، مثلا سأعدل على عمود اسمه Picture ، فسيكون السطر كالتالي
    e.NewValues("Picture") = imgname

    الآن كل شيء تمام ، ولكن يبقى أمر أخير ، وهو ماذا لو قام بالتعديل على الصف في الجريد فيو ولكن لم يرغب بأن يرفق ملف جديد ( وفي حالتي صورة جديدة ) !
    عندها سيتم استبدال اسم الملف في القاعدة بقيمة فارغة NULL  ، وهنا يجب إجراء تعديل على جملة التعديل في SqlDataSource ، ويجب توقع القيمة الفارغة فبدلا من أن تكون الجملة مشابهة ل
    UPDATE [Departments] SET [Name] = @Name, Picture=@Picture  where id=@id
    ستصبح مشابهة ل
    UPDATE [Departments] SET [Name] = @Name, Picture=isnull(@Picture,Picture) where id=@id

    بالتوفيق للجميع

    <

  • الوصول إلى وسم معين في صفحة

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

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

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

    
    Dim WClient As New WebClient()
    Dim Content As String = WClient.DownloadString("http//deveworld.com")
     

    الآن لدينا محتوى الموقع في متغير نصي ، يتوجب الآن  البحث عن الوسم بذكاء ،أو
    البحث عن الكلمة التي يأتي بعدها النص مثلا:

    
    Dim catego As String = Content.Remove(0, Content.IndexOf("<strong >التصنيف"))
    catego = catego.Remove(catego.IndexOf("</b></strong>"))
    catego = catego.Replace("<strong >التصنيف", "")
     

    هنا مثلا بحذف الوسوم والنصوص من بداية الصفحة المستخرجة ، إلى عند وسم الخط العريض
    الذي يحتوي على كلمة تصنيف، وأيضا قمت بحذف ما بعد هذا الوسم ، وبذلك أكون استخرجت
    بداية الوسم مع الوسم ، وإلى نهاية الوسم ، بدون إغلاقه ، طبعا تستطيع أن تعد عدد
    أحرف الوسم وتقوم بطرحها أو بإضافتها حسب ما تريد مثال:
    
    Dim write As String = str.Remove(0, str.IndexOf("size=""3"">") + 9)
     

    بالتوفيق للجميع

  • الطرق الموسعة Extension Methods

    الـ Extension Methods للمبرمج بإضافة Method جديدة إلى أي Type موجود مسبقا ,دون الحاجة لحصولك على الـ Source Code و لا تحتاج إلى إعادة عمل Compiling للـ Library التي تحوي ذاك الـ Type