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

20 February, 2018

Shlomi Noach

Using dbdeployer in CI tests

I was very pleased when Giuseppe Maxia (aka datacharmer) unveiled dbdeployer in his talk at pre-FOSDEM MySQL day. The announcement came just at the right time. I wish to briefly describe how we use dbdeployer (work in progress).

The case for gh-ost

A user opened an issue on gh-ost, and the user was using MySQL 5.5. gh-ost is being tested on 5.7 where the problem does not reproduce. A discussion with Gillian Gunson raised the concern of not testing on all versions. Can we run gh-ost tests for all MySQL/Percona/MariaDB versions? Should we? How easy would it be?

gh-ost tests

gh-ost has three different test types:

Unit tests are already running as part of automated CI (every PR is subjected to those tests). Systems tests are clearly tied to our production servers. What's the deal with the integration tests?

gh-ost integration tests

The gh-ost integration tests are a suite of scenarios which verify gh-ost's operation is sound. These scenarios are mostly concerned with data types, special alter statements etc. Is converting DATETIME to TIMESTAMP working properly? Are latin1 columns being updated correctly? How about renaming a column? Changing a PRIMARY KEY? Column reorder? 5.7 JSON values? And so on. Each test will recreate the table, run migration, stop replication, check the result, resume replication...

The environment for these tests is a master-replica setup, where gh-ost modifies on the table on the replica and can then checksum or compare both the original and the altered ghost table.

We develop gh-ost internally at GitHub, but it's also an open source project. We have our own internal CI environment, but then we also wish the public to have visibility into test failures (so that a user can submit a PR and get a reliable automated feedback). We use Travis CI for the public facing tests.

To run gh-ost's integration tests as described above as part of our CI tests we should be able to:

I was about to embark on a MySQL Sandbox setup, which I was not keen on. But FOSDEM was around the corner and I had other things to complete beforehand. Lucky me, dbdeplyer stepped in.


dbdeployer is a rewrite, a replacement to MySQL Sandbox. I've been using MySQL Sandbox for many years, and my laptop is running two sandboxes at this very moment. But MySQL Sandbox has a few limitations or complications:

dbdeployer is a golang rewrite, which solves the dependency problem. It ships as a single binary and nothing more is needed. It is simple to use. While it generates the equivalence of a that of a MySQL Sandbox, it does so with less command line flags and less confusion. There's first class handling of the MySQL binaries: you unpack MySQL tarballs, you can list what's available. You can then create sandbox environments: replication, standalone, etc. You can then delete those.

It's pretty simple and I have not much more to add -- which is the best thing about it.

So, with dbdeployer it is easy to create a master/replica. Something like:

dbdeployer unpack path/to/5.7.21.tar.gz --unpack-version=5.7.21 --sandbox-binary ${PWD}/sandbox/binary
dbdeployer replication 5.7.21 --nodes 2 --sandbox-binary ${PWD}/sandbox/binary --sandbox-home ${PWD}/sandboxes --gtid --my-cnf-options log_slave_updates --my-cnf-options log_bin --my-cnf-options binlog_format=ROW

Where does it all fit in, and what about the MySQL binaries though?

So, should dbdeployer be part of the gh-ost repo? And where does one get those MySQL binaries from? Are they to be part of the gh-ost repo? Aren't they a few GB to extract?

Neither dbdeployer nor MySQL binaries should be added to the gh-ost repo. And fortunately, Giuseppe also solved the MySQL binaries problem.

The scheme I'm looking at right now is as follows:

The above is a work in progress:

Another concern I have at this time is build time. For a single MySQL version, it takes some 5-7 minutes on my local laptop to run all integration tests. It will be faster on our internal CI. It will be considerably slower on Travis CI, I can expect between 10m - 15m. Add multiple versions and we're looking at a 1hr build. Such long build times will affect our development and delivery times, and so we will split them off the main build. I need to consider what the best approach is.

That's all for now. I'm pretty excited for the potential of dbdeployer and will be looking into incorporating the same for orchestrator CI tests.



20 February, 2018 07:29 AM

16 February, 2018

Gabor Szabo

The Popularity of Perl in 2018 February

More than 2 year ago I've published an article called The Popularity of Perl in 2015 It contained a list of sites with their Alexa ranking and a few sites with information from their Google Analytics. This is an updated version of that report for February 2018.

For the full article visit The Popularity of Perl in 2018 February

16 February, 2018 07:43 AM

14 February, 2018

Gabor Szabo

9 articles on Personal Retrospective

Restrospectives are a key tool in Agile practices. They enable your team to see what went well, what went bad. What could be strengthened and what should be avoided. Personal retrospectives can help you look back, evaluate your past year or so and then plan for the next one. Patrick Kua has tweeted a few links that are worth checking out. I have collected them here for our convenience. Added some of my thoughts and some additional links.

For the full article visit 9 articles on Personal Retrospective

14 February, 2018 11:12 AM

13 February, 2018

Boris Shtrasman

skype4linux snap

לפני מספר שבועות Skype הודיעה כי יצאה גירסה חדשה תחת מעטפת snap עבור רוב ההפצות.

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

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

ההתקנה היתה פשוט ביצוע:
user@pc:~$ sudo snap install --classical skype

כאשר מתקינים בצורה כזו אנו לא נהנים מההפרדה שמגיעה בשימוש ב snap, כי לתוכנה יש גישה מלאה לתיקיית השורש אבל skype לא תומכת בהתקנה במצב jail.

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

ב2016  המפתחים אמרו :
"It's not that exciting to basically fetch a binary from the Internet and run it on your machine; that has always been possible," "What's exciting is to be able to do that in a way where it's confined, so you know the data that you're trusting it with, and you can make a choice of what you trust that binary with. That's something that snaps have that, for example, Windows apps don't have and traditional Linux apps don't have either."

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

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

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

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

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

לסיכום חזרתי לוינדוס בשביל סקייפ.

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

13 February, 2018 11:51 AM

05 February, 2018


סיכום 2017 (באיחור קל)

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

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

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

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

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

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

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

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

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

אנו מודים בהזדמנות זו לכל העושים במלאכה לאורך שנת 2017, ונשמח לראותכם גם במהלך השנה הקרובה!


05 February, 2018 12:14 PM

31 January, 2018

Rabin Yasharzadeh

Ansible and ControlMaster file naming

This is a short story of how Ansible and SSH (using the default ControlMaster path format) bite me.

Lets take this network layout for example, where we have the same IP behind different machines.

+--------------+           +------------+
                               |              |           |            |
                               |  dc1-jumper  +-----^-----+  dc1-db    |
                        +------>     |           |  |
                        |      |              |           |            |
+-------------+         |      +--------------+           +------------+
|             |         |
|  mgmt-host  +---------+
|             |         |      +--------------+           +------------+
+-------------+         |      |              +-----^-----+            |
                        |      |  dc2-jumper  |           |  dc2-db    |
                        +------>     |           |  |
                               |              |           |            |
                               +--------------+           +------------+

And we have this lines in our ssh config file,

Host dc1-jumper
  HostName dc1-jumper
  User root
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no

Host dc2-jumper
  HostName dc2-jumper
  User root
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no

Host dc1-db
  User root
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  ProxyCommand ssh dc1-jumper -W %h:%p

Host dc2-db
  User root
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  ProxyCommand ssh dc1-jumper -W %h:%p

