וחייה היונה ביחד עם Lync

בשעה טובה ומצלחת קיבלתי גישה לשירות ה Lync  עבור המשתמש שלי , השירות שלי מסופק ע"י  Office365 ללא אחסון מקומי.

שם המשתמש שלי לחיבור עבור office365 הוא user@myerfm.blogspot.com והסיסמה היא secret.

 אצתי רצתי ליונה (pidgin) התקנתי את SIPE (יאפ על וינדוס) אז  :


לאחר מכן בטאב של מאפיינים מתקדמים יש למלא :

החלק החשוב זה ה UA אצלי עבד עם :
UCCAPI/15.0.4420.1017 OC/15.0.4420.1017 (Microsoft Lync)


מה לא עובד :

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

מה כן עבד :
IM
OTR עושה קולות של עובד.
חיפוש והוספת משתמשים מאנשי הקשר ב office365
 
סגור לתגובות

The Drupal Rap song – Everyday I’m Drupalin’

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

 

 

 

Lyrics:

Chorus
Everyday I’m drupalin

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

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

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

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

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

סגור לתגובות

פונקציה מונדית

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

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

הנה קוד ג'אווה סקריפט (מבוסס jQuery) קצר שאסביר אותו עוד מעט:

$('#id').html('<p>success</p>').addClass('success')

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

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

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

function init() {
  var self = this;
  return {
     callMe : function() {
       return self;
     }
  };
}

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

הרעיון לשימוש בקוד יהיה בגישה הבאה:

init().callMe().someOtherMethod() ...

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

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


תויק תחת:javascript, טכנולוגיה, פיתוח, קוד פתוח, תכנות Tagged: development, monad, monad function, programming, פונקציה מונדית, תכנות
סגור לתגובות

לשרת את כל אתרי החדשות בארץ בעזרת… 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 באות לידי ביטוי במלואן. יכולת גדילה גבוהה עם דרישות תחזוקה מינימליות, אמינות גבוהה - האם אלה שמאפשרים לדאוג לצד העסקי בלי לחשוב על בעיות ביצועים אפשריות.

סגור לתגובות

שעון קיץ בישראל ומחשבים

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

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

בזיון. מרבית הפצות לינוקס לא הספיקו לעדכן את tzdata, למשל לא Debian ולא Ubuntu יציבות קיבלו איזורי זמן נכונים (גם בעדכונים אחרונים), העדכון האחרון של Red Hat גם הוא יצא ממש לא מזמן. כמובן גם Windows לא הספיקו להוציא עדכונים - כך שגם אשתי שלא משתמשת בלינוקס התעוררה עם שעון לא תקין במחשב שלה - והוא תמיד מעודכן אצלה עד לדקה האחרונה.

אני כמובן כבר לא מדבר על יישומים שמנהלים את IANA Time Zone Database בעצמם, יישומים זניחים כמו Java או ICU וכד.

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

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

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

סגור לתגובות

טיפים והסברים לחסכון של 1000 ש"ח בשנה לבעלי כלי רכב

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

אלא אם אני רוכב באופניים. שאז זה תמיד פאן. וזה חסך לי הרבה יותר מ-1000 ש"ח בשנה.

קטגוריות: האח הגדול | סגור לתגובות

כללי זהירות לרכיבה עירונית באופניים

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

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

סעו לאט. על המדרכה.

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

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

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

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

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

הרצליה עיר נפלאה לאופניים.

העיר מכוערת, הטבע כל כך יותר יפה.  כמה שפחות לרכב בעיר, ככה יותר טוב.

קטגוריות: האח הגדול | סגור לתגובות

קבונטו 1504. הידד והתרשמות

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

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

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

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

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

סגור לתגובות

ערוץ הכנסת

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

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

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

קטגוריות: האח הגדול | סגור לתגובות

כיצד לרכוש אופניים יד שניה

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

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

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

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

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

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

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

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

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

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

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

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

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

השיפור ביכולת הפיזי הוא מגניב, כאילו שעברתי השתלת גוף.

 

להגיע לעבודה באופניים – מהוד השרון להרצליה פיתוח

1000 קילומטרים באופניים – סיכום ומסקנות

