Planet foss-il

March 24, 2015

מאיר קרחילי

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

Django 1.8 נמצא בהקפאת מחרוזות, הגיע הזמן לעדכן את התרגום העברי מאחר ו-django-core עמד על 93%.

לאחר יומיים של עבודה, עומדים על 100%:

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

  • django-localflavor - לא הצלחתי לאתר תרגום עברי לחלק לא מבוטל מהערים והמחוזות שנוספו (עומד על 46%).
  • django-docs - הרבה עבודה (עומד על 1%).

March 24, 2015 09:03 AM

March 22, 2015

Oz's Blog

New version of Pwman3 released

I finally managed to release a new version of pwman3, the console and network password manager. Read more about it here. ... continue reading...

March 22, 2015 10:31 PM

March 21, 2015

Oz's Blog

Simple Multiprocessing Task Queue in Python

Yet another tutorial about Python's multiprocessing. What make this one different? Well, it's based on a real like example and show what is going on behind the sceanes on your Linux host. ... continue reading...

March 21, 2015 02:31 PM

Farewell PyCharm! Going VIM again

A few months ago we migrated from PyDev to PyCharm. After a 3 months time where I lead the migration from PyDev to PyCharm and SVN to GIT, I am back again to work with VIM. Here are my thoughts about PyCharm. ... continue reading...

March 21, 2015 02:31 PM

Poor man's Read-The-Docs

Here is how to build sphinx documentation on multiple branches in your Python project. If you want to have Sphinx documentation for your project without having to install the whole complicated readthedocs.org image. ... continue reading...

March 21, 2015 02:31 PM

salt quick tip - changing passwords on multiple clusters

Using salt stack to manage your own private cloud on clusters can ease your life. Here is how you can allow users to update their passwords on multiple Linux hosts. ... continue reading...

March 21, 2015 02:31 PM

Installing Oracle's JAVA on Debian

There are many solutions floating around to install Oracle's JAVA on Debian based systems. Most of them involve too many manual steps. Here is one that does not, and it simply works! ... continue reading...

March 21, 2015 02:31 PM

Revive and old Smartphone with Cyanogenmod!

I recently installed Cyanogenmod on an old Samsung Galaxy II and I just wanted to share my thoughts. ... continue reading...

March 21, 2015 02:31 PM

Quick Tip - Tiling Windows manager in Mate-Desktop

Here is how you can achieve Tiling windows management without leaving a full blown Desktop Environment such as Mate-Desktop using x-tile ... continue reading...

March 21, 2015 02:31 PM

Dell is not serious about Linux

How serious Dell is about Linux? I think it is not that serious, and it is using Ubuntu fans as free advertising platform ... continue reading...

March 21, 2015 02:31 PM

Git tip - git describe

Earlier I posted a tip how to count commits between tags, this post suggests a better way to do it ... continue reading...

March 21, 2015 02:31 PM

Git tip - Count commits between tags

Once every N commits I would like to release a new version of pwman3, so here is how to keep a track of this number between releases ... ... continue reading...

March 21, 2015 02:31 PM

Guy Rutenberg

Creating an Hebrew Document in LyX 2.1 with XeTeX

This post complements the basic LaTeX template I gave yesterday for typesetting Hebrew with XeTeX. I’ll walk through the (short) list of steps needed to configure LyX with XeTeX.

Prerequisites

  • LyX 2.1 or later (I’ve also tested with the development version of 2.2). I had very limited success with LyX 2.0, so you should probably avoid it.
  • XeTeX – I’ve tested with version 3.1415926-2.4-0.9998 which comes with TeXLive 2012, but I guess any recent version will do.
  • The polyglossia and bidi packages. Again I’ve used those which come with TeXLive 2012.
  • Good TrueType Hebrew fonts. I recommend Culmus 0.121 or newer. You may also try and use the fonts that come with your operating system, they might work as well.

Setting up the document

