DCSIMG
Yochay Kiriaty

Yochay Kiriaty

I find your lack of faith disturbing

Last week, for 3 day somewhere in San Francisco, Microsoft conducted a marketing experiment for the next version of Windows code name "Mojave". Microsoft gathered over 120 computer users (common folks - consumers not the usual computer experts) whom are all critics of Windows Vista. The promise was to give them all a sneak peak of Windows Vista successor and use their criticism to build a better product.

Windows Mojave was Windows Vista. The same product. The critics did not seem to realize and apparently loved the new operating system. More than 90% gave positive feedback on the operating system which is incredible if you consider that all gave negative feedback about the same product earlier on.

I have to say, that is an amazing marketing trick which is just one of many other marketing efforts to bring Vista back to life.

Tomorrow, July 29th, the results of the experiment will be publicly publish The Mojave Experiment (http://www.mojaveexperiment.com/)

Full article can be found at CNet here

It took me 25 min to write this post. Any feedback is welcome.

Posted by Mr.J | 1 comment(s)

My love to Live Mesh grows from day to day. In case you  don't know what logo_topLive Mesh is, in short "Live Mesh puts you  at the center of your digital world, seamlessly connecting you to the people, devices, programs, and information you care about — available wherever you happen to be"

livemeshDevices

The available (today) CTP enable you to setup your "Ring of devices" and share files, content between these devices. Also you can share specific folders / items with your friends making Live Mesh the idea technology for image and music sharing.

I have only 2  devices - my work computer and home computer, but all my Live Mesh are totally synced.

 

 

LiveMeshFolderUpdateThe current version of Live Mesh enables me to synch few very important files between my home computers and my work computers. Imagine it as it is like free back up, this gives me the option to seamlessly setup new "back up folder" and have my wife use is as if they are just another folder - BTW Live Mesh folders are just like any Windows folder, just they can sync!

As you can see my "Install less" folder contains few folders and files. One I add or delete file to this (or any other Live Mesh folder) they are all automatically replicated to all my other machine base on configuration. You can see that each file and folder that is updated in this folder is automatically synced with my other device.

 

The next version of Live Mesh will allow you to program against the Live Mesh infrastructure. Doing so allow you to share application and application context between devices. I highly recommend you take a look at a web cast Ori Amiga did in his Channel 9 Web Cast. The next version of Live Mesh will also include a Developer SDK for which we can use this infrastructure to create real cool application and share data between users and devices across the web. Think about the implication of using this service from Mobile deceive, and no just Windows Mobile, but platform like Nokie's S65 (and up) and Apple's iPhone!

 

But until the next version I want to be able to share my application. How can I do that? Well to some degree you can have similar experience. Here is an idea I got from Jeff Sandquist (the founding father of Channel 9, Channel 8, and Channel 10). I have a folder of applications that I always need and use that do not require installation, Like Note++, Reflector, ZoomIt, and etc (see large picture) that I uploaded to my Mesh. Once these files are on my Mesh, from any computer (any where) I can simply log-in to my Mesh, double click the app, and there you go. The app will RUN - it is like magic. Even more, now when I install a new computer, all I need to do it connect to my Mesh and I can automatically sync this folder, practically "installing" these application on my new machine in no time. All so sweet :)

 

LiveMeshFUll

 

(It took my about 60 min to write this post.)

Posted by Mr.J | 2 comment(s)

Before you start reading this post, please notice that everything I write is my own opinion and is NOT related to me being an MS employee, nor I used any contact that is not public. Enjoy.

As we say in the holly land "the writing was on the wall". It was only a meter of time before Google will announce its own could services and application environment named Google App Engine. google_appengine[1]

it is no secrete both Google and Microsoft are in a race to complete the amazing computer data-centers infrastructure in order to enable simple safe hosting of YOUR applications. Google, Amazon, Microsoft, and other large web presence companies have a Gazilion (that translate to a lot of data centers around the world with 10 of thousands of computers). For example, Amazon Web Services such as Amazon S3 storage service, Facebook has an application SDK enabling over 27K LiveOverview_thumb[1]applications today. Google has a lot of services and APIs. And what about Microsoft, well Microsoft also have  lots of services, probably more than any other company out there. By far Microsoft Live services is the most comprehensive web services offering by one company, and when you tie in other Microsoft assets like Live Messenger, and over 400M registered active Live ID users, you get a really valuable services that can enhance your app and even more important retain and acquire new users and it is all for free (up to a point).

