Whatsup - לינוקס, תוכנה חופשית וקוד פתוח בעברית

פרויקטים בלינוקס - מחפש עזרה בפיתוח הרחבה ל-ThunderBird

MBD - 04/06/2010 - 15:31
נושא ההודעה: מחפש עזרה בפיתוח הרחבה ל-ThunderBird
הי

אני עובד עכשיו על הרחבה חדשה לציפור הרעם, שאולי סוף סוף תהפוך את התוכנה הזו לשימושית עבורי. אם יש פה עוד מישהו שחושב שצריך לשנות כמה דברים בפרויקט הזה, הוא יותר ממוזמן להצטרף אלי - אפשר לדבר איתי בה"פ או במייל: bardavid בג'ימייל.קום.
ידע נדרש - JS, היכרות עם XUL. מדובר בעבודה התנדבותית.

תודה
ik_5 - 04/06/2010 - 15:36
נושא ההודעה:
יש המון דברים שצריך לשנות בתוכנה הזו. והרה דברים להוסיף לה שלא קיימים כיום.
אבל לפחות הבקשה שלך מאוד ממוקדת Smile
MBD - 04/06/2010 - 15:39
נושא ההודעה:
איזו תגובה מהירה Smile

בתקופה האחרונה אני עובד יותר ויותר עם מייל מקומי, ואני מחפש את התוכנה הטובה ביותר. מכיוון שלא מצאתי אחת שעונה על צרכי, חשבתי לכתוב אחת בעצמי, אבל בסוף החלטתי ללכת על זו עם הפוטנציאל הגדול ביותר, ולראות איך אפשר לשפר אותה. הבחירה נפלה על הציפור, היות שיש לה תשתית לא רעה, ורק ממשק דפוק (ז"א לא כ"כ, פשוט מיושן ולא אינטיליגנטי כמעט בשום צורה). אני מתחיל לבצע שינויי ממשק די משמעותיים, חלקם בהשפעת gmail. חשבתי שאם יש עוד אנשים שזה מעניין אותם, יהיה טוב לשלב כוחות.
SoOmSoOm - 04/06/2010 - 17:34
נושא ההודעה:
MBD :
איזו תגובה מהירה Smile

בתקופה האחרונה אני עובד יותר ויותר עם מייל מקומי, ואני מחפש את התוכנה הטובה ביותר. מכיוון שלא מצאתי אחת שעונה על צרכי, חשבתי לכתוב אחת בעצמי, אבל בסוף החלטתי ללכת על זו עם הפוטנציאל הגדול ביותר, ולראות איך אפשר לשפר אותה. הבחירה נפלה על הציפור, היות שיש לה תשתית לא רעה, ורק ממשק דפוק (ז"א לא כ"כ, פשוט מיושן ולא אינטיליגנטי כמעט בשום צורה). אני מתחיל לבצע שינויי ממשק די משמעותיים, חלקם בהשפעת gmail. חשבתי שאם יש עוד אנשים שזה מעניין אותם, יהיה טוב לשלב כוחות.


יש סיכוי שמתי שהוא יהיה לוח שנה מובנה בתוך ציפור הרעם? אני פשוט משתמש בevolution וכנראה הלוח שנה מתאחד לי עם הגנום ועד שהחלון של השעון עולה אני יכול לרוץ פעמיים מסביב לבית שלי...

וכן לא מצאתי איך מבטלים את זה, אם יהיה אפשר לבטל זה יהיה מעולה!

נ.ב הלוח שנה מסתכרן לי עם הגוגל קלנדר...
Anonymous - 04/06/2010 - 18:40
נושא ההודעה: יש תוסף
תתקין Lightning ותקבל לוח שנה מובנה בציפור הרעם.
תומר - 05/06/2010 - 10:24
נושא ההודעה:
לא זוכר איפה ראיתי את זה, אבל יש עבודה על תמיכה בתיקיות דואר מקומיות לגרסה הבאה של התוכנה. גם גישה ל־Microsoft Exchange אם מישהו צריך...
MBD - 05/06/2010 - 19:51
נושא ההודעה:
תומר :
לא זוכר איפה ראיתי את זה, אבל יש עבודה על תמיכה בתיקיות דואר מקומיות לגרסה הבאה של התוכנה. גם גישה ל־Microsoft Exchange אם מישהו צריך...