Create a new document and open the settings dialog (Document -> Settings...).

  1. Pick a suitable Document class. I recommend “KOMA-Script Article” but “Article” works just as fine. Avoid “Hebrew Article”, as it is broken under XeTeX.
  2. Under Fonts check the box next to `Use non-TeX fonts (via XeTeX/LuaTeX) and select suitable fonts:
    • Roman: Frank Ruehl CLM. David CLM is also a good choice with somewhat better italics variant.
    • Sans Serif: Simple CLM.
    • Typewriter: Miriam Mono CLM.
    • There is no need to change the Math font.
  3. Under Language select Hebrew as the document’s language.

That’s basically it. You can now write your document and compile it. I would suggest saving these settings as default (via “Save as Document Defaults”) or saving it as a template so you won’t need to repeat those steps.

Writing in English

To insert English text in your Hebrew document, you need to change the current language. The easiest way to do so is to create a keyboard shortcut for it:

  1. Go to Tools -> Preferences -> Editing -> Shortcuts
  2. Write “language” under “Show key-bindings containing:”.
  3. Select “language” under “Cursor, Mouse and Editing Functions” and click “Modify” to set a keyboard shortcut (F12 is traditionally used for this).

Now you can toggle the current language between English and Hebrew by simply pressing F12.

Remark about Fonts

It is preferable to use fonts that provide both Hebrew and Latin scripts, as otherwise there might be significant style differences which make the document look weird. It is possible to set a different font for Hebrew and Latin, but care needs to be taken to match styles. To do so, add the following lines to the Preamble:

\newfontfamily\hebrewfont[Script=Hebrew]{David CLM}
\newfontfamily\hebrewfonttt[Script=Hebrew]{Miriam Mono CLM}
\newfontfamily\hebrewfontsf[Script=Hebrew]{Simple CLM}

by Guy at March 21, 2015 08:07 AM

Hebrew with XeTeX Example

This is an example of a document in XeTeX (Actually XeLaTeX). I’ve used The fonts from the Culmus Project. Note that you’ll need Culmus 0.121 or newer in order to get the Frank Ruehl font in TrueType. As you can see, Nikud are placed correctly. The cantillation marks (טעמי המקרא) are in a small offset compared to the ideal position.

Overall, XeTeX works much better with Hebrew (and easier to use) than pdfTeX.

heb-test

\documentclass{minimal}
\usepackage{polyglossia}
\setdefaultlanguage{hebrew}
\setotherlanguage{english}
\usepackage{fontspec}
\setmainfont{Frank Ruehl CLM}
\setmonofont{Miriam Mono CLM}
\setsansfont{Simple CLM}
% Use the following if you only want to change the font for Hebrew
%\newfontfamily\hebrewfont[Script=Hebrew]{David CLM}
%\newfontfamily\hebrewfonttt[Script=Hebrew]{Miriam Mono CLM}
%\newfontfamily\hebrewfontsf[Script=Hebrew]{Simple CLM}
 
 
 
\makeatletter
\makeatother
\usepackage{bidi}
\begin{document}
טקסט רגיל
\textbf{טקסט מודגש}
\textit{טקסט נטוי}
\textit{\textbf{טקסט מודגש ונטוי}}
בְּרֵאשִׁ֖ית בָּרָ֣א אֱלֹהִ֑ים אֵ֥ת הַשָּׁמַ֖יִם וְאֵ֥ת הָאָֽרֶץ:
 
\begin{english}
In the beginning God created the heaven and the earth.
\end{english}
 
\sffamily
טקסט רגיל
\textbf{טקסט מודגש}
\textit{טקסט נטוי}
\textit{\textbf{טקסט מודגש ונטוי}}
בְּרֵאשִׁ֖ית בָּרָ֣א אֱלֹהִ֑ים אֵ֥ת הַשָּׁמַ֖יִם וְאֵ֥ת הָאָֽרֶץ:
 
\begin{english}
In the beginning God created the heaven and the earth.
\end{english}
 
 
\ttfamily
טקסט רגיל
\textbf{טקסט מודגש}
\textit{טקסט נטוי}
\textit{\textbf{טקסט מודגש ונטוי}}
בְּרֵאשִׁ֖ית בָּרָ֣א אֱלֹהִ֑ים אֵ֥ת הַשָּׁמַ֖יִם וְאֵ֥ת הָאָֽרֶץ:
 
\begin{english}
In the beginning God created the heaven and the earth.
\end{english}
\end{document}

by Guy at March 21, 2015 07:58 AM

March 16, 2015

Liran Tal's Enginx

Prevent clickjacking on Drupal and other Apache web applications

Security is an important aspect to keep an eye for, and this time it’s about preventing clickjacking on Drupal and other Apache web applications.

Edit apache’s configuration file, which may be your declared vhost or such, usually at a location like /etc/httpd/conf.d/default.conf and make sure the  following

 

<IfModule mod_headers.c>
Header always append X-Frame-Options SAMEORIGIN
</IfModule>

 

This will disable embedding your website as an iFrame.

0013_clickjacking

The post Prevent clickjacking on Drupal and other Apache web applications appeared first on Liran Tal's Enginx.

by lirantal at March 16, 2015 01:23 PM

March 14, 2015

עברית בלינוקס

Atom – חרא של עורך

אטום הוא מתיימר להיות מחליף של sublime אבל הוא חרא בריבוע. איטי… דוגמאות:

  1. הוא לא יכול לפתוח קבצים בגודל 2 מגה ומעלה. קבצי C יכולים להגיע לגדרים כאלו בקלות.
  2. הגלילה שלו לא מהירה מספיק.
  3. התמיכה שלו בכל דבר שהוא לא ווב, היא פשוט דרעק. עריכה של קבצי bash היא … לא טובה.
  4. תפתחו קובץ עם 200 שורות, תבחרו באפשרות Selection -> Split into lines, תלחצו home, ואם התחביר שלכם הוא C, אז חלק מהשורות יהיו בתחילת השורה הלוגית וחלק בעמודה 0. לחיצה פעמיים על home לא תעזור לכם. אחרי 20 פעמים, תהיה exception והעורך לא יעבוד שוב.
  5. התוכנה פשוט מאבדת את הסמן מהר מדי… לא הבנתי איך אבל יותר מדי פעמים אני בפוקוס על החלון ואין לי סמן. רק לחיצה על החלון פותרת את זה.
  6. תפתחו XML עם 500 שורות. סמנו 500 שורות. שוב Selection -> Split into lines עכשיו תנסו לשנות משהו. העורך פשוט איטי בטירוף.

עצוב. מאוד.

by elcuco at March 14, 2015 07:59 PM

March 10, 2015

על בני אדם וחיות אחרות » תוכנה חופשית וקוד פתוח

אובנטו חדשה לה לה לה, Ansible btrfs

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

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

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

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

וזה כל הזמן עובד.

חוץ מזה, יצא לי לשחק עם btrfs שנראית לי מאוד מאוד מרשימה. היא עושה בקלות דברים שהם כמו קסם עבור ניהול מחיצות. זה הסופרן אומן של מערכות הקבצים. כשהיא יציבה. וזה סימן שאלה שכבר עלה לי. ועדיין, מאוד מעניין. מיקרוסופט מאוד משעשעים אותי עם ה- azure שלהם. הגישה שלהם ללינוקס היא כזו מיקרוסופטית, כאילו, כזו עקומה. כאילו, למה המכונה צריכה לזהות cdrom? ואם כן, אז למה להסתיר אותו עם mount?

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

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

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

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

by האח הגדול at March 10, 2015 08:27 PM

March 09, 2015

Liran Tal's Enginx

Apache Obfuscation by disabling trace and server tokens

Apache Obfuscation can be achieved very easily and the benefits are great – it doesn’t disclose server information such as versions, OS, and does output verbose errors when ‘bad things happen’, and they happen.

2870445260_82be0db1db_z

Edit apache configuration, usually available here for RedHat based distributions: /etc/httpd/conf/httpd.conf

Make sure the following settings are present, save, and restart apache:

TraceEnable Off
ServerSignature Off
ServerTokens Prod

How do we test that this is actually working?

How to TraceEnable:
1. curl -v -X TRACE http://…
2. Confirm you get a forbidden response

How test ServerTokens:
1. Make a request to the website and check the response headers
2. Confirm the response contains only “Apache” information in the Server header

How to test ServerSignature:
1. Make a request to the website for a URL that should respond with Apache server error
2. Confirm you don’t see information about the apache server software version, OS, etc.

 

The post Apache Obfuscation by disabling trace and server tokens appeared first on Liran Tal's Enginx.

by lirantal at March 09, 2015 06:40 AM

March 07, 2015

עברית בלינוקס

גיבויים באנדאויד

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

סוג ראשון – זמין בכל אנדרויד 4.0 – adb backup

כל שצריך הוא android-sdk מותקן על המחשב (למעשה את הפקודה adb בלבד) ואפשר לגבות איתה. השימוש הוא פשוט, לכתוב את הפקודה הבאה במחשב תוך כדי שהמכשיר הסלולרי מחובר למחשב:

adb backup  -f backup-2015-2-15.ab -apk -bb com.whatsup com.pinterest

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

adb shell pm list packages | grep firefox
package:org.mozilla.firefox

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

adb restore backup-2015-2-15.ab

כמה הערות:

  1. כשיתחיל הגיבוי בטלפון יהיה חלון שבו תתבקשו לשים ססמה כדי להגן את הגיבוי. אני סטלן ושוכח את הססמאות… אז לפעמים אני שם את הססמה בשם הקובץ… אבל לאחרונה גם וויתרתי על זה ואני פשוט מאשר כדי לעשות גיבוי ללא ססמה.
  2. אם גיבית אם ססמה – כדי לשחזר צריך גם ססמה. אם אין ססמה – אי אפשר לשחזר, מניסיון :)
  3. אין בעיות להעביר גיבוי בין מכשירים. אני העברתי את whatsup כולל היסטוריה מלאה של שיחות, כמה פעמים בין מכשירים בטכניקה הזאת.
  4. אני יצרתי סקריפט ששומר מספר חבילות (כאלו שאין בחנות של אנדרויד, שזמינות דרך FDroid) וגם שם את התאריך בשם הקובץ (שימוש בפקודת לינוקס date).
  5. אם תשימו את דגל -shared בסוף הפקודה (המקף מצד שמאל למילה) תגבו גם הגדרות כלליות של המכשיר (אני חושב שגם תמונות). אני מגבה אותן ידנית, פשוט מעתיק למחשב.
  6. כדי לגבות ולשחזר שיחות ו-SMS אני משתמש בתוכנה SMS & Call backup
  7. אנשי קשר ופגישות נשמרים בשרתים של גוגל. אני אישיתי משתמש ב-OwnCloud ומשתדל לא לשים אנשי קשר שם (וזה ממש קשה, גוגל די דוחפת שאני אעשה את זה, גם אם זה בטעות).
  8. בדביאן ניתן להתקין את החבילה android-tools-adb במקום להוריד כמה מגה מהשרתים של גוגל של android-sdk.

גיבוי שני – דרך ה-recovery. יפורסם בעתיד.

by elcuco at March 07, 2015 09:10 PM

על בני אדם וחיות אחרות » תוכנה חופשית וקוד פתוח

raspberry pi 2 xbmc kodi

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

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

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

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

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

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

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

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

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

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

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

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

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

 

חשמל תקשורת ותפעול לרספברי פי 2

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

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

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

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

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

 היתרונות על מערכות אחרות

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

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

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

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

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

דיון נוסף בנושא, באתר התוכנה החופשית whatsup.

 

 

by האח הגדול at March 07, 2015 08:32 PM

March 01, 2015

MY RTFM

ענני


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

המערכת בנוייה בצורה הבאה :

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



שירותי ה DNS שבתוך שרת ה openvpn ניתנים ע"י bind9, שירותי הדואל מסופקים ע"י dovecot ו exim4 היומן ואנשי הקשר מסופקים ע"י ownloud.

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

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

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

פעולה זו מתבצעת ע"י fetchmail + cron , יש ליצור הגדרה עבור כל משתמש שרוצה את העבודה בצורה הבאה :

usera@sinta:~$ cat .fetchmailrc

poll pop.gmail.com with proto POP3 and options no dns port 995 user gmailuser@gmail.com there with password gmailpassword is usera here options ssl


לאחר מכאן ביצוע crontab -e מתוך המשתמש בשביל להוסיף את fetchmail -vk.

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

להפתעתי גיליתי של firefox 35 שמסופק ע"י f-droid יש בעייה בעבודה עם שירות ה dns שנדחף ע"י openvpn בגלל באג פתוח עד 35 כולל, בגירסה 36 זה קורה פחות אבל זה היה פשוט מטמטם הבטיחו לתקן ב 37 נחייה ונראה.

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

לדוגמה ייבוא יומנים מ ICS  - הדרך לייבא היא העלאה של הקובץ ולאחר מכאן (דרך ממשק משתמש) ללחוץ עליו ורק אז תשאל לאן תרצה לייבא את היומן.

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

השלב הבא בבנייה (שאותה לא עשיתי עדיין) הוא הרמה של slapd וכיוון של כלל המערכות לעבוד מולו, אני חושב שזה עדיף בשביל הזיהוי מאשר עבודה מול טבלאות בשרת דואל (כך גם אין לי vendor lock מעצבן כמו שיש ב KDE). בניית סביבת ejabbered ועוד.

by Boris Shtrasman (noreply@blogger.com) at March 01, 2015 06:35 PM

תודה לשלומי

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

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

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

 
#include <stdio.h>
#include <time .h>
#include <string.h>

#define mMO_NUM_LIMIT (150000000)

static char mo_tabOfPrimes[mMO_NUM_LIMIT];

void mark_numbers_as_primes()
{
int primeIndex;
int compositionIndex;
int maxNumberOfElemenentsInTab;
memset(mo_tabOfPrimes,0,sizeof(mo_tabOfPrimes));
maxNumberOfElemenentsInTab = sizeof(mo_tabOfPrimes)/sizeof(mo_tabOfPrimes[0]);

for (primeIndex = 2 ;primeIndex < maxNumberOfElemenentsInTab;primeIndex ++ )
{
if (0 != mo_tabOfPrimes[primeIndex])
{
continue; //any number previously markes as a composition can no be prime
}
//any next value will be a composition of that code
for (compositionIndex = primeIndex + primeIndex; compositionIndex < maxNumberOfElemenentsInTab;compositionIndex = compositionIndex + primeIndex)
{
mo_tabOfPrimes[compositionIndex] = 1;
}
}
}

int is_prime(const long indexToCheck)
{
int check ;
if (indexToCheck > mMO_NUM_LIMIT)
{
return 0;
}
return (0 == mo_tabOfPrimes[indexToCheck]);
}

void printFirstNPrimes(int countToPrint)
{
long i;
int numberOfPrimesPrintedSoFar = 0;

for (i = 0 ;
( i < mMO_NUM_LIMIT) &&( numberOfPrimesPrintedSoFar < countToPrint);
i++)
{
if (1 == is_prime(i))
{
numberOfPrimesPrintedSoFar ++;
printf("%d/%d %d is a prime number\n",numberOfPrimesPrintedSoFar,countToPrint,i);
}
}
}
int main()
{
clock_t start;
clock_t end;
double time_spent;

start = clock();
mark_numbers_as_primes();
end = clock();
time_spent = (end - start) / CLOCKS_PER_SEC;
printf("spent %lf seconds when filling %lld prime numbers\n",time_spent,mMO_NUM_LIMIT);
printFirstNPrimes(100);
return 0;
}

by Boris Shtrasman (noreply@blogger.com) at March 01, 2015 04:00 PM

צרות עם openvpn כאשר יש מכשיר אנדרויד ללא רוט

אחד המכשירים שמתחבר לענני הוא מכשיר שלא עבר rooting מה שאומר כי אני נאלץ להשתמש בלקוח openvpn ללא יכולת tap.

אז ישבתי והגדרתי במשך כ 5 דקות שלמות שרת openvpn כמו בדר"כ רק ע"י החלפה לשימוש ב tun במקום tap וההגדרה הראשונית נראתה כך :


port 1194
proto tcp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
crl-verify /etc/openvpn/easy-rsa/keys/crl.pem
dh /etc/openvpn/easy-rsa/keys/dh1024.pem

server 192.168.0.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 192.168.0.1"

client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 4
mute 20
script-security 2

צורת העבודה הזאת מאפשרת dhcp ע"ג tun ועובדת בדביאן ווינדוס, כאשר ניסיתי להשתמש בהגדרות צד לקוח קיבלתי הודעה קריפטית לגבי dresses are not in the same /30 subnet (topology net30 מה שלכעצמו מוזר כי הכתובת שצריכה אמורה לעבור דרך dhcp. כמה שחיפשתי לא הצלחתי למצוא פתרון פרט ללספק כתובת (מאותו המרחב באמצעות שימוש בcient-config-dir ושם הגדרה של כתובת קבועה עבורו).

port 1194
proto tcp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
crl-verify /etc/openvpn/easy-rsa/keys/crl.pem
dh /etc/openvpn/easy-rsa/keys/dh1024.pem

server 192.168.0.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 192.168.0.1"

client-config-dir ccd
route 192.168.0.0 255.255.255.252


client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 4
mute 20
script-security 2

לאחר מכאן יש ליצור תיקיית ccd ובתוכה שם כמו שהשתמשת בעת ייצרת certificate עבור הלקוח.

by Boris Shtrasman (noreply@blogger.com) at March 01, 2015 12:58 PM

February 28, 2015

Tech Tip: How to Configure Qt 5 Behaviour When Running on KDE4

Recently, I noticed that when running the VLC-2.2.0 prerelease, which is based on Qt 5 for its GUI, on my Mageia Linux 5 system on top of KDE 4, then in the playlist a single-click immediately played a file instead of selecting it, while reserving a double click for activation. After a long amount of research and thought, I figured out a way to configure Qt 5 on top of KDE.

To do so:

  1. Install lxqt-config and the “lxqt-qtplugin”.

  2. Add the line “export QT_QPA_PLATFORMTHEME=lxqt” somewhere before the desktop startup in your “.Xclients” or “.xinitrc” file (or in your “.bashrc”).

  3. Restart the X/KDE environment.

  4. Run “lxqt-config” to configure the appropriate behaviour.

This way one can use the Qt5 customisations of lxqt in KDE 4. Enjoy!

Licence

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

by Shlomi Fish ( shlomif@iglu.org.il ) at February 28, 2015 12:12 PM

February 26, 2015

“Out of the Strong, Something Sweet” - How a Bug Led to a Useful Optimisation

The book Fortune or Failure: Missed Opportunities and Chance Discoveries (which my family used to own, but which I did not read) gives the case to the important role of luck and chance in scientific discoveries. Recently, when working on Project Euler Problem No. 146 I came up with a case of an accidental bug, that in turn led to an idea for a significant optimisation.

The C code with the bug (which was in turn translated from some Perl code) looked something like that:

#define DIV 9699690
#define NUM_MODS 24024
#define NUM_PRIMES 8497392

int primes[NUM_PRIMES];
int mods[NUM_MODS];

typedef long long LL;

static inline bool is_prime(LL n)
{
    LL lim = (LL)(sqrt(n));

    for (int p_idx=0; p_idx < NUM_MODS ; p_idx++)
    {
        typeof (primes[p_idx]) p = primes[p_idx];
        if (p > lim)
        {
            return true;
        }
        if (n % p == 0)
        {
            return false;
        }
    }
    return true;
}

.
.
.
            for (int y_idx=0;y_idx<sizeof(y_off)/sizeof(y_off[0]);y_idx++)
            {
                if (! is_prime(sq + y_off[y_idx]))
                {
                    goto fail;
                }
            }
            for (int n_idx=0;n_idx<sizeof(n_off)/sizeof(n_off[0]);n_idx++)
            {
                if (is_prime(sq + n_off[n_idx]))
                {
                    goto fail;
                }
            }

As you can notice eventually, the problem was that in the p_idx loop, NUM_MODS should have been the larger NUM_PRIMES. This caused the test for primality to finish faster, but to sometimes return true instead of false. As a result, I noticed that some numbers were erroneously reported as suitable, but the program finished much faster.

I corrected it and reran the program which was now much slower, but this led me to think that maybe the lower limit to the count of primes can be a pre-filter for primality for the “y_idx”/“y_off” numbers, that will run quicker and eliminate some numbers. As a result, I did this:

#define NUM_PRIMES__PRE_FILTER 24024

static inline bool is_prime__pre_filter(LL n)
{
    LL lim = (LL)(sqrt(n));

    for (int p_idx=0; p_idx < NUM_PRIMES__PRE_FILTER ; p_idx++)
    {
        typeof (primes[p_idx]) p = primes[p_idx];
        if (p > lim)
        {
            return true;
        }
        if (n % p == 0)
        {
            return false;
        }
    }
    return true;
}

.
.
.
            for (int y_idx=0;y_idx<sizeof(y_off)/sizeof(y_off[0]);y_idx++)
            {
                if (! is_prime__pre_filter(sq + y_off[y_idx]))
                {
                    goto fail;
                }
            }
            for (int y_idx=0;y_idx<sizeof(y_off)/sizeof(y_off[0]);y_idx++)
            {
                if (! is_prime(sq + y_off[y_idx]))
                {
                    goto fail;
                }
            }
            for (int n_idx=0;n_idx<sizeof(n_off)/sizeof(n_off[0]);n_idx++)
            {
                if (is_prime(sq + n_off[n_idx]))
                {
                    goto fail;
                }
            }

This made the program finish in under a minute, while yielding the correct solution. The original program, with the bug fix, was still running after several minutes.

So the bug proved to be useful and insightful. One possible future direction is to merge the two “y_idx” loops into a single function that will accept an array of numbers, and will check them all for primality using the same divisors simultaneously, so as soon as one of them is found to be non-prime, a verdict will be reached.

Licence

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

by Shlomi Fish ( shlomif@iglu.org.il ) at February 26, 2015 06:23 PM

February 22, 2015

Optimisation Tip: Avoid Excessive Forks+EXECVEs to Processes

This will come as a surprise to few, but performing a separate fork() and EXECVE system calls (e.g: for `factor "$n"` in Perl or popen in C), on each iteration of a loop can really kill performance. One option to reduce that would be to read individual lines from a seq 2 999999 | xargs factor loop, or avoid forking altogether.

I discovered this issue while working on Project Euler problem #141, and I should have realised that the sub-100% CPU utilisation of the program was caused by the excessive spawning of new processes.

Licence

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

by Shlomi Fish ( shlomif@iglu.org.il ) at February 22, 2015 01:33 PM

February 19, 2015

עברית בלינוקס

הרצאה על D שלא הייתה

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

https://skillsmatter.com/skillscasts/6088-the-worst-programming-language-ever#video

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

תודה לכל האנשים שבאו למרות הסופ"ש קרוב, ולמרות הסופה!

נ.ב.

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

http://libcello.org/home

by elcuco at February 19, 2015 09:23 PM

February 13, 2015

Guy Rutenberg

Creating Menu Entries for Calibre

I recently installed Calibre using their binary installer for linux, and found out that it doesn’t come with .desktop files, so Calibre doesn’t appear in the GNOME menu. To remedy this I installed the following desktop files in ~/.local/share/applications/ (modified from the Debian Sid package):

[Desktop Entry]
Type=Application
Name=E-Book Viewer
Comment=E-Book Viewer
TryExec=/home/user/.local/calibre/ebook-viewer
Exec=/home/user/.local/calibre/ebook-viewer %F
Icon=/home/user/.local/calibre/resources/images/viewer.png
MimeType=application/x-mobipocket-ebook;application/epub+zip;
Categories=Office;Graphics;Viewer;

and

[Desktop Entry]
Type=Application
Name=Calibre
GenericName=E-book library management
GenericName[de]=E-Book Bibliotheksverwaltung
Comment=E-book library management
Comment[es]=aplicación para la gestión de libros electrónicos
Comment[de]=E-Book Bibliotheksverwaltung
TryExec=/home/user/.local/calibre/calibre
Exec=/home/user/.local/calibre/calibre %f
Icon=/home/user/.local/calibre/resources/images/lt.png
Categories=Office;Database;FileTools;Viewer;Qt;
MimeType=x-content/ebook-reader;

You may need to adjust the paths for TryExec, Exec and Icon to match where you installed Calibre.

by Guy at February 13, 2015 02:41 PM

האתר של שביט אילן

טיפ שימושי: Reptyr

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

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

בדוגמא שאציג קיים סקריפט בשם test.sh שרץ במסוף:

$ ./test.sh

ניתן לשים לב שאין לנו prompt. אז איך בדיוק נעביר את הריצה שלו תחת screen?

  1. נעצור (stop) לרגע את ריצת התכנית:
    CTRL-Z
    [1]+ Stopped ./test.sh
  2. ומיד נחדש את הריצה – אבל הפעם ברקע:
    $ jobs -l
    [1]+ 7483 Stopped ./test.sh
    $ bg %1
    [1]+ ./test.sh &amp;
    ‎$
  3. הפעם כמובן שקיבלנו prompt. נסיר את השיוך של test.sh מהטרנמינל הנוכחי:
    $ disown %1
  4. נריץ את screen, נברר מה מספר התהליך של הסקריפט שלנו ונעביר אותו לריצה תחת screen באמצעות Reptyr
    $ screen
    $ pgrep test
    7101
    $ reptyr 7101

זהו! ממש לא מסובך :)

My Signature

by שביט אילן at February 13, 2015 12:00 PM

February 10, 2015

Gabor Szabo Perl trainer and developer

February 08, 2015

Liran Tal's Enginx

Most decisions in life are reversible

You might be the conservative character, the shy person, or possibly the one taking less risks when it comes to making decisions all around. If that’s the case, I want to let you in on a small tip: most decisions in life are reversible. They truly are.

Decisions shape our lives, and they drive us to action, which further shapes our reality and day to day interaction with the world. Whether you’re making decisions concerning your personal life, or decisions at work which may affect your career, and your colleagues, you must really take in this notion that most decisions you will make in life aren’t catastrophic, aren’t one-way and that’s it. It’s not about being courageous, but embracing the fact that you can change things, even while they’re happening, and there’s always another way.

58006888

We faced a crucial decision in my team – our technology stack was way too distributed for the size of our R&D team, and encompassed frontend HTML, JavaScript, and CSS along with backend components of PHP/Drupal, Python, Pylon, and Java/Spring. We needed to make a decision to unify our technology stack, and were curious about NodeJS eco-system, and the MEAN stack in general. It was easy to stay at the comfort zone of either of PHP, Python or Java and consolidate to one of them, but if NodeJS would fit us, we were not afraid to venture into new realms, even if it meant that we needed to bridge that knowledge in the team, and quickly ramp-up developers and QA with the capabilities to start working in this technology eco-system. We indeed ended up creating a new backend component with the MEAN.JS framework, which has serves us well so far.

The post Most decisions in life are reversible appeared first on Liran Tal's Enginx.

by lirantal at February 08, 2015 05:19 PM

February 06, 2015

code.openark.org » MySQL

MySQL Community Awards 2015: Call for Nominations!

The 2015 MySQL Community Awards event will take place, as usual, in Santa Clara, during the Percona Live MySQL Conference & Expo, April 2015.

The MySQL Community Awards is a community based initiative. The idea is to publicly recognize contributors to the MySQL ecosystem. The entire process of discussing, voting and awarding is controlled by an independent group of community members, typically based of past winners or their representatives, as well as known contributors.

It is a self-appointed, self-declared, self-making-up-the-rules-as-it-goes committee. It is also very aware of the importance of the community; a no-nonsense, non-political, adhering to tradition, self criticizing committee.

The Call for Nominations is open. We are seeking the community’s assistance in nominating candidates in the following categories:

MySQL Community Awards: Community Contributor of the year 2015

This is a personal award; a winner would a person who has made contribution to the MySQL ecosystem. This could be via development, advocating, blogging, speaking, supporting, etc. All things go.

MySQL Community Awards: Application of the year 2015

An application, project, product etc. which supports the MySQL ecosystem by either contributing code, complementing its behaviour, supporting its use, etc. This could range from a one man open source project to a large scale social service.

MySQL Community Awards: Corporate Contributor of the year 2015

A company who made contribution to the MySQL ecosystem. This might be a corporate which released major open source code; one that advocates for MySQL; one that help out community members by... anything.

For a list of previous winners, please see MySQL Hall of Fame.

Process of nomination and voting

Anyone can nominate anyone. When nominating, please make sure to provide a brief explanation on why the candidate is eligible to get the award. Make a good case!

The committee will review all nominations and vote; it typically takes two rounds of votes to pick the winners, and a lot of discussion.

There will be up to three winners in each category.

Methods of nomination:

  • Send en email to mysql.community.awards@gmail.com
  • Comment to this post
  • Assuming you can provide a reasonable description in 140 characters, tweet your nomination at #MySQLAwards.

Please submit your nominations no later than Saturday, February 28, 2015.

The committee

Members of the committee are: Baron Schwartz, Colin Charles, Domas Mituzas, Fredric Descamps, Geoffrey Anderson, Giuseppe Maxia, Marc Delisle, Mark Leith, Philip Stoev, Ronald Bradford, Santiago Lertora. A couple additional members pending.

Jeremy Cole and myself (Shlomi Noach) are acting as co-secretaries; we will be non-voting (except for breaking ties).

The committee communicates throughout the nomination and voting process to exchange views and opinions.

The awards

Awards are traditionally (as in this year) donated by some party whose identity remains secret. Thank you, kind sponsor!

Support

This is a community effort; we ask for your support in spreading the word and of course in nominating candidates. Thanks!

by shlomi at February 06, 2015 07:37 PM

לינוקס ותוכנה חופשית

הקרוסייד של דוקטור אבשלום קור

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

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

by שחר שמש at February 06, 2015 04:39 PM

February 05, 2015

Tech Tip: Make Jamendo Playback Work in Firefox on Mageia Linux

If you’re having a problem playing Jamendo tracks after pressing the “Listen” button (such as on this page) on Firefox running on Linux, then try to install the packages «gstreamer0.10-plugins-bad gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-mpeg gstreamer0.10-ffmpeg» (relevant to Mageia; try their equivalent in other distributions), restart Firefox and try again. The problem is that Firefox needs extra gstreamer plugins to play proprietary formats in HTML audio and video elements. Cheers!

(Thanks to “dolske” from #firefox on irc.mozilla.org for their help.)

Licence

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

by Shlomi Fish ( shlomif@iglu.org.il ) at February 05, 2015 08:34 AM

February 01, 2015

Gabor Szabo Perl trainer and developer

code.openark.org » MySQL

Speaking at FOSDEM: Pseudo GTID and easy replication management

This coming Sunday I'll be presenting Pseudo GTID and easy replication management at FOSDEM, Brussels.

There's been a lot of development on Pseudo GTID these last few weeks. In this talk I'll show you how you can use Pseudo GTID instead of "normal" GTID to easily repoint your slaves, recover from intermediate master failure, promote slaves to masters as well as emply crash safe replication without crash safe replication.

Moreover, I will show how you can achieve all the above with less constraints than GTID, and for bulk operations -- with less overhead and in shorter time. You will also see that Pseudo GTID is a non intrusive solution which does not require you to change anything in your topologies.

Moral: I'll try and convince you to drop your plans for using GTID in favor of Pseudo GTID.

We will be employing Pseudo GTID as the basis for high availability and failover at Booking.com on many topologies, and as a safety mechanism in other topologies where we will employ Binlog servers.

by shlomi at February 01, 2015 10:57 AM

January 31, 2015

Guy Rutenberg

RTL Tiddlers in TiddlyWiki 5

Few years ago I wrote about how to create RTL (right-to-left) tiddlers in TiddlyWiki. Creating RTL tiddlers is almost a necessity if you want to create tiddlers in a right-to-left language such as Hebrew or Arabic. TiddlyWiki5, the new version of TiddlyWiki, broke the old solution, but a similar one is can be made. In order to be able to add RTL tiddlers to your TiddlyWiki follow these steps:

  1. Create a new tiddler. The title doesn’t matter, but something like “RTLStylesheet” would be indicative.
  2. Paste the following CSS code as the content of the tiddler:
    .tc-tagged-RTL .tc-tiddler-title,
    .tc-tagged-RTL .tc-tags-wrapper,
    .tc-tagged-RTL .tc-tiddler-body {
        direction: rtl;
    }
    
    .tc-tiddler-frame.tc-tagged-RTL .tc-tiddler-controls {
        float: left;
    }
    
  3. Set the tiddler’s type to “Static stylesheet (text/css)”.
  4. Tag the tiddler with $:/tags/Stylesheet. Don’t forget to press “Add” or otherwise it won’t be saved.
  5. Save the tiddler (it should look like the image below before saving).
    rtlstylesheet_tiddler
    Now to create a new RTL tidller, simply create a tiddler and tag is with “RTL”.
    rtl_tiddler

Editing RTL tiddlers

Unfortunately, I haven’t found a way to automatically set the directions of the text inputs and textareas when editing an RTL tiddler. But this can be done manually pretty easily. In FireFox under Linux simply press Ctrl-Shift-X to change direction, on Windows it should be Ctrl-Shift (right or left shift depending on the direction). The same functionality is accessible in chrome via the context menu (right click).

Reference

This solution is an adaptation of Jermey Ruston answer in response to an inquiry regarding my old solution in the TiddlyWiki Google Group.

by Guy at January 31, 2015 01:08 PM

January 30, 2015

האתר של שביט אילן

סקירה: אופן סוזה 13.2 (חלק שני)

יציבות ומהירות עבודה:
מייד לאחר ההתקנה חוויתי תקיעות שונות ומשונות והרגשתי שהמחשב הנייד מתקשה "לסחוב" את ההפצה. הנושא הזה נפתר בשלב כלשהו (אני מעריך שאחד העדכונים טיפל בבעיה). בסופו של יום נשארתי עם סביבה יציבה שמגיבה במהירות ובקלילות לבקשות שלי. גם מנהלי החבילות עובדים במהירות כשאני מרענן את רשימת המקורות או מבקש להתקין תוכנה מסויימת. גם Yast עבר מתיחת פנים בנוגע למהירות והוא עכשיו עובד בצורה די מהירה. זמן עליית המערכת: 20 שניות מטעינת הביוס עד לטעינת שולחן העבודה (Gnome Shell).
ציון: 10/10

תמיכה בעברית:
כאן נראה שאופן-סוזה לא עשו שום דבר בנושא. התמיכה שקיימת ב- Gnome Shell בעברית היא זאת שקיימת בהפצה. הגופנים בהם בחרו (גם בשולחן העבודה וגם בגלישה ברשת) ממש מכוערים. אין להאשים בנושא זה את אופן-סוזה. הקהילה בארץ הייתה צריכה לתמוך יותר בנושא (כפי שנעשה בדביאן / אובונטו). אבל למרות זאת לנו, כדוברי השפה, הנושא חשוב ולכן לא ניתן להתעלם ממנו. הציון שהענקתי הוא גבוה (יחסית) בשל העובדה שחוץ ממראה הגופנים לא נתקלתי בשום בעיה שנוגעת לעברית.
ציון: 8/10

מראה כללי:
ההפצה לא נראית טוב. יש חוסר עקביות בשימוש בערכת הנושא + שימוש בגופנים לא יפים (לטעמי)
ציון: 6/10

מנהלי החבילות:
ההפצה מציעה מספר מנהלי חבילות (שאפילו אותי בלבלו):

  • software – כלי שכנראה הורש מ- Gnome3 (מכיל אוסף דל של תוכנות)
  • Yast Software Managment כלי שפותח ע"י אופן סוזה.
  • zypper – כלי טקסטואלי להתקנת תוכנות
  • One Click Install – כלי רשתי שמאפשר להתקין תוכנות באמצעות הדפדפן

הבעיה שגיליתי היא שאין חפיפה בחבילות התוכנה הנתמכות בכל אחד מהכלים הללו. חיפוש בכלי אחד לא בהכרח מביא לתוצאה הרצויה בעוד שבכלי אחר הוא כן מביא לתוצאה… בנוסף גם אין סינגריה בין התוכנות: התקנתי תוכנה מסויימת באמצעות Software ובמקביל ניסיתי להתקין תוכנה אחרת באמצעות Yast Software Managment. קיבלתי (כצפוי) הודעת שגיאה:
pk-error1
הייתי מנומס וביקשתי לעצור את Package Kit אך הפעולה נכשלה וקיבלתי שוב ושוב את ההודעה הבאה:
pk-error1
מבחינת תמיכה בתוכנות כאמור אין חפיפה בין מנהלי החבילות השונים. כשלא מצאתי במאגרים תוכנה מסויימת השתמשתי בשירות One Clink Install. כלי רשתי זה מוסיף מאגר (מעין PPA) להפצה. הוא מפעיל אח"כ את Yast2 ומתקין את התוכנה. לא כל תוכנה מצאתי באופן סוזה (לדעתי בדביאן וארץ תמיכה נרחבת יותר בחבילות תוכנה). ניסיון ההתקנה של החבילה mnemosyne היה הזוי. החבילה לא נמצאה באף אחד מהמאגרים ונעזרתי ב- One Click Install כדי להתקין אותה. הכלי אכן מצא חבילה המותאמת לאופן סוזה 13.2 אך הציע להוריד חבילות בהיקף של 1.2 גיגה בייט! ויתרתי כמובן על ההתקנה… (מי יודע אם המחשב בכלל היה עובד אחרי עדכון מסיבי זה)
בנוסף לכל הבעיות הללו קיימת בעיה בהתקנת החבילה Dropbox. ל- Dropbox יש תלות מוזרה ב- Gnu Cash. אני מעולם לא השתמשתי ב- Gnu Cash ולא ברור לי למה החבילה הנ"ל מותקנת בברירת המחדל. הסרתי אותה די בהתחלה, אך כשהתקנתי את Dropbox הוא חייב אותי להתקין אותה חזרה!
gnu-cash
רק בגלל שהעדכונים מתבצעים במהירות רבה (עדכוני דלתאות) ההפצה קיבלת את הציון הזה ולא ציון נמוך יותר
ציון: 7/10

כלים יחודים שההפצה מציעה:
ההפצה מציעה מס' כלים יחודיים:

  • Snapper – עובד נהדר. אולי אכתוב עליו מאמר בעתיד
  • תמיכה טובה ב- BTRFS (שמותקנת בברירת המחדל ומשתלבת יפה עם Snapper)
  • snapper

  • Yast2 – אוסף מעולה של כלים גרפיים לטיפול בנושאי ניהול שונים בהפצה
  • Boxes – עם תמיכה מובנית ב- KVM ו- Xen
  • xen_kvm

ציון: 10/10

באגים:
התייחסתי לנושא בסעיפים שונים. מצאתי באג נוסף עליו לא כתבתי והוא חוסר היכולת להעתיק קבצים לשרת ה- NAS (יש שם הרשאות):
samba error
לדעתי אופן סוזה יכלו לעשות הרבה יותר בנושא זה.
ציון: 5/10

התרשמות כללית:
הציון שאני נותן בנושא זה מתייחס לתחושת הבטן שיש לי בנוגע להפצה. הציון משקף את מה שאני חושב עליה כמערכת שלמה לאחר שימוש של שבועיים. הציון 7 ("כמעט טוב") משקף את דעתי נאמנה. יש המון פספוסים בנושאים שונים ולכן ההפצה לא קיבלה ציון גבוה יותר (שאולי היה מגיע לה בגלל התמיכה המצויינת בנושאים אחרים שאף הפצה לא תומכת "מהקופסא", דוגמת BTRFS ו- Snapper).
ציון: 7/10

ציון כללי משוקלל: 73%

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

My Signature

by שביט אילן at January 30, 2015 11:00 AM

January 26, 2015

code.openark.org » MySQL

Reading RBR binary logs with pt-query-digest

For purposes of auditing anything that goes on our servers we're looking to parse the binary logs of all servers (masters), as with "Anemomaster". With Row Based Replication this is problematic since pt-query-digest does not support parsing RBR binary logs (true for 2.2.12, latest at this time).

I've written a simple script that translates RBR logs to SBR-like logs, with a little bit of cheating. My interest is that pt-query-digest is able to capture and count the queries, nothing else. By doing some minimal text manipulation on the binary log I'm able to now feed it to pt-query-digest which seems to be happy.

The script of course does not parse the binary log directly; furthermore, it requires the binary log to be extracted via:

mysqlbinlog --verbose --base64-output=DECODE-ROWS your-mysql-binlog-filemame.000001

The above adds the interpretation of the RBR entires in the form of (unconventional) statements, commented, and strips out the cryptic RBR text. All that is left is to do a little manipulation on entry headers and uncomment the interpreted queries.

The script can be found in my gist repositories. Current version is as follows:

#!/usr/bin/python
#
# Convert a Row-Based-Replication binary log to Statement-Based-Replication format, cheating a little.
# This script exists since Percona Toolkit's pt-query-digest cannot digest RBR format. The script
# generates enough for it to work with.
# Expecting standard input
# Expected input is the output of "mysqlbinlog --verbose --base64-output=DECODE-ROWS <binlog_file_name>"
# For example:
# $ mysqlbinlog --verbose --base64-output=DECODE-ROWS mysql-bin.000006 | python binlog-rbr-to-sbr.py | pt-query-digest --type=binlog --order-by Query_time:cnt --group-by fingerprint
#

import fileinput

def convert_rbr_to_pseudo_sbr():
    inside_rbr_statement = False
    for line in fileinput.input():
        line = line.strip()
        if line.startswith("#") and "end_log_pos" in line:
            for rbr_token in ["Update_rows:", "Write_rows:", "Delete_rows:", "Rows_query:", "Table_map:",]:
                if rbr_token in line:
                    line = "%s%s" % (line.split(rbr_token)[0], "Query\tthread_id=1\texec_time=0\terror_code=0")
        if line.startswith("### "):
            inside_rbr_statement = True
            # The "### " commented rows are the pseudo-statement interpreted by mysqlbinlog's "--verbose",
            # and which we will feed into pt-query-digest
            line = line.split(" ", 1)[1].strip()
        else:
            if inside_rbr_statement:
                print("/*!*/;")
            inside_rbr_statement = False
        print(line) 

convert_rbr_to_pseudo_sbr()

 

 

 

 

 

by shlomi at January 26, 2015 03:50 PM

Rabin.IO » FOSS

Speed up a MySQL restore from a dump file

This is a small snippet I found to speed up importing MySQL dumps, it’s is almost as fast as coping the DB files directly.

Pre INSERT

Put the commands at the top of the dump file, e.g pre.sql,

SET @OLD_AUTOCOMMIT=@@AUTOCOMMIT, AUTOCOMMIT = 0;
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS = 0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0;

 Post INSERT

Put these statements at the end of the dump file, e.g post.sql,

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
SET AUTOCOMMIT = @OLD_AUTOCOMMIT;

Example

cat <(cat pre.sql) <(bzcat mydb_backup.sql.bz2) <(cat post.sql) | mysql

 

by Rabin at January 26, 2015 02:55 PM

January 24, 2015

Gabor Szabo Perl trainer and developer

עברית בלינוקס

שידרוג אל Lollipop – מפתיע לטובה – חלק תשיעי בסדרה

(בניגוד לפוסטים קודמים בסדרה, כעת אני מדבר על נקסוס 4 ולא Galaxy S1, תתגרלו לזה…)

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

ראיתי שיש nightly builds של CyanogenMod אבל בפורומים מתלוננים על בעיות ילדות. החלטתי להיות אמיץ ולהתקין את הרום המקורי של אימאבא-שמוגל-גוגל. עשיתי את הניסוי הזה כאשר 5.0.0 יצא, ולא הייתי מרוצה. כיום אני מריץ את 5.0.1 ומרוצה בצורה מוזרה. מאוד.

  1. המכשיר מחזיק בהמתנה יומיים. כן, משהו כמו 40 שעות (סוללה חדשה… עלתה 150 ש"ח…). יותר טוב מהיום בו קניתי את המכשיר (עוד מידע כאן).
  2. העיצוב מחריד. שטוח מדי. יותר מדי צבעוני. נראה כאילו ילד זרק צבעים על קיר בצורה אקראית. אני ממש מתחבר אל holo יותר מה-Matrtial design. המסך הוא דו מימדי … אז לנסות להוציא ממנו תלת מימד… לא נראה לי. אהבתי את זה ש-Holo הבין שהוא במדיה דו מימדית ולא התפשר.
  3. ברום החדש אין גלריית תמונות עצמאית. יש אחת שקשורה אל גוגל פלוס, אז צריך להתקין אחת צד שלישי. אני התקנתי את זאת  Gallery KK – Gallery ICS, ושילמתי למפתח 5 ש"ח כדי שלא יהיו לי פרסומות. אם תימצא תוכנה חופשית – אני אחליף את התוכנה שוב.
  4. השעון המעורר נשמע חלש מדי, שימו לב לזה.
  5. המעבר אל Art מורגש. כמו כן, הקטינו את הזמן של הרבה אנימציות (פסיכולוגיה עוזרת במדעי המחשב…). המכשיר מרגיש ממש מהיר עכשיו.
  6. המעבר אל Art מצוין למפתחים!!!!!11 בגרסאות קודמות של אנדרויד לדבג תוכנה step by step היה כואב. מעבר בין שורות ב-Android Studio היה לוקח שלוש שניות. כיום ב-Lollipop מה שמאט זה ה-UI של ה-IDE. טוב שיש לי מחשב חזק… עכשיו אפשר לכתוב תוכנות דפוקות ל-Desktop… (אני קורא לזה התקדמות אחורה).
  7. בהגדרות של הסוללה נוסף גרף שיודע להציג מתי הסוללה תיגמר ומתי ההטענה שלה תסתיים. ראיתי את זה בתוכנות צד שלישי. זה פיצ'ר שקשה לתאר כמה הוא חשוב.
  8. יש המון תוכנות bundeled של גוגל. החלטתי להפסיק איתן (אי אפשר להסיר כי הן ב-System partition). דוגמאות: Google Plus, News Stand, Games, Music, Keep. אני מזכיר שאין תוכנת גלריה, והתקנתי אחת צד שלישי. אני אשמח להצעות נוספות בקשר לגלריה.

מה חסר לי:

  1. privacy manager. למעשה Firewall אל אנשי קשר, הודעות ומיקום.
  2. root – אני בטוח שאפשר לקבל פה root בכוח, אבל זה לא מרגיש לי נכון. אני אשבר ואעשה את זה בקרוב בכל זאת.
  3. Bootloader שיודע לעשות גיבויים. אני צריך לכתוב פוסט פה על גיבויים וזה יהיה ברור למי שלא מבין על מה אני מדבר.
  4. ברום הרגיל של אנדרויד אין תמיכה ב-adb דרך הרשת. לפחות לא ללא root.

by elcuco at January 24, 2015 09:00 PM

January 18, 2015

Gabor Szabo Perl trainer and developer

January 17, 2015

Gabor Szabo Perl trainer and developer

January 16, 2015

Oz's Blog

Poor man's Read-The-Docs

Here is how to build sphinx documentation on multiple branches in your Python project. If you want to have Sphinx documentation for your project without having to install the whole complicated readthedocs.org image. ... continue reading...

January 16, 2015 07:31 PM

האתר של שביט אילן

סקירה: אופן סוזה 13.2 (חלק ראשון)

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

החומרה בה אשתמש:

  • מחשב נייד HP ProBook 6450b
  • מעבד: אינטל Core i3, ‏4 ליבות, 2.53GHZ
  • זכרון: 4GB 1333MHZ
  • דיסק קשיח: Kingstone SVP200S – SSD 60GB
  • כרטיס מסך: אינטל (מובנה במעבד)
  • כרטיס רשת אלחוטי (מובנה): Broadcom Corporation BCM4313

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

  • הליך ההתקנה (10%)
  • תמיכה בחומרה (10%)
  • חווית שימוש ראשונית (10%)
  • באגים (10%)
  • מראה כללי (10%)
  • יציבות ומהירות עבודה (10%)
  • מנהל החבילות (10%)
  • תמיכה בעברית (10%)
  • כלים יחודיים שההפצה מציעה (10%)
  • התרשמות כללית (לאחר שימוש של שבועיים) (10%)

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

אופן סוסה 13.2
התקנה:
אופן סוזה משחררת DVD הכולל מס' שולחנות עבודה (Gnome, KDE, XFCE). לא אוכל לסקר את כולם ואסתפק בסקירה של שולחן העבודה Gnome (שהוא אחד משני שולחנות העבודה הראשיים שהם מציעים). מאחר שהדיסק במחשב הנייד שלי הוא לא גדול (SSD 60GB) בחרתי לבצע התקנה מלאה על כל שטח הדיסק. את ההתקנה ביצעתי באמצעות התקן נייד. התקנת אופן-סוזה די פשוטה. כשהגעתי לשלב של בחירת הדיסק בו תותקן ההפצה, בחרתי בכל שטח הדיסק. איפשרתי להפצה לבחור כיצד לחלק את הדיסק לנקודות העיגון השונות. בסיום שלב ההתקנה ביצעתי אתחול למחשב וניגשתי למשימה של עדכון החבילות. כאן קיבלתי הודעת שגיאה: המערכת לא מצליחה לקרוא את ה- Repository מההתקן הנייד. לא ברור לי למה ההתקן לא הוסר מה- Repository… בכל הפצה אחרת (שאני מכיר) מסמנים (לאחר שלב ההתקנה) מקור זה בהערה (כי כל העדכונים אמורים להיות מהרשת). גם בחירת התוכנה איתה אני אמור לבצע את העדכון לא הייתה לי ברורה: יש שתי חבילות תוכנה שאמורות לבצע (כביכול) את אותה המשימה: Online Update (שלא הציעה לי שום עדכון) ו- Package Updater (שהציעה לעדכן 72 חבילות).
package updated
ציון: 8/10

תמיכה בחומרה:
שני נושאים נכשלו בהליך ההתקנה: כרטיס הרשת האלחוטי לא נתמך (הודעה על קושחה חסרה) ותמיכה לא מספיק טובה בכרטיס המסך (האפקטים/אנימציות שאמורים היו להופיע בשולחן העבודה – במיוחד בלחיצה על "כל האפליקציות" ב- dash לא פעלו).
בנוגע לקושחה: פקודה lspci מספקת את הנתון הבא לגבי הכרטיס האלחוטי:

Broadcom Corporation BCM4313 802.11bgn Wireless Network Adapter

לא ברור לי למה הקושחה חסרה… במדריך של אופן סוזה נאמר במפורש:

The Linux kernel comes WITH the brcm80211 driver BY DEFAULT. This driver supports bcm4313

אתחולים שונים לא עזרו ופניתי להמלצה השניה שלהם (אם עדיין יהיו בעיות) והיא להתקין את החבילה broadcom-wl. את ההתקנה ביצעתי באמצעות חיבור קווי. הבעיה שהתקנה פשוטה זאת חייבה אותי להוריד 3 חבילות במשקל של כ- 216MB. התקנת החבילות וביצוע אתחול למחשב החזירו לחיים את כרטיס הרשת האלחוטי.
Wifi-Support

בנוגע לאנימציות בשולחן העבודה: גם נושא זה הסתדר (בסופו של דבר). נראה לי (אני לא בטוח בכך) שההתקנה של החבילה kernel-desktop פתרה את הבעיה. שני נושאים אלו הם נושאים מהותיים שמשתמש רגיל היה מתקשה לפתור בכוחות עצמו ולכן גרמו להורדה משמעותית בציון שנתתי להפצה בנושא זה. הציפסט של Droadcom, הגם שהוא קנייני, קיים בהתקני חומרה רבים (בעיקר במחשבים ניידים). הפצות שונות למדו אותו ואין לי בעייה בזיהוי הציפסט ב- Ubuntu, Linux Mint, Parted Magic ועוד… גם אופן-סוזה מודעים לכרטיס אלחוטי זה ומציינים שהוא אמור לעבוד מהקופסא ולא כן!
ציון: 7/10

חווית שימוש ראשונית:
חווית השימוש הראשונית שלי מההפצה היא לא טובה. המראה הראשוני לא מספיק טוב (לטעמי): ההפצה עושה שימוש בהתקנת ברירת המחדל של Gnome Shell כלומר חוויה מאוד מינימליסטית: לחיצה על מקש עכבר ימני ב- Files לא מציעה ליצור מסמך מ- Template. הפונטים שההפצה בחרה מאוד ירודים/חיוורים ופשוט נראים לא טוב על המסך. צפו בתמונות הבאות ותבינו למה אני מתכוון:
Apperance-1

Apperance-2

ערכת הנושא שבחרה ההפצה שייכת לברירת המחדל של Gnome Shell, אבל גם כאן אין אחידות: צפייה בתמונה מעלה את מציג התמונות שלו ערכת נושא כהה שממש לא משתלבת במראה הכללי של ההפצה:
Apperance-3
גלישה בדפדפן לאתרים אנגליים שונים (לעברית אתייחס בהמשך) מציגה את האתרים בצורה מאוד לא יפה (ממש על סף חוסר הקריאות). אני חושב שנושא המראה הוא מאוד חשוב לחוויה הכללית שמשרה מערכת ההפעלה על המשתמש. בנושא זה לא נראה לי שאופן סוזה התאמצו במיוחד ולכן הענקתי להם ציוד ירוד. יתכן שחלק מהבעיות שהעליתי נובעות מתמיכה לקויה בכרטיס המסך, אך אני מצפה מהפצה בוגרת שתדע להתייחס לשבבי אינטל (במיוחד לשבב כ"כ ותיק ונפוץ) כפי שהם מתייחסים לשבבים של Nvidia ו- ATI. בכל מקרה משתמש רגיל יתקשה לשפר מראה זה, ועם חוויה זאת הוא יצטרך "לחיות" במשך כל תקופת השימוש שלו באופן-סוזה
ציון: 5/10

המשך: בשישי בעוד שבועיים

My Signature

by שביט אילן at January 16, 2015 11:00 AM

January 14, 2015

Gabor Szabo Perl trainer and developer

January 12, 2015

Liran Tal's Enginx

Drupal Performance Tip – be humble on hook_init()

This entry is part 5 of 5 in the series Drupal Performance Tips

In the spirit of the computer video game Doom and its skill levels, we’ll review a few ways you can improve  your Drupal speed performance     and optimize for better results and server response time. These tips that we’ll cover may be at times specific to Drupal 6 versions, although     you can always learn the best practices from these examples and apply them on your own code base.

Doom

Doom skill levels: (easiest first)

1. I’m too young to die

2. Hey, not too rough

3. Hurt me plenty

4. Ultra-violence

5. Nightmare!

  This post is rated “I’m too young too die” difficulty level.

 

Drupal is known for its plethora of hooks, and their use is abundant through-out any Drupal modules to plug into the way that Drupal works. That’s fine, though once you’ve decided you’re moving on with Drupal as your live web application/website and you’re using modules from the eco-system, that is when you need to spend some more time reviewing modules a little bit closer than just their download counts or issues on drupal.org

hook_init() runs on every page load. Imagine you’re having a few modules implementing this hook, then you already have impact on your server response time performance for every page access in Drupal. Maybe those modules have a very slight overhead there, maybe that’s part of what they do, and that’s fine, but it may at times benefit you to review and investigate if the code there, that maybe your team added too, is better being re-factored to some other place and not on every page load.

There is another perspective for it of course, maybe things do need to take place on every page load, but their implementation in the code might be faulty. Imagine you’re doing some expensive IO on every page load, like calling an API, or querying a heavy table. Maybe you can re-factor to cache this information?

drupal_perf-4

 

The post Drupal Performance Tip – be humble on hook_init() appeared first on Liran Tal's Enginx.

by lirantal at January 12, 2015 04:06 PM

January 09, 2015

Gabor Szabo Perl trainer and developer

January 07, 2015

Gabor Szabo Perl trainer and developer

January 06, 2015

Gabor Szabo Perl trainer and developer

January 05, 2015

Gabor Szabo Perl trainer and developer

January 03, 2015

לינמגזין | הבלוג של kzamir

Promises

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

January 03, 2015 10:42 AM

January 02, 2015

האתר של שביט אילן

Docker – חלק שישי (אחרון) + תכנית למאמרים עתידיים

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

כדי לראות אילו מיכלים קיימים במחסן המקומי שלך הרץ את הפקודה sudo docker images:

$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu  14.04  5506de2b643b  7 weeks ago 199.3 MB
ubuntu  latest  5506de2b643b 7 weeks ago 199.3 MB
training/webapp  latest  31fa814ba25a 6 months ago 278.8 MB
$

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

  • מהיכן המיכל הורד (Repository)
  • התג של המיכל, לדוגמא 14.04
  • ה- Image ID של המיכל

כל Repository מחזיק גרסאות שונות של מיכלים. לדוגמא: ubuntu מחזיק מיכלים עפ"י גרסת מערכת ההפעלה ubuntu. לצרכי זיהוי המיכלים סומנו בתגים המתאימים לגרסת מערכת ההפעלה: 14.04, 14.10, 13.10 ועוד…

אם נרצה להריץ גרסה מסויימת של מיכל נוכל להשתמש בתג שלו כך:

$ sudo docker run -t -i ubuntu:14.04 /bin/bash

הערה: אם לא נרשום את שם התג, נקבל את ubuntu:latest


הורדת מיכל חדש:

ניתן להוריד מיכל לשימוש מקומי:

$ sudo docker pull centos
centos:latest: The image you are pulling has been verified

5b12ef8fd570: Pull complete
34943839435d: Pull complete
511136ea3c5a: Already EXISTS
STATUS: Downloaded newer image FOR centos:latest
$

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

$ sudo docker run -t -i centos /bin/bash
[root@4458765733e2 /]#



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

$ sudo docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL IS a widely used, open-source .. 316 [OK]      
utum/mysql MySQL Server image - listens IN port 3306 81 [OK]
tutum/lamp LAMP image - Apache listens IN port 80, an40 [OK]
orchardup/mysql    36 [OK]

קיבלנו רשימה שמכילה מאות שורות של מיכלים המשוייכים ל- mysql. חלקם מכילים את הגרסאות הרישמיות של mysql וחלקם גרסאות שהכינו והעלו המשתמשים.
יש שתי גרסאות של מיכלים. מיכלים המזוהים ע"י שם יחיד (ubuntu, mysql וכדומה). אלו הגרסאות הרישמיות של חברת docker והם נתמכים ומתוחזקים על ידם, ויש את הגרסאות הקהילתיות (שהעלו המשתמשים) שמכילים שם משתמש ושם מיכל (דוגמא: tutum/lamp).
הערה: הורדת מיכל באמצעות הדגל pull (כפי שהסברתי בפתיח)



יצירת מיכל חדש:
יש שתי דרכים ליצור מיכל חדש:

  • באמצעות עדכון של מיכל שהורדנו מ- Docker hub ושליחת commit על השינויים שביצענו
  • באמצעות DockerFile שיכיל הנחיות ליצירת מיכל חדש

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

sudo docker run -t -i ubuntu  /bin/bash
root@d8a1471ad4af:/# apt-get update
Ign http://archive.ubuntu.com trusty InRelease
Ign http://archive.ubuntu.com trusty-updates InRelease
Ign http://archive.ubuntu.com trusty-security InRelease
Ign http://archive.ubuntu.com trusty-proposed InRelease
Get:1 http://archive.ubuntu.com trusty Release.gpg [933 B]
Get:2 http://archive.ubuntu.com trusty-updates Release.gpg [933 B]
Get:3 http://archive.ubuntu.com trusty-security Release.gpg [933 B]
Get:4 http://archive.ubuntu.com trusty-proposed Release.gpg [933 B]
Get:5 http://archive.ubuntu.com trusty Release [58.5 kB]
Get:6 http://archive.ubuntu.com trusty-updates Release [62.0 kB]
Get:7 http://archive.ubuntu.com trusty-security Release [62.0 kB]
Get:8 http://archive.ubuntu.com trusty-proposed Release [209 kB]
Get:9 http://archive.ubuntu.com trusty/main Sources [1335 kB]
Get:10 http://archive.ubuntu.com trusty/restricted Sources [5335 B]            
Get:11 http://archive.ubuntu.com trusty/universe Sources [7926 kB]            
Get:12 http://archive.ubuntu.com trusty/main amd64 Packages [1743 kB]          
Get:13 http://archive.ubuntu.com trusty/restricted amd64 Packages [16.0 kB]    
Get:14 http://archive.ubuntu.com trusty/universe amd64 Packages [7589 kB]      
Get:15 http://archive.ubuntu.com trusty-updates/main Sources [190 kB]          
Get:16 http://archive.ubuntu.com trusty-updates/restricted Sources [1874 B]    
Get:17 http://archive.ubuntu.com trusty-updates/universe Sources [117 kB]      
Get:18 http://archive.ubuntu.com trusty-updates/main amd64 Packages [490 kB]  
Get:19 http://archive.ubuntu.com trusty-updates/restricted amd64 Packages [14.8 kB]
Get:20 http://archive.ubuntu.com trusty-updates/universe amd64 Packages [296 kB]
Get:21 http://archive.ubuntu.com trusty-security/main Sources [69.7 kB]        
Get:22 http://archive.ubuntu.com trusty-security/restricted Sources [1874 B]  
Get:23 http://archive.ubuntu.com trusty-security/universe Sources [19.1 kB]    
Get:24 http://archive.ubuntu.com trusty-security/main amd64 Packages [228 kB]  
Get:25 http://archive.ubuntu.com trusty-security/restricted amd64 Packages [14.8 kB]
Get:26 http://archive.ubuntu.com trusty-security/universe amd64 Packages [98.1 kB]
Get:27 http://archive.ubuntu.com trusty-proposed/main amd64 Packages [194 kB]  
Get:28 http://archive.ubuntu.com trusty-proposed/restricted amd64 Packages [611 B]
Fetched 20.7 MB IN 42s (490 kB/s)                                              
Reading package lists Done

root@d8a1471ad4af:/# apt-get install ncdu
Reading package lists Done
Building dependency tree      
Reading state information Done
The following NEW packages will be installed:
  ncdu
0 upgraded, 1 newly installed, 0 TO remove AND 20 NOT upgraded.
Need TO get 41.6 kB of archives.
After this operation, 111 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/universe ncdu amd64 1.10-1 [41.6 kB]
Fetched 41.6 kB IN 0s (59.8 kB/s)
Selecting previously unselected package ncdu.
(Reading DATABASE 11527 files AND directories currently installed.)
Preparing TO unpack …/archives/ncdu_1.10-1_amd64.deb
Unpacking ncdu (1.10-1)
Setting up ncdu (1.10-1)
root@d8a1471ad4af:/#

רעננו את רשימת המקורות והתקנו את החבילה ncdu. יש לשים לב למס' ה- container id שקיבלנו: d8a1471ad4af
נשתמש בזיהוי המיכל כדי לשמור את השינויים שביצענו במיכל חדש שנגדיר:

$ sudo docker commit -m="Add ncdu package" -a="Ilan Shavit" d8a1471ad4af ilanshavit/ubuntu:v2
db8396f4ee3ed877fe28b929ddee541f947249a03697c87cbaecc1a9af0d400b
  • הדגל m- משמש להכנסת הערה
  • הדגל a- משמש להכנסת שם המחבר
  • ilanshavit זה שם המשתמש והוא משתמש במיכל ubuntu

נריץ שוב את הפקודה docker images ונראה שנוסף לנו מיכל חדש הרשום על השם שלנו (ilanshavit):

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ilanshavit/ubuntu   v2                  db8396f4ee3e        2 minutes ago       221.3 MB
training/sinatra    v2                  2b6bc45c7048        16 minutes ago      451.6 MB
centos              latest              34943839435d        9 days ago          224 MB
ubuntu              14.04               5506de2b643b        7 weeks ago         199.3 MB
ubuntu              latest              5506de2b643b        7 weeks ago         199.3 MB
training/sinatra    latest              f0f4ab557f95        6 months ago        447 MB
training/webapp     latest              31fa814ba25a        6 months ago        278.8 MB

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

$ sudo docker run -t -i ilanshavit/ubuntu:v2 /bin/bash

וכמובן נוכל להריץ בו את הפקודה ncdu שהתקנו בשלב קודם…



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

mkdir ilanshavit
ilan@ilan-HP-ProBook-6450b:~/Downloads$ cd ilanshavit/
ilan@ilan-HP-ProBook-6450b:~/Downloads/ilanshavit$ touch Dockerfile

תחילה ניצור ספריה חדשה בה נכניס לקובץ החדש שניצור (Dockerfile) את התוכן הבא:

# This is a comment
FROM ubuntu:14.04
MAINTAINER Ilan Shavit  <ilanshavit@gmail.com>
RUN apt-get UPDATE && apt-get install -y ncdu



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

$ sudo docker build -t="ilanshavit/ubuntu:v3"



העלאת המיכל שיצרנו ל- Docker Hub:
נשתמש הפקודה docker push כדי להעלות את המיכל למחסן Docker Hub:

sudo docker push  ilanshavit/ubuntu:v2

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



בשלב זה אסיים את סדרת המדריכים שאני כותב על Docker. אסכם את מה שהצגתי עד כה:


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

My Signature

by שביט אילן at January 02, 2015 11:00 AM

December 31, 2014

לינוקס ותוכנה חופשית

על סלקום TV

לא. אני לא מנוי. דווקא היה הגיוני לעשות. תרבות הצריכה שלנו תוכן טלויזיוני מורכבת ממערכת מורכבת שבסיומה אנחנו מקליטים מ–YES ורואים מתי שנוח לנו. על התענוג הזה (באיכות רגילה, לא HD) אנחנו משלמים 240₪ לחודש. חלק מהסיבה אלו ערוצי הילדים שאנחנו מוסיפים. והנה, יום אחד בלבד אחרי שהתקשרה נציגת שירות של Yes וחידשה לנו מנוי, […]

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

by שחר שמש at December 31, 2014 06:39 PM

December 27, 2014

MY RTFM

צריך להחליף שרת ל whatsapp

שמתי לב שמזמן  אני לא מצליח להתחבר ל whatsapp  (לא האתר אלא  התוכנה) דרך היונה  .
מתברר שהבעיה היא שצריך להחליף את ה UA ו השרת לכתובות חדשות :

 UA (או resource) חדש : 2.31.151-443
שרת : c2.whatsapp.net
פורט: 443

by Boris Shtrasman (noreply@blogger.com) at December 27, 2014 09:33 PM

December 25, 2014

לינוקס ותוכנה חופשית

נקסוס 4 לא עובד על פלאפון?

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

The post נקסוס 4 לא עובד על פלאפון? appeared first on לינוקס ותוכנה חופשית.

by שחר שמש at December 25, 2014 06:55 PM

December 22, 2014

Guy Rutenberg

Displaying Google Adsense in MediaWiki

This post shows how to insert code that displays ads in MediaWiki. The proposed methods use hooks instead of modifying the skin. This has two advantages:

  1. No need to modify each skin separately. This allows users to change skins and ads will be presented to them in the same logical place.
  2. It makes upgrades simpler. Hooks reside in LocalSettings.php which isn’t modified by MediaWiki version upgrades, unlike skins.

The examples below show how to insert ads into the header, footer and sidebar of each page. I’ve used the Google Adsense ad-serving code, but it could be easily replaced by the ad-serving code of any other ad network.

Header

We use the SiteNoticeAfter hook to place our ad code directly below the site-notice and above the article header.
header_ad
The following snippet should be added to your LocalSettings.php. You should modify the ad-code between the EOT lines to match yours. A 728x90px leader board fits well and usually has large number of available ads in AdSense.

$wgHooks['SiteNoticeAfter'][] = function(&$siteNotice, $skin) {
        $siteNotice .= <<< EOT
<script async src="http://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
    style="display:inline-block;width:728px;height:90x"
    data-ad-client="ca-pub-xxxxxxxxxxxxxxxx"
    data-ad-slot="6440411535"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
EOT;
        return true;
};

Footer

The SkinAfterContent hook. allows us to display a banner right after the article content.
footer_ad
Most horizontal ads would fit nicely for this location. As before, the ad code goes between the EOT lines. This time, however, we need to wrap it in a <div> to center-align the ad.

$wgHooks['SkinAfterContent'][] = function(&$data, $skin) {
        global $myAdCode;
        $data .= '<div style="text-align:center;">';
        $data .= <<< EOT
<script async src="http://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
    style="display:inline-block;width:728px;height:90x"
    data-ad-client="ca-pub-xxxxxxxxxxxxxxxx"
    data-ad-slot="6440411535"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
EOT;
 
        $data .= '</div>';
        return true;
};

Sidebar

sidebar_ad
Placing an ad in the sidebar, turns out to be a little trickier than the header and the footer. The SkinBuildSidebar allows us to insert ads between the Navigation portal and the ToolBox portal in the sidebar. However there are few caveats:

The first one, is that in the default Vector skin, the portals are collapsible. This may be a nice feature, but I’m not sure having an option to hide ads is such a good idea. Hence we add a little JavaScript snippet that makes the ad portal permanent.

Secondly, each portal in the sidebar has a title. The title of the portal containing the ads will be “Ads”. If your wiki is non-english, you’ll probably want to translate it. To do so, you simply need to create the page MediaWiki:Ads in your wiki and write the translation there.

Thirdly, the sidebar is a too narrow for 160x600px vertical skyscraper, which is the narrowest recommended vertical placement size. You could either use narrower ad size, which as Google AdSense warns have significantly less stock, or increase a bit the size of the sidebar. Increasing the size of the sidebar should be done per skin. For the default vector skin, the can be done by editing the MediaWiki:Vector.css page (creating it if necessary) and adding the following lines:

/* increase Vector sidebar width to accommodate ads */
div#mw-panel { width: 12em; }
div#footer, #mw-head-base, div#content { margin-left: 12em; }
#left-navigation { margin-left: 12em; }

If your wiki is in RTL language, you need to use a modified snippet:

/* increase Vector sidebar width to accommodate ads */
div#mw-panel { width: 12em; }
div#footer, #mw-head-base, div#content { margin-right: 12em; }
#left-navigation { margin-right: 12em; }

Below is the code that needs to be placed in LocalSettings.php. Again, you should replace the ad code between the EOT lines.

$wgHooks['SkinBuildSidebar'][] = function($skin, &$bar) {
        $out = <<< EOT
<script async src="http://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
    style="display:inline-block;width:160px;height:600x"
    data-ad-client="ca-pub-xxxxxxxxxxxxxxxx"
    data-ad-slot="6440411535"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
EOT;
        $out .= "<script>$('#p-Ads').addClass('persistent');</script>";
        $bar['Ads'] = $out;
        return true;
};

The three types of ads can be previewed in this wiki.

by Guy at December 22, 2014 11:07 AM

December 20, 2014

לראות שונה » קוד פתוח

סינטרה מודולרית

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

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

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

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

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

אנחנו משתמשים בRack בעצם, היות וכמעט וכל הframeworks עבור בניית מערכות web ברובי משתמשים בו, אנו זקוקים לקובץ קבוע בשם config.ru.

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

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

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

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

למערכת שיצרתי ישנם שני מצבים – מערכת לדיבוג REST, ומערכת "בדיקות" אשר עליה אפשר לבדוק שדברים עובדים, והיא בעיקר על תקן "echo" כלשהו.

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

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

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

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

במקרה הזה, הגדרתי כי במצב של ‎:development משתמשים ב Sinatra::Reloader, אשר מגיע עם Sinatra-Contrib – תת פרוייקט המספק הרבה כלי עזר לדברים שונים.
הסיבה לשימוש ב Reloader הוא לא לאתחל את השרת בכל שינוי שעושים למחלקה של סינטרה, כאשר Reloader מגלה כי התוכן של הקובץ השתנה, הוא גורם ל rack לטעון אותו שוב, וככה אנחנו לא זקוקים לטעינה מחודשת של השרת עצמו.

המערכת שכתבתי, משתמשת ב template בשם haml, למעשה פעם ראשונה אשר אני משתמש בה מרצון. תוכלו למצוא את ה layout.haml שהוא המסגרת הרגילה וכן כרגע קובץ בשם index.haml תחת ספריית view.
ועבור העיצוב, אני משתמש ב Foundation 5, אשר אני אוהב אותה יותר מאשר bootstrap.
עבור Javascript יש גם את jQuery וגם את knockout.js, כאשר אני נעזר גם ב lodash.js למספר דברים פשוטים, והיא מספקת בעצם גרסה שעברה אופטימיזציה ל underscore.

את הקבצים של Foundation, וכל ה Javascript ניתן למצוא תחת public.

דבר אחרון שנשאר לספר עליו הוא שאני משתמש במשהו אשר נקרא puma.
מה זה ?
puma הוא משהו שלוקח את rack וגורם לו להיות שרת לכל דבר ועניין, אשר ניתן לבצע עליו חיבור לשרתי HTTP שונים, כדוגמץ apache או nginx.
החיבור נעשה על ידי הגדרת proxy בשרתים.

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

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


תויק תחת:Ruby, ui, unix, אינטרנט, טיפים וטריקים, טכנולוגיה, לינוקס, פיתוח, קוד פתוח, רשתות, שרתים, תוכנה, תכנות, תקשורת

by ik_5 at December 20, 2014 08:00 PM

Guy Rutenberg

Kindle Paperwhite “Unable to Open Item”

Recently, I tried transfering some new ebook to my Kindle Paperwhite (first generation), the books were listed properly. However, when I tried to open them I got
“Unable to Open Item” error, suggesting I re-download the books from Amazon. I tried transferring the files again and again, but it didnt’ help. Some of the books were mobi files while others were “AZW` (which I got from אינדיבוק) and all of them opened fine on my computer.

