מאמרים בנושא ‏פיתוח‏.

שבירת API בלי סיבה מוצדקת זה פשע נגד הקהילה

ב־יום שלישי, 29 באפריל 2025, מאת ארתיום; פורסם תחת: תכנה חופשית, לינוקס, פיתוח; ‏0 תגובות

באתי לבנות את הפרויקט שלי OpenLiveStacker עם OpenCV אחרון 4.11 - הכל נופל. נעלמו אופרטורים +/- על פעולות וקטוריות. לדוגמה הקוד הבא:

cv::v_float32x4 zero = cv::v_setall_f32(0.0f);
cv::v_float32x4 one = cv::v_setall_f32(1.0f);
int limit = N/4*4;
for(;i<limit;i+=4,p+=4,d+=4,f+=4) {
    cv::v_float32x4 v=cv::v_max(zero,cv::v_load(p) - cv::v_load(d));
    v = cv::v_min(cv::v_load(f) * v,one);
    cv::v_store(p,v);
}

פשוט לא מתקמפל כי הסירו אופרטורים של חיבור/חיסור. למה? כובע!

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

טוב, נחכה ונראה

איך ללמוד תכנות בגיל צעיר?

ב־יום שבת, 8 בפברואר 2025, מאת ארתיום; פורסם תחת: תכנה חופשית, לינוקס, פיתוח, תכנה ומחשבים, חינוך; ‏6 תגובות

כשהייתי בן 11 הורים שלי קנו לנו מחשב קטן ZX Spectrum עם מעבד Zilog Z80 מ־48KB של זכרון. "מערכת ההפעלה" שלו הייתה BASIC פשוט, הוא התחבר לטלוויזיה, התוכנה נשמרה ונטענה מקלטות. אומנם קיבלנו את המחשב בתחילת שנות ה־90 אבל בפועל זו הייתה טכנולוגיה של שנות ה־80. כך או אחרת זה הדליק את העניין שלי ושל אחי בתוכנה התווה את הדרך המקצועית של שנינו. למדתי עליו תכנות בסיסי והאסמבלי של Z80 הוא הראשון (ובעצם היחיד) שלמדתי לעומק.

קצת נוסטלגיה

עבר המון זמן. אבל תמיד אהבתי את המחשב הקטן ההוא. שחקתי עם אמולטורים שלו כמו fuse ואפילו בניתי תוכנה עבורו. אפילו חשבתי לקנות אחד ישן - אבל תמיד זה העלה שאלות - חיבור למסכים, אלטרוניקה של שנות ה־80 עם קבלים שלרוב נהרסו ועוד כל מיני שיקולים.

אבל לאחרונה יצאה מחשב "מחודש" הנקרא "The Spectrum" שמעשה מדמה את המחשב הישן נראה בדיוק כמוהו אבל עובד עם טכנולוגיה מודרנית - מאפשר לטעון טכנה מדיסק־און־קיי ומתחבר למסך עם HDMI. אחרי הרהורים קצרים הזמנתי אחד מ־Amazon צרפת ו... לא התאכזבתי. באמת, מחשב קטן וגאוני. מהר מאוד כתבתי בשבילו כמה משחקים פשוטים ב־BASIC למשל Snake. הראיתי את המחשב לבתי הגדולה. הראיתי כמה פקודות פשוטות. כתבתי לידה משחק פשוט בו תפוסים קוביה שנופלת

תמונה

  1 BORDER 1
  5 LET row=0
  6 LET score=0
 10 LET p=16
 20 LET col=15
 25 LET row=0
 30 PRINT AT row,col;"#"
 40 LET row=row+1
100 PRINT AT 20,p;"^"
105 LET psave=p
110 IF INKEY$="p" AND p<31 THEN LET p=p+1
120 IF INKEY$="q" AND p>0 THEN LET p=p-1
130 IF psave<>p THEN PRINT AT 20,psave;" "
140 PRINT AT row-1,col;" "
145 IF row>20 AND p=col THEN LET score=score+1: PRINT AT 21,0;"Score ";score;
150 IF row>20 THEN LET row=0: LET col=INT (16*RND)+7
200 GO TO 30

