Long range challenges for Israel, 30 years later

Almost 30 years ago, I wrote the article Long range challenges for Israel.

Now it is time to review the challenges that I proposed there and see whether they were addressed.

  1. The Mideast water shortage problem: Thanks to the big water desalination plants, Israel now has no water shortage problem. Israel now helps Jordan alleviate its water shortage problem. Plans to exchange solar electricity from Jordan’s deserts for Israeli desalinated water are now under discussion.
  2. The 1990’s immigrants from the former Soviet Union have been absorbed. Now they are beginning to retire after a career in Israel. Infrastructure for 15-20 million residents in Israel has not been built, but is under discussion. The capital for financing the infrastructure building is available, but not the political will, plans, authorizations etc.
  3. A comprehensive network of volunteer organizations to help anyone, who is free from money sucking addictions, overcome the limits imposed by poverty/disability/belonging to a disadvantaged group – has not been built. For this, we need a leader who will inspire the existing organizations and volunteers to identify underserved people and ensure that everyone has where to ask for help.
  4. High Frontier – Israel has a lot of activity there. Israeli research organizations and businesses do work in various areas of space exploration, which do not duplicate efforts by other countries, while wisely refraining from investing a lot of money in high-prestige, low-benefit endeavors like launching astronauts to space using Israeli rockets. Israeli “Beresheet” even reached the Moon (albeit not in the way its planners intended it to), and “Beresheet 2” is now being worked on.

Thus, out of the four challenges which I identified 30 years ago:

  • One challenge has been met (water).
  • Two challenges were partially met, but both of them are being worked on (infrastructure and space).
  • One challenge was not met.

We still have work to do with the above challenges. The global climate change imposed upon us a fifth challenge – to stop polluting the air with greenhouse gases by switching to renewable energy sources. We should also recycle all of our trash, both liquid and solid, so that it’ll not pollute land or sea.

So I do not need, at this time, to offer a new set of challenges to keep all of us busy in the next 30 years.

Alleviate social suffering from the COVID-19 by shortening its incubation period

A crazy idea:

Develop a preventive treatment for COVID-19, whose operation would be to shorten (yes, shorten!) the incubation period from contagion until development of the disease’s symptoms. So that the incubation period will be one or two days long like flu, instead of a week or even longer.

Then, ask everyone to undergo the treatment (maybe take pills).

This approach has few advantages:

  1. People, who were infected, will infect less other people, because they’ll know that they were infected and will isolate themselves promptly.
  2. There will be less need for PCR tests to confirm COVID-19 infection (why are we not doing tests to confirm flu infection?).
  3. People, who need to self-isolate, can release themselves from isolation faster, as the confirmation of their health would arrive earlier.
  4. It is possible that thanks to change in the flow of the disease, less people will suffer from the serious form of the disease. Of course, the opposite situation can happen and then it’ll be necessary to find another treatment, which does not have this side-effect.

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

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

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

לדרך פעולה זו יש כמה יתרונות:

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

Orphan Technologies

Hi-Tech is failing people with disabilities

The other day, Nathan Zeldes wrote to me:

Between us, I’ve always been pissed off by the lack of progress in hi-tech solutions for severe handicaps; the fact that even the legendary Stephen Hawking was using a robot voice sounding like a Commodore 64 shows how little incentive companies (and society) have in driving leading edge solutions that could liberate people from severe disabilities.

To which I replied:

The problem is a lack of incentive to develop technologies which would help only few people. It just is not profitable. People cannot have a decent standard of living or support wife & children by working only on such problems. Subsidizing the development of such a technology could lead to the basic problem of socialism (possibility of turning a profit NOT by serving another person, the basis of “true” capitalism).

A similar problem exists with “orphan medicines” – medications and
procedures for treating very rare illnesses.

What could be done?

In discussions with Nathan Zeldes and with Dr. Yoav Medan (who is involved with the orphan technology of 3D printing of prosthetic hands), the following ideas were mentioned.

1. Students doing Final Projects

  • STEM students, who do their final projects, can profit from working
    on an orphan technology as their final project. The students provide
    a service and in exchange for it, they gain experience which will help
    them later make more money in their careers.
    However, most students cannot bring a product to market. The
    best they can do is to solve problems in a local and limited community.
  • People, who are not students, could gain both experience and reputation by working on such problems.
  • Companies could sponsor such projects, in order to get favorable
    advertising, improve their reputation, etc.
  • It would be a good idea to develop ways to quickly monetize experience/reputation to allow people to live well by doing those projects for a living.

2. Dual-use Technologies

For the deaf and HOH (Hard of Hearing), most of the relevant technologies happen to have dual use, starting from Alexander Graham Bell’s telephone. Robert Weitbrecht’s acoustic coupler was useful not only for allowing deaf people use teletypes over phone lines (and not only over telex lines) but also for other data communication users.

My personal experience was with adding Hebrew support to the Nokia 9110 and Nokia 9210 smartphones at the beginning of 21st century. Those cellular phones were very useful for the deaf in the pre-SMS era thanks to their ability to send and receive FAX messages. Since Hebrew support was useful also for Hebrew-speaking hearing people, it was a profitable endeavor for Erez Zino and me. See also: כנגד קול הסיכויים (in Hebrew).