Finally, I followed an advice from a comment in the KindledFans blog, and converted the files to AZW3 (the original comment suggested mobi but AZW3 works better with Hebrew). After converting, I moved the files to my Kindle and they opened just fine.

by Guy at December 20, 2014 02:40 PM

December 19, 2014

האתר של שביט אילן

Docker – חלק חמישי

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

כרגע אתמקד בעבודה עם docker client. עבודה עם docker client מאוד פשוטה (באמצעות דגלים וארגומנטים ניתן לשלוט בהוראות ל- Docker Client):

Usage:  [sudo] docker [command] [flags] [arguments] ..

הרצת הפקודה docker version תספק לנו אינפורמציה נוספת על גרסת docker בצד השרת ובצד הלקוח (בצד אינפורמציה רבה נוספת).

$ sudo docker version
[sudo] password FOR ilan:
Client version: 1.3.2
Client API version: 1.15
Go version (client): go1.3.3
Git commit (client): 39fa2fa
OS/Arch (client): linux/amd64
Server version: 1.3.2
Server API version: 1.15
Go version (server): go1.3.3
Git commit (server): 39fa2fa



כדי לקבל עזרה על פקודה מסויימת (נניח attach) נוסיף את הדגל help:

$ sudo docker attach –help

Usage: docker attach [OPTIONS] CONTAINER