רכיבת לילה באופניים בשדות

רכיבה פתע בגשם

מהוד השרון לרמת החייל באופניים

 

קטגוריות: טיולים | סגור לתגובות

Speaking at Percona Live: Pseudo GTID and Easy Replication Topology Management

In two weeks time I will be presenting Pseudo GTID and Easy Replication Topology Management at Percona Live. From the time I submitted the proposal a LOT has been developed, experimented, deployed and used with both Pseudo GTID and with orchestrator.

In my talk I will:

  • Suggest that you skip the "to GTID or not to GTID" question and go for the lightweight Pseudo GTID
  • Show how Pseudo GTID is used in production to recover from various replication failures and server crashes
  • Do an outrageous demonstration
  • Tell you about 50,000 successful experiments and tests done in production
  • Show off orchestrator and its support for Pseudo GTID, including automated crash analysis and recovery mechanism.

I will further show how the orchestrator tooling makes for a less restrictive, more performant, less locking, non-intrusive, trusted and lightweight replication topology management solution.

orchestrator-topology-simple An anonymized topology

 

Please come by my talk!

 

סגור לתגובות

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

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

 

קטגוריות: האח הגדול | סגור לתגובות

תשע שנים כמפתח דביאן

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

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

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


תויק תחת:Debian GNU/Linux
סגור לתגובות

אנשי DBA

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

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

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

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

למשל בכל מסדי הנתונים שאני מכיר, יש בעיה עם Foreign keys. הם נשמעים טוב, אבל מוסיפים סיבוכיות בכך שהם בעצם מתורגמים לעוד פעולת select. את בעיית הביצועים הזו גיליתי לבד, את הסיבה לכך, ובכן איש DBA הסביר לי. אבל הוא באמת מבין המון דברים. הפתרון לכך פשוט, אבל זה לא נושא הפוסט :)

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

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

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


תויק תחת:טכנולוגיה, יעוץ, מסדי נתונים, פיתוח, קוד פתוח, תכנות Tagged: databases, dba, sql, sql databases, מסדי נתונים
סגור לתגובות

האם יש צורך באנשי DBA?

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

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

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

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

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


תויק תחת:טכנולוגיה, מסדי נתונים, פיתוח, קוד פתוח, תכנות Tagged: database, databases, db, dba, sql
סגור לתגובות

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

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

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

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

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

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...
סגור לתגובות

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...
סגור לתגובות

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...
סגור לתגובות

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}
סגור לתגובות

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}
סגור לתגובות

מה היה קורה אילו בוז'י היה נבחר

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

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

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

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

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

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

קטגוריות: האח הגדול, הישגי הציונות, זכויות אדם, תאגידים, תרבות הצריכה | סגור לתגובות

CVE assignment without upstream knowledge

In the past few months I’ve been dealing with aligning PHP CVE information to enable easier tracking of security fixes. The two main locations are the NEWS file which is part of each release and the changelog available on the website which is more popular (and easier to update).

Usually the CVE are assigned per PHP.net security team request or with cooperation with one of the Linux distribution’s teams (either PHP or security), as should be in a good ecosystem.

Recently I got a few notifications issued by Debian about its PHP package, which I wasn’t familiar with these CVE IDS. When checking this, I found out a few CVE assigned per 3rd party (Linux distribution, bug reporter, etc…) request without upstream knowledge. Digging deeper I found out that some CVE were assigned a month after the fixes were released, while others were only a week or two after. While this makes sure the security information is documented, it’s harder to add the information after tagging and releasing.

In another case, while discussing about a CVE for a specific bug, we found out one was already assigned per the reporter’s request but without the our or the upstream library knowledge. Even if the issue isn’t severe, upstream should get a fair chance to fix issue before making them public. Which also leads to a problem with requesting CVE IDs on a public mailing list which in some cases leads to security information leakage. We should balance transparency with some grace period for upstreams (as projects share code).


Filed under: Debian GNU/Linux, PHP
סגור לתגובות

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.

סגור לתגובות

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 עכשיו תנסו לשנות משהו. העורך פשוט איטי בטירוף.

עצוב. מאוד.

סגור לתגובות

PHP7 replaces non-free JSON extension

