קטגוריות
דעה

שקוף

היום נתקלתי בהתייחסות לשקיפות בשני מקומות:

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

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

על זאת אמר איניגו מונטויה ((הציטוט המוכר יותר הוא, כמובן: Hello! My name is Inigo Montoya! You killed my father, prepare to die)):

אינני חושב שמשמעות המילה היא המשמעות עליה אתה חושב

האם אנו באמת רוצים שקיפות במערכות המידע?

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

כן ולא

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

לא, אנו לא רוצים לדעת איך זה קורה.

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

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

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

החשוב מכל, להבהיר למה אתם מתכוונים….

קטגוריות
דעה

אולי עדיף וירוסים

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

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

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

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

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

  • מעבר מגרסת OfficeScan Enterprise ל-OfficeScan SMB של TrendMicro, דרשה הסרה ידנית של התכנה מכל תחנות העבודה והתקנה מחדש. לתשומת לב: התכנה על תחנות העבודה זהה בשתי הגרסאות, רק ממשק הניהול של השרת שונה.
  • שינוי שם השרת בסביבת McAfee, דרש התקנה מחדש של מערכת הניהול. התקנה זו דרשה עדכון של כל תחנות העבודה. פחות מ-70% מתחנות העבודה הצליחו, והיה צורך להסיר את התכנה ולהתקינה מחדש בשאר התחנות.

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

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

  • דרישות המערכת של Sophos היו כל כך גבוהות שנאלצנו להפסיק פרויקט הטמעה באמצע.
  • המערכת הסרת הרוגלות של TrendMicro לא תומכת בסביבות Windows NT ו-Windows 98 (נכון, מערכות ישנות וללא תמיכה ממיקרוסופט, אך עדיין נפוצות ופגיעות)
  • מערכת הניהול של McAfee פסקה לתפקד לאחר שדרוג ל-Internet Explorer 7.
  • אף אחת ממערכות הניהול מבוססות ה-Web לא עבדה עם דפדפן שאיננו Internet Explorer.

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

ניקטו באמצעים הבאים:

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

האנטי וירוס איננו קו ההגנה הראשון שלכם. הוא קו ההגנה האחרון.

קטגוריות
דעה

הפוסל ברשתו פוסל

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

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

קטגוריות
דעה

המסביר לצרחן

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

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

מה לזה ולמערכות מידע, ועוד בעסקים קטנים?

קטגוריות
דעה

Linux@World07 – אין בשורה לעסקים קטנים

Linux World 2007משעה 9:00 עד שעה 14:00, כמעט כל מצגת דומה לקודמתה:

החלפנו HPUX/SUN/UNISYS ב-RedHat והמערכת טסה בחצי מחיר.

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

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

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

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

לסקירה נוספת (ואוהדת יותר), ראו את מאמרו של ליאור קפלן.