הפתיעה אותה כמה קל זה היה אז במחשבי 8bit הפשוטים לכתוב דברים כאלה. הייתי רוצה לתת גם לילדים שלי להיחשף לעולם התוכנה. ולמרות שברור לי מחשב כזה הוא נפלא למשימות האלה, אני לא חושב שזה רעיון טוב ללמיד את הטכנולוגיה של שנות השמונים.

אז מה האלטרנטיבות הים?

אני רציתי סביבה בה אפשר לבנות דברים פשוטים כאלה בלי "לפתוח חלונות" לטפל באלף הגדרות ממשק וכד'. משהו שלילד (וגם מבוגר) יהיה קל וכיף להיכנס.

לפני שתגידו Scratch - אני מכיר - אבל הבעיה שלי עם Scratch ש"שפת התכנות" מזעזעת. לא הצלחתי להתחבר. וגם כשנתתי לבתי הגדולה היא לא המשיכה הרבה עם זה. אולי בגלל שאני גם לא הצלחתי.

פתחתי דיוק בנושא בקבוצת פייסבוק של משתמשי ZX Spectrum שוודאי יבינו את הכוונה שלי:

  1. שפת תכנות קלה יחסית
  2. אפשרות הפעלה של הכל דרך ide (שלא אצטרך ללמד גם שורת פקודות)
  3. קל מאוד להגיע לתוצאות מהירות

ועלו מספר אפשרויות:

  1. love2d עם Lua
  2. pygame-zero עם Python
  3. processing עפ שפת תכנות מבוססת Java
  4. כמובן אותו ה־Scratch

התחלתי לחקור ופתחתי פרוייקט שכולל קוד המקור של כולם (מלבד Scratch)

מטרה - לכתוב משחק פשוט בו כדור נופל ממקום אקראי ומנסים תפוס אותו עם המשטח שמזזים אותו בעזרת מקשים. אם תופסים הניקוד עולה ומוצג למשתמש. הנה דוגמה של המחשק שבניתי ב־pygame zero:

תמונה

המשך...

תמיכה בחצובה או סיפורי הסבת indi ו-indigo לאנדרואיד

ב־יום חמישי, 7 בנובמבר 2024, מאת ארתיום; פורסם תחת: תכנה חופשית, לינוקס, פיתוח, תכנה ומחשבים, אסטרונומיה; ‏0 תגובות

מה שטוב בסטנדרטים זה שיש הרבה כאלה...

אחרי תקופה ארוכה של פיתוח תוכנה/אפליקציית OpenLiveStacker המיועדת לצילום אסטרונימי בזמן אמת, הגעתי לנקודה שמעבר לתמיכה במצלמה נדרשת תמיכה בחצובה ובמצלמה גנרית. אז איך מתחברים במשהו גנרי? משתמשים בממשק סטנדרטי! בעולם "חלונות" יש ASCOM. בעולם הלינוקס המצב נותן מגוון רחב של סטנדרטים

המשך...

למידת מכונה פתוחה באמת, האם אני נלחם בקרב עבוד מראש?

ב־יום שישי, 16 באוגוסט 2024, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, תכנה ומחשבים, בינה מלאכותית; ‏0 תגובות

לפני מספר שנים התחלתי פרוייקט dlprimitives - המימוש הבסיסי של פעולות Deep Learing ב־OpenCL. והמשכתי לתמיכה ב־OpenCL ב־pytorch. אני ממשיך לפתח את המודול של PyTorch על אש קטנה והאמת, הגעתי לביצועים מרשימים גם עבור כרטיסי nvidia וגם amd.

