Windows Mobile Support

  • Subscribe to our RSS feed.
  • Twitter
  • StumbleUpon
  • Reddit
  • Facebook
  • Digg

Friday, 18 January 2013

Code refactoring - NULL check (Part 2)

Posted on 21:33 by Unknown
Part 1
Part 2
Part 3

In my last post we played a little with how we can check if an object is null or not. What I forget to mention in the post is the way how you can construct the object that can be null.
In the given case the constructor of the object was pretty complicated and you could not create the object without initialize a lot of items around him. As Tudor mention in a comment we could use the “Null Object Pattern”.
Let’s see how the code would look like if we could create an instance of the object. The “Null Object Pattern” is based on a neutral object that is considered the equivalent for NULL. This object contains all the default value of the properties that are exposed.
Using an object like this we don’t need to check if our item is null or not. We can directly access a property of it. During the lifetime of an application we should have only one instance of our object (Null Object) – the instance can be stored in a static field.
Using this solution we would end up with this:
public class SomeFoo
{
public int A { get;set; }
public string B { get;set; }
public int C { get;set; }


private static SomeFoo _nullInstance = new SomeFoo()
{
A = 0,
B = null,
C = -1
}

public static SomeFoo NullInstance
{
get
{
return _nullInstance;
}
}
}

public class Foo
{
SomeFoo _some = SomeFoo.NullInstance;

...

public int GetA()
{
return _some.A;
}

public string GetB()
{
return _some.B;
}

public int GetTotalX()
{
return _some.A + _some.C;
}

}
This will work great if we don’t have cases when for the property “A” or “B” we need to return 0 and for a method that calculate “A”+”B” we need to return -1. But in the general case this solution works great.
In the next post we will see how we can implement this pattern when we are working with interfaces.
Part 1
Part 2
Part 3
Read More
Posted in | No comments

Code refactoring - NULL check

Posted on 04:59 by Unknown
Part 1
Part 2
Part 3

Let’s look over the following code:
public class Foo
{
SomeFoo _some;

...

public int GetA()
{
if(_some == null)
{
return 0;
}

return _some.A;
}

public string GetB()
{
if(_some == null)
{
return null;
}

return _some.B;
}

public int GetTotalX()
{
if(_some == null)
{
return -1;
}

return _some.A + _some.C;
}

}
We can see that the IF checks appears in more than one place. Even if is only a simple check, there can be a lot of places where it appears.
If we manage to extract this check in a generic method, than the code would be more legible. Because we don’t return each time the default value of an object we need to be able to return custom “default” value for the case when or object is null.
We can image a method that accept as parameter the object that we check if is null or not and another two parameters that represent the default value that need to be return and a generic function that return the expected value.
private TReturn ExecuteFuncOverObj<TReturn>(object obj, TReturn defaultValue, Func<TReturn> func)
{
if( obj == null)
{
return defaultValue;
}

return func.Invoke();
}
In this way our code would look like this:

public class Foo
{
SomeFoo _some;

...

public int GetA()
{
return ExecuteFuncOverObj(_some, () => _some.A, 0);
}

public string GetB()
{
return ExecuteFuncOverObj(_some, () => _some.B, null);
}

public int GetTotalX()
{

return ExecuteFuncOverObj(_some, () => _some.A + _some.C, -1);
}

}
If we need this behavior in other methods we could define a helper function or an extension method of Object.
Enjoy!
Part 1
Part 2
Part 3
Read More
Posted in clean code | No comments

Thursday, 17 January 2013

VM Depot - Stepping into a new era

