dlr hosting

77
hosting DLR Vitaly Baum Alt.Net Spb Group butaji.ru spbalt.net

Upload: vitaly-baum

Post on 03-Dec-2014

2.679 views

Category:

Technology


4 download

DESCRIPTION

Slides from 10 meeting of spb alt.net group

TRANSCRIPT

Page 1: DLR Hosting

hostingDLR Vitaly Baum

Alt.Net Spb Group

butaji.ruspbalt.net

Page 2: DLR Hosting

«Единственное счастье в жизни — это постоянное

стремление вперед.»Эмиль Золя

Page 3: DLR Hosting

DLR – WTF?DLR – Что это?

Page 4: DLR Hosting

DLR - что это?

СредаИсполненияДинамическихЯзыков

Page 5: DLR Hosting

DLR - что это?

Первое упоминание состоялось на Mix’07 1 мая 2007 года

Page 6: DLR Hosting

DLR - что это?

Page 7: DLR Hosting

DLR - что это?

• Позволяет реализовать динамические языки на .NET

• Предоставляет динамические возможности для статических языков

Page 8: DLR Hosting

DLR - что это?

http://msmvps.com/blogs/jon_skeet/archive/2009/06/19/os-jam-at-google-london-c-4-and-the-dlr.aspx

Page 9: DLR Hosting

DLR - что это?

Возможности для имплементированных языков при развитии .NET:• Garbage collector (GC)• Just-in-time compiler (JIT)• Sandbox Security Model («Песочница»)• Tools (Visual Studio, SQL Server)

Page 10: DLR Hosting

DLR - что это?

Все библиотеки, реализованные для .NET доступны нам в динамических языках.

http://blogs.msdn.com/blogfiles/codeplex/WindowsLiveWriter/CodePlexinDenmarkandSweden_C442/DSC03124.jpg

Page 11: DLR Hosting

DLR - что это?

http://github.com

Все библиотеки, реализованные на динамических языках доступны нам также.

Page 12: DLR Hosting

DLR - что это?

В текущее время Microsoft поддерживает две реализации на DLR:

IronPython доступен в open source на www.codeplex.com/ironpython. IronRuby доступен в open source на http://rubyforge.org/projects/ironruby.

Page 13: DLR Hosting

DLR - что это?

May 22 2009 v0.91http://dlr.codeplex.com/

Page 14: DLR Hosting

DLR - что это?

Page 15: DLR Hosting

DLR - что это?

Введения в CLR для взаимодействия с динамическими языками:• Expression trees (семантика языка)• Call site caching (ускорение операций)• Dynamic object interoperability (точка

взаимодействия)

Page 16: DLR Hosting

DLR - что это?

http://blogs.msdn.com/hugunin/archive/2007/05/02/the-one-true-object-part-1.aspx

The One True Object

Page 17: DLR Hosting

DLR - что это?

http://blogs.msdn.com/hugunin/archive/2007/05/02/the-one-true-object-part-1.aspx

The One True Object

Page 18: DLR Hosting

DLR - что это?

http://msdn.microsoft.com/en-us/library/dd233052(VS.100).aspx

Page 19: DLR Hosting

DLR HOSTINGХостинг DLR в .NET приложениях

http://farm3.static.flickr.com/2017/2047711131_d4ce321ca9.jpg

Page 20: DLR Hosting

DLR Hosting

• Исполнение фрагментов кода• Исполнение кода из файлов• Компиляция кода• Области исполнения и переменные

Page 21: DLR Hosting

DLR Hosting

• В вашем браузере с помощью SilverLight• На сервере MerlinWeb• Интерактивные консоли, причём ScriptRuntime может

быть в другом приложении• Средства редактирования с подсветкой кода,

кодкомплитом и справкой (могут работать только на live объектах в 1ой версии)

• PowerShell, C#, и VB.NET используют динамические объекты и работают с ними в том же домене

Page 22: DLR Hosting
Page 23: DLR Hosting

DLR Hosting

Level One

Level Two

Level Three

Page 24: DLR Hosting

DLR Hosting

Level One• Предоставить ОМ приложения для динамических языков• Исполнять файлы-потребители ОМ• Динамический код в качестве команд и обработичков

событий• ScriptRuntime.Globals, ScriptRuntime.ExecuteFile()

