My short bio: Software developer, running the Xamarin mobile group where we blend Android, iOS and .NET and the Visual Studio for Mac group at Microsoft.

Co-founded Xamarin, Ximian and Gnome projects. Mexican turned Bostonian, co-parent of 3 humans, and one dog.

My Proof: https://twitter.com/migueldeicaza/status/968247216019263488

Thank you all for joining and asking these great questions. I have to head out now, but you can reach out on Twitter if you have more questions!

Comments: 199 • Responses: 69  • Date: 

Bryfry3328 karma

Xamarin was the second-most dreaded toolchain according to last year’s Stack Overflow survey. Why do you think that may be, and how do you and the team plan on turning that around?

Edit: I was being a bit too harsh here and have revised some of my thoughts that made me post this- some of which were incorrect.

migueldeicaza31 karma

We do not want to be on any dreaded list, but I think that the list that you are quoting had us and Cordova on Mobile and everything else was non-mobile.

And some of the challenges just come with the territory, like having slow Android emulation on Windows (as Windows defaults to Hyper-V, which makes Android emulation slow).

This is one of the things that is most painful for our users, which is why we invested in the Live Player, so we could avoid using the Android Emulator at all, and just go straight to device and provide a live updating experience.

I would say that our users have complained about a number of things:

Compilation times: while things work great for small projects, the compilation times become very slow for very large projects. We are aware of the issues, and we are working towards long-term fixes. The issues are not just a matter of optimizing a loop though, they are usually fundamental problems in the way that we need to link native libraries or third party components and the balance between compilation times, deployment times and executable sizes.

For example: We can compile very fast if we do not remove unnecessary code, but then your application is larger.

Evolution of tooling: we had to cope with the migration from PCL to .NET Standard 1, to .NET standard 2, and this created a lot of problems for our users during the transition period. Things have started to stabilize, and the community has been rallying around .NET Standard 2, so we think that this issue will be solved mostly on its own.

As for how we are fixing those issues, we are trying to be very proactive on these issues, so we survey our users to find out what are their major pain points and fix those, and reactively when customers come to us asking us for help.

Our motto for years has been to delight developers, and it is something that our team aspires to achieve every day - from fixing bugs, and performance issues to designing APIs, tools, processes and UI that will achieve that goal.

Bryfry339 karma

I definitely sympathize with the difficulty of the problem you’re trying to solve, to also reference the other comment in response to mine. As well as some of the constraints you’re dealing with- I too hope .NET Standard cleans up a lot of issues and your time is freed up now that it’s stabalized.

But I don’t think that addresses a fair criticism of Xamarin’s stability as a framework and robustness as a toolchain. That list does have Cordova just above Xamarin- is that the standard? Considering that React Native was considerably lower on that list and considerably higher on the “loved” list. Survey’s aside, is it Xamarin’s goal to be a genuine contender for developers, especially younger ones? Or a toolchain for those already involved with .NET? I don’t see how Xamarin doesn’t stop shedding developers as PWAs and the flutters of the world move in, if it doesn’t directly provide an answer on par with its competitors, namely React, whether that’s fair or not.

And it’s not just compile times, I know that stuff comes with the territory. But the iOS designer has nowhere near the capability of Xcode- again, okay, but the Xcode support was pretty bad for a long time. The profiler was unusable for, literally, years- and retroactively put in preview. And still isn’t easily integrated in to the IDE. The inspector is dead? I believe the Test Recorder is dead as well. Live Player was a response to your Android emulator, yea? It didn’t really work outside of Forms early on- I haven’t tried recently. The VS for Mac debugger was telling me everything was null for a bit there. But Workbooks is getting development resources? It feels like Xamarin chases the next big thing, over stability, only to eventually scuttle it. And that’s not even mentioning the API bugs, which have been better more recently, I’ll admit.

I guess I just wonder with all this how a company is supposed to feel comfortable going forward with Xamarin when the onus is, although unfairly, on you to prove why not React or even native.

migueldeicaza13 karma

  1. Yes, we want to be contender for new developers, and we want them to choose it out of love.

With the iOS designer we made a mistake - we followed a development model that turned out to be too complex, and we had to undo it. It sets us back a whole year in the experience, but we have fixed that.

The profiler is something we continue to invest on, as it is a tool that every developer needs. And I wish more developers used a profiler, so they would stop using Dependency Injection on their apps. It will never be integrated into the IDE, I do not think that it would buy anyone anything. The profiler is very memory hungry, the last thing I want is for the profiler and the IDE to share an address space.

Live Player is both a tool for quickly getting started as well as a mechanism to quickly iterate on design and implementation, while the Android emulator on Hyper-V is a different problem that needs to be fixed. They are both needed in my opinion.

The inspector is still there, we just did a bunch of upgraded to it for Windows, shipping in our 15.6 release (and available on preview now). Inspector and workbooks are the same codebase, just different defaults for interations (one re-evaluates, the other does not).

johnnyasantoss19 karma

What made you want to develop Mono?

migueldeicaza27 karma

For years, my goal was to create a world built on open source software and this took various forms.

