ארכיון חודשי: דצמבר 2011

גרסה חדשה ל FPC JVM

ג'ונס שחרר הודעה לרשימת הדיוור של fpc-devel על כך שהוא שיחרר גרסה חדשה של FPC-JVM.

כזכור, הגישה הזו אומרת שFPC מאפשר לי ליצור קוד שJVM יכול להריץ בצורה טבעית.

בגרסה החדשה נוספה יכולת להדר קוד שיהיה ניתן להמרה נוחה לdalvik של אנדרואיד, ובעצם בנוסף ליכולת ליצור קוד טבעי (arm) לאנדרואיד, עכשיו יש גם יכולת בעצם לכתוב קוד שירוץ כאילו נכתב במקור בג'אווה.

בשביל לגרום לppcjvm להדר את הקוד לקבצי class ש dalvik אוהב יש להעביר את הפרמטר הבא:

ppcjvm -Tandroid ....

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

עוד תוספות ושינויים שנכנסו לגרסה הזו הם:

  • המהדר עכשיו מנקה כמו שצריך את קבצי ה j אלא אם הועבר פרמטר של a-.
  • עכשיו קובץ ה Makefile יוצר את ה rtl כמו שצריך עבור גרסת הג'אווה וגרסת האנדרואיד
  • תוקן קוד המתייחס לפרמטרים עם var או out בתוך פונקציות/פרוצדורות מקוננות
  • תוקן באג של try/except מקונן
  • נוספת פקודה למהדר Ctcompactintarrayinit-

הסיבה להוספה האחרונה היא בכך שJVM אינו תומך במערכים קבועים, כך שצריך ליצור קוד אשר יעשה את העבודה בתוך קובץ ה class, אך בגלל שגודל ה class יכול להיות עד בגודל של 64K של ByteCode, ובמידה ויש הרבה מערכים, הוא גם יכול לגלוש מכך, אז נוספה אפשרות שיוצרת קוד חדש, אשר פוטנציאלית איטי יותר, אבל יוצר קוד קטן יותר.

  • תוקן קוד של copy כאשר x שונה מ0.
  • הקוד של ה rtl נכנס לספרייה rtl/android/jvm כך שלא תהיה התנגשות במימוש קוד טבעי של android arm.

Common Table Expression

בתקן SQL 99, נוספה תמיכה לביטוי רב עוצמה אשר קיבל את השם Common Table Expression או CTE בקיצור.

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

CTE בעצם מאפשר לנו ליצור מעין טבלה זמנית עבור code block של SQL. כלומר נגיד ויש select קבוע שאני רוצה עליו לבצע עוד select, אבל הselect המקורי מכיל כל מיני תנאים וכו', ויותר מזה, יכול להיות שאני רוצה להשתמש באותה שאילתא ביותר ממקום אחד, אז CTE בעצם נכנס לשימוש. הוא יודע להגיע ב"טעם" רגיל וב"טעם" שהוא רקורסיבי:

with Machines as (
  select id, type, name, ip
from Computers
where type in (1, 8, 34) and ip like '192.168%'
);

select user
from CompanyUsers cu
left join Machines on cu.machine = Machines.id;

עוד צורת שימוש שיש ל CTE היא בצורה רקורסיבית על המידע:

with recursive
  dept_year_budget as (
    select fiscal_year,
           dept_no,
           sum(projected_budget) as budget
    from proj_dept_budget
    group by fiscal_year, dept_no
  ),
  dept_tree as (
    select dept_no,
           head_dept,
           department,
           cast('' as varchar(255)) as indent
    from department
    where head_dept is null
    union all
    select d.dept_no,
           d.head_dept,
           d.department,
           h.indent || '  '
    from department d
         join dept_tree h on d.head_dept = h.dept_no
  )
select d.dept_no,
       d.indent || d.department as department,
       dyb_2008.budget as budget_08,
       dyb_2009.budget as budget_09
