פלאנט תוכנה חופשית בישראל (Planet FOSS-IL)

28 May, 2017

Gabor Szabo

The phases of a crowdfunding campaign: first week

A week has passed since I launched the crowdfunding campaign for the Bailador book. I did not know what to expect so I am not sure how really to evaluate the results so far. The project is supported by 56 people giving $3,050 which is slightly more than 9% of the goal. I'd love to have the backing of 1,000 people. That would show that there is substantial interest in this subject.

For the full article visit The phases of a crowdfunding campaign: first week

28 May, 2017 09:06 AM

27 May, 2017

Hetz Ben Hemo

2 סקירות קצרות: iJoy EXO XL ו-NITECORE I4

כאחד שמאוד אוהב את הסיגריה האלקטרונית שלו והעשן שיוצא (כן, אני Cloud Chaser, מודה באשמה) – החלטתי לבדוק מה קורה עם המתחרים מ-iJoy. האם ה-EXO XL באמת יותר טוב ונותן תמורה יותר טובה מבחינת טעם עשן, אי-נזילות החומר וזרימת אויר מעולה?

התחלתי בסקירות שהופיעו ביוטיוב. בקופסת ה-EXO XL מגיעים 2 אטומייזרים. הראשון בעל סליל יחד ותפוקה נמוכה (עד 50 וואט) שאף אחד מהסוקרים (לפחות לפי מה שראיתי) לא אהב אותו וכולם עברו מיד לאטומייזר עם ה-3 סלילים. החברה טוענת כי האטומייזר XL C4 יכול לתת את טעם מעולה גם במתחים מופרכים עד 250 וואט. מי שיתנסה כמובן יגלה מהר מאוד שכדאי לו לרדת ל-180 וואט ומטה כדי לקבל את הטעם מהנוזל שהוא יצק לטנק.

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

כשמשווים את ה-EXO XL ל-TFV12 התוצאה שמקבלים (לפחות אצלי) היא חד משמעית: ה-TFV12 מוביל, הן בכמות העשן, והן בטעם. מכיוון שאני לוקח הרבה "שאכטות" פר דקה (לפעמים פעמיים שלוש בדקה – כמובן שלא כל היום 🙂 ) – גיליתי בעיה מאוד משמעותית: הסלילים מתחממים בעת הלחיצה וכשיוצא העשן מהפיה, אולם כשמנסים לקחת "שאכטה" נוספת לאחר מספר שניות – מקבלים מכת "עשן מר" (הטעם אולי מוכר לאלו שניסו לעבוד על Power גבוה מדי עם אטומייזר שצריך מתח נמוך בהרבה). ניסיתי להנמיך את העוצמה לכיוון ה-130-140 וואט, אבל עדיין מורגש הטעם המר כאילו משהו נשרף. בשבילי זו אכזבה רצינית מכיוון שרכשתי 3 סלילים נוספים (ולא, אני לא חושב שהכותנה כבר נשרפה הואיל ויש לי את הטנק XL בערך שבוע וחצי, טנקים עם אטומייזרים אחרים מחזיקים לי בשימוש רצוף בערך חודש ומעלה).

לסיכום: אם אתם מחפשים משהו כמו ה-TFV8 רק יותר "עדין" מבחינת כמות עשן ושימור הטעם – לכו על זה אבל אל תרכשו ערכת אטומייזרים נוספים לפני שתנסו את המכשיר.

המכשיר הבא שאני סוקר אינו אטומייזר או טנק או מוד כלשהו אלא דווקא .. מטען. ה-Nite Core i4 דגם 2016. קצת רקע: לאלו שברשותם מוד רשמי עם 2, 3 או 4 סוללות בוודאי מכירים את הנושא מקרוב: הטעינה איטית. ב-2 סוללות הטעינה תיקח קצת יותר ממחצית הלילה, ב-3 סוללות כל הלילה וב-4 סוללות – עדיף להטעין מהערב או להצטייד בסוללות חלופיות (גם ב-3 מומלץ שיהיו סוללות חלופיות). חיבור ה-USB שקיים במוד נותן מעט מאוד מתח: כמחצית (0.5) אמפר, ובגלל זה הטעינה לוקחת יותר. כיום כמובן חיבור ה-USB-C יכול להעביר עד 100 אמפר אך לשם כך יש לבנות לוח ומעגלים חדשים ולהוסיף Chip חדש והיצרנים עדיין לא הכניסו זאת, ולכן כשרוצים להטעין מודים של 3-4 סוללות, מומלץ להוציא את הסוללות ולהטעין במטען חיצוני.

מטען ה-Nite Core i4 דגם 2016 כולל יתרון גדול בכך שעוצמת הטעינה משתנה לפי כמות הסוללות שנמצאות במכשיר ולפי מצב הכמות שיש בכל סוללה, כלומר אם מכניסים סוללה אחת למכשיר, היא תיטען בעוצמה של 1.5 אמפר (פי 3 מחיבור המיקרו-USB), עם 2 סוללות העוצמה תהיה 0.75 אמפר (50% מעל חיבור מיקרו-USB) ו-3 סוללות יטענו במהירות 0.5 אמפר ואילו 4 סוללות יטענו במהירות יותר נמוכה ממיקרו USB – כ-0.375 אמפר, אבל ההבדל הגדול הוא שברגע שסוללה אחת נטענה, המכשיר משנה מיד את עוצמת הטעינה לשאר הסוללות ובנוסף – אפשר להשאיר את הסוללות במכשיר, הוא יודע מתי הן טעונות והוא מפסיק להטעין אותם ומנתק אליהן את הזרם. רק היום ביצעתי טסט – הכנסתי בשעה 19:45 למכשיר 2 סוללות לטעינה, ובשעה 22:20 כל הסוללות היו מלאות ומוכנות לשימוש חוזר.

לכן, אם אתם רוכשים סוללות נוספות, מומלץ לקנות בחבילה גם את המטען הנ"ל, במיוחד אם אתם "מעשנים כבדים" שהמוד שלהם "אוכל" את הסוללה כאילו אין מחר (כמו ה.. TFV12 עם אטומייזר ה-T12 בעל 12 הסלילים שפשוט "שותה" את הסוללות בקשית!)

הטקסט המלא

27 May, 2017 08:12 PM

25 May, 2017

Hetz Ben Hemo

סקירה עבור גיקים: Lenovo 510S

עד לאחרונה השתמשתי במחשב נייד מסוג IdeaPad S510p של לנובו. כשרכשתי אותו לפני בערך כ-3 שנים, לא חיפשתי משהו מיוחד. חיפשתי מחשב גדול (מה לעשות, קשה לי להסתדר עם צעצועים של 12 אינטש ומטה), עם כל החיבורים הנחוצים (2 כניסות USB, כניסת רשת LAN, כניסת כרטיס SD) וכמובן אפשרות להגדיל זכרון ולהחליף דיסק קשיח. במבחני סוללה הוא לא היה משהו (הוא הגיע ל-3-4 שעות) – אבל יחסית הוא עשה את העבודה.

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