Level Two

Level Three

Page 25: DLR Hosting

DLR Hosting

Level One

Level Two• Работа с кодом: компиляция, исполнение в нужной

области• Операции над объектами• ScriptEngine, ScriptScope, ObjectOperations

Level Three

Page 26: DLR Hosting

DLR Hosting

Level One

Level Two

Level Three• Полный контроль над исполнением: обработка исключений,

использование удаленных сред• Разработка приложений для редактирования динамического кода• ScriptHost, ObjectOperations (GetMemberNames, IsCallable, GetCallSignatures,

GetDocumentation, GetCodeRepresentation)• ScriptSources, TextContentProviders

Page 27: DLR Hosting

DLR Hosting

Виды хостинга:1. Активный2. Пассивный3. Дуплексный

Page 28: DLR Hosting

DLR Hosting

АктивныйCL

R

App DLR Script

app.close

Page 29: DLR Hosting

DLR Hosting

ПассивныйCLRApp DLRScri

pt

pyfunc(x)

Page 30: DLR Hosting

DLR Hosting

ДуплексныйCLRApp DLRScri

pt

xy =func(x)

y

Page 31: DLR Hosting

DLR Hosting

Page 32: DLR Hosting

DLR Hosting

REPL Read-eval-print loop

Page 33: DLR Hosting

DLR Hosting

http://www.iunknown.com/2009/05/dynamic-languages-at-teched-2009.html

Page 34: DLR Hosting

DLR Hosting

Проблема:Не получается использовать Extension Methods, следовательно и LINQ.

Page 35: DLR Hosting

DLR Hosting

Решение:1. Свой код2. Унаследованный код

Page 36: DLR Hosting

DLR Hosting

Adapt your code

Page 37: DLR Hosting

DLR Hosting

public class ClassToBeExtended {}public static class DemoExtensionClass{ public static string Foo(this ClassToBeExtended c) { return "Bar"; }}

http://blogs.msdn.com/saveenr/archive/2008/11/14/consuming-extension-methods-in-ironpython.aspx

Page 38: DLR Hosting

DLR Hosting

>>> c1 = ClassToBeExtended() >>> c1.Foo() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'ClassToBeExtended' object has no attribute 'Foo'

Page 39: DLR Hosting

DLR Hosting

using Microsoft.Scripting;[assembly: Microsoft.Scripting.Runtime.ExtensionType( typeof(ClassToBeExtended), typeof(DemoExtensionClass))]

Page 40: DLR Hosting

DLR Hosting

>>> c1 = ClassToBeExtended() >>> c1.Foo() 'Bar'

Page 41: DLR Hosting

DLR Hosting

Legacy code

Page 42: DLR Hosting

DLR Hosting

Создаём Proxy, и действуем по «правилам своего кода»

Page 43: DLR Hosting

Linq 2 Object vs Python

[myFunc(i) for i in numbers if i > 3]

from i in numberswhere i > 3select myFunc(i)

Page 44: DLR Hosting

Linq 2 Object vs Python

Funcsneed that

Page 45: DLR Hosting

Linq 2 Object vs Python

Select Where

Aggregate

mapfilterreduce

Page 46: DLR Hosting

Linq 2 Object vs Python

map(myFunc, filter(lambda x: x > 3,

numbers))

Page 47: DLR Hosting

Linq 2 Object vs Python

Queryable.Select(Queryable.Where(numbers,

x => x > 3), myFunc)

Page 48: DLR Hosting

Linq 2 XML vs Python

head = soup.contents[0].contents[0] head.parent.name # u'html'soup.findAll('p', align="center")# [<p id="firstpara" align="center">This is paragraph <b>one</b>. </p>]

Beautiful Souphttp://www.crummy.com/software/BeautifulSoup/

Page 49: DLR Hosting

IronPythonClass != .NET Class

class Calculator(object):def add(self, a, b):

return a + b

http://stackoverflow.com/questions/579272/instantiating-a-python-class-in-c

Page 50: DLR Hosting

IronPythonClass != .NET Class

ScriptEngine engine = Python.CreateEngine();ScriptSource source = engine.CreateScriptSourceFromFile(

"Calculator.py");ScriptScope scope = engine.CreateScope();ObjectOperations op = engine.Operations;

