ארכיון תגיות: לינוקס

ספריית ממשק לשולחן עבודה – nana pro

אני די מאסתי ב־Qt. הספרייה פותרת את כל הבעיות של שנת 2003 (ספרית STL חסרה וספריות רשת לא קיימת – למשל). ולא פותרת את הבעיות של שנות 2020 – איך אני משתמש מנהל חבילות כדי לקבל את הספרייה (לא נכון – כבר מתחיל להיפתר – גרסה 6 מתחילה לתמוך ב־cmake/conan). הפסרייה עושה פורק לחלק גדול מהדברים שב־standard c++ library – אני מבין את הצורך ההיסטוריה בפתרונות האלו – אבל כרגע אין בהם צורך. כמו כן – הספרייה מספיק גדולה וכדי להתחיל לחפש אלטרנטיבה. אז אני מחפש וכרגע אני בודק את nana-pro.

זאת ספרייה די וותיקה, והמטרה שלה היא רק לעשות ממשק משתמש – ולא להתעסק בבעיות רשת, או להמציא container חדש או string מחדש. היא משתמשת ב־C++‎17. אז אני בדקתי אותה.

הדברים הטובים:

  • הקוד אין לו תלויות נוספות (למעט libpng/libjpeg והם אופציונאלים).
  • יש דוגמאות באתר.
  • הקוד משתמש ב־cmake כדי להיבנות, אז קל להוסיף אותו בתור תת ספרייה בפרוייקט שלך.
  • אני הצלחתי להשתמש ב־FetchContent_Declare כדי למשוך את הקוד – פחות אידיאלי אבל שמיש (מתקמפל בלינוקס וחלונות). בעזרת conan הצלחתי להשתמש ב־libpng בלינוקס. היה קצת מלחמות בחלונות – אז נטשתי את הרעיון. אבל לפי דעתי פתיר.
  • הצורך להשתמש ב־C++‎ רגיל ללא תוספות … זה מרענן. אם כי ב־std::filesystem יש חוסרים (ביחס למה שאני רגיל מ־Qt). אפשר לכתוב פונצקיות עזר ולקוות שבעתיד זה ייכנס לתקן.
  • הצלחתי לכתוב תוכנית מלאה – ללא מחלקות. הכל כתוב בתוך main file. וזה קונסצפט מעניין. הצורך לבנות מחלקות עבור על פעולה במקום להשתמש ב־std::function הוא … מיושן (כן, אני יודע איך המימוש של lambda הוא בקומפילר).
  • כתיבה אל הממשק עצמו אפשרית מתוך כל thread.
  • יש להם thread manager ממש מגניב. למשל – לשים callback שירוץ ב־thread הוא רק לעטוף את הפונקציה שלך בפונקציה אחרת. ככה ה־callback שלך לא יחסום את הלולאה הראשית. (זה החלק הכי אהוב עליי בספרייה הזאת).

הדברים הרעים:

  • כשאתה מוסיף widget אל טאב למשל – הטאב לא מקבל עליו אחריות. במקרה שלי – אני עשיתי משהו בתוך callback, וכאשר ה־callback הסתיים ה־widget שלי נעלם כי יצא מה־scope. בסוף הפתרון היה לשמור את ה־widget החדש במערך גלובאלי.
  • הפקד של tab control לא ממש חביב עליי. אני לא יכול לבקש “תגיד לי מי מציג את T” (הפקד עצמו הוא מבוסס תבנית, אני השתמשתי ב־std::string בתור הבסיס שלו). בסוף חיפשתי בכל הלשוניות הזמינות. O(n) … אבל n הוא קטן לכן סתם מסריח.
  • הצורה שבה הם מנהלים את ה־layout מאוד ייחודית. לא בטוח שאני מחבב אותה – כי אין אפשרות ליצור משהו ויזואלי (זה מרגיש כמו לכתוב HTML אבל בלי שמות תגיות). יש עורך גראפי – אבל לא ממש “עובד בשבילי”. קשה לתאר.
  • הפקד טקסט הוא… איטי בצורה חסרת שימוש. אם אני גולל עם הגלגלת של העכבר – אני רואה את הפקד מגיב אחרי חצי שנייה ועוד גולל.
  • אין מספיק קוד זמין ברשת ללמוד ממנו, ולכן לעשות דברים מורכבים זה לימוד איטי.
  • הקוד בחלקו הגדול כתוב ב־headers ומשתמש ב־templates בצורה כבדה – וזה מקשה מאוד על הבנה של הקוד, וכשיש לך בעיות קומפילציה… לך תבין מה הבעיה באמת.
  • התיעוד מפוזר. יש את הפרויקט הראשי, ויש עוד חלק מצוות הפיתוח שיש לו תיעוד משלו. אתה צריך לעבור בין השנייה.

לסיכום:

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

