RSSAmplifier

Blog

Miguel de Icaza

Miguel de Icaza's Blog

tirania.orgRSS feed ↗30 posts

Latest posts

11 Jun 2024

SwiftNavigation To celebrate that RealityKit's is coming to MacOS, iOS and iPadOS and is no longer limited to VisionOS, I am releasing SwiftNavigation for RealityKit. Last year, as I was building a game for VisionPro, I wanted the 3D characters I placed in the world to navigate the world, go from one point to another, avoid obstacles and have those 3D characters avoid each other. Almost every game…

23 Apr 2024

Embeddable Game Engine Many years ago, when working at Xamarin, where we were building cross-platform libraries for mobile developers, we wanted to offer both 2D and 3D gaming capabilities for our users in the form of adding 2D or 3D content to their mobile applications. For 2D, we contributed and developed assorted Cocos2D-inspired libraries. For 3D, the situation was more complex. We funded a…

06 Apr 2022

SwiftTermApp: SSH Client for iOS For the past couple of years, programming in Swift has been a guilty pleasure of mine - I would sneak out after getting the kids to sleep to try out the latest innovations in iOS, such as SwiftUI and RealityKit. I have decided to ship a complete app based on this work, and I put together an SSH client for iOS and iPadOS using my terminal emulator, which I call “…

AppStore Reviews Should be Stricter

Since the AppStore launched, developers have complained about the review process as too strict. Applications are mostly rejected either for not meeting requirements, not having enough functionality or circumventing Apple’s business model. Yet, the AppStore reviews are too lax and they should be much stricter. Let me explain why I think so, what I believe some new rules need to be, and how the…

Some Bad App Practices

Some bad app patterns as some followers described them Graphics is a big part of it. It also tries to make you purchase random things that have nothing to do with answering trivia questions. pic.twitter.com/hLDhd2QIbG — Meher Kasam (@MeherKasam) August 28, 2020 "PicJointer Photo Collage Maker", a low end app which just makes one jpeg from several jpegs, is "free" with a 1 week trial then…

Apple versus Epic Games: Why I’m Willing to Pay a Premium for Security, Privacy, and Peace of Mind

In the legal battle over the App Store’s policies, fees, and review processes, Epic Games wants to see a return to the good old days – where software developers retained full control over their systems and were only limited by their imaginations. Yet those days are long gone. Granted, in the early 90s, I hailed the Internet as humanity’s purest innovation. After all, it had enabled a group of…

Yak Shaving - Swift Edition

At the TensorFlow summit last year, I caught up with Chris Lattner who was at the time working on Swift for TensorFlow - we ended up talking about concurrency and what he had in mind for Swift . I recognized some of the actor ideas to be similar to those from the Pony language which I had learned about just a year before on a trip to Microsoft Research in the UK. Of course, I pointed out that Pony…

Scripting Applications with WebAssembly

The Unity3D engine features a capability where developers can edit the code for their program, hit “play” and observe the changes right away, without a visible compilation step. C# code is compiled and executed immediately inside the Unity editor in a seamless way. This is a scenario where scripted code runs with full trust within the original application. The desired outcome is to not crash the…

22 Apr 2019

Blog: Revisting the gui.cs framework 12 years ago, I wrote a small UI Library to build console applications in Unix using C#. I enjoyed writing a blog post that hyped this tiny library as a platform for Rich Internet Applications (“RIA”). The young among you might not know this, but back in 2010, “RIA” platforms were all the rage, like Bitcoin was two years ago. The blog post was written in a…

29 Mar 2019

First Election of the .NET Foundation Last year, I wrote about structural changes that we made to the .NET Foundation . Out of 715 applications to become members of the foundation, 477 have been accepted . Jon has posted the results of our first election . From Microsoft, neither Scott Hunter or myself ran for the board of directors, and only Beth Massi remains. So we went from having a majority…

04 Dec 2018

.NET Foundation Changes Today we announced a major change to the .NET Foundation , in which we fundamentally changed the way that the foundation operates. The new foundation draws inspiration from the Gnome Foundation and the F# Foundation. We are making the following changes: The Board of Directors of the Foundation will now be elected by the .NET Foundation membership, and they will be in charge…

Startup Improvements in Xamarin.Forms on Android

With Xamarin.Forms 3.0 in addition to the many new feature work that we did, we have been doing some general optimizations across the board, from compile times to startup times and wanted to share some recent results on the net effect on one of our larger sample apps. These are the results when doing a cold start for the SmartHotel360 application on Android when compiled for 32bits (armeabi-v7a)…

How we doubled Mono’s Float Speed

My friend Aras recently wrote the same ray tracer in various languages, including C++, C# and the upcoming Unity Burst compiler. While it is natural to expect C# to be slower than C++, what was interesting to me was that Mono was so much slower than .NET Core. The numbers that he posted did not look good: C# (.NET Core): Mac 17.5 Mray/s, C# (Unity, Mono): Mac 4.6 Mray/s, C# (Unity, IL2CPP): Mac…

Fixing Screenshots in MacOS

This was driving me insane. For years, I have been using Command-Shift-4 to take screenshots on my Mac. When you hit that keypress, you get to select a region of the screen, and the result gets placed on your ~/Desktop directory. Recently, the feature stopped working. I first blamed Dropbox settings, but that was not it. I read every article on the internet on how to change the default location,…

Magic!

Mono has a pure C# implementation of the Windows.Forms stack which works on Mac, Linux and Windows. It emulates some of the core of the Win32 API to achieve this. While Mono's Windows.Forms is not an actively developed UI stack, it is required by a number of third party libraries, some data types are consumed by other Mono libraries (part of the original design contract), so we have kept it…