זה אמור להיות קשור למה שאני מחפש?
תומר - 05/06/2010 - 20:35
נושא ההודעה:
MBD :
זה אמור להיות קשור למה שאני מחפש?
ניסיתי להבין מה חסר לך בת'אנדרבירד, וזה מה שהצלחתי להבין. אם מדובר במשהו אחר - אשמח לדעת מה חסר ולנסות לכוון אותך לפתרונות ההולמים ביותר. זו לא בושה לנסות לדחוף פיצ'רים ישירות לקוד התוכנה אם אתה חושב שהם מספיק חשובים ושימושיים לכלל המשתמשים.
MBD - 05/06/2010 - 20:46
נושא ההודעה:
הממשק של הציפור מאוד מאוד מסורבל. הוא אמנם "סטנדרטי" בתוכנות דואל, אבל זה לא אומר שאין לאן להתקדם.
המקום הראשון שזה בא לידי ביטוי, זו רשימת המיילים: המיילים מסודרים ברשימה, עם עמודות לבחירת המשתמש. אבל, זה מחייב רוחב בהתאם לתוכן המקסימלי, ובזבוז רב של מקום. דוגמה יפה יש בג'ימייל, שם בשורת ההודעה כלול כל המידע, בצורה רציפה, ואפילו תחילת התוכן - מה שבאמת חוסך הרבה פעמים כניסה למייל.
הדבר הבא, זו חלונית ההודעה - אני גם מעדיף את השיטה של ג'ימייל, שמאפשרת לי לעבור בין תצוגת מכתב לתצוגת רשימה, ולא את שניהם במקביל.
הדבר המשמעותי השלישי, זה חלון הכתיבה, שתמיד מעצבן אותי בגודל ה"מסגרת" העצומה שלו. מכיוון שרוב המיילים (שלי לפחות) יוצאים לאדם אחד, הייתי רוצה שורה אחת לנמען, שתגדל במקרה הצורך.
אפשרות נוספת שאני רוצה להכניס, זה חלונית quick mail שיאפשר לי לשלוח הודעה קצרה בצורה המהירה ביותר. אני עדיין לא יודע איך בדיוק לממש את זה, אבל זה הרעיון.
מה דעתך ?
שים לב - מה שחסר לי זה לא יכולות מערכת, אלא נטו ממשק ידידותי וחכם יותר.
Anonymous - 05/06/2010 - 21:13
נושא ההודעה:
MBD :

הדבר המשמעותי השלישי, זה חלון הכתיבה, שתמיד מעצבן אותי בגודל ה"מסגרת" העצומה שלו. מכיוון שרוב המיילים (שלי לפחות) יוצאים לאדם אחד, הייתי רוצה שורה אחת לנמען, שתגדל במקרה הצורך.



ההרחבה Mail Tweak עושה את זה (בין שאר הדברים שהיא עושה). התקנתי אותה בשביל תכונה אחרת (שליחת הודעות בזמן עתידי מוגדר), ואחר כך חיפשתי איפה לבטל את התכונה שציינת, שמופעלת כברירת מחדל לאחר התקנתה.
תומר - 05/06/2010 - 21:14
נושא ההודעה:
אני מניח שאנשים רבים שותפים לדעתך זו, וככל הנראה גם יש הרחבות מתאימות. האם עשית סקר שוק ברשת?

למשל זה - https://addons.mozilla.org/en-US/thunderbird/addon/54035

Image
MBD - 05/06/2010 - 21:47
נושא ההודעה:
תומר :
אני מניח שאנשים רבים שותפים לדעתך זו, וככל הנראה גם יש הרחבות מתאימות. האם עשית סקר שוק ברשת?

בהחלט! תאמין לי שאשמח מאוד להתקין הרחבה קיימת, במקום לבזבז את הזמן שלי בלהתאים תוכנה לצורה שבה היא אמורה להיות בעיני. הבעיה שעד כה לא מצאתי הרחבות מתאימות, למרות שחרשתי את אתר התוספים במשך כמה שעות. זו שקישרת אליה כבר מותקנת אצלי, אבל היא לא משנה את תצוגת רשימת המיילים, שזה הדבר הכי חשוב שאני מנסה לעשות. את Mail Tweak שנתנאל קישר אליה אני לא מכיר, והיא אכן פתרה את הבעיה השלישית. תודה Smile

