Showing posts with label Book Review. Show all posts
Showing posts with label Book Review. Show all posts

Sunday, 26 June 2016

Book Review: Microsoft Azure Machine Learning by @sumitmund

Microsoft Azure Machine Learning by Sumit Mund is a good beginner level book that made Azure ML a little less daunting for me. I'll keep going back to it as I continue to learn & experiment more with Azure ML, the amazing predictive analysis tool that makes it easy for developers to leverage complex Machine Learning algorithms all within the web browser.

Having quickly read through the book to familiarize myself with Machine Learning jargon & tried some of the samples, I've realized it'll take me more reading and practice to achieve proficiency. This 200+ paged book whets your learning appetite by covering a breadth of topics with just enough information to get you started but not too much to make it too intimidating for newbies.

It helps that the author makes practical tips & recommendations rather than just pontificating. Sample -
Outliers are data points that are distinctly separate from the rest of the data... In many cases, it is a good idea to clip or remove the outliers.

As with anything related to the Cloud, most info has a limited shelf-life - a serious threat to books & documentation. As Azure ML Studio continues to evolve, some things have changed since the book was written. Therefore you'll find that some Modules described in the book have new names and it is an exercise for the reader to identify the differences.

A little more effort could have been spent in presenting the content better. While the author provides background context for most keywords before introducing them, there were a few instances where the author drops keywords without adequate explanation like in the case of "ports".

Despite the minor blemishes, this book is engaging and well-structured. It helped me appreciate the understated power of Azure ML.

Friday, 10 June 2016

Book Review: JavaScript and JSON Essentials

JavaScript and JSON Essentials by Sai Srinivas Sriparasa is a useful beginner-level book for developers looking for an introduction to JSON. In about 100 pages, it covers the basic topics related to JSON with plain-English explanations. I liked Chapter 5, Cross-domain Asynchronous Requests which covers JSONP or JSON with Padding among all the chapters.

There are more Web APIs in the comprehensive directory that the website ProgrammableWeb maintains which are JSON based now than other formats which indicates the importance of JSON.

I wish there were more code samples covering public JSON-based Web APIs & their usage

Excerpts and samples of the explanations I liked:

JSON is text-based, lightweight, and a human-readable format for data exchange between clients and servers. JSON is derived from JavaScript and bears a close resemblance to JavaScript objects, but it is not dependent on JavaScript. JSON is language-independent, and support for the JSON data format is available in all the popular languages, some of which are C#, PHP, Java, C++, Python, and Ruby.

JSON can be used in web applications for data transfer. Prior to JSON, XML was considered to be the chosen data interchange format.

JavaScript engine in the browser handles JSON parsing

A MIME (Multipurpose Internet Mail Extensions) type is an Internet media type, which is a two-part identifier for content that is being transferred over the Internet. The MIME types are passed through the HTTP headers of an HTTP Request and an HTTP Response. The MIME type is the communication of content type between the server and the browser. In general, a MIME type will have two or more parts that give the browser information about the type of data that is being sent either in the HTTP Request or in the HTTP Response. The MIME type for JSON data is application/json. If the MIME type headers are not sent across the browser, it treats the incoming JSON as plain text.

JSON keys and values have to be enclosed in double quotes, if either are enclosed in single quotes, we will receive an error.

JSON supports six datatypes: strings, numbers, Booleans, arrays, objects, and null.

Arrays and null values are objects in JavaScript.

 The "X" in AJAX was originally considered to be XML, but today it can be any data interchange format, such as XML, JSON, text file, or even HTML

A callback is a set of scripts that will be waiting for a response and will be fired on receiving that
response.

The jQuery done callback function is fired when the server sends a response back to our asynchronous request.  done is the same as XMLHttpRequest object's readyState=4 and request.status=200. XMLHttpRequest object is responsible for making an asynchronous request.

The same domain policy is a security measure followed by web browsers in order to prevent one domain from accessing information on another domain. Web applications use cookies to store
basic information about a user's session so as to provide an intuitive user experience when the user requests the same web page another time or requests a different web page on the same domain. To prevent an external website from stealing this information, web browsers follow the same origin policy.

In order to get around the same origin policy, we will be using JSONP, which is JSON with Padding. One exception under the same origin policy is the <script> tag so scripts can be passed across domains. JSONP uses this exception in order to pass data across domains as a script by adding padding to make the JSON object look like a script. In JavaScript, when a function with a parameter is invoked, we call the function and add a parameter. With JSONP, we pass the JSON feed as a parameter to a function; thereby, we pad our object into a function callback. This function into which the JSON feed has been padded has to be used on the client-side to retrieve the JSON feed.

..simple things that might break JSON, such as ignoring double quotes, or a trailing comma on the last item in the JSON object, or the wrong content-type being sent over by the web server.

JSONLint is not just an online JSON validator, it also helps us format JSON and makes it look pretty.

A dependency manager is a software program that keeps track of all the necessary base programs that are required for a dependent program to run.

Node.js is a popular software platform that uses the JSON data format for tracking dependencies. Node Packaged Modules (NPM) is the package manager that developers use for installing and integrating external modules into their code.

On the same line as dependency managers, JSON is also used to store metadata for software projects. Prior to JSON becoming popular, the configurations and metadata were either stored in a text file or in language-specific files, such as config.php for PHP, config.py for Python, and config.js for JavaScript.

We can also use JSON to store metadata for dependency managers, package managers, configuration managers, and schema data stores.

Monday, 4 April 2016

Book Review: Enterprise Cloud Strategy

I like books which have tables, lists and illustrations (diagrams to ogle). They make points easier to visualize and more memorable. I therefore found Enterprise Cloud Strategy by Microsoft veterans Barry Briggs and Eduardo Kassner, very useful.

The ebook (available in PDF, EPUB and Kindle formats) answers questions like “How do I start?”; “How should I build a plan for cloud migration for my entire portfolio?”; and “How will my organization be affected by this change?”. It provides a road map and strategies that can aid an organization in planning for their journey to the Cloud (more specifically to Azure)

Microsoft IT began its cloud migration journey in 2009. The authors relate their experiences and cover a lot of insightful topics in about 100 pages of excellent content.

Sunday, 20 March 2016

Book Review: Microsoft Azure Essentials: Azure Web Apps for Developers by Rick Rainey

I loved reading the free ebook, Microsoft Azure Essentials: Azure Web Apps for Developers by Rick Rainey, the fourth ebook in Microsoft Press’s free Microsoft Azure Essentials series.

It had all the ingredients of what I consider a good technical book - plain-English, no-fluff, straight-forward tone & a conversational style, lots of relevant visual content.

After covering the core concepts of Azure Web Apps in the first chapter, the book covers topics related to it like “Azure WebJobs”, “Scaling Azure Web Apps” & “Monitoring and diagnostics” (which a good coverage of Site Control Manager/Kudu) in the subsequent chapters - all in about 120 pages.

The book is aimed at beginners but it is a good reference book for those experienced as well. It has plenty of screenshots on carrying out simple tasks with Azure Web Apps using the new Azure Portal.

It has useful Tips & Notes scattered throughout the book that offer insight on not so obvious facts, background context and best practice recommendations. Samples:

Deployment slots for a web app incur costs just as the production slot does

A web job runs on the same machine hardware that the Azure web app is running on...The ability to specify a new web app when publishing a web job gives you the option later of scaling out your web instances independently where the web job is running in its own web app...The web job can be the sole application running in the web app environment. A deployment strategy such as this may be appropriate if your web job is CPU-intensive and you don't want it consuming the resources of your web application.

Web jobs built using the WebJobs SDK frequently run continuously. However, web apps may unload if they are idle for extended periods of time, which also would cause your web job to be unloaded. It is recommended that you enable the Always On feature for web apps in the Basic or Standard pricing tier to ensure reliable execution of your functions.

If your application uses a distributed cache (such as Redis) or is completely stateless, then you can get better load balancing by disabling instance affinity.

Autoscale is a feature you can use to scale in/out your web app. You cannot use it to scale up/down your web app.

It is not possible to configure Autoscale to scale down to 0 instances.

Because web jobs run in the context of a web app, when you scale out your web app, your web job is scaled out with it.

..it is recommended that site diagnostic logging be enabled for your web app and stored in Azure Storage

You should delete the PublishSettings file from your local drive after you are finished with it because it contains credentials used to access your web app's file system.

Remote debugging is useful in scenarios in which your web app is behaving differently in Azure than when you run it locally.

You should never perform remote debugging on a production web app. When you debug an application and set breakpoints using remote debugging, execution of the W3WP process in which your app is running is halted until you resume or advance to the next breakpoint.

Diagnostics as a Service (DaaS) is safe to use in production environment and is available for web apps in the Basic, Standard and Premium pricing tiers.

Azure web apps have an eventlog.xml file located on the file system at D:\home\LogFiles. This file is generated automatically for you and contains application events that often are useful when troubleshooting errors at run time.

It is a best practice to implement a health-check page in your web app that checks the availability of other resources on which your web app depends. For example, if your web app uses a database, then verifying the connection to the database in the health-check page would enable you to return an error response to the endpoint monitoring service to indicate there is a problem.

I hope Microsoft comes up with more books of this sort in the Microsoft Azure Essentials series.