Microsoft announces it is acquiring FreeBSD for $300 Million

FreeBSD-BoxToday Microsoft® has announced that it has acquired FreeBSD®. FreeBSD is an open source operating system known for its very enterprise friendly license. Microsoft has recently embraced open source, moving .NET Core to GitHub, as well as announcing that a bash port that will run in Windows 10. However, this move was quite unexpected.

Microsoft is paying the FreeBSD Foundation approximately 300 Million for the FreeBSD brand, the open source operating system’s source repository, all forks, sub-brands (OpenBSD and NetBSD), websites, and communities.

Microsoft is in the process of negotiation full-time salaries for many of the developer volunteers.

Rumor has it that iXSystems may also be acquired either as part of this deal or as a separate deal. Interestingly enough, Microsoft is not paying for the source itself because that is already free for everyone.

In an interview with the Microsoft CEO Satya Nadella, he made the following comment:

“With Apple using so much of FreeBSD’s source in their OS X operating system, we felt owning part of the OS X operating system’s source code could really help our Office development team to write a better Office port of OS X.”

We further questioned Nadella on how this affected their recent relationship with Canonical, who ported bash to Windows 10 for Microsoft.

“Canonical is behind Ubuntu, who is moving away from the Linux Kernel. Canonical has recently embraced the idea of UbuntuBSD. With this aquisition, Cononcial and Microsoft are going work close together over the next few years.

There used to rumors that older Windows Operating Systems used some FreeBSD code, we commented to Nadella. He responded with this quip:

“Only older ones? Where do you think we get all our great ideas for our networking stack. I would expect a lot of integration between Windows and FreeBSD, especially on the networking stack.”

Is there anything that FreeBSD has that you want to pull in as soon as you can.

“Well, we are jealous that they have ZFS and Windows does not. Unfortunately, this aquisition doesn’t help bring ZFS to windows. Oracle has the copyright on ZFS. I guess we’ll have to acquire Oracle next.”

That last statement, Nadella laughed.

We were also able to contact the President of the FreeBSD foundation, Justin T. Gibbs and discuss with him the acquisition.

Has Microsoft made any exciting promises to the FreeBSD Foundation in light of this acquisition? Gibbs quipped:

“You mean besides promising to not lay us all off? No, in seriousness, Microsoft has committed to the FreeBSD copyright. They are looking for improvements in IPv6 that we have already implemented. We are looking to make .NET a first class citizen and make C# the primary development language for Web Services, Cloud Services, and Desktop apps written for FreeBSD.”

Does Mono or Xamarin have a big play in that? Gibbs responded:

“Yes, it does. In fact, expect to see FreeBSD added to the list of projects creates when you start a new Xamarin Forms project in Visual Studio. Soon, when you write an App, it will run universally on Windows devices, as well as Android, iOS, OS X, and FreeBSD.”

What does the future look like for FreeBSD under Microsoft’s reign?Microsoft announces it is acquiring FreeBSD

“The future looks promising for FreeBSD under Microsoft.”

Technology: What tech you use, you want to use for both home and work

I’ve been watching the tablet and smart phone products that have hit the world. They are big money makers. Apple and Google really profited, whereas BlackBerry has nearly died.

I want to discuss the near death of the BlackBerry. Why did the BlackBerry wither while Android and iOS thrived? What is next to wither and what is next to thrive? To answer these questions, let’s look at the PC market in the late 80s and early 90s from many years ago.

Microsoft Windows beat Apple PC

Note: Please forgive this massive short paragraph that is a gross oversimplification.

Apple PCs were all the rage in schools mostly. But Microsoft came out with a new operating system, Windows. It could run on a lot of hardware, and wasn’t stuck on expensive Apple hardware. Businesses started using it over Apple because the hardware was cheaper and the experience was as least as good as that of the Apple PC.

Microsoft and Apple both targeted the business and home users. But Microsoft hit the business faster because their operating could be sold on other manufacturers devices, whereas Apple’s could not. Really quickly, Microsoft Windows took over the business market, and then moved into peoples homes. Windows added solitaire for the home user, which was a very big hit and still is today. In the end, very few people ever brought an Apple PC for their home.