One of those forms were the efforts to build desktop applications -that at the time were lacking on Linux.

I wrote a spreadsheet called Gnumeric, and collaborated with others to put together a suite of desktop applications, the last one I was involved with was Evolution - an email and calendar client.

We built all of those with C, as scripting languages in 1997-2001 were just too slow to run on the machines of the day (we tried and tried).

.NET hit the right spot of high-level capabilities, and performance that we were looking for. So we set out to build an open source implementation so we could build the next generation of desktop apps for Linux

quit_whining7 karma

I have a book from that era that you wrote on how to program for GTK+.

migueldeicaza8 karma

Perhaps I wrote the preface, I never had the time to write a book.

itchicago17 karma

What is your feeling about the whole Node/JS ecosystem? Specifically does writing a desktop app (ex: Slack) in JS feel like the right tool for the job?

migueldeicaza25 karma

I am impressed how far Javascript has come.

I can't even

garthvh14 karma

Are you warming up to the open office layout at all?

migueldeicaza29 karma

The layout is fine, the problem is dealing with the people walking into the office to ask a question to someone else in the room

Even if they are trying to be polite, one question every day in a room of six people is still six interruptions.

And I have to unplug and replug computers all day as I go from my desk to a private room to take phone calls.

Not enjoying it one bit

zerogeek13 karma

With office for mac and windows now sharing a codebase, do you think VS for mac and windows should move to the having a shared codebase?

migueldeicaza28 karma

Yes, we are!

More and more code is being shared between the IDEs today.

We are following the guidance to split our code between xplat code and platform specific code.

We started with the core of Roslyn, and we are in the process of replacing the text editor to share the same core as VS on Windows, except one will use a WPF frontend and the other will use a Xamarin.Mac (cocoa) frontend.

The HTML editor, CSS editor, Json editor, and soon the Razor and TypeScript and JavaScript editors will be 100% shared.

While VS 4 Mac started as a fork of MonoDevelop, over time, we have been replacing parts of the code with code from VS, and when we write new code, we write it in a way that works on both platforms.

For example, Mikayla today pointed me to this sample that shows where we are going, we will be one day be able to even share extensions between both of the IDEs:

https://github.com/gundermanc/vs-xplat-extensibility-samples

ickler91 karma

Yesssss, is the Xamarin.Mac frontend on a branch somewhere? Can the community do PRs down the line?

migueldeicaza3 karma

For which part?

We have some 3-4 branches tracking these bits right now, and some code being unlocked soon.

thruxtonr12 karma

Thanks for doing this AMA. What are your thoughts on Flutter? https://flutter.io/ and what do you see as the main advantages of using Xamarin vs. Flutter?

migueldeicaza20 karma

It is a different approach at building mobile applications.

It draws a lot from Adobe AIR/Flash in that it renders the whole UI on its own, while at Xamarin we try to use the native controls of the platform to render the UI.

Both approaches are valid, and sometimes you will want one over the other. I have been lucky in my life to have worked on toolkits that do all of these :-)

With Xamarin you get access to all the native APIs along with C#, F#, Visual Studio, the NuGet ecosystem.

Rocah12 karma

Will we ever see a direct rendered Xamarin Forms platform (e.g. using SkiaSharp) rather than wrapping native widgets?

migueldeicaza11 karma

I think this will eventually happen.

The way that I envision this is that we would let users control whether to use the native backend, or the hand-drawn backend either at a global level, a page-by-page level, or the control level.

The infrastructure for making this happen is there, and it might be something we look into in the future.

LilSiriusPanda12 karma

Why we haven't seen the long time ago said to be coming linux tooling for Xamarin yet? Was that decision changed, have you decided to support any distro or just gave up on that idea?

migueldeicaza12 karma

We have the tools working on Linux (some of our team members still develop all the time on Linux), but have not finished some of the difficult pieces.

We recently put together a list of the challenges that we are facing and need fixing before we can ship it:

https://github.com/mono/monodevelop/projects/2

Seeife3 karma

Could you urge somebody on your team to write a quick guide on how to develop Xamarin.Android on Linux? I tried it recently and miserably failed. I managed to build some projects but other just didn't build, really inconsistent. It would be cool to get some know how on this

migueldeicaza3 karma

I’ll ask them. I think the first step is to package xamarin-android which they build from source, but you likely wouldn’t want to.

ericsink12 karma

I've seen you say that you dislike Dependency Injection. I am wondering if you make this opinion more precise.

I'm envisioning a continuum, where one end is "simply calling through an interface" and the other end is "taking DI and IOC to absurd extremes".

Do you know a specific point on that continuum where your perspective goes negative?

migueldeicaza20 karma

My main dislike is the complexity that comes with it.

Generally, debugging, extending or working with third party code that uses DI is an exercise in frustration. None of my tools work, finding references, greping, patching are just very cumbersome. I have nightmares just remembering the last two projects I had to touch with this, just trying to hunt down hidden features in them.