A variant of this approach is for biotech and pharma companies, when developing a new technology, to first develop it to treat orphan/rare diseases. This gives them regulatory and reimbursement advantages. Once the technology is developed, it is applied also to common diseases, for which established therapies already exist.

An example is Minovia, which is developing a cell therapy technology to treat mitochondrial diseases. They began by targetting the Pearson Syndrome, which affects only 100 children worldwide.

3. “Micro-business” methodology and support services

Orphan technologies become orphan because the Hi-Tech world is based upon economics of scale. To develop a technology, you need a sufficiently big market to make it worthwhile. A business needs to have a minimum size to have any chance for success.

A methdology, infrastructure and support services to facilitate “micro-businesses” would overcome the above barrier. A micro-business would be a business, which does not require more than few hours a month, after some reasonable initial investment in building it, and would be very profitable (in terms of net income per hour) serving its very limited market.

One such possibility is to have spread out creativity centers (both physical and in the WWW) which help people develop their ideas. Examples: TAMI hackerspace and HAIFAUP.

4. Affluent end-users subsidizing the development

One could get affluent people needing an orphan technology to fund its development. Even if they are few, just one millionaire, with a child afflicted with the problem, could be enough to fund the orphan technology’s development.

Variations of this approach:

  • Government funding of technologies needed to rehabilitate army veterans with disabilities.
  • Collaboration with a non-profit devoted to the disease in question. Some of them have money or access to donors.
  • Philanthropic funding (from people not needing the orphan technology or themselves).
  • A variant of philanthropic funding is to use crowdfunding websites (Headstart, FundIt, PipelBiz, Indiegogo, KickStarter, etc.) to donate to a project.
  • Some companies declare upfront that they will allocate a certain percentage of their profits to social causes (including orphan technologies development), without expectation to make any financial returns.

5. Impact Investments

Some people invest not only for profit but also for social impact. They invest in underserved areas where they can see an eventual upside. An example is Social Finance Israel.

What could make me oppose Bibi Netanyahu – מה היה גורם לי להתנגד לביבי נתניהו

