Как стать автором
Обновить
0

Mono и Moonlight *

Opensource-воплощение системы .NET Framework

Сначала показывать
Порог рейтинга
Уровень сложности

Поговорим про отличия Mono от MS.NET

Время на прочтение9 мин
Количество просмотров76K


С каждым днём кроссплатформенная разработка под .NET становится всё более реальной. А после недавнего анонса официальной поддержки Linux/MacOS счастливое будущее стало ещё немножечко ближе. Вышеприведённая картинка утратила свою былую актуальность, ведь исходники теперь будут под MIT. Впрочем, писать кроссплатформенные .NET-приложения можно достаточно давно — в этом нам помогает Mono. Но вот отношение к нему в сообществе довольно неоднозначное. Мне зачастую приходится слышать изречения вроде «Mono тупит, под него всё в три раза медленнее работает» или «Под Mono вообще нормально ничего не запускается». Причём очень редко доводится слышать от этих людей конкретные факты. Вопросы «А что конкретно тупит?» или «А что конкретно не работает?» повергают их в ступор. Не всех (некоторые способны на конструктивную дискуссию), но большинство. Чаще всего начинаются возмущённые ответы в духе «Да вообще ничего не работает! А если и работает, то очень медленно!». В конце беседы создаётся впечатление, что каждая конечная машинная команда под Mono работает в несколько раз медленнее, а в половине исходников стоят throw new Exception().

В этом посте мне хотелось бы немножко поделиться опытом. Не так давно мы портировали наш продукт PassportVision (анонс на Хабре) под Linux. Могу заявить, что работает он вполне нормально. Да, чутка медленнее, чем под Windows на классическом .NET от Microsoft (далее — MS.NET). Но работает вполне стабильно, а падение производительности не принципиальное. При этом продукт у нас достаточно большой и вполне попадает под категорию enterprise, а возможности C#/.NET мы используем на полную катушку. Так что завести большое серверное приложение под .NET реально — было бы желание. Также мне довелось беседовать с разными разработчиками, которые пишут что-то под Mono — истории в большинстве своём успешные.

Но почему же тогда встречается столько негатива в сторону Mono? Я считаю, что проблема в том, что люди не особо хотят разбираться в разнице между рантаймами. Запустили разок какое-нибудь .NET-приложение под Linux на Mono 2.4, а оно с ходу не запустилось — всё, Mono целиком плохой, не будем его использовать. А в итоге виноват оказывается один-единственный метод, у которого реализация немного отличается от MS.NET. Новые версии Mono выходят раз в пару месяцев, реализацию уже давно поправили, но люди всё равно продолжают ходить и хаять бедный Mono, не желая разбираться в деталях.

Сегодня я приведу несколько примеров того, чем вообще могут отличаться разные рантаймы.
Читать дальше →
Всего голосов 92: ↑88 и ↓4+84
Комментарии77

Разработка приложения на Android с помощью Xamarin и F#

Время на прочтение10 мин
Количество просмотров17K
image

Привет!

Недавно Xamarin объявил конкурс на разработку мобильного приложения на функциональном языке программирования F#.
Это было связано с выходом Xamarin 3 с полной поддержкой F#. Я решил отвлечься от повседневных задач и попробовать поучаствовать, тем более что я давно смотрю на F#, но шансов познакомиться с ним подробнее у меня не было. Для участия в соревновании я решил разработать приложение идея которого была предложена кем-то в процессе обсуждения внезапного взлета мобильного приложения Yo. Вот цитата:
Идея для стартапа, рабочее название «ты где?».

Смысл прост, девушка устанавливает приложение, указывает в нем номер своего молодого человека и после этого появляется большая гнопка отправки сообщения «ты где?» #startup #idea

Почему бы и нет?

Примечание
Я писал этот пост параллельно работая над приложением. Поэтому он большой и местами не очень логичный.

Читать дальше →
Всего голосов 24: ↑17 и ↓7+10
Комментарии8

Лечим SQLite в Monotouch или практическая польза рефлексии

Время на прочтение7 мин
Количество просмотров3.9K
Работа с детищем Xamarin интересна и полна сюрпризов, как в хорошем смысле слова, так и в плохом. Одни проблемы решаются при помощи гугла и StackOverflow, другие же требуют нестандартного подхода. В данной статье я хочу рассказать историю о том, как можно с помощью исходников, рефлексии и трех кружек чая решить одну пренеприятнейшую проблему.