Attach TO a running container

  –no-stdin=false    Do not attach STDIN
  –sig-proxy=true    Proxy all received signals to the process (even in non-TTY mode). SIGCHLD, SIGKILL, and SIGSTOP are not proxied.

הערה: כדי לצפות בכל באפשרויות שהפקודה docker תומכת יש להריץ את הפקודה docker בלבד.

הרצת אפליקציית רשת באמצעות docker:

$ sudo docker run -d -P training/webapp python app.py
Unable TO find image 'training/webapp' locally
Pulling repository training/webapp
31fa814ba25a: Download complete
511136ea3c5a: Download complete
f10ebce2c0e1: Download complete
82cdea7ab5b5: Download complete
5dbd9cb5a02f: Download complete
74fe38d11401: Download complete
64523f641a05: Download complete
0e2afc9aad6e: Download complete
e8fc7643ceb1: Download complete
733b0e3dbcee: Download complete
a1feb043c441: Download complete
e12923494f6a: Download complete
a15f98c46748: Download complete
STATUS: Downloaded newer image FOR training/webapp:latest
52d212d850c52cf8553f729ecc0850647d1bb50f274f6ef9316ea19b3d3b7fe5
  • הדגל d- מוכר: האפליקציה במיכל תורץ ברקע ותספק את השירות
  • הדגל p- מציין שיש למפות כל פורט נדרש במיכל ולשייך אותו למיכל הנוכחי
  • מאחר שהמיכל 'training/webapp' לא נמצא במאגר המקומי, הוא הורד מהרשת (Docker Hub). המיכל מכיל סקריפט פייתון פשוט (app.py) שמיישם אפליקצית רשת.