For many the PHP JSON extension license might look like a storm in a teacup, but for many Linux distributions the bits of the free software licenses are very important. That was the case when Debian decided (#692613) to remove the non-free JSON extension as part of the transition to PHP 5.5 in May 2013 (after the Debian 7 release).

This change was done with the help of Remi Collet (from Fedora / Red Hat) who wrote an alternative extension based on JSON-C implementation. A similar change was done by other Linux distributions, and this became the defacto standard for most Linux users.

The situation has recently changed with the acceptance of the Jakub Zelenka’s jsond RFC to replace the current non-free implementation with a free one. The change was committed to the code base on early February (Closing #63520) and expected to be released later this year as part of PHP7.


Filed under: Free software licenses, PHP
סגור לתגובות

CUPCake: sim.py -> sim.nim

So the (Python3) simulator is slllooowwwww (Kernel running at ~400KHz) and I decided to see whether there was some easy way to rectify the situation. Ultimately I'm simulating a very simple 8-bit RISC-based machine - albeit SPI-transaction-heavy for the display - and 400KHz on my 3GHz Haswell i5 is simply abysmal!

Unrelated to this issue, a few weeks ago I chanced across some discussions extolling and debating the virtues of some 'modern' languages. Having given Go[lang] a 'go' in the past - and disliking the experience immensly - I wondered if there was anything else out there that I could learn as I do enjoy learning new languages from time-to-time. And that's when I came across Nim.

What caught my eye was that is was being sold as a 'Python-like' language in respect to syntax and ease-of-use which generated Native code. Furthermore, its killer feature in my opinion is its ability to evaluate user functions at compile time and optimize accordingly.

To cut a long story short, I decided to re-implement the simulator in Nim, both as a way to learn the language and to see whether it would improve performance.

As a disclaimer: I don't yet know much Nim and my code is rubbish (e.g. I couldn't work out how to get a function-lookup hashtable working so I just went for the good ol' case-statement route for now). I basically just wrote it like i write Python and it mostly worked out okay.

At some point last night, the simulator's Nim-rewrite reached feature-parity (sans command line options) with the Python implementation (as of now depricated).

Kernel test executing on Nim simulator

I'm pretty happy with how this exercise worked out. The results are fantastic! The same kernel code is running on the nim-based (and hence native code) simulator (sim.nim, simdisplay.nim) about a factor of 10X better than the Python one! 3.5-4MHz is more like it! It's still around 10X-20X worse than the hardware should be but good enough for what I'm simulating at the moment. I can potentially eek out some more performance from it by writing code like a normal person and perhaps using an openGL-accelerated surface for the display; but that's an exercise for another time!

Nim is a great language and is a good demonstration of why Python isn't always 'good enough'. Highly recommended.

סגור לתגובות

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

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

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

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

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

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

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

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

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

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

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

סגור לתגובות

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.

סגור לתגובות

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

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

סוג ראשון – זמין בכל אנדרויד 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. יפורסם בעתיד.

סגור לתגובות

raspberry pi 2 xbmc kodi

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

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

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

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

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

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

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

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

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

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

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

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

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

 התקנת תוכנות

התקנת מערכת הפעלה עבור המחשב היא פשוטה מאוד. מורידיים image ומתקינים בהתאם להוראות באתר. קיים מגוון של מערכות הפעלה מותאמות, המפורט בדף ההורדות באתר. עבור הגיסא הקודמת, קיימת raspbmc שלצערי לא עידכנו את מערכת ההפעלה עובר החומרה החדשה. הפצת הלינוקס מבוססת דביאן, עובדת עם החומרה החדשה. עבור, מי שלא רוצה להסתבך ומעוניין אך ורק מדיה סנטר, כרגע, ההפצה הטובה ביותר היא openelec שבדף ההורדות שלה,  יש איזור המיועד עבור ה- raspberry pi 2. עם עליית התוכנה, היא כוללת אשף התקנה המאפשר חיבור לרשת האל חוטית והגדרות נוספות. אני לא כל כך חובב את התוכנה הזו, כי הם הפשיטו ממערכת הפעלה אפשרויות להתקנת תוכנות חדשות. מי שיבחר בהתקנה של kodi על גבי מערכת ההפעלה הלינוקסאית של המחשב, ימצא בהוראות ההתקנה כיצד להעלות את ה- kodi אוטמטית כשהמכונה עולה.

עבור משתמשים המנוסים קצת בלינוקס, מצאתי את הפתרון של nfs shared כפתרון היציב ביותר (והמהיר) לשיתוף קבצים מ="שרת" ביתי.

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

 

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

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

השגתי יציבות רק בחיבור קווי, כאשר המחשב הקטון מתחבר אל נתב אל חוטי באמצעות כבל. הנתב מוגדר כ- briidge עם נתב אחר. באופן זה, ניתן להעביר קבצים בקצב של 3MB לשניה. אל תניחו שכרטיס הרשת האל חוטי המונח לכם בארון יעבוד, או שכרטיס רשת שמצאתם בחנות יהיה יציב לאורך זמן. כדי לרכוש גם כרטיס רשת אל חוטי עם המחשב וכך להבטיח יציבות, או לפחות אחריות כל שהיא על האיכות. אפשר למצוא באתרי מכירות ברשת, בחיפוש של dd-wrt rj45 usb wifi tplink. אני רכשתי את הדגם הזה והוא עובד היטב, מלבד שהוא לא תומך בתקן upnp ועל כן חלק מאפשרויות הזרמת המדיה לא יעבדו בו. המחיר אמור להיות סביב ה- 90 ש"ח.

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

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

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

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

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

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

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

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

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

חלונות 10

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

 

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

 

 

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

להתקין שירות LDAP על כוס תה

היה לי קצת זמן לשרוף אז החלטתי להרים שירות LDAP עבור הבדיקות שלי .בחרתי להשתמש ב slapd שיספק לי את שירותי ההזדהות.


השירות יותקן על 192.168.1.9 עבור הארגון example, נשתמש בשם הלא חוקי example.local
התקנה ראשונית מתחילה בחבילות :

apt-get install slapd ldap-utils

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

Setting up slapd (2.4.40-3) ...

  Creating new user openldap... done.

  Creating initial configuration... done.

  Creating LDAP directory... done.

Setting up ldap-utils (2.4.40-3) ...

Processing triggers for libc-bin (2.19-13) ...


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

dpkg-reconfigure -plow slapd

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

פתחתי את /etc/defaults/slapd ושיניתי שיאזין רק מקומית :
SLAPD_SERVICES="ldap://127.0.0.1:389/ ldapi:///"


ניצור קובץ בשם access.ldif שיאפשר הרשאות :

dn: olcDatabase={1}hdb,cn=config

changetype: modify

add: olcAccess

olcAccess: {1}to attrs=loginShell,gecos

  by dn="cn=admin,dc=example,dc=local" write

  by self write

  by * read


נטען את הקובץ למערכת ע"י

ldapmodify -Y EXTERNAL -H ldapi:/// -f ./access.ldif

אנחנו מייצרים היררכיה , המשתמשים יהיו מתחת ל People,dc=example,dc=local

יצרת  קובץ People.ldif עם התוכן :
dn: ou=people,dc=example,dc=local

ou: people

description: All people in Open Solutions

objectclass: organizationalUnit


טעינת הקובץ:

ldapadd -x -D cn=admin,dc=example,dc=local -W -f ./People.ldif


יצירת משתמש  :
dn: cn=joeb,ou=People,dc=example,dc=local
objectClass: inetOrgPerson
uid: joeb
sn: Bloggs
givenName: Joe
cn: Joe Bloggs
displayName: Joe Bloggs
userPassword: pwdpwdpwd
mail: joeb@example.local
o: example
title: user
ou: second floor
בשביל למחוק את המשתמש שנוצר :

ldapdelete -x -W -D "cn=admin,dc=example,dc=local"  "cn=joeb,ou=People,dc=example,dc=local"

קטגוריות: LDAP | סגור לתגובות

‫נשים ותכנות – לרגל יום האשה הבינלאומי‬

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

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

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

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

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

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

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

 

קטגוריות: הגיגים על מחשבים, לינוקס | סגור לתגובות

למי אכפת ממערכת הבחירות הזו?

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

קטגוריות: האח הגדול | סגור לתגובות

קוד בדיקה מול term.ie

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

גיגול מהיר נתן לי את liboauthcpp מכיוון שלא יכלתי להתקין אותו הייתי צריך לעבוד קצת עקום - בניתי מקומית את הספרייה, לאחר מכן בשביל לבדוק התלנקקתי מול boost  וliboauthcpp עם מסלול מדוייק.
שמתי את ספריית ההזדהות ב /opt/oauth/libauthcpp

mkdir -p /opt/oauth/myauth/src
cp -r ~/myauth/* /opt/oauth/myauth/src/

בתוכה יצרתי קובץ CMakeFiles.txt:


cmake_minimum_required(VERSION 2.8 FATAL_ERROR) 

find_package(Boost 1.49 COMPONENTS system filesystem REQUIRED)

IF(NOT MYAUTH_TOP_LEVEL)
SET(MYAUTH_TOP_LEVEL ${CMAKE_CURRENT_SOURCE_DIR}/)
endif()
GET_FILENAME_COMPONENT(MYAUTH_TOP_LEVEL ${MYAUTH_TOP_LEVEL} ABSOLUTE)
SET (MYAUTHCPP_SRC ${MYAUTH_TOP_LEVEL}/src)

add_executable (myauth
${MYAUTHCPP_SRC}/main.cc)

include_directories(myauth /opt/oauth/liboauthcpp/include/)
target_link_libraries(
myauth /opt/oauth/liboauthcpp/build/liboauthcpp.a
boost_system
pthread

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

Find_package(boost 1.49 COMPONENTS system filesystem REQUIRED)


 יצרה את :

CMake Error at CMakeLists.txt:4 (find_package):
By not providing "Findboost.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "boost", but
CMake did not find one.

Could not find a package configuration file provided by "boost" (requested
version 1.49) with any of the following names:

boostConfig.cmake
boost-config.cmake

התוכן של src/main.cc (מתוך liboauthcpp עם מספר שינויים קטנים שלי)  בשביל לבדוק הזדהות מול term.ie :

/**
Copyright (c) 2011 Stanford University (liboauthcpp)
Copyright (C) 2011 by swatkat (swatkat.thinkdigitATgmailDOTcom) (libtwitcurl)
 
 Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

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

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

#include <iostream>
#include <liboauthcpp/liboauthcpp.h>
#include <boost/asio.hpp>

const std::string oauth_consumer_key = "key"; // Key from term.ie
const std::string oauth_consumer_secret = "secret"; // Secret from term.ie
const std::string oauth_server = "term.ie";
const std::string oauth_request_token_path ="/oauth/example/request_token.php";
const std::string oauth_access_token_path = "/oauth/example/access_token.php";
const std::string oauth_protected_path = "/oauth/example/echo_api.php"; //need to perform oauth before accessing
const std::string oauth_protected_resource_params = "method=foo&bar=baz";

//get http message body from server/path?query_string
//return http code , can throw
unsigned int getHttpMessageBody(
const std::string & request_server,
const std::string & request_path,
const std::string & query_string,
std::string & message_body);

int main (int argc , char ** argv)
{
if (argc > 1 && std::string(argv[1]) == std::string("--debug"))
{
OAuth::SetLogLevel(OAuth::LogLevelDebug);
}

OAuth::Consumer consumer(oauth_consumer_key, oauth_consumer_secret);
OAuth::Client oauth(&consumer);

std::string request_token_url = "http://" + oauth_server + oauth_request_token_path;
std::string request_token_query = oauth.getURLQueryString( OAuth::Http::Get, request_token_url);
std::string request_tokenresp;

if (200 != getHttpMessageBody(oauth_server,oauth_request_token_path,request_token_query,request_tokenresp))
{
return 1;
}
//Get access token
OAuth::Token request_token = OAuth::Token::extract( request_tokenresp );
oauth = OAuth::Client(&consumer, &request_token);

std::string access_token_url = "http://" + oauth_server + oauth_access_token_path;
std::string access_token_query = oauth.getURLQueryString( OAuth::Http::Get, access_token_url, std::string( "" ), true );
std::string access_token_resp ;

if (200 != getHttpMessageBody(oauth_server,oauth_access_token_path,access_token_query,access_token_resp))
{
return 1;
}

OAuth::KeyValuePairs access_token_resp_data = OAuth::ParseKeyValuePairs(access_token_resp);
OAuth::Token access_token = OAuth::Token::extract( access_token_resp_data );
//Access token protected resource :
OAuth::Client protected_token(&consumer, &access_token);
std::string oauth_protected_resource = "http://" + oauth_server + oauth_protected_path;
std::string protected_resource_query = protected_token.getURLQueryString(OAuth::Http::Get, oauth_protected_resource + "?" + oauth_protected_resource_params);

std::string protected_resp ;
if (200 != getHttpMessageBody(oauth_server,oauth_protected_path,protected_resource_query,protected_resp))
{
return 1;
}

std::cout << protected_resp << std::endl;

return 0;
}

unsigned int getHttpMessageBody(
const std::string & request_server,
const std::string & request_path,
const std::string & query_string,
std::string & message_body)
{
boost::asio::ip::tcp::iostream stream;
stream.connect (request_server, "http");
if (! stream)
{
std::cout << " failed to connect to " << request_server << " " << stream.error().message() << std::endl;
return 500;
}

stream << "GET " << request_path << "?" << query_string << " HTTP/1.0\r\n"
<< "Host: " << request_server << "\r\n"
<< "Accept: */*\r\n"
<< "Connection: close\r\n\r\n";

stream.flush();
std::string http_version;
unsigned int status_code;

stream >> http_version;
stream >> status_code;

if (!stream || http_version.substr(0, 5) != "HTTP/")
{
return 400;
}
if (status_code != 200)
{
return status_code;
}

std::string header;
while (std::getline(stream, header) && header != "\r")//skip all headers
{
}
//grab the conent of rdbuf
std::ostringstream ss;
ss << stream.rdbuf();
message_body = ss.str();
return status_code;
}

קטגוריות: C++, CMake | סגור לתגובות

בדיקה

בדיקה

קטגוריות: האח הגדול | סגור לתגובות

הבלוף האירני

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

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

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

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

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

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

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

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

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

 

קטגוריות: האח הגדול | סגור לתגובות

ענני


השבוע חזרתי קצת לילדות בשביל להרים סביבת עבודה נוחה יותר לבית; מפה לשם הייתי צריך להיזכר באיך מרימים שרתי דוא"ל ,שירותי קבצים (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 ועוד.
סגור לתגובות

תודה לשלומי

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

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

ההצעה שלי לפתרון השאלה איך לעשות אופטימיזציה לחישוב מספר ראשוני היא שימוש ב 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;
}