Читать дальше →
Всего голосов 6: ↑6 и ↓0+6
Комментарии2

Xamarin. За и против

Время на прочтение4 мин
Количество просмотров61K
image

Наверное, каждый .NET разработчик, знакомясь с monodroid и monotouch, хочет узнать, что его ждет. Стоит ли тратить свои силы и время на изучение, какой потенциал платформы, не превратится ли разработка в тестирование фреймворка?

Уже больше года моей основной задачей является разработка на C# под Android и IOS, и я постараюсь ответить на основные вопросы, возникающие при выборе monotouch и monodroid. В статье будет много личного мнения и описания костылей, так как ответы по техническим вопросам можно легко найти на официальном сайте Xamarin: docs.xamarin.com

Поскольку Xamarin 3 вышел только недавно, мне не удалось полностью прощупать новые возможности и изменения в платформе. Тем не менее, почти все «особенности» разработки в monotouch и monodroid по-прежнему актуальны.
Читать дальше →
Всего голосов 48: ↑42 и ↓6+36
Комментарии31

Истории

Введение в XWT

Время на прочтение6 мин
Количество просмотров8.4K
Приветствую всех читателей данного ресурса! В данный момент разработано множество решений для обеспечения кросс-платформенности GUI-приложений Microsoft .NET/Mono. В этой статье я ознакомлю читателей с одним из них, официальным проектом от разработчиков Mono — XWT Widget Toolkit (Xwt). Скачать его можно на данный момент только в виде исходников из репозитория github.com/mono/xwt. К сожалению, грамотных и полных статей об этом тулките в Интернете найти не удалось, поэтому пришлось разнюхивать всё самому. Т.к. эта статья не рекламная и не обзорная, я не буду объяснять, чем XWT лучше или хуже того же Eto Forms или System.Windows.Forms (последнее на Mono работает вполне сносно). В этой статье будет рассказано о принципе работы XWT и азах работы с ним.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии2

ASP.NET vNext. Open Source и с поддержкой Linux

Время на прочтение1 мин
Количество просмотров14K
Microsoft анонсировали новую версию стека ASP.NET под лицензией Apache 2 с поддержкой запуска на платформе Mono. Помимо открытости исходников распространяться это дело будет через NuGet, а разработка вестись под эгидой .NET Foundation. Так же новый стек оптимизирован под облачные платформы, а инструментарий разработки позволяет вносить изменения в код без перкомпиляции и перезапуска.

Изменения касаются так же MVC, Web API, Web Pages, SignalR и EF. MVC, Web API и Web Pages теперь придерживаются единой програмной модели, например, используется один и тот механизм маршрутизации, а базовый контроллер один на всех, с одного адреса можно возвращать как вьюшки, так и ответы WebAPI. Оптимизация под облака по большей части заключается в том, что механизмы типа кеширования прозрачно переключают свою реализацию в зависимости от того, где запущено приложение.
Всего голосов 48: ↑45 и ↓3+42
Комментарии27

Обмануть Мигеля?

Время на прочтение5 мин
Количество просмотров39K

Как-то раз Мигель…
(Хотя нет, история не совсем о нем, попробую начать иначе)
Однажды в мире Open Source…
(Тоже мимо, OSS в истории затронуто лишь частично)
Когда жажду наживы называют здравым смыслом, начинается обман.
(Почти афоризм)

Предыстория

Стукнуло мне в голову написать программу под Мак на C#. Я поблагодарил Мигеля де Икасу за отличный Open Source проект Mono, воздал хвалу за его же библиотеку MonoMac, чуть ругнулся на сыроватый MonoDevelop и принялся за работу. Через некое время был оплачен аккаунт в AppStore, программа была в шаге от завершения, когда начался большой проект по основной работе и ее пришлось отложить. И вот через год пришло сообщение, что пустующий аккаунт в AppStore будет закрыт через 30 дней — это был знак, что надо что-то делать. MonoDevelop, обновившийся сам до Xamarin Studio, предложил сразу проект MonoMac преобразовать в Xamarin.Mac и повел меня на сайт, где было предложено купить этот самый Xamarin.Mac всего за $999, иначе деплоймент в AppStore будет невозможен.
Читать дальше →
Всего голосов 122: ↑105 и ↓17+88
Комментарии50

