مارس 31، 2009

PyQt4: كيف يمكن نسخ العناصر المحددة من قائمة إلى أخرى


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

فكانت النتيجة على شكل البرنامج التالي :


يمكن تحميل الشفرة المصدرية من هنا.




#!/usr/bin/env python

# -*- coding: utf-8 -*-





## جزء خاص بتحديد الرخصة و حق الملكية

## Copyright (c) 2009 Mohammed Berdai stuntgp2000@gmail.com

## This program is free software; you can redistribute it and/or modify

## it under the terms of the GNU General Public License as published by

## the Free Software Foundation; either version 2 of the License, or

## (at your option) any later version.





## إيستدعاء للوحدات التي نحتاجها

import sys

from PyQt4 import QtGui, QtCore, uic





## إنشاء البرنامج على شكل قسم يشتق من الكائن (كيو ويدجت)ـ

class pylist(QtGui.QWidget):



    ## دالة بدء التشغيل

    def __init__(self, parent=None):

        ## تهيئة الكائن الأساسي و الواجهة الرسومية

        QtGui.QWidget.__init__(self, parent)

        uic.loadUi("main.ui", self)



        ## نداء على الدالة لتقوم بملء القائمة الأولى

        self.FillList()



        ## ربط حدث الضغط على كل زر بالدالة التي ستثمثل وظيفته

        self.connect(self.pbAdd, QtCore.SIGNAL("clicked()"), self.AddItem)

        self.connect(self.pbCount, QtCore.SIGNAL("clicked()"), self.Counter)

        self.connect(self.pbFill, QtCore.SIGNAL("clicked()"), self.FillList)

        self.connect(self.pbRemove, QtCore.SIGNAL("clicked()"), self.RemoveItem)

        self.connect(self.pbMove, QtCore.SIGNAL("clicked()"), self.MoveItem)

        self.connect(self.pbMoveSel, QtCore.SIGNAL("clicked()"), self.MoveSelItems)





    ## تقوم بنقل المحتوى النصي من إطار الكتابة إلى القائمة

    def AddItem(self):

        if self.lnEntry.text() <> "":

            s = self.lnEntry.text()

            self.List1.addItem(s)

            self.lnEntry.setText("")





    ## إظهار رسالة بعدد العناصر في كل قائمة

    def Counter(self):

        msg1 = "List one contains " + str(self.List1.count()) + " item(s)" + "\n"

        msg2 = "List Two contains " + str(self.List2.count()) + " item(s)"

        QtGui.QMessageBox.information(self, 'List Count', msg1 + msg2 , QtGui.QMessageBox.Ok)





    ## ملء القائمة ب10 عناصر عددية لتسهيل إختبار البرنامج

    def FillList(self):

        for x in range(10):

            self.List1.addItem(str(x))





    ## حدف العنصر الذي تم إختياره

    def RemoveItem(self):

        self.List1.takeItem(self.List1.currentRow())





    ## نسخ العنصر من القائمة الأولى إلى الثانية ثم حدفه من القائمة الأولى

    def MoveItem(self):

        self.List2.addItem(self.List1.currentItem().text())

        self.List1.takeItem(self.List1.currentRow())





    ## نسخ كل العناصر المحددة من القائمة الأولى إلى الثانية

    def MoveSelItems(self):

        ## بإستخدامة الائحة المعبرة عن ترتيب كل عنصر محدد في القائمة الأولى يمكن إستخدام الحلقة لنسخ العناصر

        while self.List1.selectedIndexes() <> []:

            x = self.List1.selectedIndexes()[0].row()

            self.List2.addItem(self.List1.item(x).text())

            self.List1.takeItem(x)







## هنا مذخل بداية البرنامج حيث يتم توظيف القسم و عرض الواجهة الرسومية

if __name__ == "__main__":

    app = QtGui.QApplication(sys.argv)

    mw = pylist()

    mw.show()

    sys.exit(app.exec_())


مارس 02، 2009

الحرب الباردة في عالم تقنية المعلوميات

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

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

فهل يمكن أن تعتبر أن Emoticons أو الأيقونات التي تعبر عن الرموز مثل :) أو :D أو :< إختراعا !؟ و فعلا حصلت مايكرسوفت على هذه البراءة. أو أن زر إضافي إلى الفأرة أو تحريكها بطرقة معينة (Mouse Gestures) يعتبر إبتكارا ؟

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

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

أما بالنسبة لنظام لينوكس (و البرمجيات الحرة و المفتوحة المصدر) فهنالك حلف (Linux Patent Alliance) كونته شركات مثل صان Sun، ريدهات Redhat، أي بي إم IBM، صوني Sony, نِك Nec و نوكيا Nokia يصهر على ضمان الحماية للمطورين و المبرمجين في حالة حدوث هجوم من معتدي. و حاليا هذا الحلف هو على شكل شركة إسمها Open Invention Network

الآن سأتحدث عن الجزء الذي يعجبني و هو إستخدام نفس المصطلحات الحربية التي يستعملونها :)
صخرت الشركات المذكورة أعلاه أعداد ضخمة من براءات الإختراع المهمة لتكوين ترسانة حربية يتم إستخدامها في حالة تطاول أحد ما على هذه الشركات أو مؤسسات التي تصهر على إستمرار البرمجيات الحرة و المفتوحة المصدر. الهدف هو تحقيق الدمار الشامل للطرفيين في حالة وقوع حرب حقيقية (MAD أو Mutual assured destruction)

و مؤخرا قامت مايكروسوفت برفع دعوة قضائية متهمة شركة TomTom التي تصنع و تطور أجهزة نظام التموضع العالمي (GPS) بأنها إنتهكت مجموعة من براءات الإختراع. و المثير في الأمر أن أجهزة TomTom تعتمد على لينوكس :)

و رغم تأكيد شركة مايكرسوفت أن هذا ليس بهجوم على لينوكس، فقد أعلنت مؤسسة لينوكس عن موقفها و هو كالتالي:

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

تحديث 1 (20/03/2009): يبدوا أن شركة TomTom قابلت إدعاء Micorosft بإدعاء مماثل للإنتهاك براءات إختراعتها هي الأخرى. و على ما يبدوا كذلك أن سبب عرض هذه الإدعائات على القضاء هو خلافات خفية سابقة.

تحديث 2 (30/03/2009): تم التوصول إلى تراض بين شركة TomTom و Microsoft و ستقوم الأولى بترخيص الملكية الفكرية من الثانية، كما ستقوم بحدف بعض الخاصيات من أجهزتها في خلال سنتين.