The other problem is rooted in my age, I grew up looking at the output of the compiler output, and I know the cost of DI, and the ecological, green developer in me can not fathom the waste of resources that go into running that code.

ericsink1 karma

Thanks for the reply. One followup question to clarify further, if you have a chance:

If I take the reasons you gave and replace "DI" with "the technique of calling through C# interfaces", would the resulting sentences still accurately represent your opinion?

migueldeicaza5 karma

Somehow, the performance issue comes up with interfaces, and comes up with the additional overhead that people incur with the DI engines.

The complexity piece comes in various shapes, probably the worst part is when you are dealing with what amounts to a poor man's resolver with everything that goes with it, like poor ideas on population, poor ideas on registration, poor ideas on binding and so on.

Just not something I enjoy myself.

Lostsoul058910 karma

When did you realise Xamarin was going to be as big as it became which led to the Microsoft acquisition?

migueldeicaza17 karma

There was no single realization.

We had been working on Mono (an open source .NET implementation) for years, and were always interested in seeing more uses for it, so we tried to adapt it to many different scenarios.

The one that resonated the most with our users, and the one that had people pay for was the version that supported iOS development.

The iPhone really launched a new era for me and my conspiring colleagues.

crogeniks9 karma

Hey Miguel,

Were do you see Mono vs .Net Core in the future? Do you foresee that .Net Core will replace Mono? Or the goals of those 2 are too seperated?

migueldeicaza15 karma

Mono runs on some platforms that .NET Core does not, and is optimized for size.

That said, we have been working to converge the codebases, so when we improve a library in one place, it benefits all the users.

So far we have replaced some 6,000 types and classes in Mono with shared/converged code with .NET.

I detailed the approach we are following here: http://www.mono-project.com/news/2016/11/29/mono-code-sharing/

vitorgrs2 karma

So the point wouldn't be to make .NET Core to run on more platforms, and bring optimizations and other mono improvements to .NET Core? That's the question. Or do you think in 5 years both will be separated yet?

migueldeicaza6 karma

It is possible, it is just harder than keeping the two runtimes going, and it would likely not solve any customer problems, it would instead delay the delivery of desired features to customers.

biozal8 karma

How are things now working at Microsoft vs working with Microsoft? Do you feel that you have the resources to continue to evolve Xamarin? Has Microsoft looked at the Xamarin University as an option to include videos for all of its development toolkits?

migueldeicaza4 karma

I love working here, there is a strong synergy between the Xamarin group, the .NET group and the Visual studio group.

Xamarin is in good hands here.

It has been also great to work with the Windows team and the Office team, lots of ex-.NET people there bringing their love for developers everywhere.

that1communist8 karma

As gnome founder, what do you think about kde plasma?

migueldeicaza10 karma

I should try it some day :-)

sethjuarez8 karma

So who would you say is your favorite Channel 9 host of all time? Asking for a friend.

migueldeicaza3 karma

Trick question - the host is the face of an amazing team, so I would say all of you :-)

SignificantParfait8 karma

There are a bunch of different development environments, but .net is arguably one of the strongest - and core 2 looks seriously nice cross-platform. You can run enterprisey apps, but it's also there in Lambda etc.

What is it going to take to pick up for Linux-environment developers? Why has take-up been so poor so far, and what can be done to change that - or, will it just stay a Windows developer tool?

migueldeicaza11 karma

We will shower Linux developers with love.

Linux was the first love for many of the engineers on my team, and we are making .NET Core not only more friendly to Linux users, but the friend a Linux user can have.

We have been working with Red Hat to make .NET Core work great with the Linux traditions, and I believe that this will have a positive impact on the space.

Finally, my favorite: .NET Core 2.1 now lets you define "commands" and install them easily into the system. This was the missing piece in my opinion :)

surban7 karma

Do you think .NET native compilation (with static linking) will come to Linux? I really love coding in .NET, but having to ship each program with ten or more runtime libraries makes it unsuitable for writing small command line tools at the moment.

migueldeicaza11 karma

Yes! I think it will come!

In the meantime, Mono offers this functionality, and you can ship full applications in a single executable and cross-compile in a fraction of a second with Mono:

http://www.mono-project.com/docs/tools+libraries/tools/mkbundle/

We have shared the technical details with the .NET team to replicate the above.

clarvalon7 karma

Hi Miguel. What will your oft-promised Unity game be about?

migueldeicaza6 karma

I think I am going to steal the idea from my friend Stephane Delcroix who used it as a way of working on a joint project with his kid:

https://blog.xamarin.com/interview-six-year-old-as-product-managers/

I am now brainstorming ideas with the kids!

gorhal7 karma

How is the status on the very interesting Blazor project? I heard that is something you(your team) are working on...

migueldeicaza10 karma

Steve wrote a great status report here:

http://blog.stevensanderson.com/2018/02/06/blazor-intro/

Meanwhile, Kenneth has been working on surfacing all the DOM APIs to C# (well, really any API that has a strong type definition in DefinitelyTyped):

https://github.com/mono/TsToCSharp

Rodrigo has been working on getting the debugger working, Laurent has the static and optimizing code on WebAssembly.

