Porting a Windows Phone 8.0 Silverlight app to Windows Phone 8.1 Universal app - Background Transfers

Another major thing to port is the BackgroundTransfer stuff in the P | Cast app. Although the API is similar there was a lot of code that I needed to port, though a lot of this code could be deleted as well.

Starting a BackgroundTransfer

Let’s start with the easy part. We want to start a BackgroundTransfer. We are no longer bound to save the files to /Shared/Transfers which was required in Windows Phone 8.0, which makes it all much easier. Actually I think we can even download directly to a SD-card if we would like. We just create a StorageFile where we want to store the file to download. We create an instance of a BackgroundDownloader and use that to create a DownloadOperation out of the RequestUri and the StorageFile. Then we construct a CancellationTokenSource which we can use to cancel the download operation. We also construct a Progress feedback delegate. We end by starting the operation and attaching the CancellationToken and the Progress delegate.

Uri requestUri = new Uri("http://someurl.com/largefile", UriKind.RelativeOrAbsolute);

StorageFile downloadTo = await ApplicationData.Current.LocalFolder
    .CreateFileAsync("Targetfile.mp3",CreationCollisionOption.ReplaceExisting);
            
var cts = new CancellationTokenSource(); 
BackgroundDownloader downloader = new BackgroundDownloader { Method = "GET" };
DownloadOperation operation = downloader.CreateDownload(requestUri, downloadTo);

Progress<DownloadOperation> downloadProgress = new Progress<DownloadOperation>(DownloadProgress);
            
await operation.StartAsync().AsTask(cts.Token, downloadProgress);

Getting a bit of feedback from the DownloadOperation

We already attached a Progress handler in the previous section. The implementation depends on what you want to do with it. Just a small example of what I used during testing.

private void DownloadProgress(DownloadOperation operation)
{
    Debug.WriteLine("Download: {0}: {1:P2}",
        operation.Progress.Status, 
        operation.Progress.BytesReceived * 1.0 / operation.Progress.TotalBytesToReceive);
}

 

Of course we don’t only want feedback on newly created DownloadOperations but also on stuff we created in a previous app-run but which didn’t complete yet. We can easily get all the CurrentDownloads via the BackgroundDownloader. We also construct a CancellationTokenSource and a Progress delegate. We use AttachAsync to attach the Progress delegate and the CancellationTokenSource to the existing DownloadOperation.

var currentTransfers = await BackgroundDownloader.GetCurrentDownloadsAsync();

var cts = new CancellationTokenSource();
Progress<DownloadOperation> downloadProgress = new Progress<DownloadOperation>(DownloadProgress);

foreach (var currentTransfer in currentTransfers)
{
    await currentTransfer.AttachAsync().AsTask(cts.Token, downloadProgress);
}

How do I cancel that DownloadOperation?

I was trying to port the code by just using the code intellisense, but I couldn’t find a way to cancel a specific BackgroundTransfer. In the end I found something, but for comparison first the Windows Phone 8.0 method to cancel a backgroundtransfer.

BackgroundTransferService.Remove(track.AssociatedRequest);

 

The explanation of Microsoft: “Because BT is based on the BackgroundTask infrastructure, you cancel a transfer simply by canceling the task”. Sounds nice, but the amount of code is much more than you expect.

public static class DownloadOperationExtensions
{
    public static async Task CancelAsync(this DownloadOperation operation)
    {
        var cts = new CancellationTokenSource();
        await operation.AttachAsync().AsTask(cts.Token);

        cts.Cancel();
        cts.Dispose();
    }
}

 

In Windows Phone 8.0 we explicitly had to remove the completed downloads from the BackgroundTransfer queue, I couldn’t find anything pointing towards this requirement on Universal apps. So I tried doing BackgroundTransfers without explicitly removing them. And my conclusion is, you don’t need to explicitly remove them from the queue. When the transfer completed without the app running it will be in the queue the first time you start the app again. So you can handle it.

