New funny post about the so called professionals in the stock market…

I just published a new post at the new and improved web site.

It is a humorous post about the attitude I have twards the “experts” in the stock market and their role in our financial lives.

I describe in it the thoughts running in my head while I hire a stock adviser and how I ended up living in a sail boat for more than a year.

Anyway, the post is freshly served at blog, enjoy!

From time to time I will write such free thought posts, my main aim is to discuss technical trading on excellent investment stock picks. This will allow for the best of both worlds to increase the probability of success in investing and trading options on stocks.

הספר: עסקטן רווחים גדולים בבורסה יצא לאור

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

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

הספר החדש עסקטן, רווחים גדולים בבורסה

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

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

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

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

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

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

Candlestick.js with some new features

The Candlestick.js project on github has some new features already and others are in development.

There are 3 live demos,

  1. The first is very short, just the minimal code needed to create a nice looking chart.
  2. The second is a simple explorer with an embeded history of tickers the user looked at.
  3. The last one includes some data analysis or technical analysis, a search was done to find candles where the close price crossed the simple moving average from below to above. On these events the code to draw a purple line to highlight the event is shown.

There are a lot of small details to work on and improve the Candlestick.js project and I’m working on it as fast as I can.

One major change I hope to accomplish is switch from an object parameter with all the settings to a more general free text language spec where you’ll be able to write something like:

Panels(50,30,30) // define 3 panels with proportional sizes.

// the main candlestic panel plus a special moving average
// based on the average of the high and low.
Panel0( candlestick, sma(20), sma((h+l)/2, 20) )

// 2nd panel with MACD default values of close,12,26,9

// of course you can get crazy with customizing
// the MACD in panel1
//Panel1( macd( (h+l+c)/3,10,22,6) )


I will develop the language in the coming weeks. To use it you will write the code in a string variable or a text file and put it in the main line instead of the options object.