כרגע הדבר שאני מנסה לעשות זה למצוא את הקוד שמעדכן את תצוגת הרשימה, ולהתעלק עליו כדי לשנות את הממשק. אני כבר די קרוב לשם, אבל עדיין לא מצאתי בדיוק את מה שאני מחפש.
תומר - 05/06/2010 - 22:22
נושא ההודעה:
אני מציע שתעלה את הנושא ב־mozilla.org.il בשביל להגיע לכמה שיותר משתמשים פוטנציאלים.
MBD - 05/06/2010 - 23:58
נושא ההודעה:
בשלב הזה אני יותר מחפש מפתחים פוטנציאליים Twisted Evil
האמת, אם וכאשר אגיע לשלב של שחרור קוד, אשמח לפרסם איפה שצריך.
queency - 06/06/2010 - 10:49
נושא ההודעה:
MBD :
הממשק של הציפור מאוד מאוד מסורבל. הוא אמנם "סטנדרטי" בתוכנות דואל, אבל זה לא אומר שאין לאן להתקדם.
המקום הראשון שזה בא לידי ביטוי, זו רשימת המיילים: המיילים מסודרים ברשימה, עם עמודות לבחירת המשתמש. אבל, זה מחייב רוחב בהתאם לתוכן המקסימלי, ובזבוז רב של מקום. דוגמה יפה יש בג'ימייל, שם בשורת ההודעה כלול כל המידע, בצורה רציפה, ואפילו תחילת התוכן - מה שבאמת חוסך הרבה פעמים כניסה למייל.
הדבר הבא, זו חלונית ההודעה - אני גם מעדיף את השיטה של ג'ימייל, שמאפשרת לי לעבור בין תצוגת מכתב לתצוגת רשימה, ולא את שניהם במקביל.
הדבר המשמעותי השלישי, זה חלון הכתיבה, שתמיד מעצבן אותי בגודל ה"מסגרת" העצומה שלו. מכיוון שרוב המיילים (שלי לפחות) יוצאים לאדם אחד, הייתי רוצה שורה אחת לנמען, שתגדל במקרה הצורך.
אפשרות נוספת שאני רוצה להכניס, זה חלונית quick mail שיאפשר לי לשלוח הודעה קצרה בצורה המהירה ביותר. אני עדיין לא יודע איך בדיוק לממש את זה, אבל זה הרעיון.
מה דעתך ?
שים לב - מה שחסר לי זה לא יכולות מערכת, אלא נטו ממשק ידידותי וחכם יותר.


קליק על הנמען פותח לך את כרטיסיית הנמענים שיש לך
לחיצה על כל אות מסננת לך את כל הנמענים
בEVOLUTION זה מאד קל ופשוט משום מה .

אני אישית לTWEAKS כאלה הייתי בונה איזה משהו בפיתון עם השלמה אוטומטית.
האמת יש לי קוד לדוגמא לדברים האלה פשוט מאד.

קוד להשלמה אוטומטית של אוביקטים אפשר להפוך כל נמען לאובייקט ואז
תבחר את זה בהשלמה אוטומטית.

קוד:

try:
   import readline
except ImportError:
   print "Module readline not available."
else:
   import rlcompleter
   readline.parse_and_bind("tab: complete")


קוד לשליחת מייל פשוט

קוד:

# vim: et sw=4 ts=4 tw=79:
'''
Description: Send an email.
Author: sfw geek
Last Udpated: 2009-06-07.
'''


# Hungarian Variable Notation.
# a*    - Array.
# c*    - Constants.
# d*    - Dictionary.
# fo*   - File Object.
# i*    - Integer.
# l*    - List.
# st*   - Set.
# s*    - String.
# t*    - Tuple.


# MODULES.
import os
import sys
import smtplib
from datetime import datetime
from email.iterators import *
from optparse import OptionParser
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.generator import Generator
from email.mime.multipart import MIMEMultipart
from email.utils import COMMASPACE, CRLF, formatdate
from email import encoders

# CONSTANTS.
cERR_MSG_PREFIX = '*ERROR*: '