למה בעצם אני משקיע את זמני בזה:

  1. קודם כל, כל תעשיית ה־deep learning היום מבוססת על דברים סגורים. למרות שהכלים כמו pytorch הם פתוחים לחלוטין - למטה יושב הקוד של cudnn ששמור בכספת.
  2. למרות שיש עוד 2 שחקנים רציניים בשוק כרטיסי המסך (AMD ולאחרונה גם Intel) והקוד שלהם פתוח - כל אחד ממציא גלגל מחדש ועושה משהו משלו. למעשה אין שום דבר משותף בין הקוד שלהם. אם אני רוצה לשפר טכניקה קיימת או להביא איזה כלי חדש אני נתקל בבעיה רצינית:

    • אני חייב לשפר משהו שאין לי גישה אליו (cudnn) וזה מאוד קשה.
    • אם זה תופס צריך למעשה מספר מימושים לכל אחת מהפלטפורומ האלה.
  3. אם מישהו רוצה להשתמש במודלים מאומנים - המימוש הוא תלוי חומרת המשתשת - למעשה צריך לתמוך בכל תשתית בנפרד nvidia-cuda, amd-rocm, intel - xpu וב־apple עוד איזו שטות - כמובן אין שום הבטחה שזה למעשה יעבוד בכל מקום.

אז אני עובד על משהו שעובד על כולם OpenCL וגם מגיע בין 60% ל־80% ממה שאפשר הגיע עם המימוש המקורי (שזה cuda/rocm).

אני ממשיך לראות את amd משפרים את rocm מצד אחד (לפי שבוע התקנתי pytorch rocm על אובונטו 24.04 בצורה יחסית חלקה וזה פשוט עובד) ומצד שני הורסים אותו - כי מוציאים תמיכה בכרטיסי ישנים ותומכים באופן רשמי רק בדברים ייעודיים. למעשה rx6600xt של גם לא נתמך באופן רשמי וצריך להשתמש במשתנה סביבה שיתייחסו אליו כמו לכרטיס הנתמך

אני רואה ש־intel גם הולכים בכיוון זה ועל פניו אפשר גם לאמן היום על הכרטיסים שלהם. אבל הם מסתמכים על על טכנולוגיה נוספת שעוד פעם לא תואמת לשום דבר אחר.

כל ההשקעות של Intel ושל AMD הן למשהו מידי שיעשה טלאי אבל לעולם לא יפתור את הבעיה האמתית של העולם ה־DL.

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

טוב, נו. אני לפעמים מנסה להרים פרוייקטים שנראים בלתי אפשריים. האם זה יצליח? לא יודע - המשאבים שלי מוגבלים: שעה־שעתיים כמה פעמים בשבוע כשאני לא עסוק בדברים אחרים. אם היה לי צוות של 5-6 מפתחים שעובדים על זה במשרה מלאה - ללא ספק זה היה מצליח. אבל אין לי משאבים כאלה.

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

ועכשיו שאלה: מכירים שירות ענן שמאפשר לבנות חבילות ל־pip (רצוי גם לחלונות)

למה אני לא מרוויח כסף מאפליקציות שאני מפתח?

ב־יום חמישי, 14 בדצמבר 2023, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, אסטרונומיה; ‏0 תגובות

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

אנשים רבים שלא באים מתחום קוד פתוח שואלים אותי. למה אתה לא מוכר את האפליקציה? יכולת להרוויח מזה כסף! האומנם?

אז בוא נעשה ניתוח עסקי קצר בדיעבד

ניתוח הכנסות פוטנציאליות

נכנסתי ל־google analytics לעקוב אחר מספר המשתמשים בשנה האחרונה, הנה המספרים:

  • סה"כ כ־24,500 מתשמשים
  • בישראל 250 משתמשים בשנה האחרונה

אז אם הייתי גובה מכל אחד נגיד $5 (שזה מחיר מוגזם) אז על הנייר זה $122500. האם זה חישוב נכון?

ניכנס לניתוח לפי מערכת ההפעלה:

  • אנדרואיד זה כ־10,500 משתמשים
  • iOS זה כ־10,000 משתמשים
  • שאר זה משתמשים של מחשבים - לא רלוונטי לתחשיב

כבר הורדני כ־1/5 משתמשים וירדנו לכ־$100K שזה מספר מכובד.