Finally, XXXXXXX has been working on XXXXXXXX, and YYYYYY has finished YYYYYYYY, it is quite cool. I wish I could tell you more, but I still have a mortgage to pay!

RirinDesuyo1 karma

That sounds great! I really do feel this will be game changing for the web. I wonder if there are any plans on enabling Xamarin.Forms for web as well ala Silverlight? One can dream for such I guess :P

migueldeicaza2 karma

It runs on asp.net core rendering HTNL remotely using Ooui. Check this out:

https://github.com/praeclarum/Ooui

j-phenow6 karma

First of all - well done. I had used .NET a little, years ago, as a requirement during an internship I had. A little over a year ago we were looking into how to provide Android+iOS apps in lockstep release. Xamarin quickly became a clear choice due to maturity, tooling, support, among other things. After a little over a year tinkering on Xamarin I’ve gone from not caring about .NET to wanting to use it as much as possible. Your work played a big part in that, and you should be proud as hell.

Oh yea questions

  1. Where do you see mobile software headed over the next few years? More Xamarin or the like? Different paradigms? Something different entirely?
  2. What’s a key thing missing in Xamarin today?
  3. Where do you see .NET Core fitting into the world? Does it generally work to break into the hearts and minds of people like me who used to be wildly anti-Microsoft? Does it try to take on the rising love of Go?
  4. What’s a key thing missing in Core today?
  5. What’s your favorite thing about what you do?

I have way more but to avoid piling on, I’ll save fire another time 😁 thanks for doing an AMA!

migueldeicaza8 karma

Thank you for the very kind words! I will frame this ;-)

  1. I am very bad at predicting the world, but I can say that our goal is to keep .NET relevant for all users across the world. My focus is on the mobile space, so I can say that our goal is two-fold: (a) keep parity with the native capabilities that are offered by the native platform, so developers never have a reason to regret using .NET on the platform, and (b) to make it simple for developers that choose to write once, and run in multiple platforms be successful.

For the latter, we are going to both continue to improve our cross-platform APIs, like Xamarin.Forms, UrhoSharp, SkiaSharp, and the upcoming Caboodle which are pretty self explanatory. But we are also keeping our eyes open for changes in the industry, and make sure that we react and support those for our users.

In the end, we need you to be successful.

  1. Xamarin.Forms binding to GraphQL.

  2. The .NET Core team is trying to make the most reliable and fastest tool for server developers, so I think that you will be very pleased with the performance and memory profile that .NET has for server applications.

  3. .NET Core should embrace my design for mkbundle and call it a day.

  4. I still obsess over UI, from my Gnome days, and I love to spend time with our design team and our engineering team to think about how we can make our products easier to use and nicer on the eye.

Shreddit1086 karma

What impact do you think Progressive Web Apps and WebAssembly will have on mobile app development? Won’t people just bypass the App Store and say adiós to worrying about Android versions?

migueldeicaza14 karma

Those are both great technologies, and we are a fan of those.

Even in the Xamarin days, our guidance to our customers is that you need to reach all the audiences, so you should have a strong web and mobile web presence and a mobile presence.

I believe that there is a class of apps that will work great as WPA and WebAssembly, but developers have very different needs and business goals and those are not always fulfilled with a single technology stack today.

I am biased, as I do like to use as many native features as a platform can give me though.

r0adside6 karma