Posted on 06:24 by Unknown
From last year, Windows Azure started to support any kind of system on Virtual Machines. We can install a Linux operating system on them without any kind of problem. Also we have some images created by default, with different operating system, that can be used by anybody.
This year we have a new feature related to these images.  Windows Azure offers VM Depot. This is a place where anybody can upload his image of operation system and share with others. For example we can create and share with others an image of Ubuntu that is preconfigured to run different application like Redmine, Moodle,  Glitorious and so on.
A nice feature of this system is the rating and feedback mechanism. Each user can rate an image and give feedback. In this way people can select more easily an image for themselves. Not only this, but you can take an image, change it and share it again with others.
When you want to deploy an image of a VM machine from Windows Azure, VM Depot will generate the command line that you need to run on Cloud to install the specific image on your virtual image. Publishing your machine is simpler than deploying it. You need to set a name, description and a URL path where the VHD is published. 
You don’t need to have a Windows Azure account to be able to navigate, get the deployments script or publish a new virtual machine.
The real value of this service is for the companies that have a product that can be run on cloud also. Image that you are a software company that has a great product for online payment. Your product is developed in C++ and runs on Ubuntu. You will be able to publish an image of your VM machine for all your customers very easily. In this way your customer will have images of your server pre-configured.
Using this new service we can share and deploy images for Windows Azure very easily.
Read More
Posted in Azure, virtual, Windows Azure | No comments

Tuesday, 15 January 2013

Data Model for Reporting over Windows Azure Tables (part 2)

Posted on 02:18 by Unknown
Part 1
In the last post we talked a little about how we can calculate TOP 5 visited URLs per day for each user and TOP 5 visited URL anytime. For these cases I propose some ways on how we can store information on Windows Azure Table in a way that we can generate these reports.
In today post we will see how we can resolve the concurrence problem. We can have 10, 20 or 100 commands that want to execute over the same entity from Windows Azure Table. Because of this we need to guaranty that the writer has the last version of the entity before update it. If we will not be able to guaranty this… than our reporting solution will be compromised.
Windows Azure Table comes with a simple solution. Each entity that is stored on tables contains a unique key named ETag. ETag is changed every time when the entity is updated or changed. Based on this value we can know if we have the last version of an entity or the entity was changed from the moment when we receive it. ETag is the secret that give us support for concurrency access to Windows Azure Storage (Tables and Blobs).
Each entity that is retrieved from Windows Azure Tables has the ETag set. When someone will update any field from the given entity, the ETag value will be changed. In the moment when another user tries to make an update with an invalid ETag, the merge option feature will be used.
The data context contains a merge option filed that can be set manually. Based on this value, we can provide a custom behavior when a conflict appears. The values that are supported for MergeOption enum are:
  1. AppendOnly (default value)
  2. OverwriteChanges
  3. PreserveChanges
  4. NoTracking
For a description of this values please take a look here.
We saw that Windows Azure tables already have support for object “versioning” and automatic detecting and resolve merge conflict.
This can be used with success in our problem, when  in the case when the entity was update by another client we will need to retrieve the last version of the entity and update it.
Read More
Posted in Azure, Windows Azure | No comments

Friday, 11 January 2013

Data Model for Reporting over Windows Azure Tables

Posted on 06:29 by Unknown
One of my colleague tried implemented a browser history mechanism for MVC. Based on this data he would like to generate two simple reports:
  1. Top 5 web addresses accessed by a given user per day
  2. Top 5 web addresses accessed by all user
When the data store is implemented using SQL Azure, this problem can be resolved very simple.  The question that appeared here is: Can we implement a data store model using Windows Azure Table Services?
I will try to propose a possible data model that is using Windows Azure Table.
In the default implementation (using SQL Azure), there were 3 kind of information that is stored in the SQL tables:
  • URL visited
  • User
  • Date
Because we don’t have an order by, count or a max function in a query over Windows Azure Table we need to think at a model that would help us with this. We will start with the first requirement:

Top 5 web addresses accessed by a given user per day
To be able to solve this problem we need a data model that permit us to refer to URLs for a given day and user.
Theoretically, we can have an unlimited number of tables in Windows Azure Tables (and we don’t need to pay for each table in part). Because of this we can have a different table for each day. In this way the cleanup mechanism will be extremely simple. Also, when we want to access historical, selecting a specific day will be very easily.
We already know that each table from Windows Azure Tables contains two fields that play the role of keys: Partition Key and Row Key. Partition key can be used with success when we have different items types saved in the same table. Entities could be grouped based on the user, because of this we can save in the Partition Key the user id. In this way we will be able to specify a specific date and user.
In the row key we can store the visited URL. Another property (column) will be needed to store how many times the URL was visited in a specific day. On the server we can define a mechanism that will add or increment a visited URL.
The downside of this solution is that we will need to make two different transactions when we want to increment the history counter. One transaction that brings the current counter for the given user and URL (if exist) and another one that update (insert) the counter value.
When we need to generate the TOP 5 for a given day per user we will have to load all URLs for specific user and order this by the counter value. We don’t need to forget that in Windows Azure Tables we don’t have support for Order By and Top N functions of a query – because of this we need to retrieve all the URLs that a user visited in a given day.