Абстрактный UI. Новый фреймворк для C#, который назвали XWT

Время на прочтение5 мин
Количество просмотров26K
Если посмотреть на существующие современные фреймворки для реализации пользовательских интерфейсов (WPF, GTK, Qt, wxWidgets, да даже модные веб-решения), то легко заметить, что они похожи друг на друга как близнецы. Любой фреймворк содержит кнопки, поля, чекбоксы, переключатели, характеризуемые идентичной с точки зрения пользователя логикой. Отличия заключаются только в низкоуровневой реализации.

Когда где-то в мире программирования появляется что-то слишком похожее, то это стремятся обернуть в слой абстракции. И вот я случайно наткнулся на подобное решение, созданное парнями из Xamarin. Теми самыми, которые продают C# фреймворк для iOS и Android. Решение это назвали Xwt — судя по всему, это расшифровывается как Xamarin Window Toolkit.

Читать дальше →
Всего голосов 41: ↑37 и ↓4+33
Комментарии42

Сравнение производительности Xamarin (monodroid) и Java (DalvikVM) на Android устройствах

Время на прочтение5 мин
Количество просмотров44K
image
Добрый день. Многие интересуются насколько сильно отличается производительность Xamarin на Android или iOS. Вопрос с iOS я пока оставлю открытым, а вот все вопросы по производительности monodroid предлагаю закрыть раз и навсегда.

Зачастую эти вопросы вызваны из-за неправильного понимания как устроен monodroid, мне например задавали вопросы типа «А Xamarin потом пересобирается под JVM?». Это конечно же не так. Важно понимать, что Xamarin выполняется на том же уровне Android где работает виртуальная машина Android Dalvik. Поэтому при сравнении производительности мы на деле имеем сравнение эффективности работы двух виртуальных машин: Mono VM и Dalvik VM.

Читать дальше →
Всего голосов 51: ↑44 и ↓7+37
Комментарии36

Разработка IM на конкурс Павла Дурова с помощью Xamarin

Время на прочтение15 мин
Количество просмотров24K
image
Добрый день.

Как многие наверное знают, Павел Дуров разрабатывает новый клон What's App и прочих популярных мессенджеров на базе своего собственного протокола MTProto.

Недавно американская компашка выпустила iOS клиент под этот протокол под названием Telegram. Параллельно с этим проводится — конкурс на разработку Android клиента.
Недавно завершился второй этап, народ отправил свои поделки и я в том числе. Скажу сразу, второй этап я не прошел.

В отличие от многих участников, для разработки я пользовался языком C# и Xamarin о чем и хочу рассказать подробнее ниже, так как по Xamarin в рунете информации скажем прямо немного.

Читать дальше →
Всего голосов 43: ↑38 и ↓5+33
Комментарии23

Используем фичи C# 5 (async и await) в .NET 2.0

Время на прочтение3 мин
Количество просмотров24K
Посвящается тем 45% .NET разработчиков, что до сих пор сидят на фремворках 2.0-3.5.

Да, вы не ослышались. async и await во втором дотнете. Но обо всём по порядку.

Зачем?

В какой-то момент мне надоело вручную возиться с написанием асинхронного кода. Async/awat выглядели слишком вкусными, чтобы не попробовать. Зная, что Microsoft при добавлении новых возможностей в язык и компилятор не привязывает их жёстко к фреймворку (так, extension-методы и LINQ отлично можно использовать во втором .NET, если где-нибудь объявить System.Runtime.CompilerServices.ExtensionAttribute), и видя Async CTP, добавляющего возможность использования async/await в 2010-ую студию при использовании в качестве целевого фреймворка .NET 4.0, я подумал, а почему бы и нет?

Читать дальше →
Всего голосов 51: ↑48 и ↓3+45
Комментарии4

PlayScript

Время на прочтение6 мин
Количество просмотров8.2K
Примечание переводчика: неделю назад Zynga открыла исходники проекта, упрощающего перенос игр с Flash на мобильные платформы. Так как на хабре много людей, которые пишут игры на флеше, либо под мобильные платформы, представляю вам перевод текста со страницы данного проекта. Вполне вероятно, что вы захотите использовать его в своих разработках.

