This is the first article in a series that focuses on converting my Windows application to a cloud-based Azure service.
As an independent publisher and author, I grew frustrated with the lack of tools available to easily output Microsoft Word documents to eBook formats. Sure, there are some open source or cheap solutions out there in the marketplace, but here is the deal: They lack the professional polish and high-fidelity output authors need to create an exceptional experience for their readers. That is why I created an app called the Optical Authoring eBook Toolkit. My app allows authors to create standards-compliant ePub, Kindle, and XHTML documents from Microsoft Word. It offers many features that independent authors and publishers just cannot get with the free and open-source products out on the market today.
I wrote the eBook Toolkit code using Microsoft's C# programming language. The add-in is what Microsoft calls a Visual Studio Tools for Office (or VSTO) solution. A VSTO solution only runs within Microsoft Word for Windows, so if I want my app to be available on Mac, iOS, Android, and Windows, I need to migrate all my code to a new(er) technology Microsoft calls a Web add-in.
Of course, I want my product to run anywhere, which means I am not going to just lock myself into creating an Office Web add-in. My app should be able to run in any browser and, should I so desire, as a stand-alone app. Right now, I am focusing my efforts on moving all my business logic and user interface elements to the web. This type of app is called Software as a Service (or SaaS).
Designing the solution
For the foreseeable future, my app will focus on converting Microsoft Word files to high-fidelity ePub and Kindle publications. To do this, I will have to take all the business logic currently locked up in my C# app and move it to a web service solution. I plan to retain my use of C# for the app, so it looks like Azure is my best place to host my app. I will use Visual Studio for the creation of all the services I require.
Ideally, my app is a website with a set of APIs that perform various conversion steps. I am still investigating the exact approach to using this app, but here is what I like to call the marketecture diagram that lays out the basic concepts for how my apps will run:
About this ongoing series
At this time, I have no idea how long this series will run, but I will be writing what I learn on a regular basis. You should probably expect some articles to be highly technical, while others focus on process, product design, and infrastructure. I am treating these articles as journal entries, so you will learn what I learn along the way.
How this series will help you
Hopefully, you will find these articles useful to your day job or for those late nights in the garage where you are creating the next great app.
If you are writing an app for the cloud or are considering migrating to the cloud, then I hope my experience will help you in some way. If you go to Microsoft's developer-focused MSDN website, you will find a wealth of information that shows you the ins-and-outs of building a web application. Unfortunately, how you build that app and all the technology you need to learn are not clear. That is no fault of Microsoft's because your app could do anything. An app could be simple, like converting selected text to another language using Google Translate. Your app could also be incredibly complex, like integrating your SAP financial system with your Salesforce database.
In theory, my app sounds pretty basic: Take a file and convert it to an eBook format. In reality, eBook files are quite complex, as is the Microsoft Word format itself. So far, I have had to learn C#, XHTML, XML, W3C ePub standards, JSON (for my licensing server), Linq, Office OpenXML, and various other languages, frameworks, and SDKs. Now, I will need to learn how to create cloud-based web services and APIs.
Enough with the background, on with the show!
This represents the first article that gives you some background on my plans. Future articles will be more of a journal style, and I hope you learn something along the way. Here are some of the topics I plan on covering in upcoming articles:
- Solution architecture: How I plan on creating the app and the technology I plan to use.
- Creating Office web add-ins: While I want my app to run on any device, it would be foolish of me not to use the Office Web add-in technology, because that opens my product up for use on the Microsoft Store, where I will have a ready audience.
- Product design: My product will require certain features for the user, so I will discuss how I plan on designing the app for use on various platforms.
If there is anything you would like to learn along the way, please drop a note in the comments section, and I promise to do my best to share what I learn.
I have a strong IT, software development, and product management background, but I would not consider myself a developer first. That means I might post things that some may not consider best practices. I value your feedback and promise to listen and learn, but please do not be too hard on me 🙂