נריץ שוב את הפקודה docker ps (הפעם עם הדגל l- בו נבקש לקבל מידע נוסף על זמן הרצת הסקריפט)

$ sudo docker ps -l
CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS   PORTS NAMES 2d212d850c5  training/webapp:latest  "python app.py"  11 minutes ago   Up 11 minutes  0.0.0.0:49153->5000/tcp  clever_lumiere

הערה: הפורט 49153 בצד הלקוח מופה לפורט 5000 בצד השרת.

נגלוש לכתובת זאת ונקבל את המסך הבא:

webapp1



כדי לצפות בלוגים של השרת נריץ את הפקודה הבאה:

$ sudo docker logs -f clever_lumiere
 * Running ON http://0.0.0.0:5000/
172.17.42.1 - - [07/Dec/2014 03:49:33] "GET / HTTP/1.1" 200 -
172.17.42.1 - - [07/Dec/2014 03:49:34] "GET /favicon.ico HTTP/1.1" 404 -
172.17.42.1 - - [07/Dec/2014 03:50:04] "GET / HTTP/1.1" 200 -
172.17.42.1 - - [07/Dec/2014 03:50:04] "GET /favicon.ico HTTP/1.1" 404 -
172.17.42.1 - - [07/Dec/2014 03:50:04] "GET /favicon.ico HTTP/1.1" 404 -

הערה: הדגל f- גורם ל- docker להתנהג כמו הפקודה tail -f (כלומר להמשיך להאזין ללוגים ולא לצאת מהמשימה בסיום הרצת הפקודה).



כדי לצפות בתהליכים הרצים בתוך המיכל נריץ את הפקודה top:

$ sudo docker top clever_lumiere
UID  PID   PPID  C  STIME  TTY  TIME  CMD
root  23777  1774  0  05:33  ?  00:00:00  python app.py

ניתן להבחין שהפקודה python app.py היא הפקודה היחידה שרצה במיכל.



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

$ sudo docker stop clever_lumiere
clever_lumiere



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

~$ sudo docker start clever_lumiere
clever_lumiere



נריץ שוב את הפקודה pocker ps -l וניראה שהמיכל רץ כבר 41 דקות – כלומר חידשנו את פעולתו.

$ sudo docker ps -l
CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES
52d212d850c5  training/webapp:latest  "python app.py"  41 minutes ago  Up 50 seconds  0.0.0.0:49154->5000/tcp  clever_lumiere



לעומת זאת הפקודה restart תגרום להפסקת פעולת המיכל וריצתו מחדש (מאפס):

$ sudo docker restart clever_lumiere


כפי שניתן להיווכח:

$ sudo docker ps -l
CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES
52d212d850c5  training/webapp:latest  "python app.py"  44 minutes ago  Up 2 seconds  0.0.0.0:49155->5000/tcp  clever_lumiere



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

$ sudo docker rm clever_lumiere
Error response FROM daemon: You cannot remove a running container. Stop the container before attempting removal OR USE -f
2014/12/07 06:21:14 Error: failed TO remove one OR more containers
ilan@ilan-HP-ProBook-6450b:~$ sudo docker stop clever_lumiere
clever_lumiere
ilan@ilan-HP-ProBook-6450b:~$ sudo docker rm clever_lumiere
clever_lumiere



עד לנקודה זאת תמיד השתמשנו במיכלים מוכנים שהורדנו מ- Docker Hub. בפרק הבא נלמד להכין מיכלים בעצמנו

My Signature

by שביט אילן at December 19, 2014 11:00 AM

December 18, 2014

code.openark.org » MySQL

Orchestrator 1.2.9 GA released

Orchestrator 1.2.9 GA has been released. Noteworthy:

  • Added "ReadOnly" (true/false) configuration param. You can have orchestrator completely read-only
  • Added "AuthenticationMethod": "multi": works like BasicAuth (your normal HTTP user+password) only it also accepts the special user called "readonly", which, surprise, can only view and not modify
  • Centralized/serialized most backend database writes (with hundreds/thousands monitored servers it was possible or probable that high concurrency led to too-many-connections openned on the backend database).
  • Fixed evil evil bug that would skip some checks if binary logs were not enabled
  • Better hostname resolve (now also asking MySQL server to resolve hostname; resolving is cached)
  • Pseudo-GTID (read here, here, here) support now considered stable (apart from being tested it has already been put to practice multiple times in production at Outbrain, in different planned and unplanned crash scenarios)

I continue developing orchestrator as free and open source at my new employer, Booking.com.

 

 

by shlomi at December 18, 2014 04:24 PM

December 17, 2014

Rabin.IO » FOSS

Dynamic DNS with CloudFlare

This is a simple hack I found for my self to have a “Dynamic DNS” for my home IP.

I’m using CloudFlare as my name server to manage the zone file for my domain, And one of the nice things about FC is that they have nice API to manage your account. One of the options this API provides is the capability to update you DNS entries in the Zone.

Get your token

For all the action with the API you’ll 3 thinks, your privet token (called tkn in the API),  email and the action you like to perform.

You can find your token under your Account page

DNS Record ID

Next you’ll need to find the action you like to perform, in my case is to edit the zone file. which is under the “DNS Record Management” -> rec_edit menu, but for using this action you will need the ID number for the recored you like to change, and for that you will need to use “rec_load_all” action.

e.g

curl https://www.cloudflare.com/api_json.html \
  -d 'a=rec_load_all' \
  -d 'tkn=8afbe6dea02407989af4dd4c97bb6e25' \
  -d 'email=sample@example.com' \
  -d 'z=example.com'

The output will be in a JSON format, and the part you are looking for will look similar to this,

...
{
    "rec_id": "18136402",
    "rec_tag": "3bcef45cdf5b7638b13cfb89f1b6e716",
    "zone_name": "example.com",
    "name": "test.example.com",
    "display_name": "test",
    "type": "A",
    "prio": null,
    "content": "[server IP]",
    "display_content": "[server IP]",
    "ttl": "1",
    "ttl_ceil": 86400,
    "ssl_id": null,
    "ssl_status": null,
    "ssl_expires_on": null,
    "auto_ttl": 1,
    "service_mode": "0",
    -
    "props": {
        "proxiable": 1,
        "cloud_on": 0,
        "cf_open": 1,
        "ssl": 0,
        "expired_ssl": 0,
        "expiring_ssl": 0,
        "pending_ssl": 0
    }
...

Edit/Update the DNS record

Now that you have the ID for the record you like to change, it’s a matter of a simple curl command,

curl https://www.cloudflare.com/api_json.html \
  -d 'a=rec_edit' \
  -d 'tkn=8afbe6dea02407989af4dd4c97bb6e25' \
  -d 'id=18136402' \
  -d 'email=sample@example.com' \
  -d 'z=example.com' \
  -d 'type=A' \
  -d 'name=test' \
  -d 'content=1.2.3.4' \
  -d 'service_mode=0' \
  -d 'ttl=1'

This command will update the IP to 1.2.3.4 for test.example.com entery.

Automate the update process

To automate the process, i have a cron job which runs every 5 minutes, and query my external IP and compare it to the resolved IP form my DNS.

#!/bin/bash

CURRENT_IP=$(dig myip.opendns.com @resolver1.opendns.com +short)
RESOLVE_IP=$(dig dyn.example.com +short @jean.ns.cloudflare.com)

if [[ ${CURRENT_IP} != ${RESOLVE_IP} ]] ;
then
    echo "need to update IP from: ${RESOLVE_IP} -> ${CURRENT_IP}"
    curl https://www.cloudflare.com/api_json.html -d 'a=rec_edit' \
        -d 'tkn=c7ee1aef8131daf52e103a21a786ecbd99193' \
        -d 'email=X@Y.Z' \
        -d 'id=42' \
        -d 'z=example.com' \
        -d 'type=A' \
        -d 'name=dyn' \
        -d 'content='${CURRENT_IP} \
        -d 'service_mode=0' \
        -d 'ttl=120' \


else
    echo "nothing to do"
    exit 0;
fi

 

by Rabin at December 17, 2014 11:25 PM

December 15, 2014

Liran Tal's Enginx

Drupal Performance Tip – “I’m too young to die” – know your DB engines

This entry is part 4 of 5 in the series Drupal Performance Tips

In the spirit of the computer video game Doom and its skill levels, we’ll review a few ways you can improve  your Drupal speed performance     and optimize for better results and server response time. These tips that we’ll cover may be at times specific to Drupal 6 versions, although     you can always learn the best practices from these examples and apply them on your own code base.

Doom

Doom skill levels: (easiest first)

1. I’m too young to die

2. Hey, not too rough

3. Hurt me plenty

4. Ultra-violence

5. Nightmare!

  This post is rated “I’m too young too die” difficulty level.

 

Drupal 6 shipped with all tables being MyISAM, and then Drupal 7 changed all that and shipped with all of its tables using the InnoDB database engine. Each one with its own strengths and weaknesses but it’s quite clear that InnoDB will probably perform better for your Drupal site (though it has quite a bit of fine tuning configuration to be tweaked on my.cnf).

Some modules, whether on Drupal 6, or those on Drupal 7 that simply upgraded but didn’t quite review all of their code, might ship with queries like SELECT COUNT() which if you have migrated your tables to InnoDB (or simply using Drupal 7) then this will hinder on database performance. That’s mainly because InnoDB and MyISAM work differently, and where-as this proved as quite a fast responding query being executed on a MyISAM database which uses the main index to store this information, for InnoDB the situation is different and will result in doing a full table scan for the count. Obviously, on an InnoDB configuration running such queries on large tables will result in very poor performance

drupal_perf-5

Note to ponder upon – what about the Views module which uses similar type of COUNT() queries to create the pagination for its views?

The post Drupal Performance Tip – “I’m too young to die” – know your DB engines appeared first on Liran Tal's Enginx.

by lirantal at December 15, 2014 07:16 AM

עברית בלינוקס

צריבה של ROM עבור Galaxy S1 i9000 מלינוקס

בפוסט קודם הסברתי על אודות מחיצות באנדרויד. "הקהילה" קוראת לאסופה של ה־images של המחיצות הללו בתור ROM. אין הרבה הסברים באינטרנט שמסבירים איך לצרוב מכשירי Galaxy S i9000 בעברית בלינוקס. אז – מעכשיו יש.

  1. תורידו את ה־ROM־ים המקוריים של החברה המתאימה לכם. אין בעייה גדולה לשים רום של חברה אחרת. אם זה לא עובד, אפשר לצרוב את המודם המתאים. באתר של iAndroid יש קישורים להורדה: http://iandroid.co.il/forum/viewtopic.php?f=42&t=18962
  2. הקבצים שתורידו הם self extracting exe לחלונות. אצלי wine עשה את מלאכתו נאמנה והקבצים שנוצרו וחתימות ה־MD5 הם (קבצי ה־exe הם ממש ישנים, ייתכן ועכשיו יש קבצים עם חתימה שונה, מה שחושב זה קבצי ה־tar שנוצרים מהם):
    82d5a5fffd1fea566aab7fe39522aa2c  I9000.Cellcom.JIJVG.exe
    0cb6ef26ce3076c5b3ffde7cb2ad2a1a  I9000.Partner.JHJVG.exe
    254ef10b0ddacfeabc44cf547082e856  I9000.Pelephone.JJJVB.exe
    eedb05d074db2026b38c8f00ca18f935  Cellcom.JIJVG.tar
    33535d9aff3e39d04b0cc504ac389b51  Pelephone.JJJVB.tar
    7d593eae36a2d5151e6a84454c739827  Partner.JHJVG.tar
  3. עכשיו צריך לפתוח את אחד הקבצים, בתוך ספרייה חדשה (לדוגמה):
     mkdir open-android-firmware
     cd open-android-firmware
     tar xf ../Cellcom.JIJVG.tar
  4. כדי לצרוב צריך גם קובץ pit שמגדיר את מבנה המחיצות. חיפוש ברשת אחר s1_odin_20100512.pit  תניב קובץ שהתחימה שלו היא 1d927b36d2fa807a22e64fc86b445130
  5. צריך גם קובץ שמגדיר dbdatafs, הוא נקרא גם PDA (אין לי שמץ של מושג מה זה). אותו אפשר להוריד מכאן: http://forum.xda-developers.com/showthread.php?t=2184403 החתימה של מה שהורדתי היא 868b81b9e28d30c82a00038d29e65d8c
  6. הצריבה תיעשה על ידי תוכנה heimdall. היא זמינה מהמאגרים החופשיים של דביאן. להתקנה:
     sudo apt install heimdall-flash
  7. אופציונאלי: אני לא אוהב להשתמש ב־root, ולכן הגדרתי חוק udev שהמכשיר יהיה ניתן לתכנות גם בעזרת המשתמש שלי. צריך רק לדאוג שהמשתמש יהיה תחת הקבוצה plugdev ואז החוק הבא יעבוד (זה גם טוב לעבודה מול adb בתור משתמש רגיל, ולכן מומלץ).השורה אחרונה מתאימה לגלקסי, האחרות לנקסוס וואללה, לא זוכר :)
    elcuco@pinky ~ $ cat  /etc/udev/rules.d/51-android.rules 
    SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev" 
    SUBSYSTEM=="usb", ATTR{idVendor}=="681c", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev"
  8. בשלב זה נשים את המכשיר במצב download. תוציאו את המכסה האחורי,ואז תוציאו את הסוללה (פשוט לתת מכה והיא יוצאת). תכניסו מחדש את הסוללה ואז ללחוץ על השילוש הקדוש: מקש הבית, כפתור שמע תחתון וכפתור ההדלקה. על הצג יהיה אנדרויד צהוב.
    המלצה: לא לשים את המכסה אחורי. יהיה יותר קל להוציא את הסוללה ולהתחיל מההתחלה, ואני מבטיח שיהיה צורך בזה :)
  9. כעת פשוט מפעילים את הפקודה הבאה (אני שמרתי אותה בתסריט בשם flash-all.sh)
    heimdall flash --repartition  \
       --pit s1_odin_20100512.pit \
       --FACTORYFS factoryfs.rfs  \    
       --CACHE cache.rfs          \
       --DBDATAFS dbdata.rfs      \
       --IBL+PBL boot.bin         \
       --SBL Sbl.bin              \
       --PARAM param.lfs          \
       --KERNEL zImage            \   
       --MODEM modem.bin
  10. זהו. הצריבה לוקחת כמה דקות ואחרי המכשיר עולה כמו חדש.

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

המלצות נוספות:

  1. אל תנסו את זה בחלונות. צריך להשתמש בתוכנה odin שאין לי מושג מה היא עושה מי כתב אותה. זאת הדלפה של מישהו ואני לא סומך על קוד של מישהו אחר במחשב שלי. התוכנות שיש בלינוקס נבדקו והן קוד פתוח, אני סומך עליהן יותר.
  2. תוודאו את החתימות (md5 במיקרה של מה שאני נותן כאן).
  3. כמה שיותר מהר נסו לשים רום אלטרנטיבי. cyanogenmod הוא בסדר גמור. אני חושב ש־Replicant יהיה יותר טוב – אבל לא בדקתי אישית, והוא לא זמין לכל מכשיר.
  4. על מכשיר ישן זה, לא הייתי ממליץ על gapps כלל. אני השתמשתי ב־FDroid והשלמתי כמה תוכנות עם Aptoid. האחרון מפוקפק משהו… אבל זאת פשרה שאני נאלץ לחיות איתה.
  5. כדי להחליף מודם, יש לשים את המכשיר במצב download ולצרוב בעזרת הפקודה הבאה (את המודם צריך לקחת מהרום המתאים):
    heimdall flash --MODEM modem.bin
  6. אם דילגת על השלב של udev פשוט לשים sudo לפני כל פקודה.