from dept_tree d
     left join dept_year_budget dyb_2008
       on d.dept_no = dyb_2008.dept_no
       and dyb_2008.fiscal_year = 2008
     left join dept_year_budget dyb_2009
       on d.dept_no = dyb_2009.dept_no
       and dyb_2009.fiscal_year = 2009

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

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

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

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

Abbrevia

Abbrevia הוא סוג של toolkit עבור C++ Builder, Delphi, Kylix ו FPC/Lazarus אשר מספק רכיבים וספריות רבות לטיפול בפורמטי קיבוץ שונים כדוגמת ZIP, CAB, LZMA ואחרים.

הtoolkit הוא בעצם סדרת רכיבים בקוד פתוח, אשר חזרה להיות מפותחת אחרי קרוב לעשור, בה היא סתם שכבה בSourceForge. כמו כן, היא כיום עובדת במספר מערכות הפעלה כדוגמת Windows, Linux ו Mac OS-X.

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

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

חברת TurboPower היתה חברה כזו. החברה היתה מאוד מוכרת בעולם בשנות ה80 וה90 בעיקר. היא היתה חברה מאוד קטנה, אבל עם המון פיתוחים אשר שינו את עולם התכנות המקצועי לכל אלו אשר בחרו בדלפי או C++ Builder של בורלנד, ולפני כן גם ב Turbo Pascal ו Turbo C, וכן Borland Pascal ו Borland C.

בתחילת שנות ה2000, משהו כמו 2002, הודיעה החברה כי היא הולכת להסגר (השותפים בחברה החליטו לצאת לפנסייה עד כמה שאני זוכר) והם החליטו לשחרר כקוד פתוח את הספריות הכי נפוצות שלהם, וAbbrevia היתה אחת מהן. היו עוד מספר ספריות, כולל מסד נתונים בשם FlashFiler שהם פיתחו בעצמם.

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

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

לשטוף את הסבון עם מתכנתיו

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

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

אם באבטחת מידע, אנחנו קוראים לאלו שרק משתמשים במה שאחרים עושים Script Kiddies, אז לאנשי .NET האלו צריך להיות שם בסגנון Monkey puppets או משהו כזה (כל הזכויות לא שמורת). כי יש לנו Code Monkey למישהו שרק כותב קוד בלי להיכנס לעובי הקורה, אבל כאן, אפילו להבין מה הם עושים, זה לרוב יותר מידי עבורם, ולכן, הם בובות של Code Monkey כי אפילו Code Monkey זה מסובך מידי בשבילהם…

הפוסט נכתב בעקבות דרישה נוספת לכתוב פונקציות SOAP מול .NET, והתנשאות מטופשת של האנשים אשר אפילו אמרו שהבעיות שנתקלתי בהם קשורות לכך שאני לא מתכנת בשפה נורמאלית (למרות שניסיתי את העבודה עם soap4r, soapui, php soap, nusoap ועוד ספריית ג'אווה נוספת – ולכולן היו את אותן הבעיות מול ה wsdl). לאיזו רמה הגענו, מתכנתי .NET חושבים שהם מתכנתים נורמאליים וכל שאר התעשייה כמו גוגל, פייסבוק וכו' לא יודעים כלום מהחיים שלהם. זו הסיבה כנראה שיש כל כך הרבה מערכות מבוססות .NET בעולם של הרשתות החברתיות בניגוד לשאר הטכנולוגיות (או שלא).

ביקשתי מהCTO שאיתו התנהלתי ישירות לקבל את ה dump של בקשות תקינות, שאוכל לשים אותם ב telnet ושזה יעבוד לי. הוא בתגובה אמר לי כי אי אפשר להשתמש ב telnet בשביל לבצע בקשות SOAP. וכל ניסיונותי החוזרים לקבל את המידע עלו בתוהו.

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

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

סיפרתי לבוריס את הסיפור, ומסתבר שגם לו היה באותו הזמן אותו סוג כאב ראש. רק האנשים השתנו, אבל הסיפור זהה.

fpGUI 0.8 שוחררה

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

הפרוייקט fpGUI שחרר גרסה חדשה : 0.8. רשימת השינויים והתוספות: להמשיך לקרוא