Hey Miguel big fan from Chile. I have always wanted to ask you: how much time did you invest on your projects every day to become as successful as you are now? did you have time for any other hobbies? I always assumed you were working 24/7 on your projects (let's say Mono for example)

migueldeicaza14 karma

Mono was a labor of love, so I would work on it during the day, and work on it during on my spare time.

Writing software is still one of my hobbies, but my hacking time has been vastly reduced these days with wife and kids, as they have taken over importance in my life.

That said, I still love to program, and I like to set aside some 2 hours every night after the kids go to bed to work on personal projects. Nothing business critical, just stuff I enjoy, and it gives me a chance to test our own products, and explore other technologies.

In the recent vacation, I was obsessed over building a console GUI toolkit in C#, and I just published NuGet packages for it: http://github.com/migueldeicaza/gui.cs

DowntownPaper6 karma

What is your opinion of Desktop Environments sticking to the GNOME 2 layout (like MATE)? Do you think the GNOME 2 design has its merits, or is it time to move on to more modern desktop environments?

migueldeicaza7 karma

I did love Gnome 2, but I also love the work that the Gnome 3 team has done.

IAMA_HUNDREDAIRE_AMA5 karma

While it was annoying that .NET Standard 1.x removed a bunch of API's, why were some added back in .NET Standard 2.0 in non-working states?

All that did for me was take compile time errors and turn them into run-time errors which is infinitely worse. I know this decision was likely made long before you joined Microsoft, but I was hoping you could shed some light on this very strange and consumer hostile decision.

migueldeicaza9 karma

I would like to take some credit for pushing the team to do .NET Standard 2/.NET Core 2.

The problem with the API surface of .NET Core 1 was that it required too many changes for software. I could not eve get my software to compile with that, and there was widespread frustration that upgrading code from vanilla .NET to .NET Core was a very large effort.

So with .NET Core 2, the goal was to bring all the APIs that people loved back to the portable version of .NET, and it succeeded in that.

The general philosophy is that some of those methods just happen to not be implemented in certain platforms, where the capability is hard to surface, or emulate. We did not want to break an entire API for the sake of a few methods that were rarely used, it is a trade off.

As for the hostility to users, what I would like to do is to surface this information via tools. You can see some of this work happening for example on .NET's support for Android and iOS, where we will start showing you that while the API is present in the code, it might not be available on all the versions you might be targeting)

spect494 karma

Hi Miguel.

  • Tabs or spaces?

  • I've been hearing lots of comments such as "Xamarin.Forms are only good for rapid protoyping". Do you see/want XF to be more than that or do you agree with that view?

  • Thoughts on Flutter? How will their they affect Xamarin's strategies?

migueldeicaza9 karma

Spaces for F# and Python, tabs everywhere else.

Forms: initially we did not want to over-promise on Forms, we wanted to avoid hype that would eventually disappoint, so I think it was the right thing to say at the time.

Since then, our users and community have proved us wrong, and they have shown that you can clone basically any high-end ui with Forms. There are various blog posts that describe the step by step process, like this one:

https://xamarinhelp.com/creating-instagram-ui-xamarin-forms/

jgnmello4 karma

Hi! We started a project with Xamarin.Forms... but after long time building, and limitations we changed to Xamarin.Android and Xamarin.iOS. Then we faced, that is only productive to do donet on mobile, with mac. On Windows is terrible.

We have a good experience with mobile (native + React Native), but Xamarin appers to lack of somethings... like use swift libraries.

So, we are having bad times. We be any change, features, investments on the platform? Even Skype uses React Native, why Microsoft not uses Xamarin?

migueldeicaza9 karma

Send me an email, miguel @ microsoft, and let me figure out why it is slow for you, we have been working to address thos eissues.

Today you can use Swift libraries, if you make sure your Swift library has and Objective-C bridge, and then you use it with a "Binding Library" project.

THAT SAID - we are working on an automatic Swift importer.

sierotkamarysia4 karma

Hey Miguel, many thanks for all your awesome opensource work! What is your opinion on React Native? I've tries it and found it awesome how approachable it is. On the other hand if performance would matter I'd go for a native app. What is the gap Xamarin tries to fill between JS and native apps?

migueldeicaza4 karma

You will find that the React.Native toolkit model is the same thing as Xamarin.Forms.

They do have the React model for programming which is different and a live coding experience, experience.

We recently introduced our live coding experience for Xamarin, with the Xamarin Live Player, so you get the best of all worlds!

bitbonk3 karma

How much much sense does Xamarin.Forms in the browser (on the client using WebAssembly) make in your opinion? Is the world ready for it? Are you actively working on it?

migueldeicaza3 karma

Xamarin.Forms for the web is being worked on by the community!

Here you can run some of the samples:

http://ooui.mecha.parts/

This runs your Forms code in ASP.NET Core.

I am hoping that Ooui (the substrate for the above) will also be used for our WebAssembly support.

tzachs3 karma

Are there any plans to make Xamarin Live Player support native xamarin apps (and not just Xamarin Forms)? When I tried it a dialog box opened up to say it's not recommended as it's not optimized for the platform, and when I tried anyway everything just froze.

migueldeicaza2 karma

We chose to focus on forms, because we can deliver a complete experience.

Native poses a couple of challenges, I'll tell you what those are:

Generally, there are two problems that we face with the Live Player and native APIs.

On iOS: One is that we would need to build a .storyboard to .nib compiler, not impossible, just we have not done it. So today, that means that you can not use .storyboard files (well, you can, but it it only handles a few items in storyboard).

On Android the challenge is that the platform itself is full of funk. Android wants to know at compile time all of your activities, and wants to have all of your resources so it can assign IDs to them. There are assorted hacks to achieve both of those, it is just brittle and a long process.

Would still love to know how it froze, so we can fix it.

DavLedo3 karma

Hi Miguel,

First, thanks for all your efforts. I really love how Xamarin has made so that we can use our favourite .NET elements and C# syntax in Android and iOS.

One thing that still bugs me with Android Dev, though, is smoothly creating UIs for prototypes, which was really easy to do with WPF and Expression Blend. Are there any plans to incorporate Blend support and some of that visual structure / easy customization (e.g. user controls)?

migueldeicaza3 karma

Hello!

The latest version should support user controls on Android (they are already supported on iOS as you point out).

I agree that we need a simpler way of creating Forms UIs, today we have the XAML previewer and we are working on something.

vitorgrs3 karma

Also, any plans on "Hot Reload" with C# projects? Would be pretty awesome to edit code in real time and see the changes.

migueldeicaza4 karma

Yes!

We have the Xamarin Live Player that does this for Android and iOS, and we are hoping to bring this to UWP.

If there is enough interest, we should extend this to other platforms.

THAT SAID. The tool that I use for prototyping things day in and day out (for example, I am using it non stop as I integrate a beautiful nice contribution) is Xamarin Workbooks.

Workbooks lets you run interactive C# over .NET Core, WPF, .NET Desktop, Android and iOS, and is a little bit like Jupyter notebooks, where documentation and code live side by side. It is all open source: https://github.com/microsoft/workbooks

Get it here:

https://developer.xamarin.com/guides/cross-platform/workbooks/

We have a tons of samples here:

https://github.com/xamarin/workbooks

tzachs3 karma

Hi, do you think it's likely that Visual Studio for Mac (and Visual Studio in general) will be open sourced? What's the reason(s) for not open sourcing it (especially as VS Code is open source)?

migueldeicaza2 karma

Most of Visual Studio for Mac is open source:

http://github.com/mono/monodevelop

More pieces will eventually be open source. Sometimes there are business reasons to not open source, and sometimes there are just logistical issues like having to get approval to release, or just the burden on the team to do it.

tzachs2 karma

Thanks for the response. So when you said in another response that you're taking a lot of code from VS to VS4Mac, does that go into MonoDevelop as well?

migueldeicaza2 karma

Yes. Some are checked into other repos on GitHub, as the code is independent of and IDE and we think it is generally useful. I believe some is under the Microsoft org

francibon933 karma

Hi Miguel. Thank you for all the time you invested on open-source in the early days and currently with Xamarin. If things hadn't worked out with Xamarin, what would have been your backup plan? Did you ever consider joining MS as a Software Engineer?

migueldeicaza7 karma

There was no backup plan.

cesarcamps3 karma

Why we can not develop xamarin c# movil app on VSCode instead of full VS? Hi, please excuse my very poor English, it is not my mother language.

migueldeicaza3 karma

You can develop applications for Xamarin in VSCode. I just did it a couple of weeks ago.

You do not get all the IDE bells and whistles, but you definitely can.

YellowKamel3 karma

What do you subjectively believe to be the best linux distribution? What is the best one objectively?

migueldeicaza9 karma

Deep deep in my heart, I will always love Fedora, because this is where I got started (well, Red Hat) and I think that RPM is the better technology.

I have a soft spot for OpenSUSE, as I worked at Novell for years and got to collaborate and work with the team there.

The market place has chosen Ubuntu as their go-to-distribution for day to day development, even if people are deploying on lighters systems like Alpine.

Currently, I do not have a Linux desktop at home, and what I do is that I ssh into one of my Azure VMs when I need something.

Now this might sound surprising, but I just fixed a Linux bug in one of my libraries, and I used Ubuntu running on Windows 10 to debug, fix and commit the code :-)