var options = [
Candlestick(canvasID, data, options);

Candlestick.js on github

A new open source MIT licensed javascript project for candlestick charts is on github. I started it to make it easy to create nice looking charts in modern browsers using the HTML5 canvas.

The project is called Candlestick.js and is in active development. Many features are still missing but it is easy to understand and use.

All you need is a simple historical data file similar to yahoo's finance site and you're ready to go.

Soon additional indicator types and other time frames will be added.


I need a system in place to log my reasoning when entering a trade. I just bought a very long term debit call spread on MA – that's Mastercard. I jotted down on paper the calculations while preparing for this trade and I need a permanent place to look at this important info when the market gets crazy and moves fast.

I then use my thoughts when I bought as a tool to prevent me from getting out too early or trying to hedge prematurely.

I'm not sure if this is a product on its own as in or a part of which will have several tools and this will be one of them.

Anyway, until I have this sorted out, here is my reasoning:

  1. In my home made list of ranked stocks based on Magic Formula Investing, it is in the top 20%, or in other words - the top fifth of the universe of stocks.
  2. When checking for Rule Number One criteria, this is a great company with steady multiyear returns and growth in equity and profitability.
  3. On a technical note, I usually look at long term – 3 to 5 years weekly candlestick charts and on this one I noticed a very interesting chart – It is quite boring, I didn't mean to contradict myself, this is a rare case where a predictable chart with a good growth slope and very low variability is a good thing.
  4. I guess I got tired of waiting for a temporary dip in the stock price, if this will happen, I will reassess and and might increase my position.
  5. I estimate the price to be at around 730 in a year and a half – that's a 22% more than today or 14% annualized return which is half of the conservative growth rate of the company in the previous 4 years.

I bought the Jan 2015 $700 call option and sold the Jan 2015 $730 call option, this sale is coupled with the buy so the margin requirements are limited. The default calculated price for this combo was $1005 based on the high price for the buy and the low price for the sale. I put this as a limit order at the cost of $880 and was immediately filled. I guess I should have tried a lower limit.

Anyway, the potential is the difference which is $30 x 100 divided by the cost of $880 and the potential gain is 240% in a year and a half. Perhaps sooner.

Of course, if the stock moves fast, I might add other options to protect and lock in some of the profit earlier without limiting the additional profit potential.

עמיחי היינס – אתר חדש לעצמי

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

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

אתם מוזמנים להתקשר ולצחוק עלי 052-3569713


extend office trial up to 6 months

I use microsoft office rarely, I have a customer with a Microsoft Access project.

I use it once every few months to fix or add stuff.

The trial version I used expired and I found there is a small exe that will extend the trial for another 30 days.

You can use it for up to 5 times – I've been told.

the file is located at: /host/Program Files/Common Files/Microsoft Shared/OfficeSoftwareProtectionPlatform/OSPPREARM.EXE

old Mac problems: Disk image failed to mount: Device not configured

Run /Applications/Utilities/Disk Utility.Click on “Macintosh HD” in the left column and then press the “Repair Disk Permissions” button.

Delete the file called /System/Library/Extension.kextcache

Delete the folder called /System/Library/Caches/


After these steps, disk images mounts properly

via Disk image failed to mount: Device not configured.

PHP + Apache לעומת Node.js


מאמר זה תורגם מאנגלית על ידי עמיחי היינס.

במקור זה מאמר של תומס האנטר.


זאת השוואה של תפוחים לתפוזים. PHP היא שפה בוגרת, פועלת מאחורי שרת האינטרנט Apache בתצורה של בקשה / תגובה. Node.js הוא מסגרת מבוססת JavaScript המריצה לולאת אירואים לא חוסמים ואשר פועלת בתוך מנוע V8, עם שרת אינטרנט אופציונלי הבנוי בתוכו ואז שוב, האם זה באמת השוואה של תפוחים לתפוזים? שתי הטכנולוגיות משמשות בדרך כלל להגשת דפי אינטרנט לדפדפנים.


אם אתם עוקבים אחרי הבלוג שלי לאורך השנים, הייתם יודעים שאני מעריץ גדול של PHP. השגתי את תעודת ה- PHP5 ZCE (מהנדס מוסמך Zend) לפני כמה שנים. בניתי כמה מאות אתרים מבוססי תוכן באמצעות מערכות ניהול תוכן שונות, כמו גם תריסר יישומים באמצעות מסגרות PHP שונות. היה לי ארוע מוצלח ב – 2011 ZendCon, ואפילו לימדתי Meetup PHP במשך כתשעה חודשים.


אם היית קורא את הבלוג שלי בזמן אחרון, היית גם שם לב שאני לא סותם את הפה על הדבר החדש הזה שנקרא Node.js שזה (JavaScript שלא על הדפדפן). טוב, ללא ספק, אני לא זרקתי שנים של ניסיון שלי ב- PHP לילד החדש בבלוק, נכון?


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


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


למה אני רק מכסה PHP + אפצ'י וNode.js? בכנות, אלו השפות שאני יודע הכי טוב ויש לי קוד ייצור פועל עבור כל אחד. Ruby, Python הן כמה שפות גדולות באותו מרחב זה עם עוצמות וחולשות דומות, אבל לא היתה לי ההזדמנות ללמוד אותם. JavaScript (Node.js) ו-PHP מכילות השפעות תחביריות גדולות משפת C.


יתרונות של PHP


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


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


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


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


חסרונות של PHP


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


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


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


בסך הכל, המערכת הנדרשת לתמוך ב- PHP היא מורכבת יתר על מידה בהשוואה למשהו פשוט כמו node. קודם כל צריך אפצ'י, שבו יש כמה הגדרות גלובליות, כמו גם הגדרות אתר ספציפיות. צריך גם PHP, שבו יש הגדרות php.ini  גלובליות, שחלקם יכול להיות מבוטל בזמן ריצה (אך לא הכל). יש גם חבורה של דברים ישנים שהשאירו בסביבה ויש להסיר, למשל, תמיכת Y2K (לבסוף הוסר ב5.4).


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


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


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


יתרונות של Node.js


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


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


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

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


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


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


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


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


חסרונות של Node.js


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


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


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


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


node מתשמש ב-thread אחד, למרות שזה נראה מרובה הליכים עם ביצוע אסינכרוני שהוא עושה. זה באמת לא משנה יותר מדי, מתי בפעם האחרונה צוואר הבקבוק הגדול ביותר של האפליקציה שלך היה מעבד במקום לחכות ברשת לקריאות I/O? אז, בזמן שזה יהיה מגניב להיות ריבוי תהליכים(multi-threaded), זה בדרך כלל לא יפגע ביישום.


איזה אני צריך ללמוד?

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


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


ככל הנוגע לעמידות לעתיד, אני לא משוכנע שאף אחת מהשפות תעמוד במבחני הזמן. העתיד של אפליקציות אינטרנט הוא כנראה יישומי עמוד אחד, שבו כמויות קטנות יותר של נתונים נשלחות אל מעבר לגדר וממשק הלקוח הוא האחראי על יצירת ה-HTML, באמצעות שימוש בwebsockets. לעומת זאת,PHP  לא יכול לעשות websockets כמו ש- Node.js יכול. עם זאת, מוקדם מדי לקבוע אם Node.js ינצח במלחמת השפות האסינכרוניות מונחות הארועים. בשל הפגמים העיקריים של JavaScript, שפה טובה יותר יכולה בקלות לבעוט בתחת שלה.


מצבים לדוגמה

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


האם אתה בונה איזה דמון? השתמש node.

האם אתה עושה אתר תוכן? השתמש ב-PHP.

האם ברצונך לשתף נתונים בין מבקרים? השתמש node.

האם אתה מתחיל מחפש לעשות אתר מהיר? השתמש ב-PHP.

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

האם אתה כותב תוכנה עבור לקוחות שתרוץ על מארחים משותפים? השתמש ב-PHP.

האם אתה רוצה לדחוף אירועים משרת ללקוח באמצעות websockets? השתמש node.

האם צוות שלך כבר יודע PHP? השתמש ב-PHP.

האם צוות שלך כבר יודע JavaScript  בדפדפן? node תהיה קלה יותר ללמוד.

האם אתה בונה סקריפט שורת פקודה? שניהם עובדים.


משוואה פשוטה

הנה דרך מצחיקה להסתכל על דברים … כדי לחקות את הפונקציונליות של Node.js באמצעות PHP + אפצ'י, היית צריכים כמה שירותים אחרים הפועלים בנוסף. כדי ש node תפעל כמו PHP, היית פשוט כותב קוד סינכרוני.


Node.js ≈ PHP + Apache + Memcached + Gearman – complexity


node.js secrets


הסודות של node.js

למה node.js הצליח במקום בו שרתים מבוססי JS אחרים נכשלו?


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


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

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

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


מלחמת הדפדפנים וביצועי Javascript


בתחילת שנות 2000, התחילו לפתח אפליקציות AJAX מה שהגדיל את הדרישה ממנועי ה-Javascript בדפדפנים. ספריות קוד חדשות כמו YUI, Dojo ו- jQuery איפשרו למתכנתים לעשות הרבה יותר בממשק המשתמש ולכתוב אפליקציות דפדפן שמחקות אפליקציות רגילות.


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


המרוץ לשיפור ביצועי מנועי Javascript התחמם בספטמבר 2008 כשגוגל שחררה את chrome. המנוע מאחורי הדפדפן – V8 הביס את כל האחרים. דבר זה גרם למפתחי firefox, Safari, Opera וגם Internet Explorer לשפר את מנועי ה- Javascript שלהם בדפדפנים ויצר חזית חדשה במלחמות הדפדפנים.


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

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


דפדפנים אחרים הגיבו בשיפור או כתיבה מחדש של מנועי הרצת Javascript שלהם והראו ביצועים טובים יותר מ-V8. השיפורים בללו ממשיכים לקרות גם כיום והמנוע של גוגל V8 נהנה מתרומות של המתחרים. בהשוואה למפרשים (interpreters) של שפות דינמיות אחרות על השרת כמו רובי, פייטון, PHP או Perl יש ל- Javascript מנועים עם מהדרים (Compilers) שנותנים ביצועים מאוד מהירים.


ריאן דאל, היוצר של Node.js בחר במנוע של V8 ל-Node. יש לכך יתרונות נוספים במנוע שרץ על השרת.


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

ל-Node יש עוד יתרון (גדול) בביצועים שלא קשור ישירות ל- V8 אך נגיע אליו עוד מעט.


השיקום של Javascript


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

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

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


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


שרתים שהשתמשו ב-Javascript בעבר התקשו הרבה יותר לשכנע מתכנתים לשנות את הגישה השלילית שלהם כלפי השפה. עד שהגיעה Node.js התגברה Javascript על עיקר התדמית השלילית שלה.


Node.js פותר בעיה אמיתית


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


פייטון, ג'אווה, רובי, PHP, פרל ועוד הם עדיין חלופות טובות מאוד לרוב האפליקציות הדינמיות ברשת. הם מדברים עם בסיסי נתונים, טוחנים מספרים, מאמתים נתונים, ומעבדים תבניות. הן שפות עיליות ויש כמה פלטפורמות MVC לכל אחת מהן לבניית אפליקציות מהירה. יש המשווקים את Node.js כ- Ruby on rails הבא אך זו השוואה גרועה שמפספסת את הנקודה של מה המשמעות של Node.


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

מסתבר שמה ש-Javascript יכול לעשות הוא ההפך ממה שהוא לא יכול: קלט/פלט חוסם.


קלט/פלט מבוסס ארועים

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

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

לאלו מאיתנו שהם לא מתכנתים או לא מכירים את הרעיון של לולאת הארועים, אנלוגיה יכולה לעזור.

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

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

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

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

Javascript ו- Node משתמשים בגישת לולאת הארועים ובקריאות חזרה לתקוף את הבעיה אחרת.

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

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

var result = db.query("select..");
// use result


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

db.query("select..", function (result) {
  // use result

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

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

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

כך בנוסף לשיפורים בביצועים ש Node מקבלת "בחינם" על ידי שימוש במנוע Javascript של V8 מודל לולאת הארועים מאפשרת ל- Node לשרת כמויות מסיביות של חיבורי רשת בו זמנית בצורה יעילה. במקרים רבים היא שואפת לתוצרות מבחני ביצועים של שרתי רשת בעלי reverse proxy כדוגמת Nginx (המבוסס אף הוא על לולאת ארועים)


שיתוף קוד בין הדפדפן והשרת


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

Aptana Jaxer, אחת מהדוגמאות הידועות יותר של מימוש SSJS שנעשו לאחרונה, קיוותה למשוך מתכנתי AJAX למודל הזה. בעיקרון זה רעיון טוב. אפשר להשתמש באותן סיפריות קוד לאימות נתונים בשני הצדדים, לקרוא לפונקציות Javascript על השרת מהדפדפן ולבנות מראש HTML-DOM על השרת עם סיפריות קוד של ממשק משתמש מהדפדפן לזרוז הטעינה הראשונית של דפים.

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


מסה קריטית ל Node.js


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

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

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

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


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

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

אם תחשבו על זה, Node מספקת פלטפורמת שרותים לענן, אז האם יש דרך שנוכל לעבוד ביחד? חברנו לריאן דאל מ-Node כדי לברר את זה ומסתבר ש-Node עובד מצויין על מכשיר נייד! הרבה מהקרדיט מגיע לצוות של V8 שיצרו VM מצויין ולריאן שכתב קוד יעיל שהתאים לא רק לענן אלא גם למכשירים ניידים. – Dion Almaer


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


Node הוא לא "הדבר הבא" של שום דבר

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

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


CC BY-SA 3.0