Apple tried to beat Windows and tried to add applications. They even had the market on artistic software for a while but they never have reached the Windows operating system market share.

So Microsoft won by winning both locations, home and work. And once they won, it was hard for Apple to catch up because all the software was written for Windows.

Apple and Google beat BlackBerry

BlackBerry’s main problem was that they didn’t have a device for both consumers and business users. Their phone was pretty much focused on business users. Some might argue that they had consumer models, but even if they did, they didn’t market them well. No one I knew had a personal cell that was a BlackBerry. BlackBerry failed to make the push from business to the home. But that didn’t cause them to wither right away. They needed a competitor.

When the iPhone released, it was a horrible business phone. The first iPhone couldn’t even hook up to Microsoft Exchange, the most popular enterprise and business email server. But the iPhone was a quality smart phone experience, and for non-business features, it had a better user experience than BlackBerry phones. However, many employees ended up having two phones, a personal iPhone and a BlackBerry for work. BlackBerry hadn’t lost yet. In the next two years after the first iPhone version was released, all BlackBerry had to do was up their game to meat the iPhone in features and experience. In essence, the BlackBerry phone needed consumer features and a great user experience. They failed to do that in time. Apple, on the other hand, upped their game and added business features to the iPhone. It could connect to Microsoft Exchange. Users only want one device. So the BlackBerry became obsolete because it didn’t move from the business to the home. The iPhone did move from the home to business.

The only difference from how Microsoft beat Apple in the operating system world and how Apple beat BlackBerry in the business phone world was the third competitor. Google entered the competition and provided an Android phone that gives and experience equal to (or slightly better or worse depending on mostly opinion).

All the apps were written for both iPhone or Android.

Google, however, was a little late to the game. Had they released their phone even a year earlier, I think Apple would have lost and history would have repeated itself. Remember, why Apple lost the PC market? It required expensive proprietary hardware. Well, so does the iPhone. Google took the place of Microsoft in providing an operating system that could install on any platform. And any vendor could sell their own operating system with Android. Google’s Android exploded into the world and is the most used operating system on phones by a large margin.

The big difference between the smart phone market and the PC market of the late 80s and 90s is that Apple already had the applications, now calls apps, already written for the iPhone. So when Google’s Android won the majority market share, Apple didn’t lose everyone. They maintain a very good market share of phones and each release is a hit.

Both phones are quite acceptable for business or work.

However, the Microsoft Phone was very late to the game. It would be great for business and home, but it doesn’t have the apps. They are already written for iPhone and Android phones. BlackBerry and Microsoft both lost.

What about the Tablet market?

So who is going to win it? Some might say the iPad has already won. Well, let’s look at what tablet today works for both home and business users? Is their one yet? Or is it in the same position that BlackBerry was in, only reversed?

The iPad is a great consumer device. But input is atrocious. Running a project in a meeting with requires a bunch of special connectors or wi-fi enabled connectors. It just doesn’t do it for the business user. Many people bought their iPads with hopes to use them at home and at work. But really, they are just home devices. Many employees that used to bring them to work are now leaving them home and have gone back to their laptops.

The Android tablets are pretty much the same experience. Input is just as terrible. I gave up on the keyboard I bought for it. Android tablets have all the same problems in a business environment that the iPad has. However, Android has one advantage over the iPad in that Android can be installed on other hardware, while iOS cannot.

Now, enter the Microsoft Surface and Surface Pro. Since version 3 released, it’s business usability is unquestionable. It is the same operating system that has been running businesses for a quarter of a century. The home experience is not quite as good as the iPad or Android, but it is acceptable and getting better. In fact, I just watched a few hours of Amazon prime on it instead of on my Kindle Fire HD and had a better experience.

The Surface Pro is here and is already at version 3 with Version 4 coming around the bend. It works for home and business. Also, Windows can install to other devices and other manufacturers such as Lenovo are releasing devices similar to the Surface Pro, also running Microsoft Windows.