Why I am excited about Unity in 2018

While I had promised my friend Lucas that I would build a game in Unity for what seems like a decade, I still have not managed to build one. Recently Aras shared his excitement for Unity in 2018 . There is a ton on that blog post to unpack. What I am personally excited about is that Unity now ships an up-to-date Mono in the core. Jonathan Chambers and his team of amazing low-level VM hackers have…

Interactive Line Editing in .NET

Even these days, I still spend too much time on the command line. My friends still make fun of my MacOS desktop when they see that I run a full screen terminal, and the main program that I am running there is the Midnight Commander: Every once in a while I write an interactive application, and I want to have full bash-like command line editing, history and search. The Unix world used to have GNU…

Default ColorSpaces

Recently a user filed a bug where the same RGB color when converted into a UIColor , and later into CGColor is different that going from the RGB value to a CGColor directly on recent versions of iOS. You can see the difference here: What is happening here is that CGColors that are created directly from the RGB values are being created on kCGColorSpaceGenericRGB colorspace. Starting with iOS 10,…

Mono's TLS 1.2 Update

Just wanted to close the chapter on Mono's TLS 1.2 support which I blogged about more than a year ago . At the time, I shared the plans that we had for upgrading the support for TLS 1.2. We released that code in Mono 4.8.0 in February of 2017 which used the BoringSSL stack on Linux and Apple's TLS stack on Xamarin.{Mac,iOS,tvOS,watchOS}. In Mono 5.0.0 we extracted the TLS support from the Xamarin…

Creating .NET Bindings for C Libraries with ObjectiveSharpie

We created the ObjectiveSharpie tool to automate the mapping of Objective-C APIs to the .NET world. This is the tool that we use to keep up with Apple APIs. One of the lesser known features of ObjectiveSharpie, is that it is not limited to binding Objective-C header files. It is also capable of creating definitions for C APIs. To do this, merely use the "bind" command for ObjectiveSharpie and run…

TLS 1.2 Comes to Mono: Update

Update to the Update: See Nov 20th, 2017 Update for further updates. Short version: the master branch of Mono now has support for TLS 1.2 out of the box. This means that SslStream now uses TLS 1.2, and uses of HttpWebRequest for HTTPS endpoints also uses TLS 1.2 on the desktop. This brings TLS 1.2 to Mono on Unix/Linux in addition to Xamarin.{Mac,iOS,tvOS} which were already enabled to use TLS 1.2…

Asset Previewer

Mobile developers are working with all kinds of graphics assets and until now, to preview them, we would use an external tool to browse them. We have developed a plug-in for both Visual Studio and Xamarin Studio that will provide live previews of various assets right into the IDE. It works particularly well for UrhoSharp projects. The previewer can display in the IDE previews of the following…

The Evolution of Interactive C#

The Early Days Years ago, in 2008 we introduced an interactive C# shell , at the time a challenge was to adjust the syntax to be suitable for interactive use, to provide a usable decent command line editing API for .NET and to turn our compiler as a service into a tool that could provide code completion. A few months later, we added a UI shell for this on Linux and used Gtk's text widget to add…

Shared Projects or PCL?

My colleague Jason Smith has shared his views on what developers should use when trying to share code between projects. Should you go with a Shared Project or a Portable Class Library (PCL) in the world of Xamarin.Forms? He hastily concludes that you should go with PCLs (pronounced Pickles). For me, the PCL is just too cumbersome for most uses. It is like using a canon to kill a fly. It imposes…

getline.cs update: Partying like it is 1992

Back in 2008, I wrote about getline.cs , a single-file command line editor for shell application. It included Emacs key bindings, history, customizable completion and incremental search. It is equivalent to GNU's readline library, except it is implemented in a single C# file . I recently updated getline.cs to add a popup-based completion and C# heuristics for when to automatically trigger code…

Mono's Cooperative Mode for SGen GC

Mono's master tree now contains support for a new mode of operation for our garbage collector, we call this the cooperative mode. This is in contrast with the default mode of operation, the preemptive mode. This mode is currently enabled by setting the MONO_ENABLE_COOP environment variable. We implemented this new mode of operation to make it simpler to debug our GC, to have access to more data on…

David Brooks, Op-Ed for All Trades, Master of None

I first heard about David Brooks' article criticizing Most Likely to Succeed from a Mom at school that told me it was a rebuttal to the movie, and I should check it out. I nodded, but did not really expect the article to change my mind. David Brooks is an all-terrain commentator which dispenses platitudes and opinions on a wide range of topics, usually with little depth or understanding. In my…

Roslyn in MonoDevelop/XamarinStudio

As promised , we now have a version of our IDE powered by Roslyn , Microsoft's open sourced C# compiler as a service When we did the port we found various leaks in the IDE that were made worse by Roslyn, so we decided to take the time and fix those leaks, and optimize our use of Roslyn. Next Steps We want to get your feedback on how well it works and to let us know what problems you are running…

Mono and LLVM's BitCode

This past June, Apple announced that WatchOS 2 applications would have to be submitted using LLVM BitCode. The idea being that Apple could optimize your code as new optimizations are developed or new CPU features are introduced, and users would reap the benefits without requiring the developer to resubmit their applications. BitCode is a serialized version of the low-level intermediate…

Xamarin Release Cycles

There are four major components of Xamarin's platform product: the Android SDK, the iOS SDK, our Xamarin Studio IDE and our Visual Studio extension. In the past, we used to release each component independently, but last year we realized that developing and testing each component against the other ones was getting too expensive, too slow and introduced gratuitous errors. So we switched to a new…