Host *
   ControlMaster auto
   ControlPath ~/.ssh/master-socket/%r@%h:%p
   ControlPersist 6s

Now the problem is that

share the same IP, and the master socket file which is created (based on the above placeholders %r@%h:%p) will use the same file name, so if you try to connect to
right after you have connected to
, guess where you well end up ?

$ ll ~/.ssh/master-socket
0 srw-------. 1  Jan 31 17:42 root@
0 srw-------. 1  Jan 31 17:41 root@dc1-jumper:22
0 srw-------. 1  Jan 31 17:41 root@dc2-jumper:22

I only notice this after I saw my Ansible playbook is changing the same file over and over, the file was a simple yum repo definition, which should not change after the first setup, but this repo template had a ansible fact as place holder which was the distro version (rhel6/rhel7), and based on which connection was establish first (dc1-db vs dc2-db) this fact was set based on the first machine which was connected. So each run one of the machine will register a change.

After looking into ssh documentation I found out there are other place holders I can use. There is %C which didn’t help in my case, as it seem to generate the same string, but using %n did the trick as it used the connection name and not the

name/ip for the socket file.

ControlPath ~/.ssh/master-socket/%r-%n-%p

$ ll ~/.ssh/master-socket
0 srw-------. 1  Jan 31 17:42 root-dc1-db-22
0 srw-------. 1  Jan 31 17:42 root-dc2-db-22
0 srw-------. 1  Jan 31 17:41 root-dc1-jumper-22
0 srw-------. 1  Jan 31 17:41 root-dc2-jumper-22


31 January, 2018 04:48 PM

29 January, 2018

Shlomi Noach

orchestrator 3.0.6: faster crash detection & recoveries, auto Pseudo-GTID, semi-sync and more

orchestrator 3.0.6 is released and includes some exciting improvements and features. It quickly follows up on 3.0.5 released recently, and this post gives a breakdown of some notable changes:

Faster failure detection

Recall that orchestrator uses a holistic approach for failure detection: it reads state not only from the failed server (e.g. master) but also from its replicas. orchestrator now detects failure faster than before:

Faster master recoveries

Promoting a new master is a complex task which attempts to promote the best replica out of the pool of replicas. It's not always the most up-to-date replica. The choice varies depending on replica configuration, version, and state.

With recent changes, orchestrator is able to to recognize, early on, that the replica it would like to promote as master is ideal. Assuming that is the case, orchestrator is able to immediate promote it (i.e. run hooks, set read_only=0 etc.), and run the rest of the failover logic, i.e. the rewiring of replicas under the newly promoted master, asynchronously.

This allows the promoted server to take writes sooner, even while its replicas are not yet connected. It also means external hooks are executed sooner.

Between faster detection and faster recoveries, we're looking at some 10sec reduction in overall recovery time: from moment of crash to moment where a new master accepts writes. We stand now at < 20sec in almost all cases, and < 15s in optimal cases. Those times are measured on our failover tests.

We are working on reducing failover time unrelated to orchestrator and hope to update soon.

Automated Pseudo-GTID

As reminder, Pseudo-GTID is an alternative to GTID, without the kind of commitment you make with GTID. It provides similar "point your replica under any other server" behavior GTID allows.

There's still many setups out there where GTID is not (yet?) deployed and enabled. However, Pseudo-GTID is often misunderstood, and though I've blogged and presented Pseudo-GTID many times in the past, I still find myself explaining to people the setup is simple and does not involve change to one's topologies.

Well, it just got simpler. orchestrator is now able to automatically inject Pseudo-GTID for you.

Say the word: "AutoPseudoGTID": true, grant the necessary privilege, and your non-GTID topology is suddenly supercharged with magical Pseudo-GTID tokens that provide you with:

Auto-Pseudo-GTID further simplifies the infrastructure in that you no longer need to take care of injecting Pseudo-GTID onto the master as well as handle master identity changes. No more event_scheduler to enable/disable nor services to start/stop.

More and more setups are moving to GTID. We may, too! But I find it peculiar that Pseudo-GTID was suggested 4 years ago, when 5.6 GTID was already released, and still many setups are not yet running GTID. If you're not using GTID, please try Pseudo-GTID! Read more.

Semi-sync support

Semi-sync has been internally supported via a specialized patch contributed by Vitess, to flag a server as semi-sync-able and handle enablement of semi-sync upon master failover.

orchestrator now supports semi-sync more generically. You may use orchestrator to enable/disable semi-sync master/replica side, via orchestrator -c enable-semi-sync-master, orchestrator -c enable-semi-sync-replica, orchestrator -c disable-semi-sync-master, orchestrator -c disable-semi-sync-replica commands (or API equivalent).

The API will also tell you whether semi-sync is enabled on instances. Noteworthy that configured != enabled. A server can be configured with rpl_semi_sync_master_enabled=ON, but if no semi-sync replicas are found, the Rpl_semi_sync_master_status state is OFF.


UI changes, removal of prepared statements, documentation updates, raft updates...

orchestrator is free and open source and released under the Apache 2 license. It is authored at and used by GitHub.

I'll be presenting orchestrator/raft in FOSDEM next week, at the MySQL and Friends Room.

29 January, 2018 09:02 PM

21 January, 2018

Kaplan Open Source Consulting

תמיכה ב-PostgreSQL

אנחנו שמחים להכריז על שירותי ייעוץ ותמיכה ב-PostgreSQL, אחד ממסדי הנתונים בקוד פתוח המועדפים על ארגונים. אנו תומכים בהתקנות על כל הפצות הלינוקס הגדולות, אצל הלקוח או בענן, כולל פתרונות PostgreSQL-as-a-service. בנוסף, אנחנו גם תומכים ב-PostGIS, תוספת עבור מידע מרחבי בתוך PostgreSQL. השירות שלנו מגובה ע"י מרכז הכשירות של credativ, אחת מחברות המובילות בתחום ה-PostgreSQL.