Top 5 web addresses accessed by all user

Option 1
To full fit this request we need to create another Windows Azure Table that will store the URL and the counter for each URL. To be able to support Top 5 not only for URL but also for domains we will store in the Partition Key the URL domain and the Row Key the rest of the URL path.
Another solution would be to have in the Partition Key the same values for all rows and in the Row Key the full URL. We don’t want to have in the Partition Key the URL (and in the Row Key the counter) because in this case we risk having a table that is fragmented – when a Windows Azure Table is too big, Windows Azure can split our table based on the Partition Key and move our spited table on different machines (this is not visible for consumer – is an implementation detail).
The biggest downside of this solution in the moment when we need to retrieve the top 5 most visited URLs. We will need to retrieve all the content from our table and calculate the top 5.

Option 2
Another possible solution for this problem is to have more than one table. Based on how many a URL was visited we will be stored in a specific table. For example we would have
  • VisitedUrls1to100
  • VisitedUrls101to1000
  • VisitedUrls1001to10000
  • VisitedUrls10001to100000
For example when the URL is in the first table (VisitedUrls1to100) and the counter value will reach 101, that the entity will be moved to the next table and so on. In this implementation we will have a big problem to find a URL to increment the counter. To optimize this we would need to use another table that would store the URL and the table name where our URL counter can be found (VisitedUrls1to100).
The good part of this implementation is in the moment when we need to calculate top 5 and we can retrieve only a part of the URLs.

These were the possible implementation that I see using Windows Azure Tables. I think that this problem is not suitable for Windows Azure Table and a relational database is better for this case.
I didn’t forget about a problem that needs to be solved here – concurrency. I will come with a post tomorrow.
Part 2
Read More
Posted in MVC, table, Windows Azure | No comments

Thursday, 10 January 2013

Scheduled Backend Tasks - Windows Azure Mobile Services

Posted on 07:20 by Unknown
Using Windows Azure Mobile Services we can create in a short period of time a simple backend for our application. In the last period of time a great feature appeared – Scheduled Backend Tasks
This feature permit users to create jobs that can run at a specific time interval. Imagine that you have an application that track the GPS location of users for the last 6 hours. All the information those are older than 6 hours can be removed. This problem could be solved by a manual trigger, but we are the XXI century, everything needs to be automatized. In this case you would have a job on a server that would make this cleanup. But wait; way would you need something like this when Mobile Services give you the possibility to create your backed very easily.
The scheduled job support gives us the possibility to create a job that run at specific time intervals or demand. Each job that is created can be enabling or disable anytime. Also, jobs can be run manually, using the “RUN ONCE” functionality. 
The language that can be used to define each job is JavaScript. It is the same language used to define custom scripts over tables from Mobile Services. From this job we can execute any kind of code over tables from Mobile Services or we can call remote services. You can imagine any kind of scenarios. The script need to added from the Windows Azure Portal, in this moment there is no support to define it in Visual Studio and make a deploy.
I tried to find what are the current limitation (January 2013) of Scheduled Backed Tasks. What I found until now is:
  • The smallest time interval is 15 minutes
  • Modules supported in this moment are: “azure”, “sendgrid”, “request” (but this list will expand)
  • There is no maxim time limit and you don’t pay for computation time. BUT (yes, there is a but), if you run scripts that drain the CPU that the task will be terminated
Don’t forget that scheduled backend task can be used with success when we want to use push notifications at a time interval. Another case when you can use this feature is to test custom scripts that are defined over tables from Mobile Services.
Read More
Posted in Azure, Windows Azure | No comments