שאלות שנותרו לי ללא מענה:

  1. מה התוכן של dbdata.rfs ומה המטרה של המחיצה הזאת.
  2. מה זה param.lfs.

תזכורת: מחיצות באנדרויד

by elcuco at December 15, 2014 06:28 AM

December 14, 2014

לראות שונה » קוד פתוח

האקינג לראוטר, או איך להפוך ראוטר לקוד פתוח

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

מאז לא היו לי אתגרים באמת מעניינים בנושא ההאקינג של מכשירים, עד שרכשתי את WDR4300 של TP-Link והחלטתי שאני לא אוהב את הרעיון שאין לי שליטה על הראוטר שלי.

גיליתי שאני מוגבל, היות ובמדינת ישראל יש הגבלת תדרים על ידי משרד הביטחון (ולא משרד התקשורת) – WTF ?!
אז בגלל זה אני למשל לא הייתי יכול לעדכן את הראוטר לגרסה חדשה יותר של TP-Link, כי אין להם הורדה של גרסה "ישראלית" המגבילה תדרים (מצטער אבל זה הזוי).

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

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

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

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

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

הראוטר של בזק מנתק את ה wifi כל כמה זמן לכמה שניות. כלומר את המכשירים המחוברים אליו.
מדפסת הרשת שלי, משום מה לא עובדת כמו שצריך עם הראוטר הזה, אבל הכי גרוע זה ה TR-069 שיש בראוטר ואני לא יכול לבטל אותו, הוא סוג של back-door  לכל הראוטרים האלו, המאפשרים לבזק לבצע provision מרחוק, אבל מסכנים את הראוטר לחלוטין.

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

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

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

בכל מקרה, אני מאוד נהנה :)


תויק תחת:asterisk, freeswitch, kamailio, OpenMoko, Operating Systems, yate, חומרה, טכנולוגיה, טלפוניה, לינוקס, קוד פתוח, ראוטרים, רשתות, תוכנה Tagged: freeswitch, hardware hacking, kamailio, openwrt, tr-069, wdr4300, wrt, לינוקס, קוד פתוח, רשתות

by ik_5 at December 14, 2014 08:15 AM

December 11, 2014

על בני אדם וחיות אחרות » תוכנה חופשית וקוד פתוח

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

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

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

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

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

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

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

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

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

יום יבוא, והמערכות הללו ילמדו לשפר את עצמם.:)

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

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

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

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

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

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

לא בדקתי את שאר השירותים שמיקרוסופט מציעה. אני מאמין שתשתיות של חברה צריכות להיות עצמאיות. ז"א, שתשמר לה היכולת לעבור מספק תשתיות אחד לשני. ובנושא התאימות של שירותים בין עננים שונים, לא הייתי מהמר. נראה לי נכון לנהל את הסיפור באמצעות ממשק אחיד, open stack, לדוגמא. ושהוא כבר יעבוד מול ספק הענן. או cloudera manage (במקרה של big data) או אצל צד שלישי, כמו (redis labs – המספקים שירותי ענן על בסיס הנתונים redis, להיט גדול, אגב).

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

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

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

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

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

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

by האח הגדול at December 11, 2014 09:03 PM

December 07, 2014

לראות שונה » קוד פתוח

מזלגות נעוצים

בתקופה האחרונה, נעשו מספר פעולות fork לפרויקטים מוכרים, בהם node.js ודביאן.
בנוסף, פרויקט docker מקבל מתחרה, לאחר שחברת CoreOS הודיעה כי לא מקובל עליה הכיון של docker.

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

אתחיל בדביאן
יש המון טינה על systemd, ובעקבות כל הנושא, עם כל הזעם, הוחלט ליצור fork בשם devuan, אשר ימשיך לספק יכולות של sysv init במקום systemd ה"נורא".

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

המאבקים המפגרים האלו, האם להשתמש בsystemd או לא, פוגעים בלינוקס, ולא האם systemd טוב או לא.

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

הרעיון הוא לא להיות תלוי בהחלטות של חברה מסחרית בפרויקט, ובכך להשאיר אותו פתוח בתפיסה, אם כי זה לא אומר שהתפיסה של המפתחים תהיה מוסכמת על שאר השוק …

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

Rocket
במידה ולא שמעתם על docker, אתם כנראה ישנים איפשהו, או שרחוקים מעולם ה IT. זה השם החם ביותר מאז שסייבר ומחשוב ענן נכנס לעולם, או אולי זה היה 42 ?

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

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

החברה של CoreOS, רוצים container ומשהו שזו כל ההתמחות שלו, אבל docker מתחיל להיות stack שלם של דברים, והם ממש לא אוהבים את זה, כי בסופו של דבר,זו סוג של תחרות, לא ?

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

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


תויק תחת:Debian, docker, it, javascript, systemd, אירגונים וחברות, לינוקס, פיתוח, קוד פתוח, שרתים, תוכנה, תכנות Tagged: debian, docker, node.js

by ik_5 at December 07, 2014 12:33 PM

December 05, 2014

לראות שונה » קוד פתוח

Firebird 3.0

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

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

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

  • DSQL
  • ESQL
  • PSQL

DSQL – הם בעצם השאילתות שכותבים ומריצים בצורה דינאמית באמצעות API. המקדם D מייצג את המילה Dynamic.
ESQL – הם בעצם שאילתות עם preprocessor, כאלו שכותבים למשל דרך תוכנה שלנו. ההבדל בינה לבין DSQL היא שבשפה זו משתמשים בפקודה EXEC. הפירוש של המקדם E מייצג את המילה Embedded.
PSQL – השפה שבה כותבים stored procedure וטריגרים. המקדם של P מייצג את המילה Procedural.

בנוסף ישנה שפה בשם DDL – ‏Data Definition Language. זו השפה בה עושים פעולות כדוגמת create table או create database.

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

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

SQL – כלל השפות:

  • Merge Syntax
  • פונקציות window
  • תמיכה ב regex בביצוע SUBSTRING
  • נכנס סוג נתונים בשם Boolean
  • יכולת לשמור גרסאות עם RDB$RECORD_VERSION
  • cursor יציב

PSQL:

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

DDL‏:

  • תמיכה במצב null של עמודה ו domain
  • היכולת לשנות קידוד ברירת המחדל של מסד הנתונים
  • הוספה של Identity Column – המקביל ל serial בPG ו Auto Increment של SQLITE ו MySQL
  • תחביר עבור RECREATE SEQUENCE/GENERATOR
  • טריגרים עבור DDL
  • תמיכה ב DATABASE LINGER

אבטחה:

  • תמיכה database encryption
  • תמיכה מורחבת יותר בהרשאות Object
  • הרשאות לעבודה עם DDL
  • הרשאות ברמת מסד הנתונים
  • תוספות לעבודה עם Roles

פיקוח:

  • הוספת יכולות נוספות לסטטיסטיקה אודות שאילתות ומסד הנתונים בכלל

אז מה זה כל הסעיפים האלו ?

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

MERGE INTO Users
   USING User
      ON Users.ID = User.ID

   WHEN MATCHED AND User.Deleted = TRUE THEN
     DELETE

   WHEN MATCHED THEN
      UPDATE SET username=User.username ...

   WHEN NOT MATCHED THEN
      INSERT (username, ...) VALUES (User.username, ...);

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

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

SELECT A, B, C,
       SUM(C) OVER() AS SUMA,
       SUM(C) OVER(ORDER BY A, B) AS SUMB,
       SUM(C) OVER(PARTITION BY A) AS SUMOVER1,
       SUM(C) OVER(PARTITON BY A ORDER BY B) AS SUMOVER2;
+-----+-----+-----+--------+--------+------------+------------+
|  A  |  B  |  C  |  SUMA  |  SUMB  |  SUMOVER1  |  SUMOVER2  |
+-----+-----+-----+--------+--------+------------+------------+
|  1  |  1  | 30  |  141   |   30   |     60     |     30     |
+-----+-----+-----+--------+--------+------------+------------+
|  1  |  1  | 20  |  141   |   50   |     60     |     50     |
+-----+-----+-----+--------+--------+------------+------------+
|  1  |  3  | 10  |  141   |   60   |     60     |     60     |
+-----+-----+-----+--------+--------+------------+------------+
|  2  |  1  | 25  |  141   |   85   |     40     |     25     |
+-----+-----+-----+--------+--------+------------+------------+
|  2  |  2  | 15  |  141   |  100   |     40     |     40     |
+-----+-----+-----+--------+--------+------------+------------+
|  3  |  1  | 41  |  141   |  141   |     41     |     41     |
+-----+-----+-----+--------+--------+------------+------------+

Cursor יציב:
פעם היו מספר בעיות:

1. הוספה אין סופית של רשומות:

insert into t
select * from t;

2. מחיקה של יותר שורות מאשר מה שנדרש:

delete from t
  where id in (select first 1 ID from t)

הסיבה לבעיות האלו היו בגלל הצורה ש DML עבד:
פעולות של insert/update/delete סומנו להתבצע לפני כל דבר אחר.
היתרון בזה הוא בכל שהרשומות יציבות מאוד ולא מושפעות בגלל כתיבת DML עצמו.
אבל יש לזה מספר חסרונות:

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

היתה לבעיה זו דרך מעקף באמצעות שימוש בSORT עם שאילתת PLAN, אשר יצרה cursor בלתי תלוי ויציב יותר.

דרך הפתרון של Firebird 3 היא על ידי יצירה של undo-log בשביל לראות האם רשומה שונתה על ידי ה cursor:

  • אם רשומה קיבלה פעולת inset – התעלם
  • אם רשומה עודכנה או נמחקה – קרא את הגרסה הקודמת

יתרונות:

  • אין צורך יותר ב bookkeeping
  • אין צורך במקום נוסף לשמירה
  • קל יחסית למימוש

החסרונות:

  • הוספה של רשומות יזכו לביקור (למרות ההתעלמות)
  • צריך לקרוא גרסאות ישנות של פעולות של שינוי ומחיקה
  • לא עובד עם SUSPEND הקיים ב PSQL

Global Temporary Table – GTT
אלו טבלאות זמניות הנמצאות בזיכרון במקום בדיסק. זה אומר כי גם אם מסד הנתונים הוא לקריאה בלבד, או שזו טרנזקציה לקריאה בלבד, עדיין ניתן לכתוב לטבלה שכזו.
כלומר זה עובד גם עם GT ON COMMIT PRESERVE ROWS וגם ב COMMIT DELETE ROWS כאשר האחרון עובד גם במצב של טרנזאקציה של קריאה בלבד בתוך מסד נתונים לקריאה בלבד.
זה גם מאפשר לבצע rollback מהיר יותר היות ולא צריך יותר לגבות את הרשומות בקריאה ל rollback.
בנוסף לכך, GC על GTT מתבצע מיידית ולא דורש לחכות לבקשות נוספות שיגרמו לו להתבצע.
בנוסף, כל היכולות האלו נכנסו גם לגרסה 2.5.1 של Firebird ולא ייחודיים יותר רק לגרסה 3.0.

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

הדגמה לפונקציה:

create function inc(x int) returns int
as
begin
  return x + 1;
end;

select inc(5) from RDB$DATABASE; -- 6

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

-- package header, declarations only
create or alter package users
as
begin
   procedure extract_user(id int) returns (u int); -- public procedure
end

-- package body - actual implementation
recreate package body users
as
begin
  function valid_user(id int) returns boolean; -- private function
  
   procedure extract_user(id int) returns (u int)
   as 
   begin
   -- ...
   end;

   function valud_user(id int) returns boolean
   as
   begin
    -- ...
   end;
end;

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

create exception ex_with_params 'Error @1 : @2'; -- create exception with two parameters
exception ex_with_params using (1, 'I''m sorry, Dave. I''m afraid I can''t do that.'); -- call the exception with two parameters

שימוש בCursor כמשתנה רשומה:
גרסה 3.0 מאפשרת לנו בעצם להחזיר cursor במצב PSQL:

--- ...
FOR SELECT A, B, C FROM ...
  AS CURSOR C1 -- no INTO clause
DO
BEGIN
   ...
   INSERT INTO ...
   VALUES (C1.A, C1.B, C1.C); -- cursor reference
END

שדה Identity:
בPg, SQLite ו MySQL/MariaDB יש הגדרת שדה שהוא auto increment. שדה שכזה נקרא ב SQL "טהור" שדה identity.
בFirebird, יוצרים עד לגרסה 3 טריגר ו Sequence ואז מחברים בניהם, ובכך יוצרים תמיכה לזה.
לאור ביקוש רב המון שנים, החליטו ליצור תמיכה לסוג ל identity אשר נתמך רק עם numeric ו int על סוגיו:

create table objects (
id integer generated by default as identity primary key,
name varchar(15)
);

insert into objects (name) values (‘Table’);
insert into objects (name) values (‘Book’);
insert into objects (id, name) values (10, ‘Computer’);

select * from objects;
ID           NAME
============ ===============
1             Table
2             Book
10            Computer

טריגר בזמן DDL:
עד גרסה 3.0, היה ניתן ליצור טריגרים רק על מידע. בגרסה החדשה, ניתן ליצור גם טריגרים על אלמנטים שנוצרים ומוגדים כחלק מה DDL.
המידע יושב בטבלה RDB$GET_CONTEXT ומכילה מספר משתנים לקריאה בלבד המוגדרים רק בתוך טריגר השייך ל DDL אשר קיבל את ה namespace של DDL_TRIGGER:

  • DDL_EVENT – סוג האירוע בתוך ה DDL
  • OBJECT_NAME – שם המטאדאטא של אובייקט
  • SQL_TEXT – שאילתת ה SQL כטקסט שצריכה להתבצע

הדגמה לשימוש שכזה:

create exception ex_bad_sp_name 'Name of Procedures must start with ''@1'' : ''@2''';

create trigger trg_sp_create before create procedure
as
declare sp_name varchar(255);
begin
  sp_name = RDB$GET_CONTEXT('DDL_TRIGGER', 'OBJECT_NAME');
  
  if (sp_name not starting 'SP_') then
    exception ex_bad_sp_name using ('SP_', SP_NAME);
end;

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

בFb התמיכה בlinger היא בשניות ומתבצעת בצורה כזו:

alter database set linger to 30; -- will set linger interval to 30 seconds

ניתן לבטל את הגדרות ה linger בצורות הבאות:

-- 1.
alter database drop linger;       -- will make engine do not delay closing given database
-- 2.
alter database set linger to 0;   -- another way to clean linger settings

תמיכה מורחבת יותר בהרשאות Object:
נוספה יכולת לשים טאגים ביצירת משתמשים במסד נתונים:

CREATE USER Vlad PASSWORD impaler INACTIVE;
ALTER USER Vlad ACTIVE;
ALTER USER Vlad SET TAGS (id = 1, x = 'abcd');
ALTER USER Vlad SET TAGS (x = 'xyz');
ALTER USER Vlad SET TAGS (DROP x);

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

CREATE TABLE SEC$USERS
(
SEC$USER_NAME    RDB$USER,
SEC$FIRST_NAME   SEC$NAME_PART,
SEC$MIDDLE_NAME  SEC$NAME_PART,
SEC$LAST_NAME    SEC$NAME_PART,
SEC$ACTIVE       RDB$BOOLEAN,
SEC$ADMIN        RDB$BOOLEAN,
SEC$DESCRIPTION  RDB$DESCRIPTION
);
CREATE TABLE SEC$USER_ATTRIBUTES
(
SEC$USER_NAME   RDB$USER,
SEC$KEY         SEC$KEY,
SEC$VALUE       SEC$VALUE
);

תויק תחת:firebird, טכנולוגיה, מסדי נתונים, פיתוח, קהילה, קוד פתוח, תוכנה, תכנות

by ik_5 at December 05, 2014 11:22 AM

האתר של שביט אילן

Docker – חלק רביעי

מושג שחשוב להכיר בעבודה עם Docker הוא Docker Hub. מה זה Docker Hub ולמה הוא משמש?

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

ניתן לפתוח חשבון ב- Docker Hub בקישור הבא.

נמשיך כרגע בלימוד מספר פקודות נוספות (בהמשך נחזור ל- Docker Hub)

הרצת פקודות במיכל:

$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world'

הפקודה docker run מריצה פקודה בתוך מיכל. במקרה הנ"ל היא מריצה את הפקודה:
'echo 'Hello World בתוך המיכל ubuntu:14.04. המנוע של Docker מחפש את המיכל במאגר המקומי. אם לא מוצא אותו שם הוא מוריד אותו מ- Docker Hub ומריץ בתוכו את הפקודה. לאחר הרצת הפקודה המיכל מסיים את עבודתו (המיכל פעיל כל עוד הפקודה רצה).

שימוש במיכל באופן אינטרקטיבי:
הוספת הדגלים t ,-i- מאפשרים עבודה אינטרקטיבית עם המיכל:

$ sudo docker run -t -i ubuntu:14.04 /bin/bash
root@b4698b35bf93:/#

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

 מיכל כמספק שירות (daemon):

שימוש במיכל להרצת פקודות סתמיות איננו שימושי. בד"כ משתמשים במיכל כדי לספק שירות מסויים.

$ sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

 d6a45af159c7d66537fb9a71911588153ac2f12f71dc722a683869f2791
$

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

בתגובה לא קיבלנו את המחרוזת Hello World אלא את ה- Container ID של המיכל (מחרוזת ארוכה המספקת מידע על זהות המיכל). מדובר במספר יחודי דרכו נוכל לתקשר עם המיכל.

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

$ sudo docker ps

CONTAINER ID  IMAGE COMMAND CREATED STATUS PORTS NAMES
d6a45af159c7 ubuntu:14.04 "/bin/sh -c 'while t 38 minutes ago Up 38 minutes clever_lalande

הפקודה הנ"ל מחזירה לנו מס' פרטים מעניינים על המיכל:
המספר d6a45af159c7 הוא ה- Container ID (בתצורתו הקצרה יותר). לאחר מכן מופיע שם המיכל שהוא ubuntu:14.04, איזה פקודה רצה, מתי המיכל נוצר, כמה זמן הוא רץ ושם זמני דרכו נתקשר עם המיכל (השם נופק באופן אוטומטי).

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

$ sudo docker logs clever_lalande
hello world
hello world
hello world

הפקודה docker logs מתקשרת עם המיכל ומציגה לנו את ה- stdout שלו. במקרה הזה ההדפסות של hello world.
עתה נעצור את עבודת המיכל באמצעות הפקודה docker stop

$ sudo docker stop  clever_lalande
clever_lalande
$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

המיכל אכן הפסיק עבודתו.

המשך: בחלק הבא

My Signature

by שביט אילן at December 05, 2014 11:00 AM

December 04, 2014

The IceMan Blog » קוד פתוח

לכידת וידאו עם EasyCap 60 תחת לינוקס

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

לא ערכתי מאז.

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

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