בנוסף לשירות העסקי, אנחנו שמחים להצטרף לקהילת ה-PostgreSQL הישראלית, על ידי מתן חסות לכנס PGDay 2018 שיתקיים ב-19.3.2018 (פרטים נוספים באתר http://pgday.org.il )

21 January, 2018 10:37 AM

Hetz Ben Hemo

לקחים שלמדתי כפרילאנסר

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

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

אז אם אתה רוצה להיות עצמאי אתה צריך לשאול את עצמך שאלה ראשונה: מה אתה מחפש להשיג בכך שתהיה עצמאי? אם התשובה שלך היא "כסף" אז זה נחמד, אבל כמה כסף? אם התשובה שלך לדוגמא היא משהו כמו 18-25 אלף שקל בחודש, אז התשובה שלי אליך פשוטה: לך תישאר שכיר. ברצינות: ההבדל בין הכנסות של 25K של שכיר ל-25K של עצמאי הם לא כאלו גדולים. מצד שני, אם אתה רוצה להרוויח סכומים כאלו בנוסף להיותך שכיר (עבודה בערב/סופ"ש/חופש) – אז מצוין, ולכן חשוב לזכור: כעצמאי, יש לך יותר הוצאות משכיר (מה לעשות, מדינת ישראל אוהבת לדפוק עצמאים). אחרי הכל, אתה רוצה עוד כסף, לא?

אז יש כמה שלבים שכדאי לחשוב עליהם ולעבוד עליהם כמה שצריך:

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

בהצלחה 🙂

הטקסט המלא

21 January, 2018 08:19 AM

20 January, 2018

Guy Rutenberg

Set default application using `xdg-mime`

You can use the xdg-mime utility to query the default mime-type associations and change them.

xdg-mime query default video/mp4

Will return the .desktop file associated with the default app to open mp4 files. To change the default association:

xdg-mime default vlc.desktop video/mp4

you need to specify the desktop file to open files of the specified mime type. To check the mime-type of a given file, use

file -ib filename

20 January, 2018 06:11 PM

16 January, 2018

Hetz Ben Hemo

ה-LAB הבא פרק 7 – קניית שרתים יד שניה

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

סוחרים וחברות המתמחים בקניה ומכירה של שרתים יד שניה, קונים בד"כ את השרתים (במחירים מצחיקים, בגלל זה יש להם קשרים עם כל מיני סוחרים שיודעים מי הולך לפשוט רגל ולמכור ציוד במחירי רצפה). בחלק מהמקרים (במיוחד סוחרים שאינם מנוסים) ינסו למכור את השרת כמו שהוא ואילו המנוסים יפרקו את השרתים לגורמים כדי למכור את החלקים במחירים שונים. הסיבה? בחלק מהמקרים חברות קונות שרת יד שניה ורק לאחר הקניה מתברר להם שהם צריכים פלאג או רשיון או כרטיסון קטן לדוגמא – על מנת לקבל שליטה מלאה. אחד המקרים הבולטים בדברים אלו הם שרתי IBM/LENOVO דגמי X3650 M3/M4: אם אתה מעונייין לדוגמא להתקין יותר מ-8 דיסקים באותו שרת אז תצטרך לרכוש:

את 2 הדברים הראשוניים תוכל למצוא בנקל ברשת ב-eBay ובמקומות אחרים, אך את הכבל השלישי תתקשה למצוא (כי IBM/LENOVO בקושי יצרו אותו) והעלות שלו כיום (רק של כבל מפצל כח!) היא 150-300 דולר.

אז נניח ואתה מחפש באתרים, שואל חברים וחושב לרכוש שרת כלשהו ל-LAB שלך. הנה כמה נקודות שכדאי לשים אליהן לב:

לסיכום: רוב היצרנים מייצרים שרתים כמו טנקים. גם אם תקנה שרת בן 6-7 שנים היום, הוא יכול לעבוד אצלך ב-LAB ולתת תוצאות טובות גם עוד 4 שנים. תן לו איוורור טוב/קירור טוב, חבר אותו למערכת לוגים (syslog וחבריו) ותנטר אותו (Zabbix וכו', יש templates שתומכים טבעית בכל סוגי השרתים), ואתה תהנה ממנו.

הטקסט המלא

16 January, 2018 08:07 PM

Artyom Beilis

CppCMS עובר מ-LGPLv3 ל-MIT

היום עדכנתי רישיון של CppCMS ל-MIT. הגרסה הקרובה 1.2 תשוחרר עם רישיון מעודכן

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

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

הטקסט המלא

16 January, 2018 09:47 AM

02 January, 2018

Kaplan Open Source Consulting

יעדי 2018

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

היעדים הקהילתיים שלנו ל-2018:

  1. אימוץ מדיניות "כסף ציבורי? קוד ציבורי!" בגופי ממשלה, רשויות המדינה והשלטון המקומי
  2. שילוב נשים בעולם הקוד הפתוח
  3. מימון המונים לגיור מוצרי קוד פתוח
  4. הקמת חממה לעסקים מבוססי קוד פתוח
  5. שילוב סטודנטים בפרוייקטי קוד פתוח

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

02 January, 2018 11:22 PM

27 December, 2017

Diego Iastrubni

העדכון הכי משמעם שיש

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

כמה שבועות אחרי – אני משתמש בדביאן ובאובונטו ב-wayland. והאמת? זה עובד בצורה שקופה ומשעממת כל כך שצריך ממש להתאמץ ולהבין שהיה שינוי מהותי במערכת. ולא רק זה – יש תמיכה מלאה לאחור תוכניות legacy (דוגמאות – AndroidStudio/IntelliJ או popcorntime שעובדות מעל X11 ולא Wayland).

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

כל הכבוד לצוות הפיתוח.

הטקסט המלא

27 December, 2017 08:18 PM

Boris Shtrasman

XMPP ו Hangouts

בערך מזה כארבעה חודשים יש בעייה בין XMPP לבין hangouts בשירותי GTalk.

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

לאחר שמספר אנשי קשר הודיעו לי לא קיבלו הודעות (וגם אני שמתי לב שאני מפספס הודעות ) עברתי להשתמש בפלאגין בבפיג'ין. למזלי purple-hangouts של EionRobb עובד יחסית חלק: מאפשר משלוח תמונות , מאפשר קבלת הודעות כאשר אתה לא מחובר.

מה שלא עובד זה אפשרות שיחות וכמובן נושא החיווי מתי שאתה "מחובר" או "לא מחובר".

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

27 December, 2017 12:10 PM

24 December, 2017


סיכום ומשוב אוגוסט פינגווין

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

24 December, 2017 06:48 PM

14 December, 2017

Arie Skliarouk

O GTalk team, where were thou? (part III) (AKA: The other shoe dropped).

Today it happened for the first time. GTalk team, silently, without telling anyone, stopped messages sent using XMPP to be delivered to Android Hangouts clients. This caused me to miss important alert message from my monitoring system.

Good bye GTalk/Hangouts, it was nice to know you.

Hello telegram, the only popular and opensource API system out there!
See you on tg://resolve?domain=skliarie

14 December, 2017 08:41 AM

07 December, 2017


התמודדות עם שגיאות תוכנה

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

07 December, 2017 09:40 AM

03 December, 2017

Rabin Yasharzadeh

Force WP-CLI output to be in English

I need to manage several insensate of WordPress installations, some of them are in Hebrew and one in Arabic, and when using wp-cli to manage the installation, e.g when running plugin update, wp-cli will use WordPress translation strings with the current WP installed language. So for example a Hebrew WP installation will look like this:

WP-CLI terminal output in Hebrew

Using WP-CLI with a terminal not supporting BiDi

One way to over come this, is to use a terminal which support BiDi (e.g mlterm or Konsole)

WP-CLI with BiDi suported terminal

Using WP-CLI with a terminal (like mlterm) supporting BiDi

That’s make is a bit better, but still I prefer all my terminal work to be in English.

I tried to add a snippet of code to wp-config.php to detect if the WP installation is running via WP-CLI and force the WPLANG to be en_USbut that didn’t work either. So I googled a bit more and didn’t found any way to resolve this my self, so I asked for some help in the wp-cli slack channel and they gave me a work around which seems to work, and they also open an issue (which you are welcome to support to push this forward) in github about defaulting to English for wp-cli in terminal.


Any way, the short answer is to use the --require option of wp-cli to load a file which uses a hook to set WPLANG before any one set it.

WP_CLI::add_wp_hook( 'pre_option_WPLANG', function() {
    return 'en_US';

And you can run all your commands with:

wp --require=force-locale.php {...}

or you can go one step forward, and set it as default for all wp commands by setting it in the global ~/.wp-cli/config.yml file

  - /home/wp/.wp-cli/force-locale.php


03 December, 2017 08:35 AM

28 November, 2017

Lior Kaplan

AGPL enforced: The Israeli ICT authority releases code

Data.gov.il was created in 2011 after the Israeli social justice protests as part of the the public participation initiative and started to offer data held by the government. Back then the website was based on Drupal. In 2016 it was changed to CKAN, a designated system for releasing data. This system is licensed under the AGPLv3 requiring source code availability for anyone who can access the the system over a network, de facto for every user.

Since the change to CKAN, open source people asked the state to release the code according to the license but didn’t get a clear answer. All this time when it’s clear it’s violation.  This led Gai Zomer to file a formal complaint in March 2017 with the Israeli State Comptroller. Absurdly, that same month the ICT authority mentioned a policy to release source code it owns, while failing to release code it has taken from others and adapted.

With the end of the summer break and Jew holidays, and after I wasn’t able to get the source, I decided to switch to legal channels, and with the help of Jonathan Klinger and my company, Kaplan Open Source Consulting, we notified they should provide the source code or we’ll address the court.

Well, it worked. In 3 days time the CKAN extensions where available on the website, but in a problematic way, so users weren’t able to download easily. This is why we decided not to publish this code release and let them fix it first. In addition we made it clear all the source code should be available, not only the extensions. Further more, if they already release it’s recommended to use git format instead of just “dumping” a tarball. So we told them if they aren’t going to make a git repository we’ll do that ourselves, but in any case, would prefer them to do that .

While this issue is still pending, the ICT authority had a conference called “the citizen 360” about e-gov and open government in which they reaffirmed their open source plans.

A slide about open source from the Israeli ICT authority presentation

A slide about open source from the Israeli ICT authority presentation

Now, a month later, after our second letter to them, the about page in data.gov.il was updated with links to the ICT authority GitHub account which has the sources for the website and the extensions. A big improvement, and an important mark point as the commit to the repository was done by an official (gov.il) email address.

Beyond congratulating the Israeli ICT authority for their steps forward and the satisfaction of our insisting on them became fruitful, we would like to see the repository get updated on a regular basis, the code being given back to the various CKAN extensions (e.g. Hebrew translation). In general, we hope they would to get inspired by how the how data.gov.uk is doing technical transparency. If we allow ourselves to dream, we would like to see Israel becoming a dominate member in the CKAN community and among the other governments who use it.

We’re happy to be the catalyst for open source in the Israeli government, and we promise to keep insisted where needed. We know that due to other requests and notifications more organizations are on their way to release code.

(This post is a translation from Hebrew of a post in Kaplan Open Source Consulting at https://kaplanopensource.co.il/2017/11/20/data-gov-il-code-release/)

Filed under: Debian GNU/Linux, Fedora, Government Policy, Israeli Community, LibreOffice, PHP, Proud to use free software

Full text

28 November, 2017 09:07 AM

14 November, 2017

Guy Rutenberg

Installing Firefox Quantum on Debian Stretch

Debian only provides the ESR (Extended Support Release) line of Firefox. As a result, currently, the latest version of Firefox available for Debian Stretch is Firefox 52, which is pretty old. Lately, Firefox 57, also known as Quantum, was released as Beta. It provides many improvements over older Firefox releases, including both security and performance.

Begin by downloading the latest beta (for Firefox 57) and extract it to your home directory:

$ wget -O firefox-beta.tar.bz2 "https://download.mozilla.org/?product=firefox-beta-latest&os=linux64⟨=en-US"
$ tar -C ~/.local/ -xvf firefox-beta.tar.bz2

This installs Firefox to your current user. Because Firefox is installed in a user-specific location (and without root-priveleges), Firefox will also auto-update when new versions are released.

If you prefer using the stable version of firefox, simply replace the first step by

$ wget -O firefox-stable.tar.bz2 "https://download.mozilla.org/?product=firefox-latest&os=linux64⟨=en-US"

Next, we take care of desktop integration. Put the following in ~/.local/share/applications/firefox-beta.desktop:

[Desktop Entry]
Name=Firefox Beta
Exec=/home/guyru/.local/firefox/firefox %u

14 November, 2017 07:22 PM

08 November, 2017

Lior Kaplan

קוד פתוח בכנס האזרח 360 של רשות התקשוב הממשלתי

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

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

מכל הדברים, שקף אחד עשה לי את היום:

קוד פתוח ברשות התקשוב הממשלתי

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

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

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

תויק תחת:gov.il

08 November, 2017 03:07 PM

29 October, 2017

Ilya Sher

The missing link of Ops tools

It’s like we went from horse to spaceship, skipping everything in between.


Let’s say you are managing your system in AWS. Amazon provides you with API to do that. What are your options for consuming that API?

Option 1: CLI or library for API access

AWS CLI let’s us access the API from the command line and bash scripts. Python/Ruby/Node.js and other languages can access the API using appropriate libraries.

Option 2: Declarative tools

You declare how the system should look like, the tool figures out dependencies and performs any API calls that are needed to achieve the declared state.

Problem with using CLI or API libraries

Accessing API using CLI or libraries is fine for one off tasks. In many cases, automation is needed and we would like to prepare scripts. Ideally, these scripts would be idempotent (can be run multiple times, converging to the desired state and not ruining it). We then quickly discover how clunky these scripts are:

# Script "original"
if resource_a exists then
  if resource_a_property_p != desired_resource_a_property_p then
    set resource_a_property_p to desired_resource_a_property_p
  if resource_a_property_q != desired_resource_a_property_q then
  # resource_a does not exist
  create resource_a
  set resource_a_property_p to desired_resource_a_property_p
# more chunks like the above

It’s easy to see why you wouldn’t want to write and maintain a script such as above.

How the problem was solved

What happened next: jump to “Option 2”, declarative tools such as CloudFormation, Terraform, etc.


Other possible solution that never happened

If you have developed any code, you probably know what refactoring is: making the code more readable, deduplicate shared code, factoring out common patterns, etc… without changing the meaning of the code. The script above is an obvious candidate for refactoring, which would be improving “Option 1” (CLI or a library for API access) above, but that never happened.

All the ifs should have been moved to a library and the script could be transformed to something like this:

# Script "refactored"
create_or_update(resource_a, {
  property_p = desired_resource_a_property_p
  property_q = desired_resource_a_property_q
# more chunks like the above

One might say that the “refactored” script looks pretty much like input file of the declarative tools mentioned above. Yes, it does look similar; there is a huge difference though.

Declarative tools vs declarative primitives library

By “declarative primitives library” I mean a programming language library that provides idempotent functions to create/update/delete resources. In our cases these resource are VPCs, load balancers, security groups, instances, etc…

Differences of declarative tools vs declarative primitives library

  1. Declarative tools (at least some of them) do provide dependency resolution so they can sort out in which order the resources should be created/destroyed.
  2. Complexity. The complexity of mentioned tools can not be ignored; it’s much higher than one of  declarative primitives library. Complexity means bugs and higher maintenance costs. Complexity should be considered a negative factor when picking a tool.
  3. Some declarative tools track created resources so they can easily be destroyed, which is convenient. Note that on the other hand this brings more complexity to the tool as there must be yet another chunk of code to manage the state.
  4. Interacting with existing resources. Between awkward to impossible with declarative tools; easy with correctly built declarative primitives library. Example: delete all unused load balancers (unused means no attached instances): AWS::Elb().reject(X.Instances).delete()
  5. Control. Customizing behaviour of your script that uses declarative primitives library is straightforward. It’s possible but harder with declarative tools. Trivial if in a programming language can look like count = "${length(var.public_subnets) > 0 ? 1 : 0}" (approved Terraform VPC module).
  6. Ease of onboarding has declarative tools as a clear winner – you don’t have to program and don’t even need to know a programming language, but you can get stuck without knowing it:
  7. Getting stuck. If your declarative tool does not support a property or a resource that you need, you might need to learn a new programming language because the DSL used by your tool is not the programming language of the tool itself (Terraform, Puppet, Ansible). When using declarative primitives library on the other hand you can always either extend it when/if you wish (preferable) or make your own easy workaround.
  8. Having one central place where potentially all resources are described as text (Please! don’t call that code, format is not a code!). It should be easier done with declarative tools. In practice, I think it depends more on your processes and how you work.

As you can see, it’s not black and white, so I would expect both solutions be available so that we, Ops, could choose according to our use case and our skills.

My suggestion

I don’t only suggest to have something between a horse and a spaceship; I work on a car. As part of the Next Generation Shell (a shell and a programming language for ops tasks) I work on declarative primitives library. Right now it covers some parts of AWS. Please have a look. Ideally, join the project.

Next Generation Shell – https://github.com/ilyash/ngs


Do you agree that the jump between API and declarative tools was too big? Do you think that the middle ground, declarative primitives approach, would be useful in some cases? Comment here or on Reddit.

Have a nice day!

29 October, 2017 04:30 PM

19 October, 2017

Lior Kaplan

Hacktoberfest 2017 @ Tel Aviv

I gave my “Midburn – creating an open source community” talk in Hacktoberfest 2017 @ Tel Aviv. This is the local version of an initiative by DigitalOcean and GitHub.

I was surprised about the vibe both the location and the organizers gave the event, and the fact they could easily arrange t-shirts, pizzas and beer.

Looking at the github search, it seem the worldwide event brings many new contributions. I think we have something to learn how to do a mass concept like that. Especially when it crosses both project limits and country limits. (e.g. not a local bug squashing party).

Filed under: Open source businesses

Full text

19 October, 2017 09:22 PM

18 October, 2017

Ram on Agmon

אובנטו 1710 – גירסה ששווה להתקין

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

הטקסט המלא

18 October, 2017 05:06 PM

12 October, 2017

Lior Kaplan

משימות קוד פתוח קלות – אוקטובר 2017

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

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

  1. עדכון התרגום לעברית של תוכנית ההתקנה של דביאן.
    קוד: https://github.com/kaplanlior/debian-installer
  2. תרגום Public funding? Public code?
    אתר: https://publiccode.eu
    קוד: https://git.fsfe.org/pmpc/website/src/master/site/content
  3. ליברה אופיס – מעבר על כל הבאגים ב-meta issues
    א. איסוף שם וכתובת המייל של המדווח על הבאג ואנשים בתגובות.
    המטרה של האיסוף היא יצירת מאגר של אנשים שיכולים לעזור לקידום התמיכה בעברית.
    ב. בדיקה אם צריך לשחזר את הבאג בגרסה עדכנית, ודיווח על כך.
  4. PHP –  בדיקת עדכניות קבצי ה-NEWS לעומת ה-ChangeLog באתר (גרסאות 7.0, 7.1)
    לוודא שכל שורה שמופיעה בקובץ NEWS הגיעה ל-ChangeLog ולהפך. לחלק מהדברים יש נטיה ליפול בין הכסאות (לרוב זה עדכוני האבטחה)
    קוד: https://github.com/php/php-src
    שינויים: http://www.php.net/ChangeLog-7.php

תודה מראש לעוזרים

תויק תחת:Debian GNU/Linux, Israeli Community, LibreOffice, PHP

12 October, 2017 12:16 PM

10 October, 2017

Ilya Sher

Why I have no favorite programming language

TL;DR – because for me there is no good programming language.

I’m doing mostly systems engineering tasks. I manage resources in Cloud and on Linux machines mostly. I can almost hear your neurons firing half a dozen names of programming languages. I do realize that they are used by many people for systems engineering tasks:

The purpose of this post is not to diminish the value of these languages; the purpose is to share why I don’t want to use any of the languages above when I write one of my systems-engineering-task scripts. My hope is that if my points resonate with you, the reader, you might want to help spread the word about or even help with my suggested solution described towards the end.


So let’s go over and see why I don’t pick one of the languages:

Why not language X?

All languages

All languages except bash



Ruby and Perl


I can’t put my finger on something specific but Ruby does not feel right for me.



Note that bash was created in a world that was vastly different from the world today: different needs, tasks, languages to take inspiration from.

My suggested solution

I would like to fill the gap. We have systems-engineering-tasks oriented language: bash. We have quite a few modern programming languages. What we don’t have is a language that is both modern and systems-engineering-tasks oriented. That’s exactly what I’m working on: Next Generation Shell. NGS is a fully fledged programming language with domain specific syntax and features. NGS tries to avoid the issues listed above.

Expected questions and my answers

People work with existing languages and tools. Why do you need something else?

Another programming language? Really? We have plenty already.


Would you use NGS? Which features it must have? What’s the best way to ease the adoption? Please comment here, on Reddit (/r/bash , /r/ProgrammingLanguages) or on Hacker News.

Update: following feedback roughly of the form “Yes, I get that but many Ops tasks are done using configuration management tools and tools like CloudFormation and Terraform. How NGS compares to these tools” – there will be a blog post comparing NGS to the mentioned tools. Stay tuned!

Have a nice day!

10 October, 2017 07:26 AM

09 October, 2017

Guy Sheffer

RealtimePi – out of the box real-time RaspberryPi Raspbian

RealtimePi logo

RealtimePi logo

Hey all,
So it started as a curiosity, and it looks like its working. I made a Raspbian-based distro that ships with a realtime kernel called RealtimePi. You can download the latest here.  It’s open source, sources are here.

A realtime system means its deterministic, it means you should know how long things take to run. They way to do is is to apply a patch to the linux kernel that makes it non-preemptible. To explain – Preemption is the act of temporarily interrupting a task being carried out by a computer system, without requiring its cooperation, and with the intention of resuming the task later.

This is useful for building hardware and robotics, low latency audio and other gpio because there are no surprises when it comes to timing. It seems like something good to try out with the RaspberryPi, because of the GPIO and IOT capabilities.

Bundled with CustomPiOS you can build your customized realtime-kernel device.


Steps to install

  1. Download the image here
  2. Unzip and flash it to an SD card (small enough to fit a 2GB card)
  3. Open newly flashed image and edit two files, one for the wifi, and one for the bot token:
  4. Put in realtimepi-wpa-supplicant.txt your wifi address (skip if using Ethernet cable). Here is how it should look:

You can test the realtime kernel is enabled, by running in the commandline

uname -a

You should see something like this, note PREEMPT RT which indicates its realtime:

 Linux realtimepi 4.9.52-rt37 #1 PREEMPT RT Fri Oct 6 22:29:28 UTC 2017 armv6l GNU/Linux

The line should  look a little different for armv7

I am not an expert with actually building realtime systems, so input on how it preforms, and examples would be appreciated!


Full text

09 October, 2017 10:05 AM

08 October, 2017

Levi Shahar

תוציאו את המיטב מהטרמינל שלכם

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

תמונת היום

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


משיכת כתובת ה - URL של תמונת היום מ - bing:

$ printf "http://bing.com/az/hprichbg/rb/" \ && curl bing.com -Ls | grep -oE "\w+.jpg" | head -n1 

אפשר להגדיל לעשות, ולהגדיר את התמונה כרקע עם feh:

$ url=$(printf "http://bing.com/az/hprichbg/rb/" \ && curl bing.com -Ls |...

Full text

08 October, 2017 04:00 AM

03 October, 2017

Meir Kriheli

מצגת ההרצאה אודות Vue.js

Vue.js החזירה את הכיף שנעלם לי בפיתוח פרונטאנד.

ההרצאה אודות Vue.js שהועברה במסגרת PyWeb-IL 69 זמינה בעמוד הרצאות ומצגות.

03 October, 2017 06:39 AM

02 October, 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.


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?


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.

Versions of this post were already published in the following languages:

I’m deeply grateful to all the people who made these translations; keep them coming!

02 October, 2017 09:47 AM

21 September, 2017

Amir Aharoni

The Curious Problem of Belarusian and Igbo in Twitter and Bing Translation

Twitter sometimes offers machine translation for tweets that are not written in the language that I chose in my preferences. Usually I have Hebrew chosen, but for writing this post I temporarily switched to English.

Here’s an example where it works pretty well. I see a tweet written in French, and a little “Translate from French” link:

Emmanuel Macron on Twitter.png

The translation is not perfect English, but it’s good enough; I never expect machine translation to have perfect grammar, vocabulary, and word order.

Now, out of curiosity I happen to follow a lot of people and organizations who tweet in the Belarusian language. It’s the official language of the country of Belarus, and it’s very closely related to Russian and Ukrainian. All three languages have similar grammar and share a lot of basic vocabulary, and all are written in the Cyrillic alphabet. However, the actual spelling rules are very different in each of them, and they use slightly different variants of Cyrillic: only Russian uses the letter ⟨ъ⟩; only Belarusian uses ⟨ў⟩; only Ukrainian uses ⟨є⟩.

Despite this, Bing gets totally confused when it sees tweets in the Belarusian language. Here’s an example form the Euroradio account:

Еўрарадыё   euroradio    Twitter double.pngBoth tweets are written in Belarusian. Both of them have the letter ⟨ў⟩, which is used only in Belarusian, and never in Ukrainian and Russian. The letter ⟨ў⟩ is also used in Uzbek, but Uzbek never uses the letter ⟨і⟩. If a text uses both ⟨ў⟩ and ⟨і⟩, you can be certain that it’s written in Belarusian.

And yet, Twitter’s machine translation suggests to translate the top tweet from Ukrainian, and the bottom one from Russian!

An even stranger thing happens when you actually try to translate it:

Еўрарадыё   euroradio    Twitter single Russian.pngNotice two weird things here:

  1. After clicking, “Ukrainian” turned into “Russian”!
  2. Since the text is actually written in Belarusian, trying to translate it as if it was Russian is futile. The actual output is mostly a transliteration of the Belarusian text, and it’s completely useless. You can notice how the letter ⟨ў⟩ cannot be transliterated.

Something similar happens with the Igbo language, spoken by more than 20 million people in Nigeria and other places in Western Africa:

 4  Tweets with replies by Ntụ Agbasa   blossomozurumba    Twitter.png

This is written in Igbo by Blossom Ozurumba, a Nigerian Wikipedia editor, whom I have the pleasure of knowing in real life. Twitter identifies this as Vietnamese—a language of South-East Asia.

The reason for this might be that both Vietnamese and Igbo happen to be written in the Latin alphabet with addition of diacritical marks, one of the most common of which is the dot below, such as in the words ibụọla in this Igbo tweet, and the word chọn lọc in Vietnamese. However, other than this incidental and superficial similarity, the languages are completely unrelated. Identifying that a text is written in a certain language only by this feature is really not great.

If I paste the text of the tweet, “Nwoke ọma, ibụọla chi?”, into translate.bing.com, it is auto-identified as Italian, probably because it includes the word chi, and word that is written identically happens to be very common in Italian. Of course, Bing fails to translate everything else in the Tweet, but this does show a curious thing: Even though the same translation engine is used on both sites, the language of the same text is identified differently.

How could this be resolved?

Neither Belarusian nor Igbo languages are supported by Bing. If Bing is the only machine translation engine that Twitter can use, it would be better to just skip it completely and not to offer any translation, than to offer this strange and meaningless thing. Of course, Bing could start supporting Belarusian; it has a smaller online presence than Russian and Ukrainian, but their grammar is so similar, that it shouldn’t be that hard. But what to do until that happens?

In Wikipedia’s Content Translation, we don’t give exclusivity to any machine translation backend, and we provide whatever we can, legally and technically. At the moment we have Apertium, Yandex, and YouDao, in languages that support them, and we may connect to more machine translation services in the future. In theory, Twitter could do the same and use another machine translation service that does support the Belarusian language, such as Yandex, Google, or Apertium, which started supporting Belarusian recently. This may be more a matter of legal and business decisions than a matter of engineering.

Another thing for Twitter to try is to let users specify in which languages do they write. Currently, Twitter’s preferences only allow selecting one language, and that is the language in which Twitter’s own user interface will appear. It could also let the user say explicitly in which languages do they write. This would make language identification easier for machine translation engines. It would also make some business sense, because it would be useful for researchers and marketers. Of course, it must not be mandatory, because people may want to avoid providing too much identifying information.

If Twitter or Bing Translation were free software projects with a public bug tracking system, I’d post this as a bug report. Given that they aren’t, I can only hope that somebody from Twitter or Microsoft will read it and fix these issues some day. Machine translation can be useful, and in fact Bing often surprises me with the quality of its translation, but it has silly bugs, too.

21 September, 2017 09:39 AM

18 September, 2017

Levi Shahar

איך לעבוד על ה - sysadmin

שאלתם את עצמכם פעם האם הפלט שאתם רואים בטרמינל אמיתי? כלים כמו awk, tr, cut מאפשרים לשנות פלט טקסט בקלות. איך תוכלו לוודא שהפקודה שאתם מריצים, היא לא נסיון של תוקף לבצע “social engineering” או להסוות את עצמו?

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


הפקודה who, היא הפקודה הראשונה שנריץ בכדי לראות מי מחובר כרגע למערכת.

$ who user pts/0 2017-09-01 09:43 ( user pts/1 2017-09-01 09:50 ( 

כפי שניתן לראות בפלט הפקודה who מופיעה גם כתובת ה - IP של בוב ( ואנחנו יכולים לראות בבירור שעוד משתמש מחובר למערכת.
בכדי להסתיר את עצמו, בוב כתב סקריפט בשם im-a-ghost.sh....

Full text

18 September, 2017 08:44 AM

05 September, 2017

Diego Iastrubni

פיירפוקס לסלולרי – מכה (וחבל)

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

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

אז התקנתי מהחנות של FDroid את Fennec ולאחריו את Firefox מתוך ה-PlayStore [1]. בגדול – המוצר עובד. והאפשרות להתקין תוספים (את אותם תוספים של השולחן עבודה!!!) מאוד קסמה לי.

  1. התקנתי adblock ו־Ghostery. הדפים יותר רזים, ועולים יותר מהר. מצויין על מכשיר חלש ובעל סוללה. טוב. מצויין.
  2. אם מאפשרים את כל הטלמטריה – הדפדפן מקרטע. אז הסרתי “שירות המיקום” ו־”Telemery” התוכנה עובדת טוב. לא טוב [2].
  3. בעת גלילה בדפים יש … תקיעה לאחר שני מסכים. לא טוב.
  4. כשאני חוזר לעמוד הראשון של המכשיר, אני רואה ריענון כבד וזה לוקח הרבה זמן. לא טוב.
  5. הדפים נטענים מאוד לאט. האם פיירפוקס לא תומך ב־HTTP2? האם כרום טוען חלק מהדף מראש…? אין תשובה, אבל לוקח לי שלוש עד חמש שניות לפתוח עמודים ואילו בכרום תוך שנייה העמוד פתוח. מוזר ורע.
  6. בתצוגה של כל הלשוניות (מה פתוח) יש שתי עמודות… וכדי לסגור לשונית/טאב/כרטיסייה צריך לזרוק הצידה… אבל יש רק חצי מסך ומאוד קשה לבצע את המחווה… בהגדרות יש “כללי – לשוניות צפופות” – נא לבטל ואז אפשר להשתמש בפיצ’ר הזה כמו שצריך. בעייתי.
  7. כאשר צופים בדך אינטרנט – הטקסט לא מקוצר לרוחב הדף אלא גולל. זה קורה למשל בפורומים של ואטסאפ וגורם זה שהפורום בלתי קריא. דוגמה שנייה היא בקיראה של קבצי text ושם אין ממש אשרות לעשות זום (דוגמה https://tools.ietf.org/html/rfc4180). רע.
  8. בחיפוש בגוגל – אני מקבל עמוד שונה (הכותרת נראות שונות מאשר בכרום). זה אומר שגוגל מניאקים ושולחים תוכן שונה, למראות שהדפדפן יכול להציג. וכן – אני לא היחיד שרואה את זה   (זהו היוצר של הדפדפן אופרה). [3]
  9. בחיפוש בגוגל – הלחיצה על חיפוש במקלדת (איפה שה־enter אמור להיות, ויש עליו זכוכית מגדלת) לא מתחילה את החיפוש. נוראי. רשימת באגים שאולי מתאימה:  1344153  1163985  751238 1174348

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

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


  1. למעשה מדובר באותו הקוד, רק בנייה שונה. זאת של FDroid יותר קפדנית ולא רשמית. אני רוצה להעלות את המספרים של הגרסה הרשמית ולכן התקנתי מה־Play Store.
  2. לבטל שליחה של נתונים למפתחים זה רע מאוד. זה אומר שכאשר תהיה בעייה – אין להם אפשרות לטפל בה.כמו כן – אין להם מושג במה אתה משתמש ומה לא, וכך הם לא ידעו במה צריך לטפל.
  3. בואו נזכור שמיקרוסופט עשו להם אם זה פעם – http://www.operasoftware.com/press/releases/desktop/opera-releases-bork-edition http://www.wiumlie.no/2003/2/msn/

הטקסט המלא

05 September, 2017 09:57 AM

25 August, 2017


חודש עם Tilix

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

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

הדבר הקרוב ביותר שמצאתי הוא תוכנה בשם Tilix, אשר קיבלתי עליה המלצה. התוכנה עצמה כתובה בשפה בשם D, והיא מספקת המון תכונות מדהימות, אשר חלקן לקוחות מכלים כדוגמת screen ו tmux, וחלקן מ iTerm2.


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

בנוסף לכך שיש לי split שקל לעבור בניהם עם המקלדת, אפשר גם ליצור משהו שנקרא session, ממש כמו virtual desktop. וגם אליהם ניתן לעבור בקלות עם המקלדת.
היא מאפשרת למשל לשתף מקלדת עם כל או חלק מהטרמינלים הפתוחים בסשן, כך שהקלדה במקום אחד תתקבל גם בשאר, חיפוש של תוכן שהודפס למסך (למשל לוג שאתם פתחתם עם tail -f, ואולי פספסתם משהו בו), ואפילו ניהול של clipboard, בנושא שאל העתקה והדבקה, ולא בניהול של היסוטוריה וכיוב' שלו, הוא יודע לספק הודעת מערכת כאשר פעולה הסתיימה, להגדיר מסוף כ readonly (לא מקבל מקלדת, בניגוד ל CTRL+S שפשוט משהה את הפעילות) ובנוסף, יש לו תמיכה בכלים שונים שלא ניסיתי עדיין.

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

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

אבל זה לא הכל, אני יודע שכאן אני תלוי בטרמינל, ולא בתוכנה שרצה בטרמינל, אבל בסופו של דבר, האם זה משנה אם התוכנה נקראת tmux, screen או אולי Tilix?

ובכן, קצת 🙂

הייתי מאוד שמח לראות את Tilix משפרת מספר דברים אצלה:

במידה והשניים הראשונים יהיו, לדעתי מדובר במתחרה ראוי ל tmux (למעשה הוא כזה כבר עכשיו, אבל עדיין).
כמובן שגם אפשר להריץ tmux בתוך tilix, ואז בכלל זכיתם המון גמישות 🙂

כמובן שיש עוד תכונות של iTerm2 שהייתי שמח לראות אצלי, אבל הדברים שבאמת חשובים לי נוצרו כבר.


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

25 August, 2017 08:29 AM

14 August, 2017

Guy Sheffer

How to reuse your old Raspberry Pi as a Telegram-controlled Alarm Clock – AlarmPi

RaspberryPi Alarm clock

RaspberryPi alarm clock

Hey all,

So do you have a RaspberryPi not doing anything at home? Got that 2GB class 4 SD card that you just don’t know what to do with it? Well this guide is for you! It will let you turn your Pi in to an IOT alarm clock, no code, no complicated commands, just flash, edit two text files and you are good to go. The alarm clock is controlled from Telegram, so you can set it and turn it off from your smartphone. I find that usually using my phone wakes me up. So it’s useful for me. You can also edit the alarm and use any mp3 file you want.
The code is all available in github. AlarmBot is the Telegram Bot. An AlarmPi is the distro (built with CustomPiOS yet again).

Steps to install

  1. Download the image here
  2. Unzip and flash it to an SD card (small enough to fit a 2GB card)
  3. While it downloads and flashes, let’s create a telegram bot and get a token for it!
    1. Send a message to bot father
    2. Send /newbot

      Setting a new bot

      Setting a new bot

    3. Copy the telegram token that is in the last message
  4. Open newly flashed image and edit two files, one for the wifi, and one for the bot token:
    1. Put in alarmpi-wpa-supplicant.txt your wifi address (skip if using Ethernet cable). Here is how it should look:
    2. In config.ini,  paste the newly created bot token from step 3. This is where the token goes:
    3. optionally, you can change the alarm.mp3 file to the sound of your choice.
  5. Boot your pi and connect it to speakers, wait a bit, because it will reboot internally twice. And send /start to your bot.
  6. You’re done! Let’s see how we can set alarm with telegram!

How to use the telegram bot

Once you got a reply to /start and you know the bot is working you can use “/help” to list all the available commands.

First, set the /timezone to your location, and make sure you can see the correct time with the /time command.

Now let’s set an alarm, type /new and you will get the option to pick an alarm that works daily or weekly (code contributions would be great to add more types of alarms).


Once you have alarms, you can manage them in the /list command.


You can disable, or delete commands using this menu. Selecting the bell will disable it, the X will delete an alarm, pressing on the alarm names would close the table.

To stop an alarm that is going, send /stop to the bot.

You can test the alarm using the /test command.

There is no reason why any Pi on earth should not be doing something

So this AlarmPi distro is usable, it lets you burn and flash a device within minutes and make it useful instead of lying and collecting dust in your house. The reason people are not using Pis is because making them do something requires “a guide”, aka list of instructions you are probably going to get wrong to do something simple. Building something as robust as this would take hours, and would be hell to maintain and receive code contributions. But AlarmPi is easy to read and modify. There is a repo for the bot, and a repo for the distro. If a new rapsberrypi comes out and there is a new Raspbian, all you got to do is rebuild and release. No manual editing. And takes less time to build and supports over 40 devices already which run Armbian.

The code base of AlarmBot lets you control crontabs, it could be used for controlling

As always, code contribute are appreciated!

Full text

14 August, 2017 11:01 AM

31 July, 2017

Ira Abramov

כפתור פראנויה לכל כיס

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

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

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

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

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

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

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

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

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


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

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

אני בונה היום אתר, להשקיע באימות כזה למשתמשים שלי?
גם TOTP-2FA וגם U2F – לדעתי כן, במיוחד אם האתר שומר פרטים אישיים של כרטיסי אשראי, בריאות מטופלים ועוד כיוצא באלו. יש ספריות חופשיות שקל לשלב, ולמערכות כמו וורדפרס, דג'נגו, ג'ומלה, רובי-או-ריילז ואחרות יש כבר מודולים מוכנים לקטיפה מהעץ, אז חבל להתעצל!

למה יוביקי 4 ולא גרסת הנאו?
טעם אישי. היוביקי 4 תומך במפתחות טיפה יותר גדולים, הוא טיפה יותר זול, קוד ה-PGP שלו פתוח בגיטהאב. לרוב האנשים גם הנאו יהיה מצוין, והיתרון הגדול שלו הוא NFC שעובד עם אנדרואידים שיש להם רכיב תקשורת תואם. אם רוצים להשתמש ביוביקי 4 (ללא NFC) על אנדרואיד, אפשר בעזרת כבל OTG, או לטלפונים חדשים, חיבור ישיר USB-C בדקם יוביקי החדש).

יש מתחרים ראויים?
יש כמה. חלקם יתנו U2F בלבד בפחות מ$10-$20, חלקם יקרים מאוד אבל עושים דברים נוספים כמו לשמש כארנק קריפטומטבעות (למשל Trezor ואחרים) ויש גם אופציות "האקריות" פתוחות כגון OnlyKey שמוסיף שכבות הגנה כמו סיסמא, פיצ'רים כמו השמדה עצמית וכדומה. יש מצב שאקנה כזה בעתיד, למרות שהוא נראה פחות עמיד מכנית לשבירה ושפשופים.

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

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

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

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

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

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

31 July, 2017 04:51 PM

12 July, 2017

Artyom Beilis

אחרי תקופה ארוכה שוחררה בטא של CppCMS 1.1.0

אחרי תקופה ארוכה של המתנה שוחררה גרסת בטא 1.1.0 של CppCMS. גרסה זו מכילה המון שיפורים ושיוניים. ביניהם:

  • תכנון מחדש של application pool לתיקון מספר בעיות מובנות שהיו קיימות בו עד כה
  • API חדש של פעולות non-blocking לשיפור משמעותי בביצועי אפליקציות אסינכרוניות
  • סיכון ועיבוד בזמן העלאה של התוכן (למשל עיבוד או בדיקה של קבצים תוך כדי העלאה)
  • תמיכה משופרת ב-RESTful API
  • מערכת לניהול plugin ושיפורים מערכת תבניות (templates) בהם.
  • אפשרות ניהול session ללא עוגיות (למקרה והמשתמש ממש צריך)
  • שילוב ניהול ה-session מול טכנולוגיות אחרות כולל מימוש עבור PHP, Java Servlet, ASP.Net ו-Python Django
  • שיפורי ביצועים רבים
  • ועוד...

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

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

  • ל-1.4 תמיכה מלאה ב-HTTP/1.1, ב-HTTPS ומימוש של websockets
  • ל-2.0 להעביר CppCMS ל-C++11 תוך ניקוי חלק מה-API שילקח מספריה סטנדרטית כמו std::shared_ptr

אתם מוזמנים להתנסות בגרסת בטא האחרונה!

הטקסט המלא

12 July, 2017 09:01 AM

11 July, 2017

Oz Nahum

Submitting patches to Python

This is not my typical blog post style. So no "how to" or opinnions. Just some reflections on how I submitted a patch to Python's standard library. continue reading...

11 July, 2017 06:56 AM

18 June, 2017

Amir Aharoni


אז לפתע פתאום האקדמיה ללשון שינתה את כללי הכתיב.

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

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

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

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

אני מרוצה מהשינוי של „תכנה” ו„יזמה” ל„תוכנה” ו„יוזמה”. אני גם מרוצה למדי מהשינוי של מילות היחס „אתי, אתך” ל„איתי, איתך”, ושל „עתים” ל„עיתים”, אבל מוזר לי ביותר שלא נוספה בהזדמנות הזאת האות יו״ד למילים כמו „אִגרוף” ו„מִחזור”, כדי לא להתבלבל עם „אֶגרוף” ו„מַחזור”. זה היה יכול להיות כלל פשוט ושימושי, והוא ממש לא היה אמור להיות שנוי במחלוקת. חבל שזה התפספס.

עוד משעשעים אותי ה„אישורים” שנינתו למילה „אומנם” וליו״ד בצורת הגוף הראשון בזמן עתיד בבניין נפעל, למשל „איכנס” במקום „אכנס”. אני תמיד כתבתי אותם בכתיב מלא. את „אומנם” כתבתי בווי״ו כי גם „אֻמנם” הוא ניקוד תקני ולא רק „אָמנם”, וצליל u תמיד אמור להיכתב בווי״ו (אם כי עכשיו גיליתי לראשונה שהניקוד „אֻמנם” מיועד לשאלות, לפחות לפי אבן־שושן). ובבניין נפעל כתבתי תמיד „איכנס”, „איזהר”, וכו׳, כי הניקוד בחיריק תקין כמו בניקוד בסגול (ר׳ למשל גזניוס 51p).

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

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

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

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

18 June, 2017 11:03 AM

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 בודד, עם הסיסמאות בתוכו וכד'). גם נקודה זו טופלה והקוד זמין כעת בגיטהאב:


09 May, 2017 02:41 PM

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

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

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

13 January, 2017

Ram on Agmon

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

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

הטקסט המלא

13 January, 2017 12:10 PM

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:


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.


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


Sponsorship: 246

Ticket sales: 54

Total: 300


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:


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


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

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

הטקסט המלא

12 August, 2016 04:42 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

24 June, 2016


טיפ: התקנת 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.


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

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


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.


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.

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.
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.


25 March, 2016 04:14 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:

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