Swush

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

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

ניקח לדוגמא את פיסת הXML הבאה (קוד אמיתי מההגדרות של טומקט):

[code lang="xml"]
factory
org.apache.catalina.users.MemoryUserDatabaseFactory
pathname
conf/tomcat-users.xml

[/code]

הרבה מלל כדי להגיד שיש דבר כזה UserDatabase, ויש בתוכו שני זוגות Key-value, לא?
אפשר גם לציין את אותו מידע כך:
[code lang="java"]
ResourceParams{
UserDatabase{
factory : org.apache.catalina.users.MemoryUserDatabaseFactory
pathname : conf/tomcat-users.xml
}
}
[/code]
יותר קומפקטי ופחות פלצני.
השפה שבה השתמשתי בפעם השניה היא Swush, שפה שהגדרתי ומימשתי בסופ"ש.
Swush (סוו'ש בעברית, נראה לי שאני אדבוק באנגלית), תומכת בהערות בסגנון C/C++ וbash:
[code]
// C++ single line comment
/* C multi-
line comment*/
# Bash style comments
[/code]

בנוסף, סטרינגים בSwush לא מחייבים גרשיים, אבל אם משתמשים בגרשיים אפשר להגדיר סטרינגים עם רווחים ואפילו שורה-חדשה בתוכם.
[code]
string1

"another string"

"multi
line
string"
[/code]

המימוש שלי לSwush הוא בשפת ג'אווה, אבל בהחלט אפשרי שיהיו מימושים בשפות נוספות (בין אם שלי או של אנשים אחרים).
Swush תומך ברשימה פשוטה של מפתח-ערך, למשל:
[code lang="java"]
host : "locahost"
port : 8080
[/code]
ככה שאפשר בקלות רבה להחליף אותו קבצי properties של ג'אווה.

מבחינת הקוד, השתדלתי שהוא יהיה מה שיותר פשו לשימוש.
אפשר ליצור אובייקט Swush בכמה צורות:
[code lang="java"]
Swush fromFile = new Swush(new File(filename));

Swush fromString = Swush.constructFromString("swush:rocks","UTF-8");

Swush usingCode = new Swush();
usingCode.add(new Swush("key","value"));
usingCode.add(new Swush("node"));
usingCode.getChildren(1).add(new Swush("key2", "value2"));
[/code]

אחת הפונקציות המעניינות של המימוש שלי היא פונקציית select, שמחזירה רשימה של צמתים שמתאימים לקריטריות שצויין, לדוגמא – אם יש לנו קובץ Swush כזה:
[code lang="java"]
addressbook
{
max_size : 30

item
{
phone : 123
name : "The dude"
address : "Multi
Line address"
}

item
{
phone : 3454
name : "Another dude"
address : unknown
}
}
[/code]
ואנחנו רוצים לגשת לצמתים של הItem, נוכל לעשות משהו כזה:
[code lang="java"]
Swush swush = new Swush(new File(filename));
List matchs = swush.select("addressbook.item");
[/code]
הרשימה שחוזרת תכיל את שני הצמתים המתאימים (מסוג item שנמצאים בתוך addressbook).
Swush ממומשת עם Antlr, וההגדרה שלה מאוד פשוטה, אפשר להעביר אותה בכמה דיאגרמות:



Swush משוחררת ברשיון BSD, ואפשר להוריד אותה מפה.

Facebook Comments

נפט

כלכליסט בכותרת שמדגימה כמה באמת מבינים שם בסוכנות הידיעות:
oil

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

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

Facebook Comments

מטריקס

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

Facebook Comments

hak5

כרגע ראיתי פרק של hak5, שעסק בDNS Tunneling כדי לגלוש בחינם במקומות עם WIFI סגור שמאפשרים DNS, וכן LinuxDNA – פרוייקט לאופטימיזציה של הקרנל של לינוקס עם ICC (הקומפיילר של אינטל).
אחלה תוכנית.
נראה לי שאני אתחיל לצפות בה באופן קבוע.

Facebook Comments

Ajax Terminal

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

Facebook Comments

ארדויינו

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

ארדויינו (Arduino) הוא לוח אלקטרוני ניתן לתכנות, שמיועד לאו דווקא לגיקים אלא גם לאמנים ומעצבים.
הלוח עצמו עולה כסף (לא יותר מדי, כ20 יורו לגרסא הבסיסית), אבל סביבת הפיתוח, התכנון של הלוח עצמו, העיצוב וכל השאר – הכל משוחרר ברשיונות חופשיים (GPL, LGPL וCC לפי הצורך).
הלוח קטן ואלגנטי:

אז למה זה טוב?
להמשיך לקרוא ארדויינו

Facebook Comments

גלקטיקה

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

מי שעוד לא ראה, שילך לראות. הפוסט מכיל ספויילרים.

טוב, מפה ואילך יש ספויילרים, הכניסה אסורה למי שלא ראה.

להמשיך לקרוא גלקטיקה

Facebook Comments