But, before you can start using web services you  need to build your application. And after you created your web app, you need to deploy it. And deployment can become an issue as you need to deploy on physical machine, either you but them, or more probably you choose a web hoster. The Web Hoster is responsible to host your app on web server and usually give you database and runtime for your app. And the big questions is what about scale and performance.

image27[1]in Facebook, you can write application just for Facebook. Which is limited to Fackbook  runtime. However, still, you can write cool apps and add-in, one of them is Microsoft Live Messenger plug-in for Facebook - where you can add Live Messenger capabilities to your facebook app or page.

 

Recently Google presented a Beta program for Google App Engine. "Google App Engine lets you run your web applications on Google's infrastructure. App Engine applications are easy to build, easy to maintain, and easy to scale as your traffic and data storage needs grow. With App Engine, there are no servers to maintain: You just upload your application, and it's ready to serve your users."

Sounds cool and fun right? Well, the answer is yes BUT. There is a big BUT build in to this offering. You have to code only in Python, and as great as python is, it is not the easiest programming Lnag out there to use - any I am rusty on using Python, which mean I need to do some reading tonight. Your database is bound to be represented only in objects, and unlike other ORM vendors, this implementation (which is easy as it can get) makes it hard on dev to drive complex SQL statements because ANY SQL you write is bound to a real object you created and used in your application. But these are relatively small obstacles on the way of Google to become one of the biggest virtual web application hoster in the world. And I am sure Google will bring in the Ad engine to tie in the $$$.

Where are Microsoft application hosting capabilities? All I can say these are exciting times. . .

See Google Web Engine in action.


Feel free to comments and start a discussion around these topics:

What do you think about Google Web Engine?

And how does Client Vs Web fits in?

 

(It took me about 2.5 hours to write this post)

Posted by Mr.J | with no comments

It is time to for Moonlight!!! Monnlight is an open source implementation of Microsoft Silverlight for Unix systems, is now available in both  Silverlight v1 and Silverlight 2 builds. 

moonlight_logo[1]

While Silverlight still has some long way to become widely adapted as Adobe’s Flash, it is Microsoft's main web browser plug-in that is driving a change to the way we write Web Rich Media Applications today.

image

Moonlight is not a Microsoft project, but Microsoft has been working together with Mono,  an open source project sponsored by Novell, to develop and run .Net client and server applications on Linux, Solaris, Mac OS X, Windows, and Unix, to make a Linux version of Silverlight happen.

 

The Moonlight project is more than "just" running SL on a Mac or a Linux machine. Microsoft is taking these steps no just to increase the adoption of the SL browser plug-in. Microsoft is taking these steps to becoming more open and embracing a more open attitude towardslogo_top_5 the "rest of the world". Take a look at the last announcements about Live  Mesh and the over all Windows Live platform to understand that Microsoft is changing. . . and we in Microsoft understands that the days of a single application for a single machine are long gone and realizing that fact and changing the way we address our future development is an important aspect of the new Live attitude. And it is not just Microsoft, Recent announcements by Google, Yahoo,  MySpace, and Facebook also indicate a general trend toward opening up the software world.

Welcome to a new world.

 

Almost forget! There is a Open Source contest Amir Shevat is running and the prize is Free ride to PDC08!

 

I want to thank Goksin Bakir for this blog insight

And Rohan Thomas for his original blog post

Posted by Mr.J | with no comments

Pop quiz. how can tell me what is the difference between List<T> and Collection<T>? And even more important question "Which is the preferred implementation of a generic list these days?"

from a quick look at the classes one can see that Collection<T> is some sort of a customizable wrapper for List<T>... Collection<T> gives more for use as a base class where you can hook the "standard collections" like Insert, Remove, Clear, Set and such. . . This will give you the option to customize these methods according to your needs.  Internally, it's Items property is backed by a List<T>.