ניתן להשתמש בחצי המקלדת בכדי לנווט בין כפתורי הרכיב
",e=e.removeChild(e.firstChild)):"string"==typeof o.is?e=l.createElement(a,{is:o.is}):(e=l.createElement(a),"select"===a&&(l=e,o.multiple?l.multiple=!0:o.size&&(l.size=o.size))):e=l.createElementNS(e,a),e[Ni]=t,e[Pi]=o,Pl(e,t,!1,!1),t.stateNode=e,l=Ae(a,o),a){case"iframe":case"object":case"embed":Te("load",e),u=o;break;case"video":case"audio":for(u=0;u<$a.length;u++)Te($a[u],e);u=o;break;case"source":Te("error",e),u=o;break;case"img":case"image":case"link":Te("error",e),Te("load",e),u=o;break;case"form":Te("reset",e),Te("submit",e),u=o;break;case"details":Te("toggle",e),u=o;break;case"input":A(e,o),u=M(e,o),Te("invalid",e),Ie(n,"onChange");break;case"option":u=B(e,o);break;case"select":e._wrapperState={wasMultiple:!!o.multiple},u=Uo({},o,{value:void 0}),Te("invalid",e),Ie(n,"onChange");break;case"textarea":V(e,o),u=H(e,o),Te("invalid",e),Ie(n,"onChange");break;default:u=o}Me(a,u);var s=u;for(i in s)if(s.hasOwnProperty(i)){var c=s[i];"style"===i?ze(e,c):"dangerouslySetInnerHTML"===i?(c=c?c.__html:void 0,null!=c&&Aa(e,c)):"children"===i?"string"==typeof c?("textarea"!==a||""!==c)&&X(e,c):"number"==typeof c&&X(e,""+c):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(ea.hasOwnProperty(i)?null!=c&&Ie(n,i):null!=c&&x(e,i,c,l))}switch(a){case"input":L(e),j(e,o,!1);break;case"textarea":L(e),$(e);break;case"option":null!=o.value&&e.setAttribute("value",""+P(o.value));break;case"select":e.multiple=!!o.multiple,n=o.value,null!=n?q(e,!!o.multiple,n,!1):null!=o.defaultValue&&q(e,!!o.multiple,o.defaultValue,!0);break;default:"function"==typeof u.onClick&&(e.onclick=Fe)}Ve(a,o)&&(t.effectTag|=4)}null!==t.ref&&(t.effectTag|=128)}return null;case 6:if(e&&null!=t.stateNode)Ll(e,t,e.memoizedProps,o);else{if("string"!=typeof o&&null===t.stateNode)throw Error(r(166));n=yn(yu.current),yn(bu.current),Jn(t)?(n=t.stateNode,o=t.memoizedProps,n[Ni]=t,n.nodeValue!==o&&(t.effectTag|=4)):(n=(9===n.nodeType?n:n.ownerDocument).createTextNode(o),n[Ni]=t,t.stateNode=n)}return null;case 13:return zt(vu),o=t.memoizedState,0!==(64&t.effectTag)?(t.expirationTime=n,t):(n=null!==o,o=!1,null===e?void 0!==t.memoizedProps.fallback&&Jn(t):(a=e.memoizedState,o=null!==a,n||null===a||(a=e.child.sibling,null!==a&&(i=t.firstEffect,null!==i?(t.firstEffect=a,a.nextEffect=i):(t.firstEffect=t.lastEffect=a,a.nextEffect=null),a.effectTag=8))),n&&!o&&0!==(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!==(1&vu.current)?rs===Qu&&(rs=Yu):(rs!==Qu&&rs!==Yu||(rs=Gu),0!==us&&null!==es&&(To(es,ns),Co(es,us)))),(n||o)&&(t.effectTag|=4),null);case 4:return wn(),Ol(t),null;case 10:return Zt(t),null;case 17:return It(t.type)&&Ft(),null;case 19:if(zt(vu),o=t.memoizedState,null===o)return null;if(a=0!==(64&t.effectTag),i=o.rendering,null===i){if(a)mr(o,!1);else if(rs!==Qu||null!==e&&0!==(64&e.effectTag))for(i=t.child;null!==i;){if(e=_n(i),null!==e){for(t.effectTag|=64,mr(o,!1),a=e.updateQueue,null!==a&&(t.updateQueue=a,t.effectTag|=4),null===o.lastEffect&&(t.firstEffect=null),t.lastEffect=o.lastEffect,o=t.child;null!==o;)a=o,i=n,a.effectTag&=2,a.nextEffect=null,a.firstEffect=null,a.lastEffect=null,e=a.alternate,null===e?(a.childExpirationTime=0,a.expirationTime=i,a.child=null,a.memoizedProps=null,a.memoizedState=null,a.updateQueue=null,a.dependencies=null):(a.childExpirationTime=e.childExpirationTime,a.expirationTime=e.expirationTime,a.child=e.child,a.memoizedProps=e.memoizedProps,a.memoizedState=e.memoizedState,a.updateQueue=e.updateQueue,i=e.dependencies,a.dependencies=null===i?null:{expirationTime:i.expirationTime,firstContext:i.firstContext,responders:i.responders}),o=o.sibling;return Mt(vu,1&vu.current|2),t.child}i=i.sibling}}else{if(!a)if(e=_n(i),null!==e){if(t.effectTag|=64,a=!0,n=e.updateQueue,null!==n&&(t.updateQueue=n,t.effectTag|=4),mr(o,!0),null===o.tail&&"hidden"===o.tailMode&&!i.alternate)return t=t.lastEffect=o.lastEffect,null!==t&&(t.nextEffect=null),null}else 2*ru()-o.renderingStartTime>o.tailExpiration&&1t)&&vs.set(e,t)))}}function Ur(e,t){e.expirationTimee?n:e,2>=e&&t!==e?0:e}function qr(e){if(0!==e.lastExpiredTime)e.callbackExpirationTime=1073741823,e.callbackPriority=99,e.callbackNode=$t(Vr.bind(null,e));else{var t=Br(e),n=e.callbackNode;if(0===t)null!==n&&(e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90);else{var r=Fr();if(1073741823===t?r=99:1===t||2===t?r=95:(r=10*(1073741821-t)-10*(1073741821-r),r=0>=r?99:250>=r?98:5250>=r?97:95),null!==n){var o=e.callbackPriority;if(e.callbackExpirationTime===t&&o>=r)return;n!==Yl&&Bl(n)}e.callbackExpirationTime=t,e.callbackPriority=r,t=1073741823===t?$t(Vr.bind(null,e)):Wt(r,Hr.bind(null,e),{timeout:10*(1073741821-t)-ru()}),e.callbackNode=t}}}function Hr(e,t){if(ks=0,t)return t=Fr(),No(e,t),qr(e),null;var n=Br(e);if(0!==n){if(t=e.callbackNode,(Ju&(Wu|$u))!==Hu)throw Error(r(327));if(lo(),e===es&&n===ns||Kr(e,n),null!==ts){var o=Ju;Ju|=Wu;for(var a=Yr();;)try{eo();break}catch(t){Xr(e,t)}if(Gt(),Ju=o,Bu.current=a,rs===Ku)throw t=os,Kr(e,n),To(e,n),qr(e),t;if(null===ts)switch(a=e.finishedWork=e.current.alternate,e.finishedExpirationTime=n,o=rs,es=null,o){case Qu:case Ku:throw Error(r(345));case Xu:No(e,2=n){e.lastPingedTime=n,Kr(e,n);break}}if(i=Br(e),0!==i&&i!==n)break;if(0!==o&&o!==n){e.lastPingedTime=o;break}e.timeoutHandle=Si(oo.bind(null,e),a);break}oo(e);break;case Gu:if(To(e,n),o=e.lastSuspendedTime,n===o&&(e.nextKnownPendingLevel=ro(a)),ss&&(a=e.lastPingedTime,0===a||a>=n)){e.lastPingedTime=n,Kr(e,n);break}if(a=Br(e),0!==a&&a!==n)break;if(0!==o&&o!==n){e.lastPingedTime=o;break}if(1073741823!==is?o=10*(1073741821-is)-ru():1073741823===as?o=0:(o=10*(1073741821-as)-5e3,a=ru(),n=10*(1073741821-n)-a,o=a-o,0>o&&(o=0),o=(120>o?120:480>o?480:1080>o?1080:1920>o?1920:3e3>o?3e3:4320>o?4320:1960*Uu(o/1960))-o,n=o?o=0:(a=0|l.busyDelayMs,i=ru()-(10*(1073741821-i)-(0|l.timeoutMs||5e3)),o=i<=a?0:a+o-i),10 component higher in the tree to provide a loading indicator or placeholder to display."+N(i))}rs!==Zu&&(rs=Xu),l=yr(l,i),f=a;do{switch(f.tag){case 3:u=l,f.effectTag|=4096,f.expirationTime=t;var w=Ar(f,u,t);ln(f,w); break e;case 1:u=l;var E=f.type,k=f.stateNode;if(0===(64&f.effectTag)&&("function"==typeof E.getDerivedStateFromError||null!==k&&"function"==typeof k.componentDidCatch&&(null===ms||!ms.has(k)))){f.effectTag|=4096,f.expirationTime=t;var _=Ir(f,u,t);ln(f,_);break e}}f=f.return}while(null!==f)}ts=no(ts)}catch(e){t=e;continue}break}}function Yr(){var e=Bu.current;return Bu.current=Cu,null===e?Cu:e}function Gr(e,t){eus&&(us=e)}function Jr(){for(;null!==ts;)ts=to(ts)}function eo(){for(;null!==ts&&!Gl();)ts=to(ts)}function to(e){var t=Fu(e.alternate,e,ns);return e.memoizedProps=e.pendingProps,null===t&&(t=no(e)),qu.current=null,t}function no(e){ts=e;do{var t=ts.alternate;if(e=ts.return,0===(2048&ts.effectTag)){if(t=br(t,ts,ns),1===ns||1!==ts.childExpirationTime){for(var n=0,r=ts.child;null!==r;){var o=r.expirationTime,a=r.childExpirationTime;o>n&&(n=o),a>n&&(n=a),r=r.sibling}ts.childExpirationTime=n}if(null!==t)return t;null!==e&&0===(2048&e.effectTag)&&(null===e.firstEffect&&(e.firstEffect=ts.firstEffect),null!==ts.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=ts.firstEffect),e.lastEffect=ts.lastEffect),1e?t:e}function oo(e){var t=qt();return Vt(99,ao.bind(null,e,t)),null}function ao(e,t){do lo();while(null!==gs);if((Ju&(Wu|$u))!==Hu)throw Error(r(327));var n=e.finishedWork,o=e.finishedExpirationTime;if(null===n)return null;if(e.finishedWork=null,e.finishedExpirationTime=0,n===e.current)throw Error(r(177));e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90,e.nextKnownPendingLevel=0;var a=ro(n);if(e.firstPendingTime=a,o<=e.lastSuspendedTime?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:o<=e.firstSuspendedTime&&(e.firstSuspendedTime=o-1),o<=e.lastPingedTime&&(e.lastPingedTime=0),o<=e.lastExpiredTime&&(e.lastExpiredTime=0),e===es&&(ts=es=null,ns=0),1u&&(c=u,u=l,l=c),c=Ue(w,l),f=Ue(w,u),c&&f&&(1!==k.rangeCount||k.anchorNode!==c.node||k.anchorOffset!==c.offset||k.focusNode!==f.node||k.focusOffset!==f.offset)&&(E=E.createRange(),E.setStart(c.node,c.offset),k.removeAllRanges(),l>u?(k.addRange(E),k.extend(f.node,f.offset)):(E.setEnd(f.node,f.offset),k.addRange(E)))))),E=[];for(k=w;k=k.parentNode;)1===k.nodeType&&E.push({element:k,left:k.scrollLeft,top:k.scrollTop});for("function"==typeof w.focus&&w.focus(),w=0;w=t&&e<=t}function To(e,t){var n=e.firstSuspendedTime,r=e.lastSuspendedTime;nt||0===n)&&(e.lastSuspendedTime=t),t<=e.lastPingedTime&&(e.lastPingedTime=0),t<=e.lastExpiredTime&&(e.lastExpiredTime=0)}function Co(e,t){t>e.firstPendingTime&&(e.firstPendingTime=t);var n=e.firstSuspendedTime;0!==n&&(t>=n?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:t>=e.lastSuspendedTime&&(e.lastSuspendedTime=t+1),t>e.nextKnownPendingLevel&&(e.nextKnownPendingLevel=t))}function No(e,t){var n=e.lastExpiredTime;(0===n||n>t)&&(e.lastExpiredTime=t)}function Po(e,t,n,o){var a=t.current,i=Fr(),l=su.suspense;i=jr(i,a,l);e:if(n){n=n._reactInternalFiber;t:{if(J(n)!==n||1!==n.tag)throw Error(r(170));var u=n;do{switch(u.tag){case 3:u=u.stateNode.context;break t;case 1:if(It(u.type)){u=u.stateNode.__reactInternalMemoizedMergedChildContext;break t}}u=u.return}while(null!==u);throw Error(r(171))}if(1===n.tag){var s=n.type;if(It(s)){n=Dt(n,s,u);break e}}n=u}else n=Al;return null===t.context?t.context=n:t.pendingContext=n,t=on(i,l),t.payload={element:e},o=void 0===o?null:o,null!==o&&(t.callback=o),an(a,t),Dr(a,i),i}function Oo(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function Ro(e,t){e=e.memoizedState,null!==e&&null!==e.dehydrated&&e.retryTime