Handling very large files and how to read the different policies

One of the things you had to be aware of was even though you want to allow downloading while running on a battery this wasn’t allowed for files over 100MB. I handled this by trying to download it on battery and check if the TransferError.Message was “The transfer file size is bigger than the allowed limit”. The new BackgroundTransfer API handles this automatically.

In the old API you could set policies that were pretty simple, there were combinations of Allow Cellular and Allowing Battery. You can no longer set policies around the battery because those are handled automatically. Now you can set a policy to UnrestrictedOnly, Default and Always. This is something that needs a bit of clarification with scenario’s I found here.

Scenario

Unrestricted Only

Default Always
Wi-Fi Allow Allow Allow
Metered connection, not roaming, under data limit, on track to stay under limit Deny Allow Allow
Metered connection, not roaming, under data limit, on track to exceed limit Deny Deny Allow
Metered connection, roaming, under data limit Deny Deny Allow
Metered connection, over data limit. This state only occurs when the user enables “Restrict background data in the Data Sense UI. Deny Deny Deny

 

Transfer Status

The possible statuses of the Transfer has changed. I tried to map them like below. You can read the details of the original TransferStatus and the new BackgroundTransferStatus if you want to know more.

TransferStatus (8.0) BackgroundTransferStatus (8.1)
Transferring Running
None / Waiting Idle
WaitingForWifi PausedCostedNetwork
WaitingForExternalPower  
WaitingForExternalPowerDueToBatterySaverMode  
WaitingForNonVoiceBlockingNetwork  
Paused PausedByApplication
Completed Completed
Unknown  
  PausedNoNetwork
  Cancelled
  Error
  PausedBySystemPolicy

 

One of the things I noticed is the grouping of the TransferStatus.WaitingForX that I couldn’t map directly but are all captured within the BackgroundTransferStatus.PausedBySystemPolicy.

We do see a status Completed in the enum, but in practice I have never seen this status. Even when the transfer is actually completed, based on the BytesReceived is equal to TotalBytesToReceive. This is for both Windows and Windows Phone, so status is still Running but all bytes are already received.

Calculate Progress

Things have been moved around a bit, but calculating progress is still easy to do. So my previous code on Windows Phone 8.0.

private double CalculateProgress(BackgroundTransferRequest request)
{
    if (request.TotalBytesToReceive == 0)
        return 0.0;
    return request.BytesReceived*1.0/request.TotalBytesToReceive;
}

Is easily rewritten to Windows Phone 8.1.

private double CalculateProgress(DownloadOperation request)
{
    if (request.Progress.TotalBytesToReceive == 0)
        return 0.0;
    return request.Progress.BytesReceived * 1.0 / request.Progress.TotalBytesToReceive;
}

Background Transfer Queue

The old BackgroundTransferService had a hard limit of 25 active and pending download requests per application. This caused any app to manage it’s queue. This limit doesn’t exist in the new Background Transfer API, it has a system limit of 1000 however. Nice, no longer managing the queue myself!

Background Transfer behaviors