ryanbimmer3 karma

Hey Miguel, I briefly got to chat with you at the big Xamarin shebang at Build in San Francisco a couple years ago. I was just wondering how the day to day life has changed/remained the same for the Xamarin team since the Microsoft acquisition? I've been following your open office woes haha!

migueldeicaza6 karma

The biggest thing is that I get to work with a great team that cares so much about developer tools, users and care so deeply about languages and user experiences.

I have too many heros to list here, but you know who you are.

Oh, also, I no longer have to pay for a license fee for PowerPoint, I get that one for free :-)

x2bool2 karma

You obviously a great leader. You have started a great number of remarkable projects. What qualities do you think are important when it comes to leadership in dev community?

migueldeicaza4 karma

I am a fan of Benjamin Zander's "The Art of Possibility", it is something that I think about almost every week and has influenced the way I approach any problems.

be_my_main_bitch2 karma

How many persons are working on the Embeddinator toolchain ? Progress seams slow. We need that!

migueldeicaza1 karma

It is a collaborative effort, C, Android and iOS have different needs. So we work on those around the main project schedule.

CraftyPancake2 karma

Will there ever be a truly cross platform UI library?

migueldeicaza8 karma

There are many very good choices available for you to use depending on your specific needs. I am not sure that there is a one size fits all though.

Here is my take:

The variables that come into consideration are:

  1. How much do you care about the final end-user experience.
  2. Whether you want the app to look native on each platform, or if you want write-once-look-the-same everywhere.
  3. How comfortable you are with supported or unsupported code.

If you care a lot about the end user experience, my suggestion is that you make sure that you split your code between the platform-agnostic components and the platform specific components. In this day, this is just good hygiene.

Then I would build a native user experience using the native toolkit of the platform, that would be for example UWP or WPF on Windows, Cocoa (with the Xamarin.Mac bindings) on Mac, and Gtk+ on Linux for example (with the GtkSharp bindings, either v2 or v3).

Now, sometimes you do not want to write everything twice and you do not need to polish every last bit of UI.

In our team, we talk about high-traffic areas of your UI, vs low-traffic areas. The high-traffic areas are the places that you will want to put most of your attention, polish and you will want to use native capabilities that make your application shine. Low-traffic areas are things like simple configuration dialogs or very simple UIs.