במערכות הבחירות של 2015 ו-2017, שמתי לב לתופעה מעניינת.

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

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

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

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

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

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

  1. תגבור הכפיה הדתית והתרבות תופעות של הדתה בחיי היום יום.
  2. היחס ליהודים קונסרבטיביים ורפורמיים.
  3. תופעות של ישראבלוף – אם מתברר שהגזימו כלפי מעלה בחישוב הייצוא או יתרות מט”ח של ישראל, או הגזימו כלפי מטה בהערכת אחוז האבטלה בישראל.
  4. תופעות של ישראבלוף ביחסי החוץ של ישראל, למשל אם לאחר שנתניהו נואם על היחסים המצוינים עם ארץ מסוימת, מתברר שהם מצביעים נגד ישראל באו”ם ועושים בעיות לתיירים ואנשי עסקים ישראליים שמגיעים לארץ זו.
  5. מדיניות כלכלית פופוליסטית ו/או תיעדוף סקטורים כלכליים מסוימים בגלל לחצים פוליטיים.
  6. פגיעה בהתפתחות סקטור ההיי-טק בישראל על ידי מיסוי, רגולציות או מדיניות כושלת אחרת.
  7. הגדלת קיצבאות לחרדים ולאנשים אחרים שיכולים לעבוד ואין להם באמת צרכים מיוחדים – לרמה שמעודדת אותם להתבטל ולא לנסות לפרנס את עצמם.
  8. עצירת השקעות בתשתית – תחבורה, אינטרנט מהיר, ניצול אנרגיות מתחדשות.
  9. שחיתות שמתבטאת בפרויקטי תשתית שתוכננו לא נכון ואינם משרתים את הצרכים האמיתיים של עם ישראל. כנ”ל – בהצטיידות בכלי נשק ע”י צה”ל.
  10. ניוון מערכות ההשכלה הגבוהה.
  11. בעית דיור אמיתית-אמיתית, שמתבטאת בצפיפות דיור גבוהה ו/או דיירי רחוב שנזרקו לרחוב שלא בגלל בעיות נפשיות/שכרות/סמים.
  12. הימנעות מהשקעה בבדואים בדרום כדי שלא ייהפכו לעדה של אנשים שמראש מניחים שהם עבריינים, כמו השחורים בארה”ב.
  13. היחס לדרוזים ברמת הגולן לעומת היחס לערבים ביהודה ושומרון. יחס לא הוגן לדרוזים הללו יהיה סימן אזהרה שישראל הולכת להיות מדינה גזענית שמפלה לרעה שכבות אוכלוסיה מסוימות.
  14. איסור על ספרים, סרטים והצגות תיאטרון שמשחירות את פני ישראל, ושהופקו ב-100% מימון פרטי ללא תמיכה ממשרד החינוך והתרבות, ושמוצגות באולמות בבעלות 100% פרטית ללא שותפות ממשלתית או עירונית.

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

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

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.

    • M: the transfer function of a machine learning system.
    • A: the argument of M – the data used by a machine learning system to make a prediction.
    • a_j: the j^{th} element of A.
    • P: the value of M(A) i.e. the prediction that the machine learning system makes when presented with data A.
    • p_k: the k^{th} element of P.
    • I: the identity function. For all x, I(x) = x.
    • F^{-1}(x) is the inverse of F(x), for any function F(x): for all relevant x, F^{-1}(F(x)) \equiv x \equiv F(F^{-1}(x)).
    • Functional composition: for all relevant x, (F_1 \circ F_2)(x) \equiv F_1(F_2(x)). For example, F^{-1} \circ F \equiv I \equiv F \circ F^{-1}.
    • E_a(A): a function which encrypts the argument A. Its inverse is denoted by E^{-1}_a(A'), which decrypts A', an encrypted version of the argument A.
    • D_p(P'): a function which decrypts the encrypted prediction P'. Its inverse is denoted by D^{-1}_p(P), which encrypts the prediction P.

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:

  • Picture classification. When presented with a picture of an animal, the system would tell how likely is the animal to be a dog, a cat or a horse. The system is trained by presenting it several pictures together with a label identifying the animal shown in the picture.
  • Prediction of the next few values of a time series, such as the numbers which describe the weather at a particular location. The system is trained by using relevant historical information.

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:

  • The machine learning model P' = M'(A') is to be implemented using a technology, which is sufficiently sophisticated to embed also nonlinear and invertible functions in the loss function used to evaluate it.
  • There is sufficient training and validation data to train the model, which embeds including nonlinear invertible functions.

Types of data

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

  • Variable names
  • Numerical variables
  • Ordinal variables
  • Categorical variables
  • Time based variables

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:

  • \vec {A_v} is the restriction of A to numerical variables.
  • \vec {A_v'} is the encrypted version of\vec {A_v}.
  • E_{av} is the argument’s encryption function, restricted to numerical elements of the argument A.
  • E_{matrix} is an invertible transformation matrix.

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.

Security and Obscurity

If you do not know the password but know how to use the password to gain access to something that was secured using this password, then this is security by obscurity.

On the other hand, if you know the password but do not know how to use the password, then this is obscurity by security.

(Sources of inspiration: The Butterfly DreamCategory Theory’s reversal of rows.)

Android unit testing and Mazer Rackham

כבר אמר מייזר רקהאם (“המשחק של אנדר”) שאין מורה כמו האוייב.
נזכרתי בזה במהלך המלחמה שלי בבניית בדיקות יחידה לאפליקציה לאנדרואיד בסביבת הבדיקה של API 24 והלאה.
Mazer Rackham (“Ender’s Game”) said: There is no teacher but the enemy.
I was reminded of this during my war of building unit tests for an Android application in the testing environment of API 24 and later.

How to manage money before registration of the Hamakor nonprofit

Hamakor – an Israeli nonprofit for Free Software and Open Code was founded at 2003 and one of its goals is to help deal with money when organizing various activities around Free Software.

Before founding Hamakor, people resorted to other solutions. In one exhibition, we wanted to distribute Linux installation CD-ROMs to the crowd. However, we wanted those CD-ROMs to reach only people who have a serious intent to install Linux. A way to ensure it was to require them to donate money in exchange for their CD-ROM. However, if we collect money, we must issue receipts and do bookkeeping.

Truly Yours had the brilliant idea of inviting other nonprofits to send a representative to collect the donations and issue receipts. It was a win-win-win solution. We get someone to issue receipts and sweat over the bookkeeping. The nonprofits get money for their operations. The people, who paid for their CD-ROMs, treat them seriously.

One of the nonprofits was the Association of the Deaf in Israel.

Thank you letter from the Association of the Deaf in Israel
Thank you from the Association of the Deaf in Israel

The 2010’s John Galt project – Artificial Photosynthesis

The 2010’s John Galt project – the most important technology to be developed this decade:

Artificial photosynthesis.

Technology for using solar energy to bind carbon dioxide with hydrogen from water, and convert them into carbohydrate fuels.

The technology will have the following benefits:

  1. Solve the problem of global heating, thanks to removal of carbon dioxide from the atmosphere.
  2. Make it possible to power everything using solar energy – directly during daytime, and indirectly (through burning the carbohydrate fuels) at night and bad weather.

The biggest drawback: drastic change in the economic power structure worldwide, because countries and companies with coal, oil or gas deposits would no longer have power over their clients.

פרויקט ג’ון גאלט של שנות ה-2010 – הטכנולוגיה החשובה ביותר לפיתוח בעשור הנוכחי:

פוטוסינתיזה מלאכותית.

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

לטכנולוגיה כזו יש שני יתרונות גדולים:

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

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

A proposed new language construct: do/undo

There are several cases, in which a program has to do operations A,B,C. If an error occurs while doing A, the program needs to undo A. If there is an error while doing B, the program needs to undo B then A. Similarly, an error in C requires undoing of C,B,A in this sequence.
Continue reading “A proposed new language construct: do/undo”