There’s an important difference between the behavior of background transfers within Windows and Windows Phone. When the Windows Universal app is terminated the background transfers will be terminated as well. This is different from what we are used to within Windows Phone, where the background transfers continue without the app running.

  • Gravatar Igor Kulman February 26th, 2015 at 20:18
    You failed to mention one really important thing. There is no longer a tag attribute on the downloads where you can store data to associate it with your data. In WP8, you could use the tag to store say Id of your business object and when downloaded, rename or move it accordingly. Now, without the tag,, you have to create your own "index" to know what is being download and this sucks.
  • Gravatar Foot Pain March 21st, 2015 at 05:18
    Fantastic beat ! I wish to apprentice while you amend your web site,
    how can i subscribe for a blog website? The account aided
    me a acceptable deal. I had been tiny bit acquainted of this your broadcast provided bright clear
    idea
  • Gravatar Shin Pain treatment March 22nd, 2015 at 15:33
    Link exchange is nothing else except it is only placing the other person's blog link on your page at appropriate place
    and other person will also do same in support of you.
  • Gravatar mcm 婵€瀹夐€氳博 March 25th, 2015 at 04:57
    安定性を求めるトッププレーヤーへ!モノソック構造採用でフィット性が進化したサイバーゼロ。
    mcm 婵€瀹夐€氳博 http://www.labnet.com.br/js/images/2015/mcm-%e6%bf%80%e5%ae%89%e9%80%9a%e8%b2%a9-3351.asp
  • 【最速最新2014年モデル!!】 asics(アシックス) テニスシューズ(オムニコート・クレーコート用) GEL DEDICATE 3 MT OC(ゲルデディケイト3 MT OC)【ホワイトレッド】
    銈点優銉炽偟銈裤儛銈点儣銉併儊銉с偆銈?搴楄垪 http://www.decoracoesdeminas.com/Imagens/images/banners/%e3%82%b5%e3%83%9e%e3%83%b3%e3%82%b5%e3%82%bf%e3%83%90%e3%82%b5%e3%83%97%e3%83%81%e3%83%81%e3%83%a7%e3%82%a4%e3%82%b9-%e5%ba%97%e8%88%97-8608.asp
  • Gravatar Foot Pronation March 26th, 2015 at 20:32
    Good day very cool web site!! Man .. Excellent ..
    Wonderful .. I'll bookmark your web site and
    take the feeds additionally? I am happy to seek out numerous useful info right here within the put up, we'd like work out more techniques in this regard, thank you for
    sharing. . . . . .
  • Gravatar Human Growth Hormone March 27th, 2015 at 22:49
    Hello everyone, it's my first pay a visit at this web page, and piece
    of writing is genuinely fruitful in favor of me,
    keep up posting such posts.
  • Gravatar Bunion Pain treatment March 31st, 2015 at 03:19
    Fantastic beat ! I wish to apprentice whilst you amend your site,
    how can i subscribe for a blog web site? The account aided me a appropriate deal.

    I were tiny bit familiar of this your broadcast provided vivid transparent concept
  • Gravatar 20150404huangqihang April 4th, 2015 at 04:22
    20150404huangqihang<a href=" http://www.abercrombieandfitch.cc"><strong>abercrombie fitch</strong></a>
    http://www.rayban-sunglasses.com.co
    http://www.abercrombie.net.co
    http://www.hollisterclothing.info
    http://burberry.bidinc.org
    http://www.hermes-birkin.us
    df
    dggqihang
  • Gravatar Ankle Pain treatment April 6th, 2015 at 19:37
    Great post. I am dealing with some of these issues as
    well..
  • Gravatar Heel Pain April 12th, 2015 at 05:00
    Good article. I definitely love this site. Keep it up!
  • Gravatar hallux limitus April 15th, 2015 at 01:28
    Aw, this was an extremely nice post. Spending some time and actual effort to generate a
    really good article… but what can I say… I hesitate a
    lot and never manage to get nearly anything done.
  • Gravatar Dr Ayurveda April 15th, 2015 at 01:42
    Useful info. Fortunate me I found your site by accident, and I'm stunned why this accident didn't happened earlier!
    I bookmarked it.
  • Gravatar Orthotic Arch Support April 18th, 2015 at 03:30
    This post is truly a pleasant one it helps new web users,
    who are wishing for blogging.
  • Gravatar Corn Protectors April 19th, 2015 at 01:18
    This is very fascinating, You are a very professional
    blogger. I have joined your rss feed and stay up for
    in quest of more of your magnificent post.

    Additionally, I've shared your web site in my social networks
  • Gravatar Achilles Tendonitis April 21st, 2015 at 09:40
    Great article. I'm going through a few of these issues as well..
  • Gravatar Ray Bans Aviators Small Frames May 27th, 2015 at 08:09
    Next will come back Oh received good stuff worth buying a top quality inexpensive mostly very good, I liked the color of the lens is very nice to go out in this weather wear most appropriate to thank the seller received a good thing! Is a bit thin.
    [url= http://www.valentino-pelle.com/license.php?Ray_Bans_Aviators_Small_Frames.html]Ray Bans Aviators Small Frames[/url]
  • Gravatar Athletes Foot May 29th, 2015 at 02:10
    If you would like to get much from this
    post then you have to apply these techniques to your won web site.
  • Gravatar Hoa May 29th, 2015 at 08:57
    Excellent blog right here! Also your website a lot
    up very fast! What host are you the use of? Can I am
    getting your associate link for your host? I want my web
    site loaded up as quickly as yours lol
  • Gravatar Gel Socks June 6th, 2015 at 05:32
    Fabulous, what a web site it is! This web site presents valuable information to us,
    keep it up.
  • Gravatar Foot Callous June 12th, 2015 at 05:03
    Hi great website! Does running a blog similar
    to this require a great deal of work? I have no expertise in computer programming but I had been hoping to start my own blog soon. Anyways, if you have any ideas or tips for
    new blog owners please share. I understand this is off subject but I simply wanted to ask.
    Thanks!
  • Gravatar Heel Cups June 14th, 2015 at 08:52
    Hello, i believe that i noticed you visited my site thus i came to go
    back the want?.I am trying to to find issues to improve
    my web site!I suppose its good enough to use a few of your ideas!!
  • Gravatar MableISaglimbeni July 16th, 2015 at 17:46
    Thanks for ones marvelous posting! I actually enjoyed reading it, you are a great author.
    I will be sure to bookmark your blog and will often come back down the road.

    I want to encourage you to definitely continue your great job, have a nice holiday weekend!
  • Gravatar Klinik farmasi July 26th, 2015 at 02:39
    Is verry good for post, thanks..
  • Gravatar Yusuf efendy July 26th, 2015 at 02:48
    Excellent blog, There is no longer a tag attribute on the downloads where you can store data to associate it with your data.
  • Gravatar Chili Palmer leather jacket August 29th, 2015 at 07:56
    reader and used the fantastic tools for creations.
  • Gravatar tablette tactile android September 27th, 2015 at 20:10
    Currently there are many research projects looking into various aspects of autism.
    A life time of more tranquil relationships can result from the attention Mom
    and Dad pay to this process. Are you an organisation passionate about childhood learning, play and development.
  • Gravatar plumbers mate jobs in london uk October 4th, 2015 at 21:30
    A thoughtful insight and great ideas you have on your website.
    You have obviously spent a lot of time on this. Great job!
  • Gravatar www.abc6.com October 5th, 2015 at 08:57
    Thank you for this excellent website. I am trying
    to read even more posts. Many thanks again!
  • The worth will depend on medical clinic being used, how big the place being treated, and the number of treatments essential to
    have spotless and smooth complexion. This certainly gives your face a direct shine,
    generating it appear improved. Fake eyelashes will give
    dramatically longer look to the lashes. In many instances it will require 6
    or 8 treatment procedures spaced at the least about 6 weeks apart to
    achieve a longer period of hairlessness.
  • Gravatar ray ban models 2012 November 11th, 2015 at 12:39
    Bag is very beautiful, very good quality, no smell, is authentic! Bag is very beautiful, good quality, good-looking friends say, praising bag is very beautiful, very good quality, is my favorite section, satisfaction bag is very beautiful, good quality, logistics to the force, satisfaction praise bag is very beautiful good quality, cost-effective or, like! Bag is very beautiful, good quality, this price can buy a bargain bag is very beautiful, good quality, workmanship is very fine, I am satisfied with the bag is very beautiful, good quality, workmanship is very detailed, very Meng Meng Da bags beautiful, good quality and fine workmanship, easy and a large bag is very beautiful, very good quality.
    ray ban models 2012 http://emi.com.vn/JargonHeap.aspx?cjBiMGUwNzJiMzkxYzg3Mjc.html
  • Gravatar nyx soft matte lip cream dark skin November 13th, 2015 at 05:38
    Second purchase, good quality, looks small, but the child's bottles, diapers, my wallet phone keys can be installed, the second time to buy a good Jane Bai grid bag, and good quality, very suitable for work back, my colleagues have been asking where to buy, has been sent a link to her a ~ second time to buy, even more than double 11 30 dollars should also biased. Logistics and how fast, in time for the birthday the day before the sister-in-law received, joy! Jane Bai grid second home to buy in the heart of the water bag, the service was so good, the bag color is very positive Oh, like quickly start Oh.
    nyx soft matte lip cream dark skin http://uniqlonnhat.vn/RogueCrime.aspx?cjBiMDcwMTAzNTU0MDlkNWY.html
  • Gravatar doubledown casino astuce November 13th, 2015 at 18:44
    If some one wants to be updated with latest technologies therefore he must be visit this website and be up to date daily.
  • Gravatar ulthera โปรโมชั่น November 15th, 2015 at 17:46
    Consult by calling the doctor mentioned below for specific medical information related to Ultherapy and Ulthera.

    This year marks the 25th anniversary of National Breast Cancer Awareness Month.
    It is too large and too strong as far as the more delicate parts
    of the face are concerned, like the eye area.

    Dr Simon Ourian specializes in lasers for skin rejuvenation and the experience gained over the
    past fourteen years has stood him well.
  • I worked from room to room; checking in the center of the room and
    also along all walls. The contractors can also see that you take safety seriously and
    expect them to do the same. First, how to choose the frequency - Induction heating
    equipment, according to the different output frequencies can be divided into:
    UHF, HF, VHF, MF and so on. Last Spring, Yulin Yu Zhouqu to do with Liu
    Dabo in the home appliance retain and collect figure out a major.
  • Gravatar game of war cheat November 20th, 2015 at 20:07
    What you typed was very reasonable. But, what about
    this? what if you were to create a killer headline?
    I ain't saying your content isn't good, however what if you added a
    post title that makes people want more? I mean Porting a Windows Phone 8.0 Silverlight app to Windows Phone 8.1 Universal app - Background
    Transfers - Silverlight, WP7, .NET, C#, ASP.NET MVC is a little vanilla.
    You might peek at Yahoo's home page and see how they write article headlines to get people interested.
    You might add a related video or a pic or two to grab people excited about what you've written.
    Just my opinion, it could make your blog a little livelier.
  • Gravatar burberry clock nyc December 2nd, 2015 at 04:17
    If the color is darker then I prefer! I liked it, the color is like, no color, very happy, the store is very nice, is the logistics slow, but the quality is very good bag is like, in general, good, reliable material texture, style and atmosphere, the quality, detail elegant, package body weight also happens. Liked?, Gave a spare drill and glue tools. Very intimate.
    burberry clock nyc http://www.nose.com.my/blog.php?burberry_clock_nyc-2549
  • Gravatar paleo bread coconut flour almond butter December 9th, 2015 at 11:39
    Based on the ingredients used, paleo breads can surely form up to be
    an absolute treat for your taste buds although including no ingredients like grains, sugar, or dairy merchandise.
    Paleo Banana bread is one of many famous kinds of
    paleo breads, and that as well comes in different versions.
  • Gravatar gcse english coursework marking criteria March 14th, 2016 at 05:59
    Hi colleagues, its enormous post on the topic of educationand completely explained, keep it up all the time.
  • Gravatar sac à main longchamp March 14th, 2016 at 12:22
    sac à main longchamp http://top-pensez.fr/Longchamp_IMWKgnLA.html, longchamp paris races, longchamp paris racecourse
  • Gravatar camisetas de futbol baratas March 19th, 2016 at 03:00
    There is definately a lot to learn about this topic. I like all the points you've made.|
    camisetas de futbol baratas http://www.adepia.org/baratas.aspx
  • スーパーコピー時計通販、腕時計スーパーコピー、マフラー最新作N品登場!!高級腕時計ロレックス,ブルガリ,シャネル,エルメスカルティエ,オメガ,ヴィトン,IWC,FRANCK MULLERなど各種
  • Gravatar sd April 3rd, 2016 at 18:18
    This post is worth everyone's attention. When can I find out more?|
  • Gravatar occhiali ray ban a basso costo April 24th, 2016 at 03:06
    It's a pity you don't have a donate button! I'd without a doubt donate to this outstanding blog! I guess for now i'll settle for bookmarking and adding your RSS feed to my Google account. I look forward to fresh updates and will share this site with my Facebook group. Talk soon!
    occhiali ray ban a basso costo http://www.giorgioperlasca.it/?it-11257_occhiali-ray-ban-a-basso-costo.html
  • Gravatar home June 4th, 2016 at 23:25
    Encompass unique as well as freezing berries in your daily diet.
    home http://www.betterscooter.com
  • Gravatar becm August 15th, 2016 at 08:29
    magnificent issues altogether, you just gained a brand new reader.

    What would you rcommend about your put up that you siimply made a few days ago?
    Any certain?
  • Gravatar adidas nmd shoes September 3rd, 2016 at 11:27
    WOw!We are the strongest basketball team, we bring you the best shoes.
    adidas nmd shoes http://www.adidasnmdshoes.us.com
  • Gravatar www.alljerseysstyle.cc September 3rd, 2016 at 22:55
    Wholesale Cheap Iphone Case Online
  • Gravatar evening formal wear October 5th, 2016 at 03:33
    You are my inhalation, I have few blogs and infrequently run out from
    post :).
  • Gravatar Alat Bantu Dewasa October 19th, 2016 at 09:12
    Thank You I Like This Four You
  • Gravatar madden nfl December 13th, 2016 at 08:56
    Wonderful beat ! I wish to apprentice while you amend your website, how could i subscribe for a blog
    website? The account aided me a applicable deal.
    I were tiny bit acquainted of this your broadcast provided vivid
    clear concept
  • Gravatar http://freecanadaclassifieds.ca/ December 13th, 2016 at 11:13
    It's truly very complicated in this full of activity life to listen news on Television, thus I just use the web for that reason, and
    take the newest news.
  • Gravatar Adrienne December 15th, 2016 at 06:23
    We're a gaggle of volunteers and starting a new scheme in our community.
    Your web site offered us with useful information to work on. You have
    done a formidable process and our entire group shall be grateful to you.
  • Gravatar http://sexofcodeboys.com/board01/106140 December 18th, 2016 at 05:34
    I loved as much as you will receive carried out right here.
    The sketch is attractive, your authored subject matter stylish.
    nonetheless, you command get got an shakiness over that you
    wish be delivering the following. unwell unquestionably come more formerly again as exactly the same nearly very often inside case you shield this increase.
  • Gravatar http://bit.ly/2hBUZfm December 19th, 2016 at 17:52
    An interesting discussion is worth comment. I believe that
    you should publish more on this subject matter, it might not be a taboo subject but generally people do not speak about such issues.
    To the next! All the best!!
  • Gravatar dodge journey computer December 29th, 2016 at 08:09
    Admiring the hard work you put into your website and
    detailed information you provide. It's great to come across
    a blog every once in a while that isn't the same outdated rehashed information. Excellent read!
    I've saved your site and I'm adding your RSS feeds to my
    Google account.
  • Gravatar pyrotechnic business January 13th, 2017 at 06:18
    Really no matter if someone doesn't be aware of afterward its up to other viewers that they
    will assist, so here it happens.
  • Gravatar financial advisors January 17th, 2017 at 02:15
    Do you mind if I quote a couple of your articles as long as I provide credit and sources back to your webpage?
    My blog site is in the very same niche as yours and my users would definitely benefit from a lot
    of the information you provide here. Please let me know if this
    ok with you. Cheers!
  • Gravatar http://rayymoneyyyvisions.com January 19th, 2017 at 00:38
    That is really fascinating, You're a very professional
    blogger. I've joined your feed and look ahead to searching for more of your wonderful
    post. Additionally, I've shared your website in my
    social networks
  • Gravatar Candida January 20th, 2017 at 10:41
    Hurrah! After all I got a web site from where I can actually obtain valuable
    information regarding my study and knowledge.
  • Gravatar Candida January 20th, 2017 at 10:42
    Hurrah! After all I got a web site from where I can actually obtain valuable
    information regarding my study and knowledge.
  • Gravatar madden mobile coin generator apk January 20th, 2017 at 11:07
    I read this piece of writing fully regarding the difference of most up-to-date and
    earlier technologies, it's amazing article.
  • Gravatar irev4.com January 21st, 2017 at 03:34
    If you are going for most excellent contents like me, simply pay a visit this website
    daily because it presents quality contents,
    thanks
  • Gravatar irev4.com January 21st, 2017 at 03:35
    If you are going for most excellent contents like me, simply pay a visit this website
    daily because it presents quality contents,
    thanks
  • Gravatar Ethan January 22nd, 2017 at 03:56
    I'm not sure exactly why but this web site is loading incredibly slow for me.
    Is anyone else having this problem or is it a issue on my end?
    I'll check back later and see if the problem still exists.
  • Gravatar weight loss February 16th, 2017 at 13:31
    Hmm is anyone else experiencing problems with the images on this blog
    loading? I'm trying to determine if its a problem on my end
    or if it's the blog. Any suggestions would be greatly
    appreciated.
  • Gravatar Greta February 18th, 2017 at 23:13
    What i do not realize is actually how you're not actually a lot
    more neatly-liked than you may be right now. You're so intelligent.
    You realize thus significantly when it comes to this matter,
    produced me personally believe it from numerous varied angles.
    Its like men and women don't seem to be interested unless it is something to do with Woman gaga!
    Your personal stuffs great. At all times take care of it up!
  • Gravatar online marketing February 22nd, 2017 at 23:48
    Very soon this web site will be famous among all blogging viewers, due to it's good articles or
    reviews
  • Gravatar profitable business March 2nd, 2017 at 14:57
    Hello mates, how is all, and what you wish for to
    say regarding this post, in my view its actually awesome
    in support of me.
  • Gravatar Rocky March 5th, 2017 at 00:55
    Hi, yes this post is really good and I have learned lot of things from it concerning blogging.
    thanks.
  • Gravatar minkys lash extensions training March 6th, 2017 at 12:16
    Hey There. I found your weblog the use of msn. That is a really smartly
    written article. I will make sure to bookmark it and return to learn more
    of your helpful information. Thank you for the post. I will definitely
    return.
  • Gravatar Jonah March 7th, 2017 at 01:40
    This post gives clear idea in favor of the new users of blogging,
    that genuinely how to do running a blog.
  • Gravatar Ingrid March 7th, 2017 at 04:02
    Hello, yes this post is actually good and I have learned lot of things from it about blogging.

    thanks.
  • Gravatar buy cs go skins steam March 15th, 2017 at 23:25
    Have you ever considered about including a little bit more than just your
    articles? I mean, what you say is valuable and everything.
    But think of if you added some great photos or
    videos to give your posts more, "pop"! Your content is excellent but
    with images and videos, this website could definitely be one of the best in its niche.
    Superb blog!
Gravatar