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

09 February, 2019

Oz Nahum

Fooling around with JavaScript and OpenPGP

Fooling around with JavaScript and OpenPGP, as the title says. I needed to create a page in which I can encrypt files with OpenPGP. Doing this with JavaScript turned out to be possible. These are the results of my experiment. continue reading...

09 February, 2019 01:34 PM

22 January, 2019

Omer Zak

Anonymizing datasets for machine learning

Preface

All of us are familiar with the idea of anonymizing datasets to get rid of personally-identifiable information, in order to enable data mining while preserving (as much as possible) the privacy of the people whose data was collected. The basic idea is to modify names, ID numbers (Social Security Number in USA), home addresses, birthdays, IP addresses and similar information. Sometimes, one needs to get rid also of information about age/gender/nationality/ethnicity.

This method was subjected to a lot of research and it is easy to find, with the help of search engines, relevant papers and articles. See Bibliography for examples.

However, there is also another transformation of datasets. Unlike anonymization, as described above, this transformation is not about privacy preservation. It is about hiding the nature of the data being processed. Lacking a better term, we’ll use the term anonymization also for this transformation.

One possible application for this kind of anonymization is when one develops a revolutionary model for predicting the future behavior of the stock exchanges of the world by following various economic indicators and other publicly available time-dependent data sources.

In such an endeavor, the developer typically has gathered a lot of data, and wants to use it to train his revolutionary machine learning model. Since he cannot afford to build his own data center, he rents a lot of computing power in one of the cloud providers.

However, he does not want to take the risk of an unscrupulous employee of the cloud provider stealing his secret data or model and using it for his own benefit. He also wants to reduce the damage if a black hat hacker breaks into his rented computers.

Some users might want to process information, which interests governments such as the Chinese government. Those governments have the resources to break into cloud computers.

The classical way to mitigate such risks is to encrypt/recode/scramble (henceforth, I’ll refer to all those operations as encryption) the data being uploaded to the cloud. However, this encryption must be done in such a way that the data is still suitable for training the model. In addition, when running the model for making a prediction, the raw model’s results need to be generated in an encrypted form, for decryption in the developer’s on-premises computer/s (to which I will refer as a workstation henceforth). From this point on, we’ll use the terms anonymization and encryption interchangeably.

When looking for relevant research on the second kind of anonymization, I did not easily find relevant information. It motivated me to write this article.

Glossary

The following symbols are described in order of their appearance in text.

Architecture of machine learning systems

A machine learning system is used to approximate a function M, which makes a prediction (or classification or whatever) P, given the n-tuple A which packs together several argument values:

\displaystyle{}P = M(A)

where:

\displaystyle{}A = (a_1, a_2, \ldots, a_m)

is the argument, and

\displaystyle{}P = (p_1, p_2, \ldots, p_n)

is the prediction.

The values a_j of the argument and p_k of the prediction can be of any data type and they are not limited to scalars. This is why a n-tuple notation is used rather than a vector notation.

Examples of machine learning system applications:

Machine learning systems are sometimes implemented using neural networks. Neural networks have the property that a sufficiently large neural network can be trained to approximate any function, which meets certain reasonable conditions.

A machine learning system is trained to implement a good approximation of the function M by processing several 2-tuples of (A_i, P_i), which associate each prediction – the desired value of the function (which is usually a n-tuple) – with the corresponding argument value (which is usually a n-tuple).

The training process is very computationally intensive, so people often resort to cloud computing facilities, as said above.

Architecture of anonymized machine learning systems

When an user does not want to let the cloud provider know what he is doing, one possible approach is to train the model using encrypted data streams, so that the model’s outputs are encrypted as well. The data streams are encrypted on the user’s workstation. The workstation is used also to decrypt the model’s predictions.

The whole system can be described using the following formulae.

Original system:

\displaystyle{}P = M(A)

We add identity functions before and after M:

\displaystyle{}P = I \circ M \circ I(A) = I(M(I(A)))

The next step is to decompose the identity functions into pairs of a function and its inverse. The functions being used perform encryption and decryption.

\displaystyle{}P = (D_p \circ D_p^{-1}) \circ M \circ (E_a^{-1} \circ E_a(A))

where E_a(A) encrypts the argument A and D_p(P') decrypts the prediction P'.

Now we rearrange parentheses as follows:

\displaystyle{}P = D_p \circ (D_p^{-1} \circ M \circ E_a^{-1}) \circ E_a(A)

Now the system can be decomposed into three parts, which perform the following operations:

  1. Encrypt the argument A: \displaystyle{}A' = E_a(A)
  2. Actual encrypted machine learning system: \displaystyle{}P' = D_p^{-1} \circ M \circ E_a^{-1}(A') = M'(A')
  3. Decrypt the encrypted prediction P': \displaystyle{}P = D_p(P')

where A' and P' are the encrypted argument and prediction respectively.