Tuesday, 8 January 2013

Cloud and Windows Azure in 2013 - Codecamp la Cluj-Napoca, 17 ianuarie

Posted on 11:01 by Unknown
Link pentru inregistrare
Acest an se anunță un an extrem de interesant. Soluțiile cloud devin mature, iar miza creşte atât pentru provideri cât şi pentru dezvoltatori. Cu această ocazie Codecamp vă invită la "Windows Azure in 2013". În cadrul acestui eveniment o să vedem ce ne oferă Microsoft în lumea cloud.


Participarea la eveniment este gratuită. Mulțumim în special sponsorilor pentru susținere.
Agendă

18:15-18:30
Sosirea participanților

18:30-19:30
Scalability in a Cloud Application
Radu Vunvulea
In this session we will see what are the scalabilities points of a cloud application. In the first part of the session we will look over the services offered by Windows Azure.
19:30-19:40
Pauza


19:40-20:40
Maintenance of Windows Azure applications
Mihai Tătăran
After you have developed version 1 of your Windows Azure solution, you need a strategy and strict procedures in place for application maintenance and support. In this session you will learn the basics on Windows Azure applications operations.
20:40-21:40
Open Panel
All about Windows Azure and cloud applications.



Sponsori:

Yonder



Pentru mai multe informații

  • Radu Vunvulea
    • vunvulear@yahoo.com
    • 0766562375
    •  
Link pentru inregistrare
Read More
Posted in codecamp, eveniment, Windows Azure | No comments
Newer Posts Older Posts Home
Subscribe to: Posts (Atom)

Popular Posts

  • Service Bus Topic - Automatic forward messages from a subscription to a topic
    Windows Azure Service Bus Topic is a service that enables us to distribute the same messages to different consumers without having to know e...
  • CDN is not the only solution to improve the page speed - Reverse Caching Proxy
    I heard more and more often think like this: “If your website is to slow, you should use a CDN.” Great, CDN is THE solution for any kind of ...
  • Content Types - Level 6: Rich Media
    Level 6: Rich Media NOTE: This is part 7 of 7 and the conclusion of this continuing series; please see earlier posts for more background inf...
  • E-Learning Vendors Attempt to Morph Mobile
    The sign should read: " Don't touch! Wet Paint !" I had a good chuckle today after receiving my latest emailed copy of the eLe...
  • Patterns in Windows Azure Service Bus - Message Splitter Pattern
    In one of my post about Service Bus Topics from Windows Azure I told you that I will write about a post that describe how we can design an a...
  • Content Types - Level 2: SMS Campaigns
    Level 2: Interactive Messaging NOTE: This is part 3 of 7 in a continuing series; please see earlier posts for more background information. L...
  • NetCamp 2012 - Windows 8 development experience
    During this week I participate to NetCamp 2012.  This was the 6th NetCamp event and is organizing by Evensys. NetCamp is a dedicated event f...
  • Publishing our CellCast Widget for iPad
    The rush has been on this week as our development team worked to design a new version of our CellCast Widget specifically for Apple's up...
  • Cum sa salvezi un stream direct intr-un fisier
    Cred ca este a 2-a oara când întâlnesc aceasta cerința in decurs de câteva săptămâni. Se da un stream și o locație unde trebuie salvat, se c...
  • Content Types - Level 3: Voice
    Level 3: Voice-based Content and Assessments NOTE: This is part 4 of 7 in a continuing series; please see earlier posts for more background ...

