Кто работает с Silverlight?
Раскажите какие задачи решаете/решали с помощью этой технологии?
Тут все появляются слухи, что SL помирает.
Кто в теме, какие перспективы? На что стоит обратить внимание?
Я начал изучать эту технологию, и думаю, стоит ли. Особенно интересует для западно европейского рынка.
Текстбох и кнопку могу нарисовать и по клику послать запрос на сервер и вернуть что нить. Но это же можно и в HTML сделать.
Вот и интересует, какие задачи реализуют на SL в реальной жизни.
Спасибо
Здравствуйте, karkasch, Вы писали:
K>Кто работает с Silverlight? K>Раскажите какие задачи решаете/решали с помощью этой технологии? K>Тут все появляются слухи, что SL помирает. K>Кто в теме, какие перспективы? На что стоит обратить внимание?
Silverlight очень похож на WPF. Во многом совпадает. Есть возможность многие вещи делать идентично и там, и там. Ну, в паре мест добавить директивы препроцессора, и вуаля! Один и тот же код работает и в браузере, и на виндовом десктопе. Делай выводы.
На что стоит обратить внимание? В Silverlight многие операции IO намеренно сделаны только асинхронными. Для C# это может стать проблемой. Для F# это уже родная стихия — любо дорого посмотреть, как сложнейшая для C# логика в легкую определяется на F# через монаду Async. Декларативненько так получается. Без явных побочных эффектов. А если серьезно, то с некоторой долей правды можно рассматривать Silverlight как подмножество ядра .NET + WPF.
Здравствуйте, yoriсk.kiev.ua, Вы писали:
YKU>Здравствуйте, karkasch, Вы писали:
K>>Раскажите какие задачи решаете/решали с помощью этой технологии?
YKU>До кучи — это основная платформа для WP7.
До кучи: HTML 5 выполняя вообщем то сходные задачи уже сегодня работает почти везде.
Здравствуйте, karkasch, Вы писали:
K>Кто работает с Silverlight? K>Раскажите какие задачи решаете/решали с помощью этой технологии?
Софт для предприятий, приложения баз данных.
K>Тут все появляются слухи, что SL помирает.
Что это за стыд быть уличёнными в некрофилии у программистов? Трогайте, щупайте, может оно ещё живое!
K>Кто в теме, какие перспективы? На что стоит обратить внимание?
В чём выражается перспективность? Востребованность платформы среди пользователей?
K>Я начал изучать эту технологию, и думаю, стоит ли.
Коли так, придётся изучать всё на чём пользователи захотят запускать твои приложения.
Здравствуйте, karkasch, Вы писали:
K>Вот и интересует, какие задачи реализуют на SL в реальной жизни.
Корпоративный софт. Rich UI, html любой версии отдыхает.
чего бы это он помирал. MS собирается 5-ю версию выпускать.
K>Кто в теме, какие перспективы? На что стоит обратить внимание?
перспективы у сильверлайта или у вас? Поищите для начала реальный проект из той области, которая вам нравится, и попроситесь туда за деньги поработать. Возможно, там будет не сильверлайт и не html, а что-нибудь совсем другое
Здравствуйте, koandrew, Вы писали:
K>Здравствуйте, itslave, Вы писали:
I>>До кучи: HTML 5 выполняя вообщем то сходные задачи уже сегодня работает почти везде.
K>Кроме примерно половины компов, где стоит ИЕ8, а то и ниже...
Однако корпоративно поставить фаирфокс и обязать всех пользовать исключительно его, гораздо проще и дешевле чем ставить другую ОС на примерно второй половине компов.
Опять жы, если мы говорим о перспективах — ИЕ9 поддерживает html5.
Здравствуйте, notacat, Вы писали:
N>чего бы это он помирал. MS собирается 5-ю версию выпускать.
Ну вот подобного я и хотел услышать.
N>перспективы у сильверлайта или у вас? Поищите для начала реальный проект из той области, которая вам нравится, и попроситесь туда за деньги поработать. Возможно, там будет не сильверлайт и не html, а что-нибудь совсем другое
Не понял, к чему это высказивание.
Ну я щас работаю в реальном проекте за деньги, область нравится. Сервелата и html нет.
И что?
Здравствуйте, Vladek, Вы писали:
V>Здравствуйте, karkasch, Вы писали:
V>Что это за стыд быть уличёнными в некрофилии у программистов? Трогайте, щупайте, может оно ещё живое!
Спасибо за доверие)
V>В чём выражается перспективность? Востребованность платформы среди пользователей?
В том, что будут ли за разработку платить деньги.
N>>перспективы у сильверлайта или у вас? Поищите для начала реальный проект из той области, которая вам нравится, и попроситесь туда за деньги поработать. Возможно, там будет не сильверлайт и не html, а что-нибудь совсем другое K>Не понял, к чему это высказивание. K>Ну я щас работаю в реальном проекте за деньги, область нравится. Сервелата и html нет. K>И что?
ну значит сейчас у вас нет перспектив ни в том, ни в другом. Тем более, если область нравится и менять не собираетесь
Здравствуйте, itslave, Вы писали:
K>>>Раскажите какие задачи решаете/решали с помощью этой технологии? YKU>>До кучи — это основная платформа для WP7. I>До кучи: HTML 5 выполняя вообщем то сходные задачи уже сегодня работает почти везде.
Здравствуйте, dsorokin, Вы писали:
D>На что стоит обратить внимание? В Silverlight многие операции IO намеренно сделаны только асинхронными. Для C# это может стать проблемой. Для F# это уже родная стихия — любо дорого посмотреть, как сложнейшая для C# логика в легкую определяется на F# через монаду Async. Декларативненько так получается. Без явных побочных эффектов. А если серьезно, то с некоторой долей правды можно рассматривать Silverlight как подмножество ядра .NET + WPF.
А где можно узнать поподробнее о применении Async в F# для Silverlight ?
FD>А где можно узнать поподробнее о применении Async в F# для Silverlight ?
Больше собственный опыт. Например, если написать такое расширение:
type System.Net.HttpWebRequest with
member x.AsyncGetResponse () =
Async.FromBeginEnd (x.BeginGetResponse, x.EndGetResponse)
member x.AsyncGetRequestStream () =
Async.FromBeginEnd (x.BeginGetRequestStream, x.EndGetRequestStream)
то тогда можно писать что-то вроде такого:
let sendHttp (request: string) = async {
try
log.DebugFormat ("Connecting to the remote server {0}...", uri)
let r = WebRequest.Create (new Uri (uri, UriKind.Absolute)) :?> HttpWebRequest
r.Method <- "POST"
r.ContentType <- "application/xml"
let! s = r.AsyncGetRequestStream () // sic! асинхронно
let w = new StreamWriter (s)
w.Write (request)
w.Close ()
let! r = r.AsyncGetResponse () // sic! асинхронно
let r = r :?> HttpWebResponse
if r.StatusCode = HttpStatusCode.OK then
use r = new StreamReader (r.GetResponseStream ())
return r.ReadToEnd ()
else
log.DebugFormat ("HTTP status code: ", r.StatusCode)
return null
with
| e ->
log.Error ("Error sending a request: ", e)
return null
}
Я для себя еще создал аналоги операций Socket.ConnectAsync, Socket.SendAsync и Socket.ReceiveAsync. При их определении можно использовать Async.FromContinuation. Просто активируешь продолжение в нужный момент. В итоге использующий и работающий с сокетом код получается таким же простым и декларативным.
Здравствуйте, dsorokin, Вы писали:
FD>>А где можно узнать поподробнее о применении Async в F# для Silverlight ?
D>Больше собственный опыт. Например, если написать такое расширение:
D>
D>type System.Net.HttpWebRequest with
...skipped...
D>
D>Я для себя еще создал аналоги операций Socket.ConnectAsync, Socket.SendAsync и Socket.ReceiveAsync. При их определении можно использовать Async.FromContinuation. Просто активируешь продолжение в нужный момент. В итоге использующий и работающий с сокетом код получается таким же простым и декларативным.
Спасибо, хотя я ничего не понял, потому что F# не знаю . (Собираюсь его изучить, как только появится свободное время — есть подозрение, что он является мощным языком).
Здравствуйте, Flying Dutchman, Вы писали:
FD>Спасибо, хотя я ничего не понял, потому что F# не знаю . (Собираюсь его изучить, как только появится свободное время — есть подозрение, что он является мощным языком).
Да, мощный. Язык гибридный. Поддерживает ООП и функциональную парадигму. Возвращаясь к примеру с Async, вся фишка в декларативности. Мы просто определяем вычисление в одном месте. Как реально это запускается — уже дело самого F#. Если обратить внимание на официальные примеры на C#, то там аналогичный код размазан по нескольким методам из-за обязательной асинхронности. Плюс используются переменные для сохранения контекста вычисления. В F# все это происходит прозрачно — компилятор сам следит за такими вещами. Хотя, конечно, я знаю в деталях как именно это происходит, но думать об этих деталях часто совершенно излишне. Да, и это монада. В общем, польза от изучения F# будет
Здравствуйте, dsorokin, Вы писали:
D>Здравствуйте, Flying Dutchman, Вы писали:
FD>>Спасибо, хотя я ничего не понял, потому что F# не знаю . (Собираюсь его изучить, как только появится свободное время — есть подозрение, что он является мощным языком).
D>Да, мощный. Язык гибридный. Поддерживает ООП и функциональную парадигму.
Да, он основан на OCaml, а про OCaml я слышал лет десять назад от одного знакомого программиста (который сейчас работает начальником отдела R&D в одном из крупных европейских банков и широко использует OCaml и Haskell в своей работе. Впрочем, я не знаю, насколько сильно F# отличается от OCaml).
D>Возвращаясь к примеру с Async, вся фишка в декларативности. Мы просто определяем вычисление в одном месте. Как реально это запускается — уже дело самого F#. Если обратить внимание на официальные примеры на C#, то там аналогичный код размазан по нескольким методам из-за обязательной асинхронности. Плюс используются переменные для сохранения контекста вычисления. В F# все это происходит прозрачно — компилятор сам следит за такими вещами. Хотя, конечно, я знаю в деталях как именно это происходит, но думать об этих деталях часто совершенно излишне. Да, и это монада. В общем, польза от изучения F# будет
Да, это интересно. Кстати, можно ли в F# использовать LINQ ? Мы сейчас в нашем проекте на C# много используем LINQ для доступа к базе данных.
Здравствуйте, koandrew, Вы писали:
K>Здравствуйте, itslave, Вы писали:
I>>До кучи: HTML 5 выполняя вообщем то сходные задачи уже сегодня работает почти везде.
K>Кроме примерно половины компов, где стоит ИЕ8, а то и ниже...
Для большой доли компов и 100% планшетов IE не актуален в принципе, так же как Flash с SL. Зато HTML 5 в нормальном браузере "из коробки"- юзеру никто не мешает в 2 клика обновить броузер после прочтения инфы на сайте о поддерживаемых версиях.
Здравствуйте, Flying Dutchman, Вы писали:
FD>Да, он основан на OCaml, а про OCaml я слышал лет десять назад от одного знакомого программиста (который сейчас работает начальником отдела R&D в одном из крупных европейских банков и широко использует OCaml и Haskell в своей работе. Впрочем, я не знаю, насколько сильно F# отличается от OCaml).
Ядро почти такое же как в Ocaml + вычислительные выражения. Использованное мною в примере async — это в действительности "построитель вычислительного выражения". Как еще один частный случай этих выражений есть фантастические sequence expressions, которые позволяют просто создавать сложные ленивые последовательности IEnumerable. Опять же очень декларативно.
Вот, ООП отличается. F# — это все-таки .NET. Пожалуй, нет в самом языке только квалификатора доступа protected, хотя при наследовании внешнего кода из .NET этот квалификатор поддерживается неявно.
FD>Да, это интересно. Кстати, можно ли в F# использовать LINQ ? Мы сейчас в нашем проекте на C# много используем LINQ для доступа к базе данных.
Там свой LINQ. Он другой. Фактически выглядит как сам F#. Вы просто пишете на F# LINQ такие же запросы к базе, как если бы писали на подмножестве самого F#, используя стандартные функции (что само по себе неудивительно, ибо LINQ родом из функциональной парадигмы). Дальше вся магия заключена в "цитировании" (quotations). Просто код запроса заключается в специальные скобочки (<@ .. @>), он парсится как абстрактное синтаксическое дерево (чем-то похоже на макросы Немерле), анализируется, по результату анализа строится выражение исходного C# LINQ, а дальше стандартно. Только все это опять же происходит прозрачно. Сам код, который надо написать, очень прост и почти не отличается от самого F#.
Вот, пример из книги "Expert F# 2.0":
open Microsoft.FSharp.Linq.Query
// Внутри запроса заключено как бы "обычное" выражение F#.
// Его можно было бы выполнить напрямую в F# без LINQ, если
// определить значение db должным образом.
let res =
query <@ seq { for emp in db.Employees do
if emp.BirthDate.Value.Year > 1960
&& emp.LastName.StartsWith "S" then
yield (emp.FirstName, emp.LastName) }
|> Seq.take 5 @>
for (first, last) in res do
printfn "%s %s" first last
Здравствуйте, Flying Dutchman, Вы писали:
FD>Да, он основан на OCaml, а про OCaml я слышал лет десять назад от одного знакомого программиста (который сейчас работает начальником отдела R&D в одном из крупных европейских банков и широко использует OCaml и Haskell в своей работе. Впрочем, я не знаю, насколько сильно F# отличается от OCaml).
F# сначала был урезанным OCaml, убрали функторы, сильно упростили модули, вместо объектной системы со структурной типизацией вставили нетовскую.
Но он развивается и сейчас уже поддерживает много возможностей которые OCaml (во всяком случае из коробки) не умеет, например F# практически
позаимствовал Хаскельные монады
Но до сих пор есть большое подмножество (достаточное для написания нетривиального кода) которое компилируется и на F# и на OCaml.
FD>Да, это интересно. Кстати, можно ли в F# использовать LINQ ? Мы сейчас в нашем проекте на C# много используем LINQ для доступа к базе данных.