קטגוריות: לימודים, תוכנה חופשית | סגור לתגובות

תקלות תקלות תקלות

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

בחרתי ב exim4 ולא ב postfix סתם בגלל העדפה אישית באותו הרגע (לצרכים שלי שניהם עובדים) , הגדרתי שעבור עם smarthost פר משתמש :

צרות עם bind9 : 

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

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


הפתרון :
        dnssec-validation no;(במקום auto). 


צרות עם דוא"ל:

503 AUTH command used when not advertised


בהגדרה של exim4 טעיתי ושמתי כוכבית עבור מי עושים relay, מה שצריך לעשות זה להגדיר את dc_relay_domains לערך ריק.
קטגוריות: bind9, exim4 | סגור לתגובות

צרות עם 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 עבור הלקוח.
קטגוריות: openvpn, תוכנה חופשית | סגור לתגובות

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.

סגור לתגובות

‫כיצד גנבתי לעצמי את הלוגו?‬

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

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

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

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

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

קטגוריות: ספרים, ספרים דיגיטליים | סגור לתגובות

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

סגור לתגובות

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...
סגור לתגובות

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.

קטגוריות: linux, optimize, tech, tech tip, tip | סגור לתגובות

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

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

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

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

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

נ.ב.

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

http://libcello.org/home

סגור לתגובות

השתיקה היא מה שנשאר אחרי הפחד

 

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


סגור לתגובות

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.

סגור לתגובות

טיפ שימושי: 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
סגור לתגובות