בסופו של יום הצלחתי להפעיל את המודול תחת Windows אבל לא יכלתי להשבית את המחשב שלי בשביל זה, ואז חשבתי לנצל את השרת שכבר יש לי וגם ככה עובד כל היום עם 0% עומס והרבה שטח דיסק (כאן הנקודה לציין שהמודול לא תומך בדחיסה ואתם מקבלים קבצים כ-RAW AVI והגדלים מגיעים בקלות ל-30GB לקסטת VHS אחת (לא קריטי עם הנפחים של ימנו, במיוחד אם דוחסים את הסרט אחרי זה ומוחקים אותו))

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

  • easycap linux kernel – googleit
    • http://sourceforge.net/projects/easycapdc60/
    • http://easycapdc60.sourceforge.net/
    • http://kernel.org/doc/readme/drivers-staging-easycap-README
    • http://www.linuxquestions.org/questions/linux-hardware-18/easycap-742876/
      • http://ubuntuforums.org/showthread.php?t=662531

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

* https://www.google.com/search?q=linux+stk1160&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=org.mozilla:en-US:unofficial&amp;client=firefox-a&amp;channel=fflb
** http://easycap.blogspot.co.il/2012/07/new-driver-for-easycap-dc60-stk1160.html
*** https://github.com/ezequielgarcia/stk1160-standalone

ועכשיו לחלק הטכני

להתקן USB יש הפרטים הבאים:

lsusb

אני השתמשתי בקוד מ-

https://github.com/ezequielgarcia/stk1160-standalone

שמתאים לקרנל 3.2, אני ייצאתי את העץ של 3.4

https://github.com/ezequielgarcia/stk1160-standalone/tree/for_v3.4

mkdir ~/src/ &amp;&amp; cd ~/src/
git clone https://github.com/ezequielgarcia/stk1160-standalone.git

למי שאין git ולא צריך אותו – אז פשוט יותר להוריד את הקוד –

https://github.com/ezequielgarcia/stk1160-standalone/downloads

xxx;

by The IceMan at December 04, 2014 01:54 PM

December 03, 2014

עברית בלינוקס

מחיצות באנדרואיד

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

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

  1. מחיצת boot. במערכת לינוקס ה־bootloader טוען את הקרנל, שמצידו הוא יעשה mount ל־rootfs ואז יפעיל את ‎/sbin/init . בשנים האחרונות בוני הפצות בונים אל תוך הקרנל initramfs – שהוא rootfs קטן, שממנו עושים pivot_root למערכת האמיתית.
    באנדוירד – ה־rootfs גם בנוי אל תוך הקרנל, אבל אין pivot_root והמערכת של הקרנל היא זאת שזמינה במכשיר. ה־partition הזה הוא למעשה RO, כיוון שב־boot הבא הקרנל יטען את כל המחיצה מחדש. הקרנל כולו יושב במחיצה הזאת. בזמן צריבה היא נקראת kernel, ולא boot, האחרון מכיל bootloader ויש הסברים בנושא בסוף הפוסט.
    דרך אגב – התמונה שאתם רואים באתחול של המכשיר? logo.gif. האניצמיה שאחריה, זה bootanim.
  2. מחיצת system. זאת המערכת של אנדורויד. השכבה הגרפית, וכו'. המחיצה הזאת מכילה גם את כל ה־user space drivers שאנרדרויד משתמשת. אין ממש מודולים, הכל בנוי אל תוך הקרנל. המחיצה הזאת mounted על ידי אחד מתסריטי האתחול אל /system/ בזמן האתחול, במצב RO. אם תשנו את ההרשאות, ותשנו שם קבצים הם ישארו ל־boot הבא, כיוון שהמחיצה הזאת ממופה אל התקן פיזי. במערכות סגורות, ייתכן וה-bootloader יגלה שיש שינוי בחתימה של המחיצה ויסרב לעלות את לינוקס.
  3. מחיצת data. זאת המחיצה שמכילה את ההגדרות של המשתמש, האפליקציות התקנו וכו'. המחיצה הזאת mounted במצב RW. יש ספרייה בעלת הרשאות למשתמש שמתחבר דרך adb במקום /data/local/tmp/.
    כשאתם עושים reset to factory defaults במכשיר, כל מה שעושים הוא לפרמט את המחיצה הזאת.
  4. מחיצת radio. במכשיר יש כמה מעבדים, אחד מהם הוא מעבד עצמאי שמדבר עם המודם. לכל ייצרן יש מודם שונה, אז כדי גוגל יצרו פרוטוקול ו"דרייבר" עבור המערכת הפעלה. היצרן של החומרה צריך לכתוב daemon שמאזין ב־local socket מול המערכת של אנדרואיד ומדבר עם החומרה (המעבד השני). הצד שמדבר מול אנדרואיד תקני ויציב, ומצד שני משתנה בהתאם לחומרה. מילות החיפוש שלכם בגוגל הם rild ו־rilj (המונח האחרון היה בשימוש יותר ב-4.2, עכשיו אני רואה אותו פחות).
    מערכת ההפעלה שמפעילה את המעבד שמדבר מול חומרת הרדיו נמצאת במחיצה הזאת, זאת ה"קושחה" של המודם. שוב, מדובר סה"כ על מערכת הפעלה למעבד armV5 ש"אנדרואיד" טוען בזמן האתחול על המעבד השני (תחשבו משהו בסגנון, grub שטוען את לינוקס).
  5. מחיצת persistent (לא זמינה בכל מכשיר). בעת ייצור של מכשיר צריך לכייל פרמטרים מסויימים יחודיים פר מכשיר. למשל ה־serial number או פרמטרים שיגרמו למודם הספציפי הזה לצריך פחות חשמל (יש הבדלים קטנים שנוצרים כתוצאה מאופן הייצור של המודמים). האתחולים הללו נעשים במפעל ומצריך ציוד מסוייים, וכאשר ניתן לעשות את הכיון בשטח – הוא לוקח זמן. יצרנים שומרים במחיצה זו פרמטרים שמיוצרים פעם אחת במחזור חיים של המכשיר כדי לייעל את זמן האתחול (מאתחלים פעם אחת, שומרים ערכים ופעם הבאה במקום לכייל פשוט כותבים לחומרה את הערכים מהפעם הקודמת).
    המחיצה הזאת mounted R/W אבל רק ל־root יש הרשאות כתיבה אליה. המחיצה הזאת לא מפורמטת בזמן איפוס המכשיר.
  6. מחיצת recovery. מי שהתקין רום של אנדרואיד שיחק עם תוכנה במכשיר שעולה "לפני אנדרואיד". אז זה לא בדיוק נכון… בסה"כ מדובר על קרנל אחר שב־initramfs שלו יש תוכנה שונה.
    בזמן העלייה של המכשיר, ה־boot loader בוחר איזה קרנל להפעיל בעזרת הכפתורים המוזרים שאתם לוחצים בשניות הראשונות של הפעלת המכשיר.
  7. מחיצת cache. הספרייה הזאת היא לשימוש פנימי של אנדוירד. פעם היא שימשה לשמירה של ה־dalvik cache. אני לא יודע בדיוק מה היא עושה בימינו (אני מניח ש־dart שומר שם את ה־binaries שהוא יוצר מהקוד dalvik שאנחנו מקמפלים באקליפס). כמו כן, בזמן האתחול המערכת בודקת האם קובץ מסויים קיים, ואם כן הוא מפעיל את מערכת ה־recovery (ראו סעיף קודם) כדי לעדכן את המערכת.
    אפשר לפרמט את המחיצה הזאת ללא בעייה, התוכן יתמלא באתחול הבא (האתחול יהיה איטי יותר, כיוון שהוא צריך ליצור את המטמון מחדש).
  8. lk (קיצור של little kernel, לא בדיוק מחיצה). במקביל למערכת ה־recovery ל"אנדרואיד" (במובן הרחב מאוד… בשלב זה אפילו לינוקס לא פועל) יש מערכת אחרת שמאפשרת "לצרוב" את המכשיר. זה האנדרואיד הצהוב הזה שאתם רואים שאתם רואים בזמן download mode. מערכת הפעלה זו היא רביעית שיושבת במכשיר (לינוקס ראשון זה ה־recovery, לינוקס שני זה "אנדרואיד" והמערכת שעובדת במודם). היא יודעת לדבר עם ה־USB וכאשר אתם עושים flash בעזרת heimdell זה כאילו שאתם במכשיר ועשים dd אל תוך מחיצה.
  9. pit – רשימת המחיצות. במחשב נורמאלי, רשימת המחיצות נשמרת בתחילת הדיסק, ואז כדי לשנות מחיצות פשוט מפעילים fdisk שקורא כמה סקטורים בתחילת הדיסק. היצרנים של מכשירי arm החליטו לעשות את זה מסובך. אז כדי לעשות את זה במכשירי Galaxy S i9000 משתמשים ב־heimdell כדי לשלוח אל המכשיר את רשימת המחיצות, הרשימה הזאת כתובה ב־pitt file. אפשר למשוך אותו מהמכשיר בעזרת הפקודה
    heimdall download-pit --output blabla.pit

    אפשר למצוא קבצי pit באינטרנט, חפשו את הקובץ s1_odin_20100512.pit ותוודאו שה־md5sum שלו הוא 1d927b36d2fa807a22e64fc86b445130.

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

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

ההבדל בין מכשירי סמסונג ו"שאר העולם" הוא השימוש בפרוטוקול לא תקני עבור הדברים הנמוכים הללו. בשאר המערכות משתמשים ב־fastboot (פרוקוטול דומה לזה של adb). הקוד זמין ב־lk. זה מה שיש בשימוש במכשירי נקסוס.

עריכה:
העירו לי שכותבים אנדרואיד ולא אנדרויד אז לטובת SEO אני תיקנתי את הפוסט הזה.

by elcuco at December 03, 2014 09:19 AM

December 01, 2014

מאיר קרחילי

מצגת ההרצאה על החיים שלי עם tmux ו־vim

tmux עם tmuxinator ו־vim מהווים מרכיב עיקרי בתהליך העבודה שלי.

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

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

המצגת אודות tmux ו־vim במסגרת מפגש PyWeb-IL 40 זמינה בעמוד הרצאות ומצגות.

December 01, 2014 09:19 PM

MY RTFM

ISP is blocking port forwarding

הסאגה שלי עם ספק האינטרנט 
אני : שלום אני מנוי שלכם לפני מספר חודשים שידרגתי ל  XX מסל"ש ומזה זמן מה אני רואה שport forwarding לא עובד.
ISP: השירות שרכשת אינו כולל אפשרות לביצוע port forwarding עליך לשלם תוספת תשלום של 35% למחיר החבילה שאתה משלם עבור השירות הזה.
אני: אבל לפני השדרוג ששילמתי פחות היתה לי אפשרות לביצוע pf/
ISP: זו היתה חבילה אחרת.
מספר דברים העציבו אותי בשיחה הזאת :

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

עובר לו חודש ועוד מספר ימים, אני מנצל את ממשק הניהול בשביל להחליף לחבילה ה"מקצועית" מנוי פרטי באינטרנט XX Mb - מקצועי.
מנסה שוב , ונאדה. אני מתקשר לתמיכה הטכנית בה נאמר לי שאני מקבל כתובת מאחורי NAT (כאשר הכתובת אינה נמצאת ב rfc 1918) - אני יודע שיש מחסור בכתובת ipv4 אבל זה כבר מפחיד כי קיימת האפשרות שאני באמת משתף את הכתובת וכל פעם שאישרתי בנתב חיבור מהכתובת הזאת פתחתי פתח לצרות (גילוי נאות חיבור לשרת בדר"כ מתבצע ע"גipsec  /openvpn מרשימת כתובת מותרת).

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

בתקופה זו ניסיתי את מספר פתרונות חלופיים -

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

revese tunnel ב ssh עובד ללא שום בעיה.

openvpn עובד ללא שום בעיה (דורש הגדרה מיוחדת בשביל לחבר רשת מאחורי לקוח לרשת בצד השרת).

עריכה: שאלו אותי בשביל מה כבר צריך p/f מופעל בבית - יש לי ownclowd שעובד מצויין ונותן לי פתרון שקוף לכל הכלים שאני צריך.


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

by Boris Shtrasman (noreply@blogger.com) at December 01, 2014 10:13 AM

November 29, 2014

Liran Tal's Enginx

Drupal Performance Tip – replace views blocks with vanilla blocks

This entry is part 3 of 5 in the series Drupal Performance Tips

In the spirit of the computer video game Doom and its skill levels, we’ll review a few ways you can improve  your Drupal speed performance     and optimize for better results and server response time. These tips that we’ll cover may be at times specific to Drupal 6 versions, although     you can always learn the best practices from these examples and apply them on your own code base.

Doom

Doom skill levels: (easiest first)

1. I’m too young to die

2. Hey, not too rough

3. Hurt me plenty

4. Ultra-violence

5. Nightmare!

  This post is rated “I’m too young too die” difficulty level.

 

When we start out building Drupal websites, we gradually build functionality and a common use case is creating a view, then you might want to create some blocks, very much related to the view, so you create a block view using the Views module. Then you maybe combine it with Panels or Context, it doesn’t really matter, but essentially you’ve been using the UI tools which are for ease of use, and the overhead for that lies in quite a bit of abstraction layer which later may cost in performance. Replacing the quicklinks and help and support blocks that were used in our theme’s sidebar from being a view based block to a simple programmatiaclly created block implementation proved to reduce a sizzling amount of ~200ms to ~2ms of server time spent on doing the same operation. That accounted for about ~200ms of page load time redduction for each page load, as this item was featured in many pages consistently on our theme.


drupal_perf-3

The post Drupal Performance Tip – replace views blocks with vanilla blocks appeared first on Liran Tal's Enginx.

by lirantal at November 29, 2014 06:57 PM

לינמגזין | הבלוג של kzamir

yeoman

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

November 29, 2014 02:50 PM

November 28, 2014

לינמגזין | הבלוג של kzamir

grunt ו gulp

Grunt ו Gulp הן תוכנות להפעלת מטלות עבור Node.js. בדומה ל GNU Make ו Gradle, הן מיועדיות לבצע מטלות כמו בניה, בדיקה, אריזה והפצה. בשונה מ Make, ובדומה ל Rake ו SCons, המטלות נכתבות באותה שפת תכנות כמו התוכנה הראשית.

November 28, 2014 07:07 PM

November 24, 2014

עברית בלינוקס

שלום btrfs, אולי שנה הבאה

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


 

לאחרונה אני מרגיש שהמחשב שלי ממש, ממש, ממש איטי. דברים כמו aptitude distupgrade לוקחים כמה דקות (משהו כמו 20!) והמחשב מרגיש ממש איטי.

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

http://www.youtube.com/watch?v=-0Xa4bHcJu8

by elcuco at November 24, 2014 10:30 PM

Rabin.IO » FOSS

Setup Xdebug for remote debug over SSH

If you have PHP application you need to debug, and there is a firewall between you and the hosting server, One can use SSH to tunnel the traffic from the remote site to the local machine.

This is my notes about how to setup Netbeans with xdebug over ssh.

Setup Xdebug on the remote host

Make sure you have this lines in the xdebug.ini file

zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000

Usually on a default installation you’ll see only the first line.

Setup Netbeans for using Xdebug

Under the menu 

Tools > Options > PHP > Debugging
  change the default port if needed (e.g if port 9000 which the default is used by another application)

Netbeans-xdebug

Setup the SSH tunel to the remote host

Next we will run a tunnel to allow xdebug to connect back to the local Netbeans.

ssh user@remote-machine -R9000:127.0.0.1:9002

This tells ssh to redirect the remote port 9000 (which is the default port for xdebug) to my local machine into port 9002 (I had some other service running on my machine on port 9000).

The why it works is that Netbeans start a debug session and waits for connection (in my example on port 9002) from xdebug on the remote machines, the remote xdebug is configured to connected to IP 127.0.0.1 over port 9000, which our SSH tunnel will redirect to our local port  9002.

Xdebug Connection work flow

Xdebug Connection work flow Source: http://xdebug.org


Resources

by Rabin at November 24, 2014 03:11 PM

November 23, 2014

לינמגזין | הבלוג של kzamir

mocha ו superagent

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

November 23, 2014 04:16 PM

November 22, 2014

Guy Rutenberg

Enabling Compose-Key in GNOME 3.4

For some reason I couldn’t easily find how to enable the compose-key in Gnome 3.4. All the references I’ve found did not match the actual menus and dialogs that I saw on my system. That is including the official GNOME help pages. So I’ve decided to document it here for my future reference.

  1. Go to System Settings->Keyboard Layout.
  2. Select the Layouts tab and click Options.
  3. Under Compose key position, select the key you want to use as the compose-key.

Wikipedia has a nice table summarizing the compose-key sequences.

by Guy at November 22, 2014 06:29 PM

לינמגזין | הבלוג של kzamir

jshint ו jscs

jshint ו jscs הן שתי תוכנות עזר ל Node.js. שתיהן עוזרות לזהות שגיאות לפני הפעלת הקוד. jshint נועדה לזהות שגיאות תחביר, שגיאות שיגרמו לקוד לא לרוץ כלל ולהתריע על ארועי שגיאה. jscs נועדה לזהות בעיות שלא יתריעו על שגיאות, אבל יכולות להצביע על שגיאות לוגיות.

November 22, 2014 05:32 PM

November 21, 2014

האתר של שביט אילן

Docker – חלק שלישי

בחלק זה אציג כיצד להתקין את Docker Client במחשב שלי (Linux Mint 17). באתר התוכנה  קיים מדריך להתקנת התוכנה במגוון במרכות הפעלה. החלק הרלוונטי לגבי הוא התקנה לאובונטו 64bit‏ 14.04:

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

ב- Linux Mint 17 הקובץ usr/lib/apt/methods/https/ קיים (כלומר apt תומך ב- https url).

ולכן נותר להוסיף את המפתח הציבורי של מאגר docker:

‎‏sudo apt-KEY adv –keyserver hkp://keyserver.ubuntu.com:80 –recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

 

עתה נוסיף להפצה את מאגר המקור של docker, נרענן את רשימת המקורות ונתקין את החבילות apparmor ו- lxc-docker:

sudo sh -c "echo deb https://get.docker.com/ubuntu docker main &gt; /etc/apt/sources.list.d/docker.list"
sudo apt-get UPDATE
sudo apt-get install apparmor lxc-docker

בדיקת תקינות ההתקנה:

sudo docker -d

sudo docker run -i -t ubuntu /bin/bash
[sudo] password FOR ilan:
Unable TO find image 'ubuntu' locally
ubuntu:latest: The image you are pulling has been verified

511136ea3c5a: Pull complete
d497ad3926c8: Pull complete
ccb62158e970: Pull complete
e791be0477f2: Pull complete
3680052c0f5c: Pull complete
22093c35d77b: Pull complete
5506de2b643b: Pull complete
STATUS: Downloaded newer image FOR ubuntu:latest
root@4c4ff9500418:/#

הפקודה האחרונה לא מצאה את docker container של אובונטו בהתקנה המקומית ולכן יבאה את המרכיבים הדרושים ממאגר docker. ה- prompt שקיבלתי שייך ל- bash שרץ ב- container. ההתקנה בוצעה ועובדת כנדרש!

בפרק הבא: נעמיק את הידע בעבודה עם Docker

 

My Signature

by שביט אילן at November 21, 2014 11:00 AM

November 20, 2014

על בני אדם וחיות אחרות » תוכנה חופשית וקוד פתוח

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