In Visual Studio for Mac, we are doing high-traffic areas using the native UI toolkit, and the low-traffic areas using an abstraction layer called Xwt (open source: http://github.com/mono/xwt).

Now, that is the high-budget approach.

The lower budget approach is to use a cross-platform UI Toolkit, and there are several to choose from. Here the key choice that you have to make is whether you care more about using native UI elements, or you care more about a unified look and feel.

If you care about your application looking native, you will want to use a toolkit that provides an abstraction over the native platform, and uses the native controls. If you care more about having the same look, you will want a toolkit that renders everything on its own.

So let us get started, the toolkits that render everything on their own:

  • Gtk# 3 - this toolkit renders everything on its own, can be styled with CSS and works on Windows, Mac and Linux. It has a strong community of developers, as Gtk+ is the toolkit that powers Gnome and many other applications on Linux.
  • AvaloniaUI - this toolkit is very close spiritually to WPF and works on all platforms as well. It is young, but it is getting a lot of attention.

The toolkits that provide an API abstraction over the native capabilities are:

  • Xwt: simple, lightweight, supports Mac, Linux and Windows, and powers Visual Studio for Mac.
  • Xamarin.Forms: started life as a mobile platform on Android, iOS and UWP, but has recently been extened to support Linux (Gtk), Mac (Cocoa), Windows Desktop (WPF) and the Web (using ASP.NET Core)
  • Eto.Forms: a community effort, I have not used this myself, but the developers on this project are very passionate about it.

On all those scenarios you would need to create a project “head” for each platform, as each platform has some startup pieces, metadata and some information that needs to be filled out to work properly, so you are not escaping that part.

bitbonk1 karma

I think you should also have mentioned Avalonia https://github.com/AvaloniaUI/Avalonia

migueldeicaza1 karma

I did:-)

Shreddit1081 karma

Using Xamarin Forms embedding to share "panels" across platforms but surrounding them with native UI elements, e.g. navigation, is working very well for me. Looks like a 100% native app to the end user.

migueldeicaza1 karma

Agreed - that is a great match, lots of developers are doing just that.

nican2 karma

Is there a feature that other ecosystems get (such as Nodejs or Go) that you miss with .NET?

migueldeicaza5 karma

I do like Go's culture of being able to download software from the net and install it.

I like Go's gofmt, and would love .NET to have one, but only if the formating defaults are the East Coast .NET defaults, not the West Coast .NET defaults, in that case, I would hate it.

I love Rust' crate system.

I love Gnome's pkg-config system

I love node's tool installation capabilities (coming to .NET Core 2.1!)

Generally, I have trust issues, and I am not psyched about the lack of identity, web of dependencies and god-knows-who controls the software on the web with all of these packages. This is probably something that i should discuss with a health professional privately.

Mugiwara3202 karma

Can TensorFlowSharp be used to develop Xamarin applications?

migueldeicaza3 karma

TensorFlowSharp is the full TensorFlow engine, and is not really tuned for mobile use, it is just too large. That said, if you want to use it, all you have to do is bundle the native binaries from Google into your package and you are off to the races - TensorFlowSharp itself is a .NET Standard library, I just have not bothered to ship the mobile bits as they would be rarely used, there is a better option for mobile.

Unity apps that tend to have a lot of assets have been using TensorFlowSharp for Unity.

For mobile use, you ideally want to use Apple’s CoreML and TensorFlowLite on Android.

In both scenarios, you tend to design your models offline and train offline, and then use the device to run the data through them. The API lacks the training components, but you will not likely need them.

Here are some examples that we built with CoreML:

The last one is built using Microsoft’s CustomVision service.

This service is a hosted service where you upload your data to Azure and we build you a model suitable for deployment to Android and iOS, and fully supports Xamarin:

https://www.customvision.ai/

ggodin2 karma

Hi Miguel, I've started using Xamarin and noticed that a lot of APIs have poorly auto-generated signatures. For example:

EglInitialize(EGLDisplay dpy, int[] major, int majorOffset, int[] minor, int minorOffset);

which in reality should be:

EglInitialize(EGLDisplay dpy, out int major, out int minor);

Any plans on improving this? Thanks!

migueldeicaza5 karma

Would love to hear more about this, can you file an issue here?

https://github.com/xamarin/xamarin-android/

_matr2 karma

How would you describe your period at Facultad de Ciencias (UNAM)?

migueldeicaza3 karma

A wonderful time, but also was a hard time personally.

dosangst2 karma

When will the memory leaks with Nvidia gpus be fixed?

migueldeicaza3 karma

I do not know what this is about.

jgnmello2 karma

Do you pretend came to Brazil some time? Rio Grande do Sul?

migueldeicaza2 karma

My wife is from Porto Alegre, and we visit from time to time.

In recent years it has become harder to travel, as we now have three kids, and 17 hour flights with three kids are not exactly fun

slang252 karma

What are your feelings and thoughts for the current state of F# and it's future?

migueldeicaza3 karma

It has never been in better shape.

Don Syme the researcher at MSR who designed the language is spending the next 2 years in the developer division focusing on F# improvements.

cesarcamps1 karma