אני שים את הקוד פה שכתבתי. אני כמעט בטוח שהקוד ייזנח. אני ממקבל pr אם מישהו רוצה.
https://github.com/elcuco/nana-ide

Share Button

כרומבוק – מחשב מיותר – חלק 4 – דביאן

בפעם קודמת, הסברתי איך עברתי מ־ChromiumOS אל לינוקס נורמאלי וקיבלתי מחשב נורמאלי. בסופו של דבר, קיבלתי מחשב שהריץ אובונוטו 18.10. לפני כמה ימים היה עדכון (גרסה חדשה של אונובטו), ובמקום לעדכן את אובונטו, החלטתי לעשות משהו “אמיץ”: שידרגתי אל דביאן, במקום (מבלי לפרמט). מסתבר שזה אפשרי, ראיתי מישהו שידרג מדביאן אל אובונטו לפני כמה שנים. כעת, אני עושה את ההפך.

שלב ראשון:

מכבים את המקורות של אובונטו, ושמים את אלו של דביאן (שימו לב ל-# בתחילת שורה):

root@chrx:~# cat /etc/apt/sources.list
# deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
#deb http://mirror.isoc.org.il/pub/ubuntu/ cosmic main restricted universe multiverse
#deb http://mirror.isoc.org.il/pub/ubuntu/ cosmic-updates main restricted universe multiverse

deb http://mirror.isoc.org.il/pub/debian/ testing main contrib non-free

שלב שני -עדכון מקורות:

root@chrx:~# apt update --allow-insecure-repositories
root@chrx:~# apt install debian-keyring
root@chrx:~# apt update

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

שלב שלישי: שידרוג ראשוני

כגעת נתחיל משידרוג של apt ושל עוד חבילות בסיס:

root@chrx:~# apt install apt libc6 systemd

אני לא בטוח שהאחרון היה בו צורך, אבל ניחא. השידורג הזה עובד. ואז, הכיף מתחיל.

שלב רביעי: שידרוג מלא

root@chrx:~# apt distupgrade

פה, יש בעיות. זה יעבוד חלקית – אבל חלק מהחבילות לא יותקנו. למה? קבצים עברו מחבילה אל חבילה, וזה יוצר התנגשויות. הפתרון שלי – להתחיל בלהסיר את החבילות שיוצרות את שבירה, ואז לנסות לשדרג שוב. וזה עובד טיפה, וכשזה לא עובד – מנסים שוב עם aptitude. זאת תוכנה ישנה שמחליפה את apt/apt-get, מה שטוב בה – זה שהיא יודעת להתמודד טוב עם המצבים הללו, ולהסיר ולהתקין דברים במקום. זה בגדול עשה את העבודה. לאחר השידרוג, והתקנה של קרנל של דביאן, קיבלתי את זה:

root@chrx:~# echo "`dpkg -l | wc -l` / `dpkg -l | grep ubuntu | wc -l`"
1997 / 172

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

היו לי שתי בעיות:

הראשונה – משהו מה, כעת אני לא יכול להפעיל wayland אלא תקוע ב־xorg. מקווה שזה בגלל החבילות המעורבות.

השנייה – השמע. היה לי שמע לפני השידרוג, ואני רוצה אותו שוב. אבל זה – בפוסט הבא. כי זה ממש לא טריויאלי.

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

Share Button

פוסדקסטים שאני מקשיב להם

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

  1. רברסים פלטפורמה – קבוצה של ישראלים  מדברים על טכנולוגיה. יותר מדי טכנולוגיות ווב, אבל התוכן די סביר. RSS
  2. הפילוסופיה של הקוד – פודקאסט ישראלי מאוד טכני, חבל שלא ממשים אותו. מעט פרקים ולא מתוחזק מאז 2014… אבל שווה. RSS.
  3. עושים היסטוריה עם רן לויהאיש גיק והוא מספר סיפורים … על איך המציאו אבקת שירפה, ההיסטוריה האמיתית מאחורי “משחקי הכס”,  מגיפות של גפנים (יין), “להתיש את הקודו”, ועוד. מאוד מגון, ולא תמיד קשור ישירות בתוכנה. אני מאוד ממליץ על הפוקטאסט הזה. RSS
  4. שעה היסטורית – שידור חוזר של תוכנית רדיו ששודרה בשנות ה־80 (!) ברשת ב’, ברדיו. אולי שווה לקרא לזה ריבוט… עוד אחד שאני ממליץ עליו בחום. אין קשר בין זה וטכנולוגיה – היסטוריה נטו. RSS
  5. Dot.Net Rocks – התחילה לפני כמה שנים (10 שנים ב”אוויר”) בתור פודקאסט על טכונולוגיות מיקרוסופט בלבד, אבל בשנים אחרונות העולם השתנה והם מדברים על… כל טכנולוגיה כמעט. פעם בחודש יש להם GeekOuts [RSS] שבהם מדברים על … צליית בקר, אנרגיה אטומית, מסעות אל מאדים… ה-Geekouts מאוד מומלצים. מאוד. איכות השמע כאן ממש טובה, אולי כי אחד מהמגישים הוא מוסיקאי. RSS
  6. Bad Voltage – חבורת סתומים שעוסקים בתוכנה חופשית מדברים שטויות על … אין לי מושג. חצי מהזמן הם יורדים אחד על השני… צחוקים מטורפים וזה פודקאסט שהתוכן המרכזי הוא תוכנה חופשית. RSS
  7. Coverville – כאן תשמעו שעה וחצי של חידושים. מוסיקה מצויינת. RSS
  8. Floss Weekly – פעם בשבוע מראיינים מישהו (“מנהיג”) של פרוייקט קוד פתוח/תוכנה חופשית. המנחה הוא רנדל שווארץ, איש מוכר מאוד בתחום של פרל, הוא כתב את הספרים של אוריילי. RSS
  9. Software engineering Radio – קבוצה של אנשי תוכנה מדברים על תוכנה מכיוון יותר אקדמאי. ממוקד מאוד בג’אווה. אני לא יכול להגיד שהוא מומלץ. הוא די משעמם לפעמים. הקריינים יבשים. RSS
  10. The Linux Link Tech Show – הסבתא של כל התוכניות. ראיינו את סטאולמן פעמיים, וכבר מעל 500 פרקים. איכות השמע השתפרה מאז שנטשו את אסטריסק ועברו אל מאמבל. התכונית כולה מופקת בעזרת תוכנה חופשית מהיום הראשון. RSS
  11. This week in science –  התוכנית הזאת עוקבת אחרי מה שקורא במדע מדי שבוע. ביולוגיה, פיסיקה כימיה. בשנים האחרונות היא קצת מעייפת אותי. אני מניח שזה רק אני. RSS
  12. CPP Cast – פודקאסט שמדבר על ההתפתחויות בשפת C++. הוא מאוד טכני, ולא ממש טוב בתור האזנה… אלא כדי להבין “אוקי, זאת ספרייה שאני צריך ללמוד עליה”. מאוד מומלץ לחובבי C++ בלבד. RSS
  13. גיקונומי – פודקאסט ישראלי במלא מובן המילה שמארח את האנשים הכי מעננים. שעתיים וחצי ללא עריכה. מרתק. RSS
  14. Adam Savage – Still untitled – אדם סאבג’ ממכסחי המיתוסים יש לו פודקאסט משלו (ויש ערוץ יוטיוב שבוא בונים דברים מגניבים). RSS
  15. Dan Carlin – Hardcore history. זהו אחד הפודקסטים הכי טובים בעולם. האיש משווק את עצמו בתור “לא היסטוריון” אבל הוא מסביר היסטוריה בצורה מדהימה. פרק אחד יכול להיות שעתיים רצוף שהוא מדבר אל מיקרופון… והפרק האחרון היה …  4:30 שעות.  האיש עושה סדרה של 4 פרקים אודות מלחמת העולם הראשונה והיה לי קשה להקשיב לזה, כי היה גרפי מדי. חזרתי אחרי חודש ולמדתי. ממליץ בחום (גם הפרקים הג’ינגס חאן היו ממש טובים). RSS

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

Share Button

צריבה של ROM עבור Galaxy S1 i9000 מלינוקס

בפוסט קודם הסברתי על אודות מחיצות באנדרויד. “הקהילה” קוראת לאסופה של ה־images של המחיצות הללו בתור ROM. אין הרבה הסברים באינטרנט שמסבירים איך לצרוב מכשירי Galaxy S i9000 בעברית בלינוקס. אז – מעכשיו יש.

  1. תורידו את ה־ROM־ים המקוריים של החברה המתאימה לכם. אין בעייה גדולה לשים רום של חברה אחרת. אם זה לא עובד, אפשר לצרוב את המודם המתאים. באתר של iAndroid יש קישורים להורדה: http://iandroid.co.il/forum/viewtopic.php?f=42&t=18962
  2. הקבצים שתורידו הם self extracting exe לחלונות. אצלי wine עשה את מלאכתו נאמנה והקבצים שנוצרו וחתימות ה־MD5 הם (קבצי ה־exe הם ממש ישנים, ייתכן ועכשיו יש קבצים עם חתימה שונה, מה שחושב זה קבצי ה־tar שנוצרים מהם):
    82d5a5fffd1fea566aab7fe39522aa2c  I9000.Cellcom.JIJVG.exe
    0cb6ef26ce3076c5b3ffde7cb2ad2a1a  I9000.Partner.JHJVG.exe
    254ef10b0ddacfeabc44cf547082e856  I9000.Pelephone.JJJVB.exe
    eedb05d074db2026b38c8f00ca18f935  Cellcom.JIJVG.tar
    33535d9aff3e39d04b0cc504ac389b51  Pelephone.JJJVB.tar
    7d593eae36a2d5151e6a84454c739827  Partner.JHJVG.tar
  3. עכשיו צריך לפתוח את אחד הקבצים, בתוך ספרייה חדשה (לדוגמה):
     mkdir open-android-firmware
     cd open-android-firmware
     tar xf ../Cellcom.JIJVG.tar
  4. כדי לצרוב צריך גם קובץ pit שמגדיר את מבנה המחיצות. חיפוש ברשת אחר s1_odin_20100512.pit  תניב קובץ שהתחימה שלו היא 1d927b36d2fa807a22e64fc86b445130
  5. צריך גם קובץ שמגדיר dbdatafs, הוא נקרא גם PDA (אין לי שמץ של מושג מה זה). אותו אפשר להוריד מכאן: http://forum.xda-developers.com/showthread.php?t=2184403 החתימה של מה שהורדתי היא 868b81b9e28d30c82a00038d29e65d8c
  6. הצריבה תיעשה על ידי תוכנה heimdall. היא זמינה מהמאגרים החופשיים של דביאן. להתקנה:
     sudo apt install heimdall-flash
  7. אופציונאלי: אני לא אוהב להשתמש ב־root, ולכן הגדרתי חוק udev שהמכשיר יהיה ניתן לתכנות גם בעזרת המשתמש שלי. צריך רק לדאוג שהמשתמש יהיה תחת הקבוצה plugdev ואז החוק הבא יעבוד (זה גם טוב לעבודה מול adb בתור משתמש רגיל, ולכן מומלץ).השורה אחרונה מתאימה לגלקסי, האחרות לנקסוס וואללה, לא זוכר 🙂
    elcuco@pinky ~ $ cat  /etc/udev/rules.d/51-android.rules 
    SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev" 
    SUBSYSTEM=="usb", ATTR{idVendor}=="681c", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev"
  8. בשלב זה נשים את המכשיר במצב download. תוציאו את המכסה האחורי,ואז תוציאו את הסוללה (פשוט לתת מכה והיא יוצאת). תכניסו מחדש את הסוללה ואז ללחוץ על השילוש הקדוש: מקש הבית, כפתור שמע תחתון וכפתור ההדלקה. על הצג יהיה אנדרויד צהוב.
    המלצה: לא לשים את המכסה אחורי. יהיה יותר קל להוציא את הסוללה ולהתחיל מההתחלה, ואני מבטיח שיהיה צורך בזה 🙂
  9. כעת פשוט מפעילים את הפקודה הבאה (אני שמרתי אותה בתסריט בשם flash-all.sh)
    heimdall flash --repartition  \
       --pit s1_odin_20100512.pit \
       --FACTORYFS factoryfs.rfs  \    
       --CACHE cache.rfs          \
       --DBDATAFS dbdata.rfs      \
       --IBL+PBL boot.bin         \
       --SBL Sbl.bin              \
       --PARAM param.lfs          \
       --KERNEL zImage            \   
       --MODEM modem.bin
  10. זהו. הצריבה לוקחת כמה דקות ואחרי המכשיר עולה כמו חדש.

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

המלצות נוספות:

  1. אל תנסו את זה בחלונות. צריך להשתמש בתוכנה odin שאין לי מושג מה היא עושה מי כתב אותה. זאת הדלפה של מישהו ואני לא סומך על קוד של מישהו אחר במחשב שלי. התוכנות שיש בלינוקס נבדקו והן קוד פתוח, אני סומך עליהן יותר.
  2. תוודאו את החתימות (md5 במיקרה של מה שאני נותן כאן).
  3. כמה שיותר מהר נסו לשים רום אלטרנטיבי. cyanogenmod הוא בסדר גמור. אני חושב ש־Replicant יהיה יותר טוב – אבל לא בדקתי אישית, והוא לא זמין לכל מכשיר.
  4. על מכשיר ישן זה, לא הייתי ממליץ על gapps כלל. אני השתמשתי ב־FDroid והשלמתי כמה תוכנות עם Aptoid. האחרון מפוקפק משהו… אבל זאת פשרה שאני נאלץ לחיות איתה.
  5. כדי להחליף מודם, יש לשים את המכשיר במצב download ולצרוב בעזרת הפקודה הבאה (את המודם צריך לקחת מהרום המתאים):
    heimdall flash --MODEM modem.bin
  6. אם דילגת על השלב של udev פשוט לשים sudo לפני כל פקודה.

שאלות שנותרו לי ללא מענה:

  1. מה התוכן של dbdata.rfs ומה המטרה של המחיצה הזאת.
  2. מה זה param.lfs.

תזכורת: מחיצות באנדרויד

Share Button