(* Content-type: application/vnd.wolfram.mathematica *) (*** Wolfram Notebook File ***) (* http://www.wolfram.com/nb *) (* CreatedBy='Mathematica 8.0' *) (*CacheID: 234*) (* Internal cache information: NotebookFileLineBreakTest NotebookFileLineBreakTest NotebookDataPosition[ 157, 7] NotebookDataLength[ 73098, 1728] NotebookOptionsPosition[ 63733, 1446] NotebookOutlinePosition[ 65775, 1503] CellTagsIndexPosition[ 65696, 1498] WindowFrame->Normal*) (* Beginning of Notebook Content *) Notebook[{ Cell[BoxData[ GraphicsBox[ TagBox[RasterBox[CompressedData[" 1:eJzt3V9sVOeZx/FIKyHFHmzPeBiDApEsERLZNEQEO8GkJEQkaLsKf2LUNsRZ KJFIIFQrF4JK1RCllqIVVSWjJm16gUTCHUjJXSxxV1nlGiGtVlqhvdiLvZi5 2Iu92IuVVvtwHp/nfc7fOWM7IeDvp1N3OPOe97znOe/xhX99z4ye/Kc3T/7d Y4899g/y3xOPP/bY/fcjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZJq9VaxsZW Uk+H61X1YXc9dNeBbajGD696+/IjZttUrIN24ttUr2F23/KadG1Zcrgi1Y/S 015VhrS8YVcs7zLaV+ywqGX2QEV6bVyl/+qnX95D1w6rl6vKCHsdHgAAAAAA AAAAD7VWq/XrX/96fHxc8xHduHPnTtm4ZXTUb9y9e7dstBhF/3nhwoUzZ87I 7s1m0/6EfvLkyf379/t9U4fTHVPGI6mPpHM5kHSe6i132KL80NJb0afa4Hqj Uf01PDwsA6vY+FLU3h9a3hxrNP7caHxdr9+Nfsp72fJko6HF1DaX4h6Oue1F w7Y2fsfZej116PJ9/afPNJunok9vRYOUN5fr9YOZc+naVQmtg3QrO96NDiRv Trk65PYjA0tVL7vXQVf/gwVDetW1OVVt2NJg175Xps+ekdebH5z+yYnjW8fG slPUt5cG0kzby2v7xK6i9tLz0V9+IA2KejOv/fyn0lJ6tpbyU7bYwEpeupf8 1PbljfcdnbaSFvUvZ/f8y3uL6iBDrT4qLe+yi+DLLn586KAdWk7kic2bsyOs ODw5wa7jAQAAAAAAAADgodBqte7cuXPmzBlLfDRHu3fv3szMjG7UZnNzcwsL C41GY8vo6NWrV6WB7Hjjxo17EWssbt68eeHChdxMSv4pjaWfGxkTExP79++X T/1GaSlbrly5kurt5MmTsl2OIuPx+YgcWgeZDXq089QuqbHdjSKqiq+BgYGh oaGKjb+q16WxnIVW+NU4ccu+bkdhlhXzerx9Nuohe15+2NbG7ygvOZyedckp p/qXn6eiweQO8ut6fTIeZNeuSkzGAV9uHY7Fw04FkQeLB2Z7ydGfdM2+dvX3 XfkqPd3Xl1sl3/7Hhw7OfXPzj3/7a+r1q7/8aXTbU9nsafvELvko2372i8+f f3lvNjI++ssP5FM5xBObN6dGmxqJdmud6MbsgXJfO17aI3vt2vdKlcYyVK2n HKVrY6uDP6ncChSNSo4yffbMsovgK/n7W99mj/LWh+c0JbR5XnF4b35wuuhX BwAAAAAAAAAAD5cNGzZcjfj0SuO/+fl5v3FhYWFubk62yPY7d+7MzMwMRLaO jZ0/f17aHzlyRJfUaT6YmxDJ4aTlvn37dN+hJI3wBmK6URrr4Sy70REuRnzo Iz81r5RdZHsqL7hy5Yrmg9mcyMbWUz5Yq9Wq54NfDg3JGekpHKvQ/qBbn6hb ztZq0kN25H7Y1sbveDfKIjf29VXcVy/35YLYzidxPiIs6qpk7k0Wx3z2utRo pFLLKtW7HKeBs+4spvr6UrNi0u3y6fr1ekGL8kE59FsfntOo6MTHH02+/tqP dr/47NTuvUcOz37xuWz8/a1vZaMPqrZP7NKIShpIM2ksL2mj7eW17+h0Ixlw azSmMVZJxmqp1rN7pqyZ5ncXr1+TgelLj5h+7Zlqbdokx33+5b16LuXttz23 Qw8hdGy57Q+9f0qTUzll2cXflTrUiqOSo6ykCLr93blPdCTSg56C/Dzwzts6 QvlpI5SiaSfyadnwpnaPbntKpwf5IAAAAAAAAADgYaerBe/cuTM0NKRRhUZ4 GsBZpKUbDx069MTmzbpaMBXwzc/Pa8go7W/cuFEUw/l8UBsbaezzQftUO5c+ rcMto6PaifzcuXOnZTryU5rJufi4U487Pj6uCx7PnTunJ5WbD87W6/I6W6vp 69P1631+ZNv1lcoHrw0Ophr413R/vx73mWbTh2Kyl3w01dcnP+X93Xix28Yo zJJT8PmgyI48Fcxpm1Q+KK/fRCVNRS25+8rGg8l95dwPRIM8Xqv5ZY8+dpSe s12VJClSh1RX0nmqDvqSQ1suM5kcWG71dMA6f/wSQo1ofW7lM1A5kfJ88LWf /1Qjpx/tfjE6v5rOUp2uB955W7M2K/LWsTENB+Uja2/2Hjlsi+YaLvh+84PT tmDt2andReOxVEsGY1Nd88HZLz5//PHHbXhFZBfNBw+9f6prex2h5YO57fW8 pAI6Bj8qHWqVUWkKuZIiWIx78fo1+UVhZdcRNjeO6Ag1edTfbNrJ+IsvyAi7 Fq1keSkAAAAAAAAAAA+LVvRNgvfu3ZuYmNC/z2tIt3PnTvmpS2Zs4xObN2sq J2/0D+m6VE1+WsgoquSDQy6ONJYP2p/ihbyR3jQf1F3kWIuLi7Va7erVq7rI 0dZPSTNdzGiLfUbcw1Hl05J8ULbIsTRH0EBnqq/Prz5bt26dZhw+5vChmG+Q YiflM6lP169P7TLd36/hoA5yFfPB3AV0RfmgT+5kSH6QMravk59arFM9H9SH l5bXwT6Vw2muJwP7s9srW3DdS3qTjVrtoiWEreirFf0ANBsqWvMoGzXs03DQ 8ms9hKbYO17aM+BCWF3C9taH54raa6R48fo1n21pNPazc7O6zK21aVPRWleL xmzYlg/qEe1wKXqxpLHlgxqMlrTXivl80Oazp3eErtHTVYc+gPN3QcmoxEqK sHVsTGNcCwf9EXWE+45O25XynWgdcofn61D2+xQAAAAAAAAAgIeB/tlfv4JQ /zauYVytVltcXPQbFxYWBgYGNB+0v7rrX8tT0V7FfNAyEVvP5TvRkEWHJyPR R5tq8iUjkf6l2czMTGrloxxaOpcGPjfcMjqqTyjtmg/qIilNcBrR1/b5aMli lEb88E/56eMqy00aGZaA2HK2W/W6xluaWWgzW4dlodsq5oPZp4zm7juZSe78 icubjS42/Wxw0J5o2lM+aMO7Ha3dS5VO3vgg9el4NaVtuTY4mBqY7jUZPffV pz+5Swhle0+LB/Wr+i5ev2bjtPlps9QutE5FjdIaG5rac7a9RWkyPy211Ghs /MUX3rv8z5qRDRU8p7c8H7QOc+klsHzQlgmXtBc+H8yekQ5ARqKncOCdt1MB XG4dskdZYRH02aSyi4Wk/rx0hDpV7EplOykfIQAAAAAAAAAAj4Bms2lfQSgs fZubm/OPDJV/pvJB2VF7aCWjva754JkzZ6Sf/c6W0VELGfdFdPuRI0f0kaFb x8a0Q13tOD4+Lsd6YvNmDf4sidB8ULboIseGW28o7S0fzF2OZOdiUUIqH8zG DdlQrDyXeSbZ3tas2S6aOWrcpmNYxXxQG/ioJXffg8mzToVBsou0+SoO127V 67bqqno+6I/72eBgbh1Sw9Dsz7Ycj6qXSpk1pLMc2TbOZqLGXhcPaupkS+2y WZUVR99sn9jll/Jle9aB/eJ3l+zxmDqBNRqTLY0NTV2xqF+ulwouK+aDucW3 AaTywa75l4WeJf3bKWi3OpN9Ptj1+ZyWDy6jCLLl9B8u+8WA2cNpoVTLPf7U V7J8hAAAAAAAAAAAPAIsQRsaGtKvF5yYmBgYGDh06JA9MlS/fPD+o/lWIx/M kt2H4+8f9GQA8/PzOh7tUJ8Uao/3tO891CTi5s2b+uWGcjo2Bn2v+eD58+dz B5YlDbL5YGrH3HytpGff4YH+/twIwy9WWpV88Fa97r/xcDJK0DbE39iYzTdn kwvrsuHRhuiLGq2N5nSNZApZPR88Gyd9vg6p4uu3N2aXczbib+7zpbOQzo7l lxB+un69dNXT4kHLBydff61ilKbrDU//4XKVKE2X2mm8ZdGY7KgPIM19wOYP Nh9sxV//t/fI4ZXng7KL1Lx6EWzLtud2VAz7yAcBAAAAAAAAAGtTK/4Kwq1j Y5oJavqmWaGu5tPleLLR54D2p/5e80HpUL8wzp6lqY21E/tIlwGObnvKf9eh PvXUnkV55MgRWyooDeTQ0ol8pN+HKNttLaHmg0UDyy3LMvLB8vWDXTtMyeaD ttDM5C7c8/ngtcHB47WatbGv82sVrH/02d+6det8EGyjWt18UI/rG7ei74JM tem1etZVdgmhjwvLFw+OJBOrKgdNRW8lUVpqqZ3lg89O7dZbY/aLz/VLDFOL Fn+w+aBstIemrjAf1CLILroksEoRss8yLT9WbifkgwAAAAAAAACAtaAVfwXh zMyMPlPU0jd91uj58+dtyV7qKwKtB83pqueDFgvqgTRHsM7t08XFRRuPNNCj yDj940n1gaX2HFTNB+3Ro7Jlfn6+68Byy9JTPnhtcPBsrTZbr2dfz0SJ3grz wVv1+pdDQ1/V67LFv75yyVdRPrhu3Tr56ZvZ9xuW54P2cNFUZVY9H8w2zo6t qHq2bDDLPvJLCP1qyq6LB0eSiVWVyVMxekvlg7oWMhWNjW57KvcBmxXzwdyQ OneQXb+vcMTlg0XfP7hldPTduU/8GLLfP1jyBX/Zatv/UaFiEVaeDzaKv4ex a1cAAAAAAAAAADxc9CsI5+fnFxcXT548qX8nHx4evnDhwo2Ifvng0NDQxMSE PoA0lQ9KS8sQq+SDGv+llsL58FEHoKv/tL00vnLliozwRpJs8YfWfFDIGO7c ueNXIH6n+WDJS/rR3GEl+WCVV0k+6BfN3Y2fMppdo/cw5oNFJXq1+FsI71Ze PDjygPJBuwX+/h/fyT5gsyQfvHj9mmzc8dIeGUP2tXVszPIvHeTsF5/LAA6f fk8OnX1Z+xGXD46/+MKze6Z8tz85cfytD8/pysHf3/pWFw9qlmdDLTmK9GBH SVVbi5D7lNHVzQePX/qtjDB3ePuOTme/cRIAAAAAAAAAgIedfQWhpWn6x3b7 QsA33njDQkNd06d/ute/6m8ZHZWN2WV62cU4zWbT8r5UztJKPqRU/yCvjwwV 9rzTmZkZffqoLT/0kaXlg3Lo8fFx2S5bNCxoRKsLH0g+KPvqGT2ofFBTMB+Q 6VNGZVRV8sHsNyR+D/lgtk1u9UpKpGXXGZhaQng3el9l8eDIg8sH9exke/Yp oyX5YPlL+tdubZDlL2nj87iu7U98/FFjQ9PiOT/UiqPKVluLkH3KaNd8sOuz TEdcPljykgb2q6xrhwAAAAAAAAAAPCxa8VcQLi4u+ocHDg8P6xI8aWPfJqYP +dTvAdy/f/+VK1ekzcLCgn5BoYZ08/Pz/hGganx8XHqomA/q3/Yto5Rd/DcJ 2sKiRrQOTgajKxwtH9Shyhvf+Ht4vmju6+nVyAdL+q+SD+ql+Tr5MFIZwCOf DxYtIZQ+/VQvnwkPKh/UYWefMlqSD859c1M6LHrteGmPZaY2yMcjtfj7QD1L 6EZcPrh9Ytf9JYRTu2U88pIe9LiNDU1Non2VbKjlR2m4/y9BtgjyUfYpo6ub D8oZlQyvyjwBAAAAAAAAAODh0oq/gnB+ft7/aV1+Xr16dWFhwS8IGh4e3r9/ /40bN3Rpoe5lsZ3GcPfyaDbnnxeamw9aWKAbbQmhPgHVZxZKn4O6uLho+aAG ZPKR/ByOaMubN29+d/ng2Vpt3bp1GjF4Pv5YST5Y1H+tcj7YiB4r6hO0p/v6 quSDP+Tni+oEkPe1KO+bcmeUqnC2/hVTpAebD+otkHrKqBSn5PsHNYnL5lyp JM4GmVqQ6+mxUusHLUfTNvJGnyy6a98r/heFXWvLB/XTrEb8JNiialcswgrz waI66P+7gPWDAAAAAAAAAIBHjz7Ez0IB+1u9vLc/ktujGnVj7hKb3E+zf3W3 BDB3DLZkKTUwG57f1w/SN2hlyPAakSpLgZaRD9riqUaSjcd3eKC/v9d8MLf/ ocwzQovyQU1LU08ZLc8HN8ZL8FKV+R7yQV+r6f7+onzQT0hRkg9WuaBFM+EB 5oMj8S3gnzIq/yzPB3PnoZ+KqXxwKJm5ez7ps3zQYnpdw7vv6LQmd9lgLpXZ 6WnmHqUkH6xYhA0r+P5B7WQo86WoqeEBAAAAAAAAAPAosZxF/zxuf6u3VXjZ jRbbae5gD3LUflKhnrbRZv4Q2TGkPrUObffUvn6QvXZeXpBe80ELR7LRpHom uSau13wwt3/poWI+qEnHUPIpo9nxH8x7RGfRqG6vOB/8dP36bGN5nxqGtPGL H4+76tmsk3EeS66OlDZ+YdoK88G9Rw73lA/OfvF5lXxQui3PB1t5TxnVpCw3 H/SL+HKNVA4xU1fN8kHfvyZ3uoRQS+QnTK9r+orywSpF8GHf8vLBKvMBAAAA AAAAAIBHSSpBKNk4EsdtuetrLDUoWoaT7S17uOzGkoU8uQlIxRMsqcYy8sHy nKXZbN52a/dyExM/wmw+mO0/dwxF+aCGLKmnjKbyQf/pb6K1n6mzfjKKBVOd 95oP+oRRVyluSK4JvexCTE36/EpJOW5uqpgNLi0kqnJBi2bCT04c/+Pf/vqz c7NVojT5dOvYmLS/eP1aSSiWTaaK8sGReJGsPWCzuXGkaz5YnsStJB/M9i9F tiWEqd5WKx+sUgTp/Be/uyRbJl9/rUqSm3sVyAcBAAAAAAAAAFizlp0Plqwf lI987HU8fq6jNTgW5YZPxk9AXfV8cCQOWWYzSwhtX/n0lvv0QH9/arHYn5Pr +OzplNVLIdtPuU4+Xb/e8h2rg30qg7EI0h96OhqYr16qT3/WFS9o0UzYPrHL wq+SkKvlVrrpMrcto6NFC9nkI43bmhtH7PGeJQ8y9Q/Y/Nm52R9UPij7Fi0h XMV8sGsR5FNNck98/FH5SWXjS/JBAAAAAAAAAADQaz746fr10kZ2yX1Nxl+7 5h8xKq8vo+d5SoODLvyyiNDHfKuVD+ou2aeM+n19PCevy/W6nsWxKK3zyd3G uCw+H+xaCjmEX4Sop3wsrsPl5MAO9Pfr+OUQryYH9tngoFXvutuuaxJT5VpJ PigDvnj9mqZpuQvT5J9vfXhu+8QuW6SpIVfRI0bln+/OfaJJlj0OtDwfbCUf sKk/x1984YeQD45ESwgnX38tu4RwdfPB8iJI509s3rz0ANJo9+w3jW4ZHZXK y88N8bepkg8CAAAAAAAAAADVaz5Y/vqqXtfoTXo4VqH9gXhx3HeRD2rIksra /KI/Oe7lvO8o9K/b0WM/7RmezWTuWV4KXQw4mYwIc1+6DNDSn4rVm44jRR8P LTsf1CJvn9ilwZNFhBYwbR0b04xp7pubWnwNqjRSnP3i89FtT2l73UUjKo23 5L19+WB5NDaSfMCmvlYrHyz/3kwdhpxXST64tC41WtCnJbI1sD4f9Os9i6yk CPakU6ntgXfetuBVRyIXUS/KL353ya6Izwcbpet/iQ4BAAAAAAAAAHi0rW4+ +OXQkKYPzWazEa13K4rGbkfxloUp30U+OBKHLJcK8kFdYJh9Bqm9vq7XNRz0 uUxPpbCI8FbBUW5HDy+VQ1gapRFP1+rpekPLenq6oCWTQVpue26HRoRz39x8 68Nzb35wWl76hXf6bYP6pFDNxeSnRYQaSGn7d+c+sU6kQ1s8WCUaG0k+YHNV 8kFpf+j9U4dPv6fDy772HZ22MyrJB3VsO17ao9mclMLmkgZw5UeR19axMW2/ kiLoldKIUIts/Z/+w2XdeOLjj1qbNll0qMM7fum3MsKS4Um5dBJ2nS0AAAAA AAAAAOAh1Wq1JqPFbl8ODcnr6b6+7OMK9fsB5dNrg4Plr98MDFhipenGxr6+ 47WafHQ7DrbkvWzZ6HI3OdyleAzT/f25eZaNwbfxO8qhLfhL7fhk9IhOHb/v X8OgoeisZXf5VDO1W/X6Z1FLi+10EdbySqFRqbyXDqVbCwqlzdlazfJHX3aL CLtWzxaC9XRBS+jqxdamTSc+/kgDPnvNfXNz75HDUhA/Wg2q5J+HT7+nX8xn L9n90PunmhtH/JI6HeH02TP3o7E9U0VjayUfsDn+4gt+pZ490bRKPrhr3yt+ VEWvX/3lT1rMrvmgX0IoZ61tLIDr+nr+5b06dZfywWUVwWbItud2WCBoLxnb s1O79Uql4suuLxmVLRqtMmEAAAAAAAAAAMDDSIOGgShfy65HG4kDEW3weKnU wxU1bBqKVtL5fS1jsocfWrNUUpY7BmuT3TH3OY0aAqb2taxK8zvZmDq71CCX XYrUCWaPomsMszFfxeoVrTsruaBd54Mdd9tzO56d2i2vLaOj2lv2AvkKSzNt r2sGi2qo7e3Ec4dhyaMd1CJavV5Fy+6yp2M1tFPI0g51Uln/RcOzNjYwK1r5 UXw1tP3yijDiQmT9VMsuLw1k/Rn5GLcWKxledjYCAAAAAAAAAIBHjOY1w8PD jUZDVzZlIzYfZ5TQHny4YJ2nWtqBfJLYiBStpcq2SW0sysv8CWb7104sJUwN siS266kURTs24i/yy41julZveRe0Kx+bdq1JyTjtBLOrQbV9+dhsGL4Tq2TF ZW4l51J0vbr279ukpmLXiWG7rKQIfhhVrlRP83YZEwYAAAAAAAAAADx0LODQ NyUNusr2kLtvqlkrqfogWxmreILfRSm6tqk4sIp7dW3ZtYemU1ST8vbZXbpe r/KW1Xe39tWvV5XpNJI3Y3udGCssQurstOCaNuZeqV6HV6WwAAAAAAAAAAAA eCQtIy0iYHogKDsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5NoJAAAAAAAAAAAAYM14 AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAfO/+BQAAAAAAAAAAAMCa8a8AAAAAAAAAAAAA 1ox/AwAAAAAAAAAAALBm/DsAAAAAAAAAAACANeM/AAAAAAAAAAAAAKwZ/wkA AAAAAAAAAABgzei0O51Ou925/x/93+h/7v/Qf9x/q/9Z+nd7qYG9iXde2pzc 3o47bEf/CE2s9VKj6Hjxgd0+rsHSfzt+VB2/59Ln4eB2bu2278+104/iAdgB ls6+3YmP1w5vlz4M9QmnEXfrxtF2R0zVzZW9k+jSjSiuWXupEKHfxPHCj7BT +iKE6xafi52sbV7q0q5bXG+7JHHp7ZK33TCtvKGOcSM3l8I+S8N1F91qZpWz UoSDWYXc9bTZGy5UouyutPa5v35+9sQzOTGtXVXDJAnzLpx+Ym64qRjfA6na 2blbm0Tv/p5qu6O58XWS7xOjCsXsxLMtDCtxCf1Jtv3phnNzt0coqh9V8l4I V87fxPF2G4ifvskzDL8QbCrHc68d/tdNA3/4RCE7bovNJrsAnXCaHWtqZ2s/ /fQPN2DyctsYE0e1yof6JoYZ5pSfKe6Ojo8TJpi/Vdp2tRJ3qrWw0zLWS3yT +BHZzWaVbYfP3G+BThhBuE06bkDWh7vY4Y7thHslvI3P282tMK/TR+i0XX9h 1OEXRHzwMAHbbuShUPFMcTdhfDw/i8K8CBchDC7c4HYeoS5uNsSn4i+dXf70 Tex+CdmRE9MjzGR/3ds2Yn8Lhg9tqO5ODW3cLHIT3y5QmJZ+xtrUCaOz6+NH mfhtZGdtfVi5rKyh8omZZpfU3dyJS+amnV3TcIKulu4/jk2/+CqHWRsmZvIg 1qv/tRNmok12O2Y4fPqqhyP5m8OOELfv2K7hX3F1wkUKd6KvZrgl3PXrhL3s t4ex0wx3WrudbuFOyCa0n3m2m5+lyYvvjutmTWJ4dj3ju8eK6G7H1NYwncOV 80f2k9qmRmpSd+ydm1OJK9QOEzWeCW6KhpnrrmOYxW1fAz9qf+ptP1y7TxM1 C7d5Yg7YlY1ngJ+V7v5I1MD2CkMJNQ/3XPJOizuzoVsP8Zm3M0O23kPzcD3t EMlZZlciHnTivd1h6donbvH4ZrTpZO3iGy5MFDdjwpj9JLRZGiacDSVZNruT 3fxt+18INpkSY7QauUvsmoYrlyx+x43CX/VOONtw69g1sKtlF9UdONwZYSra lXI3iV3xcEOF2d4JVU1UxS5SmG3u0iQmhl3txOGXKmZzO/wW8PenmxTtdmqs Np64dn5rKGuYF223SzxfO2GANm9SN6K7gOGHlTj03rHTdCcZ5mM7jM0mYVwU d1HdYPw8Skwhq6KvTaiAnzvJ6sYlj29rG1m4ccPo/cRzg0/MSDf57aKGLeFk fdnstN1gQoUTdbIS2z3nr2aY1HZ+1j78OxzeDdj9Imi7Htwg/OzuuGOFKxzu Xnfp4/3DfZiYWnap3Mm6qWxTIdxVndB54ldDO3GyNmg7ms3+9O0SrqzrKlTL Kmr1sqH5OyVZRHfDJiri5mYn7ivUJdw3dvBQqMRst10TZxE3T064MLfDRQqN QnXa/jTjy9q2EVn5fWHi1jZnXDO7E23+2BlZQcKtGCanm4mh4p3ESfipYYNN HDzcgXbIjp1vuJOtTZgXnfiudneWv9385Ai3ie+ynTyrUDZX+cRFsWLbvWCj SN2tHd+x3bjWyF1MmzM22f2daOfqz8hqnLolE1fAdxp6dvepu1MTu4TfB/EN 5foMdfJ1DXMhzGebHMkZ6I4YCpP5PRBvT9yA7maN53C8KXzkLlQYs90z7vra mMKFa4cm7p5uhwOEqeDnfjvRkZt2NkXcpEn8OrBr4npxw/QXNRzCRu/vTnfL ujG7EYY92uF/QqN4loSr0Q7n4k7apmsYqLvqYXKE//EXqG3nljihMJNsGG6A 4bZyt4hNAz8X/P2SOEO7T+L37qpaVf2+4Qq76sTN7dYI1zbcTpkDpu6AduKu DFPA3Y3xvZi4WslboGMF8fVqu9478X0cqmTV9xfXjhVOwK51OE64P21axjM8 rqa7Y0Jjdx5WXHc7hA3uKrjBdJLHS81B17FdUJtGfo7GRwi/R9zUs0KEKx6m WTzz3EXuWD1CUd2d6IYaZmoolTsJq087jMeqGgpjEy7T1g4S/uUnT2Ki2Hji EvgZHW6jeA7ZNUgMNuxlbUM9E3e4u45WTptX+ua/AAAAAAAAAAAAAKwZ/w0A AAAAAAAAAABgzfgfAAAAAAAAAAAAAGvG/wIAAAAAAAAAAABYM/4PAAAAAAAA AAAAwJrx/1oIIGU= "], {{0, 75}, {2400, 0}}, {0, 255}, ColorFunction->RGBColor], BoxForm`ImageTag["Byte", ColorSpace -> "RGB", Interleaving -> True], Selectable->False], BaseStyle->"ImageGraphics", ImageSize->Magnification[1], ImageSizeRaw->{2400, 75}, PlotRange->{{0, 2400}, {0, 75}}]], "hidefromslideshowgraphic", CellChangeTimes->{{3.4483017593296423`*^9, 3.448301769562791*^9}, { 3.4487297016867533`*^9, 3.448729710294153*^9}, {3.449486136735977*^9, 3.449486146926845*^9}, {3.449490735677544*^9, 3.4494907482045183`*^9}, { 3.473785056790244*^9, 3.4737850735465307`*^9}, {3.485608891427413*^9, 3.485608902078108*^9}, {3.516534228793694*^9, 3.516534238460294*^9}, { 3.517925345960129*^9, 3.5179253474520397`*^9}, {3.518187873028657*^9, 3.518187875044894*^9}, {3.5181990234752483`*^9, 3.5181990242399282`*^9}, { 3.518200170676401*^9, 3.5182001710513353`*^9}}, Background->None], Cell[CellGroupData[{ Cell["Using Mathematica in a scripting environment", "Title", ShowGroupOpener->False, CellChangeTimes->{{3.448190122176695*^9, 3.44819012385317*^9}, { 3.485609127497636*^9, 3.485609133015955*^9}, {3.514308355088097*^9, 3.514308374696691*^9}, 3.5146594348020153`*^9, 3.5146601881617107`*^9, 3.527928186889565*^9}], Cell["Konstantin Kouptsov", "Subtitle", CellChangeTimes->{{3.485609136120798*^9, 3.4856091511532907`*^9}, { 3.4856091945334663`*^9, 3.485609199379443*^9}, {3.4951031489375*^9, 3.49510314984375*^9}, {3.495106455296875*^9, 3.495106455453125*^9}, { 3.5143083846926413`*^9, 3.514308395249558*^9}, {3.527928262781014*^9, 3.527928266914624*^9}}], Cell["Wolfram Research", "Subsubtitle", CellChangeTimes->{ 3.483202458953512*^9, {3.495105345328125*^9, 3.495105347890625*^9}, { 3.49510644571875*^9, 3.495106448390625*^9}, {3.5143083980990458`*^9, 3.514308409442589*^9}, {3.527928270113636*^9, 3.5279282726804867`*^9}}] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["What is a script?", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.5279372620969677`*^9, 3.5279372646770353`*^9}, {3.527937726236964*^9, 3.527937729091827*^9}}], Cell["\<\ \[Bullet] Collection of commands, which are typically entered in the command \ line\ \>", "Text", CellChangeTimes->{{3.528071276266892*^9, 3.528071327447886*^9}}], Cell[TextData[{ "\[Bullet] Is input to a certain interpreter, typically ", StyleBox["sh", FontFamily->"Courier"], ", ", StyleBox["csh", FontFamily->"Courier"], " or ", StyleBox["bash", FontFamily->"Courier"] }], "Text", CellChangeTimes->{{3.5280713316239433`*^9, 3.52807136695225*^9}, { 3.528071463332561*^9, 3.528071463905425*^9}}], Cell["\<\ \[Bullet] Commands are executed sequentially, which makes the script a program\ \>", "Text", CellChangeTimes->{{3.528071756736157*^9, 3.528071778170442*^9}}], Cell["\<\ \[Bullet] Uses a (top-level) interpreter commands; does not require \ \[OpenCurlyDoubleQuote]write-compile-link-run\[CloseCurlyDoubleQuote] cycle\ \>", "Text", CellChangeTimes->{{3.528071810489959*^9, 3.528071872686603*^9}}], Cell["\<\ \[Bullet] Is a cheap way to do system programming.\ \>", "Text", CellChangeTimes->{{3.528071478114792*^9, 3.5280715016955843`*^9}, 3.528071648019425*^9, {3.52807178583427*^9, 3.528071807449296*^9}}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[TextData[{ StyleBox["Mathematica", FontSlant->"Italic"], " script" }], "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.5279372620969677`*^9, 3.5279372646770353`*^9}, {3.527937726236964*^9, 3.527937729091827*^9}, 3.5279475705478153`*^9, {3.527976383114319*^9, 3.527976392993416*^9}, {3.52807222472764*^9, 3.528072228830289*^9}}], Cell[TextData[{ StyleBox["Mathematica", FontSlant->"Italic"], " script is a collection of arbitrary ", StyleBox["Mathematica", FontSlant->"Italic"], " commands stored in a plain text file. This saves a lot of typing if these \ commands are to be executed multiple times." }], "Text", CellChangeTimes->{{3.495209008234375*^9, 3.49520915653125*^9}, 3.495209919765625*^9, 3.4952106014375*^9, {3.4952106824375*^9, 3.495210832234375*^9}, 3.514307848543872*^9, {3.514308058576482*^9, 3.514308065607885*^9}, {3.51430841745117*^9, 3.514308419642997*^9}, { 3.5149152616687326`*^9, 3.514915280523456*^9}, {3.514915328702818*^9, 3.5149153375415287`*^9}, 3.514915444638068*^9, {3.527938262546101*^9, 3.5279382749084044`*^9}, {3.527947877838442*^9, 3.5279478784698*^9}, { 3.527953944760086*^9, 3.527953996376095*^9}, {3.5279543930862017`*^9, 3.527954394538871*^9}, {3.527954596680933*^9, 3.527954609454936*^9}, { 3.527954928263288*^9, 3.527954938576614*^9}, {3.527955301474206*^9, 3.527955304286852*^9}, {3.5279736935557823`*^9, 3.527973698735704*^9}, { 3.527975492988839*^9, 3.527975494985629*^9}, {3.528071511071692*^9, 3.528071513239182*^9}, {3.528072031067816*^9, 3.52807205318195*^9}}], Cell[TextData[StyleBox["...\nvariances=Variance/@N[values];\n\ correlation=Table[Correlation[values[[i]],values[[j]]],{i,1,Length[values]},{\ j,1,Length[values]}];\nvolatility=Sqrt[variances];\n\ cov=Table[correlation[[j,k]]*volatility[[j]]*volatility[[k]],{j,1,Length[\ variances]},{k,1,Length[variances]}];\n...", FontSize->16]], "Program", CellChangeTimes->{{3.5143083099254427`*^9, 3.5143083169576473`*^9}, 3.5279376616306047`*^9, {3.527947217226388*^9, 3.5279472200979652`*^9}, { 3.527947353879228*^9, 3.5279473578850937`*^9}, {3.52797616574727*^9, 3.527976244108243*^9}}], Cell[TextData[{ StyleBox["Mathematica", FontSlant->"Italic"], " kernel (", StyleBox["math", FontFamily->"Courier"], " or ", StyleBox["MathKernel", FontFamily->"Courier"], ") is the interpreter." }], "Text", CellChangeTimes->{{3.528071585685142*^9, 3.5280716015468073`*^9}}], Cell["\<\ As of M8, script files can be made executable and started as any other \ program:\ \>", "Text", CellChangeTimes->{{3.527947199356992*^9, 3.5279472122185698`*^9}, { 3.527954307693618*^9, 3.5279543500231237`*^9}}], Cell[TextData[StyleBox["#!/usr/local/bin/MathematicaScript -script\n\n...\n\ variances=Variance/@N[values];\n\ correlation=Table[Correlation[values[[i]],values[[j]]],{i,1,Length[values]},{\ j,1,Length[values]}];\nvolatility=Sqrt[variances];\n\ cov=Table[correlation[[j,k]]*volatility[[j]]*volatility[[k]],{j,1,Length[\ variances]},{k,1,Length[variances]}];\n...", FontSize->16]], "Program", CellChangeTimes->{{3.5143083099254427`*^9, 3.5143083169576473`*^9}, 3.5279376616306047`*^9, {3.527976251863422*^9, 3.527976256197201*^9}, { 3.527976527685955*^9, 3.527976529385872*^9}}], Cell[TextData[{ "Why and how this work: see my prevous talk: ", ButtonBox["http://library.wolfram.com/infocenter/Conferences/7912/", BaseStyle->"Hyperlink", ButtonData->{ URL["http://library.wolfram.com/infocenter/Conferences/7912/"], None}, ButtonNote->"http://library.wolfram.com/infocenter/Conferences/7912/"] }], "Text", CellChangeTimes->{{3.528072260559515*^9, 3.528072286373622*^9}}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["Front End", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.5279372620969677`*^9, 3.5279372646770353`*^9}, {3.527937726236964*^9, 3.527937729091827*^9}, 3.5279475705478153`*^9, {3.527976383114319*^9, 3.527976392993416*^9}, {3.528108268010331*^9, 3.528108270608532*^9}}], Cell["\[Bullet] Journal of your work", "Text", CellChangeTimes->{{3.528107733697345*^9, 3.5281078748188257`*^9}, { 3.528108287880247*^9, 3.528108292287733*^9}, {3.528108382758231*^9, 3.528108383243824*^9}}], Cell["\<\ \[Bullet] Structured document, ready for printing\ \>", "Text", CellChangeTimes->{{3.528107733697345*^9, 3.5281078748188257`*^9}, { 3.528108287880247*^9, 3.5281083064553623`*^9}, {3.528108384987445*^9, 3.528108385419533*^9}, 3.52811122269766*^9}], Cell["\[Bullet] Interactive controls", "Text", CellChangeTimes->{{3.528107733697345*^9, 3.5281078748188257`*^9}, { 3.528108287880247*^9, 3.528108307831321*^9}, {3.5281083869873543`*^9, 3.528108387459358*^9}}], Cell["\[Bullet] Formula typesetting", "Text", CellChangeTimes->{{3.528107733697345*^9, 3.5281078748188257`*^9}, { 3.528108287880247*^9, 3.5281083093031588`*^9}, {3.528108388779217*^9, 3.528108389227338*^9}}], Cell["\[Bullet] Plots and images,...", "Text", CellChangeTimes->{{3.528107733697345*^9, 3.5281078748188257`*^9}, { 3.528108287880247*^9, 3.528108310407195*^9}, {3.528108390475237*^9, 3.528108390947196*^9}}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["Why script?", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.5279372620969677`*^9, 3.5279372646770353`*^9}, {3.527937726236964*^9, 3.527937729091827*^9}, 3.5279475705478153`*^9, {3.527976383114319*^9, 3.527976392993416*^9}}], Cell["\<\ \[Bullet] Suitable for noninteractive evaluation:\ \>", "Text", CellChangeTimes->{{3.528072706914219*^9, 3.528072741022455*^9}, { 3.5280728471322937`*^9, 3.528072879415903*^9}, {3.528072967766901*^9, 3.528072984747311*^9}, {3.528073039715383*^9, 3.5280730456004763`*^9}, { 3.52807310230977*^9, 3.528073137756215*^9}, {3.528107824069339*^9, 3.528107826324869*^9}, {3.5281079098760653`*^9, 3.528107941431361*^9}, { 3.5281081058108397`*^9, 3.528108111488378*^9}, {3.528108342680637*^9, 3.528108393611093*^9}}], Cell["\[Bullet] Does not require GUI, e.g. X", "Text", CellChangeTimes->{{3.528072706914219*^9, 3.528072741022455*^9}, { 3.5280728471322937`*^9, 3.528072879415903*^9}, {3.528072967766901*^9, 3.528072984747311*^9}, {3.528073039715383*^9, 3.5280730456004763`*^9}, { 3.52807310230977*^9, 3.528073137756215*^9}, {3.528107824069339*^9, 3.528107826324869*^9}, {3.5281079098760653`*^9, 3.528107941431361*^9}, { 3.5281081058108397`*^9, 3.528108111488378*^9}, {3.528108342680637*^9, 3.528108395491033*^9}}], Cell["\[Bullet] No document to typeset", "Text", CellChangeTimes->{{3.528072706914219*^9, 3.528072741022455*^9}, { 3.5280728471322937`*^9, 3.528072879415903*^9}, {3.528072967766901*^9, 3.528072984747311*^9}, {3.528073039715383*^9, 3.5280730456004763`*^9}, { 3.52807310230977*^9, 3.528073137756215*^9}, {3.528107824069339*^9, 3.528107826324869*^9}, {3.5281079098760653`*^9, 3.528107941431361*^9}, { 3.5281081058108397`*^9, 3.528108111488378*^9}, {3.528108342680637*^9, 3.528108397170952*^9}}], Cell["\[Bullet] No dynamics", "Text", CellChangeTimes->{{3.528072706914219*^9, 3.528072741022455*^9}, { 3.5280728471322937`*^9, 3.528072879415903*^9}, {3.528072967766901*^9, 3.528072984747311*^9}, {3.528073039715383*^9, 3.5280730456004763`*^9}, { 3.52807310230977*^9, 3.528073137756215*^9}, {3.528107824069339*^9, 3.528107826324869*^9}, {3.5281079098760653`*^9, 3.528107941431361*^9}, { 3.5281081058108397`*^9, 3.528108111488378*^9}, {3.528108342680637*^9, 3.528108399170801*^9}}], Cell["\[Bullet] No mouse interaction", "Text", CellChangeTimes->{{3.528072706914219*^9, 3.528072741022455*^9}, { 3.5280728471322937`*^9, 3.528072879415903*^9}, {3.528072967766901*^9, 3.528072984747311*^9}, {3.528073039715383*^9, 3.5280730456004763`*^9}, { 3.52807310230977*^9, 3.528073137756215*^9}, {3.528107824069339*^9, 3.528107826324869*^9}, {3.5281079098760653`*^9, 3.528107941431361*^9}, { 3.5281081058108397`*^9, 3.528108111488378*^9}, {3.528108342680637*^9, 3.528108372756364*^9}, {3.528108403922521*^9, 3.528108404418623*^9}}], Cell["\[Bullet] No graphics to display", "Text", CellChangeTimes->{{3.528072706914219*^9, 3.528072741022455*^9}, { 3.5280728471322937`*^9, 3.528072879415903*^9}, {3.528072967766901*^9, 3.528072984747311*^9}, {3.528073039715383*^9, 3.5280730456004763`*^9}, { 3.52807310230977*^9, 3.528073137756215*^9}, {3.528107824069339*^9, 3.528107826324869*^9}, {3.5281079098760653`*^9, 3.528107941431361*^9}, { 3.5281081058108397`*^9, 3.528108111488378*^9}, {3.528108342680637*^9, 3.528108372756364*^9}, {3.5281084058424883`*^9, 3.528108406282537*^9}}], Cell["\<\ \[Bullet] Smaller performance overhead.\ \>", "Text", CellChangeTimes->{{3.528073655694499*^9, 3.5280736670436563`*^9}, { 3.5281081695042143`*^9, 3.5281081718691072`*^9}, 3.528108417188698*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["Better integration within a Unix workflow", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.5279372620969677`*^9, 3.5279372646770353`*^9}, {3.527937726236964*^9, 3.527937729091827*^9}, 3.5279475705478153`*^9, {3.527976383114319*^9, 3.527976392993416*^9}, {3.5281085247838078`*^9, 3.528108528541707*^9}, 3.528111250698298*^9}], Cell["\<\ \[Bullet] Can be used on equal footing with other programs (scripts or binary \ executables)\ \>", "Text", CellChangeTimes->{{3.527947614887184*^9, 3.527947639931046*^9}, { 3.527947677266839*^9, 3.52794768265567*^9}, {3.527947784263085*^9, 3.5279478304027567`*^9}, {3.5279544208511343`*^9, 3.527954422552165*^9}, { 3.527954452992641*^9, 3.527954456477777*^9}, {3.527954765299488*^9, 3.5279547965737*^9}, {3.5279556437945127`*^9, 3.527955660461728*^9}, 3.527977236781002*^9, {3.527977434416481*^9, 3.527977436894019*^9}, { 3.528072746953536*^9, 3.5280727677206497`*^9}, {3.528073185337454*^9, 3.528073187921649*^9}, {3.5280732628230543`*^9, 3.528073360949861*^9}, { 3.5280734349999037`*^9, 3.52807344192692*^9}, {3.5281085327490997`*^9, 3.528108579362919*^9}}], Cell["\<\ \[Bullet] Called from other scripts or binaries\ \>", "Text", CellChangeTimes->{{3.527947614887184*^9, 3.527947639931046*^9}, { 3.527947677266839*^9, 3.52794768265567*^9}, {3.527947784263085*^9, 3.5279478304027567`*^9}, {3.5279544208511343`*^9, 3.527954422552165*^9}, { 3.527954452992641*^9, 3.527954456477777*^9}, {3.527954765299488*^9, 3.5279547965737*^9}, {3.5279556437945127`*^9, 3.527955660461728*^9}, 3.527977236781002*^9, {3.527977434416481*^9, 3.527977436894019*^9}, { 3.528072746953536*^9, 3.5280727677206497`*^9}, {3.528073185337454*^9, 3.528073187921649*^9}, {3.5280732628230543`*^9, 3.528073360949861*^9}, { 3.5280734349999037`*^9, 3.52807344192692*^9}, {3.5281085327490997`*^9, 3.528108581186688*^9}}], Cell["\[Bullet] exec", "Text", CellChangeTimes->{{3.527947614887184*^9, 3.527947639931046*^9}, { 3.527947677266839*^9, 3.52794768265567*^9}, {3.527947784263085*^9, 3.5279478304027567`*^9}, {3.5279544208511343`*^9, 3.527954422552165*^9}, { 3.527954452992641*^9, 3.527954456477777*^9}, {3.527954765299488*^9, 3.5279547965737*^9}, {3.5279556437945127`*^9, 3.527955660461728*^9}, 3.527977236781002*^9, {3.527977434416481*^9, 3.527977436894019*^9}, { 3.528072746953536*^9, 3.5280727677206497`*^9}, {3.528073185337454*^9, 3.528073187921649*^9}, {3.5280732628230543`*^9, 3.528073360949861*^9}, { 3.5280734349999037`*^9, 3.52807344192692*^9}, {3.5281085327490997`*^9, 3.528108584722533*^9}}], Cell["\[Bullet] Command-line arguments", "Text", CellChangeTimes->{{3.527947614887184*^9, 3.527947639931046*^9}, { 3.527947677266839*^9, 3.52794768265567*^9}, {3.527947784263085*^9, 3.5279478304027567`*^9}, {3.5279544208511343`*^9, 3.527954422552165*^9}, { 3.527954452992641*^9, 3.527954456477777*^9}, {3.527954765299488*^9, 3.5279547965737*^9}, {3.5279556437945127`*^9, 3.527955660461728*^9}, 3.527977236781002*^9, {3.527977434416481*^9, 3.527977436894019*^9}, { 3.528072746953536*^9, 3.5280727677206497`*^9}, {3.528073185337454*^9, 3.528073187921649*^9}, {3.5280732628230543`*^9, 3.528073360949861*^9}, { 3.5280734349999037`*^9, 3.52807344192692*^9}, {3.5281085327490997`*^9, 3.528108589410733*^9}}], Cell["\[Bullet] stdin, stdout, stderr", "Text", CellChangeTimes->{{3.527947614887184*^9, 3.527947639931046*^9}, { 3.527947677266839*^9, 3.52794768265567*^9}, {3.527947784263085*^9, 3.5279478304027567`*^9}, {3.5279544208511343`*^9, 3.527954422552165*^9}, { 3.527954452992641*^9, 3.527954456477777*^9}, {3.527954765299488*^9, 3.5279547965737*^9}, {3.5279556437945127`*^9, 3.527955660461728*^9}, 3.527977236781002*^9, {3.527977434416481*^9, 3.527977436894019*^9}, { 3.528072746953536*^9, 3.5280727677206497`*^9}, {3.528073185337454*^9, 3.528073187921649*^9}, {3.5280732628230543`*^9, 3.528073360949861*^9}, { 3.5280734349999037`*^9, 3.52807344192692*^9}, {3.5281085327490997`*^9, 3.528108570698992*^9}}], Cell["\[Bullet] Pipes", "Text", CellChangeTimes->{{3.527947614887184*^9, 3.527947639931046*^9}, { 3.527947677266839*^9, 3.52794768265567*^9}, {3.527947784263085*^9, 3.5279478304027567`*^9}, {3.5279544208511343`*^9, 3.527954422552165*^9}, { 3.527954452992641*^9, 3.527954456477777*^9}, {3.527954765299488*^9, 3.5279547965737*^9}, {3.5279556437945127`*^9, 3.527955660461728*^9}, 3.527977236781002*^9, {3.527977434416481*^9, 3.527977436894019*^9}, { 3.528072746953536*^9, 3.5280727677206497`*^9}, {3.528073185337454*^9, 3.528073187921649*^9}, {3.5280732628230543`*^9, 3.528073360949861*^9}, { 3.5280734349999037`*^9, 3.52807344192692*^9}, {3.5281085327490997`*^9, 3.5281085712830343`*^9}, {3.528108602177621*^9, 3.528108604641561*^9}}], Cell["\[Bullet] Capture return code", "Text", CellChangeTimes->{{3.527947614887184*^9, 3.527947639931046*^9}, { 3.527947677266839*^9, 3.52794768265567*^9}, {3.527947784263085*^9, 3.5279478304027567`*^9}, {3.5279544208511343`*^9, 3.527954422552165*^9}, { 3.527954452992641*^9, 3.527954456477777*^9}, {3.527954765299488*^9, 3.5279547965737*^9}, {3.5279556437945127`*^9, 3.527955660461728*^9}, 3.527977236781002*^9, {3.527977434416481*^9, 3.527977436894019*^9}, { 3.528072746953536*^9, 3.5280727677206497`*^9}, {3.528073185337454*^9, 3.528073187921649*^9}, {3.5280732628230543`*^9, 3.528073360949861*^9}, { 3.5280734349999037`*^9, 3.52807344192692*^9}, {3.5281085327490997`*^9, 3.528108596731736*^9}}], Cell["\[Bullet] Process/job control", "Text", CellChangeTimes->{{3.527947614887184*^9, 3.527947639931046*^9}, { 3.527947677266839*^9, 3.52794768265567*^9}, {3.527947784263085*^9, 3.5279478304027567`*^9}, {3.5279544208511343`*^9, 3.527954422552165*^9}, { 3.527954452992641*^9, 3.527954456477777*^9}, {3.527954765299488*^9, 3.5279547965737*^9}, {3.5279556437945127`*^9, 3.527955660461728*^9}, 3.527977236781002*^9, {3.527977434416481*^9, 3.527977436894019*^9}, { 3.528072746953536*^9, 3.5280727677206497`*^9}, {3.528073185337454*^9, 3.528073187921649*^9}, {3.5280732628230543`*^9, 3.528073360949861*^9}, { 3.5280734349999037`*^9, 3.52807344192692*^9}, {3.5281085327490997`*^9, 3.528108598953864*^9}}], Cell[TextData[{ "\[Bullet] ", "Scripting allows using ", StyleBox["Mathematica", FontSlant->"Italic"], " as a language for extension of system commands (along with bash, perl, \ python,...)" }], "Text", CellChangeTimes->{{3.527948359708239*^9, 3.5279484024367332`*^9}, 3.5279764613873997`*^9, {3.527976890467763*^9, 3.527976897208119*^9}, 3.527977240780862*^9}], Cell["\<\ \[Bullet] Scripting is available on Windows too, but Windows does not have a \ convenient #!-like facility.\ \>", "Text", CellChangeTimes->{{3.5279553517715263`*^9, 3.527955408341251*^9}, { 3.527955594308215*^9, 3.5279556141301117`*^9}, 3.527977242074233*^9, { 3.528073465295969*^9, 3.528073468493083*^9}, 3.5280745926903257`*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["Typical uses", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.527947433174673*^9, 3.5279474355418997`*^9}, {3.5279771686897783`*^9, 3.527977170446476*^9}}], Cell["\<\ \[Bullet] Purely computational jobs in science or industry (data mining, \ number crunching) - running long time and unattended\ \>", "Text", CellChangeTimes->{{3.527939785269948*^9, 3.527939828112537*^9}, { 3.5279400853981647`*^9, 3.527940087544303*^9}, {3.52794786896909*^9, 3.527947870837998*^9}, 3.527948072652875*^9, {3.5279481327413893`*^9, 3.52794824354735*^9}, {3.5279548205896997`*^9, 3.527954838945731*^9}, { 3.5279549491304207`*^9, 3.5279549725522423`*^9}, {3.527977181678238*^9, 3.527977183533515*^9}, 3.527977248715247*^9, 3.5279774599749527`*^9, { 3.528073734539159*^9, 3.5280737346484127`*^9}, {3.5280737735533524`*^9, 3.528073808997114*^9}, {3.5280739762880087`*^9, 3.528073999196251*^9}}], Cell["\<\ \[Bullet] high-performance clusters or cloud sevices\ \>", "Text", CellChangeTimes->{{3.527939785269948*^9, 3.527939828112537*^9}, { 3.5279400853981647`*^9, 3.527940087544303*^9}, {3.52794786896909*^9, 3.527947870837998*^9}, 3.527948072652875*^9, {3.5279481327413893`*^9, 3.5279482267327337`*^9}, {3.52794843203537*^9, 3.527948432665659*^9}, { 3.527954460351768*^9, 3.527954500809165*^9}, {3.527955478702978*^9, 3.527955480427774*^9}, {3.527956430151969*^9, 3.527956446034296*^9}, { 3.527957155022922*^9, 3.5279571655865602`*^9}, 3.5279772550088778`*^9, { 3.5280737244530563`*^9, 3.5280737259464808`*^9}, {3.528111325711124*^9, 3.528111325988657*^9}}], Cell["\<\ \[Bullet] Tasks submitted to a queue for evaluation (batch evaluation) or \ distributed among nodes in a cluster. \ \>", "Text", CellChangeTimes->{{3.527939785269948*^9, 3.527939828112537*^9}, { 3.5279400853981647`*^9, 3.527940087544303*^9}, {3.52794786896909*^9, 3.527947870837998*^9}, 3.527948072652875*^9, {3.5279481327413893`*^9, 3.5279482267327337`*^9}, {3.52794843203537*^9, 3.527948432665659*^9}, { 3.527954460351768*^9, 3.527954500809165*^9}, {3.527955478702978*^9, 3.527955480427774*^9}, {3.527956430151969*^9, 3.527956446034296*^9}, { 3.527957155022922*^9, 3.527957156443544*^9}, 3.52797725266541*^9}], Cell["\<\ \[Bullet] Automation, housekeeping tasks, running test suites e.g. from job \ scheduler (cron).\ \>", "Text", CellChangeTimes->{{3.527948266792994*^9, 3.527948307269278*^9}, { 3.5279544646288233`*^9, 3.527954469955967*^9}, {3.527955020588037*^9, 3.52795502413656*^9}, {3.527955080103127*^9, 3.527955081451379*^9}, 3.527977256960766*^9, 3.527977466661991*^9}], Cell[TextData[{ StyleBox["Advantage", FontWeight->"Bold"], ": superb computational capabilities and high-level mathematical components \ such as special functions, NDSolve, Integrate/NIntegrate, built-in linear \ algebra, statistics,..." }], "Text", CellChangeTimes->{{3.527955133062595*^9, 3.527955208967557*^9}, { 3.52797672912313*^9, 3.527976744590116*^9}, 3.527977306285282*^9, { 3.52797749919592*^9, 3.527977509863881*^9}, {3.528111335063821*^9, 3.528111336260481*^9}}], Cell[TextData[{ StyleBox["Drawback", FontWeight->"Bold"], ": noticeable kernel startup time \[LongDash] has little importance for \ large-scale long-running tasks." }], "Text", CellChangeTimes->{{3.527955085986822*^9, 3.527955129286743*^9}, { 3.527977331874992*^9, 3.527977337023514*^9}, {3.527977520206666*^9, 3.527977562266631*^9}}], Cell["", "Text", CellChangeTimes->{{3.5281080294367037`*^9, 3.528108033187378*^9}, { 3.528136799199935*^9, 3.528136799569992*^9}}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["Task automation - an example", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.5279555271655693`*^9, 3.527955533049694*^9}, {3.5279557246907883`*^9, 3.527955744718133*^9}, {3.5279569584655237`*^9, 3.527956966677075*^9}, 3.527956997218361*^9, {3.5280749413316813`*^9, 3.52807494440884*^9}}], Cell["\<\ A system which would need to run a computation periodically, not requiring \ human intervention.\ \>", "Text", CellChangeTimes->{{3.527957049723659*^9, 3.527957115199617*^9}, 3.527957234663782*^9, {3.527977587907978*^9, 3.527977589487977*^9}, 3.528074199901905*^9, 3.528111448372232*^9}], Cell["E.g. keeping an eye on my investment portfolio.", "Text", CellChangeTimes->{{3.527957431715313*^9, 3.527957472350134*^9}, { 3.527957572998527*^9, 3.5279575883425198`*^9}, {3.528111453944179*^9, 3.528111470999406*^9}}], Cell["\<\ It would actively analyze market trends and risks, and alert me when my \ attention is needed.\ \>", "Text", CellChangeTimes->{{3.527957521612327*^9, 3.527957581724494*^9}, { 3.528074254729*^9, 3.528074262995038*^9}, {3.528108641515443*^9, 3.52810865729572*^9}}], Cell["\<\ Scalable: may run on low-end linux box, but depending on sophistication of \ the algorithms may require more computing power.\ \>", "Text", CellChangeTimes->{{3.527977658043166*^9, 3.527977663824984*^9}, { 3.52797771253259*^9, 3.5279777538166018`*^9}, {3.5279777876448593`*^9, 3.5279777940769663`*^9}, {3.527977847675276*^9, 3.5279778538713923`*^9}, 3.528074287697837*^9, 3.528074391005128*^9, {3.528108667131403*^9, 3.528108687127357*^9}, {3.528111423828545*^9, 3.528111429881132*^9}}], Cell["", "Text"], Cell["Project outline:", "Text", CellChangeTimes->{{3.528136808695608*^9, 3.52813681539777*^9}, { 3.528136900860742*^9, 3.528136901442031*^9}}], Cell["\<\ \[FilledSmallCircle] Run periodically every workday after market close\ \>", "Text", CellChangeTimes->{{3.528075095428838*^9, 3.52807512204853*^9}, { 3.528075156480484*^9, 3.5280751605827312`*^9}}], Cell["\<\ \[FilledSmallCircle] Download and store quotes locally\ \>", "Text", CellChangeTimes->{{3.528075095428838*^9, 3.52807512204853*^9}, { 3.528075163918788*^9, 3.5280751773499527`*^9}, 3.528075524937261*^9}], Cell["\<\ \[FilledSmallCircle] Recalculate the value of the portfolio\ \>", "Text", CellChangeTimes->{{3.528075095428838*^9, 3.52807512204853*^9}, { 3.5280751985250874`*^9, 3.528075207588584*^9}}], Cell["\<\ \[FilledSmallCircle] Check conditions and alert by sending an email\ \>", "Text", CellChangeTimes->{{3.528075095428838*^9, 3.52807512204853*^9}, { 3.528075461886148*^9, 3.528075488183846*^9}, {3.5281369106759977`*^9, 3.528136933928693*^9}}], Cell["", "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["Job scheduler", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.527957484126934*^9, 3.527957490548595*^9}, 3.5279778778320704`*^9}], Cell[TextData[{ StyleBox["cron", FontFamily->"Courier", FontSize->18], " is a time-based unix job scheduler, responsible for system housekeeping \ tasks (compressing logs, backups, cleaning up junk in temp dir, running \ indexers)." }], "Text", CellChangeTimes->{{3.527957657726321*^9, 3.5279577559480762`*^9}, { 3.527958616151499*^9, 3.527958621964335*^9}, {3.527958718044508*^9, 3.527958721779196*^9}, 3.5279779805194483`*^9, {3.5279780616802683`*^9, 3.527978074579254*^9}, {3.527978244413042*^9, 3.527978246595303*^9}, { 3.528074445419174*^9, 3.528074459023438*^9}}], Cell["\<\ Runs as a daemon (or system service) on the background \[Dash] not attached \ to a console\ \>", "Text", CellChangeTimes->{{3.5279587240263863`*^9, 3.527958743344776*^9}, { 3.5280744465616217`*^9, 3.5280744621111603`*^9}, {3.528075580678286*^9, 3.528075585027638*^9}, {3.528075677857876*^9, 3.528075686586636*^9}}], Cell["\<\ As part of the operation, cron daemon can run user-specified tasks.\ \>", "Text", CellChangeTimes->{{3.527958767966126*^9, 3.527958775725894*^9}, { 3.527958815146164*^9, 3.527958824715041*^9}, {3.5279588694055*^9, 3.527958870861165*^9}, {3.52797826542901*^9, 3.527978266593505*^9}, { 3.5280744513067408`*^9, 3.528074463615283*^9}}], Cell[TextData[{ StyleBox["crontab", FontFamily->"Courier", FontSize->18], " is used to specify when and what is to be run" }], "Text", CellChangeTimes->{{3.5279588268889093`*^9, 3.527958852606613*^9}, { 3.527978131169414*^9, 3.527978159235077*^9}, {3.527979904275496*^9, 3.5279799164008017`*^9}, 3.528074452569302*^9, 3.528075591229847*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["Job scheduler - setting up", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.527959145095186*^9, 3.527959151219049*^9}, {3.52811153449584*^9, 3.528111535141087*^9}}], Cell["See user\[CloseCurlyQuote]s crontab entries:", "Text", CellChangeTimes->{{3.5279588552861834`*^9, 3.527958876844255*^9}, { 3.527979929019273*^9, 3.527979931799238*^9}}], Cell[TextData[StyleBox["\nkkouptsov@math~$ crontab -l\n\n# Edit this file to \ introduce tasks to be run by cron.\n#\n# Each task to run has to be defined \ through a single line\n# indicating with different fields when the task will \ be run\n# and what command to run for the task\n#\n# To define the time you \ can provide concrete values for\n# minute (m), hour (h), day of month (dom), \ month (mon),\n# and day of week (dow) or use '*' in these fields (for \ 'any').#\n# Notice that tasks will be started based on the cron's system\n# \ daemon's notion of time and timezones.\n#\n# Output of the crontab jobs \ (including errors) is sent through\n# email to the user the crontab file \ belongs to (unless redirected).\n#\n# For example, you can run a backup of \ all your user accounts\n# at 5 a.m every week with:\n# 0 5 * * 1 tar -zcf \ /var/backups/home.tgz /home/\n#\n# For more information see the manual pages \ of crontab(5) and cron(8)\n#\n# m h dom mon dow command\n", FontSize->18]], "Program", CellChangeTimes->{{3.5143083099254427`*^9, 3.5143083169576473`*^9}, { 3.5279589020511637`*^9, 3.527958958028846*^9}, {3.527959019033865*^9, 3.527959020257509*^9}, 3.528075606498405*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["Adding a new task", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.527959145095186*^9, 3.527959151219049*^9}, {3.5279797938890038`*^9, 3.527979824977625*^9}, {3.528111542775573*^9, 3.5281115650599833`*^9}}], Cell["\<\ kkouptsov@math~$ crontab -e # m h dom mon dow command 27 18 * * 1-5 /home/kkouptsov/bin/update\ \>", "Program", CellChangeTimes->{{3.5143083099254427`*^9, 3.5143083169576473`*^9}, { 3.5279589020511637`*^9, 3.5279589906659737`*^9}, 3.5279590864042273`*^9, 3.527959753886307*^9, {3.527978492928211*^9, 3.5279784933004713`*^9}}], Cell["", "Text"], Cell[TextData[{ "Putting \[OpenCurlyQuote]", StyleBox[">/dev/null 2>&1", "InlineProgram"], "\[CloseCurlyQuote] at the end will redirect stdin/stdout:" }], "Text", CellChangeTimes->{{3.5279590764839163`*^9, 3.5279590804814262`*^9}, { 3.527959199657201*^9, 3.527959210582966*^9}, {3.527959302055307*^9, 3.527959304964905*^9}, {3.52795943823394*^9, 3.527959440408362*^9}, { 3.5279594747429943`*^9, 3.527959562847682*^9}, {3.527978382018055*^9, 3.527978390141756*^9}, {3.527980076859932*^9, 3.5279801070715227`*^9}}], Cell["\<\ kkouptsov@math~$ crontab -e 27 18 * * 1-5 /home/kkouptsov/bin/update >/dev/null 2>&1\ \>", "Program", CellChangeTimes->{{3.5143083099254427`*^9, 3.5143083169576473`*^9}, { 3.5279589020511637`*^9, 3.527958958028846*^9}, {3.527959009746023*^9, 3.527959088192938*^9}, 3.527959757355214*^9, {3.527978496069009*^9, 3.5279784964521914`*^9}}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[TextData[{ "The ", StyleBox["update", FontFamily->"Courier"], " script" }], "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.5279598411908283`*^9, 3.527959848394677*^9}, {3.527961337155642*^9, 3.5279613376411133`*^9}}], Cell[TextData[{ "The ", StyleBox["update", FontFamily->"Courier", FontSize->18], " script could be a ", StyleBox["Mathematica", FontSlant->"Italic"], " script." }], "Text", CellChangeTimes->{{3.527980423619416*^9, 3.527980466253932*^9}}], Cell["But we may also want to do some more settings:", "Text", CellChangeTimes->{{3.5279608530228367`*^9, 3.527960853349403*^9}, { 3.527979128100223*^9, 3.52797914890357*^9}, {3.527980441920766*^9, 3.527980443712117*^9}, {3.527980478119913*^9, 3.527980479196982*^9}, { 3.5280770188133698`*^9, 3.528077026577262*^9}}], Cell["\<\ #!/bin/bash export PATH=/home/kkouptsov/bin:/bin/:/usr/bin:/usr/local/bin export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib cd /home/kkouptsov/invest exec ./do-update\ \>", "Program", CellChangeTimes->{{3.5143083099254427`*^9, 3.5143083169576473`*^9}, { 3.527959926896695*^9, 3.527959948057172*^9}, {3.527960023733564*^9, 3.527960068918066*^9}, {3.5279606569354553`*^9, 3.52796065730515*^9}, { 3.527960719972197*^9, 3.527960753358747*^9}}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[TextData[{ "The ", StyleBox["update", FontFamily->"Courier"], " script\[Dash]2" }], "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.5279598411908283`*^9, 3.527959848394677*^9}, {3.527961337155642*^9, 3.5279613376411133`*^9}, {3.527979240201934*^9, 3.52797925090259*^9}}], Cell["\<\ For a system without X windows one may encounter the following:\ \>", "Text", CellChangeTimes->{{3.5279612092538843`*^9, 3.527961248184908*^9}, { 3.527979257384561*^9, 3.5279792643968067`*^9}, {3.528077095025012*^9, 3.528077102062385*^9}}], Cell[TextData[StyleBox["kkouptsov@s50:~$ math\nMathematica 8.0 for Linux x86 \ (32-bit)\nCopyright 1988-2011 Wolfram Research, Inc.\n\nIn[1]:= \ Import[\"http://www.google.com\"]\n\nGConf Error: Failed to contact \ configuration server; the most common cause is a missing or misconfigured \ D-Bus session bus daemon. See http://projects.gnome.org/gconf/ for \ information. (Details - 1: Not running within active session)\n\nOut[1]= Web \ Images Videos Maps News Shopping Gmail More ?", FontSize->12]], "Program", CellChangeTimes->{{3.5143083099254427`*^9, 3.5143083169576473`*^9}, { 3.5279589020511637`*^9, 3.527958958028846*^9}, {3.527959009746023*^9, 3.527959088192938*^9}, 3.527959757355214*^9, {3.527961273626544*^9, 3.52796127910218*^9}, 3.528077112010313*^9}], Cell["To fix this, we may want to start some additional processes:", "Text", CellChangeTimes->{{3.527961290253558*^9, 3.527961292604808*^9}, { 3.527979272284421*^9, 3.527979275075845*^9}, {3.5279793285696583`*^9, 3.5279793737870483`*^9}}], Cell[TextData[StyleBox["#!/bin/bash\n\nexport \ PATH=/home/kkouptsov/bin:/bin/:/usr/bin:/usr/local/bin\nexport \ LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib\n\neval `dbus-launch --sh-syntax \ --exit-with-session`\nexport DBUS_SESSION_BUS_ADDRESS\nexport \ DBUS_SESSION_BUS_PID \n\ncd /home/kkouptsov/invest\nexec ./do-update", FontSize->12]], "Program", CellChangeTimes->{{3.5143083099254427`*^9, 3.5143083169576473`*^9}, { 3.527959926896695*^9, 3.527959948057172*^9}, {3.527960023733564*^9, 3.527960068918066*^9}, {3.5279606569354553`*^9, 3.52796065730515*^9}, 3.527960764497752*^9, {3.527960829714992*^9, 3.527960834631352*^9}}], Cell["or like this:", "Text", CellChangeTimes->{{3.5279608474958467`*^9, 3.527960847838233*^9}, { 3.527979286981604*^9, 3.527979289274481*^9}}], Cell[TextData[StyleBox["#!/bin/bash\n\nexport \ PATH=/home/kkouptsov/bin:/bin/:/usr/bin:/usr/local/bin\nexport \ LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib\n\ncd /home/kkouptsov/invest\n\ exec dbus-launch --exit-with-session ./do-update", FontSize->12]], "Program", CellChangeTimes->{{3.5143083099254427`*^9, 3.5143083169576473`*^9}, { 3.527959926896695*^9, 3.527959948057172*^9}, {3.527960023733564*^9, 3.527960068918066*^9}, {3.5279606569354553`*^9, 3.52796065730515*^9}, 3.527960764497752*^9, {3.527960829714992*^9, 3.527960834631352*^9}, { 3.527960868368245*^9, 3.527960874339875*^9}}], Cell[TextData[{ "(This is not a complete solution: it starts ", StyleBox["dbus-daemon", FontFamily->"Courier"], ", but leaves it after termination of the script.)" }], "Text", CellChangeTimes->{{3.5279611427244*^9, 3.527961145771883*^9}, { 3.5279617351108847`*^9, 3.527961744219165*^9}, {3.5279792944933167`*^9, 3.527979308563917*^9}}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[TextData[{ StyleBox["Mathematica ", FontSlant->"Italic"], "script: ", StyleBox["do-update", FontFamily->"Courier"] }], "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.527961347472294*^9, 3.527961350343564*^9}, {3.527979662443939*^9, 3.527979671423737*^9}, {3.5280771668462477`*^9, 3.528077172067*^9}}], Cell[TextData[{ StyleBox["#!/usr/local/Wolfram/Mathematica/8.0/SystemFiles/Kernel/Binaries/\ Linux/MathematicaScript -script\n\n(* ", FontSize->14], StyleBox["Mathematica", FontSize->14, FontSlant->"Italic"], StyleBox[" commands *)\nPrint[\"Hello\"]", FontSize->14] }], "Program", CellChangeTimes->{{3.5143083099254427`*^9, 3.5143083169576473`*^9}, { 3.527961432980378*^9, 3.5279614590640593`*^9}, {3.527961547775261*^9, 3.527961550077097*^9}, {3.528108826524094*^9, 3.5281088286795073`*^9}}], Cell["\<\ Linux has a limit of 127 characters on the \[OpenCurlyDoubleQuote]interpreter \ line\[CloseCurlyDoubleQuote]. (Other OSes have similar limitation.)\ \>", "Text", CellChangeTimes->{{3.527962647889408*^9, 3.527962648255438*^9}, { 3.527962895747423*^9, 3.527962903439948*^9}, {3.527981433439937*^9, 3.5279814562583427`*^9}, {3.5279815615878773`*^9, 3.527981576151311*^9}, { 3.528077294124323*^9, 3.528077327069997*^9}, {3.528108836344589*^9, 3.52810883667131*^9}, {3.5281116710994*^9, 3.5281117046872387`*^9}}], Cell[TextData[StyleBox["kkouptsov@math~$ ln -s \ /usr/local/Wolfram/Mathematica/8.0/SystemFiles/Kernel/Binaries/Linux/\ MathematicaScript /usr/bin/ms", FontSize->12]], "Program", CellChangeTimes->{{3.5143083099254427`*^9, 3.5143083169576473`*^9}, { 3.527961432980378*^9, 3.5279614590640593`*^9}, {3.527961547775261*^9, 3.527961550077097*^9}, {3.527962575772025*^9, 3.527962635835742*^9}, { 3.5279628443907948`*^9, 3.527962867390451*^9}}], Cell["Much better:", "Text", CellChangeTimes->{{3.527962651351584*^9, 3.5279626516950607`*^9}, { 3.527962907970174*^9, 3.527962911279174*^9}, {3.527981479067133*^9, 3.5279814817758093`*^9}, {3.527981587448986*^9, 3.527981588390024*^9}}], Cell[TextData[{ "#!/usr/bin/ms -script\n\n(* ", StyleBox["Mathematica", FontSlant->"Italic"], " commands *)\nPrint[\"Hello\"]" }], "Program", CellChangeTimes->{{3.5143083099254427`*^9, 3.5143083169576473`*^9}, { 3.527961432980378*^9, 3.5279614590640593`*^9}, {3.527961547775261*^9, 3.527961550077097*^9}, {3.527962611294627*^9, 3.527962638123479*^9}, { 3.527962856654441*^9, 3.527962870683303*^9}, {3.528108852481132*^9, 3.528108854758482*^9}}], Cell[TextData[{ "The output from ", StyleBox["Print[]", "InlineProgram"], " commands in the script will be appended to the body of email sent by cron \ upon script termination." }], "Text", CellChangeTimes->{{3.527962790626772*^9, 3.527962801281461*^9}, { 3.5279629343786097`*^9, 3.527962963354628*^9}, {3.527981499794025*^9, 3.527981515765109*^9}}], Cell["Some error and warning messages will be appended too.", "Text", CellChangeTimes->{{3.5279629687861423`*^9, 3.5279629826886997`*^9}}], Cell[TextData[{ "If job specification in crontab included IO redirection, ", StyleBox["Print[]", "InlineProgram"], " command has no effect." }], "Text", CellChangeTimes->{{3.5279615723806753`*^9, 3.5279616132392693`*^9}, 3.527962728907517*^9, 3.527962989755435*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["Sending results", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.527961347472294*^9, 3.527961350343564*^9}, {3.52796302054391*^9, 3.527963028844265*^9}}], Cell["An alternative to using system mail:", "Text", CellChangeTimes->{{3.527963268927435*^9, 3.527963279469162*^9}, { 3.527981626117302*^9, 3.527981626266685*^9}}], Cell[TextData[StyleBox["#!/usr/bin/ms -script\n\nSendMail[\n\t\"From\" -> \ \"kkouptsov@wolfram.com\",\n\t\"To\" -> \"kkouptsov@wolfram.com\",\n\t\ \"Subject\" -> StringJoin[\"Updates for \", \n\t\t\ DateString[{\"MonthName\",\" \",\"Day\",\", \",\"Year\"}]],\n\t\"Body\" -> \ ToString[1],\n\t\"Server\" -> \"mail.wolfram.com\",\n\t\"UserName\" -> \ \"kkouptsov\",\n\t\"Password\" -> \"secret\"\n]", FontSize->18]], "Program", CellChangeTimes->{{3.5143083099254427`*^9, 3.5143083169576473`*^9}, { 3.527961432980378*^9, 3.5279614590640593`*^9}, {3.527961547775261*^9, 3.527961550077097*^9}, {3.527962611294627*^9, 3.527962638123479*^9}, { 3.527962856654441*^9, 3.527962870683303*^9}, {3.527963054230565*^9, 3.527963106324341*^9}, {3.527963156334065*^9, 3.527963207477385*^9}, { 3.527981648577984*^9, 3.527981654820159*^9}, {3.527985230546444*^9, 3.527985232191424*^9}}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["Database support", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.527961347472294*^9, 3.527961350343564*^9}, {3.52796302054391*^9, 3.527963028844265*^9}, {3.527963556470296*^9, 3.527963583370491*^9}, { 3.527981734380471*^9, 3.527981737848115*^9}, {3.5279818506329727`*^9, 3.527981853117498*^9}}], Cell["Loading packages and database communication:", "Text", CellChangeTimes->{{3.527963268927435*^9, 3.527963279469162*^9}, { 3.52798174357837*^9, 3.527981752574806*^9}}], Cell[TextData[StyleBox["#!/usr/bin/ms -script\n\n<< DatabaseLink`\n\n\ SQLConnect[] := Module[\n\t {db},\n\t db = \ OpenSQLConnection[JDBC[\"com.mysql.jdbc.Driver\", \n \ \"jdbc:mysql://localhost/invest\" ],\n \"Username\" -> \"kkouptsov\",\n \ \"Password\" -> \"secret\"]];\n db\n]\n \nDbTables[] := (db = \ SQLConnect[]; tables = SQLTableNames[db]; CloseSQLConnection[db]; tables)\n\n\ (* do the calculations *)\n\n...\n\n(* sending results *)\n\nSendMail[\n\t\ \"From\" -> \"kkouptsov@wolfram.com\",\n\t\"To\" -> \ \"kkouptsov@wolfram.com\",\n\t\"Subject\" -> StringJoin[\"Updates for \", \n\t\ \tDateString[{\"MonthName\",\" \",\"Day\",\", \",\"Year\"}]],\n\t\"Body\" -> \ ToString[DbTables[]],\n\t\"Server\" -> \"mail.wolfram.com\",\n\t\"UserName\" \ -> \"kkouptsov\",\n\t\"Password\" -> \"secret\"\n]", FontSize->16]], "Program", CellChangeTimes->{{3.5143083099254427`*^9, 3.5143083169576473`*^9}, { 3.527961432980378*^9, 3.5279614590640593`*^9}, {3.527961547775261*^9, 3.527961550077097*^9}, {3.527962611294627*^9, 3.527962638123479*^9}, { 3.527962856654441*^9, 3.527962870683303*^9}, {3.527963054230565*^9, 3.527963106324341*^9}, {3.527963156334065*^9, 3.527963207477385*^9}, { 3.52796344081*^9, 3.527963524843152*^9}, {3.527981772130926*^9, 3.527981821595337*^9}, {3.527982699208968*^9, 3.527982701685564*^9}, { 3.5279834336489687`*^9, 3.527983467104727*^9}, {3.5279851221372757`*^9, 3.527985122407248*^9}, 3.5279852404114227`*^9, {3.528077481088625*^9, 3.5280775251231613`*^9}, {3.528077555661859*^9, 3.52807756437687*^9}, { 3.528078153243635*^9, 3.5280781567702637`*^9}, 3.528111811879219*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["Collecting data", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.5279819558155203`*^9, 3.527981958539802*^9}, {3.527982612675742*^9, 3.527982617629614*^9}, 3.527983163288488*^9, {3.527984272015395*^9, 3.527984276126151*^9}}], Cell["\<\ \[Bullet] FinancialData (built-in) \[Bullet] \[OpenCurlyDoubleQuote]free\[CloseCurlyDoubleQuote] sites (e.g. \ Yahoo Finance, Google Finance, MSN Money Central, ...) \[Bullet] \[OpenCurlyDoubleQuote]paid\[CloseCurlyDoubleQuote] places (Norgate \ Investor Services, EODData, CSI, Quotes Plus, ...)\ \>", "Text", CellChangeTimes->{{3.5279831781619864`*^9, 3.527983184209161*^9}, { 3.527983263692398*^9, 3.527983301502069*^9}, {3.527983761112101*^9, 3.527983775245193*^9}, {3.527984332749154*^9, 3.527984333713716*^9}, { 3.527985009594324*^9, 3.52798502422267*^9}, {3.527986043339657*^9, 3.527986059204793*^9}, {3.527986091174979*^9, 3.527986151446013*^9}}], Cell[TextData[StyleBox["#!/usr/bin/ms -script\n\n...\n\ndata = \ NormalizeQuote[#,Flatten[{\n\t\ DateString[{\"Year\",\"-\",\"Month\",\"-\",\"Day\"}],\n\t\ FinancialData[#,\"OHLCV\"]}]]&/@sym\n\ndb = SQLConnect[];\n\ SQLInsert[db,\"quote\",\n\t\ {\"exchange\",\"symbol\",\"date\",\"open\",\"high\",\"low\",\"close\",\"\ volume\"},#]& /@ data;\nCloseSQLConnection[db];\n\n...\n\n\ GetQuotes[sym_,{fromY_,fromM_,fromD_},{toY_,toM_,toD_}] := Block[\n\t{url},\n\ \turl=\"http://ichart.finance.yahoo.com/table.csv?s=\" <> ToString[sym] <>\n\t\ \"&d=\" <> ToString[toD] <>\n\t\"&e=\" <> \ ToString[PaddedForm[toM,2,NumberPadding->\"0\"]] <>\n\t\"&f=\" <> \ ToString[toY] <>\n\t\"&g=d&a=\" <> ToString[fromD] <>\n\t\"&b=\" <> \ ToString[PaddedForm[fromM,2,NumberPadding->\"0\"]] <>\n\t\"&c=\" <> \ ToString[fromY] <>\n\t\"&ignore=.csv\";\n\tRest[Import[url,\"CSV\"]]]\n\n\ UpdateQuotes[symbol_] := Module[\n\t{data, count},\n\t\ data=GetQuotes[symbol,{2000,1,1},Take[DateList[],3]];\n\tdb = SQLConnect[];\n\ \tSQLInsert[db,\n\t\"quote\", \ {\"exchange\",\"symbol\",\"date\",\"open\",\"high\",\"low\",\"close\",\"\ volume\"},\n\t\tNormalizeQuote[symbol,#]]& /@ data;\n\t\ CloseSQLConnection[db];\n]\n\n...\n\nnyseList = \ Import[\"http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&\ exchange=NYSE&render=download\",\"CSV\"];\n\n...", FontSize->14]], "Program", CellChangeTimes->{{3.5143083099254427`*^9, 3.5143083169576473`*^9}, { 3.527961427463222*^9, 3.527961429265686*^9}, {3.527981900390418*^9, 3.527981983465581*^9}, {3.52798268327009*^9, 3.527982688206687*^9}, { 3.527982985003007*^9, 3.527983003371646*^9}, {3.5279836229168177`*^9, 3.527983662336752*^9}, {3.527983704908061*^9, 3.5279837301498737`*^9}, { 3.527983812122607*^9, 3.5279839868238707`*^9}, {3.527984113963359*^9, 3.527984208973866*^9}, {3.527984422746842*^9, 3.52798448101044*^9}, { 3.5279861751919937`*^9, 3.527986176124237*^9}, {3.5280776336562843`*^9, 3.528077662135713*^9}, {3.528077883385186*^9, 3.528077900242717*^9}, { 3.5280781689482403`*^9, 3.528078175328795*^9}}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["Resources for analysis", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308340990994*^9, 3.514308352103572*^9}, { 3.5279845197416487`*^9, 3.527984523563139*^9}, {3.5281123131953783`*^9, 3.5281123149683523`*^9}}], Cell["\t\[FilledSmallCircle] Financial functions", "Text", CellChangeTimes->{{3.5279870177621803`*^9, 3.527987035714397*^9}, { 3.527987098874279*^9, 3.527987132015748*^9}, {3.52798722628463*^9, 3.527987247608337*^9}, 3.528078116338245*^9, {3.528079199861639*^9, 3.528079241103898*^9}}], Cell["\t\[FilledSmallCircle] Time Series", "Text", CellChangeTimes->{{3.5279870177621803`*^9, 3.527987035714397*^9}, { 3.527987098874279*^9, 3.527987132015748*^9}, {3.52798722628463*^9, 3.527987247608337*^9}, 3.528078116338245*^9, {3.528079199861639*^9, 3.528079245158963*^9}}], Cell["\t\[FilledSmallCircle] Probability and Statistics", "Text", CellChangeTimes->{{3.5279870177621803`*^9, 3.527987035714397*^9}, { 3.527987098874279*^9, 3.527987132015748*^9}, {3.52798722628463*^9, 3.527987247608337*^9}, 3.528078116338245*^9, {3.528079199861639*^9, 3.528079246652727*^9}}], Cell["\t\[FilledSmallCircle] Report Generation", "Text", CellChangeTimes->{{3.5279870177621803`*^9, 3.527987035714397*^9}, { 3.527987098874279*^9, 3.527987132015748*^9}, {3.52798722628463*^9, 3.527987247608337*^9}, 3.528078116338245*^9, {3.528079199861639*^9, 3.528079248348754*^9}, {3.528108206883445*^9, 3.52810820840345*^9}}], Cell["\t\[FilledSmallCircle] Other resources, e.g. GPU", "Text", CellChangeTimes->{{3.5279870177621803`*^9, 3.527987035714397*^9}, { 3.527987098874279*^9, 3.527987132015748*^9}, {3.52798722628463*^9, 3.527987247608337*^9}, 3.528078116338245*^9, {3.528079199861639*^9, 3.528079248348754*^9}, {3.5281082101393147`*^9, 3.528108221914997*^9}}], Cell["\t...", "Text", CellChangeTimes->{{3.5279870177621803`*^9, 3.527987035714397*^9}, { 3.527987098874279*^9, 3.527987132015748*^9}, {3.52798722628463*^9, 3.527987247608337*^9}, 3.528078116338245*^9, {3.528079199861639*^9, 3.528079248348754*^9}}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["Conclusion", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.514308863196991*^9, 3.5143088633311243`*^9}, { 3.52793864459906*^9, 3.527938647870122*^9}, 3.52798423593099*^9, 3.527986419682983*^9}], Cell["", "Text"], Cell[TextData[{ "This is just a sketchy illustration of one application of ", StyleBox["Mathematica", FontSlant->"Italic"], " scripting." }], "Text", CellChangeTimes->{{3.527986370679063*^9, 3.527986461071629*^9}, { 3.527986683098729*^9, 3.527986683271686*^9}}], Cell[TextData[{ "More on writing scripts: ", ButtonBox["http://reference.wolfram.com/mathematica/tutorial/\ MathematicaScripts.html", BaseStyle->"Hyperlink", ButtonData->{ URL["http://reference.wolfram.com/mathematica/tutorial/MathematicaScripts.\ html"], None}, ButtonNote-> "http://reference.wolfram.com/mathematica/tutorial/MathematicaScripts.html"] }], "Text", CellChangeTimes->{{3.527986466439035*^9, 3.527986511012637*^9}, { 3.528077976065201*^9, 3.5280779771584463`*^9}}], Cell[TextData[{ "Previous talk explaining script internals: ", ButtonBox["http://library.wolfram.com/infocenter/Conferences/7912/", BaseStyle->"Hyperlink", ButtonData->{ URL["http://library.wolfram.com/infocenter/Conferences/7912/"], None}, ButtonNote->"http://library.wolfram.com/infocenter/Conferences/7912/"] }], "Text", CellChangeTimes->{{3.52798652408705*^9, 3.527986555136591*^9}, { 3.527986642488296*^9, 3.527986657225793*^9}, {3.527987355012958*^9, 3.527987378042988*^9}}], Cell["\<\ Thank you. \ \>", "Text", CellChangeTimes->{{3.52798666048123*^9, 3.527986664744994*^9}}] }, Open ]] }, Open ]] }, ScreenStyleEnvironment->"SlideShow", WindowSize->{1405, 856}, WindowMargins->{{0, Automatic}, {Automatic, 0}}, FrontEndVersion->"8.0 for Mac OS X x86 (32-bit, 64-bit Kernel) (October 5, \ 2011)", StyleDefinitions->"Default.nb" ] (* End of Notebook Content *) (* Internal cache information *) (*CellTagsOutline CellTagsIndex->{ "SlideShowHeader"->{ Cell[14091, 256, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[15611, 308, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[19488, 403, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[21099, 446, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[24918, 524, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[32181, 662, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[35986, 750, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[38905, 830, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[40875, 884, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[42639, 921, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[44314, 970, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[45787, 1022, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[49312, 1103, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[52806, 1195, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[54226, 1229, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[56578, 1275, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[59768, 1338, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[62003, 1389, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"]} } *) (*CellTagsIndex CellTagsIndex->{ {"SlideShowHeader", 64081, 1458} } *) (*NotebookFileOutline Notebook[{ Cell[557, 20, 12512, 209, 83, "hidefromslideshowgraphic"], Cell[CellGroupData[{ Cell[13094, 233, 325, 5, 222, "Title"], Cell[13422, 240, 350, 5, 81, "Subtitle"], Cell[13775, 247, 279, 4, 47, "Subsubtitle"] }, Open ]], Cell[CellGroupData[{ Cell[14091, 256, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[14180, 261, 231, 4, 113, "Section"], Cell[14414, 267, 173, 4, 44, "Text"], Cell[14590, 273, 347, 12, 44, "Text"], Cell[14940, 287, 168, 3, 44, "Text"], Cell[15111, 292, 235, 4, 73, "Text"], Cell[15349, 298, 213, 4, 44, "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[15611, 308, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[15700, 313, 404, 9, 113, "Section"], Cell[16107, 324, 1230, 21, 102, "Text"], Cell[17340, 347, 590, 9, 193, "Program"], Cell[17933, 358, 286, 11, 44, "Text"], Cell[18222, 371, 224, 5, 44, "Text"], Cell[18449, 378, 585, 9, 235, "Program"], Cell[19037, 389, 402, 8, 73, "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[19488, 403, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[19577, 408, 343, 5, 113, "Section"], Cell[19923, 415, 212, 3, 44, "Text"], Cell[20138, 420, 264, 5, 44, "Text"], Cell[20405, 427, 214, 3, 44, "Text"], Cell[20622, 432, 213, 3, 44, "Text"], Cell[20838, 437, 212, 3, 44, "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[21099, 446, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[21188, 451, 299, 5, 113, "Section"], Cell[21490, 458, 532, 9, 44, "Text"], Cell[22025, 469, 513, 7, 44, "Text"], Cell[22541, 478, 507, 7, 44, "Text"], Cell[23051, 487, 496, 7, 44, "Text"], Cell[23550, 496, 551, 7, 44, "Text"], Cell[24104, 505, 555, 7, 44, "Text"], Cell[24662, 514, 207, 4, 44, "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[24918, 524, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[25007, 529, 403, 6, 113, "Section"], Cell[25413, 537, 802, 13, 44, "Text"], Cell[26218, 552, 757, 12, 44, "Text"], Cell[26978, 566, 716, 10, 44, "Text"], Cell[27697, 578, 734, 10, 44, "Text"], Cell[28434, 590, 733, 10, 44, "Text"], Cell[29170, 602, 765, 10, 44, "Text"], Cell[29938, 614, 731, 10, 44, "Text"], Cell[30672, 626, 731, 10, 44, "Text"], Cell[31406, 638, 376, 10, 73, "Text"], Cell[31785, 650, 347, 6, 73, "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[32181, 662, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[32270, 667, 226, 4, 113, "Section"], Cell[32499, 673, 741, 11, 73, "Text"], Cell[33243, 686, 690, 11, 44, "Text"], Cell[33936, 699, 643, 10, 73, "Text"], Cell[34582, 711, 380, 7, 44, "Text"], Cell[34965, 720, 489, 10, 102, "Text"], Cell[35457, 732, 344, 8, 73, "Text"], Cell[35804, 742, 133, 2, 44, "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[35986, 750, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[36075, 755, 363, 5, 113, "Section"], Cell[36441, 762, 306, 6, 73, "Text"], Cell[36750, 770, 229, 3, 44, "Text"], Cell[36982, 775, 278, 6, 73, "Text"], Cell[37263, 783, 512, 8, 73, "Text"], Cell[37778, 793, 16, 0, 44, "Text"], Cell[37797, 795, 146, 2, 44, "Text"], Cell[37946, 799, 210, 4, 44, "Text"], Cell[38159, 805, 217, 4, 44, "Text"], Cell[38379, 811, 199, 4, 44, "Text"], Cell[38581, 817, 256, 5, 44, "Text"], Cell[38840, 824, 16, 0, 44, "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[38905, 830, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[38994, 835, 197, 3, 113, "Section"], Cell[39194, 840, 590, 12, 73, "Text"], Cell[39787, 854, 330, 6, 44, "Text"], Cell[40120, 862, 349, 6, 44, "Text"], Cell[40472, 870, 354, 8, 44, "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[40875, 884, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[40964, 889, 235, 4, 113, "Section"], Cell[41202, 895, 177, 2, 44, "Text"], Cell[41382, 899, 1208, 16, 623, "Program"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[42639, 921, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[42728, 926, 277, 4, 113, "Section"], Cell[43008, 932, 348, 9, 170, "Program"], Cell[43359, 943, 16, 0, 44, "Text"], Cell[43378, 945, 526, 9, 44, "Text"], Cell[43907, 956, 358, 8, 112, "Program"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[44314, 970, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[44403, 975, 291, 9, 114, "Section"], Cell[44697, 986, 249, 10, 44, "Text"], Cell[44949, 998, 324, 4, 44, "Text"], Cell[45276, 1004, 462, 12, 228, "Program"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[45787, 1022, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[45876, 1027, 344, 9, 114, "Section"], Cell[46223, 1038, 255, 5, 44, "Text"], Cell[46481, 1045, 780, 11, 195, "Program"], Cell[47264, 1058, 244, 3, 44, "Text"], Cell[47511, 1063, 644, 9, 212, "Program"], Cell[48158, 1074, 146, 2, 44, "Text"], Cell[48307, 1078, 607, 9, 144, "Program"], Cell[48917, 1089, 346, 8, 73, "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[49312, 1103, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[49401, 1108, 377, 10, 114, "Section"], Cell[49781, 1120, 509, 12, 101, "Program"], Cell[50293, 1134, 528, 8, 73, "Text"], Cell[50824, 1144, 446, 7, 42, "Program"], Cell[51273, 1153, 242, 3, 44, "Text"], Cell[51518, 1158, 460, 10, 141, "Program"], Cell[51981, 1170, 358, 8, 73, "Text"], Cell[52342, 1180, 139, 1, 44, "Text"], Cell[52484, 1183, 273, 6, 44, "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[52806, 1195, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[52895, 1200, 224, 4, 113, "Section"], Cell[53122, 1206, 167, 2, 44, "Text"], Cell[53292, 1210, 885, 13, 301, "Program"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[54226, 1229, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[54315, 1234, 373, 6, 113, "Section"], Cell[54691, 1242, 174, 2, 44, "Text"], Cell[54868, 1246, 1661, 23, 676, "Program"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[56578, 1275, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[56667, 1280, 299, 5, 113, "Section"], Cell[56969, 1287, 675, 11, 102, "Text"], Cell[57647, 1300, 2072, 32, 842, "Program"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[59768, 1338, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[59857, 1343, 238, 4, 113, "Section"], Cell[60098, 1349, 297, 4, 44, "Text"], Cell[60398, 1355, 289, 4, 44, "Text"], Cell[60690, 1361, 304, 4, 44, "Text"], Cell[60997, 1367, 340, 4, 44, "Text"], Cell[61340, 1373, 351, 4, 44, "Text"], Cell[61694, 1379, 260, 4, 44, "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[62003, 1389, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[62092, 1394, 218, 4, 113, "Section"], Cell[62313, 1400, 16, 0, 44, "Text"], Cell[62332, 1402, 269, 7, 44, "Text"], Cell[62604, 1411, 496, 12, 73, "Text"], Cell[63103, 1425, 498, 10, 73, "Text"], Cell[63604, 1437, 101, 5, 102, "Text"] }, Open ]] }, Open ]] } ] *) (* End of internal cache information *)