اذهب إلى المحتوى

E.Nourddine

الأعضاء
  • المساهمات

    1458
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    18

أجوبة بواسطة E.Nourddine

  1. DriverMamager وسيلة قديمة بعض الشيء، لذا فاستعمال DataSource في هذه الحالة أفضل للاتصال بقاعدة البيانات من نوع Mysql:

    هذا الجزء خاص بتعريف أداة DataSource:

    Context context = new InitialContext();
    DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDB");

    كما يمكننا تعريفها بهذه الطريقة:

    MysqlDataSource dataSource = new MysqlDataSource();
    dataSource.setUser("scott");
    dataSource.setPassword("tiger");
    dataSource.setServerName("myDBHost.example.org");

    ثم لإنشاء اتصال مع قاعدة البيانات وجلب المعلومات، نكتب:

    Connection conn = dataSource.getConnection();
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS");
    ...
    // هنا يمكننا إظهار المعلومات المستخرجة كيفما أردنا
    rs.close();
    stmt.close();
    conn.close();
    //إغلاق الإتصال مع القاعدةبعد الإنتهاء

    MySQL Java tutorial

     

  2. أحسن طريقة لفعل ذلك هي باستعمال INFORMATION_SCHEMA

    وذلك بتخصيص هذه الدالة واستعمال INFORMATION_SCHEMA.COLUMNS

    لاستخراج معلومات حول الحقول الموجودة بالجدول، وذلك بالشكل التالي:

    SELECT `COLUMN_NAME` 
    FROM `INFORMATION_SCHEMA`.`COLUMNS` 
    WHERE `TABLE_SCHEMA`='yourdatabasename' 
        AND `TABLE_NAME`='yourtablename';

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

    INFORMATION_SCHEMA.COLUMNS

  3. لتستعمل الدالة Not In يجب مقارنة العنصر مع نتيجة Select بها عدة عناصر، لا مع قيمة من جدول بعينه، مما يعني أن جملة الاستعلام خاصتك ستصبح بهذا الشكل :

    SELECT * FROM Table1 WHERE Table1.principal NOT IN (SELECT principal FROM table2)

    وهذا مثال مبسط:

    SELECT *
    FROM suppliers
    WHERE supplier_name NOT IN ( 'IBM', 'Hewlett Packard', 'Microsoft' );

    حيث يراد في هذه الحالة إظهار كل المعلومات في حالة كان supplier_name غير موجود ضمن 'IBM','Hewlett Packard','Microsoft'.

    SQL Server: NOT Condition

  4. في الأساس، هذا هو الكود:

    ALTER TABLE {TABLENAME} 
    ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
    CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
    [WITH VALUES]
    
    

    TABLENAME :  يمثل اسم الجدول.

    COLUMNNAME : اسم الحقل الجديد -الحقل المُضاف-.

    TYPE: نوع الحقل،INT-STRING...

    CONSTRAINT_NAME: وهي الميزة التي تميّز الحقل، هل هو PrimaryKey أو غير ذلك.

    DEFAULT_VALUE: القيمة الافتراضية التي سيحمل الحقل في حالة لم تعطه قيمة.

     وهذه أمثلة:

    الطريقة الأولى:

    ALTER TABLE Employees ADD DateOfHire datetime CONSTRAINT DF_Employees_DateOfHire DEFAULT (GETDATE())

    الطريقة الثانية:

    ALTER TABLE Employees ADD IsTerminated datetime DEFAULT (0)

    SQL SERVER – Add New Column With Default Value

  5. للحصول على نسخة gnome الحالية، يكفي أن تدرِج في الطرفية الأمر :

    $ dpkg -l libgnome2-common

    وبالنسبة لـ gnome-shell ، الأمر :

    $ dpkg -l gnome-shell

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

  6. يلزمك شيء مثل autossh، حيث أنّ وظيفته الأساسية هي إبقاء ssh مفعّلا دائما وإعادة تشغيله إن لزم الأمر ذلك.

    يمكنك تحميله من هذا الرابط.

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

    ولاستخدامه، في الطرفية :

    autossh -M 20000 -f -N your_public_server -R 1234:localhost:22 -C

    autossh – Automatically restart SSH sessions and tunnels

  7. XML:Simple ليست بالمكتبة سهلة الاستعمال، حيث يعاب عليها في كثير من الأمور التقنية، لكن يمكنك استخدامها في نهاية المطاف، الخطأ الذي اقترفته في كودك البرمجي هو استعمالك للجذر queue ، في حين كان الأجدر استعمال الابن user، هكذا:

    my $users = $xml_obj->{'queue'};

    ليصبح الكود كاملا على الشكل التالي:

    #!/usr/bin/env perl
    use strict;
    use warnings;
    
    use XML::Simple;
    use Data::Dumper;
    
    my $xml = "<queue><user>1</user><user>2</user></queue>";
    
    my $xml_obj = XMLin($xml, forcearray => 1);
    
    my $users = $xml_obj->{'user'};
    
    foreach my $v (@$users){
            print $v;
    }

    Parse XML with Perl

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

    bgFZ1.thumb.png.d1c37b6f51afb569437ad2e5

    ستجد أن العناصر ذات النص الطويل، لم تؤثر في تناسق الشكل العام لـ Radio Buttons.

  9. لا أنصح بذلك، إلا في حالة كانت التطبيق تطبيق لعبة أو تطبيق موسيقى بالأساس أو شيء من هذا القبيل.

    إذا كان التطبيق لا يحتاج بالأساس إلى الموسيقى، فلما إزعاج المستعمل به -لأنه لا فائدة ترجى منها-؟

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

    بل ومن المفضّل إبطال الموسيقى مسبقا، وللمستخدم حق الاختيار، حسب رغبته هو.

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

    4KahT.thumb.png.e6a707d98cad226892a7d066

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

  11. إذا ما تفحصت الكود البرمجي لموقعك ستجد سطرين شبيهين بالسطرين التاليين (Ctr+U لرؤية الكود سورس):

    <link rel="alternate" type="application/rss+xml" title="Scoopaper &raquo; Feed" href="http://www.scoopaper.com/feed/" />
    <link rel="alternate" type="application/rss+xml" title="Scoopaper &raquo; Comments Feed" href="http://www.scoopaper.com/comments/feed/" />

    *عنوان الموقع واسمه وحتى الرابط هي معلومات متعلقة بالموقع، أي أنك ستجد معلومات مغايرة.

    بعد الضغط على الرابط سيأخذك المتصفح إلى RSS FEED.

    WordPress Feeds

  12. في  هذه الحالة يتوجب عليك ضبط الإعدادات التي لم تكتمل أثناء التحديث الأول، ثم إعادة التحديث من جديد، وذلك من الطرفية عبر الأوامر التالية :

    sudo apt-get -f install
    sudo apt-get update
    sudo apt-get autoclean
    sudo apt-get upgrade
    sudo apt-get dist-upgrade

    وهذا فيديو توضيحي لعملية التحديث من الإصدار 12.04 نحو 14.04 -Ubuntu-:

  13. كإقتراح مبدأي، لما لا تغير تخصصك نحو البرمجة والروبوتيك؟

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

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

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

    The Mathematics of Robots' Art

  14. من الناحية المهنية والأخلاقية، لا يُنصح بذلك!

    سؤال: هل تفعل الشركات الكبيرة ذلك-بما فيهم المستقلون-؟ نعم.

    لكن يبقى معيار الأمانة هو العامل المهم هنا، فإخبار العميل بالأمر من شأنه أن يلغي المشروع في أسوأ الحالات، لكن يبقى هو التصرف  الصحيح - أقصد في حالة إعطاء المشروع لمستقل آخر-.

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

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

     

  15. المشكل الكبير الذي يعانيه الأغلبية هو في تنظيم الوقت، لذا حاول تنظيم وقتك اليومي مع تخصيص جزء مهم منه للكتابة.

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

    "أحب ما تعمل"، هذه العبارة ستصادفها أثناء البحث عن سبل التميّز في العمل، وكذلك أنصحك، أحب الكتابة واستمتع وأنت تكتب بشكل يشعرك بالارتياح، لأنك إن لم تكن مرتاح ستترك ما تفعل مع أول فرصة لذلك، وقد تخلُق أنت الفرصة للتخلي عن الكتابة.

    اقرأ حول أساليب الكتابة والتدوين، التدقيق اللغوي، النحو والصرف ...

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

    حاول التطوير من قدراتك في الكتابة.

    اجعل لنفسك حافزاً يدفعك للكتابة دونما توقف.

    9 خطوات لكتابة مقالات بشكل أسرع وزيادة أرباحك كمُستقل

     

  16. الحقل غير المفعل لـ checkbox هو بالأساس حقل checkbox لا يحتوي على قيمة، حيث يقبل هذا قيمتين 0 أو 1 أي أنه يتماشى مع المتغيرات من نوع boolean -إذا كنت ملما بالبرمجة-، لكن يلجأ العديد إلى استعمال هذا النوع من الحقول بالطريقة التالية :

    eqLfR.thumb.png.c50d8bf63819e87b02721f9a

    حيث يمكن أن يقبل أكثر من قيمتين، وفي هذه الحلة لا نتحدث عن متغير من نوع boolean وإنما متغير من نوع string يمكّن من تخزين إحدى القيم الأربع.

    Guidelines for check boxes

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

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

    Input types html

  18. في LateX تعتبر الخاصية :

    fontshape

    مسؤولة عن تحديد نمط الخط المستعمل للكتابة، حيث تقبل القيمة "it" كتعبير عن نمط الخط Italic، ويمكن تعيين هذه الخاصية موضعيا "Locally" أو بشكل عام"Globally"، كالتالي:

    • موضعيا "Locally":
    \documentclass{article}
    \usepackage{fancyvrb}
    
    \begin{document}
    
    \begin{Verbatim}[fontshape=it]
    @book{book,
    title = {title},
    author = {author},
    volume = {1},
    year = {2015},
    publisher = {x}
    }
    \end{Verbatim}
    
    \end{document}
    • بشكل عام "Globally":
    \documentclass{article}
    \usepackage{fancyvrb}
    
    \fvset{fontshape=it}
    
    \begin{document}
    
    \begin{Verbatim}
    @book{book,
    title = {title},
    author = {author},
    volume = {1},
    year = {2015},
    publisher = {x}
    }
    \end{Verbatim}
    
    \end{document}

    لتكون النتيجة كالآتي:

    CEG8d.thumb.png.12003cbe73eab284a9b013e7

    LaTeX font commands

    • أعجبني 1
  19. لضبط إعدادات eth0 يدويا على نظام التشغيل Ubuntu، إليك الطريقة:

    من الضروري التوفر على الملف التالي:

    /etc/network/interfaces

    وهذا الأخير تتم قراءته من قِبل Ubuntu boot Script حيث يثم ضبط إعدادات الشبكة إنطلاقا منه، ويختلف محتوى الملف من حاسوب لآخر - من ناحية الإعدادات-، الملف الخاص بي على الشكل :

    auto lo
    iface lo inet loopback
    
    auto eth0مصدر
    iface eth0 inet static
            address 192.168.20.20
            netmask 255.255.255.0
            network 192.168.20.0
            broadcast 192.168.20.255
            gateway 192.168.20.250

    الأسطر الأولى ستكون متشابهة مع الملف لديك (أول اثنين)، أما ما تبقي فهي مخصصة لإعداد eth0 -بدون DHCP-، وهي الإعدادات الثابتة والتي تُفعّل عند كل تشغيل.

    Setting Permanent Static IP in Ubuntu

    مصدر

  20. بالنسبة للإصدار 12C من ORACLE يمكننا تعريف دوال ومتغيرات موضعية 'local'، مما يمكنك من استعمالها بشكل مريح وسلسل، لتصبح جملة الإستعلام الخاصة بك على الشكل التالي:

    with a1 as
    (
     select to_char(date_col, 'ddmmyyyy') as date_str, a.*
     from a_table a
    )
    select date_str, types_col, max(some_value) 
    from a1 
    group date_str, types_col
    order by date_str, types_col;

    لاحظ أن الجزء:

     "to_char(date_col, 'ddmmyyyy'), types_col"

    سيتكرر حسب عدد الحقول الموجودة في الجدول ولن تضطر لإدراجه يدويا.

    ولاحظ أيضا استعمال Alias a1 حيث قمنا بتعريفه في الأول، ثم استخدمناه في المرحلة الثانية .

    مصدر

    ORACLE 12c

  21. CDP أو Cisco Discovry Protocol من تطوير نظام CIsico. حيث يستعمل بشكل أساسي للحصول على عناوين الحواسب المتصلة والمجاورة، بالإضافة إلى كشف ومعرفة المنصة ككل - كمنصة الحواسيب المتصلة فيما بينها-. حيث يمكن معرفة وإظهار معلومات واجهة Router المستعمل.

    CDP هي وسيلة مستقلة عن Protocol، وتعمل مع جميع أجهزة Cisco، بما في ذلك:

    routers,brides,access serves, switches.

    CDP يعمل فقط في طبقة اتصال البيانات 'data link layer' مما يمكّن نظامين من تبادل حميع المعلومات بينها.

    CDP-2 هي النسخة الثانية من CDP، وهي النسخة الأكثر استخداما، حيث تتوفر على وظائف أكثر ذكاءً من سابقتها.

     في هذا الفيديو شرح لبرتوكول CDP عن طريق برنامج Packet Tracer:

     

  22. تحتاج في بادئ الأمر إلى جعل حاسوبك يحصل علىIP ثابت من هنا.

    يمكنك معرفة IP حاسوبك الحالي من خلال هذا الرابط.

    ثم بعد ذلك يتوجّب عليك فتح Port مخصص للاتصال من خارج الحاسوب، وذلك حتي يتمكن المتصلون عبر الإنترنت من الولوج إلى Xampp عبر هذا الـ Port، استعن بهذا الرابط لذلك.

    كما يمكنك مشاهدة هذا المقطع :

    عند الانتهاء من ضبط جميع الإعدادات، سيتمكّن المستخدمون من ولوج صفحة Xampp من خلال عنوان IP.

    الأمر في غاية الأهمية، وليتوفر حاسوبك على بيئة آمنة، فالأمر ليس بالهين.

     في الأخير يمكنك مشاهدة العملية كاملة على هذا الشريط:

  23. لتثبيت OpenVpn على Ubuntu:

    • نقوم بتحديث Ubuntu عن طريق كتابة الامر التالي في الطرفية :
    apt-get update
    
    • بعد ذلك نثبت OpenVPN عن طريق الأمر :
    apt-get install openvpn easy-rsa
    

    يجب نقل ملف إعدادات VPN Server  إلى المسار etc/openvpn/ ، يمكن فعل ذلك بالأمر التالي:

    gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
    

    نقوم بفتح ملف server.conf :

    vim /etc/openvpn/server.conf
    

    ابحث عن هذه الجزئية في الملف:

    # Diffie hellman parameters.
    # Generate your own with:
    #   openssl dhparam -out dh1024.pem 1024
    # Substitute 2048 for 1024 if you are using
    # 2048 bit keys.
    dh dh1024.pem

    غير:

    dh1024.pem

    إلى:

    dh2048.pem
    

     يمكنك تتمة الطريقة عبر الرابط :

    How To Set Up an OpenVPN Server on Ubuntu 14.04

    أو باتباعك للخطوات المدرجة في هذا الفيديو:

  24. الحل هو باستعمال DNSCrypt، فهو برنامج حر مفتوح المصدر من طرف OpenDNS وظيفته هي تشفير جميع اتصالات DNS عبر SSL. لتثبيت DNSCrypt على Ubuntu نفتح الطرفية ونشغّل الأوامر التالية اتباعاً:

    sudo add-apt-repository ppa:shnatsel/dnscrypt
    sudo apt-get update
    sudo apt-get install dnscrypt-proxy

    من خلال قائمة الشبكة اختر Edit Connections كما هو موضح في الصورة:

    install-dnscrypt-in-ubuntu-edit-connecti

    ستظهر نافذة أخرى، عيّن شبكتك الحالية ثم اضعط Edit:

    install-dnscrypt-in-ubuntu-click-edit.th

    ثم أدخل المعطيات كما في الصورة:

    install-dnscrypt-in-ubuntu-enter-dns-add

    وفي الأخير احفظ التعديلات بالضغط على الزر save.

    https://www.maketecheasier.com/encrypt-dns-traffic-ubuntu/

×
×
  • أضف...