Что такое PlayScript?


PlayScript это проект с открытым исходным кодом, представляющий из себя ActionScript-совместимый компилятор и Flash-совместимую среду выполнения, которая работает на Mono .NET и предназначена для создания мобильных приложений с помощью MonoTouch и Mono for Android. Сочетание Adobe FlashBuilder для создания веб-приложений и Xamarin Studio для мобильных позволит разрабатывать мультиплатформенные приложения с использованием всех преимуществ данных IDE, а также с возможностью доступа к нативным API на мобильных платформах.

Читать дальше →
Всего голосов 18: ↑18 и ↓0+18
Комментарии4

Прототип голосового списка покупок для WP8, Win8, Android c бекендом в Azure за 2,5 часа

Время на прочтение8 мин
Количество просмотров8.8K
С 9 по 11 ноября проходил Windows 8 Хакатон RUWOWZAPP, куда я сначала зарегистрировался как участник, а потом удостоился чести присутствовать на мероприятии в качестве эксперта. Будучи в качестве эксперта я познакомиться со множеством замечательных людей и их проектов. Было настолько интересно что продолжал консультировать даже по ночам, и на сон оставалось 4-5 часов. Я настолько заразился позитивом и энергией и желанием людей создавать, что тоже не удержался от создания своего небольшого прототипа приложения — Списка покупок с поддержкой распознавания голоса.
За пару часов мне удалось сделать функциональный прототип, демонстрирующий идею приложения, с клиентами для WP, Win8, Android

Мне не хотелось участвовать в конкурсе приложений с таким сырым прототипом, но мне очень хотелось показать то что я сделал за пару часов, и в последний момент, перед выступлением последнего участника встал в очередь на выступление, и ведущий позволил мне продемонстрировать свои поделки:



Приложение вызвало большой интерес у участников хакатона и фактически это обещанная статья со всеми ответами на вопросы, на которые тогда у меня не хватило времени.

Для тех кто хочет сразу посмотреть код, исходники можно скачать здесь
А остальных прошу под кат.
Читать дальше →
Всего голосов 41: ↑36 и ↓5+31
Комментарии3

Ближайшие события

19 сентября
CDI Conf 2024
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн

Mono 3.0

Время на прочтение1 мин
Количество просмотров17K
18-го октября вышла новая версия свободной кроссплатформенной реализации .NET Framework: Mono 3.0. Полный список новых фич можно найти в Release Notes на официальном сайте, а пока что некоторые из них:
  • Поддержка асинхронной модели программирования C# 5.0
  • Единый C#-компилятор для всех профилей
  • C# Interactive Shell
  • 4.5 Async API Profile
  • Работа с ASP.NET MVC 4, ASP.NET WebPages, Entity Framework, Razor, System.Json
  • Сборщик мусора с улучшенной производительностью
  • Поддержка CodeContracts
  • Частичная поддержка Portable Class Libraries
Всего голосов 47: ↑46 и ↓1+45
Комментарии23

История о велосипеде

Время на прочтение5 мин
Количество просмотров3.8K
imageИногда программисты изобретают свои «велосипеды», но действительно ли это плохо, особенно если творение не отличимо от оригинала, а автор получает бесценный опыт?

Эта история началась чуть более года назад с появлением у моей супруги современного смартфона. Она попросила найти пасьянс «Косынку», такой же как был когда-то на настольной Windows. Просмотрев десяток программ, я был неприятно удивлен — почти везде было неудобное управление, спорные картинки карт, море дополнительных наворотов вроде 250 пасьянсов в одном, установки фотографии на рубашку и блекджека с блудницами. В результате, выбрали один из более-менее годных вариантов и на какое-то время об этом забыли.
Пролетел год и я начал писать программы для мобильных. При этом ребром стал вопрос кросс-платформенности, отладки in-app покупок, подготовки контента под разные платформы. Была мысль сделать для пробы пера «Тетрис» или очередной калькулятор, но все же в качестве «велосипеда» я выбрал «Косынку». Идейным стрежнем проекта стало максимально точное повторение старого, доброго пасьянса из набора игр Windows.

Читать дальше →
Всего голосов 37: ↑32 и ↓5+27
Комментарии22

