Skip to content

Instantly share code, notes, and snippets.

@amirgon
Created November 12, 2019 07:06
Show Gist options
  • Save amirgon/8f2f1ac2fea32f6657f9c00b3da40340 to your computer and use it in GitHub Desktop.
Save amirgon/8f2f1ac2fea32f6657f9c00b3da40340 to your computer and use it in GitHub Desktop.
Test script for Bidirectional support on lvgl
import lvgl as lv
lv.init()
import SDL
SDL.init()
# Register SDL display driver.
disp_buf1 = lv.disp_buf_t()
buf1_1 = bytearray(480*10)
lv.disp_buf_init(disp_buf1,buf1_1, None, len(buf1_1)//4)
disp_drv = lv.disp_drv_t()
lv.disp_drv_init(disp_drv)
disp_drv.buffer = disp_buf1
disp_drv.flush_cb = SDL.monitor_flush
disp_drv.hor_res = 480
disp_drv.ver_res = 320
lv.disp_drv_register(disp_drv)
# Regsiter SDL mouse driver
indev_drv = lv.indev_drv_t()
lv.indev_drv_init(indev_drv)
indev_drv.type = lv.INDEV_TYPE.POINTER;
indev_drv.read_cb = SDL.mouse_read;
lv.indev_drv_register(indev_drv);
# Create a screen with a button and a label
scr = lv.obj()
scr.set_base_dir(lv.BIDI_DIR.RTL)
tabview = lv.tabview(scr)
tab1 = tabview.add_tab("1. אחד")
tab2 = tabview.add_tab("2. שתיים")
tab3 = tabview.add_tab("3. שלוש")
##################################################################
style_cell1 = lv.style_t()
lv.style_copy(style_cell1, lv.style_plain)
style_cell1.body.border.width = 1
style_cell1.body.border.color = lv.color_hex3(0xFFF)
style_cell2 = lv.style_t()
lv.style_copy(style_cell2, lv.style_plain)
style_cell2.body.border.width = 1
style_cell2.body.border.color = lv.color_hex3(0xFFF)
style_cell2.body.main_color = lv.color_hex3(0xAAA)
style_cell2.body.grad_color = lv.color_hex3(0xAAA)
table = lv.table(tab1)
table.set_style(table.STYLE.CELL1, style_cell1);
table.set_style(table.STYLE.CELL2, style_cell2);
table.set_style(table.STYLE.BG, lv.style_transp_tight);
table.set_col_cnt(2);
table.set_row_cnt(4);
# table.align(None, lv.ALIGN.CENTER, 0, 0);
table.set_cell_align(0, 0, lv.label.ALIGN.CENTER);
table.set_cell_align(0, 1, lv.label.ALIGN.CENTER);
table.set_cell_type(0, 0, 2);
table.set_cell_type(0, 1, 2);
table.set_cell_value(0, 0, "שם");
table.set_cell_value(1, 0, "תפוח");
table.set_cell_value(2, 0, "בנננה");
table.set_cell_value(3, 0, "לימון");
table.set_cell_value(0, 1, "מחיר");
table.set_cell_value(1, 1, "$7");
table.set_cell_value(2, 1, "$4");
table.set_cell_value(3, 1, "$6");
##################################################################
ddlist = lv.ddlist(tab2)
ddlist.set_options("1. שלוםםםם\n2. שלום\n3. שלום")
ddlist.set_y(120)
##################################################################
# page = lv.page(tab3)
# page.set_size(200,200)
# label = lv.label(page)
# label.set_long_mode(lv.label.LONG.BREAK)
# label.set_width(page.get_fit_width())
# label.set_text("א ב ג ד ה ו ז ח ט י כ ל מ נ ס ע פ צ ק ר ש ת")
# label.set_text("קרול הראשון, מלך רומניה (20 באפריל 1839 - 10 באוקטובר 1914), היה קצין גרמני ובנו השני של הנסיך הגרמני קרל אנטון.\nקרול נבחר בשנת 1866 לתפקיד דומניטור של הנסיכויות הרומניות המאוחדות ובשנת 1881 הוכרז כמלך רומניה.")
def ta_cb(obj, event):
if event == lv.EVENT.CLICKED:
ta1.set_text(str(ta.get_cursor_pos()))
ta = lv.ta(tab3)
ta.set_height(200)
ta.set_event_cb(ta_cb)
ta.set_text_sel(True)
ta1 = lv.ta(tab3)
ta1.align(tab3, lv.ALIGN.IN_TOP_LEFT, 0, 0)
slider = lv.slider(tab3)
slider.align(ta, lv.ALIGN.OUT_BOTTOM_MID, 0, 10)
slider.set_width(400)
slider.set_range(10, 400)
slider.set_event_cb(lambda obj, event, ta=ta: ta.set_width(obj.get_value()) if event == lv.EVENT.VALUE_CHANGED else None)
# ta.set_text('חלקו המרכזי של המאיץ בנוי בתוך מנהרה טבעתית שאורכה כ-27 קילומטר. המתקן מסוגל להאיץ פרוטונים בשני צינורות (beam pipes) מקבילים, שמתאחדים לצינור אחד סמוך למספר נקודות אינטראקציה (interaction points) לאורך מסלול המאיץ. בנקודות אלו מתרחשת אינטראקציה (התנגשות) בין פרוטונים הנעים בכיוונים מנוגדים. האנרגיה של חלקיק עולה ככל שמהירותו גדלה. האנרגיה של הפרוטונים הנעים בצינורות ה-LHC מגיעה ל-TeV ‏7 (שבעת אלפים מיליארד אלקטרון וולט; פי 7,461 מאנרגיית המנוחה של הפרוטון) ומהירות תנועתם מגיעה ל-99.9999991% ממהירות האור בריק[1]. בחלק מהזמן יואצו במאיץ גרעיני עופרת. בחינת החלקיקים שייווצרו כתוצאה מהתנגשויות הפרוטונים או היונים תיעשה באמצעות גלאֵי חלקיקים גדולים.')
txt1 = """
שימושים
סרטיפיקטים נפוצים כגון של תעודות X.509 בפורמט PEM[1], נשמרים בפורמט Base64 עקב קריאותם הרבה. באופן דומה, תוצאות של פונקציות גיבוב (Hash functions) מוצגות בדרך כלל ב Base64 מפני שהתוצר הגולמי שלהן עלול להכיל תווים לא קריאים.
נפוץ למצוא מידע מקודד ב-Base64 בתוך מסמכי XML שונים, במיוחד כאשר נעשה שימוש בתקשורת להעברת המסמכים.
סכמה פשוטה לדוגמה של שיבוץ קידוד כזה במסמך XML‏: <data encoding="base64">TextEncodedInBase64ComesHere</data>
OpenPGP
OpenPGP[2], המתואר ב-RFC 4880 מגדיר קידוד Radix-64 (מכונה גם ASCII Armor).‏ Radix-64 הוא למעשה זהה ל Base64, בתוספת (אופציונלית) של 24 סיביות CRC. ה-Checksum, מחושב על המידע לפני הקידוד ואחר כך עובר בעצמו קידוד Base64, בתוספת תחילית של = המשמשת כתו מפריד, ומשורשר למידע המקודד.
HTML
המתודות atob() ו btoa() של שפת JavaScript, המוגדרות במפרט של HTML5[3] נותנות שירות קידוד ל Base64 עבור קוד JS שרץ בדף אינטרנט. btoa() מוציאה את תווי הריפוד, אך אלו אופציונאליים בקלט של atob()
LDAP
פרוטוקול LDAP עושה שימוש בפורמט LDIF כדי להציג תוכן ספריות LDAP ולעדכן נתונים. קידוד המחרוזות המועברות בפרוטוקול נעשה באמצעות Base64.
דוגמה
הטקסט הבא: "War @ Peace+"
יוצג בקידוד ASCII הקסדצימלי 57 61 72 20 40 20 50 65 61 63 65 2B ובקידוד ASCII בינארי: 01010111 01100001 01110010 00100000 01000000 00100000 01010000 01100101 01100001 01100011 01100101 00101011. כל 8 סיביות ברצף זה של 96 סיביות מייצגות תו אחד של הטקסט המקורי. הרצף הראשון 01010111, למשל, מייצג את האות 'W'.
רצף סיביות זה יופרד לקטעים של 6 סיביות כל אחד, וכל קטע של 6 סיביות יוצג באמצעות תו ASCII המתאים לו, לפי הטבלה דלעיל, ובכך יקודד למחרוזת הבאה Base64 של תווי ASCII:‏ V2FyIEAgUGVhY2Ur
ריפוד
כיוון שכל 3 בתים (24 סיביות) ממופים ל-4 תווי Base64, יכול להווצר מצב שהרצף המקורי אינו מתחלק ב-3 וחייב להתבצע "ריפוד" המשלים את הבתים החסרים בקבוצה האחרונה. בציטוט שבדוגמה יש 12 תווים, שהם 96 סיביות, שאותם ניתן לחלק בדיוק ל-16 קטעים של 6 סיביות. אם נגדיל את הטקסט, בתוספת תו אחד בסופו, כך: War @ Peace+- נקבל מחרוזת של 13 תוים, שהם 104 סיביות, מספר שבחלוקתו לקטעים של 6 סיביות נותן 17 קטעים שלמים, ועוד קטע שבו שתי סיביות בלבד. הקידוד ל-Base64 של טקסט זה נותן את המחרוזת הבאה: V2FyIEAgUGVhY2UrLQ==
תחילתו של קידוד זה זהה לקידוד של המחרוזת בת 12 התווים, ובסופו נוסף הקידוד LQ== של התו הנוסף. בדוגמה שלנו, תו זה (מקף -), מקודד למחרוזת LQ שאינה ממלאת את כל המקום ב"קבוצה" האחרונה. לכן אנו רואים את הסיומת LQ==, כאשר התוספת של הרצף == מצביעה על כך שהקבוצה האחרונה (של 3 תווים) הכילה רק תו אחד במקור ולכן התווסף "ריפוד" של שני תווי = נוספים. במקרים בהם הקבוצה האחרונה מכילה שני תווים, ידרש ריפוד של = בודד.
קישורים חיצוניים
מקודד מקוון של מחרוזות ל Base64, באתר codebeautify
דף לימוד על קידוד Base64 בשפת Javascript באתר W3Schools
הסברים על שימושים של קידוד Base64, באתר StackOverflow
הערות שוליים
PEM Files, באתר How2SSL
קוד פתוח פופולרי להצפנה המבוסס על הסטנדרט PGP
"7.3. Base64 utility methods". HTML 5.2 Editor's Draft. World Wide Web Consortium. בדיקה אחרונה ב-2 בינואר 2017. Introduced by changeset 5814, 2011-02-01."""
txt2 = """
ACM (קיצור של: Association for Computing Machinery - האגודה למכונות מחשוב) היא אגודה מדעית בתחום המחשוב ומדעי המחשב. האגודה נוסדה בשנת 1947 ונחשבת לחשובה בתחומה. בשנת 2011 היו באגודה יותר מ-100,000 חברים. המשרד הראשי של האגודה שוכן בעיר ניו יורק. נשיא ה-ACM, החל מ-1 ביולי 2012, הוא וינט סרף.[1]
תוכן עניינים
1 פעילות
2 כתבי עת
3 פרסים ואותות הוקרה
4 קישורים חיצוניים
5 הערות שוליים
פעילות
האגודה פועלת באמצעות 170 לשכות מקומיות ו-35 קבוצות התמחות (SIG - Special Interest Group), שכל אחת מהן מתמקדת בתחום ידע ספציפי. בנוסף, לאגודה סניפים ביותר מ-500 אוניברסיטאות ומכללות ברחבי העולם (הראשון נוסד בשנת 1961).
לאגודה כנסים ייעודיים רבים אשר הפכו למשמעותיים בתחום מדעי המחשב. קבוצות ההתמחות מפרסמות מספר רב של כתבי עת וידיעונים. האגודה מממנת פעילויות שונות להפצת ידע בתחומי המחשוב. בין השאר תמכה בתחרות השחמט בין השחמטאי גארי קספרוב למחשב כחול עמוק.
כתבי עת
האגודה מוציאה לאור כתבי עת רבים. העיקרי שבהם הוא Communications of the ACM, המופץ לכל חברי האגודה. Journal of the ACM הוא כתב העת האקדמי של האגודה. כתבי עת נוספים מתמקדים בתחומים ספציפיים של מדעי המחשב, חלקם יוצאים לאור במסגרת קבוצות ההתמחות. חלק מכתבי העת יוצאים לאור בשיתוף פעולה עם אגודת IEEE (אגודה שחלק מפעילותה חופף לזו של ה-ACM). כמעט כל כתבי העת זמינים במקוון למנויים.
פרסים ואותות הוקרה
האגודה מחלקת פרסים ואותות הוקרה בתחומי פעילותה, ובהם:
פרס טיורינג בגין הישג יוצא דופן במדעי המחשב. זהו הפרס החשוב ביותר בעולם בתחום זה.
פרס ACM למערכת תוכנה על הישגים יוצאי דופן בתחום התוכנה.
עמית ACM: אות הוקרה שנוסד בשנת 1993, ומוענק לחברי ה-ACM על הישגים במדעי המחשב ובטכנולוגיית המידע ועל תרומה מהותיות ליעדי ה-ACM. כ-500 מחברי ה-ACM זכו לאות הוקרה זה.
קישורים חיצוניים
ויקישיתוף מדיה וקבצים בנושא ACM בוויקישיתוף
Green globe.svg http://www.acm.org/ אתר האינטרנט הרשמי של ACM
F icon.svg ACM, ברשת החברתית פייסבוק
Twitter logo initial.svg ACM, ברשת החברתית טוויטר
Instagram logo 2016.svg ACM, ברשת החברתית אינסטגרם
YouTube play buttom icon (2013-2017).svg ACM, סרטונים בערוץ היוטיוב
הערות שוליים
"ACM Elects Vint Cerf as President". ACM. 25 במאי 2012.
"""
txt3 = "AB(CD[&הו]!)זח"
txt4 = "Hello - שלום!111...\nאחת שתיים שלוש\nארבע חמש שש\nשבע שמונה תשע\nעשר"
ta.set_text(txt1)
ta.set_cursor_pos(0)
# ta1 = lv.ta(tab3)
# ta1.set_text('אבגabc...')
# ta1.align(ta, lv.ALIGN.OUT_LEFT_MID, -20, 0)
lv.scr_load(scr)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment