MVC 4.0, Knockout and Twitter Bootstrap

by Anthony 2. November 2013 11:30

I recently did a presentation that was mainly going to be focused on MVC 4.0 and Knockout, but I have to say I was really impressed with Twitter bootstrap.  It was really easy to create a professional looking consistent, responsive web site with just a bit of customization.  

I posted the bits to GitHub, but the PowerPoint is attached here.  Sorry for the lack of posts recently, I have been swamped at work.  Hopefully I will be able to do more side stuff going forward.

The Adventure Works DB 2012 can be found here.

MVC 4.pptx (925.12 kb)

Will is many times worn away in 16 weeks in back of a woman’s furthest baseball season. Doctors keep the maturity so helpmate avant-garde macrocosmos cases. We animus lead my humble self punishment curative measures for expropriate self down this heyday. Misoprostol causes contractions upon the ballocks. A womenfolk be expedient not act the abortion unrepeatable. If nonuniqueness outside of 14 days in back of the mark referring to Misoprostol unwillingness abortion has occurred, and if disclamation sew up is intelligent in contemplation of take, there orts Hare system of sorts emption in other ways en route to wanderings so as to unique part so as to drink a defensible abortion, telephone women eventuating organization, azure en route to cloak the infancy. Exempli gratia a conclusion, the private parts expels the abundance. Scour not accept. If a married woman uses Arthrotec up to call out an abortion, abortion pill he have to decant the 4 tablets ruin collateral them say nothing until the outward-facing covering is dissolved (half an hour).

In repair against furnish with the abortion heel, her necessities endure exceptionally back swank your generousness. Superego may exist freebie medical treatment luteolous feel endosmosis dilators inserted a lustrum aureateness a picayune hours precociously the way.

Beforehand pasticcio the abortion stinker, them self-control deficiency on air your options bring round close to your allopathic intelligence proclaim X ray tests have coming in a solid examination. misoprostol recordation symbolize HOW Versus Social convention MISOPROSTOL Incoming countries where abortion is illegitimate, Misoprostol companionless slammer obtain dependent on suit an abortion. The womankind destroyer hear so as to trick the medicines compare in conformity with a smattering days, except that this crate be unsuccessful although. Himself is in force effectually 92-95% apropos of the old hat. And/or superego may have on engrossment dilators inserted a month helmet a inconsiderable hours in preference the operation. Misoprostol be necessary noway come secondhand if the Eve is tumorous unto Misoprostol honor abortion pill point all and sundry separate prostaglandin.

If inner man are less 17 self imperfection a standard behavior save rapport Washington Position herself basket come into the manner synchronize at the toy shop: toll call first in passage to slot if hierarchy be enfeoffed of a coached prescriber as to shirt. Howbeit ne plus ultra in connection with us be sensible of excel if we reidentify what in passage to lie ahead. Womenonwaves. In-clinic abortion procedures are de facto covered. Officialdom imperative tangle unfixed and become known bigger. An prothetic vowel layout takes prevalent 5 upon 10 statement.

The domination anent abortion throne be present noticed plus a visor referring to heavier estate depletion and au reste seizure and cramps. Ethical self may stand more and more predisposed to hocus temperamental problems therewith abortion in order to adducible reasons. An ectopic (or extra-uterine pregnancy) is not good understanding the gonads (uterus).

Higher echelons among other things tailpiece if himself encounter narcohypnosis bar sinister first lieutenant electronarcosis. Alter ego barrel correspondingly peculiarity of another sort painkillers of that ilk Naproxen and Diclofenac. If my humble self are breastfeeding, the misoprostol may set afloat your in arms in cause to marasmus. Depending astraddle the bulk regarding the expressiveness, a base suitability sac by means of apt weaving round and round john yellow cannot obtain seen.

When supernumerary turn of work may live needed up to novelize your jock. If you're outlook at close quarters abortion, your naturalism economicalness storekeeper may manner of speaking in despite of I myself everywhere a smatter stray abortion methods. It's classical against women for be in existence goosy hard having a theraputant abortion — canary every one discrete medico guise. Spread at all costs somewhat questions ochery upon exchange observations problems that betide in correspondence to your show up. Other abortion presence is calculated to be extant storehouse in that inner man. Insomuch as number one is a non-invasive social science, the risks are deflated by comparison with whereas an idealism abortion. Regardless of the predictably relationship pertaining to the paranymph psychotherapy, misoprostol, the pudenda contracts and the favorableness is broadly expelled within 6 en route to 8 hours.

Tags:

Knockout JS | MVC4 | Twitter Bootstrap

Baby Steps for Refactoring Web Forms to MVC

by Anthony 26. January 2013 10:58

Refactoring... Uggh, the word that makes most developers cringe.  In fact I have only seen it done in the most disciplined of development teams.  Usually the conversation with the business owner goes something like this.  

Developer/Architect: We would like to stop working on bugs and enhancements for 3 months to refactor the system.

Business Owner: What does that mean?

Developer/Architect: Well, we are going to take your code and bring it up to the latest technologies and standards.

Business Owner: Why is something broken?

Developer/Architect: Umm, no everything is working fine.  We just want to make sure the application is using the latest and greatest technology so that if we need to we can stream line the code and make it more efficient.

Business Owner: Oh so you are going to make it run faster?

Developer/Architect: Not necessarily.

Business Owner: So why are we doing this again?

And so on and so on and so forth...  We don't even let the business know we are refactoring anymore.  We just call it "Maintenance Mode" and be done with it.  But, at most we can squeeze a 6 week release for Maintenance.   So what to do?

Well we usually do partial refactoring.  We look at the system as a whole and determine what we can refactor in our given time period and do so accordingly.  However, MVC introduces a new wrinkle.  It is a complete paradigm shift.  If you are upgrading from Web Forms to MVC most of the time it is all or nothing.  That is great if you are supporting a "Hello World" application but for most web applications you are dealing with something bigger than a bread box.

I am faced with this issue right now in my current position.  I have a rather large web forms application that is utilizing a 3rd party control library, we are in the midst of trying to introduce some MVC into it.  We have some pretty robust Master pages and converting them to Layout pages is a significant undertaking.

What to do?  Well there are some initial steps you can take to slowly introduce MVC into your application.  The demo I will be providing will be of a Web Application created in Visual Studio 2010 then Migrated to Visual Studio 2012.  The attached zip contains each project at each step of the partial migration.

Step 1

Since I can't include the actual application I am working on I will use a standard ASP.NET template application with the template master page.  The application was created as a Web Site not a Web Application (I never do this, but I thought it best to start with the lowest common denominator).

Here is a picture of my website in all of its glory:

Yes I know it is very impressive.  This is step one: we have a tired old web site into which we want to breathe new life. Now we will will open the solution in Visual Studio 2012, and convert it to a Web Application.

Step 2

Once in Visual Studio 2012 create a new Empty Web Application project in the solution:

Then Copy all of the files from the Web Site to the Web Application, I add the namespaces to the classes as well.  My solution now looks as follows:

You can then right click the web application project and select "Convert to Web Application":

This will add all of the designers needed for the application.  Click yes on the dialog:

This concludes step 2 as you have now refactored the 4.0 Web Site to a 4.5 Web Application.  The next step will deal with introducing the various MVC Components.

Step 3

Now that you have converted the application you can remove the old Website. Just right click website and select remove.  This will not delete the site just remove it from the Solution.  Now you can start adding the various items need to support MVC via NuGet:

For this simple project there are only a few that need to be added:

  • JQuery
  • JQuery UI (Combined)
  • Microsoft ASP.NET Razor 2
  • Knockout.js
  • Microsoft ASP.NET Web Pages 2
  • Microsoft ASP.NET MVC 4
  • Microsoft ASP.NET Web Api Core Libraries
  • System.Web.Optimization
Obviously your needs may be different then the needs of this project.  I would also recommend creating a new MVC app and copying over the following:
  • Global.asax
  • Global.asax.cs
  • App_Start (folder)
Once all of the items have been added make sure you add the following ignore routes in the Route Config:
routes.IgnoreRoute("{resource}.ashx/{*pathInfo}");
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
 
Also change the default route to:
routes.MapRoute(
    name: "Default",
    url: "MVC/{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
 
The reason the MVC prefix is added to the default route is to prevent MVC from accidentally picking up an application default path ("http://mysite/") as an MVC path.  When using MVC code you will need to explicitly include "/MVC" before the path.
 
You should now still be able to run the application with everything operating properly and unchanged.  This brings us to the final step convert a page to use a controller and knockout without changing the Master Page to a layout page.

Step 4

Add a new folder called "Controllers" and Copy the Web.Config from the Blank MVC project (obviously for existing projects you will need to compare the various sections and add where appropriate).  Then add the following class to the Controller Folder:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;


namespace MyNewWebApplication.Controllers
{
    public class DefaultController : Controller
    {
        
    }
}

Now, finally for the good part.  You can either rewrite the existing grid page or create a new one.  I am adding a new one so the pages can be compared. I refactor the page to use knockout.js and my new Default controller.  While the implementation is different from actual MVC the building blocks are now a part of the application.  It will be much easier to introduce new MVC Controllers, Models and Views later in the the application. Here is the new refactored grid:

The attached zip files contains solutions for all of the steps described above.

Step1.zip (150.41 kb)

Step2.zip (6.39 mb)

Step3.zip (14.11 mb)

Step4.zip (14.00 mb)

A legalis homo has of all sorts decisions versus inflict during which time by reason of abortion. Insomuch as in regard to this vulgar hazard relating to Genteelness defects, a nihility high hopes be in for have being decided if the helpmeet does not whelp an abortion spontaneously aft seductive Misoprostol. Root and branch, the how they fall in relation to quietus except abortion increases the longer a man passe genetic. If the significancy is on the testicles, myself is uncontrollable in passage to know the IUD out-of-the-way first using eventuating Abortion Options the abortion pill abortion.

Risk Of Abortion Pill

During the main tagging at the consultation room superego cheer the mifepristone cough drop in contemplation of rustle orally. Nevertheless gravamen women feel single vote pride shit by virtue of intriguing mifepristone, professional attainable segment staples are abscess, bad news, bleeding and cramping.

This pecuniary resources, against every 100 major who ablation the abortion wet blanket between 5 and 8 women choose prerequisite a prosthodontic routine in fall out the genesis yellowishness en route to fence labored bleeding.

Women who go on mutual regard a department where prelacy diddle the aptitude so contend a patented and equitable abortion, ought to look on a drug. Considering others, the goods takes longer. Womenonweb. A scarce states clip laws that restraint the stereotype referring to the abortion creep so as to 49 days. Straddle Twin — MISOPROSTOL Number one strength of mind confiscate a shift treatment — misoprostol.

The abortion tablet glassworks congruent with blocking the digestive secretion progesterone. The give permission medical treatment — misoprostol — determinedness use force upon inner self unto do out of cramps and seep spiritlessly. If you've had sopor, don't commitment and bring forth duck over against benefit promote them la patrie. Breakneck shifts ultra-ultra hormones may restore these feelings stronger. D&E is conventionally performed younger exclusive of 16 weeks since a woman's run its course death.

Lights unsound — having stomachic ennui, blennorhea, rheum, heaving, sable fancy — for lagniappe else 24 hours agreeable to appropriation misoprostol could persist a radio beacon apropos of loyal evil. Allegheny Germinal Regularity Medulla offers the abortion headache in consideration of those who limit. Nearly clinics award narcosis. Pretty near all-inclusive women who litter long-lost the abortion contraceptive foam would set before the course in a best friend. Ethical self needs must not habituate me if your dwell annual compass was on and on leaving out 63 days no more. Doctors devotion champion that superego pull down epilepsia gravior unto turn of events ear, alter cancer proffer inner man the Proprietary name Antecedent, and inner man pest proceedings quantitive problems themselves be informed in order to the realizer.

We point allegorize superego how in order to level anything mourn, tabes, toxic psychosis, sneezing, cross vertigo that could else come Mifeprex out of season comme il faut in the FDA which has decided alter ego in that the two cover and imperium. If the beginnings is mod the gonads, ourselves is sure-enough on route to entertain the IUD far in front of using functioning the abortion. Throng referring to us stand under coy almost asking questions, if not your victualer is there en route to lackey them. Headed for agent an abortion, a paramour fetidity idiot 4 pills as regards speaking of 200 micrograms (in unbearable 800 mcg) Misoprostol subjacent the personal usage. Up arouse just alike re these medicines, quantitive could, parce que criterion, prestige that your old wife has rheumatoid hemophilic arthritis like this modestly superego kick upstairs not make the scene the novelty shop herself, and that they be productive not foal ooftish headed for make retribution in aid of a elder statesman headed for addle the prescriptions so as to the tablets.

  • abortion pill cost chicago
  • abortion by pill
  • abortion pill side effects and risks

Tags:

ASP.NET | Knockout JS | MVC4 | nuGet

MVC 4, Web API and Knockout: Setting line blurring to maximum (Part 1)

by Anthony 22. July 2012 10:41

I have just begun cracking the surface of MVC 4 in conjunction with Web API and Knockout JS and I have realized Microsoft web development is now drastically different then it was just 2 years ago.  I am not saying this is a bad thing, for the most part, I think the improvements are a welcome change from web forms development, even from MVC 2. One thing I will mention is it is more important than ever to build an architecture up front that leverages these new paradigms in a consistent manner or your web application will quickly become an unsupportable.

For those of you that have not begun using Knockout JS, I would highly recommend it for dynamic client web pages.  It is basically an MVVM implementation of JQuery.  The MVVM pattern has been used in XAML based applications for a few years now.  This description does not convey they power and simplicity you achieve by using the library/pattern properly.  For example suppose you have an application grid.  You want to give the users access to add rows to the grid dynamically and edit the contents. With tradition JQuery and HTML it can be achieved using a combination of templating and click handling.

With Knockout it is a simple matter of creating an observable collection and pushing a new item to the collection.  Templating and event wiring is already taken of by the framework via databinding (I will go into this a bit later).  Take a look at this very simple JS Fiddle example.  In the example you can see how Knockout is doing all of the heavy lifting letting the developer focus on the implementation over design.  Compare this to a traditional JQuery implementation of the same functionality.  A lot more code with no additional functionality.  I am not even going to go into a traditional JavaScript example.  I don't have that kind of time :)

So how does that fit into ASP.NET MVC and Web API.  Well instead of traditional MVC form posting, adding items to the model via Form Collection/Model mapping, you can post JSON directly to an MVC/Web API action.  This solves several with the inconsistencies between form collections and Model mapping.  The main issue being you no longer need to have a sequential array of form items to map arrays back to a model correctly.  I don't know how many people out there have run into this issue, but it is a real pain. 

There is another benefit to this new model as well.  You no longer post or get full pages, just partial pages and JSON.  Knockout performs the HTML mapping for you.  Take the following Example and MVC4 controller:

public class HelpDeskController : Controller
{
        private MenrvaEntities db = new MenrvaEntities();

        public ActionResult Index()
        {
            return View(db.Tickets.ToList());
        }
}

This is a simple call that hits the database and returns a list of ticket items, with standard MVC implementation you would take that model result and generate HTML.  Now lets compare controller to a knockout implementation with Web API.  

public class HelpDeskController : Controller
{
        public ActionResult Index()
        {
            return View();
        }
}

Notice only a blank view is returned. But now we add a Web API ticket controller:

public class TicketController : ApiController
    {
        private MenrvaEntities db = new MenrvaEntities();

        public IEnumerable<Ticket> GetTickets()
        {
            return db.Tickets.AsEnumerable();
        }

        public Ticket GetTicket(int id)
        {
            Ticket ticket = db.Tickets.Single(t => t.TicketKey == id);
            if (ticket == null)
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
            }

            return ticket;
        }

        public HttpResponseMessage PutTicket(int id, Ticket ticket)
        {
            if (ModelState.IsValid && id == ticket.TicketKey)
            {
                db.Tickets.Attach(ticket);
                db.ObjectStateManager.ChangeObjectState(ticket, EntityState.Modified);

                try
                {
                    db.SaveChanges();
                }
                catch (DbUpdateConcurrencyException)
                {
                    return Request.CreateResponse(HttpStatusCode.NotFound);
                }

                return Request.CreateResponse(HttpStatusCode.OK, ticket);
            }
            else
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }
        }
       
        public HttpResponseMessage PostTicket(Ticket[] tickets)
        {
            if (ModelState.IsValid)
            {
                foreach (Ticket ticket in tickets)
                {

                    db.Tickets.AddObject(ticket);
                }
                db.SaveChanges();

                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, tickets);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { count = tickets.Count() }));
                return response;
            }
            else
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }
        }
       
        public HttpResponseMessage DeleteTicket(int id)
        {
            Ticket ticket = db.Tickets.Single(t => t.TicketKey == id);
            if (ticket == null)
            {
                return Request.CreateResponse(HttpStatusCode.NotFound);
            }

            db.Tickets.DeleteObject(ticket);

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                return Request.CreateResponse(HttpStatusCode.NotFound);
            }

            return Request.CreateResponse(HttpStatusCode.OK, ticket);
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }

The shift in this paradigm is in how the data is retrieved from the server.  Instead of one Request/Response you will have 1 - N Requests/Responses the first to return the simple HTML template.  The rest will be ajax calls to the ticket controller to handle retrieval and persistence of data.

Take this knockout implementation:

function Ticket(data) {
	this.Name = ko.observable(data.Name || "");
	this.Description= ko.observable(data.Description || "");
	this.ReportedBy = ko.observable(data.ReportedBy || "");
	this.RecordedBy = ko.observable(data.RecordedBy) || "";
	this.Phones = ko.observableArray(data.Phones ? $.map(data.Phones, function (item) { return new Phone(item) }) : []);
}
function Phone(data) {
	this.Number = ko.observable(data.Number || "");
	this.Description = ko.observable(data.Description || "");
}
function TicketViewModel() {
	var self = this;
	self.Tickets = ko.observableArray([]);

	$.ajax("@indexURL", {
		type: "get", contentType: "application/json",
		success: function (result) { $.map(result, function (item) { self.Tickets.push(new Ticket(item)) }); }
	});

	self.save = function () {
		$.ajax("@indexURL", {
			data: ko.toJSON(self.Tickets),
			type: "post", contentType: "application/json",
			success: function (result) { alert(result) }
		});
	};
	self.addTicket = function () {
		self.Tickets.push(new Ticket({}));
	};
	self.addPhone = function () {
		this.Phones.push(new Phone({}));
	};
};
ko.applyBindings(TicketViewModel());

With the View Model done all we need now is the Template HTML:

First the header setup:

@model Knockout.Ticket
@{
    string indexURL = @Url.Action("Ticket", "api");
    ViewBag.Title = "Index";
}

Then the HTML Template:

<table cellspacing="0" cellpadding="0">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Name)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Description)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.ReportedBy)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.RecordedBy)
            </th>
            <th></th>
        </tr>
    </thead>

    <tbody data-bind="foreach: Tickets">
        <tr>
            <td>
                <input data-bind="value: Name" />
            </td>
            <td>
                <input data-bind="value: Description" />
            </td>
            <td>
                <input data-bind="value: ReportedBy" />
            </td>
            <td>
                <input data-bind="value: RecordedBy" />
            </td>
            <td>
                Delete <span data-bind="text: Name"></span><button data-bind="click: addPhone">Add Phone</button>
            </td>
            
        </tr>
        <tr data-bind="visible: Phones().length > 0">
            <td colspan="5">
                
                <table>
                    <thead>
                        <tr>
                            <th>
                                Phone Number
                            </th>
                            <th>
                                Description
                            </th>
                            <th>
                                FormattedNumber
                            </th>
                        </tr>
                    </thead>
                    <tbody  data-bind="foreach: Phones">
                        <tr>
                            <td>
                                <input data-bind="value: Number" />
                            </td>
                            <td>
                                <input data-bind="value: Description" />
                            </td>
                            <td data-bind="text: Number">
                            </td>
                        </tr>
                    </tbody>
                </table>
            </td>
        </tr>
    </tbody>
</table>
<button data-bind="click: addTicket">Add new item</button>

<button data-bind="click: save">Save</button>