Miguel de Icaza про ASP.NET MVC, Moonlight и суд над Android

Время на прочтение5 мин
Количество просмотров2.7K


Предлагаю перевод недавнего интервью Мигеля для портала InfoQ.

У нас появился шанс связаться с Мигелем де Икаса, основателем проекта Mono и материнской компании Xamarin. Мы затронули несколько тем, включая будущее ASP.NET MVC в Mono и прекращение разработки Moonlight.
Читать дальше →
Всего голосов 47: ↑44 и ↓3+41
Комментарии11

Вышел MonoDevelop 3.0

Время на прочтение2 мин
Количество просмотров16K
Релиз был бы ничем не примечателен, если бы состоял только из тонн багфиксов и улучшений производительности. Однако же помимо них присутствуют два заметных глазу улучшения:
1) Поддержка сборки приложений для Mac App Store
2) Кардинальные улучшения в редакторе текста

На последнем стоит остановиться подробнее.

Читать дальше →
Всего голосов 46: ↑43 и ↓3+40
Комментарии26

Прикручиваем Head Up Display к MonoDevelop или о том, как криво сделано глобальное меню в Ubuntu

Время на прочтение3 мин
Количество просмотров2.2K


Проблема с неработоспособностью HUD в MonoDevelop уходит корнями в старый баг, вызванный переходом на глобальное меню и заключавшийся в том, что менюшки у MonoDevelop не показывалось вообще никакой. Его "починили", выключив использование глобального меню как такового. Это же так просто, не фиксить проблему в своей кривой либе, а сделать чёрный список приложений.
Тяга к экономии пикселей и желание таки прикрутить HUD взяли своё. Целых два часа моего драгоценного времени, несколько костылей и всё таки завелось.

Небольшой экскурс в работу глобального меню: оно экспортируется приложением через D-Bus, а чтобы разработчики не писали дополнительный код, в Canonical наклепали хитровывернутых библиотек, берущих нормальное, человеческое меню оконного тулкита и экспортирующие его за разработчика, причём, как выяснилось, весьма криво, но об этом потом. При этом возможности вручную экспортнуть это меню нет. Точнее, есть какая-то мутная библиотечка с названием libdbusmenu и полным отсутствием хоть какой-то документации, не говоря уже о биндингах к чему-либо. Этакая проприетарщина наоборот — код открыт, но использовать его толком нельзя ввиду невозможности быстро понять, как с этим вообще работать. Таким образом реализовать в GnomePlatform.cs метод SetGlobalMenu (предусмотренный специально для систем с глобальным меню и реализованный в MacPlatform.cs) не представляется возможным, что ж, придётся разбираться с тем, почему не работает костыль с экспортилкой и придумывать свои костыли, чтобы оно заработало. Я такими извращениями не занимался со времён, когда нужно было заставить работать Навител на разнокалиберных китайских железках с изувеченной до неузнаваемости WinCE 4.2.

Читать дальше →
Всего голосов 35: ↑31 и ↓4+27
Комментарии19

Android портирован на C#

Время на прочтение1 мин
Количество просмотров32K
В разгар битвы между Oracle и Google за право использовать Java/Dalvik в системе Android, компания Xamarin представила альтернативу — более производительную и энергоэффективную версию Android на С#. Тесты производительности говорят сами за себя.



В отличие от Sun и языка Java, компания Microsoft направила C# и .NET VM для стандартизации в ECMA, система защищена от патентных исков строгими требованиями ISO, а также обязательством Microsoft.
Читать дальше →
Всего голосов 224: ↑201 и ↓23+178
Комментарии294

Monotouch OpenSource библиотека для отображения PDF документов

Время на прочтение7 мин
Количество просмотров2K
Ну вот, наконец-то я решил сделать один из своих проектов открытым и доступным для общественности, т.е. превратить его в open source, ну а рассказать об этом событии захотелось на Хабре.
Далее речь пойдет о платформе Monotouch и отображению PDF документов в iOS. В теме я не буду приводить кучу исходников библиотеки, кому надо, тот найдет их на GitHub, а постараюсь сконцентрировать внимание на сложных вопросах, возникщих при построении библиотеки.
Читать дальше →
Всего голосов 14: ↑11 и ↓3+8
Комментарии14