Categories

  • .NET
  • .NET nice to have
  • #if DEBUG
  • 15 iunie 2011
  • 15 octombrie 2011
  • 2011
  • abstracta
  • action
  • adaugare
  • ajax
  • Amsterdam
  • Android
  • aplicatii
  • App Fabric
  • Apple iSlate
  • array
  • as
  • ASP.NET
  • AsReadOnly
  • Assembly comun
  • async
  • Asynchronous programming
  • asyncron
  • Autofac
  • AutoMapper
  • az
  • Azure
  • Azure AppFabric Cache
  • Azure backup solution
  • Azure Storage Explorer
  • azure. cloud
  • backup
  • BCP utility
  • bing maps v7
  • BitArray
  • BlackBerry
  • blob
  • BlobContainerPublicAccessType
  • breakpoint
  • bucuresti
  • C#
  • cache
  • CallerMemberName
  • CellCast
  • Certificate
  • CES
  • change
  • ChannelFactory
  • clasa
  • classinitialize
  • clean code
  • click event
  • close
  • Cloud
  • Cluj
  • cluj-napoca
  • Code contracts
  • code retrat
  • codecamp
  • CollectionAssert
  • Compact Edition
  • compara
  • Comparer T .Default
  • CompareTo
  • comparison
  • comunitate
  • concurs
  • Conditional attribute
  • configurare
  • connection string
  • container
  • content type
  • control
  • Convert
  • convertAll
  • convertor
  • cross platform
  • CRUD
  • css
  • custom properties
  • custom request
  • DACPAC
  • Daniel Andres
  • data sync service
  • database
  • date time
  • datetime
  • debug
  • default
  • delegate
  • dependency injection
  • deploy
  • DeploymentItem
  • design patterns
  • Dev de Amsterdam
  • development stoage
  • dictionary
  • diferente
  • digging
  • director
  • Directory.Exist
  • disable
  • dispatcher
  • dispose
  • dropdown
  • dynamic
  • EF
  • email
  • encoding
  • entity framework
  • enum
  • enumerable
  • Environment.NewLine
  • error
  • error 404
  • error handling
  • eveniment
  • event
  • ews
  • excel
  • exception
  • exchange
  • exita
  • explicit
  • export
  • extension
  • field
  • File.Exist
  • finalize
  • fire and forget
  • Fluent interface pattern
  • format
  • func
  • GC.SuppressFinalize
  • generic
  • getdirectoryname
  • globalization
  • gmail
  • hackathon
  • Hadoop
  • handle
  • HTML
  • html 5
  • Html.ActionLink
  • http://www.blogger.com/img/blank.gif
  • HttpModule
  • IComparable
  • IE
  • ienumerable
  • IIS
  • image
  • implicit
  • import
  • int
  • internationalization
  • Internet Explorer
  • interop
  • Ioc
  • IP Filter
  • iPhone
  • iQuest
  • IStructuralEquatable
  • ITCamp
  • itspark
  • java script
  • javascript
  • July 2012
  • KeyedByTypeCollection
  • KeyNotFoundException
  • Kinect SDK
  • lambda expression
  • LightSwitch Microsoft Silverlight
  • linq
  • list
  • lista
  • lista servicii
  • liste
  • Live Connect
  • Live ID
  • load
  • localization
  • lock
  • m-learning
  • MAC
  • Mango
  • map
  • mapare
  • mapare propietati
  • messagequeue
  • meta properties
  • method
  • MethodImpl
  • Metro App
  • Microsoft
  • Microsoft Sync Framework
  • mlearning
  • mlearning devices
  • Mobile Apps
  • mobile in the cloud
  • mobile learning
  • mobile services
  • Mobile Web
  • mongoDb
  • monitorizare
  • msmq
  • multitasking
  • MVC
  • MVC 3
  • MVVM
  • namespace
  • nextpartitionkey
  • nextrowkey
  • Ninject
  • nivel acces
  • no result
  • normalize
  • nosql
  • null expcetion
  • null object pattern
  • NullReferenceException
  • OAuth API
  • office
  • offline
  • Open ID
  • openhackeu2011
  • operations
  • operator
  • optimization
  • option
  • outputcache
  • OutputCacheProvider
  • override
  • paginare
  • pagination
  • path
  • persistare
  • Portable Library tool
  • Post event – CodeCamp Cluj-Napoca
  • predicate
  • predictions
  • prezentare
  • process
  • proiect
  • property
  • propietati
  • query
  • ReadOnlyCollection
  • ReadOnlyDictionary
  • referinta
  • reflection
  • remote
  • reply command
  • request
  • request response
  • resouce
  • REST
  • REST Client
  • RESTSharp
  • ronua
  • rss
  • rulare
  • salvare in fisier
  • sc
  • schimbare timp
  • select
  • select nodes
  • send
  • serializare
  • serialization
  • Server.Transfer. Resposen.Redirect
  • service bus
  • ServiceBase
  • servicecontroller
  • sesiune
  • session
  • Session_End
  • Session_Start
  • setup
  • Sibiu
  • signalR
  • Silverlight
  • sincronizare
  • Single Responsibility Principle
  • SkyDrive
  • skype
  • smartphones
  • smtp
  • Snapguide
  • sniffer
  • socket
  • solid
  • spec#
  • sql
  • Sql Azure
  • SQL CE
  • sql server 2008 RC
  • SRP
  • startuptype
  • stateful
  • stateless
  • static
  • stergere
  • store
  • store procedure
  • stream
  • string
  • string.join
  • struct
  • StructuralEqualityComparer
  • submit
  • switch
  • Symbian
  • Synchronized
  • system
  • tabele
  • table
  • techEd 2012
  • tempdata
  • test
  • testcleanup
  • testinitialize
  • testmethod
  • thread
  • timer
  • ToLower
  • tool
  • tostring
  • Total Cost Calculator
  • trace ASP.NET
  • transcoding
  • tuplu
  • tutorial
  • TWmLearning
  • type
  • unit test
  • unittest
  • UrlParameter.Optional
  • Validate
  • validation
  • verificare
  • video
  • view
  • ViewBag
  • virtual
  • visual studio
  • VM role
  • Vunvulea Radu
  • wallpaper
  • WCF
  • WebBrower
  • WebRequest
  • where clause
  • Windows
  • windows 8
  • Windows Azure
  • Windows Azure Service Management CmdLets
  • windows live messenger
  • Windows Mobile
  • Windows Phone
  • windows service
  • windows store application
  • Windows Task
  • WinRT
  • word
  • workaround
  • XBox
  • xml
  • xmlns
  • XNA
  • xpath
  • YMesseger
  • Yonder
  • Zip