where List<T> is a read-to-declare-and-use dynamic array of T's, it is represents a collection of objects that can be individually accessed by index. While Collection<T> defines methods to manipulate generic collections.

According to FxCop, List<T> should only be used as an implementation detail, and never be exposed in an API, since you can't easily extend List<T> after the fact. While List<T> isn't sealed, it has absolutely no extensibility points.

Personally, while I never publicly expose properties or methods of type List<T>, I often declare them as IList<T> and implement them using List<T>. This provide the best of both worlds.

When creating your own "collection" class:

  • Base class for your custom collection classes Should be Collection<T>
  • For internal implementation (private fields and local variables) use - List<T>
  • External interface (public properties, methods, and collections) use - IList<T>, ICollection<T> and a good practice will be to use IEnumerable<T>

 

But let's not forget the other collections type and I certainly do not want to limit to just choosing between Collection<T> and List<T>... remember to consider Dictionary<TKey, TValue> or KeyedCollection<TKey, TItem>, or HashSet<T> if you're collecting things with identity where duplicates shouldn't be allowed, or where fast lookup by key is required or will perform a lot better than linearly searching a list.

 

Any Feedback or ideas?

(It took me about 35 min to write this post.)

Posted by Mr.J | 2 comment(s)
תגים:, ,

IMAGE_002 אני בביקור קצר במטה של מיקרוסופט, ותראו מה קלטה המצלמה באחד מהמשרדים.

אז קצת באיחור מצידי, אבל שימו לב לכך שאירוע טק-אד ישראל עומד ביחד עם האירועים הגדולים בעולם.

 

כבוד למגזר :)

 

חוץ מזה היה ביקור קצר אבל ממש מעניין. . .

One might ask what is the connection between Microsoft's Photosynth and the popular TV series - CSI (Crime Scene Investigation), Well just read this post and find why you need to be in PDC 08.

PDC 08 is due in few months (October 27-30, 2008) and as I wrote in a former post, if you are a developer, it is the one place for you to be.

This is the second post on a series of PDC 08 Preview posts. Previous post:

 

This time we are going to talk about . If anyone doesn't already knows what is or , please take a look at this video. You can also play with this technology yourself. Logo_Photosynth seadragon21small[1]

 

Well you may say, this is not new. So what is the deal with PDC08 - which all about new stuff and the future? Ah, for PDC we are planning to show some amazing new features associated with Photosynth. Most of them are related to Web 2.0, sharing and combining Photosynth collections. Really exciting stuff. . .

csix-large[1]

But for the time, you way want to check the next episode of CSI in which the good guys solve a  case by reconstituting the crime scene using Photosynth.

 

csi[1]

 

My advice for you, start collecting picture for future synth ;)

 

blog post statistics: write time 25 min

Posted by Mr.J | with no comments

PDC 08 is due in few months (October 27-30, 2008) and as I wrote in a former post, if you are a developer, it is the one place for you to be.

In this year PDC we are going to talk about a lot of cool things. Some logo_top you heard already like Oslo, some are completely new like . . . I wish I could told you but then it will not be a Surprise. However, last week, the Live team, unveiled a new technical preview of Live Mesh service.

What is Live Mesh? Well Live Mesh is a "Software-plus-services" platform and experience that enables PC and other devices (Mobile, XBox, Zune, Mac, etc...) to "come alive" by making them aware of each other through the Internet, enabling individuals and organization to manage access, and share their files and application seamlessly on the web and across their world of devices.

Or in a more simple terms, Live Mesh is a "Software + Services platform for synchronization and collaboration."

Basically, the current version enables you to synchronizes data across multiple devices. I am sure most of you owns more than one computer. One at home, one (or more) at work and one laptop. And you have some much storage place (for all the emule downloads) that you cant find anything. I want to ask you a question, did it ever happen to you, when you need one specific piece of content, and at the end you find out that this specific content is on some other machine, just not the one you have right now. using Live Mesh will solve such features.