Can Apple and Google catch up? Can they get the business market and the home market? I don’t see how.

I have already seen the Surface Pro 3 turn iPads into paper weights, well actually kid’s toys as parents stop using them and let their kids game on them. (That is what has happened to my Kindles.)

Conclusion

History shows that while there is money in an either consumer-only or business-only solution, if the solution is needed by both, the winner is whoever fills the needs of both.

If history repeats itself, and I think it will, Microsoft is going to win the Tablet operating system market simply by making the existing desktop and laptop operating system their tablet operating system. It makes the tablet usable for both home and work. The only question is, how much a market share will Apple and Android tablets keep?

There over a billion laptops in the world and most people want them to be thinner and lighter, though not necessarily smaller in screen size. I was quite surprised, however, that even though I was a 16″ or 17″ inch laptop screen guy, that I was willing to trade-off screen size for the light weight, slim Surface Pro 3.

So yes, the first tablet that is very usable for both home use and business use is the Windows Tablet. This is history repeating themselves. All the other tablets are like the early Apple PC, or the BlackBerry. There are once again differences to the current situation.  Apple and Android own the smart phone markets and those smartphone apps run on tablets too, so Apple will never really loose in the apps department. Microsoft’s tablet has already won in the application (full desktop application) market and so while it doesn’t have the apps, that doesn’t matter anymore, it has the applications. The apps will come because the Surface and similar devices are selling very well and will quickly take over the market share.

By the way, as developers write apps for the Surface (not applications), those apps will work on the Windows phone and Windows might just make a comeback in that arena thanks to winning the tablet market. Oh, and you may not think you will every run a windows phone, but what if your desktop/laptop/tablet is nothing more than a windows phone? What happens in a few years when your phone becomes your only device? Which operating system would you choose in a single device world? Most would say Windows (though there will always be Mac and BSD/Linux users). You get to work and dock your windows phone and it is as powerful as your most powerful desktop today and runs your dual monitors at your desk? It streams wirelessless to dumb screens, which were once tablets, but now just run off your phone.

Welcome back to the top Microsoft. Some might even say you never left.

And thank you for building the Surface Pro 3. I love mine. It is replacing my desktop and laptop.

PC-BSD 10 now available

PC-BSD 10.0-RELEASE is now available for download!

10.0-RELEASE notable features

  • Includes FreeBSD 10.0-RELEASE
  • Updated KMS / AMD driver support
  • ISO file is a hybrid USB file, and can be “dd“ed to a USB media.
  • New text-based installer
  • Able to select between GRUB/BSD loaders during installation
  • New desktops! Gnome 3, Mate (Replaces Gnome2) and Cinnamon

Read More . . .

Objective-c for iOS Cheat Sheet

This Objective-c for iOS Cheat Sheet is written for my midterm for my Masters of Computer Science course on iOS Mobile Development. The class didn’t fill up like I thought it should. Perhaps that has to do with the fact that the class name was misspelled as ISO Mobile Development. Oops.

Creating an objective-c class

  1. All objects should inherit NSObject which is found in Foundation.h.
  2. Objects should be created in the following two files.
#import <Foundation/Foundation.h>
@interface MyObject : NSObject
@end
#import "MyObject.h"
@implementation MyObject
@end

Adding a local variable to an objective-c class

A variable is added to the .h file that is only used by the code in the .m file.

#import <Foundation/Foundation.h>
@interface Person : NSObject
{
    string name;
}
@end
#import "Person.h"
@end

Adding a property to an objective-c class

A property is a short cut for a variable wrapped in a getter and setter.

  1. Add an @property line in the .h file as shown below.
  2. Add an @synthesize line for the property in the .m file as shown below.
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property string name;
@end
#import "Person.h"
@implementation Person 
@synthesize name;
@end

Adding a method to an objective-c class

Here is an example of two methods:

  1. a method without a parameter
  2. a method with two parameters.

In many other languages, these methods signatures would look as follows:

double getPI();
double add(double x, double y);

In ojbective-c, the methods look like this:

#import <Foundation/Foundation.h>
@interface calc: NSObject
-(double)getPI;
-(double)multiply:(double) x and: (double) y;
@end
#import "calc.h"
@implementation calc
-(double)getPI
{
    return 3.14159265359;
}

-(double)multiply:(double) x and: (double) y
{
    return x * y;
}
@end

Now you call the methods different than other languages, too.

double pi = [myCalc getPI];
[myCalc add:1 and: pi;

Overriding the getter for the description property

Add the following method to your .m file. Inheriting NSObject already provides the method signature so nothing needs to be added to the .h file.

-(NSString *)description
{
    return @"Your custom description here";
}

Using NSString stringWithFormat

In many languages you can write a string with tokens inside it and just replace the token. You can do this in objective-c as well.

// cart.items is an integer
return [NSString stringWithFormat:@"You have @d items in your cart.", cart.items];
// cart.total is a double and since it is money, you only want to show
// two characters
return [NSString stringWithFormat:@"Total: %.2f", cart.Total];

Any object that is not a primitive, such as NSString, uses %@.

// account.username is an NSString
return [NSString stringWithFormat:@"Welcome %@", account.username];

Adding a UI Element (Label, TextBox, Button)

  1. You use the UI editor to add an the elements to the UI.
  2. Then you create a variable for each element.
  3. Then you link the field to the element in the xib.
#import <Foundation/Foundation.h>
@interface PersonViewController: UIViewController
{
    IBOutlet UILabel *nameLabel;
    IBOutlet UITextField *nameTextField;
    IBOutlet UIButton *submitNameButton;
}
@end
#import "PersonViewController.h"
@implementation PersonViewController
@end

Notice nothing is in the .m file. Of course, you could add these variables as properties and then you would an @synthesize call for these variables in the .m file.

Adding an event for clicking a button

This is pretty much the same as adding a method to an objective-c class. The only difference is you attach this method to a button in the xib.
Note: The button variable doesn’t really matter, it can by a property or just a member.

#import <Foundation/Foundation.h>
@interface PersonViewController: UIViewController
@property (nonatomic) IBOutlet UIButton *submitNameButton;
-(IBAction)buttonPressed:(id)sender;
@end
#import "PersonViewController.h"
@implementation PersonViewController
-(IBAction)buttonPressed:(id)sender
{
    // Button code here
}
@end

Wrap a ViewController in a UINavigationController

In AppDelegate.m, change the default application method to look as follows:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
   
    ViewController *viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    UINavigationController *navCtrl = [[UINavigationController alloc] initWithRootViewController: viewController];
    self.window.rootViewController = navCtrl;
    
    [self.window makeKeyAndVisible];
    return YES;
}

Add Buttons to the top bar (UIBar)

        // Setright bar button
        UIBarButtonItem * rightBarButton = [[UIBarButtonItem alloc]initWithTitle:@"Summary" style:UIBarButtonItemStyleBordered target:self action:@selector(summaryButton:)];
        self.navigationItem.rightBarButtonItem = rightBarButton;
        
        // Set left bar button
        UIBarButtonItem *leftBarButton = [[UIBarButtonItem alloc]initWithTitle:@"Map" style:UIBarButtonItemStyleBordered target:self action:@selector(mapButton:)];
        self.navigationItem.leftBarButtonItem = leftBarButton;

Launch a ViewController

If you have a UIViewController called MapViewController, you can launch it as follows.

    MapViewController *mapVC = [[MapViewController alloc] initWithNibName:@"MapViewController" bundle:nil];
    [[self navigationController] pushViewController:mapVC animated:YES];

Launch a ViewController and pass it data using a property

This passes a property called database into the SummaryViewController.

    SummaryViewController *summaryVC = [[SummaryViewController alloc] initWithNibName:@"SummaryViewController" bundle:nil];
    summaryVC.database = self.database;
    [[self navigationController] pushViewController:summaryVC animated:YES];

Other ways to pass it a property include:

  1. Using a custom init method such as initWithDatabase.
  2. Using a segue.

Get current date and time as string

