Showing posts with label microsoft. Show all posts
Showing posts with label microsoft. Show all posts

Saturday, October 17, 2020

Does Xamarin owe its existence to Unity & Apple?


Yes, Xamarin owes its existence to two other bits of technology that were huge around 2008 - the Unity Game Engine and the iPhone. The reason is that a confluence of events around 2008 provided the push to get the Mono project into mobile app development. This resulted in MonoTouch (for iOS) and Mono for Android, which eventually became Xamarin as we know it today.

The Mono project was founded in 2001 as a free open source implementation of Microsoft's .NET framework on Linux. But Mono had struggled since its inception to find its reason for being. According to Mono's founder, Miguel De Icaza, the hardcore free open source community never fully got behind Mono. The FOSS community feared that Microsoft would eventually cause problems for Mono, due to Microsoft being the creator of .NET. 

Outside of the Linux world however were other more pragmatic people from the MacOSX world who had no problem with Mono. One of these people was Joachim Ante, from Unity. Around 2005 the Unity game engine was just starting out and had a performance problem - their original scripting language of Python was far too slow - they needed something that was an order of magnitude faster. So Unity decided to replace the Python scripting with Mono/C# and immediately got all the performance they needed. This was the early days when the Unity Game Engine ran on MacOSX only. Mono filled the need of being a free open source JIT compiler with the modern language of C#.

Fast forward to 2008 when the iPhone App Store launched; Unity quickly set their sights on being able to compile games for the iPhone. Unity wanted to use Mono, but the additional requirement was that it had to be statically compiled for iOS, because Apple had banned the use of JIT (Just In Time) compilers in iOS Apps.

Unity comes back to us and says “Hey, we have this product on iOS, we need .NET to be statically compiled. Can you do that?” We were like, “Oh, that’s kind of impossible. Well, let’s think about it.”

One of our guys, Zoltán Varga - they went and made a static compiler for .NET, and it was amazing. We gave it to Unity. At this point, Unity is probably four or five employees.
    
They were working at somebody’s garage. And they shipped their product for iOS, built games for iOS using this thing, this 3D tech. They were the kings of this space.
    
- Miguel De Icaza (Xamarin)

Within a year of the iPhone App Store launch, Unity went from 4-5 employees to 80 employees. The iPhone and the App Store had launched Unity's massive growth, and along with this the Mono project had finally found its reason for being - mobile apps. The Mono developers realised there was interest in using .NET for mobile apps - so using the same tech given to Unity, they built their own product - MonoTouch, which allowed developers build native iOS apps using C#. Soon afterward, Mono turned its attention to Android and created Mono for Android.

Mobile app development was new and there were many developers who wanted to get into mobile apps but didn't really want to have to learn Objective-C and Java. So Mono now had a C# based cross platform app development platform with truly native performance. This was the killer combination that ensured Mono would take off in popularity.

The developers behind Mono founded the Xamarin company in 2011, MonoTouch became Xamarin.iOS and Mono for Android became Xamarin.Android. Xamarin was acquired by Microsoft in February 2016 and became a subsidiary of Microsoft, fully focused on the development of Xamarin's open source projects.

Inspiration for this article:

The History of GNOME, Mono, and Xamarin
https://changelog.com/podcast/275


Follow @dodgy_coder on Twitter


Saturday, February 21, 2015

Anders Hejlsberg: C# stands for C++++