And what about accessing your computer from remote, without using VPN?! Another extremely cool feature Live Mesh enables you is to have a similar experience  to Remote Desktop over the web across firewalls!!!, called Live Desktop. (just make sure you do not break your work security policy)

How it works?

Essentially, Live Mesh is a collection of feeds (formatted as ATOM, JSON, RSS, WB-XML, or POX). The main transport is FeedSync - which is an open source (under Microsoft Open Source License) data syndication protocol based on Atompub service.

Every piece of data entered into a user's Mesh either it is a file, a folder, a message, a user permission, or a new device, is rendered as a piece of information in a feed. The feeds are then synced with other devices that are part of that Mesh following rules for how to sync each particular piece of information (meaning file A may sync with Users 1, 2, and 3, while File B may only be told to sync with Users 1 and 2).

Using Silverlight from any web browser, or from a client based application, you can launch the "Ring of devices" (one ring to rule them all). Here are two images showing the Windows client and the Web versions.

MeshScreen_550x330
Live Mesh client on the desktop showing all the devices

Ring of devices
Live Mesh shows you your synced devices in a cute animated "ring"

Once you have a device you can easily setup "Mesh" folders and start syncing between devices as show in the next image

mesh-explorer_380x245

And if this is not enough for you. Here is Live Desktop, which enables me access to my desktop from anywhere in the web

image

  • Few disclaimers. Live Mesh is a limited technology preview and only by invites. And sorry I have no invites!
  • It is not a full product, it is not even a beta or a CTP.
  • It will be shown in great detailed in PDC08
  • And It is extremely cool!!!

Here are some links for more reading.

More to come soon. . .

teched[1] Someone in Microsoft Israel decided I should be the keynoter in TechEd Israel 2008. When I was asked if I agree to take the job, I said yes with no hesitation. Little I know how hard is to create and deliver a "kick Ass" Keynote sessions. But rest assure, this year keynote is going to be different.

First there are two different Keynote sessions. One for all of us, cool geeks whom love development so much, and one for all the rest of common people, you know, IT guys ;)2069395590_d77618de97_m[1]

Second, because of this separation, we can do live coding on stage (if all goes well :) showing real code and real demos !!!

Last, but not least. We have very cool surprises and games.

It is going to be fun fun fun

Just make sure you arrive on time to, the Developers Keynote Session, starts at 12:30 in Eilat, Royal Beach Hotel.

Be there or be square

I guess I need to blog a little bit more often than I do. And I assume I need to write about all the presentations I did. During last year I had sessions at TechEd USA, TechEd Europe, and now it is time for MIX08. MIX is the right place to be if you want to talk about WEB, and about the things to come. But form my personal point of view; MIX is turning to be the most important (after PDC) event for Microsoft as the future becomes more and more Web and S+S oriented.

Why I think that way you may ask yourself? Simple, Microsoft is putting a lot of attention towards S+S, SOA and web in general. Just take a look at Silverlight 2 and the announcements following MIX Keynote tomorrow. Here is a short list of these announcements:image

I am speaking with Dr. Gil Huppert Graff from UI. We have a session about Adaptive User Interface using WPF. A real cool topic, but is again another blog topic. Once we deliver the session I will post the slides and the demos. 24 hours after my session you will be able to see my video recording on the web.

C U all once I am back :)

Posted by Mr.J | with no comments
תגים:,

  לפני מספר שנים היה לי העונג להיות שותף לחברת סטראטפ צעירה אשר כמו חברות רבות עסקה בפיתוח אפליקציה ל- WEB. אז עד לא קראו לזה Web 2.0 אבל עשינו כמה דברים מופרעים, אבל זה כבר סיפור אחר. בזמנו כאשר ה- NESDEQ היה באזור ה- 5000, וכולנו היינו באפוריה שבעד יום יומיים, ממש מחר אנחנו מבצעים את ה- EXIT של ה- LIFE. אבל לצערי לא ממש הצלחנו, ובדרך שרפנו את הכסף שלנו.

