Successfully reported this slideshow.

DLR Hosting

1,731 views

Published on

Slides from 10 meeting of spb alt.net group

Published in: Technology
  • Be the first to comment

  • Be the first to like this

DLR Hosting

  1. 1. DLR<br />hosting<br />VitalyBaum<br />Alt.NetSpb Group<br />butaji.ru<br />spbalt.net<br />
  2. 2. «Единственное счастье в жизни — <br />это постоянное стремление вперед.»<br />ЭмильЗоля<br />
  3. 3. DLR – WTF?<br />DLR – Что это?<br />
  4. 4. DLR - что это?<br />Среда<br />Исполнения<br />Динамических<br />Языков<br />
  5. 5. DLR - что это?<br />Первое упоминание состоялось на Mix’07<br />1 мая 2007 года<br />
  6. 6. DLR - что это?<br />
  7. 7. DLR - что это?<br />Позволяет реализовать динамические языки на .NET<br />Предоставляет динамические возможности для статических языков<br />
  8. 8. DLR - что это?<br />http://msmvps.com/blogs/jon_skeet/archive/2009/06/19/os-jam-at-google-london-c-4-and-the-dlr.aspx<br />
  9. 9. DLR - что это?<br />Возможности для имплементированных языков при развитии .NET:<br />Garbage collector (GC)<br />Just-in-time compiler (JIT)<br />Sandbox Security Model («Песочница»)<br />Tools (Visual Studio, SQL Server)<br />
  10. 10. DLR - что это?<br />Все библиотеки, реализованные для .NET доступны нам в динамических языках.<br />http://blogs.msdn.com/blogfiles/codeplex/WindowsLiveWriter/CodePlexinDenmarkandSweden_C442/DSC03124.jpg<br />
  11. 11. DLR - что это?<br />http://github.com<br />Все библиотеки, реализованные на динамических языках доступны нам также.<br />
  12. 12. DLR - что это?<br />В текущее время Microsoft поддерживает двереализации на DLR:<br />IronPythonдоступен вopen source наwww.codeplex.com/ironpython. <br />IronRubyдоступен в open source наhttp://rubyforge.org/projects/ironruby.<br />
  13. 13. DLR - что это?<br />May 22 2009<br />v0.91<br />http://dlr.codeplex.com/<br />
  14. 14. DLR - что это?<br />
  15. 15. DLR - что это?<br />Введения в CLR для взаимодействия с динамическими языками:<br />Expression trees(семантика языка)<br />Call site caching(ускорение операций)<br />Dynamic object interoperability(точка взаимодействия)<br />
  16. 16. DLR - что это?<br />The One True Object<br />http://blogs.msdn.com/hugunin/archive/2007/05/02/the-one-true-object-part-1.aspx<br />
  17. 17. DLR - что это?<br />The One True Object<br />http://blogs.msdn.com/hugunin/archive/2007/05/02/the-one-true-object-part-1.aspx<br />
  18. 18. DLR - что это?<br />http://msdn.microsoft.com/en-us/library/dd233052(VS.100).aspx<br />
  19. 19. DLR hosting<br />Хостинг DLR в .NET приложениях<br />http://farm3.static.flickr.com/2017/2047711131_d4ce321ca9.jpg<br />
  20. 20. DLRHosting<br />Исполнение фрагментов кода<br />Исполнение кода из файлов<br />Компиляция кода<br />Области исполнения и переменные<br />
  21. 21. DLRHosting<br />В вашем браузере с помощью SilverLight<br />На сервере MerlinWeb<br />Интерактивные консоли, причём ScriptRuntime может быть в другом приложении<br />Средства редактирования с подсветкой кода, кодкомплитом и справкой (могут работать только на live объектах в 1ой версии)<br />PowerShell, C#, и VB.NET используют динамические объекты и работаютс ними в том же домене<br />
  22. 22.
  23. 23. DLRHosting<br />
  24. 24. DLRHosting<br />
  25. 25. DLRHosting<br />
  26. 26. DLRHosting<br />
  27. 27. DLRHosting<br />Виды хостинга:<br />Активный<br />Пассивный<br />Дуплексный<br />
  28. 28. DLRHosting<br />Активный<br />app.close<br />
  29. 29. DLRHosting<br />Пассивный<br />pyfunc(x)<br />
  30. 30. DLRHosting<br />Дуплексный<br />x<br />y =func(x)<br />y<br />
  31. 31. DLRHosting<br />
  32. 32. DLRHosting<br />REPL <br />Read-eval-print loop<br />
  33. 33. DLRHosting<br />http://www.iunknown.com/2009/05/dynamic-languages-at-teched-2009.html<br />
  34. 34. DLRHosting<br />Проблема:<br />Не получается использовать Extension Methods, следовательно и LINQ.<br />
  35. 35. DLRHosting<br />Решение:<br />Свой код<br />Унаследованный код<br />
  36. 36. DLRHosting<br />Adapt <br />your code<br />
  37. 37. DLRHosting<br />public class ClassToBeExtended {}<br />public static class DemoExtensionClass<br />{<br />public static string Foo(thisClassToBeExtended c)<br />{<br />return&quot;Bar&quot;;<br />}<br />}<br />http://blogs.msdn.com/saveenr/archive/2008/11/14/consuming-extension-methods-in-ironpython.aspx<br />
  38. 38. DLRHosting<br />&gt;&gt;&gt; c1 = ClassToBeExtended() &gt;&gt;&gt; c1.Foo() Traceback (most recent call last):   File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt; AttributeError: &apos;ClassToBeExtended&apos; object has no attribute &apos;Foo&apos; <br />
  39. 39. DLRHosting<br />usingMicrosoft.Scripting;<br />[assembly: Microsoft.Scripting.Runtime.ExtensionType(     typeof(ClassToBeExtended),     typeof(DemoExtensionClass)<br />)]<br />
  40. 40. DLRHosting<br />&gt;&gt;&gt; c1 = ClassToBeExtended() &gt;&gt;&gt; c1.Foo() &apos;Bar&apos; <br />
  41. 41. DLRHosting<br />Legacy code<br />
  42. 42. DLRHosting<br />Создаём Proxy, и действуем по <br />«правилам своего кода»<br />
  43. 43. Linq 2 Object vsPython<br />[myFunc(i) for i in numbers if i &gt;3]<br />from i in numbers<br />where i &gt; 3<br />selectmyFunc(i)<br />
  44. 44. Linq 2 Object vsPython<br />Funcs<br />need that<br />
  45. 45. Linq 2 Object vsPython<br />SelectWhereAggregate<br />mapfilterreduce<br />
  46. 46. Linq 2 Object vsPython<br />map(myFunc, <br />filter(lambdax: x &gt;3, numbers))<br />
  47. 47. Linq 2 Object vsPython<br />Queryable.Select(<br />Queryable.Where(numbers, x =&gt; x &gt; 3), <br />myFunc)<br />
  48. 48. Linq 2 XML vs Python<br />head =soup.contents[0].contents[0] head.parent.name <br /># u&apos;html&apos;<br />soup.findAll(&apos;p&apos;, align=&quot;center&quot;)<br /># [&lt;p id=&quot;firstpara&quot; align=&quot;center&quot;&gt;This is paragraph &lt;b&gt;one&lt;/b&gt;. &lt;/p&gt;]<br />Beautiful Soup<br />http://www.crummy.com/software/BeautifulSoup/<br />
  49. 49. IronPythonClass != .NET Class<br />class Calculator(object):defadd(self, a, b):    returna + b<br />http://stackoverflow.com/questions/579272/instantiating-a-python-class-in-c<br />
  50. 50. IronPythonClass != .NET Class<br />ScriptEngine engine = Python.CreateEngine();ScriptSource source =engine.CreateScriptSourceFromFile(<br />&quot;Calculator.py&quot;);ScriptScope scope = engine.CreateScope();ObjectOperationsop = engine.Operations;<br />
  51. 51. IronPythonClass != .NET Class<br />// создается класс<br />source.Execute(scope); // получаем класс <br />object calculator = scope.GetVariable(&quot;Calculator&quot;); <br />// создаём экземплярobject instance = op.Invoke(calculator); <br />// получаем методobject method = op.GetMember(instance, &quot;add&quot;); <br />// вызываем метод<br />intresult = (int)op.Call(method, 4, 5); <br />
  52. 52. IronPythonClass != .NET Class<br />ScriptRuntimepy = Python.CreateRuntime();<br />dynamichelloworld = py.UseFile(&quot;helloworld.py&quot;);<br />helloworld.Calculator().Add(1, 10)<br />.NET 4.0<br />
  53. 53. DLR + sharepoint<br />Расширяем c помощью DLR приложение на SharePoint<br />
  54. 54. IPy 4 SPD<br />SharePoint Designer позволяет производить настройку<br />Не является инструментом разработчика<br />3-х этапный рабочий процесс – существует по-умолчанию<br />Почему бы не сделать его расширяемым?<br />
  55. 55. IPy 4 SPD<br />Задача:<br />Предоставить системному администратору возможность создавать рабочие процессы и расширять их с помощью Python-сценариев<br />
  56. 56. IPy 4 SPD<br />
  57. 57. IPy 4 SPD<br />__actprops__ (свойства раб. процесса)__site__ (текущийSPSite)__web__ (текущий SPWeb)__list__ (текущий SPList)__item__ (текущаяSPListItem)<br />
  58. 58. IPy 4 SPD<br />defFindManager(userName, ldapPath):<br />importclr<br />clr.AddReference(&quot;System.DirectoryServices&quot;) <br />importSystem.DirectoryServices as ds<br />adFolder = ds.DirectoryEntry(ldapPath)<br />adSearcher = ds.DirectorySearcher(adFolder)<br />adSearcher.SearchScope = ds.SearchScope.Subtree<br />adSearcher.Filter = &quot;(&(objectClass=user)(samaccountname=&quot; + userName + &quot;))&quot;<br />adResult = ds.SearchResult<br />try:<br />adResult = adSearcher.FindOne()<br />returnadResult.Properties[&quot;Manager&quot;][0].Split(&quot;,&quot;)[0].Substring(3)<br />except:<br />return<br /># the ldapPath structure may vary for you.<br />mgr = FindManager(&quot;yourusername&quot;,&quot;LDAP://yourdomaincontroller/DC=yourdomain,DC=com&quot;)<br />
  59. 59. IPy 4 SPD<br />Решение:<br />Расширяем инструмент<br />Обрабатываем и исполняем скрипты<br />
  60. 60. IPy 4 SPD<br />Ответ:<br />Демо<br />
  61. 61. twimilar<br />Моё приложение с использованием анализа данных<br />
  62. 62. Twimilar<br />Задача:<br />Необходимо писать большое количество формул, которым требуется выразительная форма представления (псевдокод).<br />
  63. 63. Twimilar<br />Решение:<br />Создаём точку расширения<br />Пишем функции на Python<br />
  64. 64. Twimilar<br />Ответ:<br />Демо<br />
  65. 65. Gestalt - DIY<br />Создаём Gestalt сами<br />
  66. 66. Gestalt<br />Клиентскую часть в веб-приложениях принято создавать на Javascript<br />Большинство веб-разработчиков с огромным удовольствием бы отошли от этого правила и воспользовались своим любимым server-side языком.<br />
  67. 67. Gestalt<br />
  68. 68. Gestalt<br />Задача:<br />Сделать, чтобы заработало следующее:<br />&lt;script type=&quot;python&quot;&gt;<br />deffunc():<br />    HtmlPage.Window.Alert(&quot;Hello world!&quot;)<br />  <br />func()<br />&lt;/script&gt;<br />
  69. 69. Gestalt<br />Решение:<br />Читаем скрипт из Html<br />Создаем Script Runtime<br />Исполняем скриптв Silverlight<br />
  70. 70. Gestalt<br />Ответ:<br />Демо<br />
  71. 71. Real-life dlR hosting<br />Примеры существующих приложений с DLR хостингом<br />
  72. 72. Real-life DLR hosting<br />
  73. 73. Real-life DLR hosting<br />
  74. 74. Real-life DLR hosting<br />
  75. 75. Работа на IronPythonсо всеми основными технологиями Microsoft<br />IronPython in Action<br />
  76. 76. Materials<br />http://dlr.codeplex.com/<br />http://blogs.msdn.com/seshadripv/default.aspx<br />http://blogs.msdn.com/mmaly/default.aspx<br />http://ironpython-urls.blogspot.com/<br />http://blogs.msdn.com/hugunin/<br />
  77. 77. Вопросы<br />и<br />Ответы<br />

×