NSString* currentTimeAsString()
{
    NSDate *date = [NSDate date];
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
    [dateFormat setDateFormat:@"d MMM YYYY, h:mm a"];
    NSString *dateString = [dateFormat stringFromDate:date];
    return dateString;
}

Using a UITabBarController

Change the application method in the AppDelegate.m file.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    
    UITabBarController *tabBarController = [[UITabBarController alloc] init];
    UIViewController *mileageView = [[MileageViewController alloc] init];
    UIViewController *mapView = [[MapViewController alloc] init];
    
    NSArray *controllers = [NSArray arrayWithObjects:mileageView, mapView, nil];
    [tabBarController setViewControllers:controllers];
    
    self.window.rootViewController = tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

Add image to TabBarItem

In the ViewController that is added as part of an array to the TabBarItem, override the iniWithNibName method as follows:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self)
    {
        UITabBarItem *tbi = [self tabBarItem];
        tbi.Title = @"Contacts";
        tbi.Image = [UIImage imageNamed:@"Contact-image.png"];
    }
    return self;
}

Map

Change the map view type.
-(IBAction) changeMap
{
    if (mapView.mapType == MKMapTypeStandard)
    {
        mapView.mapType = MKMapTypeSatellite;
    }
    else
    {
        mapView.mapType = MKMapTypeStandard;
    }
}

Update the user location on a map.

-(void)mapView:(MKMapView *)map didUpdateUserLocation:(MKUserLocation *)userLocation
{
    MKCoordinateRegion region;
    coord = userLocation.coordinate;
    // Start
    region = MKCoordinateRegionMakeWithDistance(coord, START_LATITUDE_SIZE, START_LONGITUDE_SIZE);
    
    [mapView setRegion:region animated:YES];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

TextBox resignFirstResponder

How to sort an NSArray

http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html#//apple_ref/occ/instm/NSArray/sortedArrayHint

Categories (iOS version of Extension Methods in C#)

If an object is missing a method you think it should just have, such as NSDate returning the date in a specified format, you can simply create that method as follows and then use it anywhere you import the .h file.

#import <Foundation/Foundation.h>
@interface NSDate (DateExtender)
-(NSString *)getDateWithFormat:(NSString *)format;
@end
#import "DateExtender.h"
@implementation NSDate (DateExtender)
-(NSString *)getDateWithFormat:(NSString *)format
{
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
    [dateFormat setDateFormat:format];
    return [dateFormat stringFromDate:self];
}
@end

Notice the class name is the same as the object you wish to extend: NSDate.
Notice there is a group name in paranthesis.

UITable

NSTimer

see Notice project.

Use a plist

see car project.

How to add a “Start” shortcut in Windows 8 (or Where is start in windows 8)

Too many people are paying for software to provide a complete return the windows Start pop-up menu. Well, Start is still there in Windows 8, it is just a little different. It is not a pop-up menu. It is hidden by default and only shows when you move your cursor to the bottom left corner.

I think many people would be happy if they simply had a shortcut to the Apps screen, which is equivalent to All Programs.

Well, lets create a shortcut and put in on the task bar. Follow these steps.

Note: Alternately, you can download and extract the zip file from here: AllPrograms.zip

Step 1 – Create the Windows 8 Apps Shortcut

  1. Right-click on the Desktop and click New | Shortcut.
  2. Where it prompts you to “Type the location of the item” enter this:
    %windir%\explorer.exe shell:::{2559a1f8-21d7-11d4-bdaf-00c04f60b9f0}
  3. Click Next.
  4. Name the shortcut what ever you want. “Start” or “All Programs” or whatever, it really doesn’t matter.
  5. Click Finish.

Step 2 – Change the Icon for the Windows 8 Apps Shortcut

You may want to change the icon too.

  1. Right-click on your newly created shortcut and choose Properties.
  2. Click Change Icon…
  3. Select a different icon from the list or download your own .ico file and use it.

Step 3 – Drag the Windows 8 Apps Shortcut to the task bar

  1. Right-click on your newly created shortcut and choose Pin to taskbar.
  2. Now if you want this icon all the way on the left, click and drag it there.