Just came across this today. Previously had heard the association with the musical sharp symbol (#) to mean a pitch higher in tone, but this was the first time I'd heard that the # symbol can also be seen as a matrix of four small + symbols, hence C# stands for C++++, i.e. an increment to C++.

Source: http://www.computerworld.com.au/article/261958/a-z_programming_languages_c_/?pp=2

Follow @dodgy_coder

Subscribe to posts via RSS

Saturday, November 22, 2014

Android development is the new .NET

Back in 2001 Microsoft Windows had 90% of the worldwide OS market for PCs. But desktop windows software development was dire.

Developers were using tools like ...
  • Visual Basic 6 - very productive, with the downside of ugly, primitive syntax, lacking modern features such as interfaces and classes.
  • Visual C++/MFC - serious windows developers were using this, but it was less productive and extremely verbose, with lots of boilerplate.
  • Delphi -  the successor of Turbo Pascal and possibly the best of all frameworks on Windows at the time, but it never really took off.
  • Borland C++/OWL - the Open Windows Library from Borland tracked pretty closely with Visual C++/MFC, verbose + boilerplate.
  • Java - this had a reputation on Windows at the time for slow performance, bad visuals and bad tools.
At this point, Microsoft came out with Visual Studio.NET, the .NET framework and a new language named C#, with the help of former Delphi & Turbo Pascal language designer Anders Hejlsberg. Most Windows developers got on board - compared to what came before it was a breath of fresh air. Since that time, .NET has remained a large player, especially in the corporate and business market.

Fast forward to 2014, Android now has an 80% worldwide market share of approx. 1.75 billion smart phones.

Google has their own IDE, Android Studio and the open source Android SDK, which you can program using Java or any other JVM language. In the same way that .NET lets you use different .NET compatible languages such as C++/CLI and F#, Android supports other JVM languages like Scala, Clojure and Groovy, all of which let you cut down on the verbosity and boilerplate of Java.

Google is attempting to bring as many developers over to Android as possible. Their Head of Scalable Developer Relations, Reto Meier, aims to bring 50 million developers to Android.

Based on Android's market share and future employment prospects, Android is a decent choice for developers to try out. Compared to iOS, Android isn't as performant or profitable, but now it has a decent IDE, the weight of numbers, and the capability to use many Java FOSS libraries.

Follow @dodgy_coder

Subscribe to posts via RSS

Friday, August 22, 2014

How to setup the Gigabyte Brix (GB-BXBT-2807) Ultra Compact PC

A step by step guide, including:
  • Gigabyte Brix hardware setup.
  • Preparing the Windows 7 installer USB boot drive.
  • Installing Windows 7 (64 bit).
  • Installing the Gigabyte Brix drivers.


BRIX PRODUCT DETAILS


GB-BXBT-2807 (rev. 1.0)
Intel® Celeron Processor N2807 (2 core) running at up to 2.17 GHz
http://www.gigabyte.com/products/product-page.aspx?pid=5038#ov


Officially supported operating systems:
  • Windows 7 (64 bit)
  • Windows 8 (32/64 bit)
  • Windows 8.1 (32/64 bit)

PARTS LIST

  • 1 x Gigabyte Brix - GB-BXBT-2807, AUD $165. Purchased here.
  • 1 x 2.5" SSD Intel 520 series, 120GB, AUD $79. Purchased here.
  • 1 x 4GB memory - SO-DIMM DDR3 1.35V 1600MHz (GEIL) green series, AUD $59. Purchased here.
  • 1 x Windows 7 (64 bit) DVD (or ISO file).
Total price of hardware: AUD $303

Purchased from : PLE Computers, Bentley, WA, Australia.


EQUIPMENT REQUIRED TO SETUP

  • 1 x USB hard drive with at least 4GB free (I used an old USB 2.0, powered, 250GB 3.5" Western Digital hard drive), but you can just as easily use a small USB flash drive or a portable 2.5" USB drive.
  • 1 x small Philips head screwdriver.
  • 1 x desktop PC or laptop running Windows; for setting up the Windows 7 USB boot drive and copying some Brix driver files.
  • 1 x monitor, either HDMI or VGA.
  • 1 x wired USB Keyboard.
  • 1 x wired USB Mouse.

STEP (1) BRIX HARDWARE SETUP


  1. Take off the bottom panel by unscrewing the 4 black screws.
  2. Inside the unit, remove the tape holding down the SATA cable.
  3. Install the low power (1.3V) RAM into the single slot - need to insert it at an angle fist, then push it downwards until it clicks into place.
  4. From the bottom panel, remove the 2.5" HD cage (mine had two screws, but its meant to have 4) and install the 2.5" SSD into the cage. Connect the SATA cable to the hard disk. There's only one way it can be inserted, so you can't make a mistake. Screw the cage back onto the bottom panel. Replace the bottom panel onto the Brix.
  5. Connect the power supply to the DC-in port.
  6. Connect a monitor to either the HDMI or VGA port.
  7. Connect a wired USB keyboard to the USB 2.0 port.
  8. Turn on the Brix via the power button on the top.
  9. Keep pressing the Delete (DEL) key on the keyboard about twice per second until the BIOS screen appears. Use Left/Right arrows to navigate between tabs.
  10. Confirm that the RAM and SSD have been detected by the BIOS.
  11. Change the operating system option to Windows 7. Note that the Brix requires the Windows 7 64-bit installer.
  12. Save and exit the BIOS.
  13. Switch off the Brix via the power button on the top.

STEP (2) PREPARING THE USB BOOT DRIVE FOR THE WINDOWS 7 INSTALLER


The following steps to be performed on a windows PC or Laptop...
  1. Ensure you have a Windows 7 (64 bit) install disk ISO file. If you have only the DVD, as I did, you will need to rip it to an ISO file at this point, using the ImgBurn software for example. Leave the ISO filename the same as the disk label (default behaviour). N.B. ImgBurn has a notoriously sneaky installer that will install "conduit" search malware and other crapware if you don't read the installer options properly, and deselect all options apart from the first one, which is ImgBurn itself.
  2. Download and run Rufus - a utility to help you create a USB boot drive from an ISO. Rufus is a standalone .exe file, no install is needed, which is awesome.
  3. Connect to the laptop a USB drive with at least 4GB free space that will be formatted (erased).
  4. If no drives appear at this point, its because Rufus defaults to only displaying USB flash drives. Press Alt-F to have it display all fixed USB drives.
  5. In Rufus, select the target USB drive and also the source Windows 7 ISO file.
  6. Select the option "create MBR for BIOS and UEFI computers" and also the NTFS file system. These should be the defaults after selecting the Windows 7 ISO.
  7. Create the USB boot disk in Rufus. Leave the disk label the same as the original ISO (or DVD).
  8. After Rufus has finished, disconnect the USB boot drive.

STEP (3) INSTALLING WINDOWS 7 FROM THE USB BOOT DRIVE

  1. Connect the USB boot drive to a USB 2.0 port on the brix.
  2. Turn on the Brix via the power button on the top.
  3. Keep pressing the DEL key on the keyboard about twice a second until the BIOS screen appears.
  4. In the BIOS boot menu, confirm the USB boot drive is detected. If it is not detected, you may need to boot one more time by powering the brix off then on. I think this is something to do with the USB boot drive not being ready for the BIOS, which boots very quickly. In the BIOS boot menu, press the '+' key to move the USB boot drive to the top position.
  5. Save and exit the BIOS.
  6. Go through the Windows 7 setup. You can do this just fine with only a keyboard and no mouse, using TAB, SHIFT-TAB, UP, DOWN, LEFT, RIGHT and ENTER to make selections as required.
  7. After the Windows 7 installer has finished copying files and is starting the installation it will prompt you to restart the Brix. At this point, you should go into the BIOS and restore the boot setting to boot from the SSD first (not the USB boot drive). Alternatively, you can just turn off the USB boot drive at this point, before the restart occurs.
  8. Connect a wired USB mouse to the USB 2.0 port vacated by the USB boot drive.
IMPORTANT NOTE FOR INSTALLING WINDOWS 8

Some commenters below have reported getting an error when trying to install Windows 8 at this point. The message from Windows is something like "windows could not update the computer's boot configuration". As suggested by commenter Tim Bailey, the solution is to update the BIOS to the latest version. You can download the BIOS update tool from the Gigabyte website.

Here is the BIOS download page for the Gigabyte Brix GB-BXBT-2807 model:
http://www.gigabyte.com/products/product-page.aspx?pid=5038&dl=1&RWD=0#bios

From the page above, instructions for updating the BIOS:
   For DOS, please type flash.bat in the dos mode.
   For Windows, please select folder and type f.bat in the windows command prompt (cmd.exe).

STEP (4) INSTALLING THE BRIX DRIVERS IN WINDOWS 7


After Windows has been installed and booted ok on the Brix, install the following drivers from the driver CD by copying everything on it to a USB thumbdrive on your laptop and then inserting into the blue USB 3.0 port on the side of the Brix.

On the Brix, in Windows:
  • WiFi+BT driver - just double click setup.exe to install. This gets WiFi and Bluetooth up and running - you can then connect to the Internet. Requires a reboot after install.
  • Graphics - just double click setup.exe to install. Requires a reboot after install.
  • USB3 - just double click setup.exe to install. Requires a reboot after install.
  • Audio - just double click setup.exe to install. Requires a reboot after install.
  • Chipset -  just double click setup.exe to install. Requires a reboot after install. A comment by a reader in the comments section below (Warren Rushby, December 10, 2014) indicates that this step was vital for his i3 model, so installing this driver is recommended.
I personally didn't bother installing the other drivers as they either weren't required by me (e.g. LAN) or they seemed to be only for Windows 8 anyway. To be on the safe side, especially if you are having issues, its recommended installing all the drivers.

My boot time is 17 seconds from power on to the Windows 7 login screen. Not too bad, helped no doubt primarily by the SSD.


STEP (5) (OPTIONAL) CONNECT A WIRELESS KEYBOARD & MOUSE

  • In Windows, replace the wired USB mouse with a wireless USB mouse and wait for Windows to install the driver (takes a minute or two).
  • Replace the wired USB keyboard with a wireless USB keyboard and wait for Windows to install the driver (takes a minute or two).
  • I noticed a couple of times that the wireless mouse wasn't working. I had to unplug and replug its USB dongle, and that fixed it.

STEP (6) (OPTIONAL) INSTALL SOME WINDOWS SOFTWARE


At this point I installed this software, which I personally find are essential in Windows, although you might have differing opinions on each category. All are free.
  • Browser: Run Internet Explorer to download and install Firefox. Then I remove the Internet Explorer links on the task bar and desktop.
  • Anti-virus: Microsoft Security Essentials. Nothing fancy but gets the job done.
  • Flash: Adobe Flash Player. Be sure to deselect the McAfee A/V installer option. I really hate installing Adobe software onto a new PC. My only reason for doing it is for the many websites that still rely on flash.
  • Media player: VLC Media Player. Then I remove the Windows Media player link on the task bar.
  • Editor: Notepad++. An excellent replacement for Notepad which supports probably every known programming language, including Golang.

Small snippet of trivia to finish with ... the Gigabyte Brix was named after Colin Brix, who is a marketing director at Gigabyte's Motherboard Business Unit.


Follow @dodgy_coder on Twitter

Sunday, November 4, 2012

The slow decline of PCs and the fast rise of Smartphones/Tablets was predicted in 1993


I've just read some predictions for the future of the PC, written in 1993, by Nathan P. Myhrvold, the former Chief Technology Officer at Microsoft.

His memo is amazingly accurate. Note that his term "IHC" (Information Highway Computer) could be roughly equated with today's smartphone or tablet device, connecting to the Internet via WiFi or a cellular network. In his second last paragraph, Myhrvold predicts the winners will be those who "own the software standards on IHCs" which could be roughly equated with today's app stores, such as those on iOS (Apple), Android (Google, Amazon) and Windows 8 (Microsoft).

The only thing you could say he possibly didn't foresee would be the importance of hardware design in the new smartphone and tablet industry. I'd suggest that Apple achieved such a head start on their competition through a combination of both cutting edge hardware design along with their curated app store model for distributing software. Interestingly, Microsoft has only last month entered the hardware game with their new Surface brand tablets for Windows 8 and Windows RT, and also announced a shift to focus on becoming a "Devices and Services" company.

Note: the term "Cairo" used below is the code name for a Microsoft Research project which lasted from 1991 to 1996. It resulted in some features that were eventually rolled into Windows 95, IIS and SQL Server.


The below is an extract from a memo written by Nathan P. Myhrvold, titled "Road Kill on the Information Highway". September 8, 1993. Full Source. 
Personal Computers
I've saved the best for last.  Our own industry is also doomed, and will be one of the more significant carcasses by the side of the information highway.  The basic tasks that PCs are used for today will continue for a long as it makes sense to predict, so it isn't a question of the category disappearing.  The question is one of who will continue to satisfy these needs and how? 
As a case in point, consider that the fundamental category needs for mainframes and minicomputers also still exists and will continue to do so for a very long time.  Despite this, the companies involved are dying and the entire genre is likely to disappear.  The reason is that a new breed of machine - the PC - came along which out flanked them.  In the early years PCs were not particularly good at what minis and mainframes did, but they were terrific at a whole new set of problems that the traditional computing infrastructure had basically ignored.  
Personal productivity applications drove PCs onto millions of desks and created a very vital industry which grew faster - both in business terms and price/performance - than the mainframe and minicomputer markets.   The power conferred by this growth made PCs the tail which wagged the dog; free to ignore the standards which existed for mainframes and minis and move off on their own.   Over time the exponential growth in computing has finally (after 17 years) given the PC industry the technical ability to beat minis and mainframes in their own domain.   Although the early software platforms for PCs had to be extended to fully realize this potential (DOS to Windows to NT to Cairo), it turned out to be far easier to do this than to make mainframe or minicomputer systems address the new needs and applications.   Even within the heart of minicomputer and mainframe's domain - giant transaction processing applications etc., the old standards will not be used.  
I believe that the same thing will happen again with PCs playing the role of mainframes and minis, and the computing platforms of the information highway taking over the role of the challenger.   
The technical needs of computers on the information highway, or IHCs are quite different than for PCs.  The killer applications for IHCs in the early years will include video on demand, games, video telephony and other distributed computing tasks on the highway.  It is hard to classify this as either higher tech or lower tech than the software for PCs, because the two are quite different.   Most IHCs will certainly need to be cheaper than PCs by an order of magnitude and this will inevitably cause them to be less capable in many ways, but some of their requirements are far more advanced. 
Another way to say this is that the rich environment of software for PCs is largely irrelevant for IHCs.   Windows, NT, System 7 and Cairo do not solve the really important technical problems required for IHC applications, and it is equally likely that the early generations of IHC software won't be great platforms for PC style apps.  This isn't surprising because they are driven by an orthogonal set of requirements. 
The IHC world will almost certainly grow faster than PCs, both in business terms and in price/performance.   The PC industry is already reaching saturation from a business perspective.  Technically speaking, the industry is mired in hardware standards (Intel and Motorola CISC processors)  with growth rates that are flattening out relative to the state of the art - just as the 360/3090 and VAX architectures did.   The Macintosh and Windows computing environments may be able to survive the painful transition to new RISC architectures, but they will lose time and momentum in doing so.    
PCs will remain paramount within their domain for many years (we'll still have a computer on every desk) but IHCs will start to penetrate a larger and larger customer base on the strength of its new and unique applications.   The power of having the worlds information - and people - on line at any time is too compelling to resist.   For a long time people will still have a traditional PC to handle traditional PC tasks - in precisely the same way that they have kept their mainframes and minis for the last 17 years.   One day however people will realize that their little IHCs are more powerful and cheaper than PCs - just as we have finally done with mainframes.   There will be a challenge for the IHC software folks to write the new systems and applications software necessary to obviate PCs, just as we had to work pretty hard to come up with NT, but this battle will clearly go to the companies who own the software standards on IHCs.  The PC world won't have any more say about how this is done than the companies who created MVS or VMS did about our world.  Of course, some of the VMS people were involved, but as discussed above it is very hard for organizations to make the transition. 
This may sound like a rather dire prediction, but I think that for the most part it is inevitable.  The challenge for Microsoft is to be sufficiently involved with the software for the IHC world that we can be a strong player in that market.  If we do this then we will be able to exploit a certain degree of synergy between IHCs and PCs - there are some natural areas where there is benefit in having the two in sync.  The point made above is that those benefits are not sufficiently strong that they alone will give us a position in the new world.   We'll live or die on the strength of the technology and role that we carve out for ourselves in the brave new world of the information highway. 

Many thanks to Reddit user erpettie who originally submitted a link to this memo on /r/technology,which is how I came across it.

Follow @dodgy_coder

Subscribe to posts via RSS