Why we can not develop xamarin c# movil app on VSCode? Hi, please excuse my very poor English, i am a cuban engineer.

migueldeicaza1 karma

You can, it is just cumbersome as you found out.

We plan on doing some work to make this a little better, like having templates you can use, and compile/deploy/debug.

That said, you will need the IDE for many other tasks to configure your app.

rbarriga1 karma

Hi Miguel ? I'd like to know what is your opinion about the golang proposal (a compiled language)... ? are you using a unix like OS or MS windows.. just for curiosity :-)

migueldeicaza3 karma

I do not quite understand the question, I am not sure what "golang proposal (a compiled language)" means.

I would say that I use about 80% MacOS, and 20% Windows in my day to day life, and routinely SSH into Linux machines.

richownsyou1 karma

Just wanted to say thank you for Xamarin its an amazing platform and the future is bright for it.

What do you think about Electron / Chromium Embedded Framework (CEF), for desktop apps?

Ironically i love the cross platform app development with xamarin but for desktop it is in a pitiful state, slack and spotify on mac eats up so much memory and sometimes forces the use of the dGPU of a laptop for no reason which has a very negative consequence on battery life.. (Spotify for exemple) ugh

migueldeicaza3 karma

Short term: I suggest that you split your application along the lines of UI, so you have a "backend" for the app, and UI for it. And build a native UI for each platform (Mac, Windows, Linux).

Short term, courage mode enabled: You build your application using Xamarin.Forms and our Desktop drivers (Mac, Windows with UWP or WPF, Linux) and build with a single codebase, and file bug reports, and we fix them, and we all win and your name is immortalized on the .NET Walk of Fame.

Long term: Xamarin.Forms gives you all that you need across all platforms.

richownsyou1 karma

For now we are using Nevron for cross platform and we have a dedicated WPF and Xamarin Mac project for custom stuff. It's not perfect but it seems to work fine for our needs.

Could we say this is at least semi courageous mode?

migueldeicaza1 karma

It is! Send me bug reports!

Metlina1 karma

Hi Miguel, big fan. I'm using Xamarin.Forms for last 3 years, also was part of first 2 generation of Xamarin student partners. One question. Do you have plans for building, deploying singing application via command line? I would like to edit code in VSCode and build via command line for faster development.

migueldeicaza1 karma

Yes - we intend to deliver more accessible command line, but all of the features in the IDE are just invocations to the existing tools, so you could get everything done today ;-)

Alternatively, you can use VS4Mac or VS.

Dispersia1 karma

Will Xamarin Forms be compilable (without a ton of workarounds) on linux any time soon? Will there be a Visual Studio Code plugin for Design?

I love developing .net core on *nix machines, not being able to use xamarin on it was the only cause for us not using that over ionic. Would love some linux love for Forms :)

migueldeicaza3 karma

Please file bugs against anything problematic. It should work out of the box.

jokab1 karma

Did you ever spend some time coding on an idea and later on thought you wouldn't publish it?

migueldeicaza1 karma

I write a lot of code that I do not publish, generally. Half-baked ideas, experiments, ambitious projects that do not match my spare time constraints, so yes, I do throw a lot away.

migueldeicaza1 karma

Workbooks - yes, check the samples on GitHub .com/xamarin/workbooks

sqrg1 karma

Hey, first of all I wanted to say thank you for all you've done. I use Gnome every day and also work with Xamarin at my job.

What's one long term goal you want to achieve with Xamarin?

migueldeicaza2 karma

Make developers productive, happy and give them more time to spend with their families or hobbies ;-)

x2bool1 karma

Hi Miguel,

Few years ago I participated in GSoC and worked on MonoDevelop. It turned out to be great experience and also really helped with my career. I know you support GSoC, so thanks for that!

Do you think it's possible for Microsoft to have similar program or even better collaborate with Google on GSoC?

migueldeicaza5 karma

I would love for both to be the case!

First, I continue to love GSoc, it is an amazing program, and it has brought great things to the world. What an amazing effort.

Second, I think that Microsoft should fund one of these as well. In fact, I think that Apple, Microsoft, Facebook and Twitter, should all be funding summers-of-code just like that.

tarunpothulapati12 karma

I really wanted to participate in this year's GSoC of Mono Project. Microsoft should fund a program like that as it will gain student the required momentum in the .Net Space.

Someone should take necessary initiation at Microsoft on this. :\

migueldeicaza1 karma

Email me

jgnmello1 karma

What reading do you recommend?

migueldeicaza3 karma

Some that come to mind:

  • "The memory illusion"
  • "The case against sugar"
  • "The Customer Driver Playbook"
  • "Modern Monetary Theory"
  • "Play Anything"
  • "Peaceful parent, happy kids"

Harisvsulaiman-2 karma

Do you still hold the same views on Palestinian liberation and Israel?

migueldeicaza11 karma

I am not sure which view exactly you are referring to.

Generally, I believe that we need either two states, independent, or one state, with equal rights for all their citizens.

The current situation in my opinion is not who we as humans should aspire to be.