כחלק ממקימים החברה הייתי תופר הרבה את הקו תל-אביב ניו יורק, אפילו גרתי מספר שבועות (די גדול) בעיר. ויש כמה דברים שנחרטים בזיכרון ויישארו תמיד. כמו הסושי ב- BOND ST או הסושי ברחוב 78. אבל חוץ מסושי ממש טוב (אבל ממש טוב) יש עד דבר אחד שאני זוכר ממש טוב.

הפרסומות.SMALL_IMG_2391

לא סתם פרסומות, אלה פרסומות של אתרי אינטרנט. אז בשנת 2000 בארץ לא ממש פרסמו אתרי אינטרנט בטלוויזיה, אבל תאמינו לי בארה"ב הפרסומות חגגו, ובגדול ורצת אחרי החגגיה, זוכרים מה קרה?

מחר אני מרצה ב- MIX08, אז אני בארה"ב עכשיו ויצא לי לראות קצת טלויזיה. תראו מה המצלמה שלי קלטה ב- break אחד של פרסומות.

תהינו :)

SMALL_UntitledSMALL_IMG_2386
Posted by Mr.J | 1 comment(s)

During my C# 3.0 deep dive in the Developer Academy II, I presented a new syntactic sugar feature in C# 3.0 called Object Initializers which enables you to init object members using a new (and somewhat odd) syntax that looks like an inlining of values directly to the object members.