Blog Archive

  • ▼  2013 (139)
    • ▼  November (17)
      • Service Bus - Optimize consumers using prefetch an...
      • Extract relative Uri using MakeRelativeUri method
      • Sync Group - Let's talk about Performance
      • [PostEvent] Slides from MSSummit 2013, Bucharest
      • How to get the instance index of a web role or wor...
      • Sync Group - A good solution to synchronize SQL Da...
      • Throttling and Availability over Windows Azure Ser...
      • How to monitor clients that access your blob storage?
      • Digging through SignalR - Dependency Resolver
      • [Event] Global Day of Coderetreat in Cluj-Napoca! ...
      • Windows Azure Service Bus - What ports are used
      • Debugging in production
      • Simple load balancer for SQL Server Database
      • [PostEvent] MSSummit 2013, Bucharest
      • How to read response time when you run a performan...
      • VM and load balancer, direct server return, availa...
      • Bugs that cover each other
    • ►  October (12)
    • ►  September (10)
    • ►  August (7)
    • ►  July (8)
    • ►  June (15)
    • ►  May (12)
    • ►  April (17)
    • ►  March (16)
    • ►  February (9)
    • ►  January (16)
  • ►  2012 (251)
    • ►  December (9)
    • ►  November (19)
    • ►  October (26)
    • ►  September (13)
    • ►  August (35)
    • ►  July (28)
    • ►  June (27)
    • ►  May (24)
    • ►  April (18)
    • ►  March (17)
    • ►  February (20)
    • ►  January (15)
  • ►  2011 (127)
    • ►  December (11)
    • ►  November (20)
    • ►  October (8)
    • ►  September (8)
    • ►  August (8)
    • ►  July (10)
    • ►  June (5)
    • ►  May (8)
    • ►  April (9)
    • ►  March (14)
    • ►  February (20)
    • ►  January (6)
  • ►  2010 (26)
    • ►  December (1)
    • ►  November (1)
    • ►  October (1)
    • ►  June (2)
    • ►  May (1)
    • ►  April (4)
    • ►  March (1)
    • ►  February (1)
    • ►  January (14)
Powered by Blogger.

About Me

Unknown
View my complete profile