# DEFINITIONS.
def usage():
    '''Return a string detailing how this program is used.'''

    sProgramName = sys.argv[0]
    sUsage = '''

NAME:
    %s
SYNOPSIS:
    %s [OPTIONS]
DESCRIPTION:
    Sends an email.
    If the value to an argument is a file path and the file exists, the file will be read line by line and the values in the file will be used.
    When supplying multiple email addresses as an argument, a comma should be used to separate them.
    Arguments with spaces should be encolsed in double quotes (").''' % (sProgramName, sProgramName)

    return sUsage

def getArgs():
    '''Get program arguments.
Returns a tuple of arguement details.
The 1st value is a dict of options.
The 2nd value is a list of positional arguments.'''

    getOptParser = OptionParser(usage())
    getOptParser.add_option('-b', '--body', action='store', type='string', dest='body',
        help='Body of email. All lines from file used if file path provided.')
    getOptParser.add_option('-c', '--cc', action='store', type='string', dest='cc',
        help='Who the email is also to be sent to (CC). One email address per line if file path provided.')
    getOptParser.add_option('-d', '--debug', action='store_true', dest='debug',
        help='Increase verbosity to help debugging.')
    getOptParser.add_option('-f', '--from', action='store', type='string', dest='frm',
        help='Who the email is from. Only first line of file used if file path provided.')
    getOptParser.add_option('-m', '--machine', action='store', type='string', dest='smtphost',
        help='The name of SMTP host used to send the email. Only first line of file used if file path provided.')
    getOptParser.add_option('-s', '--subject', action='store', type='string', dest='subject',
        help='The subject of the email. Only first line of file used if file path provided.')
    getOptParser.add_option('-t', '--to', action='store', type='string', dest='to',
        help='Who the email is to be sent to. One email address per line if file path provided.')
    getOptParser.add_option('-r', '--binFile', action='store', type='string', dest='binfile',
        help='Add binary file to body tag.')


    (dOpts, lPosArgs) = getOptParser.parse_args()

    if not (dOpts.smtphost and dOpts.to and dOpts.frm and dOpts.subject and dOpts.body and len(lPosArgs) == 0):
        getOptParser.print_help()
        sys.exit(2)

    return dOpts, lPosArgs

def checkPythonVersion(tMinVersion):
    '''Throw an exception if python interperter is less than the supplied version tuple.
e.g. (2, 6, 0, 'final', 0)'''

    iMinVerLen = len(tMinVersion)
    tPyVersion = sys.version_info # e.g. (2, 6, 0, 'final', 0)

    # Python interperter is less than supplied version error message.
    sErrMsg = '%sPython Version %s ' % (cERR_MSG_PREFIX, '.'.join(map(str, tMinVersion)))
    sErrMsg +=  "Or Higher Is Required To Run '%s'!" % (sys.argv[0])

    if iMinVerLen > 0 and tPyVersion[0] < tMinVersion[0]:
        raise RuntimeError, sErrMsg
    if iMinVerLen > 1 and tPyVersion[1] < tMinVersion[1]:
        raise RuntimeError, sErrMsg
    if iMinVerLen > 2 and tPyVersion[2] < tMinVersion[2]:
        raise RuntimeError, sErrMsg
    if iMinVerLen > 3 and tPyVersion[3] != tMinVersion[3]:
        raise RuntimeError, sErrMsg
    if iMinVerLen > 4 and tPyVersion[3] < tMinVersion[4]:
        raise RuntimeError, sErrMsg

def checkInput(sInput):
    '''Check if input is a path to a file. If it is read the file and return the contents.
The input is returned if it is not a file path that exists.'''

    lData = []
    if os.path.exists(sInput):
        foIn = open(sInput, 'r')
        for sLine in foIn:
            lData.append(sLine.strip())
        foIn.close()
    else:
        lData.append(sInput)

    return lData