אבל אם נסתכל על משתמשים בישראל - 250. במקרה קהילה של האסטרונומיה בארץ היא קטנה ורובינו מכירים זה את זה. לכן, היא מהווה מדגם נהדר. יש לי קבוצת ווטסאפ בשם "קבוצת התמיכה ב־AstroHopper" בה 15 חברים מהקהילה ישראלית (חלקם היו מעורבים בשלבי בטא מוקדמים)... כמי שיורד לתצפיות באופן (כמעט) קבוע ונפגש עם אנשים אני יכול להגיד שמספר המשתמשים ברשימת ווטסאפ הוא די מייצג - כי אני די מכיר את רובם. אז אולי פספסתי ואני נותן הערכת חסר אז נגיד יש לא 15 אלא 50 משתמשים (ומההכרות שלי עם הקהילה זה מספר מוגזם)

אז אם ניקח את זה כמדגם מייצר - כנראה בהערכה האופטימית ביותר, מתוך 20 אלף משתמשים ב־google analytics בפועל זה אולי 4000 משתמשים פעילים אמתיים. האם זה מספר קרוב מציאות?

אם נסתכל על מידע ב־google play של SkySafari Pro גרסה 6 ו־7 - יש להם כ־10 אלף הורדות. וזו אפליקציה הרבה יותר פופולרית מאסטרוהופר והרבה יותר מושקעת כי יש בה עוד המון פיצ'רים נוספים.

אז כנראה הערכה של 4000 משתמשים היא הערכת נכונה מבחינת סדר גודל. הייתי אומר אפילו הערכה אופטימית ביותר. אז לאיזה סכום הגענו (במקרה הטוב) של כ־$20K...

ניתוח הוצאות והשקעה

אני לא מחזיק ב־iOS ולא ב־Mac. לכן, כדי לתמוך בבניית אפליקציית ל־AppStore הייתי צריך לרכוש אותם. וגם להשקיע בפיתוח של אותה האפליקציה פעמיים - פעם עבור iOS ופעם לאנדרואיד. מחשב אפל הזול ביותר שאשפר למצוא היום הוא כ־3000₪ ונגיד לקנות טלפון יד שניה זה עוד 1000₪ שזה מביא למשהו כמו $1000 הוצאות עוד לפני שהרווחתי פרוטה. או להפסיד 1/2 מהכנסות או אופילו יותר.

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

פיתוח נוסף

אני משתמש במספר בסיסי נתונים זמינים:

  • OpenNGC זמין תחת CC By SA
  • בסיסי נתונים של קבוצות כוכבים שזמינות תחת GPL

שנהים דורשים פתיחת קוד המקור של האפליקציה, זאת אומרת אני צריך לעשות אחד משתיים

  • לבנות בסיסי נתונים בעצמי ע"י הצלבה של מספר רב של מקורות עם רישיונות יותר נוחים
  • לרכוש כאלה

הפיל שבחדר - אם האפליקציה לא הייתה חופשית האם היא הייתה מצליחה?

זאת שאלה נהדרת! אחרי שהתחלתי לכתוב אפליקציה גיליתי שיש אחת בשם SkEye שעושה משהו דומה מאוד ויש לה גרסה חינמית ופרו. אבל היא הסתמכה בעיקר על מגנטומטר ולפחות לי היא לא עבדה. אבל עוד פעם זו לא רק אפליקצית ניווט אלא עוד.

היום גיליתי עוד אחת ל־iOS שעושה משהו מאוד דומה (לא בחינם) ומסתבר שקיימת מ־2016! רק שלא שמעתי עליה וכמעט ואף אחד לא הזכיר אותה (וכבר שכחתי את שמה).

אם זאת לא הייתה אפליקציה חופשית אני לא חושב שהייתי מקבל סיוע כל־כך רחב מהקהילה בפיתוח ובהפצה. לפני כחצי שנה Youtuber בשם Reflacotor‏ עשה סקירה נהדרת של האפליקציה. אחת הסיבות שהוא התלהב ממנה שהאפליקציה הייתה קוד־פתוח וזמינה לכל. הסקירה הזו הקפיצה את תפוצה בסדר גודל.

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

נגיד היא הייתה בכל זאת מצליחה האם זה רווחי?

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

אז למה בכל זאת עשיתי את זה?

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

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

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

העמוד הבא

דפים

נושאים