וזה – לא היה קל. חשבתי תמיד לקחת כרומבוק אולם מחירי הכרומבוקים החלו לעלות לאחרונה ל-400-550 דולר ומעלה. כרומבוק בשבילי הוא מעולה (במיוחד עם גירסת Crouton האחרונה שמאפשרת לבצע אינטגרציה מלאה להפצות לינוקס שונות כולל גרפיקה בתצוגה הראשית מבלי לפתוח תצוגה אלטרנטיבית). הבעיה? משאבים פנימיים: לפעמים צריך להרים VM, להדגים קונטיינרים במסגרת העסק שלי ללקוחות, ורוב המעבדים שיש בכרומבוקים פשוט חלשים כדי להדגים VM עם אפליקציה (שלא לדבר על כך שיש מקסימום 4 ג'יגה זכרון ולא ניתן להרחיב).

הסתכלתי על כמה מחשבים ניידים שמיועדים לשוק הביתי. ראיתי כמה של HP (לא מתקרב אפילו עם מקל עקב בעיות חומרה), כמה של DELL (יש לי כמה חברים שרכשו כאלו וסבלו קשות בכל הקשור למעבדה), כמה של LENOVO עד שמצאתי קומבינציה מעניינת: ה-510S של לנובו. מעבד i5, זכרון 8 ג'יגה, דיסק SSD בגודל 256 ג'יגה (שניתן להחלפה), 3 כניסות USB, כניסת SD (גודל מלא, לא מיקרו), יציאת HDMI, מסך FULL HD IPS, מקלדת טובה עם תאורה אחורית, מצלמת 1.2 מגהפיקסל וכל זה במארז שנראה יפה. המחיר? 2540 שקל ב-KSP (יש הנחה של 100 שקלים כרגע – הם במבצעים על ציודים שונים).

בקיצור – רכשתי (כן, את הגירסה האדומה) ללא מערכת הפעלה (מגניב לראות את FreeDOS עולה..)

אז איך הצעצוע החדש?

מבחינת חומרה, הדברים פועלים די טוב למעט בעיות שהיו לי אתמול עם WiFi (גם בלינוקס וגם ב-Windows 10 Pro עם כל הדרייברים של לנובו). קיבלתי מהירויות זוועה של 8-10 מגהביט, בין אם התחברתי ב-2.4 ג'יגהרץ או 5 ג'יגהרץ. מכיוון שאני טיפוס שלא ממש חובב מעבדות מחשבים חיצוניות (תשאלו כמה אנשי IT ותראו שרבים מהם גם לא סובלים מעבדות כאלו), החלטתי לפרק את המחשב הנייד לחלקיו. פירקתי וחיברתי מחדש את ה-WiFi מהאנטנות והתושבת שלו (תושבת קניינית) והפעלתי עליו Fedora 25 ו.. הפתעה – מ-8 מגה עם ה-WiFi הפנימית המהירות עלתה ל-70  מגהביט. מרשים!

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

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

דיברתי על סקירה לגיקים, אז החלטתי לנסות את המערכת עם Ubuntu 16 ו-Fedora 25 (האחרון מותקן אצלי כרגע ואני כותב עם מערכת ההפעלה הזו את הפוסט הזה). כל הציוד נתמך מהרגע הראשון למעט כל ה-Gestures ש-Synaptics נותנים בחבילה (יכול להיות שזה עובד, אני מעדיף את ה-Trackpad בגירסה הקלאסית עם לחיצות על החלק התחתון וגלילה ב-2 אצבעות). נקודה שכנראה אנשי לינוקס יאהבו: החלק של ה"מקשים" ב-Trackpad (אין מקשים פיזיים, הכל לוח ברזל אחיד) מחולק במקום ל-2 – ל-3, כך שכפתור העכבר האמצעי (להדבקת טקסטים שסימנת) עובד מעולה ללא צורך של לחיצה על 2 הצדדים ביחד.

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

למשתמשי Windows: אם תתקינו Windows 10 אז המערכת אוטומטית תתקין להם את הדרייבר של Synaptics עם שלל Gestures. הבעיה שמצאתי עם הדרייבר הזה היא שלחיצות האגודל (אם אתם שמים את האגודל בצורה מאוזנת) אינם נרשמים נכונה כשמתכוונים ללחוץ כפתור עכבר ימני. רק לחיצה ישירה (אנכית) עובדת.

מבחינת חיי סוללה – אפשר בעזרת הורדת הבהירות ושימוש ב-PowerSave (גם ב-Windows וגם ב-Desktop Enviroments השונים בלינוקס) להגיע למשהו כמו 8-9 שעות (המחשב מכיל סוללת 2 תאים של 35 וואט/שעה), שזה לא רע בהתחשב במחיר של המחשב הזה. אם אתם עובדים בחושך, לחיצה על מקש FN ומקש רווח תפעיל את התאורה האחורית מתחת למקלדת. לחיצה נוספת תגביר את התאורה ולחיצה נוספת תכבה זאת. אגב, הפונקציונאליות הזו היא בחומרה כך שאין זה משנה איזו מערכת הפעלה תתקין (גם בקונסולה ללא Desktop) – הטריק הזה יעבוד. שימו לב שבשימוש בסוללה, התאורה האחורית יכולה "לאכול" בסביבות 20-30% מחיי הסוללה.

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

למעוניינים, הנה הקישור הישיר למחשב זה מאתר KSP (יש מספר דגמים בצבעים שונים עם דיסק SSD או מכני, עם Windows 10 או ללא מערכת הפעלה, עם כרטיס גרפי מובנה של אינטל או AMD).

הטקסט המלא

25 May, 2017 09:41 PM

24 May, 2017

Gabor Szabo

The phases of a crowdfunding campaign: launching

I am running a crowdfunding campaign to finance the writing of my book: Web Application Development in Perl 6 In this article I'll try to follow what's going on in the campaign and in my mind.

For the full article visit The phases of a crowdfunding campaign: launching

24 May, 2017 06:17 AM

18 May, 2017

Boris Shtrasman

SQL 2016 for linux

בשקט בשקט , בסיס הנתונים שאני מחבב (לפעמים) הקרויי Microsoft SQL Server מתחיל להיות מותאם למספר הפצות :

אובנטו , סוזה ,rhel sles ונראה שאפילו משהוא חושב על דביאן

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

עכשיו למה אנחנו צריכים MSSQL על הפצות לינוקס ? פשוט הרבה עסקים עובדים מול MSSQL והמרה של הקוד בייס שלהם לא משתלמת כלכלית. ברגע שבסיס הנתונים עובר לעבוד תחת לינוקס כולם (גם לקוחות mssql שרצים על לינוקס וגם לקוחות שרצים תחת על וינדוס ).

תוכן החבילה העיקרית הוא :

drwxr-xr-x root/root         0 2017-05-15 23:25 ./
drwxr-xr-x root/root 0 2017-05-15 23:25 ./lib/
drwxr-xr-x root/root 0 2017-05-15 23:25 ./lib/systemd/
drwxr-xr-x root/root 0 2017-05-15 23:25 ./lib/systemd/system/
-rw-r--r-- root/root 655 2017-05-15 23:25 ./lib/systemd/system/mssql-server.service
drwxr-xr-x root/root 0 2017-05-15 23:25 ./usr/
drwxr-xr-x root/root 0 2017-05-15 23:25 ./usr/share/
drwxr-xr-x root/root 0 2017-05-15 23:25 ./usr/share/man/
drwxr-xr-x root/root 0 2017-05-15 23:25 ./usr/share/man/man1/
-rw-r--r-- root/root 778 2017-05-15 23:25 ./usr/share/man/man1/mssql-conf.1.gz
-rw-r--r-- root/root 411 2017-05-15 23:25 ./usr/share/man/man1/sqlservr.1.gz
-rw-r--r-- root/root 6731 2017-05-15 23:25 ./usr/share/man/man1/sqlpackage.1.gz
drwxr-xr-x root/root 0 2017-05-15 23:25 ./usr/share/doc/
drwxr-xr-x root/root 0 2017-05-15 23:25 ./usr/share/doc/mssql-server/
-rw-r--r-- root/root 6231 2017-05-15 23:25 ./usr/share/doc/mssql-server/THIRDPARTYNOTICES.TXT.gz
-rw-r--r-- root/root 161 2017-05-15 23:25 ./usr/share/doc/mssql-server/changelog.Debian.gz
-rw-r--r-- root/root 4429 2017-05-15 23:25 ./usr/share/doc/mssql-server/LICENSE.TXT.gz
-rw-r--r-- root/root 37 2017-05-15 23:25 ./usr/share/doc/mssql-server/copyright
drwxr-xr-x root/root 0 2017-05-15 23:25 ./opt/
drwxr-xr-x root/root 0 2017-05-15 23:25 ./opt/mssql/
drwxr-xr-x root/root 0 2017-05-15 23:25 ./opt/mssql/lib/
-rw-r--r-- root/root 394530816 2017-05-15 23:25 ./opt/mssql/lib/sqlservr.sfp
-rw-r--r-- root/root 369760 2017-05-15 23:24 ./opt/mssql/lib/libunwind.so.8
drwxr-xr-x root/root 0 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/
-rwxr-xr-x root/root 92765 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/collations.txt
drwxr-xr-x root/root 0 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/loc/
drwxr-xr-x root/root 0 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/loc/mo/
-rw-r--r-- root/root 15588 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/loc/mo/mssql-conf-fr_FR.mo
-rw-r--r-- root/root 18933 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/loc/mo/mssql-conf-ru_RU.mo
-rw-r--r-- root/root 13327 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/loc/mo/mssql-conf-zh_TW.mo
-rw-r--r-- root/root 396 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/loc/mo/mssql-conf-en_US.mo
-rw-r--r-- root/root 15434 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/loc/mo/mssql-conf-es_ES.mo
-rw-r--r-- root/root 15378 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/loc/mo/mssql-conf-ko_KR.mo
-rw-r--r-- root/root 15333 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/loc/mo/mssql-conf-de_DE.mo
-rw-r--r-- root/root 13288 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/loc/mo/mssql-conf-zh_CN.mo
-rw-r--r-- root/root 16272 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/loc/mo/mssql-conf-ja_JP.mo
-rw-r--r-- root/root 14840 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/loc/mo/mssql-conf-pt_BR.mo
-rw-r--r-- root/root 15132 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/loc/mo/mssql-conf-it_IT.mo
-rwxr-xr-x root/root 9157 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/mssql-conf.py
-rwxr-xr-x root/root 313 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/invokesqlservr.sh
-rw-r--r-- root/root 24281 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/mssqlconfhelper.py
-rwxr-xr-x root/root 459 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/set-collation.sh
-rwxr-xr-x root/root 740 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/checkinstall.sh
-rwxr-xr-x root/root 10215 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/mssqlsettings.py
-rwxr-xr-x root/root 10763 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/mssqlsettingsmanager.py
-rwxr-xr-x root/root 115 2017-05-15 23:25 ./opt/mssql/lib/mssql-conf/checkrunninginstance.sh
-rw-r--r-- root/root 115310592 2017-05-15 23:24 ./opt/mssql/lib/system.common.sfp
-rw-r--r-- root/root 73728 2017-05-15 23:24 ./opt/mssql/lib/system.certificates.sfp
-rw-r--r-- root/root 49152 2017-05-15 23:25 ./opt/mssql/lib/secforwarderxplat.sfp
-rw-r--r-- root/root 8568832 2017-05-15 23:24 ./opt/mssql/lib/system.sfp
-rw-r--r-- root/root 19398656 2017-05-15 23:25 ./opt/mssql/lib/sqlpackage.sfp
-rw-r--r-- root/root 343296 2017-05-15 23:24 ./opt/mssql/lib/libsqlvdi.so
-rw-r--r-- root/root 318115840 2017-05-15 23:24 ./opt/mssql/lib/system.netfx.sfp
drwxr-xr-x root/root 0 2017-05-15 23:25 ./opt/mssql/bin/
-rwxr-xr-x root/root 983 2017-05-15 23:25 ./opt/mssql/bin/mssql-conf
-rwxr-xr-x root/root 21406504 2017-05-15 23:25 ./opt/mssql/bin/paldumper
-rwxr-xr-x root/root 12922 2017-05-15 23:25 ./opt/mssql/bin/crash-support-functions.sh
-rwxr-xr-x root/root 1652 2017-05-15 23:25 ./opt/mssql/bin/handle-crash.sh
-rwxr-xr-x root/root 873344 2017-05-15 23:25 ./opt/mssql/bin/sqlpackage
-rwxr-xr-x root/root 877440 2017-05-15 23:25 ./opt/mssql/bin/sqlservr
-rwxr-xr-x root/root 409 2017-05-15 23:25 ./opt/mssql/bin/compress-dump.sh


משום מה האורזים הלכו על opt ולא על תיקיות אחרות ,
תלויות :
 Version: 14.0.600.250-2
Architecture: amd64
Installed-Size: 859668
Depends: libunwind8, libnuma1, libc6, adduser, libjemalloc1, libc++1, gdb, debconf, libcurl3, hostname, openssl (>= 1.0.1), openssl (<= 1.1.0), python (>= 2.7.0), libgssapi-krb5-2, libsss-nss-idmap0, gawk, sed
Section: misc
Priority: extra
Description: Microsoft(R) SQL Server(R) Relational Database Engine
The mssql-server package contains the Microsoft(R) SQL Server(R) Relational Database Engine.


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

18 May, 2017 01:16 PM

09 May, 2017

Meir Kriheli

debian.org.il המחודש

debian.org.il היה חלק מה"חוב הטכני" שלי. מדובר באתר די פשוט שנבנה עם Django pre-1.0 ופייתון 2.6, והציג נהלים לקויים (כמו הכללת שם הפרוייקט ב־import).

לאחר שדרוג whatsup.org.il, אשר מארח גם את debian.org.il, הסביבה הוירטואלית נשברה (כמו גם דברים אחרים בשרת). החלטתי לנצל את ההזדמנות ולעדכן את הפרוייקט למשהו סביר יותר.

הקוד החדש באתר כולל:

הפריעה לי גם העובדה שהקוד מעולם לא פורסם (היה קובץ settings.py בודד, עם הסיסמאות בתוכו וכד'). גם נקודה זו טופלה והקוד זמין כעת בגיטהאב:

https://github.com/MeirKriheli/debian.org.il

09 May, 2017 02:41 PM

08 May, 2017

Hamakor

הודעה על אסיפה כללית – 18.5.2017

בתאריך 18.5.2017 בשעה 20:00 תכונס אסיפה כללית רגילה של עמותת המקור – עמותה ישראלית לתוכנה חופשית ולקוד – מקור פתוח (ע"ר).
אסיפת העמותה תתכנס במשרדי חברת מטיפיק, במגדל משה אביב קומה 51, דרך ז'בוטינסקי 7 רמת גן.

על סדר היום:
1. אישור דו"ח כספי ומילולי לשנת 2016. טיוטת הדו"חות נשלחה לחברי העמותה.
2. הצגת דו"ח ועדת ביקורת לשנת 2016.
3. הסמכת הועד לחתום על דו"חות משנים קודמות שאושרו כבר בידי אסיפות קודמות לצורך קבלת אישור ניהול תקין.
4. הפסקת חברותם של חברי העמותה שלא שילמו את דמי החבר שלהם עד ליום כינוס האסיפה, בהתאם לסעיף 15ב'(1) לתקנון העמותה. תינתן אפשרות לכל חבר המועמד להפסקת חברות להסדיר את מעמדו או להשמיע את טענותיו בנושא בפני הועד בטרם קיום האסיפה או בפני האסיפה, בהתאם לסעיף 15ג' לתקנון.
5. מחילה על חובות עבר של דמי חבר — בהתאם לנוהג שהשתרש מאז החלטת האסיפה על שינוי תקנון ב־2008, חבר העמותה שלא משלם דמי חבר אינו צובר חובות. שינוי התקנון הנ״ל לא נכנס לתוקף, ולפי התקנון שבתוקף החובות נצברו. האסיפה תתבקש להחליט למחול על כל החובות על דמי חבר, כך שמי שהיה חבר בעבר יוכל לחדש את חברותו בתשלום דמי החבר לשנה הנוכחית מבלי להדרש לשלם חובות בגין שנים עברו.

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

08 May, 2017 10:29 AM

05 May, 2017

Hamakor

סיכום מפגש פיתוח, ה־3 במאי 2017

שלום לכולם,

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

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

(הודעה לגבי מיקומו תצא בקרוב)

שי גובר, ירון שהרבני ועמותת המקור

05 May, 2017 04:57 PM

22 April, 2017

Ilya Sher

About declarative frameworks and tools

This post is a reply to “just use Terraform” recommendation I’ve just seen. I hope more people will benefit from my perspective if it’s posted here. There is plenty of marketing behind most of the tools I mention here. It’s all rosy, see the “Life before Puppet” video. Let’s balance this marketing bullshit a bit.

Think twice before using declarative framework/tool

Terraform, CloudFormation, Puppet, Chef as any other declarative frameworks/tools take control away from you. They work fine for “hello world” examples. Then there is life where you need something these frameworks did not anticipate and you are sorry you have not coded everything yourself from the start. Now you are stuck with these tools and you will be paying for it in your time and money. Working around limitations of such tools is a pain.

I am using CloudFormation and have used Puppet and Chef in the past. These tools do have their place. In my opinion it’s a very limited set of scenarios. Terraform, CloudFormation, Puppet and Chef are used much more widely than they should be.

These tools have some value but too often people neglect the cost which in many cases outweighs the value. Most of the cost comes from inflexibility. Terraform and CloudFormation are so limited that people frequently use another tool for generating these. That adds another bit to the cost.

I’m hearing frequently from a friend (sorry, can’t name him) how much they suffer from Terraform’s inflexibility. Inflexibility can not be fixed because it’s a declarative framework. Unfortunately they are so invested in Terraform that they will continue to spend hundreds of hours to fight it. Chef is causing trouble there too, community Cookbooks proved to be a mismatch for the needs and sanity of the engineers there.

… and there is this gem

A key component of every successful Puppet implementation is access to a knowledgeable support team

That’s from https://puppet.com/support-services/customer-support/support-plans

Are you sure you want to use Puppet? Apparently you can’t do it well without their support… Just saying…

Is one of these tools right for you?

Regular considerations for choosing a tool apply. See my older post “Prove your tool is the right choice“.

Expected replies and my replies to those

You don’t get it.

OK

You don’t understand these tools.

OK

You are not using these tools right / as intended.

OK

Are you crazy? You want to code everything yourself?

Let’s take it to the extreme: no new code should be written. No libraries, no frameworks. Because everything already exists. Sounds about right.

People smarter than you have figured it all out, use their tools

Smarter people don’t always produce better solutions or solutions that fit your use case. Most of the time smart people will produce smart solutions… and then there are people that don’t usually think in graphs and are really puzzled when debugging Puppet cyclic dependency errors for example.

Most of the code you need is already written, don’t waste time and money, use it! Community Cookbooks and modules are great!

This is marketing bullshit. Don’t buy it! It’s often more expensive to adopt a code that does not meet your exact needs and is much more complex that you need (because it should support multiple platforms and use cases) than to write your own. I have seen suffering followed by usage of community Cookbooks/modules followed by in-house rewrite or fork.

Don’t you care about the next guy? Work with standard tools!

Let’s do some math. Team of two works for a year. They are (very modest estimation) 10% more productive because they have coded whatever they needed and were not fighting with the tools. Even when wrongfully assuming that custom solution is harder to understand for the 3rd guy that joined the team after one year, how much is it harder? Is it more than 300 hours harder?

Update following responses on Reddit

2017-04-28

2 totally different toolsets – infrastructure orchestration (Terraform, Cloudformation), and Configuration Management (Puppet, Chef)… — (/u/absdevops)

Yes. What is common to all these tools is declarative style and their usage: these tools are typically run using CLI.

All these tools have three axes that I consider:

  1. “Input” axis: What’s the input of these tools?
    1. Configuration format
    2. Half-baked programming language that was probably never indented to be a programming language
    3. Real programming language
  2. “Calling” axis: framework vs library (typical usage)
  3. “TCO” axis: TCO vs other solutions, especially vs the other solution that is always available – code the subset of the functionality that you need yourself

I’d like to make sure that it’s clear that the tools mentioned in this article have different positions on the 3 axes and are not equal in the value they provide you in your specific situation.

The main point of the article is that while these tools differ on axes 1 and 3, they are all limiting because conceptually, they are all frameworks. You pass your execution into the tool and it does a lot. Here is where you loose your flexibility as opposed to using a library. You have relatively little control of what happens inside the tool.

I must strongly disagree with Terraform being put in the list – its a great base tool with limitations that can be worked around. — (/u/absdevops)

I don’t want to work around limitations. It seems to be the norm for these tools. I’d rather have a library that misses parts that I’d code myself. Working around limitations in my opinion is generally much worse than missing functionality (depends on specific circumstances of course).

Regarding inflexibility – it’s probably the most flexible tool of the bunch — (/u/absdevops)

Please note we are still comparing between the tools that all use limiting paradigm: frameworks

I will also duel anyone to the death for preference of Cloudformation syntax to Terraform — (/u/absdevops)

We are talking about the “Input” axis I mentioned above. Yes, Terraform syntax apart from being more aesthetically pleasing is somewhat closer to “Half-baked programming language that was probably never indented to be a programming language” while CloudFormation is somewhat closer to “Configuration format”.

I totally disagree with points made about having to generate Terraform manifests. … generate what you need specifically, and hand it off to Terraform, much like making an API call to a library. — /u/SlinkyAvenger

There is a huge difference in the amount of work done by typical API call and what these tools do once you call them. With more granular API calls you decide if and when you do specific calls and what do you do in between the calls – it’s much more flexible.

I’m also a big proponent of Puppet — /u/SlinkyAvenger

One of the low value tools from my perspective. I’ll explain. On the “Input” axis, it’s half-baked programming language. Better than configuration file but still loses to Chef for example. On the “TCO” access, I really think that Puppet and Chef are not good alternatives to custom scripts in most cases. Scripts by the way also win on the “Calling” axis, which means flexibility.

I’d really like to hear what you’re honestly going back to puppet support for. — /u/neoghostz

We don’t. When we suffered while working with Puppet, we knew that support will not solve our problems. Some crappy community modules can not be solved by support. Breakage on modules versions updates – same. Librarian, more complexity on top of complexity – same. The above quote about support (“A key component of every successful Puppet implementation is access to a knowledgeable support team”) was just to highlight that guys at Puppet think people can’t use it without support. This is just a humorous point and not really important.

What is the point of this article? It basically dumps on Terraform, CF, Puppet, Chef, etc., but offers no actual criticism (other than a vague ‘it takes away control’ statement) or, perhaps more importantly, alternatives. — /u/cryonine

The point is that all these tools would have been better if they would be implemented as libraries on top of real programming languages, where you call the parts that you need instead of one “do everything” call.

With the exception of Chef, these tools use either configuration files as input or configuration-file-almost-a-programming-language format. It’s always the same path:

  1. We need small limited DSL it’s so academically beautiful, we can prove theorems about this.
  2. Oh wait, there are real world scenarios where it’s not enough, damn these complaining engineers.
  3. Let’s add stdlib
  4. Let’s add proper loops
  5. Now we have a half-baked programming language.

Elaborating on taking control away from you. You get convoluted things like this:

Alternatives

For Puppet and Chef, I have not seen a single system where my estimated TCO of these tools would be better than a bunch of idempotent modular bash scripts which I use. It did not take much time to write these. Some Python is used for configuration generation (json / jinja templates + environment data).

With Cloudformation and Terraform it’s not that simple. I’m mostly amazed that nobody does libraries which would just provide declarative primitives, not frameworks where you feed everything you need via one call. I am working on one but it is really strange for me that I haven’t heard already about such library for Python or Ruby.

Terraform … vastly superior to any other alternate out there — /u/cryonine

Not sure I agree 100% because it depends on situation but I can imagine many situations where it’s correct. The important thing here is that I think that all current alternatives are not so good.

How is it wrongful to assume that a custom solution is harder to understand? That’s completely accurate. — /u/cryonine

Custom solution is simpler. Do you really need documentation for 19 lines of bash code that installs Nginx and another 29 that do a restart that handles leaking file descriptors? You will definitely need documentation of 2000+ lines of Chef cookbook or Puppet module that install Nginx and … oh wait… how do I reload Nginx and then conditionally (if enough file descriptors leaked) restart it? Time to dive in 🙂

I do imagine how custom solution can be complicated (read harder to maintain and higher TCO) if done by unprofessional people. In some cases it might be better for them to use a framework. On the other hand, they might stuck when trying to do something advanced with the framework. Really depends on the situation.

While “use standard tools” generally sounds right, I have seen too much convoluted solutions using “standard tools” because of the inflexibility. People were trying to work around the limitations. Comparing top-down execution of simple script to workarounds for these tools, it’s much simpler to wrap your head around the scripts. I have recently passed one of my clients to the next guy. I have asked him how he is doing and he told me that he was happy to have simple custom solution over complex frameworks. TCO has many components. Choosing “standard tools” does not always outweigh other aspects.

 


Have a nice day and a productive life!


22 April, 2017 07:36 AM

19 April, 2017

Lior Kaplan

Open source @ Midburn, the Israeli burning man

This year I decided to participate in Midburn, the Israeli version of burning man. Whiling thinking of doing something different from my usual habit, I found myself with volunteering in the midburn IT department and getting a task to make it an open source project. Back into my comfort zone, while trying to escape it.

I found a community of volunteers from the Israeli high tech scene who work together for building the infrastructure for Midburn. In many ways, it’s already an open source community by the way it works. One critical and formal fact was lacking, and that’s the license for the code. After some discussion we decided on using Apache License 2.0 and I started the process of changing the license, taking it seriously, making sure it goes “by the rules”.

Our code is available on GitHub at https://github.com/Midburn/. And while it still need to be more tidy, I prefer the release early and often approach. The main idea we want to bring to the Burn infrastructure is using Spark as a database and have already began talking with parallel teams of other burn events. I’ll follow up on our technological agenda / vision. In the mean while, you are more than welcome to comment on the code or join one of the teams (e.g. volunteers module to organize who does which shift during the event).

 

 


Filed under: Israeli Community

Full text

19 April, 2017 03:01 PM

Shlomi Noach

Practical Orchestrator, BoF, GitHub and other talks at Percona Live 2017

Next week I will be presenting Practical Orchestrator at Percona Live, Santa Clara.

As opposed to previous orchestrator talks I gave, and which were either high level or algorithmic talks, Practical Orchestrator will be, well... practical.

The objective for this talk is that attendees leave the classroom with a good grasp of orchestrator's powers, and know how to set up orchestrator in their environment.

We will walk through discovery, refactoring, recovery, HA. I will walk through the most important configuration settings, share advice on what makes a good deployment, and tell you how we and others run orchestrator. We'll present a few scripting/automation examples. We will literally set up orchestrator on my computer.

It's a 50 minute talk and it will be fast paced!

ProxySQL & Orchestrator BoF

ProxySQL is all the rage, and throughout the past 18 months René Cannaò and myself discussed a few times the potential for integration between ProxySQL and Orchestrator. We've also received several requests from the community.

We will run a BoF, a very informal session where we openly discuss our thoughts on possible integration, what makes sense and what doesn't, and above all else would love to hear the attendees' thoughts. We might come out of this session with some plan to pick low hanging fruit, who knows?

The current link to the BoF sessions is this. It seems terribly broken, and hopefully I'll replace it later on.

GitHub talks

GitHub engineers will further present these talks:

Related

See you in Santa Clara!

 

19 April, 2017 10:05 AM

17 April, 2017

Oz Nahum

Why I still persist on not using systemd

The following screenshot of a systemd issue reported on github saysit all. I don't care if systemd is technically superior, the way it's being developed is truely bothering. It's leadership is insisting on being blunt ingoring users, misleading and even wrong. continue reading...

17 April, 2017 02:36 PM

15 April, 2017

Lev Meirovitch

Sneaking features through the back door

Sometimes programming language developers decide that certain practices are bad, so bad that they try to prevent their use through the language they develop. For example: In both Java and C# multiple inheritance is not allowed. The language standard prohibits it, so trying to specify more than one base class will result in compiler error. […]

15 April, 2017 05:24 PM

07 April, 2017

Amir Aharoni

Amir Aharoni’s Quasi-Pro Tips for Translating the Software That Powers Wikipedia

As you probably already know, Wikipedia is a website. A website has content—the articles; and it has user interface—the menus around the articles and the various screens that let editors edit the articles and communicate to each other.

Another thing that you probably already know is that Wikipedia is massively multilingual, so both the content and the user interface must be translated.

Translation of articles is a topic for another post. This post is about getting all of the user interface translated to your language, as quickly and efficiently as possible.

The most important piece of software that powers Wikipedia and its sister projects is called MediaWiki. As of today, there are 3,335 messages to translate in MediaWiki, and the number grows frequently. “Messages” in the MediaWiki jargon are strings that are shown in the user interface, and that can be translated. In addition to core MediaWiki, Wikipedia also has dozens of MediaWiki extensions installed, some of them very important—extensions for displaying citations and mathematical formulas, uploading files, receiving notifications, mobile browsing, different editing environments, etc. There are around 3,500 messages to translate in the main extensions, and over 10,000 messages to translate if you want to have all the extensions translated. There are also the Wikipedia mobile apps and additional tools for making automated edits (bots) and monitoring vandalism, with several hundreds of messages each.

Translating all of it probably sounds like an enormous job, and yes, it takes time, but it’s doable.

In February 2011 or so—sorry, I don’t remember the exact date—I completed the translation into Hebrew of all of the messages that are needed for Wikipedia and projects related to it. All. The total, complete, no-excuses, premium Wikipedia experience, in Hebrew. Every single part of the MediaWiki software, extensions and additional tools was translated to Hebrew, and if you were a Hebrew speaker, you didn’t need to know a single English word to use it.

I wasn’t the only one who did this of course. There were plenty of other people who did this before I joined the effort, and plenty of others who helped along the way: Rotem Dan, Ofra Hod, Yaron Shahrabani, Rotem Liss, Or Shapiro, Shani Evenshtein, Inkbug (whose real name I don’t know), and many others. But back then in 2011 it was I who made a conscious effort to get to 100%. It took me quite a few weeks, but I made it.

Of course, the software that powers Wikipedia changes every single day. So the day after the translations statistics got to 100%, they went down to 99%, because new messages to translate were added. But there were just a few of them, and it took me a few minutes to translate them and get back to 100%.

I’ve been doing this almost every day since then, keeping Hebrew at 100%. Sometimes it slips because I am traveling or I am ill. It slipped for quite a few months because in late 2014 I became a father, and a lot of new messages happened to be added at the same time, but Hebrew is back at 100% now. And I keep doing this.

With the sincere hope that this will be useful for translating the software behind Wikipedia to your language, let me tell you how.

Preparation

First, let’s do some work to set you up.

Priorities, part 1

The translatewiki.net website hosts many projects to translate beyond stuff related to Wikipedia. It hosts such respectable Free Software projects as OpenStreetMap, Etherpad, MathJax, Blockly, and others. Also, not all the MediaWiki extensions are used on Wikimedia projects; there are plenty of extensions, with thousands of translatable messages, that are not used by Wikimedia, but only on other sites, but they use translatewiki.net as the platform for translation of their user interface.

It would be nice to translate all of it, but because I don’t have time for that, I have to prioritize.

On my translatewiki.net user page I have a list of direct links to the translation interface of the projects that are the most important:

I usually don’t work on translating other projects unless all of the above projects are 100% translated to Hebrew. I occasionally make an exception for OpenStreetMap or Etherpad, but only if there’s little to translate there and the untranslated MediaWiki-related projects are not very important.

Priorities, part 2

So how can you know what is important among more than 15,000 messages from the Wikimedia universe?

Start from MediaWiki most important messages. If your language is not at 100% in this list, it absolutely must be. This list is automatically created periodically by counting which 600 or so messages are actually shown most frequently to Wikipedia users. This list includes messages from MediaWiki core and a bunch of extensions, so when you’re done with it, you’ll see that the statistics for several groups improved by themselves.

Now, if the translation of MediaWiki core to your language is not yet at 18%, get it there. Why 18%? Because that’s the threshold for exporting your language to the source code. This is essential for making it possible to use your language in your Wikipedia (or Incubator). It will be quite easy to find short and simple messages to translate (of course, you still have to do it carefully and correctly).

Getting Things Done, One by One

Once you have the most important MediaWiki messages 100% and at least 18% of MediaWiki core is translated to your language, where do you go next?

I have surprising advice.

You need to get everything to 100% eventually. There are several ways to get there. Your mileage may vary, but I’m going to suggest the way that worked for me: Complete the easiest piece that will get your language closer to 100%! For me this is an easy way to strike an item off my list and feel that I accomplished something.

But still, there are so many items at which you could start looking! So here’s my selection of components that are more user-visible and less technical, sorted not by importance, but by the number of messages to translate:

I put MediaWiki core last intentionally. It’s a very large message group, with over 3000 messages. It’s hard to get it completed quickly, and to be honest, some of its features are not seen very frequently by users who aren’t site administrators or very advanced editors. By all means, do complete it, try to do it as early as possible, and get your friends to help you, but it’s also OK if it takes some time.

Getting All Things Done

OK, so if you translate all the items above, you’ll make Wikipedia in your language mostly usable for most readers and editors.

But let’s go further.

Let’s go further not just for the sake of seeing pure 100% in the statistics everywhere. There’s more.

As I wrote above, the software changes every single day. So do the translatable messages. You need to get your language to 100% not just once; you need to keep doing it continuously.

Once you make the effort of getting to 100%, it will be much easier to keep it there. This means translating some things that are used rarely (but used nevertheless; otherwise they’d be removed). This means investing a few more days or weeks into translating-translating-translating.

You’ll be able to congratulate yourself not only upon the big accomplishment of getting everything to 100%, but also upon the accomplishments along the way.

One strategy to accomplish this is translating extension by extension. This means, going to your translatewiki.net language statistics: here’s an example with Albanian, but choose your own language. Click “expand” on MediaWiki, then again “expand” on “MediaWiki Extensions”, then on “Extensions used by Wikimedia” and finally, on “Extensions used by Wikimedia – Main”. Similarly to what I described above, find the smaller extensions first and translate them. Once you’re done with all the Main extensions, do all the extensions used by Wikimedia. (Going to all extensions, beyond Extensions used by Wikimedia, helps users of these extensions, but doesn’t help Wikipedia very much.) This strategy can work well if you have several people translating to your language, because it’s easy to divide work by topic.

Another strategy is quiet and friendly competition with other languages. Open the statistics for Extensions Used by Wikimedia – Main and sort the table by the “Completion” column. Find your language. Now translate as many messages as needed to pass the language above you in the list. Then translate as many messages as needed to pass the next language above you in the list. Repeat until you get to 100%.

For example, here’s an excerpt from the statistics for today:

MediaWiki translation stats exampleLet’s say that you are translating to Malay. You only need to translate eight messages to go up a notch (901 – 894 + 1). Then six messages more to go up another notch (894 – 888). And so on.

Once you’re done, you will have translated over 3,400 messages, but it’s much easier to do it in small steps.

Once you get to 100% in the main extensions, do the same with all the Extensions Used by Wikimedia. It’s over 10,000 messages, but the same strategies work.

Good Stuff to Do Along the Way

Never assume that the English message is perfect. Never. Do what you can to improve the English messages.

Developers are people just like you are. They may know their code very well, but they may not be the most brilliant writers. And though some messages are written by professional user experience designers, many are written by the developers themselves. Developers are developers; they are not necessarily very good writers or designers, and the messages that they write in English may not be perfect. Keep in mind that many, many MediaWiki developers are not native English speakers; a lot of them are from Russia, Netherlands, India, Spain, Germany, Norway, China, France and many other countries, and English is foreign to them, and they may make mistakes.

So report problems with the English messages to the translatewiki Support page. (Use the opportunity to help other translators who are asking questions there, if you can.)

Another good thing is to do your best to try running the software that you are translating. If there are thousands of messages that are not translated to your language, then chances are that it’s already deployed in Wikipedia and you can try it. Actually trying to use it will help you translate it better.

Whenever relevant, fix the documentation displayed near the translation area. Strange as it may sound, it is possible that you understand the message better than the developer who wrote it!

Before translating a component, review the messages that were already translated. To do this, click the “All” tab at the top of the translation area. It’s useful for learning the current terminology, and you can also improve them and make them more consistent.

After you gain some experience, create a localization guide in your language. There are very few of them at the moment, and there should be more. Here’s the localization guide for French, for example. Create your own with the title “Localisation guidelines/xyz” where “xyz” is your language code.

As in Wikipedia, Be Bold.

OK, So I Got to 100%, What Now?

Well done and congratulations.

Now check the statistics for your language every day. I can’t emphasize how important it is to do this every day.

The way I do this is having a list of links on my translatewiki.net user page. I click them every day, and if there’s anything new to translate, I immediately translate it. Usually there is just a small number of new messages to translate; I didn’t measure precisely, but usually it’s less than 20. Quite often you won’t have to translate from scratch, but to update the translation of a message that changed in English, which is usually even faster.

But what if you suddenly see 200 new messages to translate? It happens occasionally. Maybe several times a year, when a major new feature is added or an existing feature is changed.

Basically, handle it the same way you got to 100% before: step by step, part by part, day by day, week by week, notch by notch, and get back to 100%.

But you can also try to anticipate it. Follow the discussions about new features, check out new extensions that appear before they are added to the Extensions Used by Wikimedia group, consider translating them when you have a few spare minutes. At the worst case, they will never be used by Wikimedia, but they may be used by somebody else who speaks your language, and your translations will definitely feed the translation memory database that helps you and other people translate more efficiently and easily.

Consider also translating other useful projects: OpenStreetMap, Etherpad, Blockly, Encyclopedia of Life, etc. Up to you. The same techniques apply everywhere.

What Do I Get for Doing All This Work?

The knowledge that thanks to you people who read in your language can use Wikipedia without having to learn English. Awesome, isn’t it? Some people call it “Good karma”.

Oh, and enormous experience with software localization, which is a rather useful job skill these days.

Is There Any Other Way in Which I Can Help?

Yes!

If you find this post useful, please translate it to other languages and publish it in your blog. No copyright restrictions, public domain (but it would be nice if you credit me and send me a link to your translation). Make any adaptations you need for your language. It took me years of experience to learn all of this, and it took me about four hours to write it. Translating it will take you much less than four hours, and it will help people be more efficient translators.


Filed under: Free Software, localization, Wikipedia

07 April, 2017 07:34 PM

06 April, 2017

Shlomi Noach

"MySQL High Availability tools" followup, the missing piece: orchestrator

I read with interest MySQL High Availability tools - Comparing MHA, MRM and ClusterControl by SeveralNines. I thought there was a missing piece in the comparison: orchestrator, and that as result the comparion was missing scope and context.

I'd like to add my thoughts on topics addressed in the post. I'm by no means an expert on MHA, MRM or ClusterControl, and will mostly focus on how orchestrator tackles high availability issues raised in the post.

What this is

This is to add insights on the complexity of failovers. Over the duration of three years, I always think I've seen it all, and then get hit by yet a new crazy scenario. Doing the right thing automatically is difficult.

In this post, I'm not trying to convince you to use orchestrator (though I'd be happy if you did). To be very clear, I'm not claiming it is better than any other tool. As always, each tool has pros and cons.

This post does not claim other tools are not good. Nor that orchestrator has all the answers. At the end of the day, pick the solution that works best for you. I'm happy to use a solution that reliably solves 99% of the cases as opposed to an unreliable solution that claims to solve 99.99% of the cases.

Quick background

orchestrator is actively maintained by GitHub. It manages automated failovers at GitHub. It manages automated failovers at Booking.com, one of the largest MySQL setups on this planet. It manages automated failovers as part of Vitess. These are some names I'm free to disclose, and browsing the issues shows a few more users running failovers in production. Otherwise, it is used for topology management and visualization in a large number of companies such as Square, Etsy, Sendgrid, Godaddy and more.

Let's now follow one-by-one the observations on the SeveralNines post.

Flapping

orchestrator supports an anti-flapping mechanism. Once an automated failover kicks off, no additional automated failover will run on the same cluster for the duration of a pre-configured <code>RecoveryPeriodBlockSeconds</code>.  We, for example, set that time to 1 hour.

However, orchestrator also supports acknowledgements. A human (or a bot, for that matter, accessing the API or just running the command line) can acknowledge a failover. Once a failover is acknowledged, the block is removed. The next incident requiring a failover is free to proceed.

Moreover, a human is always allowed to forcibly invoke a failover (e.g. via orchestrator -c graceful-master-takeover or  orchestrator -c force-master-takeover). In such case, any blocking is ignored and orchestrator immediately kicks in the failover sequence.

Lost transactions

orchestrator does not pull binlog data from the failed master and only works with the data available on the replicas. There is a potential for data loss.

Note: There was actually some work into a MHA-like synching of relay logs, and in fact most of it is available right now in orchestrator, synching relaylogs via remote SSH and without agents. See https://github.com/github/orchestrator/issues/45 for some pointers. We looked into this for a couple months but saw some dangers and issues such as non-atomic relay log entries in RBR and others. We chose to put this on-hold, and I advise to not use this functionality in orchestrator.

Lost transactions, notes on semi-sync

Vitess have contributed a semi-sync failover mechanism (discussion). So you are using semi-sync? That's wonderful. You've failed over and have greatly reduced the amount of lost data. What happens with your new setup? Will your recovery re-apply semi sync? Vitess's contribution does just that and makes sure a new relica takes the semi-sync role.

Lost transactions, notes on "most up to date replica"

There is this fallacy. It has been proven to be a fallacy many time in production, that I've witnessed. I'm sure this happened somewhere else in the universe that I haven't witnessed.

The fallacy says: "when master fails, we will promote the most up-to-date replica". The most up-to-date may well be the wrong choice. You may wish to skip and lose the most up-to-date replica. The assumption is a fallacy, because many times our production environment is not sterile.

Consider:

So you'd rather lose the most up-to-date replica than lose the other 10 replicas you have.

orchestrator understands all the above and makes the right call. It would promote the replica that would ensure the survival of your fleet, and prefers to lose data.

orchestrator would not promote that replica.

Let's look at something crazy now:

orchestrator makes that calculation. Hey, the same applies for STATEMENT and ROW based replicas. Or maybe you have both 5.7 and RBR experiments (tsk tsk tsk, but life is challanging) at the same time. orchestrator will still pick the replica whose promotion will get the majority of your fleet intact.

orchestrator can, but prefer not to promote it. But then, it also supports a 2 step promotion. If possible, it would first promote that most up-to-date replica from the other DC, then let local DC replicas catch up, then reverse replication and place a local replica on top, making the master on local DC again.

I cannot stress enough how useful and important this is.

This conveniently leads us to...

Roles

Fallacy: using configuration to white-list or black-list servers.

You'd expect to overcome the above 5.7 or ROW etc. issues by carefully marking your servers as blacklisted.

We've been there. This works on a setup with 10 servers. I claim this doesn't scale.

Again, I wish to be clear: if this works for you, great! Ignore the rest of this section. I suggest that as you grow, this becomes more and more a difficult problem. At the scale of a 100 servers, it's a serious pain. Examples:

You can invest in automating the reconfiguration of servers; I've been there as well, to some extent. This is a difficult task on its own.

Also consider how flexible your tools are: suppose you reconfigure; how easy it is for your tools to reload and pick the new config?

How easy it is to restart your HA services? Can you restart them in a rolling fashion, such that at any given point you have HA up and running?

orchestrator recognizes those crazy 5.7 -ROW-replication filters topologies by magic. Well, not magic. It just observes the state of the topologies. It learns the state of the topologies, so that at time of crash it has all the info. Its logic is based on that info. It knows and understands replication rules. It computes a good promotion path, taking data centers and configurations into consideration.

Initially, orchestrator started with blacklists in configuration. They're still supported. But today it's more about labels.

Instead of saying "this server is a backup server and should never be promoted" in configuration -- (and that's possible to do!), orchestrator lets you dynamically announce that this server should not be promoted. Such that maybe 10 minutes ago this wasn't a backup server, but now it is. You can advertise that fact to orchestrator. We do that via:

orchestrator -c register-candidate -i {::fqdn} --promotion-rule=${promotion_rule}

where ${promotion_rule} is candidate, neutral or must_not. We run this from cron, every couple minutes. How we choose the right rule comes from our service discovery. orchestrator is always up-to-date (up to a couple minutes) at worst of role changes (and urgent role changes get propagated immediately).

Also, each host can self-declare its role, so that orchestrator discovers the role on discover, as per DetectPromotionRuleQuery. Vitess is known to use this approach, and they contributed the code.

Network partitioning

First, about general failure detection.

orchestrator uses a holistic approach to detecting failures, and instead of justifying that it is a really good approach, I will testify that it is. orchestrator's accuracy in recognizing a failover scenario is very high. Booking.com has X,000 MySQL servers in production. at that scale, servers and networks break enough that there's always something breaking. Quoting (with permission) Simon J. Mudd from Booking.com:

We have at least one failure a day which it handles automatically. that’s really neat. people don’t care about dead masters any more.

orchestrator looks not only at the master, but at its replicas. If orchestrator can't see the master, but the replicas are happily running and replicating, then it's just orchestrator who can't see the master. But if orchestrator doesn't see the master`, and all the replicas are broken, then there's a failover scenario.

With ClusterControl, there seems to be danger of false positives: "...therefore it can take an action if there are network issues between the master and the ClusterControl host."

As for fencing:

MHA uses multiple nodes for detecting the failure. Especially if these nodes run on different DCs, this gives MHA a better view when fencing is involved.

Last September we gathered at an improvised BoF session on Percona Live Amsterdam. We were looking at observing a failure scenario where fencing is involved.

We mostly converged onto having multiple observers, such as 3 observers on 3 different data centers, a quorum of which would decide if there's a failure scenario or not.

The problem is difficult. If the master is seen by 2 nodes, but all of its replicas are broken, does that make a failure scenario or not? What if a couple replicas are happy but ten others are not?

orchestrator has it on the roadmap to run a quorum based failover decision. My estimation is that it will do the right thing most times and that it would be very difficult to push towards 99.99%.

Integration

orchestrator provides HTTP API as well as a command line interface. We use those at GitHub, for example, to integrate orchestrator into our chatops. We command orchestrator via chat and get information via chat.

Or we and others have automated, scheduled jobs, that use the orchestrator command line to rearrange topologies.

There is no direct integration between orchestrator and other tools. Recently there have been requests to integrate orchestrator with ProxySQL. I see multiple use cases for that. Plug: in the upcoming Percona Live conference in Santa Clara, René Cannaò and myself will co-present a BoF on potential ProxySQL-orchestrator integration. It will be an open discussion. Please come and share your thoughts! (The talk hasn't been scheduled yet, I will update this post with the link once it's scheduled).

Addressing the issue of read_only as an indicator to master/replica roles, please see the discussion on https://github.com/sysown/proxysql/issues/789. Hint: this isn't trivial and many times not reliable. It can work in some cases.

Conclusion

Is it time already? I have much to add; but let's stay focus on the SeveralNines blog. Addressing the comparison chart at the "Conclusion" section:

Replication support

orchestrator supports failovers on:

GTID support is ongoing (recent example). Traditionally orchestrator is very focused on Pseudo-GTID.

I should add: Pseudo-GTID is a thing. It runs, it runs well. Pseudo-GTID provides with almost all the Oracle GTID advantages without actually using GTID, and without GTID limitations. The obvious disclaimer is that Pseudo-GTID has its own limitations, too. But I will leave the PSeudo-GTID preaching for another time, and just note that GitHub and Booking.com both run automated failovers based on Pseudo-GTID.

Flapping

Time based blocking per cluster, acknowledgements supported; human overrides permitted.

Lost transactions

No checking for transactions on master

Network Partitioning

Excellent false positive detection. Seems like other tools like MRM and ClusterControl are following up by adopting the orchestrator approach, and I'm happy for that.

Roles

State-based automatic detection and decision making; also dynamic roles via advertising; also support for self- declaring roles; also support for configuration based black lists

Integration

HTTP API, command line interfaces. No direct integration with other products. Looking into ProxySQL with no promises held.

Further

If you use non-GTID replication, MHA is the only option for you

That is incorrect. orchestrator is an excellent choice in my biased opinion. GitHub and Booking.com both run orchestrator automated failovers without using GTIDs.

Only ClusterControl ... is flexible enough to handle both types of GTID under one tool

That is incorrect. orchestrator supports both types of GTID. I'm further working towards better and better supports of Oracle GTID.

...this could be very useful if you have a mixed environment while you still would like to use one single tool to ensure high availability of your replication setup

Just to give you an impression: orchestrator works on topologies mixed with Oracle and MariaDB servers, normal replication and binlog servers, STATEMENT and ROW based replication, three major versions in the same cluster (as I recall I've seen that; I don't run this today), and mixed combination of the above. Truly.

Finally

Use whatever tool works best for you.

Oh, and I forgot!

Please consider attending my talk, Practical Orchestrator, where I will share practical advice and walkthough on `orchestrator setup.

06 April, 2017 01:08 PM

03 April, 2017

Lev Meirovitch

Putting it out there…

When I first discovered Linux and the world of Free Software, I was already programming in the Microsoft ecosystem for several years, both as a hobby, and for a living. I thought switching to writing Linux programs was just a matter of learning a new API. I was wrong! Very wrong! I couldn’t find my […]

03 April, 2017 09:04 PM

01 April, 2017

Meir Kriheli

מצב התרגום לעברית של Django 1.11

את התרגום של Django 1.10 פספסתי עקב עומס. התחלתי לתרגם לקראת השחרור הצפוי של Django 1.11, ביום שלישי הרביעי באפריל. הפעם התרגום עמד על 93%.

נכון ליום שבת, הראשון באפריל בנובמבר התרגום עומד על 100% עבור:

נשארו בחוץ, שוב, עקב חוסר זמן והיקף המשימה:

01 April, 2017 03:27 PM

25 March, 2017

Ilya Sher

NGS unique features – improving NodeJS require()

Background: what is NGS?

NGS, the Next Generation Shell is a (work in progress) shell and a programming language built ground up for systems engineering tasks. You can think of it as bash that’s designed today: sane syntax, data structures, functional programming, extensibility, cloud in mind, declarative primitives.

What’s good in NodeJS’ require()

I like most of how require() works in JavaScript. I’m not talking in this post about npm, just NodeJS require() function. require() does not pollute your namespace, you just get a reference, it’s simple to use and easy to reason about.

const a = require('cool-aws-wrapper');
// Can not be done easily with AWS SDK:
a.deleteRoute53Record('testing25.example.com');

What’s there to improve in require() ?

NodeJS modules are usually fall into one of the categories:

  1. Class definition / big library that manages it’s own namespace. These usually end with module.exports = MyClass. No problem here.
  2. Group of functions or classes. These usually end with module.exports = { func1, func2, func3, ...} lists (ES6 syntax, otherwise written as module.exports =  { func1: func1, ... } ) which I think are cumbersome.

How require() and modules look in NGS?

Note that require() in NGS is work in progress and it doesn’t have much of the functionality that NodeJS provides. I just started with things that bothered me the most.

Consistent with other places in NGS, require() returns the last evaluated expression. NodeJS for example returns module.exports which you must explicitly set as the result of require().

I think of modules primary as a namespaces. Creating a namespace in NGS has a syntax: ns { ... } .

Combining require() behaviour of returning last evaluated expression and namespace syntax, typical NGS module consists of single top level expression which evaluates to a namespace. The whole module file can look like this:

ns {

  global init

  type Vpc
  type Subnet

  F init(v:Vpc) {
    ...
  }

  F _helper_func(s:Str) { ... }

  MY_CONST = 42

  F ok() {
    echo("OK")
  }

}

Let’s ignore the global for now, it’s about how methods and types’ instances creation are implemented in NGS. Anything defined inside the ns { ... } is exposed as namespace member so usage of the above module could look like this:

{
  m = require('mymodule.ngs')
  vpc = m::Vpc()
  echo(m::MY_CONST)
  m::ok()
}

As you probably guessed, the :: operator is the namespace member access operator.

There is no need to explicitly state what module/namespace exports. That’s the improvement over NodeJS’ require().

How ns works and more options for the curios

ns { … } returns a Hash

As stolen from NodeJS, the namespace syntax (ns { ... }) returns a Hash. In NodeJS, require() typically returns JavaScript Object which is close enough for the purpose of this post.

About :: operator

The namespace member access operator :: is actually a Hash key access operator. It is helpful because the regular syntax for accessing members is not always a good fit for namespaces. The regular member access syntax is dot (.) but the dot syntax is also a function call: myobj.field – is a field/key/attribute access but myobj.func() is equivalent to func(myobj). For example, m::ok() will call the ok function defined in the module, m.ok() will call the function ok in current lexical environment with m as parameter.

As a bonus, since :: is an operator, it is implemented as function call. This means you can define how :: works with types that you define and modify how :: works with existing types.

ns { … } syntax implementation

For simplicity of implementation and absence of obvious reasons against, ns { ... } syntax is just a syntactic sugar for defining anonymous function without parameters and calling it immediately. The though behind this decision was simple: “I need to implement namespaces. Let’s see where I have them already. Oh, namespaces are already implemented in functions. This is so convenient, I can use this mechanism with minimal effort”.

How ns knows what to return?

ns is mostly a syntactic hack:

  1. Inside the ns body, the first statement, before any use-supplied statements is _exports = {} which sets the local variable _exports to an empty Hash.
  2. Any assignment and function definition also set _exports["something"]. MY_CONST = 42 becomes MY_CONST = 42;  _exports["MY_CONST"] = MY_CONST;
  3. Exception to the rule above are variables and functions with names starting with underscore (_). They are not automatically added to _exports. This for example is why _exports itself is not exported.
  4. Last statement, after all user-supplied statements is _exports.

The behavior I just described looks like sane defaults to me. As we all know, the life is usually more complex than hello world examples and customizations are need. Here are two ways to customize the resulting namespace.

  1. return your_expr – since ns is just a function, you can use return at any point to return your own custom namespace.
  2. manipulate _exports however you want towards the end of ns body. For example after _exports .= filterv(Type) only types will be exported. _exports.filterk(/^pub_/) will only export symbols (keys) that have names that start with pub_ .

Improvement suggestions are welcome! Have a nice day!


25 March, 2017 01:57 PM

21 March, 2017

Boris Shtrasman

כל הכבוד לספק הטלפוניה שלי

כתבתי בעבר הסתייגות לגבי השימוש בערוץ הנתונים בשעת חירום, אבל זכרתי שהודעות בערוץ ה CB אמורות עדיין לעבוד גם אם יש שימוש בערוץ הנתונים.

שנים האמנתי שלא שניתן לשבור Cell Broadcast וגם ערוץ נתונים בזמן חירום, אבל אני חייב להגיד לספק הטלפוניה תודה שלימדתם אותי שזה אפשרי - מתברר שיש אנשים שיכולים להרוס Public Warning System שעובדת שנים.

זה התחיל מזה שבזמן שבדקו את מערכבת ה PWS לא היתה הודעת CB, גם אפליקציות התראות מצב חירום שתקו. מזל שזה היה בדיקה ולא מצב חירום אמיתי.

בהתחלה האשמתי את systemd שהוא לא הפעיל נכון, או לא הפעיל כלל את ה timer והservice.

לכן בדקתי שהקבצים במקומות הנכונים ושהכל תקין מבחינתו:

find /etc/systemd/system/  -name *pws* -print
/etc/systemd/system/pws.timer
/etc/systemd/system/timers.target.wants/pws.timer
/etc/systemd/system/pws.service

$cat /etc/systemd/system/pws.timer 
[Unit]
Description=Public Warning System Timer

[Timer]
OnUnitActiveSec=5s
OnBootSec=100s

[Install]
WantedBy=timers.target

$cat /etc/systemd/system/pws.service
[Unit]
Description=Public Warning System Alert

[Service]
Type=oneshot
ExecStart=/bin/bash /usr/local/bin/parse_alerts.sh http://pws/WarningMessages/Alert/alerts.json

$systenctl status pws.timer
● pws.timer - Timed alert check
Loaded: loaded (/etc/systemd/system/pws.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Tue 2017-03-21 11:06:50 IST; 1s ago

Mar 21 11:06:01 pc systemd[1]: Started Public Warning System Timer


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


הקו שאני מדבר עליו מתחבר ב UMTS תחת דור ה "3.5G".
התחברות מבוצעת ע"י wvdial.

ביצעתי מספר בדיקות להבין מהיכן מגיעה הבעיה בערוץ הנתונים :

ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 192.168.255.238 icmp_seq=17 Packet filtered
^C
--- 8.8.8.8 ping statistics ---
157 packets transmitted, 0 received, +1 errors, 100% packet loss, time 159696ms

חשוב לזכור שהכתובות אצל ספק הטלפוניה שלי הן תחת 10.144.0.0/16 המשכתי לראות מאיפה זה מגיעה וקיבלתי :
mtr --report-wide --show-ips 8.8.8.8
Start: Tue Mar 21 11:46:45 2017
HOST: pc Loss% Snt Last Avg Best Wrst StDev
1.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
2.|-- 10.192.192.149 0.0% 10 49.7 59.7 46.8 92.0 16.7
3.|-- 10.192.192.150 0.0% 10 48.5 64.9 47.0 92.7 18.7
4.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0


ping 192.168.255.238
PING 192.168.255.238 (192.168.255.238) 56(84) bytes of data.
64 bytes from 192.168.255.238: icmp_seq=1 ttl=253 time=285 ms
64 bytes from 192.168.255.238: icmp_seq=2 ttl=253 time=303 ms
64 bytes from 192.168.255.238: icmp_seq=3 ttl=253 time=272 ms

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.6.6.6 0.0.0.0 UG 0 0 0 ppp0
10.6.6.6 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0

mtr --report-wide --show-ips 192.168.255.238
Start: Tue Mar 21 11:40:55 2017
HOST: pc Loss% Snt Last Avg Best Wrst StDev
1.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
2.|-- 10.192.192.149 0.0% 10 51.1 52.2 48.7 55.9 2.4
3.|-- 192.168.255.238 0.0% 10 57.2 63.5 50.1 93.7 16.0

sudo nmap -sV 192.168.255.238

Starting Nmap 7.40 ( https://nmap.org ) at 2017-03-21 11:37 IST
Nmap scan report for 192.168.255.238
Host is up (0.064s latency).
Not shown: 999 closed ports
PORT STATE SERVICE VERSION
5222/tcp filtered xmpp-client

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 294.32 seconds


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

לאחר חצי יום שלא הייתה גלישה פניתי לשירות לקוחות במייל ובטלפון.

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

לא משנה ששלחתי קובץ pcap  ויש לי כתובת IP (שמגיבה כמו גדולה בתוך הרשת שלהם)

צילום מסך :




לאחר שלא הסתדרתי עם ספק הטלפוניה התחלתי לגגל לגבי CB.

 ומתברר שתאוריתית ניתן לקבל את זה דרך gammu (לא פלא , gammu יודע לעשות המון דברים גם ככה) :
פה יש תסריט דרך gist : 

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

21 March, 2017 09:41 PM

20 March, 2017

Lior Kaplan

הקמת פרוייקטים וארגונים מבוססי קוד פתוח

Cloudify ו-Red Hat נתנו חסות/אירוח להרצאה של Marc Cohn, סגן נשיא לאסטרטגיה רשתות של Linux Foundation. הרצאה שסוקרת את ההתפחות בתחומי הרשתות וענני המחשוב שמתבססים עליהן.

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

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

ביקשתי את השקפים שמרק השתמש בהם… אנסה להרחיב קצת ברגע שהשקפים יהיו זמינים לציבור.


תויק תחת:Free Software in Business

20 March, 2017 01:22 PM

28 February, 2017

Oz Nahum

coverage reporting and logging without a webservice

For quite a while now I wanted to have a cheap replacement for collecting and tracking coverage of codes I work on. Finally, I found a nice way to record and track coverage reporting inside git itself in a semi-automatic or completely automatic way. continue reading...

28 February, 2017 10:30 PM

16 February, 2017

Itzik Kotler

The Key To Cybersecurity: Shared Intelligence And Industry Cooperation

Chicago in the 1930s was a hive of organized crime where the bad guys always had the upper hand. As dramatized by the film "The Untouchables," lawman Eliot Ness confides to Officer Jim Malone that he is prepared to do “everything within the law” to take down Al Capone. But streetwise Malone tells Ness that, to win, he must be prepared to do more. “He pulls a knife, you pull a gun. He sends one of yours to the hospital, you send one of his to the morgue. That’s the Chicago way.”

Like ‘30s Chicago, the dark web is crawling with global crime syndicates, and everyone I've talked to says fighting the Chicago way sounds appealing. The problem is that the same laws that make hacking a crime also make it a crime to retaliate.

Read full article at Forbes here

Full text

16 February, 2017 12:12 AM

23 January, 2017

Guy Rutenberg

`rsync` and FAT File-Systems

I’m using rsync to sync files from my computer to a FAT formatted SD card. Using the --update flag to rsync makes it “skip files that are newer on the receiver”. It seems that it should work as follows: After the first sync, any subsequent syncs will only transfer those files which changed in the meantime. However, I noticed that transfer times are usually longer than expected, which led me to think that things are not working as they should.

As --update relies only on modification date, obviously something is wrong with it. After ruling out several other possibilities, I’ve guessed that the modification date of some files get mangled. A quick check about FAT revealed that FAT can only save modification times in 2 second granularity. I’ve also used rsync’s --archive flag, which among other things attempts to preserve modifications times of the files it copies. But what about FAT’s lower granularity for modification time? That was apparently the culprit. Some files when copied got a modification time which was up to 1 second before the original modification time! Hence, every time I’ve synced, from rsync’s perspective, the target was older than the source, and hence needs to be overwritten.

This can be demonstrated by the following session:

$ dd if=/dev/urandom of=test-even bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 6.20716 s, 16.9 MB/s
$ cp test-even test-odd

$ touch -t 201701180000.00 test-even 
$ touch -t 201701180000.01 test-odd

$ stat -c %Y test-*
1484690400
1484690401

We’ve created two files test-even and test-odd with random content. We’ve set the modification time of test-even to be on an even second, and for test-odd to be on an odd second (one second apart). Simply syncing the files to a FAT partitioned device works as expected:

$ rsync -av --update test-{even,odd} /media/guyru/4E09-6457
sending incremental file list
test-even
test-odd

sent 209,766,550 bytes  received 54 bytes  7,627,876.51 bytes/sec
total size is 209,715,200  speedup is 1.00

Resyncing immediately also works:

$ rsync -avv --update test-{even,odd} /media/guyru/4E09-6457
sending incremental file list
delta-transmission disabled for local transfer or --whole-file
test-even is uptodate
test-odd is uptodate
total: matches=0  hash_hits=0  false_alarms=0 data=0

sent 78 bytes  received 136 bytes  428.00 bytes/sec
total size is 209,715,200  speedup is 979,977.57

Both files are reported as being up-to-date. But what happens if we unmount and remount the device and then sync?

$ umount /media/guyru/4E09-6457 
$ udisksctl mount --block-device /dev/disk/by-uuid/4E09-6457 
Mounted /dev/sdd1 at /media/guyru/4E09-6457.

$ time rsync -avv --update test-{even,odd} /media/guyru/4E09-6457
sending incremental file list
delta-transmission disabled for local transfer or --whole-file
test-even is uptodate
test-odd
total: matches=0  hash_hits=0  false_alarms=0 data=104857600

sent 104,883,314 bytes  received 131 bytes  7,769,144.07 bytes/sec
total size is 209,715,200  speedup is 2.00

This time test-odd was reported as needing to be updated. So what changed? My guess is that while the device was mounted, modifcation dates were cached using normal granularity. Once I’ve remounted the file-system, the cache was purged, the the low-granularity modification date was used. That meant test-odd now had a modificaiton time which was one second before the original.

So how can it be avoided? Probably the trivial solution is to tell rsync not to copy over the modification date. This means that the copied files would probably anyway get a new modification time which is more than 1 second later than the original, hence even when rounding the modification time as FAT does it will still work. But a much better solution is built right into rsync: --modify-window

When comparing two timestamps, rsync treats the timestamps as
being equal if they differ by no more than the modify-window
value. This is normally 0 (for an exact match), but you may
find it useful to set this to a larger value in some situations.
In particular, when transferring to or from an MS Windows FAT
filesystem (which represents times with a 2-second resolution),
–modify-window=1 is useful (allowing times to differ by up to 1
second).

By using --modify-window=1 we can overcome the problem, as the files will be deemed as modified at the same time. Indeed it solves the problem:

$ rsync -avv --update --modify-window=1 test-{even,odd} /media/guyru/4E09-6457
sending incremental file list
delta-transmission disabled for local transfer or --whole-file
test-even is uptodate
test-odd is uptodate
total: matches=0  hash_hits=0  false_alarms=0 data=0

sent 82 bytes  received 140 bytes  444.00 bytes/sec
total size is 209,715,200  speedup is 944,663.06

23 January, 2017 06:45 PM

13 January, 2017

Ram on Agmon

סיכום שנה שנת 2016 + מצבה של התוכנה החופשית

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

הטקסט המלא

13 January, 2017 12:10 PM

01 January, 2017

Guy Rutenberg

Let’s Encrypt: Reload Nginx after Renewing Certificates

Today I had an incident which caused my webserver to serve expired certificates. My blog relies on Let’s Encrypt for SSL/TLS certificates, which have to be renewed every 3 months. Usually, the cronjob which runs certbot --renew takes care of it automatically. However, there is one step missing, the server must reload the renewed certificates. Most of the time, the server gets reloaded often enough so everything is okay, but today, its been a quite a while since the last time since the nginx server was restarted, so expired certificates were served and the blog became unavailable.

To workaround it, we can make sure nginx reloads it configuration after each successful certificate renewal. The automatic renewal is defined in /etc/cron.d/certbot. The default contents under Debian Jessie are as follows:

# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc.  Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot && perl -e 'sleep int(rand(3600))' && certbot -q renew

The last line makes sure certificate renewal runs twice a day. Append --renew-hook "/etc/init.d/nginx reload" to it, so it looks like this:

0 */12 * * * root test -x /usr/bin/certbot && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "/etc/init.d/nginx reload"

The --renew-hook runs the next argument after each successful certificate renewal. In our case we use it to reload the nginx configuration, which also reloads the newly renewed certificates.

01 January, 2017 08:44 PM

17 December, 2016

ik

ניתוח מחרוזות חלק א' התאוריה (על רגל אחת)

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

על פניו, זה נשמע די קל ופשוט, אני מוצא משהו המוגדר כ"גבול", ואז אני מחפש על זה משמעות נכון? ובכן, מסתבר שזה לא כזה פשוט. יותר מזה, גיליתי שישנם 2 סוגים של "שפות" כאשר רוצים לנתח מידע – אחת נקראת "שפה דטרמיניסטית" והשנייה "שפה לא דטרמיניסטית". באנגלית הם קיבלו את השמות Deterministic language ו Nondeterministic . כאשר מדברים עליהם, מדברים על הבנת ההקשר (context).

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

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

כיצד מחשב יבין זאת, כשפה אנושית?

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

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

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

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

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

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

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

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

עכשיו שאלה – כאשר מדובר בדף HTML, האם מדובר בשפה דטרמיניסטית או לא?


תויק תחת:regex, טכנולוגיה, פיתוח, קוד פתוח, תוכנה, תכנות

17 December, 2016 07:16 PM

08 December, 2016

ik

מתכנת IT

הרבה שנים שאני מנסה להסביר לאנשים מה המקצוע שלי. אני מנסה להסביר כי המקצוע שלי הוא "מתכנת IT", אבל אנשים חושבים כי אני מדבר על DevOps.
התשובה היא לא, זה לא DevOps.

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

עכשיו אשאל אתכם שאלה: האם איש DBA שייך לקבוצה הזו? התשובה היא כן. האם הוא איש DevOps? התשובה היא לא.

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

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

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

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

האם איש רשתות (כזה המקים רשתות, משחיל כבלים, ומגדיר ציוד), יודע כיצד TCP/IP Stack עובד? אולי. האם הוא יודע עכשיו לכתוב מערכת אשר יודעת לפתוח socket ולהעביר מידע? רוב הסיכויים שלא, אבל אם כן, זה לא המומחיות שלו, והוא יעשה את זה פחות טוב מאשר מתכנת שהמומחיות שלו זה socket. לא בגלל שמסובך לעשות זאת, אלא משום שיש עוד ניואנסים על גבי זה אשר צריך לקחת בחשבון. למשל האם צריך TCP Keep-Alive? האם צריך לשנות פרגמנטציה ברמה של תוכנה ולא של TCP? כל אלו הם התפקיד של המתכנת, אבל לא של איש רשתות.

עולם ה IT הוא ענק, ומכיל בתוכו מגוון עצום של תתי מקצועות.

אז מה הכוונה שלי, כאשר אני אומר שאני מתכנת IT?

אני יודע להשתמש ולהעביר מידע ממקום למקום, בצורה המתאימה ביותר לצורך ושימוש מסוים. עבורי מסד נתונים, sockets, ממשק web, שיחת טלפון וכיוב', הם כולם by product של הצורך להעביר מידע. אני מבין המון איך טלפוניה עובדת, כי זו תת ההתמחות שלי במשך 10 שנים, אבל טלפוניה דורשת ממני עוד המון דברים בנוסף:

והרשימה עוד גדולה מאוד יחסית.
אבל כל הרשימה הזו היא רשימה של by-product לדבר אחד – להעביר מידע ממקור x למקור y ולפעמים למספר מקורות, ולדעת להשתמש במידע הזה, או פשוט להנגיש אותו לשימוש.
זו אסופה של תכונות שמאפשרות לי לספק צרכים, אבל הם לא העיקר, אלא האמצעי. העיקר הוא הבנה של סוגי מידע והיכולת להתמודד איתו היא שהופכת אותי להיות מתכנת IT.
כלומר אני משתמש בהרבה תכונות של עולם ה IT בשביל להשיג מטרה של עבודה עם מידע.

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

אז אני מתכנת IT, מה המקצוע שלכם?


תויק תחת:it, Operating Systems, אבטחת מידע, אינטרנט, טכנולוגיה, טלפוניה, מסדי נתונים, פיתוח, קוד פתוח, תוכנה, תכנות, תקשורת

08 December, 2016 10:54 AM

18 October, 2016

PyCon Israel

Pycon Israel 2016 wrap up

A little less than six months ago, we held the first PyCon in Israel. To our dismay, it took us this long to post all the videos from the event, but now they’re finally up, and you can finally catch up on The Track Not Taken.

We’d like to take this opportunity to clear the 2016 table and summarize the conference, to give it some closure.

The conference was a lot of work and fun to organize, and truly wonderful to witness. We’ve had:

Over and beyond the hard data, there was a great feeling of a community coming together.

There’s a few points we want to discuss in more details:

Diversity

We made a conscious effort to make the conference more welcoming to diverse populations. This included a well-defined Code of Conduct, as well as reaching out to specific communities, which are usually underrepresented in technical conferences. This included, of course, the cooperation with Django Girls Tel Aviv, who were invited to the conference; we did not collect the statistics of visitor gender, but we have reason to believe it was significantly more balanced than usual. We also reached out to some other groups who were less clearly visible. By all the feedback we got, everybody felt very welcome.

To our regret, we could not show the same level of diversity among the speakers. Only 3 of the 32 accepted talks were presented by women, and none of these were Israeli. Further, we did not have a travel-support plan for speakers, and partly as a result of that, we did not have any speaker from the less-privileged parts of the world. We still have some way to go there.

We intend to keep pursuing diversity in future editions of PyCon Israel.

Budget

In the spirit of Open Source and transparency, we’re happy to share a summary of our budget (all numbers are thousands of Shekels).

Income

Sponsorship: 246

Ticket sales: 54

Total: 300

Expenses

Venue (incl. food): 134

Conf. party (food+movie): 41

Keynote speakers travel: 30

Speaker’s dinner: 13

Video recording & editing: 20

T-shirts & other swag: 28

Wireless internet: 5

Various other: 3

Total: 274

As you can see, we ended with a positive balance of close to 26K ILS. This is more than we intended, a miss we attribute to over-cautiousness and inexperience. A small part of this surplus will go to support Hamakor, the Israeli F/OSS association which helped make the conference happen, and the rest will go into the budget of the next PyCon Israel.

Community organizations

We’d like to call out three special groups which could use your help — participation as well as sponsorship; groups whose ongoing work enabled this conference and will hopefully enable others like it in the future:

2017

Since so long has passed, we can also add a look to the future: Preparations for PyCon Israel 2017 have already started! You can join the organizing team, or just keep track of our progress via our different channels -

Blog: https://medium.com/@pyconil

Twitter: @pyconil, #pyconil

YouTube channel: https://www.youtube.com/channel/UC8ApA9ibgkf0XK7lgTVZgEQ

Facebook: https://www.facebook.com/pyconisrael/

Google group: https://groups.google.com/forum/#!forum/pycon-israel (requires registration)

Website: http://il.pycon.org/

Final words

Watching the months of preparations come to full fruition made our hearts burst with joy. We’d like to thank everyone involved — all CFP submission authors, the invited and accepted speakers, the sponsors (and in particular the Diamond sponsors, Red Hat & Cymmetria), the vendors (and in particular the helpful staff of our wonderful venue at Yes Planet), the Israeli Python community in general for making such an event possible, and you, the attendees, for making it a reality.

See you in 2017,

The PyCon Israel organizing team

18 October, 2016 07:45 PM

23 September, 2016

Yosef Or Boczko

GNOME 3.22 שוחרר !

צהריים טובים.

לאחר מחזור פיתוח בן שישה חודשים, שוחררה גרסה 3.22 של שולחן העבודה GNOME !

GNOME 3.22 Hebrew

גרסה זו מכילה 22980 שינויים שנרשמו ב־Git על ידי 775 תורמים, בהשוואה ל־28933 שינויים על ידי 837 תורמים ב־3.20.

אחוז התרגום עומד על 80% (36912 מחרוזות מתורגמות, 3682 מעורפלות ו־49874 שאינן מתורגמות), בהשוואה ל־80% (36069 מחרוזות מתורגמות, 3702 מעורפלות ו־4937 שאינן מתורגמות) ב־3.20 ו־82% (37120 מחרוזות מתורגמות, 3326 מעורפלות ו־4675 שאינן מתורגמות) ב־3.18.

על התרגום בעיקר אני אחראי, ולאחרונה הצטרף ניב באר ותרגם את חלק מהתיעוד למשתמש „צעדים חדשים ב־GNOME” (נקרא ‏gnome-getting-started-docs) ואפילו החל לתרגם ליישומים (טרם מצאתי זמן להכניס את התרגומים האחרונים שלו).

להלן מוטמע סרטון המציג את GNOME 3.22. קריינות על ידי קארן סנדלר, לשעבר מנכ״ל קרן GNOME, ומייק טרנטינו. עריכה על ידי Bastian Ilsø, שעורך סרטונים אלו כבר למספר שחרורים.

כרגיל, אוסיף כאן שיר. שיר יפה, שפשוט נהניתי לנגן על הפסנתר.

בברכה,

יוסף אור

23 September, 2016 02:47 PM

14 August, 2016

Yosef Or Boczko

מצב תרגום GNOME – לקראת 3.22

ערב טוב.

בשבוע האחרון תרגמתי ובכך צמצמתי פערים של חצי שנה ללא תרגום, והבאתי את GNOME לתרגום מלא (להוציא את gitg ואת gnome-builder, שלא תורגמו גם בגרסה הקודמת).

אחוז התרגום עומד על 80% (36915 מחרוזות מתורגמות, 3727 מעורפלות ו־4987 שאינן מתורגמות), בהשוואה ל־80% (36069 מחרוזות מתורגמות, 3702 מעורפלות ו־4937 שאינן מתורגמות) ב־3.20 ו־82% (37120 מחרוזות מתורגמות, 3326 מעורפלות ו־4675 שאינן מתורגמות) ב־3.18.

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

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

את השיר, הפעם, אקדיש ליום המיוחד, לגעגוע לירושלים.

ערב טוב,

יוסף אור

 

14 August, 2016 04:05 PM

12 August, 2016

sml

החלצות מעידכון כושל

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

הטקסט המלא

12 August, 2016 04:42 PM

08 August, 2016

Lior Kaplan

איש קוד פתוח מחפש עבודה

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

מאז הפרסום הקודם עשיתי אינטגרציה של ZendServer להפצות הלינוקס השונות (Debian, Ubuntu, RHEL/Centos), עסקתי בקמפול של PHP לכל מיני ארכיטקטורות (חוץ מאינטל) וגם הפכתי לחבר בקהילת ה-PHP עם תרומות קוד בסיסיות ועבודה עם צוות האבטחה של הפרוייקט ושאר ההפצות. בנוסף, עבדתי בלינווייט כדי לשלב את הידע שלי מפרוייקטי קוד פתוח עם תהליכי הפיתוח של החברה (ברמת הניהול וברמה הטכנית). הרקע שלי הוא של sysadmin וארכיטקט מערכת, ואז המשכתי בעיקר לעולם תהליכי הפיתוח Continuous Integration. במסגרת פרוייקטי הקוד הפתוח צברתי ניסיון עם GIT וכמובן בעבודה מול קהילה. כיום אני חבר בשלושה פרוייקטים: Debian, LibreOffice ו-PHP (רמת התרומות משתנה לפי העניין והזמן הפנוי).

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

פרטים נוספים אפשר למצוא בפרופיל הלינקדאין שלי: https://www.linkedin.com/in/liorkaplan


תויק תחת:Israeli Community

08 August, 2016 12:10 PM

31 July, 2016

Ram on Agmon

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

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

הטקסט המלא

31 July, 2016 08:25 PM

13 July, 2016

Itzik Kotler

Fuzzing The Kill Chain

Fuzzing is a technique in software testing where you generate a number of random inputs, and see how a program handles it. So what does a testing technique have to do with a process such as the Cyber Kill Chain as developed by Lockheed Martin? Easy! Just as fuzzing a software produces resilient software, fuzzing a process will produce a validated process. The Kill Chain takes about seven steps that adversaries must complete in order to achieve their goals, but will it always be the case? Can an attacker pull off a successful attack with just one step? Or three? That’s what we’re going to fuzz out ...


(Again, in order to avoid cross-posting between the different blogs, that was just a brief paragraph and a link to the original post is below).

Continue reading: https://www.safebreach.com/blog/fuzzing-the-kill-chain

Full text

13 July, 2016 08:14 PM

08 July, 2016

Lior Kaplan

First uses of the PHP 5.4 security backports

I recently checked the Debian PHP 5.4 changelog and found out this message (5.4.45-0+deb7u3 and 5.4.45-0+deb7u4):

* most patches taken from https://github.com/kaplanlior/php-src
Thanks a lot to Lior Kaplan for providing them.

I was very pleased to see my work being used, and I hope this would save other time while providing PHP long term support.

Also, while others do similar work (e.g. Remi from RedHat), it seems I’m the only when that make this over GIT and with full references (e.g. commit info, CVE info and bug number).

Comments and suggestions are always welcome… either mail or even better – a pull request.


Filed under: Debian GNU/Linux, PHP

Full text

08 July, 2016 12:07 AM

24 June, 2016

sml

טיפ: התקנת NX על OpenSUSE Leap 42.1

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

הטקסט המלא

24 June, 2016 09:35 AM

27 May, 2016

Shlomi Fish

Tech Tip: Checking the Latest Build in Travis CI

If you are using Travis CI, you can check the latest build after a failed build by going to the “Build History” tab in your project’s main page (= https://travis-ci.org/shlomif/fc-solve or equivalent), and selecting the new commit.

Licence

Copyright by Shlomi Fish, 2016.

You can reuse this entry under the Creative Commons Attribution 3.0 Unported licence, or at your option any later version of it. See the instructions on how to comply with it.

27 May, 2016 12:43 PM

21 May, 2016

Amir Aharoni

I Deleted My Facebook Account

I used Facebook quite a lot. I posted lots of things, I got to know a lot of people, I learned about things that I wouldn’t learn anywhere else, I shared experiences.

But the feeling that I am the product and Facebook is the user got stronger and stronger as time passed. It happens with many other companies and products, but with Facebook it’s especially strong.

In February 2015 I stopped posting, sharing and liking, and I deleted Facebook apps from all my other devices. I continued occasionally reading and exchanging private messages in a private browser window.

Then I noticed that a few times things were shared in my name, and people liked them and commented on them. I am sure that I didn’t share them, and I am also quite sure that it wasn’t a virus (are there viruses that do such things on GNU/Linux?). Also, a few people told me that they received messages from me, and I’m sure that I didn’t send them; It’s possible that they saw something else under my name and thought that it’s a message even though it was something else, but in any case, nobody is supposed to think such a thing. That’s not how people are supposed to interact.

I am not a bug, not an A/B test, not a robot, not an integer in a database. I am Amir Aharoni and from today Facebook doesn’t use me. There are other and better ways to communicate with people.

Stop saying that “everybody is on Facebook”. I am not. I don’t feel exceptionally proud or special. I am not the only one who does this; a few of my friends did the same and didn’t write any blog posts or make any fuss about it.

You should delete your Facebook account, too.


Filed under: Facebook, Free Software, Internet

21 May, 2016 09:30 PM

Shachar Shemesh

על פטרת צפרניים ופרטיות

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

The post על פטרת צפרניים ופרטיות appeared first on לינוקס ותוכנה חופשית.

21 May, 2016 05:59 AM

29 April, 2016

PyCon Israel

Meet our silver sponsors — Cloudify

Cloudify is an open-source Python Shop developing an orchestration framework for any cloud infrastructure provider allowing to use the tools of your choice to manage your applications. Cloudify’s mission statement is to allow organizations to realize the benefits of cloud computing by simplifying the management of cloud applications at scale.

Our complex challenges vary from scaling and healing to abstracting common tools like Docker, Puppet, Chef, Telegraf and the likes via Cloudify plugins. We adhere to PEP8 and do not compromise on code quality! OpenStack contributors are welcome.

We’re looking for brilliant developers to join us on a journey to take the concept of orchestration to the next level. http://github.com/cloudify-cosmo is our home. You’re invited.

29 April, 2016 08:55 AM

14 April, 2016

Arie Skliarouk

LLS=LXC+LVM+Snapshots

In our company developers deal with massive datasets that needs to be easy to copy, modify a fraction of it and scrape. Snapshotting is an ideal solution here. Each developer has a personal vserver (LXC container). The missing piece here is to provide them with a way to manipulate partitions and snapshots from inside of their vservers.

To enable users manipulate partitions from inside of the virtual server, I wrote LLS (LXC+LVM+Snapshots) scripts.

LXC+LVM+Snapshots = LLS

LLS system is set of scripts that enable LVM partitions and snapshots to be managed from inside of LXC vservers. It is safer to allow developers to use the scripts, instead of giving them superuser access to the physical machine.

Architecture

The LLS scripts consist from two parts. The daemon script on the host and client scripts on the vservers. The clients communicate with the server over a named pipe in a shared (bind mount) directory /lls (lls - LXC+LVM+Snapshots). The /lls directory is actually a small partition that contains configuration file, the shell scripts and the named pipe used for communcation.
The daemon script does all the necessary low-level manipulations, both on the physical machine and on the LXC vservers.
Usage

Each LLS vserver has /lls partition mounted. To preserve mounts across reboots, the /etc/rc.local file runs /lls/tools/lls_mount_on_boot.sh script.
There are several client scripts the /lls/tools partition that do various operations:
script nameOperation
lls_create_partition.shCreate a partition
lls_create_snapshot.shCreate an LVM snapshot from an existing LVM partition
lls_delete_partition.shDelete an LVM partition or snapshot
lls_list_partitions.shList available LLS partitions and refresh /dev/mf directory
lls_mount_on_boot.shMount LLS partitions using configuration in the /etc/fstab file

The scripts show informative Usage information when ran without arguments.
Developers are expected to operate the scripts by themselves. They are also expected to maintain the /etc/fstab file for mounts they want to survive reboot of their vserver. Unmounted snapshot is assumed to be not necessary anymore and might be deleted at any time.

Further work

As the LLS system is used, more features are asked by developers and system administrators. Here are some of them:
  • Track unused (unmounted) LVM snapshots and delete them automatically
  • Track disk space used/required by LVM snapshot and grow it automatically. Send email to sysadmin each time this happen.
  • Have a way to enable/disable visibility of a LLS partition. This is useful while the LLS partition is under construction.
  • Have a way to mark an LLS partition as non-mountable or mountable in read-only mode.
Download
Version 20111124.

14 April, 2016 12:15 PM

25 March, 2016

Shlomi Fish

Freecell Solver 4.2.0 was Released

Freecell Solver version 4.2.0, has been released. It is available in the form of a source archive, from the download page. Freecell Solver is an open source library and some command line applications, for automatically solving several variants of card Solitaire / Patience games, including Freecell.

This release sports the new configuration theme “-l conspiracy-theory” (or “-l ct”) which is somewhat faster than the best contender up to it, “-l amateur-star”, some relatively minor bug fixes, new compile-time options, and many small and somewhat larger code cleanups, refactorings, and optimisations.

“conspiracy-theory” is a reference to the Jewish holiday of Purim, which took place around the time of its release and an old post of mine about it.

Enjoy!

25 March, 2016 04:14 PM

13 March, 2016

Artyom Beilis

לבנות RPM להרבה הפצות

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

בזכות debootstrap היה לי יחסית קל לבנות חבילות deb ל־Debian ו־Ubuntu, אבל המצב הרבה יותר מורכב כשמדובר ב־rpm כי אין דרך קלה לשים את הפצת rpm בספריה ולעשות לתוכה chroot.

בהמלצת שגיא בן־עקיבא התחלתי להשתמש ב־Open Build Service של OpenSuse.

האמת, אני מאוד מרוצה! כל מה שצריך זה להעלות Source RPM או קובץ spec, כל השאר ייעשה בצורה אוטומטית: בניה למספר הפצות ופלטפורמות, הכנת מקורות מסודרים ואפילו אתה מקבל repository מסודר.

בצורה כזו הכנתי rpmים ל־3 הפצות (Fedora, Suse, CentOS) כולל מספר גרסאות וגם הכל עבור שתי ארכיטקטורות: x86 ו־x86_64.

http://download.opensuse.org/repositories/home:/artyom-beilis/

מה שנותר... להבין כיצד משתמשים בשירות עבור debים

הטקסט המלא

13 March, 2016 02:11 PM

כיצד לא לעשות יוניקוד

הסיפורו של הניסיון להדפיס "שלום" במספר שפות במסוף של חלונות.

http://blog.cppcms.com/post/105

הטקסט המלא

13 March, 2016 02:11 PM

09 February, 2016

Dan Fruehauf

Spanning files over multiple smaller devices

Imagine you are in Tasmania and need to move 35TB (1 million files) to S3 in the Sydney region. The link between Tasmania and continental Australia will undergo maintenance in the next month, which means either one or both:

In short, I’m going to be presented with a bunch of HDs and I need to copy the data on them, fly to Sydney and upload the data to S3. If the HD given would be 35TB I could just copy the data and be done with it – no dramas. Likely though, the HDs will be smaller than 35TB, so I need to look at a few options of doing that.

Things to consider are:

LVM/ZFS over a few HDs

Building a larger volume over a few HDs require me to connect all HDs at the same time to a machine and if any of them fail I will lose all the data. I decide to not do that – too risky. It’ll also be difficult to debug if anything goes wrong.

tar | split

Not a bad option on its own. An archive can be built and split into parts, then the parts could be copied onto the detination HDs. But the lose of a single HD will prevent me from copying the files on the next HD.

tar also supports -L (tape length) and can potentially split the backup on its own without the use of split. Still, it’ll take a very long time to spool it to multiple HDs as it wouldn’t be able to do it in parallel. In addition, I’ll have to improvise something for untarring and uploading to S3 as I will have no staging area to untar those 35TB. I’ll need something along the lines of tar -O -xf ... | s3cmd.

tar also has an interesting of -L (tape length), which will split a volume to a few tapes. Can’t say I am super keen using it. It has to work the first time.

Span Files

I decided to write a utility that’ll do what I need since there’s only one chance of getting it right – it’s called span-files.sh. It operates in three phases:

The utility is available here:
https://github.com/danfruehauf/Scripts/tree/master/span-files

I’ll let you know how it all went after I do the actual copy. I still wonder whether I forgot some things…


09 February, 2016 12:28 PM

31 January, 2016

Kobi Zamir

Diff , Patch ו Pull Requests

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

הטקסט המלא

31 January, 2016 05:35 PM

24 January, 2016

Kobi Zamir

מכתב לא שגרתי

לפני שבוע קבלתי מכתב לא שגרתי לגבי libhdate. ראשית הכותב אינו שגרתי, מדובר באדם בגיל 80 בערך. שנית מדובר בפלטפורמה לא שגרתית Raspberry Pi. ושלישית מדובר בשימוש לא שגרתי בספריה.

הטקסט המלא

24 January, 2016 04:00 PM

13 December, 2015

Arie Skliarouk

GRUB-based multiple iso booting flash drive

With huge USB flash drives of today it is sad that one can't easily put several bootable ISO images on it and have nice on-boot selection menu.

GRUB to the rescue!

Historically GRUB is being used for hard disks and syslinux for floppies and flash drives. But nothing prevents using GRUB for flash drives as well. Here are instructions for creating bootable GRUB-based USB flash drive (disk on key):

  1. Create vfat partition. For big drives you must use fat32 format.
  2. Unpack the http://t11.meshanet.com/skliarie_blog/boot.tar.gz onto it. It will create single directory boot on the drive.
  3. Customize boot/grub/grub.cfg file, put iso images accordingly
  4. On linux box, put bootable MBR onto the DOK (for example on /dev/sdf):
    1. mount /dev/sdf /mnt/dok
    2. grub-install --force --no-floppy --root-directory=/mnt/dok /dev/sdf
    3. umount /mnt/dok 

    Caveats:

    The ISO image must support GRUB-based booting. Specifically it must be smart enough to locate ISO image on the DOK using parameters specified in grub.cfg file.

    Latest Ubuntu and Debian based ISO images are known to work.

    Thanks to Jonathan Vollebregt there is a way to boot knoppix as well. You will need custom initrd, with your flash drive specific tuning. I built one for mine: knoppix_minirt.gz, you are free to take and modify it according to your DOK and filesystem parameters. Important commands here are:
    1. Unpack the initrd
      gzip -dc /mnt/dok/boot/knoppix/minirt_ska.gz | cpio -i
    2. Modify the init file (put sector numbers that are correct for your DOK)
    3. Compress back the initrd
      find ./ | cpio -H newc -o | gzip -9 -c > /mnt/dok/boot/knoppix/minirt_ska.gz
    Please send me GRUB stanzas for other ISO images and I will put them into the grub.cfg file.

    13 December, 2015 01:33 PM

    07 December, 2015

    Ira Abramov

    תלתפסת לכל פועל

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

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

    ההרצאה כולה נכתבה להצגה בדפדפן.. הנה לינק, והנה עמבד:


    https://ira.abramov.org/3DPadventures/ אנא גלשו למצג המקורית אם משום מה זה לא מציג לכם פה.

    07 December, 2015 03:42 PM

    24 November, 2015

    Yoav Farhi

    וורדפרס.קום, הדור הבא

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

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

    ברמה הטכנית, מדובר על אפליקציית עמוד אחד (Single Page Application), שעושה שימוש בין השאר ב-React, Flux ו Node, ועובדת מול Rest API פתוח. אולי זה נראה כמו תהליך אופייני של כתיבה מחדש של מערכת, אבל בעיניי מדובר בהרבה יותר מזה. מבחינת המתכנתים באוטומטיק המעבר לעבודה על המערכת החדשה דרש אימוץ של כלים וטכנולוגיות חדשות במהירות שיא, ולמידה תוך כדי תנועה. אנדי פיטלינג, מרכז הפרוייקט, כותב על התהליך מאחורי הקלעים ומסביר על הבחירות שלנו, ועל השינויים שעברנו כחברה כדי ליישם אותן.

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

    כן, אנחנו מגייסים עובדים – בואו לעבוד איתנו.


    24 November, 2015 08:51 AM

    16 November, 2015

    Liran Tal

    VeriGreen – lightweight, server side solution for verification of git commits

    Verigreen – https://github.com – is a lightweight, server side solution for verification of git commits. Now open-sourced  by HPE’s VeriGreen team.

     

    The post VeriGreen – lightweight, server side solution for verification of git commits appeared first on Liran Tal's Enginx.

    16 November, 2015 11:13 AM

    08 November, 2015

    Rabin Yasharzadeh

    Run Command Before Starting SSH Connection

    This a quick hack I found while I was looking to run a knock script before connecting to servers which I have the SSH service protected with a knock sequence. In my setup I used the ProxyCommand option in the ssh_config file to loop over my loop-back interface.

    Host server1
        User root
        Hostname server1.com
        ProxyCommand bash -c 'knock-script %h; sleep 1; ssh 127.0.0.1 -W %h:%p'
    
    # in the above
    # %h is a place holder for the hostname i.e server1.com
    # and i added 1 sec delay before running the ssh tunnel
    # to give the script on the server side time to validate my knock.

     

    08 November, 2015 04:58 PM

    05 November, 2015

    David Kaplan

    Lunchbox Glitching for Fun & No Profit

    As part of my work on the IBM X-Force Application Security Team, a few months ago I wanted to see if I could reproduce a Rowhammer-exploit-type memory corruption via an externally-generated electromagnetic pulse (EMP). The idea here was to target primary memory (usually [S]DRAM) to perform a bit-flip via an electromagnetic pulse-induced glitch.

    I have (thus far) failed miserably to build an actual exploit; more on why in a subsequent blog post.

    In this post, I'd like to detail my IBM-sponsored single-pulse glitcher (EMP generator) build (yes, it involves Tupperware) and touch on some basics of the theory of operation of its various components.

    DISCLAIMER 1: IF YOU DON'T KNOW EXACTLY WHAT YOU'RE DOING, DO NOT TRY REPRODUCE THIS BUILD OR PLAY AROUND WITH HIGH-VOLTAGE CAPACITORS. IT'S POTENTIALLY DANGEROUS (READ: DEADLY)!

    DISCLAIMER 2: EVEN IF YOU KNOW EXACTLY WHAT YOU'RE DOING, DO NOT BUILD THIS! LEAVING IT AROUND COULD BE DANGEROUS TO SOMEONE WHO TOUCHES IT (LIKE YOUR KIDS)!

    Disclaimer 3: My build's EMP range is in the order of millimeters to centimeters and the interference it causes is relatively weak. It's not a weapon and was built at my employer for security-research purposes only and used only within a private lab. Do not use this build for nefarious reasons!

    OK, warnings aside, let's begin.

    I'll start by detailing the most basic build which simply consists of a single capacitor, a switch and a coil of wire like so:

    If the capacitor was charged, closing the circuit (by flipping the switch) would induce an extremely high current over the coil load (as there is very little resistance in the circuit). This is because capacitors store energy. The amount of energy stored by a capacitor is denoted by Farads, or the symbol F.
    As the electrons flow from the negative pole to the positive pole of the capacitor, a magnetic field is formed as per Maxwell's correction to Ampère's Law. In our circuit above, these electrons flow through the coil - a solenoid - concentrating the magnetic field inside the coil. The strength of this field is proportional to the current flowing through the solenoid which, in turn, is proportional to the energy dissipated by the capacitor discharge.

    It is this magnetic field that causes electronics to go crazy. This is due to the fact that the field can excite electrons (and hence current flow) within the target device (the exact reverse of what's happening on the EMP side). If one manages to excite the target enough, Bad Things May Happen.

    It follows therefore that the more energy stored within the capacitor, the stronger the magnetic field will be.

    The decision that we have to make at this point is which capacitor to chose. We need a capacitor capable of quickly discharging its stored energy and one with large enough capacity to induce a sufficiently-strong magnetic field within the solenoid. We don't wish for the field to be too strong as our range of operation for this project (glitching memory) is in the order of millimeters and the target devices operate at around 3.3 volt so the glitch amplitude shouldn't need to be that high to induce some undefined behaviour.

    The easiest capacitor to go for, imho, is a 330V 80uF flash capacitor. You'll see this advised by a number of glitcher-building guides on the net. The reason is that it's easily available and comes with a charging circuit to match! Just find a disposable camera with a flash and gut it (actually getting more difficult to find these days; I think I found the last 3 in the country).

    A word of caution when opening these cameras. Make sure the capacitor is discharged before touching any part of the circuitry inside. You can do this by firstly winding up the camera and charging the flash. Then activate the shutter to discharge the capacitor. Additionally it's a good idea to make sure it has fully discharged by shorting both ends of the capacitor with a rubber-handled screwdriver (it might make a spark - the energy dissipates as light and heat - but it's likely safe to do with a capacitance of this value).

    In our first circuit above, we assumed that the capacitor was already charged. In our working circuit we will need to charge the capacitor.

    In order to charge capacitors, one must apply a potential difference (voltage) over it's poles which is greater than its rated voltage for a set amount of time. The time that a capacitor takes to charge is specified by the RC time constant, tau T, of the circuit such that the capacitor will be charged to 63% after 1T. At 4T the capacitor will be charged to 98%. The charging time between 0T and 4T is called the transient period. After 4T the capacitor enters the steady-state period. At 5T the capacitor is considered to be fully charged.

    In our circuit, we have selected a value of R = 10k. Our capacitance is C = 80uF.

    T = RC
      = 10k x 80u
      = 800 milliseconds
    
    5T = 4 seconds
    

    So in order to charge our capacitor to capacity, we need to apply 330V over its poles for 4 seconds.

    The challenge now is to provide a 330V source with which to charge the capacitor. One can use a DC-DC step-up transformer, however luckily the disposable camera which we pillaged above has a nice little charging circuit which we can re-purpose for our needs.

    The circuit in most disposable cameras has a feedback mechanism whereby closing the switch causes the charging process to commence and it automatically stops charging when the target voltage is reached (this is so that one doesn't need to hold down the flash button on the camera for the whole duration of the transient period). We'll consider it a black-box for our purposes and using this charger, we can update our circuit diagram as follows:

    The push button switch in the diagram above commences the charging procedure. After the capacitor has reached capacity, closing the switch between the capacitor and the solenoid will create the EMP.

    Even though we now have a full EMP circuit, I added a number of features to my design.

    Firstly, I doubled the capacitance of the circuit in order to create a stronger pulse. I pillaged another 80uF capacitor from a disposable camera and added it in parallel to the first capacitor. This gives a total capacitance of 160uF.

    I then added a high impedance voltage-divider circuit which allows me to digitally measure the voltage of the circuit. This is connected in parallel over the capacitor. The reason for the high impedance is that I don't want the capacitor to discharge ('bleed') its energy though this path otherwise there won't be any energy to discharge through the coil!

    The total impedance of the voltage divider is just over 2.2M. To understand the affect that this has on the circuit, we need to take a look at how the capacitor discharges.

    As with the charging circuit above, the capacitor will discharge 63% of its energy in 1T and be fully discharged at 5T. The impedance of the voltage divider is approximated 2.2M, therefore:

    T = RC
      = 2.2M * 160uF
      = 58.6 minutes
    

    As one can see, the bleeding through the voltage divider is quite slow and doesn't have a major affect on the energy of the EMP if the EMP is triggered shortly after the capacitor is charged.

    Interestingly this also provides a built-in safety feature. Forgetting to discharge the circuit could prove hazardous as capacitors will hold their charge for a long time. The voltage divider will cause the circuit to bleed the capacitors over time as even though the impedance is high, there is some current flowing through this path. The capacitors I'm using will generally be considered safe at around 42V. They will be discharged to this value at roughly 2.2T, so after about 2 hours and 10 minutes.

    The aforementioned voltage divider is connected to a microcontroller (MCU). The one I'm using is the MicroPython board which is a pretty awesome bit of kit (highly recommended). I use this board connected over USB to a PC to control the glitcher (mostly). The voltmeter gives me an indication of the current level of charge of the capacitor. The MCU is also connected to two relays. The first relay is used to complete the charger circuit (in place of the disposable camera push button). The second relay connects a 3.3k resistor over the poles of the capacitor. I can use this to very quickly discharge (bleed) the circuit and even use it to select a particular voltage for the pulse (I can bleed the circuit for a very short time causing a controlled drop in capacitor charge; to half the voltage for example). This is a 35W rated part as it needs to be able to handle the amount of energy dissipated through it (high current). The interface is shown in the video of the capacitor charging below:

    The final part of the build is the solenoid itself. I have experimented with a number of different coils; diameter, number of windings etc. The ideal coil depends on the application and isn't an exact science at all. For my needs I wanted a small, focused EMP with which I could target a RAM IC without glitching the surrounding electronics. My first attempt at a large coil tended to reset my computer! I then made a few smaller coils out of insulated copper wire wound around ferrite iron cores. Here are some pictures of my various coils:

    So does the glitcher work? Well yes! I verified this experimentally. As mentioned, the large coil can reset my computer. I used the smaller coils to target RAM IC chips in a PC. I was able to cause some havoc with RAM contents but I'll leave that for another blog post.

    As for how the glitch actually looks on the target; according to Wikipedia, what we should see is a damped sinewave pulse. This is due to coupling on the ground plane between the glitcher and the target. I won't go into this in detail but it's all on Wikipedia if you're interested. Throwing an EM pulse out at a scope probe shows exactly this affect so all seems to be working well:

    That's all for now folks! Leaving you with a picture of the glitcher in all it's tupperwear-enclosed glory!

    05 November, 2015 06:12 PM

    02 November, 2015

    David Kaplan

    CUPC/8 Goodbye ROM, Hello ROM

    So it has been a while since my last CUPC/8 (formerly known as CUPCake) update.

    Over the past few months I have spent a significant amount of time working fleshing out the instruction set, implementing support in the assembler and simulator and coding the Kernel (the status of which will be discussed in another blog post).

    I have also spent some time back with the hardware itself; integrating and testing the physical RAM and MMU FPGA modules, bus interfaces etc.

    Additionally, I finally got around to starting the documentation (see here). Some of it is already slightly out of date but hopefully I'll revise it soon.

    As development has progressed, I have continually challenged my original design decisions and this has resulted in a few design revisions.

    The main change is that the memory board is no longer responsible for loading the ROM into primary memory on boot. It just didn't make sense for me to use a powerful (relative to CUPC/8) XMEGA MCU within the context of the project as a whole.
    As such, I have removed the XMEGA from the design. The ROM chip is now connected directly the the SoC over I2C. The SoC also now includes a small ROM buffer on-chip (termed ROM0) which will hold code that will be responsible for bootstrapping the ROM code. ROM0 is memory-mapped into the 64k memory region by the MMU. The hard reset vector points to the start of the ROM0 and will therefore execute it on boot.
    The ROM0 code will be minimal; consiting of a stripped-down I2C driver responsible for the loading of the off-chip ROM chip (ROM1) into primary memory and jumping to the ROM1 start vector.
    This is somewhat similar to how modern CPUs bootstrap today.

    My next milestone is to get the hardware SPI and I2C modules working properly and interfacing ROM1 with the FPGA development board.

    02 November, 2015 01:44 PM

    20 October, 2015

    Guy Sheffer

    FullPageOS – Out-Of-The-Box Kiosk mode for the RaspberryPi

    FullPageOS

    FullPageOS

    Hey all,

    Today I am announcing a RaspberryPi operating system that addresses a small need we have – Get the RaspberryPi to display a webpage on full screen with no hassle.
    The OS is called FullPageOS. And you can download it here.

    Why I built it

    A friend of mine, Tailor Vijay wanted something to stream video and add titles to it. Also I was looking for a way to start the RaspberryPi with a browser on full screen for a stats screen at work, and apparently the only thing available is complex guides that only partly work on today’s RaspberryPi.

    So what I did last weekend is build a distro based off the code of OctoPi, the 3D printer operating system I built. All this distro does is start Chromium at boot on full screen, with a URL of your choice. The url can be changed conveniently from a text file on the /boot FAT folder. So all you have to do is set the wifi and url via text files, boot, and voilà!
    Among the minor tweaking is the elusive setting of disabling the screen from blanking.

    How to set it up

    What’s nice about FullPageOS is that its simple, no need to install packages, just flash it like any distro, set your wifi and URL settings and boot.

    1. Open the FAT filesystem that is mounted as /boot
      on the pi
    2. Set the URL you want in the file fullpageos.txt
    3. If you need to set up wifi, set your wifi settings with the file fullpageos-network.txt or any way you want are used to on the RaspberryPI
    4. Plug to HDMI display, internet and boot

    Known issue with black boarders

    On some screens I tried FullPageOS I got a black boarder, to fix this, you need to edit config.txt and uncomment the line:

    disable_overscan=1

    This fixes the issue.

    Contribution is appreciated!

    FullPageOS works, but its missing the shiny slickness that OctoPi has today. For example if someone wants help me write a nice default boot page that would be great! The current default url is just the github page. So as usual, pull requests are welcome.
    The source works just like an OctoPi build, and as a by product I wanted to show how easy it is to create custom distros for the RaspberryPi using this build method. We could, really, build a universal custom distro system based off these things. There is already a variant system that was ported from OctoPi code.

    FullPageOS image can be downloaded here

    Thanks

    Share and enjoy,
    Guy


    Full text

    20 October, 2015 04:04 PM

    20 September, 2015

    Guy Sheffer

    How I Founded a Startup

    ShapeDo logo

    ShapeDo logo

    Hey all,

    It’s my 29th birthday this week, and that sorta made me realise no one really knows what I have been doing the past 18 months, so I thought it’s time to tell you how I founded a company. Unlike the tutorials and guides I wrote here, I am not sure this would work for everyone, but it did work for me.

    The Idea

    I have started one of my biggest and ambitious projects yet, after collaborating with people around the world bringing OctoPi to the world, I realised that something was missing from the scene of 3D design – a decent version control and collaboration tools.

    This was the initial idea, as you will see things played out differently, but what was important with this idea was contagious, I got the feeling everyone I told about it wanted to join me, it was wonderful.

    Assembling the team

    My talent is mostly in the core backed stuff, so I found myself going to one of the more talented web developers I know for help, my co-worker at Zend, Amit. It started by asking him javascript questions. When he realized what I was doing, he started helping me out, and he was fast, suddenly in days my core stuff was accessible to the world with a simple and elegant interface. At that time we thought this is going to be a nice open source project, not something commercial, but as the server load grew on Amit’s little server we understood we needed some way to pay its bills, so I started to look for someone that would help me figure out how to sustain this financially. Since our idea was “github for 3D printing”, it seemed like there should be a way to support it, perhaps charge for closed-source projects.

    I’ve been going around the Makerspaces in Tel-Aviv, mostly XLN and T.A.M.I, in some random workshop I came across someone who said “You should write an executive summary, I don’t mind helping you out”. I didn’t even know what an executive summary was at the time, and today it makes me realise how much I learned about fundraising during this year. I later found his name was Ari and he was between companies. We set to meet at Google Campus and write it since we both went to some ecology hackathon that was going on there.

    We ended up drunk from exhaustion and pizza, scooting on chairs at the space and we also had a draft. As we wrote it, the idea spread to Ari, and he realized he that he wanted to join. I introduced him to Amit. It took a while to put our trust in Ari, less time than we expected, and today I know ShapeDo would not have reached anything without Ari’s help. Eventually we wrote a few basic agreements on paper and Ari made sure we register a company, ShapeDo was born.

    The Pivot

    We worked on a new site for 3D printing and launched, we got coverage on 3D printing industry, and the user base grew, but people were not really using the collaboration features. It turns out most people 3D printing share are simple one person designs in one afternoon projects. However, what is special about the 3D printing industry is that there is no 3D CAD tool that was built for it. So you end up meeting designers from mechanical engineering, gamers, architects, programmers and any discipline that has a 3D design program that can export the printable files. We (everything eventually becomes “we”) found that everyone wanted this kind of tool in their workplace, while in 3D printing was not as urgently needed.

    Ari and I had a talk where he thought we should pivot either to construction planning, or mechanical engineering. In the end construction seemed more favourable because AutoDesk, who rule that realm, had neglected collaboration (also known as, product lifecycle management or PLM) for the past decade, and so there was a lot of low-hanging fruit. At first I didn’t want to pivot, after all 3D printing was my idea, but eventually, I let it go. A lot of what a startup is about is letting go of your ownership, a company has to grow beyond you. We slowly found ourselves with a technology for an industry we know nothing about, so we learned, we banged on doors and met with architects, contractors, constructors, anyone that is in the process of construction, we can’t cover everything, but we were getting an idea of what is going on.

    Investors and our Investment

    The pivot did more than point us to users we could talk to and find out what they actually need, it also made the business proposition make more sense. The goal was not to just build a big collection of files for people to share, it was to build a system we could charge for. We started getting investors interested, we first started talking to angel investors, but it seemed to be much harder than anticipated. Angels seem to be mostly interested in apps. Something your 6 year old could download, something they can understand, there are a small number of them that would understand what it means to sell something to a construction enterprise. So it made the process much harder, we found that the first meeting was just for grasping what we actually do, before talking about the investment itself.

    Ari and I went around looking for an investment, I had an 80% time job so I had an extra day to do this. I had a few chats about it with Gina, who also had that extra day for OctoPrint. I think that 80% is good when you want something steady while looking for funds, stability in your life in one part lets you explore radical stuff in another.

    Eventually we set a meeting with Incentive, we got a warm recommendation for them for the accelerator Ari was going to at the time called Siftech (an accelerator is a place you got to for a few months that helps your startup out with a physical location and various services, usually paid). Indeed when we met with them they seemed much better than the angel investors we were talking to. The catch was that we had to base our offices in Ariel University (though today it seems not so bad, there is never traffic to work). The program they offer was enough to keep us and an extra worker for a 1.5-2 years. Working on something as volatile as ShapeDo means you don’t want to have to think about personal finance, it means you don’t have time to consider the company’s. So we went through a due diligence, it took a while, but it was a good process for us and the company. Today our offices are located in the investors offices.

    Today, Happy 29th Birthday

    Today we found a go to market, something we can sell, and we are just in the process of hiring someone from the industry to help us out. Our system is flooded with real customer data. Things are going great. But as I saw every step of the way, everything can explode the next day, nothing is certain, and I think that kind of attitude is what got us this far.

    I hope this helps the people around me to know what is going on, I feel like I had to let this be known. It might even help others that are on a similar path. I’ve been playing with 3D printers for fun in the meantime, and I might post a few findings.

    As always, would love to hear your comments.

    Celebrating first day at the office

    Celebrating first day at the office

    Example of what we do today

    What we are selling today is a a construction planning collaboration platform and a comparison tool for constructors. At the bottom you can see how complex an architectural plan is, and how easy it is to spot the changes marked in purple detected by our software, normally this would have been done on hard paper by the constructor.

    Architectural plan with the changes marked between two versions

    Architectural plan with the changes marked in purple between two versions


    Full text

    20 September, 2015 09:23 AM

    10 September, 2015

    Yoav Farhi

    אסור לאפשר צנזורה של מחאה לגיטימית – באים לבנקאים

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

    מסתבר שהבנקים הצליחו להוציא צו המורה לגוגל להסיר את האתר bankaim.org מתוצאות החיפוש שלהם, ויותר מזה – על הצו הוטל איסור פרסום. אז האתר עלה שוב, בכתובת ganavim.com. אם פספסתם, באים לבנקאים – מחאה נגד הבנקים.


    10 September, 2015 07:58 AM

    15 August, 2015

    Rabin Yasharzadeh

    [NetworkManager] Using dispatcher.d to run scripts based on network connectivity

    This post is based on my personal need to mount/umount some network shares automatically when I’m switching between networks (e.g Homer/Office). Later on I was looking to make it more modular and came out with this solution, which can be further extended.

    NetworkManager have a nice option to execute scripts after ones connect/disconnect to a network, you can find more in the Arch wiki page including some examples.

    The problem I had with the way dispatcher.d works is that it execute all the files in the dispatcher.d folder in a linear order, and you have to code each script to handle the interface, connection state and the network you’re connecting to, so at first all my scripts looked something like this,

    #!/bin/sh
    ### ONE OF OLD SCRIPT FORMAT
    
    USER='username'
    REMOTE='user@host:/remote/path'
    LOCAL='/local/path'
    
    interface=$1 status=$2
    if [ "$CONNECTION_UUID" = "uuid" ]; then
      case $status in
        up)
          export SSH_AUTH_SOCK=$(find /tmp -maxdepth 1 -type s -user "$USER" -name 'ssh')
          su "$USER" -c "sshfs $REMOTE $LOCAL"
          ;;
        down)
          fusermount -u "$LOCAL"
          ;;
      esac
    fi

    I hated that I had to replicate the if/case template for each script I was adding, so I came with a different approach. And in my current setup I added the following file to the dispatcher.d folder

    #!/bin/bash
    
    DEVICE=${1}
    STATE=${2}
    CWD=$(dirname "$0")
    
    LOG='/var/log/NetworkManager_dispatcher.d.log'
    
    # DEBUG
    echo "$(date +"%F %T") Called with ($*) and connection uuid is: ${CONNECTION_UUID}" >> ${LOG}
    
    # Needed only if you need to display notification popups
    #export DISPLAY=:0.0
    #export $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep session)/environ)
    
    
    for FILE in ${CWD}/${CONNECTION_UUID}/${STATE}/*
    do
            #DEBUG
            echo "$(date +"%F %T") Running ${FILE}" >> ${LOG}
            . "${FILE}"
    done

    NetworkManager pass 2 parameters to each script it runs under the dispatcher directory,

    And so if we have connected to the home network with, The “master” script will list all the files under 

    ${CONNECTION_UUID}/up
      and will execute them one-by-one.

    And so my dispatcher folder structure look like this,

    # tree /etc/NetworkManager/dispatcher.d 
    
    /etc/NetworkManager/dispatcher.d 
    ├── 4237f1af-15bf-46f7-a3a1-9a37c0d075de/
    │   ├── down/
    │   │   └── 00-umount-freenas-media*
    │   └── up/
    │       ├── 00-mount-freenas-media*
    │       ├── 70-wifi-wired-exclusive.sh*
    │       └── 99-set-display*
    ├── fdd94fcd-c801-401c-9caa-ebb21e10bc9e/
    │   ├── down/
    │   └── up/
    │       └── 99-set-display*
    ...
    ├── Home -> 4237f1af-15bf-46f7-a3a1-9a37c0d075de/
    ├── Office -> fdd94fcd-c801-401c-9caa-ebb21e10bc9e/
    ...
    └── 88-MASTER-DISPATCHER*

    Remarks

    Links:

    15 August, 2015 08:28 PM

    09 August, 2015

    Ira Abramov

    איך לא לעצבן לנו את הנגן

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

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

    באחד האמשים הזמנתי לי סטרימר קטן בקיקסטרטר. קופסת גפרורים שמתחברת בדיסקרטיות מאחורי הטלוויזיה, מבוססת פיירפוקס או-אס שהיא מעיין אדרואיד של עולם התוכנה החופשית. כשהמכשיר היה כמעט מוכן (לטענתם) הם פתאום החליטו להוסיף רכיבי תוכנת נז"ק דיגיטלי, לטעתם רק כך יוכלו המשתמשים להנות עד הסוף מאפשרויות הצפיה בנטפליקס, הולו+, אמאזון ושאר הירקות שממילא לא משדרות מחוץ לארה"ב אם לא תחמנת אותן עם VPN לכתובת IP אמריקנית ואולי גם כרטיס אשראי אמריקקי. לכבוד השדרוק, הודיעו, הם מעכבים את היציאה בכמה חודשים, מחזקים את המעבד ועוד כהנה. והנה עברו החודשים, המשתמשים שעוד לא התייאשו ובקשו החזר קיבלו הודעה מוזרה: "הסתבכנו עם הנז"ק הדיגיטלי, סוגרים את הבאסטה ומחזירים לכם את הכסף". מה קרה לתכניות המקוריות? לא ברור, אבל תאוריית הקונספירציה שכרגע נפוצה בין משתתפי הקמפיין היא שהעובדה שיש להם כסף להחזיר אומרת שקנו אותם, כנראה החברה הסינית שאיתה פיתחו את הפלטפורמה. אם יצא מוצר, הוא יהיה קנייני אני מניח. נו, לפחות הם מחזירים את הכסף, הקאקערים.

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

    1. רספברי פאי 2, עם קופסת ABS קשיחה וספק כוח – סביבות $42. אם אתם רוצים ספק שגם יודע לדחוף זרמים כראוי, אני יכול להמליץ על המפלץ הזה.
    2. להתקין דביאן וקודי על כרטיס 16GB, נגיד עוד כ$5.
    3. כבל HDMI.
    4. זהו. סטרימינג מהרשת, מכוננים של USB או משרת הטורנטים שבחדר העבודה. מי צריך יותר מזה, תכלעס? אה, וזה אפילו מריץ מיינקראפט לילדה, אז בכלל…

    אופציונאליים:

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

    אני מקווה שלא שכחתי כלום. בהצלחה!

    09 August, 2015 05:11 PM

    13 April, 2015

    Liran Tal

    The Drupal Rap song – Everyday I’m Drupalin’

    This YouTube video doesn’t need any further explanation beside it’s title: The Drupal Rap song – Everyday I’m Drupalin’

     

     

     

    Lyrics:

    Chorus
    Everyday I’m drupalin

    Verse
    Where them forms you gettin fapi with I’m the fapi boss/ hookin into edit form and webforms is my specialty sauce/ I’ll hook form alter by form id’s or entities/ put a list on Ajax/ just to keep it callin back/

    I got them distrobutions, I’m like acqia/
    Check my public repos, I didn’t copy nuttin/ I know dries n webchick, I kno Ryan szrama/ all the commerce guys we hipchat when they got some drama/
    Might not be pretty code but it gets me paid/ I’m using rules like php loopin through arrays/ I put it all in features, so the code is stable/ it might take longer, but next time I just click enable/ These dudes clearin caches, on every hook init/ queries by thousands, page loads by the minutes

    Verse
    No matter the language we compress it hard/ drugs cc all, we just drugs cc all/
    Where’s all of the changes, you never saw/ so drush cc all, we just drugs cc all/ I lean heavy on smacss, compass compilin my sass/ you just installed flexslider now you teachin a class/
    I seen your content types, I don’t need to kno you/ to know that we ain’t even in the same nodequeue/
    I’m on drupal answers, check my reputation/ I’m on my tablet earnin karma while I’m on vacation/ ya girl like a module, she stay hookin n/ you couldn’t code an info file, without lookin in/
    Mo scrums, equals better sprints, break the huddle, n the work begins

    Thanks to New Valley Media for helping with the video http://www.newvalleymedia.com/
    Thanks to Broadstreet Consullting http://www.broadstreetconsulting.net

    The post The Drupal Rap song – Everyday I’m Drupalin’ appeared first on Liran Tal's Enginx.

    13 April, 2015 05:26 PM