Given a Customer object with three string fields, City, ContactName, and CustomerID with only default constructor (C# 3.0 code using Automatic Implemented Properties)

    public class Customer

    {

        public string CustomerID { get; set; }

        public string ContactName { get; set; }

        public string City { get; set; }

    }

 

In C# 3.0, I can now write this line of code:

   // C#3.0 Feature:  Object Initializers

   Customer customer = new Customer()

   {

        City = "Airport City",

        ContactName = "ABC",

        CustomerID = "1"

   };


These lines of code create a new Customer object with the values set to his corresponding members. The feature is really becoming useful when a given object has more than just three member fields. Consider having a lot of members in an object, and you would like to initialize any number of these members in any combination, and in a single line of code - similar to calling different constructor. However you don’t want to overwrite the constructor with all the different permutation of the member field (remember the .NET don’t support default values in the constructor). Therefore using Object Initializers syntactic sugar is a very effective programming. This allows you to reduce the total amount of code you write – no need to create all those overwriting constructors, and makes you code more readable and intuitive. Like everything in C# 3.0, this is really a simple compiler trick, which means it is nothing more than a simple syntactic sugar.

 However with that said, there is one point that we need to address and spent few minutes contemplating on. Given the Customer class and the Object Initializer statement defined above, the compiler generates the following code:

 

clip_image002

The compilers generates a “temporary” (not really temporary) Customer object called customer2 , init its property fields with the corresponding values, and only then assign the temporary customer2 object reference to our original Customer object.

From a quick glance, this may look redundant, uncalled for, very old coding style, not preferment and in general looks like a bug service pack 1 will need to fix. But actually, this is not a bug, it is a feature. This feature is called Atomic Assignment and it is an important feature to protect us stupid programmers from making too many stupid mistakes.

To explain who does Atomic Assignment works, consider the general case here.  What if you write the following code:

class Customer

{

     //dont do that at home

    public byte Age;

    public bool Cool;

    public string City;

    public Customer ReferredBy;

}

 

class Program

{

    static void Main()

    {

        Customer customer = new Customer

        {

           Age = 0x1a,

           Cool = true,

           City = "Airport City",

           ReferredBy = null

        };

        customer = new Customer

        {

           Age = 0x33,

           Cool = false,

           City = "Tugboat City",

           ReferredBy = customer

       };

    }

}

In this case, two separate instances will be constructed, each of which is stored in the customer variable.  However, a property initializer for the second instance refers to the first instance.  If temporary objects were not used, the ReferredBy = customer initializer would point the second instance at itself, instead of at the first instance.

Situations like this are the reason it‘s usually preferable to generate the verifiably correct code and let the JIT optimize the resulting MSIL if possible.

 

אם הייתה לכם את האפשרות להשפיע על התכנים והרצאות של טק-אד ישראל 08 אילו הרצאות הייתם teched רוצים לראות? בסקר של Developer Academy 2 השתתפו קצת יותר מ-900 אנשים!!! שזה חצי מסך האנשים אשר הגיעו לכנס. כמות מדהימה ללא צל של ספק, וברור לנו שרשימת ההרצאות היתה נראתה אחרת ללו ההשתתפות שלכם. כמו כן הבלוגרים "שיכנעו" אותנו לספק Wireless בכל שטחי המקום -דבר שקרה ועד כמה הערות בונות לקראת האירוע.

אני רוצה לצאת בקול קורא לגבי התכנים של TechEd 08 ובכלל לגבי הרמה והתכנים של הכנסים הטגנולוגים של מיקרוסופט. אם הייתה לכם את האפשרות להשפיע על התכנים והרצאות של טק-אד ישראל 08 אילו הרצאות הייתם רוצים לראות? מה היא הרמה הטכנית אותה הייתם רוצים לקבל? האם הרמה צריגה להיות יותר טכנית ומפורטת מ הרמה ב- Developer Academy 2 האחרון שהיה או פחות? האם לתת משקל גדול לעתיד או לבעיות שיש לנו היום? האם להרחיב בנושאים כגון Security, Performance, או אולי בנושאים כגון XNA, MCML, Multi-Core? כמה ממכם רוצים לשמוע יותר על WinForms ועומת WPF? ומה לגבי מוצרים? האם יש לתת יותר מקום למוצרים כגון IIS7, Windows Server 2008, SQL 2008? האם BizTalk Server עם מבט לכיוון Oslo יכול לספק עניין?

כשאתם עונים על השאלות הללו תנסו לתת תשובות אשר יספקו את הצרכים המיידים שלכם כמו כן את הצרכים העתידיים שלכם. וגם חשוב שתנסו קצת "להיסתכל מלמעלה" על השאלות ולנסות לענות בראיה רחבה יותר של כלל קהל המשתתפים בכנס.

הפוסט הזה הוא בפרוש לא סקר, אלא יותר קריאת כיוון לסוג התכנים והעומק הטכנולוגי שאתם רוצים שאנחנו נגיע אליו. אם אתם רוצים תגיבו במייל או כהערות לפוסט . זו היא ההיזדמנות שלכם להשפיעה!!!

אני אשמח לקבל כל התיחסות.

During my C# 3.0 deep dive session in the Developer Academy II, I presented a new syntactic sugar feature in C# 3.0 called Auto Implemented Properties. The Auto Implemented Properties allow us to take regular properties fields that looks like this

//Simple C# 2.0 (.NET Framework 2.0) property decleration

    private string customerID;

    public string CustomerID

    {

        get { return customerID; }

        set { customerID = value; }

    }

 

And simply write this one line of code:

// C#3.0 Feature:  Auto-Implemented Properties

public string CustomerID { set; get; }

The compiler, behind the scenes creates the supporting backing field named CustomerID and also creates the default set & get supporting methods. Using Reflector to check the compiler output you will see this:

clip_image002

 

Note the default setters and getters generated by the compiler and a default constructor.

 

 clip_image004

 

If you want to modify the values in the SET function operation or make format manipulation at the GET function operation you will need to use the old syntax.

So you can see that this only a compiler feature, a trick, no magic nor new code, it is just shorter code that is easy to read and maintain.

הגיע הזמן לעד PDC.

כל מה שנשאר לקוות שהפעם לא יבטלו את האירוע. אבל יש לי תחושה שבשנה הבאה ידברו על כמה דברים מאוד מענינים וחדשים, וגם כאלה שכבר שמענו אליהם כגון- Oslo. כרגיל האירוע ב- Los Angeles בין באוקטובר 27 לאוקטובר 30. לא יודע מה איתכם אני מתכוון להיות שם, זה בטוח !!! bb288534_pdc_toplevel_revised

 

 

 

Posted by Mr.J | 5 comment(s)
More Posts Next page »