def main():
    '''Program entry point.'''

    # Store when program started.
    dtStart = datetime.now()

    tArgs = getArgs()

    # Arguments.
    dOpts = tArgs[0]
    lArgs = tArgs[1]

    msg = MIMEMultipart()

    lFrom = checkInput(dOpts.frm)
    msg['From'] = lFrom[0]

    lTo = checkInput(dOpts.to)
    msg['To'] = COMMASPACE.join(lTo)

    if dOpts.cc:
        # Optional.
        lCc = checkInput(dOpts.cc)
        msg['Cc'] = COMMASPACE.join(lCc)

    #msg['Bcc'] = COMMASPACE.join(lBcc)

    msg['Date'] = formatdate(localtime=True)

    lSubject = checkInput(dOpts.subject)
    msg['Subject'] = lSubject[0]

    lBody = checkInput(dOpts.body)
    msg.attach(MIMEText(CRLF.join(lBody)))


###############################  ADD BIN FILE  #######################################################
    if dOpts.binfile:
        ctype = 'application/octet-stream'
        maintype, subtype = ctype.split('/', 1)
        if os.path.exists(dOpts.binfile):
            fp = open(dOpts.binfile, 'rb')
            myfile = MIMEBase(maintype, subtype)
            myfile.set_payload(fp.read())
            fp.close()
            encoders.encode_base64(myfile)
            myfile.add_header('Content-Disposition', 'attachment', filename=dOpts.binfile)
            msg.attach(myfile)
##########################################################################################################

    lSmtpHost = checkInput(dOpts.smtphost)
    smtpSvr = smtplib.SMTP(lSmtpHost[0])
    if dOpts.debug:
        # Increase display verbosity.
        smtpSvr.set_debuglevel(1)
    smtpSvr.sendmail(lFrom[0], lTo, msg.as_string())
    smtpSvr.quit()


if __name__ == '__main__':
    checkPythonVersion((2, 5))
    main()


MBD - 06/06/2010 - 16:00
נושא ההודעה:
לא הבנתי אותך: אתה מנסה לשכנע אותי לכתוב תוכנה חדשה בעצמי ?
queency - 08/06/2010 - 18:47
נושא ההודעה:
MBD :
לא הבנתי אותך: אתה מנסה לשכנע אותי לכתוב תוכנה חדשה בעצמי ?


כן למה לא יש לי כבר כמה פיצרים של שליחת דואר וקבלת דואר דרך
פייתון אז עוד קוד פה וקוד שם ויש תוכנת דואר על בסיס פיתון.

אולי אפשר לקשר את כל העסק לINTERPRETER של פיתון
בדומה למה שאנשים עושים עם VIM

עכשיו ירד לי האסימון למה אנשים אוהבים לעבוד עם VIM כי הסביבה הזאת
בעצם נותנת להם ממשק גם לBASH וסקריפטים והפעלת קוד C וגם את
האפשרות לתעל את הקלט \ פלט והכל מתוך VIM.

הדבר היחיד שזה לא נותן זה מולטיפלטפורם. שזה נותן פיתון INTERPRETER
MBD - 08/06/2010 - 21:27
נושא ההודעה:
אז זהו, שלא. החלטתי (כמו שכתבתי למעלה) לא לכתוב תוכנה חדשה בעצמי, אלא לשפצר את הממשק של הציפור, כי מתחת לממשק אין לי בעיות איתה, ויש לה ממשקי ניהול לא רעים - הגדרת חשבון, הצפנות וכד'.
queency - 10/06/2010 - 10:00
נושא ההודעה:
ניסיתי להוריד את ThunderBird וקיבלתי אוסף של JS וכמה קבצי SO
האם THUNDERBIRD בנוי על JS או על מה? ואיך מורידים את הקוד ?
Anonymous - 10/06/2010 - 11:28
נושא ההודעה:
http://duckduckgo.com/?q=writing+a+thunderbird+extension&v=
MBD - 10/06/2010 - 19:51
נושא ההודעה:
הממשק של הציפור, והשועל, ושאר הכלים של פרויקט מוזילה, בנוי באמצעות שפה ייעודית בשם XUL, שמקבילה ל-HTML בעולם הווב, והיא מתוסרטת עם JS ומעוצבת עם CSS, ממש בדומה לדפי אינטרנט. חלק מהקוד, גם של התוכנה וגם של ההרחבות הוא מקומפל, וניתן לגשת אליו בצורה כלשהי מ-JS (החלק הזה הוא מידע תאורטי, לא מעשי Embarassed )
MBD - 12/06/2010 - 22:18
נושא ההודעה:
חברה, יש מתנדבים ?
כל הזמנים הם GMT + 2 שעות