The functions E_a(A) and D_p(P') need to be invertible, as their inverses are part of the function being approximated by the learning machine model M', which is the second part of the system, and is the one actually run on the cloud provider’s computers.

The first and third parts are implemented on the user’s workstation. The typical implementation relies upon keys and scrambling formulae.

Two more requirements are:

Types of data

When dealing with anonymization of data, one has to consider separately each of the following data types.

Variable names

Variable names are used for naming the various variables which are part of the argument and prediction of the machine learning model. They are used for inspecting the argument’s data streams and for retrieving relevant parts of the model’s prediction.

Of course, the cloud provider should not be exposed to the true names of the variables.

Variable names can be converted into meaningless strings. For example, by using standard password scrambling algorithms, such as salt+md5sum.

The user’s workstation would have tables for mapping among the true variable names and the names used by the model and databases in the cloud.

Numerical variables

Numerical variables can be transformed using invertible functions.

Also, if the argument A has several numerical elements (including time based elements), one could treat them as a single vector and transform it using an invertible matrix.

Mathematically, it could look as follows:

\vec {A_v'} = E_{av}(\vec {A_v}) = E_{matrix} \vec {A_v}

where:

Invertible scalar functions could be applied to A_v‘s elements before and after the matrix transformation.

If the argument has also an element, which is a categorical variable, one could use a different transformation for each value of the categorical variable.

Ordinal variables

The values of the ordinal variables could be permuted. The learning model will implicitly embed the inverse permutation.

Categorical variables

Shuffling categories is not enough, because categories could be identified by their frequencies (like application of Zipf’s law to decrypting substitution ciphers).

The following approach is probably not universally applicable.

Categories could be anonymized by splitting a frequently occurring category into several subcategories. The learning model will give a different prediction for each subcategory. The different predictions will have to be somehow combined in the user’s workstation.

This approach also requires the model to be formulated in such a way that the final prediction can be derived by combining the predictions corresponding to the subcategories of split categories.

Time based variables

When anonymizing time based variables, one needs to transform the argument to hide any dependence it has upon weekly, monthly, seasonal or yearly cycles. One needs also to hide dependencies upon well-known events, such as volcano eruptions or rising CO_2 concentration in air.

Otherwise, it would be possible to identify dates by looking for correlations with well-known timings.

One possible way to hide those dependencies is to apply an ARIMA forecasting model to the argument.

Bibliography

The following articles are about getting rid of personally-identifiable information in order to preserve privacy.

      1. https://en.wikipedia.org/wiki/Data_anonymization
        • Generalization.
        • Perturbation.
      2. http://blog.datasift.com/2015/04/09/techniques-to-anonymize-human-data/
        The methods proposed by this article could interfere with machine learning, except for sufficiently small perturbations.
      3. https://www.elastic.co/blog/anonymize-it-the-general-purpose-tool-for-data-privacy-used-by-the-elastic-machine-learning-team
        • Suppression of fields.
        • Generation of semantically valid artificial data (such as strings). There is a Python module – Faker – which is good for faking names, addresses and random (lorem ipsum) text.
        • The methods, mentioned in this article, cannot anonymize numeric data.
      4. https://docs.splunk.com/Documentation/Splunk/7.2.3/Troubleshooting/AnonymizedatasamplestosendtoSupport
        Anonymization of data such as usernames, IP addresses, domain names.
      5. https://www.oreilly.com/ideas/anonymize-data-limits
        Human data cannot really be anonymized.
      6. https://www.intel.co.kr/content/dam/www/public/us/en/documents/best-practices/enhancing-cloud-security-using-data-anonymization.pdf
        Several methods for anonymizing data such as identifying information of humans, IP addresses, etc:

        • Hiding
        • Hashing
        • Permutation
        • Shift
        • Enumeration
        • Truncation
        • Prefix-preserving
      7. https://ieeexplore.ieee.org/abstract/document/6470603
        Usage of MapReduce to anonymize data.

      Addendum

      After finishing the first draft of this post, I was informed of the following.

      Credits

      I wish to thank Boris Shtrasman for reviewing a draft of this post and providing a lot of feedback. Of course, any remaining inaccuracies in this post are my sole responsibility.

22 January, 2019 08:37 PM

Amir Aharoni

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

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

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

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

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

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

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

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

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

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

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

Preparation

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

Priorities, part 1

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

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

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

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

Priorities, part 2

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

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

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

Getting Things Done, One by One

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

I have surprising advice.

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

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

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

Getting All Things Done

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

But let’s go further.

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

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

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

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

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

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

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

MediaWiki translation stats example

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

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

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

Good Stuff to Do Along the Way

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

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

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

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

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

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

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

As in Wikipedia, Be Bold.

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

Well done and congratulations.

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

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

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

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

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

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

What Do I Get for Doing All This Work?

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

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

Is There Any Other Way in Which I Can Help?

Yes!

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

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!

22 January, 2019 12:45 PM

20 January, 2019

Hamakor

קול קורא למתנדבים!

עמותת המקור מחפשת מתנדבים!

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

אין צורך להיות חברי עמותה, לא צריך להיות מתכנתות-על, כל מה שצריך זה רצון טוב 🙂

לכניסה לטופס לחצו כאן: https://goo.gl/forms/hi8IgwANfb2NPFMm2

ועד המקור.

20 January, 2019 07:40 PM

18 January, 2019

Gabor Szabo

Ranking of Perl sites 2019 January

For the full article visit Ranking of Perl sites 2019 January

18 January, 2019 09:15 AM

15 January, 2019

Boris Shtrasman

משלוח התרעות של הארגון לפריחת הכלניות

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

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

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

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

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


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

הבעיות בהן אני נתקלתי הן - כמובן שיכול להיות אדם אחר שבשבילו אלו לא יהיו בעיות :

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

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

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

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

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

לא הוצגה אפשרות לבצע אימות צד לקוח ע"י חותמות לקוח (אם היו רוצים להגביל רק לאכלוסיה של אפליקציות מסויימות).
לא הוצג תיעוד ודרך לבצע pooling של הבקשות משרת התרעות מאבוטח לדוגמה ע"י XEP-0127.
לא הוצג תיעוד של ה API שאנשים צריכים להשתמש בו, כאשר הם מפתחים מערכת שצריכה להתממשק מול מערכת ההתרעות. כל אדם שיש לו אתר אמור להציג את ההתרעות האלה אצלו.

המערכת של המרכז לא העבירה התרעות מארגונים אחרים (לדוגמה מ ims.gov.il)
קיימת חוסר התאמה בין חותמת המשמות את TLS לבין השרתים שמספקים את השירות בפועל הרי הם יודעים למה כל כך חשוב שתהיה התאמה (ואנחנו יודעים איך מגדירים CDN משרתים מקומיים וחס שלום לא ממשהוא שיושב בחברה צד שלישית).

כי אם לא תקבלו את השגיאה הזאת ותחשבו שהאתר נפרץ (ולגמרי בצדק!)

wget https://www.oref.org.il/WarningMessages/Alert/alerts.json

--2019-01-14 18:20:03-- https://www.oref.org.il/WarningMessages/Alert/alerts.json
Resolving www.oref.org.il... 109.226.50.136, 109.226.50.139
Connecting to www.oref.org.il|109.226.50.136|:443... connected.
ERROR: cannot verify www.oref.org.il's certificate, issued by `/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA':
Self-signed certificate encountered.
ERROR: certificate common name `a248.e.akamai.net' doesn't match requested host name `www.oref.org.il'.
To connect to www.oref.org.il insecurely, use `--no-check-certificate'.
Unable to establish SSL connection.

את ההודעה תקבלו ב wget 1.11.4 של gnuwin אבל לא בגרסאות אחרות שהן פחות מחמירות.
את אותה הבדיקה אפשר לבצע ע"י ביצוע dig -x לכתובת אותה תקבלו מה CDN ולבצע השוואה,

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

השירות מסופק מדומיין משני ציבורי (שפתוח לכל עמותה וארגון) ולא תחת הדומיין המשני שהיה אמור להיות (gov לדוגמה). יש משמעות לכל second-level domain.

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

ולאחר שסיימתי את זה.

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

wget --header="Referer: https://www.oref.org.il/" \
--header="X-Requested-With: XMLHttpRequest" \
--header="User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"\
--header="Accept: application/json, text/javascript, */*; q=0.01" \
-qO- https://www.oref.org.il/WarningMessages/Alert/alerts.json?v=1


ב HTTP אנחנו משתמשים במה שמכונה כותרות (headers) אני פשוט הוספתי את הכותרות הבאות :
referer , X-Requsted-With, U-A, Accept.

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

BOM במקרה שיש דף ריק, אלוהים יודע למה אבל זה לא נורא.
בזמן התרעה נקבל מבנה json שבעבר נראה בערך כך :

{ 
"id" : "1542042267248",
"title" : "התרעות פיקוד העורף ",
"data" : [
"מרכז הנגב 254",
"עוטף עזה 225",
"מרכז הנגב 255"
]
}
ה id הוא פשוט חותמת זמן מתי נשלחה (ניתן לחלק באלף ואז להשוות מול time_t רגיל).

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

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

את התסריט אפשר להתקין על כל מערכת שמכילה bash , jq notify-send ו dbus. אפשר במקום להשתמש ב dbus להשתמש ב wall אבל אני לא אוהב את העיבוד ברירת המחדל ל wall.


קודם כל תסריט ביצוע , הטסריט מצפה שהתוכנות הבאות יהיו מותקנות : bash, jq, notify-send,dbus /usr/local/bin/windflower.sh 

#!/bin/bash

#This script will alert you when the windflower blossom around you
#Copyright (c) 2019 Boris Shtrasman
#Permission is hereby granted, free of charge, to any person obtaining a copy
#of this software and associated documentation files (the "Software"), to deal
#in the Software without restriction, including without limitation the rights
#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#copies of the Software, and to permit persons to whom the Software is
#furnished to do so, subject to the following conditions:

#The above copyright notice and this permission notice shall be included in all
#copies or substantial portions of the Software.

#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
#SOFTWARE.

if [ $# -ne 1 ]; then
echo "$0 expect alert url"
echo "example:"
echo "$0 http://www.oref.org.il/WarningMessages/Alert/alerts.json";
exit 1
fi

# notify all connected users on each connected screen (full screen flash video have issues with OSD)
function notify_user()
{
users=($(who | sed -r "s/([a-z]*)[ \t]*.*\(([^)]+)\).*/\1,\2/p" | sort|uniq))
for i in "${users[@]}"
do
user=$(echo $i | cut -d',' -f1)
screen=$(echo $i|cut -d',' -f2)
id=$(id -u $user)
echo $user-$screen-$id
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$id/bus
sudo -u $user DISPLAY=$screen DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS \
/usr/bin/notify-send "$@"
done
}
#Get a broken json file from our windflower blossom provider
result=$( wget --header="Referer: https://www.oref.org.il/" \
--header="X-Requested-With: XMLHttpRequest" \
--header="User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"\
--header="Accept: application/json, text/javascript, */*; q=0.01" \
-qO- https://www.oref.org.il/WarningMessages/Alert/alerts.json?v=1 $1)

if [ -e "$result" ]; then
echo "empty"
exit 0
fi

if [ ${#result} -lt 5 ]; then
exit 0
fi

title=($echo $result|jq -s '.[].title')
area=$(echo $result|jq -s '.[].data')

if [ -n "$area" ]; then
notify_user -t 15000 "Windflower $title $date" "$area"
fi

exit 0
נמשיך ל קובץ ה service:
cat /etc/systemd/system/windflower.service 
[Unit]
Description=Windflower bloosom

[Service]
Type=oneshot
ExecStart=/bin/bash /usr/local/bin/windflower.sh http://www.oref.org.il/WarningMessages/Alert/alerts.json

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

בגדול נכון יהיה להשתמש ב Cache-Controlשחוזר לנו מהשרת, אבל אני בחרתי ערך יפה יותר :

HTTP request sent, awaiting response... 
HTTP/1.1 200 OK
Content-Type: application/json
Accept-Ranges: bytes
ETag: W/"3ae4461aeacd41:0"
Content-Length: 3
Cache-Control: max-age=3
Connection: keep-alive

הטיימר שלי נראה כך :
cat /etc/systemd/system/windflower.timer 
[Unit]
Description=Windflower bloosom
[Timer]
OnUnitActiveSec=5s
OnBootSec=100s
OnCalendar=*:*:0/5

[Install]
WantedBy=timers.target
ועכשיו נשאר רק לצפות בפריחה המדהימה.

15 January, 2019 12:55 PM

מתן אפשרות ל SSLKEYLOGFILE עבור תוכנות שמשתמשות ב libnss3

ב libnss3 נוסף פיטצר שחוסם את האפשרות להשתמש במשתנה הסביבה SSLKEYLOGFILE.

על מנת להחזיר את האפשרות יש לבנות את החבילה מחדש עם הדגל NSS_ALLOW_SSLKEYLOGFILE=1.

בגלל שאני רציתי חיים קלים הורדתי את חבילת הדביאן דרך apt-get source וערכתי את קובץ הבנייה והchangelog.

בשביל שתהיה חבילה חדשה (שתדרס בעידכון הבא).

בצורת patch זה יראה כך:

From 059aaee993008fabee5fec9f6fe869b6aa04b635 Mon Sep 17 00:00:00 2001
From: user <user>
Date: Mon, 14 Jan 2019 19:22:25 +0200
Subject: [PATCH] allow SSLKEYLOGFILE

---
debian/changelog | 6 ++++++
debian/rules | 1 +
2 files changed, 7 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index a0e1be1..7758b34 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+nss (2:3.41-2) unstable; urgency=medium
+
+ * NSS_ALLOW_SSLKEYLOGFILE=1.
+
+ -- User Mon, 11 Jan 2019 14:13:39 +0900
+
nss (2:3.41-1) unstable; urgency=medium

* New upstream release.
diff --git a/debian/rules b/debian/rules
index 880a07e..3804c2f 100755
--- a/debian/rules
+++ b/debian/rules
@@ -108,6 +108,7 @@ override_dh_auto_build:
MOZILLA_CLIENT=1 \
NSPR_INCLUDE_DIR=/usr/include/nspr \
NSPR_LIB_DIR=/usr/lib/$(DEB_HOST_MULTIARCH) \
+ NSS_ALLOW_SSLKEYLOGFILE=1\
BUILD_OPT=1 \
NS_USE_GCC=1 \
OPTIMIZER="$(CFLAGS) $(CPPFLAGS)" \
--
2.20.1

את החבילה בונים מחדש ע"י debuild -i -us -uc -b
ומתקינים ע"י dpkg -i *.deb

15 January, 2019 05:38 AM

10 January, 2019

Gabor Szabo

Hiking after Craft Conference 2019 in Budapest

For the full article visit Hiking after Craft Conference 2019 in Budapest

10 January, 2019 09:47 AM

07 January, 2019

Hetz Ben Hemo

על Windows ומעבדים מעל 16 ליבות

בשנים האחרונות אנחנו רואים יותר ויותר מעבדים חדשים מ-AMD עם יותר ויותר ליבות במחירים מאוד מפתיעים, הן לתחנות עבודה והן לשרתים. להלן 2 דוגמאות:

  • מעבד AMD Threadripper 2990WX עם 32 ליבות ו-64 נימים עולה 1700$ (מיועד לתחנות עבודה)
  • מעבד AMD EPYC 7551P עם 32 ליבות ו-64 נימים עולה $2700 (מיועד לשרתים בעלי תושבת מעבד יחידה)

לשם השוואה: המעבד לתחנות עבודה ושרתים הכי זול עם 16 ליבות מאינטל (Xeon SP Gold 6130) עולה נכון להיום $1932. ההצעה הזולה ביותר מעל 16 ליבות של אינטל היא מעבד Xeon Gold 6140 וכיום מחירה הוא $2500, כך שבמחיר של מעבד אחד מאינטל אפשר לקנות מעבד עם כמות כפולה של ליבות לתחנות עבודה, ובתוספת של 200$ אפשר לרכוש מעבד לשרת עם כמות כפולה של ליבות (בהשוואה ל-6140 של אינטל).

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

אך מה יקרה אם נרצה לקנות מכונה כזו להריץ אותה כתחנת עבודה או כשרת Windows (לא וירטואלי)? צפו לביצועים נמוכים ב-30-50% בהשוואה ללינוקס עם אותם מעבדים.

כשאינטל שחררה את משפחת Xeon SP, אינטל הציגה בגאווה כמה המעבדים לשרתים (אז לא היה Threadripper) שלה הרבה יותר מהירים ממעבדי EPYC של AMD. סקירות עצמאיות הוכיחו שאינטל פחות או יותר צודקת (יש מספר מבחנים די תמוהים של אינטל ועל כך הופיע פוסט ב-Anandtech). רוב הסוקרים ציינו כי הבעיה של הביצועים קשורה לארכיטקטורת ה-NUMA של AMD.

שנתיים חלפו מאז ש-AMD הוציאה את משפחת מעבדי EPYC לשרתים. AMD הוציאה באותו זמן את משפחת ה-Threadripper דור ראשון (עד 16 ליבות) ואת משפחת ה-Threadripper דור שני (מבוסס על ארכיטקטורת +ZEN). עם הדור השני, AMD הוציאה את המעבדים 2970WX ואת 2990WX -האחד עם 24 ליבות והשני עם 32 ליבות. ההבדל בין מעבדים אלו לבין המעבדים ממשפחת EPYC – היא שמעבדי Threadripper משתמשים ב-4 ערוצי זכרון ולחלק מהליבות אין גישה ישירה לזכרון, בשעה שמעבדי EPYC מקבלים גישה ל-8 ערוצי זכרון.

המחיר הזול גרם ללא מעט אנשים להתעניין לראשונה במעבדים עם 24 ו-32 ליבות ולא מעט אנשים רכשו אותם. המעבדים עובדים מצוין אולם מי שבחן אותם על Windows קיבל "הפתעה" – גם כאן, Windows הציג ביצועים נמוכים ב-30-50% בהשוואה ללינוקס (הבעיה אינה קיימת בדגמים כמו 2950X שהם עם 16 ליבות).

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

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

למי שראה את הוידאו ולא הבין: הבעיה נמצאת עם ה-Windows Scheduler, ה"מתזמן" של Windows שמקים תהליכים (Processes) על ליבות שונות לפי העומסים שלהם, ועם המעבדים המוזכרים לעיל וכמות הליבות הגדולה, ה-Scheduler של Windows – "מתחרפן", ומה שיותר גרוע – מיקרוסופט לא עושה סימנים שהיא עובדת על תיקון הבעיה, ומה שהכי גרוע – זה קורה בכל גרסאות ה-Windows, כולל Windows Server.

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

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

לסיכום: אין מנוס מלציין משהו פשוט. מיקרוסופט נרדמה בעמידה. מיקרוסופט עם Windows 2019 בהחלט מעוניינת שתריצו Kubernetes וקונטיינרים, אבל אם נסתכל לדוגמא במבחנים של Phoronix על מכונה עם 40 ליבות שמריצה Windows Server בגרסאות שונות ("על הברזל") מול הפצות לינוקס שונות – לינוקס ברוב המקרים פשוט "בועט" ב-Windows, גם כשלא מדובר כלל במעבדים של AMD. מישהו שם צריך להתעורר.

הטקסט המלא

07 January, 2019 02:44 PM

05 January, 2019

Hetz Ben Hemo

פוליגרף ככלי בלתי אמין לבדיקות

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

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

כמובן שכל המשתתפים הרימו גבה, ועל כך הפוסט הזה.

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

אתן דוגמא על עצמי: עד היום עברתי בין 5-6 בדיקות פוליגרף עבור חברות שונות. את כולן עברתי בהצלחה למעט אחת. מה קרה באותה בדיקה אחת שלא עברתי? התשובה קצת מורכבת: ביום חם כשהטמרפטורות משתוללות ואחוזי הלחות מגיעים ל-80-90%, הגוף שלי ובמיוחד הידיים שלי – מתחילים לרעוד. הפתרון לכך הוא לשבת מתחת למזגן, לשתות משהו קר מתוק ולאחר כרבע שעה לערך כשהגוף מתקרר והזיעה מפסיקה, הגוף שלי חוזר לתפקוד נורמלי. הגעתי ביום כזה למשרד שנראה כמו ביקור במחנה מעצר בריטי משנות ה-40 (אין מזגן, יש מאוורר עתיק, ואין מים). ביקשו ממני למלא שאלון במחשב (הרבה זמן לא ראיתי מחשב 286 עם מסך ירוק!) ולאחר מכן נשאלתי מספר שאלות בעל פה וניסיתי להסביר בנימוס שיש לי בעיה עקב החום. אותו "חוקר" לא ממש התייחס, חיבר אליי את הסנסורים והתחיל לשאול שאלות. לפי קפיצות המחט הבנתי עוד בהתחלה שלעבור – אני לא יעבור, אפילו בשאלה "האם שמך חץ" המחט קפצה ואותו "חוקר" פשוט התעלם. לאחר יומיים קיבלתי תשובה שלא עברתי. דמיינו אותי מופתע!

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

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

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

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

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

הטקסט המלא

05 January, 2019 10:41 AM

03 January, 2019

Omer Zak

Python discovers its inner PHP and JavaScript personae

Did you recently switch from PHP or JavaScript to Python, and are missing the fun of being bitten by your programming language?

The collection of surprising Python snippets and lesser-known features is your ultimate guide for provoking Python to bite you in the arse.

03 January, 2019 01:33 PM

27 December, 2018

ik

5 דברים טכניים שלמדתי השנה

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

1. אני עדיין צריך ללמוד יותר VIM

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

אחד הדברים שלמדתי מחדש השנה הוא Text Object. היכולת של vim לזהות דברים למשל פסקאות, שאתה בין סוגריים, מרכאות, מילים וכיוב'.
בעוד שיש בברירת המחדל תמיכה די טובה. יש הרבה תוספים שמוסיפים לזה עוד יכולות, או רוכבים על הקיים ומוסיפים לזה תכונות.
למשל היכולת להבין "מתודה" כפסקה, או class ככזו. ויצא לי בעצם ללמוד מחדש את כל השימוש בה, שדי הדחקתי. אם עד השנה הזו הייתי משתמש המון ב visual mode, השה הזו ירדתי בכמות השימוש במצב זה, בזכות ה Text Objects.

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

2. אני יודע מה מפריע לי כל כך בלכתוב טסטים

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

אתחיל מכך שאני כן חושב שבדיקות הן חשובות, אבל לא בגישה העיקרית ששולטת בשוק.
למשל אם תלכו לחבילת go שיצרתי לאחרונה בשם gostrutils, תגלו כי יש לי שם בד"כ קרוב ל100% cover לפונקציות שם.
זה מאוד חשוב לי שיהיה 100%. עד כמה שזה נשמע מוזר, אבל מה זה אומר בעצם 100%?!

אז דבר ראשון מערך הבדיקות מתחלק למספר חלקים:

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

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

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

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

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

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

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

3. אין לי אהבה לקוד

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

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

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

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

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

4. לא כל המפתחים חושבים זהה

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

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

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

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

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

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

5. מבחנים לא נכונים

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

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

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

27 December, 2018 09:04 AM

25 December, 2018

Amir Aharoni

Disease of Familiarity, the Flaw of Wikipedia

Originally written as an answer to the question What are some major flaws in Wikipedia? on Quora. Republished here with some changes.

Wikipedia has a whole lot of flaws, and its basic meta-flaw is the disease of familiarity.

It does not mean what you think it means. The disease of familiarity is knowing so much about something that you don’t understand what it is like to not understand it.

I recognized this phenomenon in 2011 or so, and called it The Software Localization Paradox. I later realized that it has a lot of other aspects beyond software localization, so I thought a lot about it and struggled for years with giving it a name. I learned about the term “disease of familiarity” from Richard Saul Wurman, best known as the creator of the TED conference (see a note about it at the end of this post). Some other names for this phenomenon are “curse of knowledge” and “mind blindness”. See also Is there a name for “knowing so much about something that you don’t understand what is it like not to know it”?

Unfortunately, none of these terms is very famous, and their meaning is not obvious without some explanation. What’s even worse, the phenomenon is in general hard to explain because of its very nature. But I’ll try to give a few examples.


Wikipedia doesn’t make it easy for people to understand its jargon.

Wikipedia calls itself “The Free encyclopedia”; what does it mean that it’s “free”? I wrote Wikipedia:The Free Encyclopedia, one of the essays on this topic (there are others), but it’s not official or authoritative, and more importantly, the fact that this essay exists doesn’t mean that everybody who starts writing for Wikipedia reads it and understands the ideology behind it, and its implications. An important implication of this ideology is that according to the ideology of the Free Culture movement, of which Wikipedia is a part, is that some images and pieces of text can be copied from other sites into Wikipedia, and some cannot. The main reason for this is copyright law. People often copy text or images that are not compatible with the policies, and since this is heavily enforced by experienced Wikipedia editors, this causes misunderstandings. Wikipedia’s interface could communicate these policies better, but experienced Wikipedians, who already know them, rarely think about this problem. Disease of familiarity.

Wikipedia calls itself “a wiki”. A lot of people think that it’s just a meaningless catchy brand name, like “Kodak”. Some others think that it refers to the markup language in which the site is written. Yet others think that it’s an acronym that means “what I know is”. None of these interpretations is correct. The actual meaning of “wiki” is “a website that anyone can edit”. The people who are experienced with editing Wikipedia know this, and assume that everybody else does, but the truth is that a lot of new people don’t understand it and are afraid of editing pages that others had written, or freak out when somebody edits what they had written. Disease of familiarity.

The most common, built-in way for communication between the different Wikipedians is the talk page. Only Wikipedia and other sites that use the MediaWiki software use the term “talk page”. Other sites call such a thing “forum”, “comments”, or “discussion”. (To make things more confusing, Wikipedia itself occasionally calls it “discussion”.) Furthermore, talk pages, which started on Wikipedia in 2001, before commenting systems like Disqus, phpBB, Facebook, or Reddit were common, work in a very weird way: you need to manually indent each of your posts, you need to manually sign your name, and you need to use a lot of obscure markup and templates (“what are templates?!”, every new user must wonder). Experienced editors are so accustomed to doing this that they assume that everybody knows this. Disease of familiarity.

A lot of pages in Wikipedia in English and in many other languages have infoboxes. For example, in articles about cities and towns there’s an infobox that shows a photo, the name of the mayor, the population, etc. When you’re writing an article about your town, you’ll want to insert an infobox. Which button do you use to do this? There’s no “Infobox” button, and even if there were, you wouldn’t know that you need to look for it because “Infobox” is a word in Wikipedia’s internal jargon. What you actually have to do is Insert → Template → type “Infobox settlement”, and fill a form. Every step here is non-intuitive, especially the part where you have to type the template’s name. Where are you supposed to know it from? Also, these steps are how it works on the English Wikipedia, and in other languages it works differently. Disease of familiarity.

And this brings us to the next big topic: Language.

You see, when I talk about Wikipedia, I talk about Wikipedia in all languages at once. Otherwise, I talk about the English Wikipedia, the Japanese Wikipedia, the Arabic Wikipedia, and so on. Most people are not like me: when they talk about Wikipedia, they talk about the one in the language in which they read most often. Quite often it’s not their first language; for example, a whole lot of people read the Wikipedia in English even though English is their second language and they don’t even know that there is a Wikipedia in their own language. When these people say “Wikipedia” they actually mean “the English Wikipedia”.

There’s nothing bad in it by itself. It’s usually natural to read in a language that you know best and not to care very much about other languages.

But here’s where it gets complicated: Technically, there are editions of Wikipedia in about 300 languages. This number is pretty meaningless, however: There are about 7,000 languages in the world, so not the whole world is covered, and only in 100 languages or so there is a Wikipedia in which there is actually some continuous writing activity. In the other 200 the activity is only sporadic, or there is no activity at all—somebody just started writing something in that language, and a domain was created, but then the first people who started it lost interest and nobody else came to continue their work.

This is pretty sad because it’s frequently forgotten that a whole lot of people cannot read what they want in Wikipedia because they don’t know a language in which there is an article about what they want to learn. If you are reading this post, you have the privilege of knowing English, and it’s hard for you to imagine how does a person who doesn’t know English feel. Disease of familiarity: You think you can tell everybody “if you want to know something, read about it in Wikipedia”, but you cannot actually tell this to most people because most people don’t know English.

The missed opportunity becomes even more horrific when you realize that the people who would have the most appropriate skills for breaking out of this paradox are the people who are least likely to notice it, and the people who are hurt by it the most are the least capable of fixing it themselves. Think about it:

(In case it isn’t clear, you can replace “English” and “Russian” in the example above with any other pair of languages.)

It’s particularly painful in countries where English, French, or Portuguese is the dominant language of government and education, even though a lot of the people, often the majority, don’t actually know it. This is true for many countries in Africa, as well as for Philippines, and to a certain extent also in India and Pakistan.

People who know English have a very useful aid for their school studies in the form of Wikipedia. People who don’t know English are left behind: the teachers don’t have Wikipedia to get help with planning the lessons and the students don’t have Wikipedia to get help with homework. The people who know English and study in English-medium schools have these things and don’t even notice how the other people—often their friends!—are left behind. Disease of familiarity.

Finally, most of the people who write in the 70 or so most successful Wikipedias don’t quite realize that the reason the Wikipedia in their language is successful is that before they had a Wikipedia, they had had another printed or digital encyclopedia, possibly more than one; and they had public libraries, and schools, and universities, and all those other things, which allowed them to imagine quite easily how would a free encyclopedia look like. A lot of languages have never had these things, and a Wikipedia would be the first major collection of educational materials in them. This would be pretty awesome, but this develops very slowly. People who write in the successful Wikipedia projects don’t realize that they just had to take the same concepts they already knew well and rebuild them in cyberspace, without having to jump through any conceptual epistemological hoops.

Disease of familiarity.


It’s hard to explain this.

I unfortunately suspect that very few, if any, people will understand this boring, long, and conceptually difficult post. If you disagree, please comment. If you think that you understand what I’m trying to say, but you have a simpler or shorter way to say it, please comment or suggest an edit (and tell your friends). If you have more examples of the disease of familiarity in Wikipedia and elsewhere, please speak up.

Thank you.


(As promised above, a note about Richard Saul Wurman. I heard him introduce the “disease of familiarity” concept in an interview with Debbie Millman on her podcast Design Matters, at about 23 minutes in. That interview was one of this podcast’s weirdest episodes: you can clearly hear that he’s making Millman uncomfortable, and she also mentioned it on Twitter. This, in turn, makes me uncomfortable to discuss something I learned from that interview, but I am just unable to find any better terminology for the phenomenon in question. If you have suggestions, please send them my way.)


Disclaimer: I’m a contractor working with the Wikimedia Foundation, but this post, as well as all my other posts on the topic of Wikimedia, Wikipedia, and related projects, are my own opinions and do not represent the Wikimedia Foundation.

25 December, 2018 01:40 PM

13 December, 2018

Guy Rutenberg

Resizing Huge Panoramas for Google Photos

Google Photos imposes a 100 megapixel limit on uploaded photos. This may sound like a lot, as even the very high-end Sony Alpha a7R III has “only” 48MP sensor, but in reality when you shoot panoramas and stitch them yourself, you can quickly get there, and hit the 100MP limit. When you try to upload your huge panorama to Google Photos, you will get a

A photo or video was skipped

error.

To solve it, you need to resize your image and make it smaller. This can be done automatically using ImageMagick’s convert:

$ convert -resize "100000000@>" panorama-in.jpg panorama-out.jpg

This will resize the panorama-in.jpg to at most 100MB, and save it as panorama-out.jpg. The > makes sure we will only down-size larger photos.

By default under Debian, ImageMagick comes with a very strict `policy.xml` controling the resources it can use. Practically, it means that unless you change those limits, you’ll encounter resource limit errors such as:

convert-im6.q16: width or height exceeds limit `panorama-in.jpg' @ error/cache.c/OpenPixelCache/3802.

To solve it you will need to edit /etc/ImageMagick-6/policy.xml and increase the limit for memory, width, height and area. For example:

  <policy domain="resource" name="memory" value="8GiB"/>
  <policy domain="resource" name="width" value="128KB"/>
  <policy domain="resource" name="height" value="128KB"/>
  <policy domain="resource" name="area" value="8GB"/>

13 December, 2018 04:56 PM

12 December, 2018

ik

מבחן שגוי

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

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

אבל במקום, מקבלים שאלות בנושא של TCP/IP, כיצד מסד נתונים עובדים, איך יוצרים מודולים לקרנל וכיוב'.
מה עכשיו? האם אתם מתאימים לתפקיד?

אז הגזמתי קצת, נכון? ובכן לא.

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

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

  1. יש לי צורך לאסוף את הנתונים הבאים – מה הסכמה למסד הנתונים שתתכנן ולמה?
  2. האם מסד נתונים מבוסס סכמה באמת מתאים לזה, או אולי מסד נתונים מסוג אחר?
  3. תן לי הדגמה מתי תבחר בdjango/rails ומתי ב sinatra/flask?
  4. מתי Go עדיפה על פיתון/רובי?
  5. מה ההבדלים בין Vue/React לבין Angular?

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

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

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

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

זו כמובן דעתי, בלבד, בהצלחה 🙂

12 December, 2018 02:28 PM

Itzik Kotler

Staying One Step Ahead Of Criminal Hackers

In our efforts to stay one step ahead of the global criminal hacker cabal, my colleagues and I in the ethical hacker community try to approach our craft like our adversaries. To paraphrase Carl Spackler, we know that, in order to conquer the hacker, we have to learn to think like hackers. We’ve got to get inside the hacker’s pelt and crawl around. When you do that, you develop a begrudging respect for them.

In popular culture, however, criminal hackers can become mythologized, not unlike the way the bank robbers of old were. Despite their chosen professions, the likes of John Dillinger, Bonnie and Clyde, Baby Face Nelson and Ma Barker were sometimes regarded as modern-day Robin Hoods. They were the little guys taking on the rich and powerful with daring and panache. Even when caught, they’d often revel in the attention. When asked why he robbed banks, the infamous “Slick” Willie Sutton supposedly quipped, “Because that’s where the money is.”

That may have been true in the first half of the last century, but not anymore.

Read the full article at Forbes here

Full text

12 December, 2018 02:44 AM

01 December, 2018

Guy Rutenberg

Hugin 2018.0.0 for Debian Stretch

I’ve made available in my personal repository amd64 builds of Hugin 2018.0.0 for Debian Stretch.

Enjoy!

01 December, 2018 11:28 AM

19 November, 2018

Hamakor

קול קורא להרצאות ב GopherCon Israel

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

הכנס יהיה ב 11 לפברואר, 2019 במרכז הירידים בתל אביב.
להגשת הרצאה: https://papercall.io/cfps/1422/submissions/new
אתר הכנס: https://www.gophercon.org.il/

נתראה שם,
צוות GopherCon Israel

19 November, 2018 06:09 AM

21 October, 2018

Lev Meirovitch

Linux new Code of Conduct

Collection of links to emails, articles and posts about Linux Kernel CoC situation arranged by date.

21 October, 2018 05:26 AM

20 October, 2018

Lev Meirovitch

How not to protect your app

Examples of several wrong ways to make your app secure

20 October, 2018 01:51 PM

07 October, 2018

Oz Nahum

backup and restore with duplicity

Duplicity backup utility is the old workhorse in all recent Ubuntu versions. I use the GUI called Deja-Dup for quite a while now. But until now I never bothered to check how to restore my files. I did decide to check how to restore file, because backup is only half the job! It turns out, that the GUI does a disservice for duplicity users. Restoring an encrypted backup turned out to not work. I didn't bother to research why, and turned to the CLI. This is a reminder on how to restore the files. continue reading...

07 October, 2018 11:36 AM

02 October, 2018

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.

Features

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:
    wifi

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

02 October, 2018 12:33 PM

01 October, 2018

Guy Sheffer

How to build a telegram-controlled sous vide using CraftBeerPiOS

Sous vide pot with tempreture sensor

Sous vide pot with temperature sensor

Hey all,
So I’ve been cooking sous vide a few months now, with a sous vide I built myself. Its connected to a RaspberryPi and can be controlled via the web or telegram.

No soldering required!

Flash a ready made image to the Pi!

Bill of materials

  1. Slow cooker (crockpot) with a ‘high’ option. You can get them second hand, they are pretty cheap. Make sure it has no digital control.
  2. Raspberry Pi, even version 1 should work – also an SD card and power supply for the Pi.
  3. Pi Plate prototype board. Make sure you get one that matches your Raspberry Pi footprint if you are re-using an old Pi.
  4. Solid state relay that can handle mains
  5. Power cables
  6. Data cable to connect the relay to the Pi
  7. Power socket and power connector for your country – get locally so it fits your country standard.
  8. Water resistant temperature sensor DS1820 x2 – Get a spare one so you can measure the temperature difference and make sure your sous vide is uniformly heated.
  9. Important – 3D printed enclosure for raspberrypi (Raspberry Pi 1) and enclosure for the relay – you are mixing water and electricity in a kitchen, don’t be an idiot.

Assembly

  1. Build the following construction from the relay. You need phase to go via the relay, and in to the sous vide. Please look at this chart to understand what cable is equivalent in your country.

    Relay assemply

    Relay assembly – brown writes is phase

  2. Close up the relay in its box, and attach the power plugs

    Relay in its case and power sockets in place

    Relay in its case and power sockets in place, transparent sticky tape protects case

  3. Wire the temperature sensor DS1820 to GPIO pin 4 (you can use one on the screw terminal and another on the jumper slot, the second one is only to make sure you have a working sous vide.
  4. Connect SSR – terminal to ground, and + terminal to GPIO 17 (you can pick other GPIOs if you want).

    Raspberypi wiring . Two temp sensors on GPIO 4, one Solid state relay (SSR) on GPIO 17

    Raspberypi wiring . Two temp sensors on GPIO 4, one Solid state relay (SSR) on GPIO 17

  5. plug the relay in the your power supply and plug your slow cocker to it. DANGER: Make sure your connections are right with a multimeter before. If you are unsure don’t do this. Mains power can kill!
  6. That’s it!
Rasepberrypi and relay in cases

Rasepberrypi and relay in cases

Sous vide pot with tempreture sensor

Sous vide pot with temperature sensor

Software

I have built a distro called CraftBeerPiOS based on CraftBeerPi 2.2. Why 2.2 and not 3? Because there is an issue with the license. I would have picked something else, but Manuel the developer clearly writes in the README that CraftBeerPi is open source. Its dodge I know, I would welcome someone rewriting something like this. I would help build a distribution.

Why telegram? (which is optional)

I found that telegram was much faster and handy while I am in the kitchen, or if I want to turn the sous vide on before I come home. So I warmly recommend it over CraftBeerPi’s interface. I will mark all its step as optimal in case you don’t want it.

Anyway,

  1. All you got to do is just flash the img to the Pi. Which can be downloaded here. It has both CraftBeerPi and a telegram bot pre-install. The bot is written by me and is open source.
  2. [optional telegram] Create a telegram bot using the botfather here is an explanation how to do this. Its really easy – basically you text a bot the command /newbot, you are asked a few questions and get an API token, you place this token in the file /boot/config.ini where its asked for.

    Setting a new bot

    Setting a new bot

  3. Open the sdcard /boot partition, you can do this on windows. And edit the file /boot/craftbeerpios-wpa-supplicant.txt

    Set wifi setting you need to change

    Set wifi setting you need to change

  4. [optional telegram] Add your telegram token

    config.ini setting

    config.ini, Telegram token goes here

  5. Pop the SD card in the Pi and boot it
  6. You might want to attach a screen on first boot and make sure everything went well. If it did, you should have on your network a service on http://craftbeerpi.local:5000 .If you can’t find the hostname try the Raspberrypi’s IP address. Depending on your network router it might not work.
  7. Follow on that link the wizard to set up your temperature, relay, and kettle.
    CraftBeerPi all set up with a thermometer and relay

    CraftBeerPi all set up with a thermometer and relay

    Hardware setting in craftbeerpi

    Hardware setting in craftbeerpi

    Screenshot_20180929_121241.png

    How the kettle configuration looks

  8. [optional telegram] Text your new telegram bot the command /start this should make your telegram user appear in the telegram control panel located at http://craftbeerpi.local:5001.
  9. Login default user is admin, password 1234
  10. [optional telegram] Set yourself as an admin, otherwise you can’t control your sous vide. This is for security reasons.

    CraftbeerPiBot access control

    CraftbeerPiBot access control

  11. [optional telegram] Send /help to the bot to see the available commands. You can set the sous vide temperature, turn it on and off.

    Sous vide bot list of commands

    Sous vide bot list of commands

Thats it, enjoy! Share recipes!

Sous vide pork belly cooked in maple and liquid smoke and rosemary for 18 hours at 72C

Sous vide pork belly cooked in maple and liquid smoke and rosemary for 18 hours at 72C

Full text

01 October, 2018 06:07 PM

15 September, 2018

Ilya Sher

AWS CloudFormation became a programming language

… kind of.

Declarative has its advantages which are hyped all over the internet so I’ll skip that part. The painful downside of declarative approach is often the expressivity. Sample proofs:

Now you can have Python embedded in your CloudFormation file. That is part of the CloudFormation Macros which were introduced on 2018-09-06.


Happy coding, everyone!

 

15 September, 2018 05:07 AM

10 September, 2018

Ilya Sher

What I did not steal from Perl 6

I’m curious about programming languages. Not because I’m creating one right now. I always was. This post is about ideas and features that I have seen in Perl 6 and found interesting. If you are curious about programming languages in general, you should take a look at these.

There are various reasons for not stealing the interesting ideas from Perl 6:

  1. I’m trying to keep number of concepts in NGS as small as possible. If I’m not seeing huge immediate value in a concept – I skip it.
  2. Not taking anything that I think can confuse me or other programmers. I’m not talking here because someone is a beginner. I’m talking about confusing concepts.
  3. Simply because I don’t have enough resources to implement it at the moment.

Here are the interesting Perl 6 features, in no particular order (except the first one). There are also my comments whether I would like the feature in NGS or why not.

  1. Syntax. Very expressive an terse. Perl6 has even more of it than Perl 5. Now that we got rid of the $ and friends in the room:
  2. Grammars. Would actually be nice to have something like that in NGS.
  3. Lots of operators. The most interesting concept is Metaoperators. I’m trying to keep the amount of syntax elements in NGS relatively low. There are already two syntaxes in NGS: commands and expressions. Not taking more syntax without serious need.
  4. How the “pointy block” syntax mixes with “for” syntax: for @list -> @element . NGS already has several syntaxes for Lambdas.
  5. Flow control
    1. when” flow control. The closest NGS has is “cond” and friends, stolen from Lisp.
    2. repeat while / repeat until . It would be nice to have something like that in NGS.
    3. once . Not sure about this one. The functionality might be needed.
  6. Slips. The behaviour is frightening me: if it does expand, how do I pass a Slip if I just want to pass it, say as an item of an array? NGS uses syntax for slips: [1, 2, *myitems, 3, 4] which I think is cleaner. You know you can’t pass it because it’s syntax.
  7. .WHAT method. I stole something similar from Ruby: the inspect method.

As a special note, I have seen a welcome change from $arr[0] to @arr[0] . I think it removes confusion. (That was Perl 5 vs Perl 6).

Please don’t be offended if you are a Perl 6 hacker and you see that there is amazing feature that I have not mentioned. It could be that I’ve seen this in several other languages already or maybe I did not find it interesting or … maybe I just missed it. Don’t hesitate to leave a comment anyway.


Happy coding, in whatever language rocks your boat! Except for bash. Coding in bash will never be happy.

10 September, 2018 06:50 AM

06 September, 2018

Kaplan Open Source Consulting

סדנאות QGIS

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

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

אורך הסדנא הוא כ-4 שעות בשעות הבוקר. מועדי הסדנא הקרובים באזור תל אביב:

12.10.18
26.10.18
30.11.18
28.12.18

התעניינות ורישום בטופס: https://goo.gl/forms/2T7kE7T7zDZpGPLZ2

פרסום מעודכן ללא 16.11

06 September, 2018 10:16 AM

24 August, 2018

Itzik Kotler

Were You Attacked Today With Yesterday's Hacking Technique?

We’re all familiar with the idea of recycling as a means of reducing the waste stream. Most of us are in the habit of separating our paper, plastic, glass and metal trash from other garbage. What you may not know is that recycling is a major trend in the hacker community, too. Many of the data breaches that have struck in recent years were accomplished using software that has been around for a long time -- today’s hack, yesterday’s technique.

Tools that have been proven effective at fooling users and sneaking past network defenses are regularly reused by hackers. Whether the software was developed specifically for hacking or as a tool with a legitimate purpose that has been adapted for a less savory one, the hacker community has become expert at extracting value from what already exists. As with commercial software development, it takes time and money for hackers to write and test their code, and in order to maximize their profits, it makes sense to recycle what works. Often, these tried-and-true products are packaged and sold to others, furthering their potential to do harm.

Read the full article at Forbes here

Full text

24 August, 2018 03:51 AM

22 August, 2018

Diego Iastrubni

הרצאה בקבוצת Haifa::C++

קודם כל, מסתבר שלחיפאים יש קבוצה שנפגשת פעם בחודש, ומדברים על C++. החודש העברתי הרצאה אודות Qt5. מי שנמצא באיזור מוזמן למפגשים שלהם: https://www.meetup.com/Haifa-CPP/

השקפים (וקוד לדוגמה) זמין כאן:

https://github.com/elcuco/qt-lecture-2018-08/

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

הטקסט המלא

22 August, 2018 04:14 PM

09 August, 2018

Gilad Ben-Yossef

דו"ח נתיחה שלפני המוות

רשום:

בדיו על דף נייר, שחור על גבי לבן.

בכתב ידו של רופא, בעט נובע.

בפוספור זרחני של מסך מחשב.

סיבת מותו של הגווע -

לידה.

ובינתיים, אני כאן.

ואיזה יופי שפגשתי אותך.

09 August, 2018 04:46 AM

03 August, 2018

Diego Iastrubni

כרומבוק – מחשב מיותר – חלק 2 – לינוקס

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

שלב ראשון – צריך להבין את המערכת הזאת. היא מגיעה עם firmware שמאפשרות לעשות boot אך ורק למערכת שחתומה על ידי גוגל. אז צריך להיפטר מהזה. יש בפועל שתי אפשרויות (1): או עושים patch שחלק מה־firmware או שמחליפים את כולה. החלפה מלאה תמנע הפעלת chromeos, ואילו הטלאה של תגרום לזה שבכל אתחול המחשב יזהו שהוא במצב מפתח ואז תשאל האם להפעיל מצב מוגן מחדש. הסבר מלא כאן.

אני החלטתי להמשיך עם הטלאה.

  1. העברת המחשב למצב מפתח. מכבים את המחשב, ולפני שלוצים מחדש על כפתור הדלקה לוחצים על מרשים escape + reload (המקש F3 או, הרביעי בשורה הראשונה). זה ימחק את כל הנתונים שעל הדיסק – ראה הוזהרת.
  2. המחשב יעשה אתחול יהיה מסך לבן שאומר שהמחשב במצב לא מוגן. אחרי 30 שניות הוא ייסגר, או אפשר ללחוץ control+d כדי לסגור מיידית.
  3. לאחר שהמחשב עלה, צריך לעשות login (אפילו בתור משתמש אורח). מפעילים מסוף, ואז לכתוב shell כדי לקבל מסוף מלא של לינוקס.
  4. כעת מפעילים בשורת הפקודה (מתוך התיעוד):
    cd; curl -LO
    https://mrchromebox.tech/firmware-util.sh && sudo bash firmware-util.sh
  5. כשיתקבל תפריט – יש לבחור 2 – BOOT_STUB  ובכך נשמור את האופציה להפעיל גם ChromeOS.
  6. המחשב יופעל. ראה סעיף 2.
  7. כעת צריך להתקין מערכת הפעלה חדשה. נעשה את זה בעזרת chrx. חוזרים על סעיף 3  ומקבלים מסוף.
  8. במקום כותבים (תיעוד מלא כאן):
    cd ; curl -Os https://chrx.org/go && sh go
  9. במסך הלבן – אם נלחץ control+D נקבל ChromeOS ואם נלחץ control+T נקבל את מערכת ההפעלה שהתקנו.

לגבי בחירת מערכת ההפעלה:

  1. ברירת המחדל היא GalliumOS. היא מערכת הפעלה מבוססת אובונטו, ו-XFCE. היא משופצת בצורה עזרת שכל החומרע נתמכת, כל המקישים עובדים. אבל היא לא התאימה לי. לדוגמה – היא לא יודעת להתמודד טוב עם חיבור אל טלויזיה (המסך החיצוני לא מתחבר כברירת מחדל, והקול לא עובר לשם). הדברים האלו פתירים, אבל לא בא לי להתעסק עם זה בשורת פקודה (צריך להגיד ל־pulse audio לשנות sync). בנוסף – הכפתור שמחפש יישומים (איפה שה־caps lock היה אמור להיות) לא עושה כלום.
  2. ניסיתי אובונטו. הוא ייפתור את בעיות השימושיות שהיו לי ב־GalliumOS. הבעייה כאן היא שלמשל כרטיס הקול לא משמיע לי כלום. הקיצורים של המקשים לא עובדים כולם בצורה טובה (חלק מהם עובדים כמקשי פונקציות – חלק לא).

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

apt dist-upgrade

וקיבלתי מערכת חדשה.

ו… שוב כרטיס הקול לא עובד. הוא עובד אך ורק עם הקרנל של GalliumOS. כמו כן… גיליתי שאם אני משאיר את ה-SDCard המערכת מנסה לעשות boot ממנו… ולא הצלחתי לשכנע את המערכת לעלות ישירות אל אובונטו. אז ה-ritual שלי בעת הפעלת המחשב: תלחץ control+l (כדי לא להעלות ChromeOS) ואז תבחר ב-2 (כדי שיעשה boot מהדיסק הפנימי) ואז ב-grub לבחור את הקרנל המתאים (את זה דווקא אני יודע לפתור).

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

הטקסט המלא

03 August, 2018 01:27 PM

31 July, 2018

Lior Kaplan

Debconf18 – יום ראשון

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

לצערי הכנסים של דביאן נפתחים מאוד בעצלתיים מבחינת תוכן – יש הרצאת/טקס פתיחת ואחרי אין ישר רצף גדול של הרצאות אלא טפטוף קטן של נושאים והרצאות. קצת מאכזב מבחינתי. ומצד שני, אפשר לי להתחיל לעבוד על החבילות של עברית בדביאן בלי לדאוג לפספס תוכן כלשהו. אבל לפני שאפשר לעבוד על החבילות, צריך לייצר סביבה מתאימה. לקח לי זמן להוריד חלודה לגבי מה צריך, ואיך לייצר משהו שיודע לבנות בתוך chroot (גם כדי שהבניה תהיה נקייה, וגם כי אני משתמש ב-testing בעוד שהבניה נעשית ב-unstable). בעזרת כמה תזכורות מ-Bálint הכל הסתדר, ויש סביבה עובדת עם sbuild.

השלב השני היה להתחיל להמיר את ההיסטוריה של הצוות מ-SVN ל-GIT ואז לדחוף את זה לשרת ה-GitLab החדש של דביאן. עשיתי את זה בנפרד עבור כל חבילה, כאשר הראשונה בתור היא Hspell כי צפריר הספיק להכין את הרוב מראש. ואחר כך עבדתי על המרת Culmus כי לא הייתי רוצה שהגרסה הבאה תצא בלי פונטים בעברית (על הדרך כבר הועלתה גרסה 0.132). כל המאגרים זמינים תחת Debian Hebrew Packagers בכתובת https://salsa.debian.org/hebrew-team . למי שצריך לעשות משהו דומה, הכלי להמרה היא git svn clone ואפשר להשתמש בהוראות שיש באתר git-scm.com בכתובת https://git-scm.com/book/en/v2/Git-and-Other-Systems-Migrating-to-Git . על בסיס הפקודות שלהם עוד עשיתי כמה שינויים קלים, אבל החלקים החשובים נמצאים שם.

בין לבין שמעתי את הדיווח השנתי של Chris Lamb במסגרת תפקידו כ-Debian Project Leader. בין השאר גיליתי שם כי דביאן תחגוג השנה יום הולדת 25 באמצע אוגוסט, וישר החלטתי לפתוח event כדי לחגוג עם עוד אנשים. נתראה שם בקרוב (: בנוסף, גיליתי כי המעבר של דביאן ל-GitLab נובע בין השאר גם מהשינוי שלהם בנושא ה-Content License Agreement ושינוי ל-Developer Certificate of Origin מה שמאפשר ליותר אנשים לתרום קוד בלי לוותר על הזכויות שלהם או לקרוא מסמך משפטי כבד. שאפו ל-GitLab, ואיזה כיף לעבור לעבוד במערכת מתקדמת.

31 July, 2018 02:40 PM

30 July, 2018

Gilad Ben-Yossef

Mission Impossible

I shall walk the path of the warrior,

my arms bare, all defenses down.

I shall take refuge in pestilence,

my weakness shall be my guide.

Like a great spy I shall set out to steal a secret,

so well known it is forgotten.

This Dharma will self destruct in 3 2 1…

<<silence>>

30 July, 2018 04:50 AM

29 July, 2018

Lior Kaplan

Debconf18 – קדם כנס

הכנס השנתי של דביאן, Debconf, מתקיים השנה בפעם הראשונה באסיה (Hsinchu, Taiwan). הישג מכובד לאחר שנים של אירופה / ארה"ב ולפעמים דרום אמריקה. וגיוון מבורך בהמשך לכנס בדרום אפריקה לפני שנתיים. כלומר הפעם טסים לכנס מזרחה ולכן גם כולם סובלים מג'ט לג חמור יותר. לצערי זה גם גרם לי לתרום הרבה פחות בדוכן הרשמה (front desk) למרות שזה אחת ההתנדבויות הקבועות שלי.

היום הפתוח התנהל בחלקו בסינית, כך שאפילו לא ניסיתי ללכת להרצאות (גם לבודדות שהיו באנגלית), ובמקום זה התמקדתי בקצת שיחות עם אנשים (למרות העייפות). הספקתי לדבר עם Bálint Réczey שעובד עבור Canonical בצוות Ubuntu Foundation שאחראי על הסנכרון עם דביאן והתרומה של שינויים לקהילה. גם ניצלתי את ההזדמנות כדי לשמוע באיזה כלים הם משתמשים בפעילות, כדי לתזכר את עצמי. אחרי כמעט שנה שלא נגעתי בחבילות, אני בהחלט חלוד (וגם צריך לסדר את סביבת העבודה על המחשב). אגב, קנוניקל מחפשים אנשים עובדים, אם מישהו מתעניין, צרו קשר בפרטי (יש אפשרות לעבוד מרחוק, ואוכל לעזור בסידורים הנדרשים).

בהמשך הערב ישבתי על באג שדיווח לקוח על פיצ'ר של PHP שלא עובד לו מול OpenSSL. תפסתי את Kurt Roeckx שאחראי על החבילה בדביאן וגם עושה עבודת upstream בכמה שנים האחרונות כדי לבדוק את הנושא. אחרי קצת שאלות מולו ובדיקות שלי הסתבר שהבעיה היא לא ב-OpenSSL אלא ב-PHP, ואחרי מספיק חיטוטים בקוד נפתח באג #76676.

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

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

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

מי שרוצה לעקוב אחרי הכנס מרחוק, אז הלוח זמנים נמצא בכתובת https://debconf18.debconf.org/schedule, רק לא לשכוח שהכנס מתקיים באזור זמן +8, כלומר 5 שעות לפני ישראל (ריאלית, אפשר לצפות בהרצאות של אחרי ארוחת הצהריים כאן, שזה 9 בבוקר בישראל).

29 July, 2018 04:17 PM

10 July, 2018

Rabin Yasharzadeh

Overwrite the default GTK theme per application

I love using a dark theme on my system, currently I’m running the Adapta theme. But not all applications looks great in dark themes, some need tweaking, this is a quick hack to overwrite the default theme used for a specific application.

In this example I’ll be overwriting the theme for virt-manager.

First we’ll copy the default launcher/desktop file to the local dir, and then we will change that file,

sudo cp /usr/share/applications/virt-manager.desktop /usr/local/share/applications/virt-manager.desktop
sudo vim /usr/local/share/applications/virt-manager.desktop

And do this small change, prefix the application Exec command with

env GTK_THEME=theme_name

--- /usr/share/applications/virt-manager.desktop 2018-02-28 22:48:50.000000000 +0200
+++ /usr/local/share/applications/virt-manager.desktop 2018-07-09 11:00:40.000000000 +0300
@@ -55,7 +55,7 @@
Comment[sv]=Hantera virtuella maskiner
Comment[uk]=Керування віртуальними машинами
Icon=virt-manager
-Exec=virt-manager
+Exec=env GTK_THEME=Adapta virt-manager
Type=Application
Terminal=false
Categories=System;

10 July, 2018 12:24 PM

23 June, 2018

Kaplan Open Source Consulting

כנס GIS בקוד פתוח, יוני 2018

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

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

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

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

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

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

23 June, 2018 11:10 PM

Ilan Shavit

Flatpak

בשבוע שעבר כתבתי על AppImage. הפעם אכתוב על Flatpak. מהי טכנולוגיית Flatpak  ומה היא מאפשרת?

ל- Flatpak יש Repository רשמי בשם Flathub שמאפשר להתקין ולהריץ מאות אפליקציות (302 חבילות בזמן כתיבת המאמר) כאמור ללא תלות בסוג מערכת ההפעלה או בגרסה הספציפית שלה. בלינוקס מינט בחרו בטכנולוגיית Flatpak (ולא ב- Snap) ככלי להשלמת מאגרי התוכנה של ההפצה.

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

$ flatpak remotes
Name Options
flathub system

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

כדי לחפש תוכנה במאגרי Flatpak נריץ את הפקודה:

$ flatpak search Application_Name

וכדי להתקין את התוכנה נריץ את הפקודה:

$ sudo flatpak install  Application_Name

כדי לעדכן את כל חבילות Flatpak המותקנות במערכת נריץ את הפקודה:

$ sudo flatpak update

רשימה מלאה של פעולות שניתן לבצע באמצעות פקודת flatpak ניתן למצוא כאן.

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

23 June, 2018 08:20 AM

15 June, 2018

Ilan Shavit

AppImage

בהמשך למאמר הקודם, הפעם אכתוב על AppImage:

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

דוגמא: אם תורידו את תוכנת Etcher מאתר המפתח תיווכחו שאתם מורידים קובץ דחוס (zip). חילוץ הקבצים יחלץ קובץ בודד: etcher-electron-1.4.4-x86_64.AppImage (שימו לב לסיומת AppImage). מתן הרשאות ריצה (במקרה הזה לא צריך) מאפשר הרצה מיידית של התוכנה.

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

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

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

לכן אם משתמשים ב- AppImage חשוב מאוד לבדוק את חתימת הקובץ (זה כאמור לא תמיד יעזור). במקרה של Etcher אפילו לא מצאתי היכן נמצאת חתימת הקובץ…

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

15 June, 2018 05:34 AM

03 June, 2018

Rabin Yasharzadeh

Convert certificate format with OpenSSL

Convert a PEM file to DER (crt etc)

$ openssl x509 -outform der -in certificate.pem -out certificate.crt

Convert a PKCS#12 file (.pfx .p12) containing a private key and certificates to PEM

$ openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes

Convert a PEM certificate file and a private key to PKCS#12 (.pfx .p12)

$ openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

 

03 June, 2018 09:25 AM

22 May, 2018

Shlomi Noach

MySQL master discovery methods, part 5: Service discovery & Proxy

This is the fifth in a series of posts reviewing methods for MySQL master discovery: the means by which an application connects to the master of a replication tree. Moreover, the means by which, upon master failover, it identifies and connects to the newly promoted master.

These posts are not concerned with the manner by which the replication failure detection and recovery take place. I will share orchestrator specific configuration/advice, and point out where cross DC orchestrator/raft setup plays part in discovery itself, but for the most part any recovery tool such as MHA, replication-manager, severalnines or other, is applicable.

We discuss asynchronous (or semi-synchronous) replication, a classic single-master-multiple-replicas setup. A later post will briefly discuss synchronous replication (Galera/XtraDB Cluster/InnoDB Cluster).

Master discovery via Service discovery and Proxy

Part 4 presented with an anti-pattern setup, where a proxy would infer the identify of the master by drawing conclusions from backend server checks. This led to split brains and undesired scenarios. The problem was the loss of context.

We re-introduce a service discovery component (illustrated in part 3), such that:

In a failover/service discovery/proxy setup, there is clear ownership of duties:

Depending on the technologies used, we can further achieve:

We explain the setup using the following assumptions and scenarios:

A non planned failover illustration #1

Master M has died, the box had a power failure. R gets promoted in its place. Our recovery tool:

The proxy:

The app:

A non planned failover illustration #2

Master M gets network isolated for 10 seconds, during which time we failover. R gets promoted.

Everything is as before.

If the proxy kills existing connections to M, then the fact M is back alive turns meaningless. No one gets through to M. Clients were never aware of its identity anyhow, just as they are unaware of R's identity.

Planned failover illustration

We wish to replace the master, for maintenance reasons. We successfully and gracefully promote R.

Discussion

This is a setup we use at GitHub in production. Our components are:

As mentioned earlier, the apps need not change anything. They connect to a name that is always resolved to proxy boxes. There is never a DNS change.

At the time of failover, the service discovery component must be up and available, to catch the change. Otherwise we do not strictly require it to be up at all times.

For high availability we will have multiple proxies. Each of whom must listen on changes to K/V. Ideally the name (cluster1-writer.example.net in our example) resolves to any available proxy box.

See also:

Sample orchestrator configuration

An orchestrator configuration would look like this:

  "ApplyMySQLPromotionAfterMasterFailover": true,
  "KVClusterMasterPrefix": "mysql/master",
  "ConsulAddress": "127.0.0.1:8500",
  "ZkAddress": "srv-a,srv-b:12181,srv-c",
  "PostMasterFailoverProcesses": [
    “/just/let/me/know about failover on {failureCluster}“,
  ],

In the above:

See orchestrator configuration documentation.

All posts in this series

22 May, 2018 08:45 AM

MySQL master discovery methods, part 1: DNS

This is the first in a series of posts reviewing methods for MySQL master discovery: the means by which an application connects to the master of a replication tree. Moreover, the means by which, upon master failover, it identifies and connects to the newly promoted master.

These posts are not concerned with the manner by which the replication failure detection and recovery take place. I will share orchestrator specific configuration/advice, and point out where cross DC orchestrator/raft setup plays part in discovery itself, but for the most part any recovery tool such as MHA, replication-manager, severalnines or other, is applicable.

We discuss asynchronous (or semi-synchronous) replication, a classic single-master-multiple-replicas setup. A later post will briefly discuss synchronous replication (Galera/XtraDB Cluster/InnoDB Cluster).

Master discovery via DNS

In DNS master discovery applications connect to the master via a name that gets resolved to the master's box. By way of example, apps would target the masters of different clusters by connecting to cluster1-writer.example.net, cluster2-writer.example.net, etc. It is up for the DNS to resolve those names to IPs.

Issues for concern are:

As long as things are stable and going well, discovery via DNS makes sense. Trouble begins when the master fails over. Assume M used to be the master, but got demoted. Assume R used to be a replica, that got promoted and is now effectively the master of the topology.

Our failover solution has promoted R, and now needs to somehow apply the change, such that the apps connect to R instead of M. Some notes:

A non planned failover illustration #1

Master M dies. R gets promoted. Our tool instructs all DNS servers on all DCs to update the IP address.

Say TTL is 60 seconds. Say update to all DNS servers takes 10 seconds. We will have between 10 and 70 seconds until all clients connect to the new master R.

During that time they will continue to attempt connecting to M. Since M is dead, those attempts will fail (thankfully).

A non planned failover illustration #2

Master M gets network isolated for 30 seconds, during which time we failover. R gets promoted. Our tool instructs all DNS servers on all DCs to update the IP address.

Again, assume TTL is 60 seconds. As before, it will take between 10 and 70 seconds for clients to learn of the new IP.

Clients who will require between 40 and 70 seconds to learn of the new IP will, however, hit an unfortunate scenario: the old master M reappears on the grid. Those clients will successfully reconnect to M and issue writes, leading to data loss (writes to M no longer replicate anywhere).

Planned failover illustration

We wish to replace the master, for maintenance reasons. We successfully and gracefully promote R. We need to change DNS records. Since this is a planned failover, we set the old master to read_only=1, or even better, we network isolated it.

And still our clients take 10 to 70 seconds to recognize the new master.

Discussion

The above numbers are just illustrative. Perhaps DNS deployment is quicker than 10 seconds. You should do your own math.

TTL is a compromise which you can tune. Setting lower TTL will mitigate the problem, but will cause more hits on the DNS servers.

For planned takeover we can first deploy a change to the TTL, to, say, 2sec, wait 60sec, then deploy the IP change, then restore TTL to 60.

You may choose to restart apps upon DNS deployment. This emulates apps' awareness of the change.

Sample orchestrator configuration

orchestrator configuration would look like this:

  "ApplyMySQLPromotionAfterMasterFailover": true,
  "PostMasterFailoverProcesses": [
    "/do/what/you/gotta/do to apply dns change for {failureClusterAlias}-writer.example.net to {successorHost}"
  ],  

In the above:

See orchestrator configuration documentation.

All posts in this series

22 May, 2018 08:44 AM

07 May, 2018

Meir Kriheli

מצגת ההרצאה NoORM

למרות כותרת ההרצאה הפרובוקטיבית, ההרצאה שלי ב־PyWeb-IL 75 עוסקת במקרים בהם עלינו לעזוב את מחוזות ה-ORM/ODM.

מצגת ההרצאה NoORM זמינה בעמוד הרצאות ומצגות.

07 May, 2018 09:26 PM

25 April, 2018

Arie Skliarouk

GRUB-based multiple iso booting flash drive

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

GRUB to the rescue!

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

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

    Caveats:

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

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

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

    25 April, 2018 08:21 AM

    adaptec CLI management tool

    Recently I had to install adaptec CLI management tool on an ubuntu 8.10 amd64 server. Despite the fact that aacraid driver is present in kernel, it took me a lot of time to find the management tools that allow to see the RAID status and manipulate it from command line. There are several names for the tools: afacli, aaccli, afaapps, afa-apps-snmp, arcconf, hrconf... oh my!
    After I found the necessary tools (64bit arch), I packaged them into a tiny deb package adaptec-utils_0.0.1_amd64.deb, which can be downloaded from here: DELETED_AS_REDISTRIBUTION OF BINARIES_IS_PROHIBITED_BY_ADAPTEC

    Also, I wrote a simple monitoring script (included in the deb package) that checks the state of the Adaptec RAID system and sends out an email if any of the published indicators is wrong (battery, failed disks, etc). The script can be downloaded from here:
    http://skliarie.meshanet.com/skliarie_blog/adaptec-utils/adaptec_check.sh

    Note that the script requires proprietary binary files to be installed. See the beginning of the script for the details.

    25 April, 2018 08:20 AM

    19 March, 2018

    Tom Bigelajzen

    Font Progress Update

    The Ubuntu Font Hebrew v0.8 Design PrototypeThere was some progress made this week, especially with fine tuning the letters and revising those letters I’m not so sure about.
    The one letter I’m struggling with is Aleph (א), I can’t seem to find the right balance.

    I got a lot of feedback and many good tips, thank you everybody 🙂
    I’m doing my best to take them all into account.

    I was trying to add some Hebrew glyphs to a font file, but the free font creation programs I tried (FontForge and the Demo of TypeTool) are not so friendly, it will take some more time to do.

    Links to v0.8:
    PDF file
    Illustrator CS4 File

    19 March, 2018 08:15 AM

    Ubuntu Font Hebrew Subset now has an issue on Launchpad

    The Ubuntu Font Hebrew v0.8 Design PrototypeI opened an issue on launchpad and it was added to the Ubuntu Font Family Wishlist queue.

    As an added bonus Mark Shuttleworth himself gave his blessing to this design effort (!)
    It was a fun mail to start the day with 🙂

    I want to quote one thing he wrote:

    It *would* be useful if you could start building up a Hebrew community that can provide early and accurate feedback to DM when they start the Hebrew design process.

    And later, Paul Sladen wrote:

    developing a typeface takes a very long-time (months and months), and although
    work on Hebrew won’t be incorporated until the Ubuntu 11.04 development cycle,
    it is very useful to start working on it now!

    So, I really want to start working on it seriously (too bad I didn’t start this before August Penguin…)
    This week I guess I’ll finish the initial design with the good tips I got from Paul Sladen and from Maxim Ioresh, but this is only the beginning:

    A real OpenType font must be created and refined, people need to test it, to find where it breaks.
    And there are more variants –  we have to do the Bold font, the Italic and Bold Italic, and by the time these will be finished there most likely be some Condensed variants too… so I need designers, typographers and testers to pitch in, we have a bit more than 6 months, it’s enough, but not a lot of time for a community project.

    Original post: http://tombigel.com/2010/08/26/hebrew-for-the-ubuntu-font/

    This is fun! I love Open Source.

    19 March, 2018 08:15 AM

    05 March, 2018

    Lior Kaplan

    Running for OSI board

    After serving in the board of a few technological Israeli associations, I decided to run as an individual candidate in the OSI board elections which starts today. Hoping to add representation outside of North America and Europe. While my main interest is the licensing work, another goal I wish to achieve is to make OSI more relevant for Open Source people on a daily basis, making it more central for communities.

    This year there are 12 candidates from 2 individual seats and 5 candidate for 2 affiliate seats (full list at OSI elections wiki page). Wish me luck (:

    Full text

    05 March, 2018 09:37 AM

    25 February, 2018

    Ira Abramov

    עוד פרויקט שלא אגיע אליו: עוזר חכם ובית חכם

    האם אתם רוצים מערכת כזו? התשובה מורכבת.

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

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

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

    1. יש מיקרופון והמחשב שמאזין לו, מנסה לבטל רעשי רקע ולהתמקד במה שעלול להיות דיבור.
    2. אח"כ תוכנה אחרת שבודקת אם זה אכן דיבור ומתרגמת אותו לטקסט. זה אולי הרכיב הכי מתוחכם במערכת ונחמד שיש אופציה או שתיים ברישיון חופשי (אבל כרגע אני די בטוח שזה עובד רק באנגלית, ולא יעבוד בעברית בקרוב. מקווה שלא תהיה בעיה עם זיהוי מבטא לא ילידי :)
    3. אחרי שיש לנו טקסט אפשר לפענח ממנו את הפקודה גם אם לא נאמרה בצורה תקנית אחת. כלומר "התראה עוד שעה" או "בבקשה כוון לי תזכורת בעוד שעה מעכשיו, תודה" הם שני משפטים שונים למדי אבל המחשב צריך לזהות את שניהם. הרכיב הזה והרכיב הקודם הם הרכיבים שקורים בענן של גוגל או אמאזון או מיקרוסופט שאותם אני רוצה להביא אל תוך הבית.
    4. בשלב הזה אפשר להפעיל מיני תוכנות וסקריפטים (מייקרופט למשל קוראים לזה "כשרונות" והקהילה פיתחה כבר כ-140 כאלו), כאן מגיעה ההתממשקות עם MQTT ורכיבי חומרת Sonoff השונים, או גישה לרשת כדי לדבר עם חשבון הגוגל שלכן כדי לבדוק איש קשר או לדחוף ארוע ליומן, וכיוצא באלו.
    5. לבסוף לאשר או להחזיר משוב למשתמש בצורת רכיב אחר שהופך תשובת טקסט לדיבור, מסנטזים כאלו יש הרבה בשוק – היה לי אפילו על אפפל ][ עם 64K זכרון, לצערי האיכות התפתחה מעט מאוד מאז בתוכנה פתוחה. מקווה שישתפר בעתיד.

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

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

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

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

    25 February, 2018 03:50 PM

    16 January, 2018

    Artyom Beilis

    CppCMS עובר מ-LGPLv3 ל-MIT

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

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

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

    הטקסט המלא

    16 January, 2018 09:47 AM

    04 January, 2018

    Levi Shahar

    איך לא להגן על הרשת אלחוטית שלכם

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

    Full text

    04 January, 2018 09:25 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/)

    Full text

    28 November, 2017 09:07 AM

    28 October, 2017

    Levi Shahar

    השורה הראשונה בסקריפט שלכם

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

    Full text

    28 October, 2017 09:25 AM

    18 October, 2017

    Ram on Agmon

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

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

    הטקסט המלא

    18 October, 2017 05:06 PM

    03 October, 2017

    Meir Kriheli

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

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

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

    03 October, 2017 06:39 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

    18 June, 2017

    Amir Aharoni

    סיסמה

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

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

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

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

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

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

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

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

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

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

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

    18 June, 2017 11:03 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:

    Diversity

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

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

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

    Budget

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

    Income

    Sponsorship: 246

    Ticket sales: 54

    Total: 300

    Expenses

    Venue (incl. food): 134

    Conf. party (food+movie): 41

    Keynote speakers travel: 30

    Speaker’s dinner: 13

    Video recording & editing: 20

    T-shirts & other swag: 28

    Wireless internet: 5

    Various other: 3

    Total: 274

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

    Community organizations

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

    2017

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

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

    Twitter: @pyconil, #pyconil

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

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

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

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

    Final words

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

    See you in 2017,

    The PyCon Israel organizing team

    18 October, 2016 07:45 PM

    23 September, 2016

    Yosef Or Boczko

    GNOME 3.22 שוחרר !

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

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

    GNOME 3.22 Hebrew

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

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

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

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

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

    בברכה,

    יוסף אור

    23 September, 2016 02:47 PM

    14 August, 2016

    Yosef Or Boczko

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

    ערב טוב.

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

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

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

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

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

    ערב טוב,

    יוסף אור

     

    14 August, 2016 04:05 PM