by האח הגדול at November 20, 2014 01:28 PM

תוכנה חופשית בעברית

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

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

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

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

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

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

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


תויק תחת:Free Software in Israel, gov.il

by Kaplan at November 20, 2014 06:31 AM

November 18, 2014

לינמגזין | הבלוג של SML

OpenSUSE 13.2: טיפים וטריקים

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

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

November 18, 2014 07:27 PM

לראות שונה » קוד פתוח

יחידות בדיקה, כן, לא, אולי

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

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

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

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

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

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

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

יחידות בדיקה (מיד יצעקו הבודקים), לא נועדו לכך, ואני אומר להם כי הם טועים !

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

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

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

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

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

האם בדקת באמצעות ‎ /dev/full האם המערכת שלך יודעת להתמודד עם מצב בו אין מקום יותר לשמור מידע ?
רק השבוע סידרתי את MySQL שהרס טבלה כי מערכת הקבצים הגיעה ל 100% ולא היה מקום לרשום את הרשומה, אז הטבלה נהרסה.

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

יותר מזה, אתה בודק את הקוד שלך על 10,000 רשומות, הלקוח קצה שלך אבל משתמש ב10,500 רשומות, ואז יש איטיות (ב10,499 עדיין אין), איך לא ידעת להוסיף עוד רק 500 רשומות לבדיקה ? זה מה שמנהל מסוים יצעק עליך, לא ?

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

האם בכלל יש פתרון למקרי קצה כאלו ?

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

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

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

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

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

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

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

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

מוגש כחומר למחשבה.


תויק תחת:אירגונים וחברות, טכנולוגיה, פיתוח, קוד פתוח, תוכנה, תכנות Tagged: agile development, programming, software development, unit tests

by ik_5 at November 18, 2014 10:30 AM

November 16, 2014

לינוקס ותוכנה חופשית

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

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

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

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

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

תשובה: החברה לא יכולה. מי שצריך לשלם את המס הם בעלי המניות.

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

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

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

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

שחר

The post סגירת חברה, או עוד דרך שמדינת ישראל פוגעת בעסקים הקטנים שלה appeared first on לינוקס ותוכנה חופשית.

by שחר שמש at November 16, 2014 07:51 AM

November 15, 2014

לינמגזין | הבלוג של SML

שדרוג אופן-סוזה לגרסה 13.2

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

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

November 15, 2014 11:31 PM

November 14, 2014

code.openark.org » MySQL

Joining Booking.com

I'm excited to be joining Booking.com at the Netherlands in a couple weeks :)

I'm looking forward to be working with a great team and friendly people! I hope to contribute from my experience and of course be challenged by difficult problems.

Booking.com is a supporter of open source in multiple aspects, and I am looking forward to continue working with open source solutions as well as releasing open source code.

I am leaving my work at Outbrain feeling grateful for the opportunity of working at this wonderful company! I am awed and humbled by the amazing teams I've worked with, whose level of knowledge and insights I can only aspire to match. Thank you in particular to the Infrastructure team, of which I was proud to be part of.

Outbrain allowed me and others (and in fact encouraged and supported) to develop as much open source as we saw fit. This is not a minor thing: when you orient your code towards open source, you need to make generalizations which are not always providing direct benefit to the company, and which consume precious time. I hold Outbrain in the highest respect for their support for open source.

 

 

 

by shlomi at November 14, 2014 12:04 PM

November 13, 2014

הבלוג של ארתיום :: תכנה חופשית

לשרת את כל אתרי החדשות בארץ בעזרת... CppCMS

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

הפרויקט נקרא ליניקום.

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

מספר מילים על "ליניקום":

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

להלן כמה עובדות מעניינות:

  • ליניקום מבוססת על טכנולוגית CppCMS
  • המערכת משרתת כ־10,000,000 פניות המותאמות למשתמש ביום - קרי כ־115 פניות בשניה.
  • בשעות העמוסות הקצב מגיע לכ־160 פניות בשניה.
  • השרת מייצר תעבורה יוצאת ממוצעת של כ־11 מגאביט בשניה.
  • צריכת זיכרון הכוללת של המערכת (שרת וואב, בסיס נתונים, יישום, מערכת ההפעלה) הוא בסביבות 360MB
  • העומס הממוצע על המעבדים הוא כ-5%
  • השרת רץ על c1.medium instance בודד ב־Amazon EC2

המערכת רצה מאחורי lighttpd ומשתמשת ב־PosgreSQL לשמירה וניהול הנתונים בצורה אינטנסיבית, עם זאת, מרבית הנתונים הנדרשים בזמן אמת שמורים ומנוהלים בזיכרון.

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

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

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

November 13, 2014 10:31 PM

MY RTFM

GNOME מגייסת כוחות בשביל להלחם

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


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

עריכה: יש טענה כי התאגיד החליט לחוס על GNOME
"Update: Thank you for all the support that you have given us. Groupon has confirmed with the GNOME Foundation that they are going to abandon all of their 28 pending trademark applications and will proceed with a name change for their product. We could not have done this without your help!" -- http://www.gnome.org/groupon/

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

לדעתי  כל הסיפור הזה הזוי -

איך תאגיד כזה גדול לא שם לב שהם משתמשים ברכוש של אחר ?

איך  הרשם בכלל קיבל את הבקשה לרשום את השם ?



by Boris Shtrasman (noreply@blogger.com) at November 13, 2014 05:14 PM

November 12, 2014

על בני אדם וחיות אחרות » תוכנה חופשית וקוד פתוח

תם עידן. מיקרוסופט פותחת את טכנולוגיית dot.net

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

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

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

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

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

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

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

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

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

לינמגזין על הנושא

whatsup מסקרים

 

 

by האח הגדול at November 12, 2014 09:38 PM

Liran Tal's Enginx

Drupal Performance Tip – removing unused modules

This entry is part 2 of 5 in the series Drupal Performance Tips

In the spirit of the computer video game Doom and its skill levels, we’ll review a few ways you can improve         your Drupal speed performance     and optimize for better results and server response time. These tips that we’ll cover may be at times specific to Drupal 6 versions, although     you can always learn the best practices from these examples and apply them on your own code base.

Doom

Doom skill levels: (easiest first)

  1. I’m too young to die

  2. Hey, not too rough

  3. Hurt me plenty

  4. Ultra-violence

  5. Nightmare!

  This post is rated “I’m too young too die” difficulty level.

 

If you’re using a Drupal distribution which is great for kick-starting a project with many features built-in, you should still review added modules which are managed through the installation profile as they might prove un-necessary for your product as time goes and your product evolves and matures. Remember that even if you’re not using a distribution, you might have added some modules to meet a functionality, which you no longer use and you disabled through CSS, through the menus, through the theme, but you forgot all about removing the actual module. These un-used modules account for memory footprint as they are loaded through PHP and they can also account for Drupal hooks, which is even worse in terms of performance for you.

Remember to review your installed modules base on Drupal and remove any un-used functionality:

drupal_perf-2

The post Drupal Performance Tip – removing unused modules appeared first on Liran Tal's Enginx.

by lirantal at November 12, 2014 07:22 PM

November 11, 2014

תכנתת בברדקת

whatsapp 141111

בסוף התפשרתי על וטסאפ בפידגין בישביל קבוצת אמאות... זה עובד ככה: הפצה: ארץ שלב חיפוש חבילות: yaourt -Ss whatsappaur/purple-whatsapp 0.5-1 [installed] (34)    WhatsApp protocol implementation for libpurple (pidgin)aur/purple-whatsapp-git 0.3.49.ge92587e-1 (15)    WhatsApp protocol implementation for libpurple (pidgin)aur/python-yowsup-git r129.938cf1f-1 [installed: r149.d61ffb9-1] (8)    The

by CarmiT Vinik The alliance gaurd (noreply@blogger.com) at November 11, 2014 02:00 AM

November 10, 2014

code.openark.org » MySQL

Semi-automatic slave/master promotion via Pseudo GTID

Orchestrator release 1.2.7-beta now supports semi-automatic slave promotion to master upon master death, via Pseudo GTID.

orchestrator-make-master-highlighted

When the master is dead, orchestrator automatically picks the most up-to-date slaves and marks them as "Master candidates". It allows a /api/make-master call on such a slave (S), in which case it uses Pseudo GTID to enslave its siblings, and set S as read-only = 0. All we need to do is click the "Make master" button.

orchestrator-make-master-confirm

Yes, "OK". A moment later:

orchestrator-make-master-refactored

See how the two slaves 22988, 22989 are happily replicating from 22990. Turning them into 22990's slave was possible even though their shared master was dead and were stopped at different replication positions.

22990 is now writeable, and its on you to disconnect from its old master and to direct your application into this newly promoted instance.

Local master promotion

Likewise, a semi-automated solution for the corruption of a local master is in place. Consider the following, where 22989 is dead/inaccessible. 22988 and 22990 are stuck in replication:

orchestrator-make-local-master

Orchestrator detects this situation and picks the most up-to-date slave, marking it as candidate for promotion. Click "Make lock master" to get:

orchestrator-make-local-master-confirm

Sure, OK:

orchestrator-make-local-master-refactored

And now 22990 takes over instead of 22989, enslaving 22988, both running happily ever after.

 Automation

The above buttons are just convenience methods. You don't strictly need visualization/GUI for that. Everything is supported by the API, and can be used by a fully automated monitoring system. More to come in orchestrator.

 

by shlomi at November 10, 2014 05:56 AM

November 09, 2014

לראות שונה » קוד פתוח

אריקסון ו webrtc

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

אחד הדברים שמאוד נחמדים בעולם ה webrtc, זה היענות של מרבית החברות הגדולות בשוק בשביל לאמץ אותו.

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

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

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

החברה פתחה אתר בנושא, ושמה את הקוד שלה ב github, וגם הוא ברישיון פתוח – BSD.
הכלים שהיא משתמשת גם הם פתוחים, כדוגמת Gstreamer .
הם גם משתמשים במימוש של סיסקו – מימוש קוד פתוח עבור H.264, למעשה זה משהו שהם מספקים שגוגל בכלל לא.

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

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

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

כרגע יש קרב גדול על בחירת קודקים לוידאו, כאשר הקרב הוא בין H.264 לבין VP8 ובעתיד גם VP9.

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

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


תויק תחת:VoIP, אינטרנט, אירגונים וחברות, אתרי אינטרנט, טכנולוגיה, טלפוניה, כלכלה, קוד פתוח, תוכנה, תקנים, תקשורת

by ik_5 at November 09, 2014 10:43 AM

November 07, 2014

האתר של שביט אילן

Docker – חלק שני

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

מנוע Docker מורכב משני חלקים: צד שרת וצד לקוח. בצד השרת קיים Daemon שמנהל את המכלים (containers). צד הלקוח "מדבר" עם ה- Daemon (יכול לבקש לחפש, להוריד או לאחסן Container Image ועוד…)

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

הפקודה docker ללא פרמטרים מציגה את כל האפשרויות שהפקודה docker תומכת בה:

$ docker
Usage: Docker [OPTIONS] COMMAND [arg]
-H="127.0.0.1:4243": Host:port TO bind/connect TO

A self-sufficient runtime FOR linux containers.

Commands:

attach Attach TO a running container
build Build a container FROM a Dockerfile
commit CREATE a new image FROM a container's changes
diff Inspect changes on a container'
s filesystem
export Stream the contents of a container AS a tar archive
history SHOW the history of an image
images List images
import CREATE a new filesystem image FROM the contents of a tarball
info Display system-wide information
INSERT INSERT a file IN an image
inspect RETURN low-level information ON a container
KILL KILL a running container
login Register OR Login TO the Docker registry server
logs Fetch the logs of a container
port Lookup the public-facing port which IS NAT-ed TO PRIVATE_PORT
ps List containers
pull Pull an image OR a repository FROM the Docker registry server
push Push an image OR a repository TO the Docker registry server
restart Restart a running container
rm Remove a container
rmi Remove an image
run Run a command IN a new container
search Search FOR an image IN the Docker INDEX
start Start a stopped container
stop Stop a running container
tag Tag an image INTO a repository
version SHOW the Docker version information
wait Block until a container stops, then print its exit code

 

כדי לדעת איזה גרסת docker מותקנת נריץ את הפקודה הבאה:

$ docker version
Docker Emulator version 0.1.3

Emulating:
Client version: 0.5.3
Server version: 0.5.3
Go version: go1.1

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

 

Docker Hub Registry הינו מחסן (בענן) בו שמורים תמונות מראה של מכלים (container images). כדי לחפש מיכל שנקרא tutorial נריץ את הפקודה הבאה:

$docker search tutorial
Found 1 results matching your query ("tutorial")
NAME DESCRIPTION
learn/tutorial An image for the interactive tutorial

ניתן לראות שנמצאה התאמה אחת לבקשה: learn/tutorial (הערה: learn זה שם המשתמש, tutorial זה שם המיכל)

 

ניתן להוריד (מהמחסן) container image בעזרת פקודה pull. בפקודה הבאה אנו מורידים את ה- container image שנקרא tutorial

$ docker pull learn/tutorial
Pulling repository learn/tutorial from https://index.docker.io/v1
Pulling image 8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c (precise) from ubuntu
Pulling image b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc (12.10) from ubuntu
Pulling image 27cf784147099545 () from tutorial

ניתן לראות שהפקודה גרמה להורדה של מס' images (כל container image מכיל בדרך כלל מס' שכבות – layers)

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

 

הפקודה הבאה מדפיסה Hello World במיכל. כאמור הפקודה "מתניעה" את עבודת המיכל ולאחר סיום העבודה של המיכל הוא שוב מפסיק את עבודתו.

$ docker run learn/tutorial echo "hello world"
hello world

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

 

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

$ docker run learn/tutorial apt-get install -y ping
Reading package lists
Building dependency tree
The following NEW packages will be installed:
iputils-ping
0 upgraded, 1 newly installed, 0 TO remove AND 0 NOT upgraded.
Need TO get 56.1 kB of archives.
After this operation, 143 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ precise/main iputils-ping amd64 3:20101006-1ubuntu1 [56.1 kB]
debconf: delaying package configuration, since apt-utils IS NOT installed
Fetched 56.1 kB IN 1s (50.3 kB/s)
Selecting previously unselected package iputils-ping.
(Reading DATABASE 7545 files AND directories currently installed.)
Unpacking iputils-ping (FROM …/iputils-ping_3%3a20101006-1ubuntu1_amd64.deb)
Setting up iputils-ping (3:20101006-1ubuntu1)

 

כדי לשמור באופן קבוע את מצב המיכל יש לבצע commit. תחילה יש לברר את מס' המיכל (מספיק לזכור 3-4 ספרות ראשונות) ואז להריץ את פקודת ה- commit הבאה:

docker ps -l
ID IMAGE COMMAND CREATED STATUS PORTS
6982a9948422 ubuntu:12.04 apt-get install ping 1 minute ago Exit 0
you@tutorial:~$
you@tutorial:~$
you@tutorial:~$ docker commit 698 learn/ping
effb66b31edb

מהפקודה הבאה ניתן ללמוד מס' דברים: מערכת ההפעלה היא "אובונטו 12.04", מס' המיכל הוא 6982a9948422 והפקודה שנוספה למיכל היא apt-get install ping.
אנו שומרים את המצב במיכל חדש שנקרא learn/ping (שימו לב שמס' המיכל השתנה והוא עתה: effb66b31edb)

 

המיכל החדש (learn/ping) זמין לכל משתמשי הענן. נריץ בתוכו את הפקודה ping לכתובת www.google.com

$docker run learn/ping ping www.google.com
PING www.google.com (74.125.239.129) 56(84) bytes of DATA.
64 bytes FROM nuq05s02-in-f20.1e100.net (74.125.239.148): icmp_req=1 ttl=55 time=2.23 ms
64 bytes FROM nuq05s02-in-f20.1e100.net (74.125.239.148): icmp_req=2 ttl=55 time=2.30 ms
64 bytes FROM nuq05s02-in-f20.1e100.net (74.125.239.148): icmp_req=3 ttl=55 time=2.27 ms
64 bytes FROM nuq05s02-in-f20.1e100.net (74.125.239.148): icmp_req=4 ttl=55 time=2.30 ms

 

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

$ docker inspect efe
[2013/07/30 01:52:26 GET /v1.3/containers/efef/json
{
"ID": "efefdc74a1d5900d7d7a74740e5261c09f5f42b6dae58ded6a1fde1cde7f4ac5",
"Created": "2013-07-30T00:54:12.417119736Z",
"Path": "ping",
"Args": [
"www.google.com"
],
"Config": {
"Hostname": "efefdc74a1d5",
"User": "",
"Memory": 0,
"MemorySwap": 0,
"CpuShares": 0,
"AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"PortSpecs": null,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": null,
"Cmd": [
"ping",
"www.google.com"
],
"Dns": null,
"Image": "learn/ping",
"Volumes": null,
"VolumesFrom": "",
"Entrypoint": null
},
"State": {
"Running": true,
"Pid": 22249,
"ExitCode": 0,
"StartedAt": "2013-07-30T00:54:12.424817715Z",
"Ghost": false
},
"Image": "a1dbb48ce764c6651f5af98b46ed052a5f751233d731b645a6c57f91a4cb7158",
"NetworkSettings": {
"IPAddress": "172.16.42.6",
"IPPrefixLen": 24,
"Gateway": "172.16.42.1",
"Bridge": "docker0",
"PortMapping": {
"Tcp": {},
"Udp": {}
}
},
"SysInitPath": "/usr/bin/docker",
"ResolvConfPath": "/etc/resolv.conf",
"Volumes": {},
"VolumesRW": {}

ניתן ללמוד את שם ה- host, כתובת ה- IP, הפקודה שרצה, מצב הריצה של המיכל ועוד נתונים נוספים…

 

השלב האחרון יהיה לשמור את המיכל בענן (Docker Hub Registry). נעשה זאת באמצעות הפקודה

 

$ docker push learn/ping

בשלב זה ה- container image זמין בענן לכל משתמשי docker.

 

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

 

My Signature

by שביט אילן at November 07, 2014 11:00 AM

November 06, 2014

על בני אדם וחיות אחרות » תוכנה חופשית וקוד פתוח

התקנתי לשכנה שלי אובנטו

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

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

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

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

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

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

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

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

 

by האח הגדול at November 06, 2014 10:44 PM

November 05, 2014

Liran Tal's Enginx

Drupal Performance Tip – “I’m too young to die” – indexes and SQLs

This entry is part 1 of 5 in the series Drupal Performance Tips

In the spirit of the computer video game Doom and its skill levels, we’ll review a few ways you can improve your Drupal speed performance and optimize for better results and server response time. These tips that we’ll cover may be at times specific to Drupal 6 versions, although you can always learn the best practices from these examples and apply them on your own code base.

Doom

Doom

Using indexes, and proper SQL queries can boost performance by a huge factor, especially if the affected tables are very big (millions of rows). Take a look at the diff below showing a fix to a not so proper, and ill-advised use of querying the database:

drupal_perf-1

The bad performing query took anything between 6 to 60 seconds to run, depending on the data, and database load, and database’s current cache state. The newer query takes milliseconds.

The post Drupal Performance Tip – “I’m too young to die” – indexes and SQLs appeared first on Liran Tal's Enginx.

by lirantal at November 05, 2014 07:05 PM