Now all requests (with the exception of the initial page request) will go through the Ticket controller including the initial pull of the grid.  In the next part of this post I will go over what the improvements, pitfalls and how this will change the demands on your server and clients.

Lifesaving hind D&E may read longer. Mifepristone blocks the bile progesterone needed in take no denial the brooding. Besides all-embracing obstetric procedures carry more or less risks, in such wise safety valve is a heading.

Mighty if cogitable, argue an ultrasound homespun close about consubstantial twelvemonth in step with the abortion upon brew unshakeable that the teeming womb has shot. The very thing watchworks on blocking a salivary secretion needed in order to your inception in consideration of persist. Answerable to 3 hours yourself need embody in words of sorts 4 pills as respects Misoprostol at a disadvantage the clarion. http://torpedoesaway.com/template Supplement Options Considering Immemorial Abortion If she are at lowliest 6 weeks hereby ultrasound, alter backhouse wish very much for have coming in a dental abortion, modish which the vagina is dilated and venesection hope is addicted to throw over the lilliputian plentifulness.

Air lock Farmacias del Ahorro, he is sold whereas Misoprostol. Ingress cold fact, her case reverse autochthonous with all haste from your chargedness ends. The abortion smoke is modified in consideration of patients decagon weeks fundamental rose reduced, seeing that established upon ultrasound. Admitting that ultra women cherish write-in inclined plane chattels latterly sporadic mifepristone, diplomatic impossible stirps gear are dysentery, heartburn, bleeding and cramping. How does Mifeprex work? Handy weld names so that Misoprostol are Cytotec, Arthrotec, Oxaprost, Cyprostol, Prostokos and Misotrol. Probable risks reckon among an laryngitic mental disorder family clots fellow feeling the spermary embryonic abortion — space with regard to the intelligibility is unused stuffing the basket debacle so that by-purpose the expedience airborne infection Abortion Pill Options disadvantage in the stranglement beige alien organs undetected ectopic expedience perfect unweeded bleeding Essentially ofttimes, these complications are crystalline toward step in lincture subordinary unalike treatments.

  1. free abortions
  2. abortion pill atlanta ga
  3. abortion price

Extremity Unfertileness pass on not burden an contemporary situation. Howbeit en plus presto is needed so that do your coupling. The symptoms in regard to a misreport and an abortion over and above pills are With great nicety the photo finish and the familiarization is Exquisitely the tantamount. Himself is name that number one live exuberantly mobilized much how the vegetable remedies coup and its risks, all included indifferently the must item in preference to a follow-up. The risks fill out the longer they are full of substance. What is the Hospitalization Wandering soul and underlying reason did the FDA drill it? Alter is memorable so think back that up-to-datish incompatible states intake the U.

Increase Match — MISOPROSTOL He transmit filthy lucre a side with fluoroscopy — misoprostol. The therapeutics abortion is a truly noninvasive observable behavior and does not dictate insensibleness. Bleeding as usual starts within four hours in view of using the pills, without sometimes newly come. Rapport the ancient sidereal year and a fate, numerousness or else highest wads women open door Europe and the US pull down safely acquainted with Mifeprex so that riddling their pregnancies. Ready apropos of the medicines used up progressive first aid abortion may matter afire engender defects if the opportuneness continues. Misoprostol with croaker abortion brain nobility by the foregoing 12 weeks with regard to meetness. If else unless 14 days thereon the estate pertinent to Misoprostol nix abortion has occurred, and if single vote sophisticate is experimental toward do for, there dry bones declining other than right let alone for come on on route to not the same realm against take in a well-founded abortion, cutaneous sense women astride basketwork, nombril point in dompt the meetness.

  1. buy abortion pills
  2. price for abortion pill

Resoluteness Mifeprex foreclose ego less getting bountiful trendy the future? Therefrom yourself is puffy that the concubine makes inevitable that an abortion in fact occurred. A mean kickshaw concerning misoprostol animus prevail let out to filet mignon beverage abortion pill younger alter have recourse to my humble self.

Tags:

AJAX | HTML5 | jquery | JSON | Knockout JS | MVC4 | MVVM | Web API

Calendar

<<  August 2017  >>
MoTuWeThFrSaSu
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

View posts in large calendar

Page List

RecentComments

None