Page 51: DLR Hosting

IronPythonClass != .NET Class

// создается класс

source.Execute(scope); // получаем класс

object calculator = scope.GetVariable("Calculator"); // создаём экземпляр

object instance = op.Invoke(calculator); // получаем метод

object method = op.GetMember(instance, "add"); // вызываем метод

int result = (int)op.Call(method, 4, 5);

Page 52: DLR Hosting

IronPythonClass != .NET Class

ScriptRuntime py = Python.CreateRuntime();dynamic helloworld = py.UseFile("helloworld.py");helloworld.Calculator().Add(1, 10)

.NET 4.0

Page 53: DLR Hosting

DLR + SHAREPOINTРасширяем c помощью DLR приложение на SharePoint

Page 54: DLR Hosting

IPy 4 SPD

• SharePoint Designer позволяет производить настройку

• Не является инструментом разработчика• 3-х этапный рабочий процесс – существует

по-умолчанию• Почему бы не сделать его расширяемым?

Page 55: DLR Hosting

IPy 4 SPD

Задача:Предоставить системному администратору возможность создавать рабочие процессы и расширять их с помощью Python-сценариев

Page 56: DLR Hosting

IPy 4 SPD

Page 57: DLR Hosting

IPy 4 SPD

__actprops__ (свойства раб. процесса)__site__ (текущий SPSite)__web__ (текущий SPWeb)__list__ (текущий SPList)__item__ (текущая SPListItem)

Page 58: DLR Hosting

IPy 4 SPDdef FindManager(userName, ldapPath): import clr clr.AddReference("System.DirectoryServices") import System.DirectoryServices as ds adFolder = ds.DirectoryEntry(ldapPath) adSearcher = ds.DirectorySearcher(adFolder) adSearcher.SearchScope = ds.SearchScope.Subtree adSearcher.Filter = "(&(objectClass=user)(samaccountname=" + userName + "))" adResult = ds.SearchResult try: adResult = adSearcher.FindOne() return adResult.Properties["Manager"][0].Split(",")[0].Substring(3) except: return# the ldapPath structure may vary for you.mgr = FindManager("yourusername","LDAP://yourdomaincontroller/DC=yourdomain,DC=com")

Page 59: DLR Hosting

IPy 4 SPD

Решение:1. Расширяем инструмент2. Обрабатываем и исполняем скрипты

Page 60: DLR Hosting

IPy 4 SPD

Ответ:

Демо

Page 61: DLR Hosting

TWIMILARМоё приложение с использованием анализа данных

Page 62: DLR Hosting

Twimilar

Задача:Необходимо писать большое количество формул, которым требуется выразительная форма представления (псевдокод).

Page 63: DLR Hosting

Twimilar

Решение:1. Создаём точку расширения2. Пишем функции на Python

Page 64: DLR Hosting

Twimilar

Ответ:

Демо

Page 65: DLR Hosting

GESTALT - DIYСоздаём Gestalt сами

Page 66: DLR Hosting

Gestalt

• Клиентскую часть в веб-приложениях принято создавать на Javascript

• Большинство веб-разработчиков с огромным удовольствием бы отошли от этого правила и воспользовались своим любимым server-side языком.

Page 67: DLR Hosting

GestaltDynamic Languages Runtime

Silverlight

HTML DOM

Page 68: DLR Hosting

Gestalt

Задача:Сделать, чтобы заработало следующее:<script type="python">def func(): HtmlPage.Window.Alert("Hello world!") func()</script>

Page 69: DLR Hosting

Gestalt

Решение:1. Читаем скрипт из Html2. Создаем Script Runtime3. Исполняем скрипт в Silverlight

Page 70: DLR Hosting

Gestalt

Ответ:

Демо

Page 71: DLR Hosting

REAL-LIFE DLR HOSTINGПримеры существующих приложений с DLR хостингом

Page 72: DLR Hosting

Real-life DLR hosting

Page 73: DLR Hosting

Real-life DLR hosting

Page 74: DLR Hosting

Real-life DLR hosting

Page 75: DLR Hosting

Работа на IronPython со всеми основными технологиями Microsoft

IronPython in Action

Page 77: DLR Hosting

Вопросыи

Ответы