Book Review: 17 Equations That Changed the World
What could be more boring than mathematical equations? The majority of folks would be hard pressed to find something to answer that hypothetical query. Myself included
I'll be honest, I'm a math minor and I picked up this book on a whim in a bookstore thinking to myself "Now why would anyone want to write or buy a book on 17 equations?" I flipped through it and immediately knew that I had to consume the rest of this book.
What Stewart is able to do is to take these 17 equations that manifest in everything we do, everything we observe, everything bit of space around us and bring life to them. He presents the opening of each chapter with a concise summary of these equations that helps immensely in revealing the underlying nature of the equations and then goes into the history of the creation (discovery?) of each of these equations and it's been an eye-opening read.
As an example, having majored in computer science, I worked constantly with logarithms and natural logs (there's lumber joke here somewhere) but never once understood the nature of logarithms. How did they come about? Why do they exist? What problem do they address? Just what in the heck is a logarithm? I knew them only in the abstract -- as operations that yielded a result; I knew them as a general pattern but not the nature of the logarithm. The second chapter simply blew me away with the clarity and simplicity with which Stewart was able to pull back the covers on what logarithms actually mean. No one in my years of formal education had bothered to explain it in the same way that Stewart does in this book.
While I cannot say that this book is for everyone, I will say that I find it is surprisingly approachable for most folks who are scientifically or mathematically inclined. Certainly, there are many equations and plenty of mathematics (and it gets especially complex (pun intended
in the later chapters. However, I think this book is still immensely readable and approachable, even for those who have never ventured deep into the vast field of mathematics or have long moved past their days of calculus, linear algebra, and so on. I, for one, will make sure that my daughter reads the chapter on logarithms as it starts to seep into her curriculum one day to make sure she understands the "why" and so that she has an appreciation for all of the history and magic behind that little "log n" button on her calculator.
This book is incredibly well written, well presented such that it is approachable for a large audience, an entertaining read, and highly recommended. If you've read this review to this point, you should probably just go ahead and by this book!
The ESAM 5600 Arrives!
Ever since my trip out to Switzerland, I've been jonesing for an espresso machine. After a lot of research, checking out lots of youtube videos, almost pulling the trigger various times, I ended up purchasing the DeLonghi ESAM5600 SL from JL Hufford. I briefly considered Nespresso machines, but without recycling centers nearby, it seemed like very wasteful and not to mention the cost of the pods would be expensive over the lifetime of the machine. Besides: I like to be able to choose my own beans.
We'll see how this DeLonghi holds up over time. I expect to get a lot of use out of it
The Pineapple Finally Fruits!
It's finally happened! My pineapple is finally flowering WOOOOOOOOOOO!
I can't even believe it. I didn't even notice it until I randomly looked over and took note that I probably need to water it.
I started this plant some 3-4 years ago now (after my previous one died due to exposure to the cold) and it's FINALLY bearing a flower (in the middle of frickin' winter no less!). I am very much looking forward to eating this pineapple
Home Office 2011 Edition
Finally got around the cleaning up my office (after 4 years...) . Love the way it turned out and much more work space with much less clutter.
For reference, this is what it looked like previously.
Now I REALLY Can’t be Bothered to Learn Silverlight
I've blogged about it before, but seriously, the question has to be asked: if you're a developer with limited bandwidth to focus on mastering new technologies, why would you spend that time on Silverlight?
Not only is WP7 floundering, but now the news is out: the Metro version of IE 10 in Windows 8 won't support any plugins - including Silverlight:
Windows 8 will have two versions of Internet Explorer 10: a conventional browser that lives on the legacy desktop, and a new Metro-style, touch-friendly browser that lives in the Metro world. The second of these, the Metro browser, will not support any plugins. Whether Flash, Silverlight, or some custom business app, sites that need plugins will only be accessible in the non-touch, desktop-based browser.
Should one ever come across a page that needs a plugin, the Metro browser has a button to go to that page within the desktop browser. This yanks you out of the Metro experience and places you on the traditional desktop.
The rationale is a familiar one: plugin-based content shortens battery life, and comes with security, reliability, and privacy problems. Sites that currently depend on the capabilities provided by Flash or Silverlight should switch to HTML5.
If you're not on the HTML5 boat yet, I think the writing is on the wall: the Silverlight party is over (thank goodness).
The Most Awesome Thing You’ll Read Today
Nicholas Schmidle's article in the New Yorker detailing Operation Neptune's Spear (AKA the raid that killed Bin Laden):
The Americans hurried toward the bedroom door. The first SEAL pushed it open. Two of bin Laden’s wives had placed themselves in front of him. Amal al-Fatah, bin Laden’s fifth wife, was screaming in Arabic. She motioned as if she were going to charge; the SEAL lowered his sights and shot her once, in the calf. Fearing that one or both women were wearing suicide jackets, he stepped forward, wrapped them in a bear hug, and drove them aside. He would almost certainly have been killed had they blown themselves up, but by blanketing them he would have absorbed some of the blast and potentially saved the two SEALs behind him.
The first round, a 5.56-mm. bullet, struck bin Laden in the chest. As he fell backward, the SEAL fired a second round into his head, just above his left eye. On his radio, he reported, “For God and country—Geronimo, Geronimo, Geronimo.” After a pause, he added, “Geronimo E.K.I.A.”
I'm still awed and fascinated by this operation even now, months after it took place. This piece has had the most detailed account of the events of leading up to and during the raid that I've read so far. Worth 15 minutes, for sure!
Chaining jQuery AJAX Calls (w/o Plugins)
Here's the scenario: you need to make a series of AJAX calls to process a list of objects and each call is dependent on the results from the previous call. How can we structure this elegantly in jQuery without having to write massive chains or script callbacks?
An example would be using an AJAX based API to create a hierarchy of nested folders. Perhaps the user enters a string like "/path1/path2/path3" and multiple calls are needed to create "/path1", then /path1/path2," then "/path1/path2/path3".
My friend John Peterson brought up jQuery deferred to me today and it clicked and my life is better for it.
Here's an example:
var parts = ["path1","path2","path3"]; // Output from string.split()
var chain = $.Deferred(); // Create the root of the chain.
var promise; // Placeholder for the promise
// Build the chain
for(var i = 0; i < parts.length; i++)
{
if(i == 0) promise = chain;
// Pipe the response to the "next" function
promise = promise.pipe(function(response)
{
var part = this.shift(); // Get the current part
var root = "";
if(response)
{
root = response.newPath;
}
return $.ajax // MUST call return here.
({
type: "GET",
url: "filemanager/create/" + root + part,
context: this
});
})
}
promise.done(function(response){
// This handles the response from the final AJAX call
});
chain.resolveWith(parts); // Execute the chain
The general idea is that we start with a chain and "pipe" the output from each step to the next. When I execute the chain, I pass in the array as the argument on line 35.
This is necessary because referring to part[i] inside the function declared on line 11 will always yield "part3" . To work around this, we pass in the whole array of parts as the context to the chain. It becomes the "this" reference and we simply shift() a value off of the array to get the "current" item.
To pass the array to the next function in the chain, we simply set the context of the AJAX call to the "this" reference. Now, in the next handler in the chain, the "response" is the output of the previous AJAX call and the "this" reference is the "current" item in the array.
Of course, the final call -- if you want to handle it -- can be added to the chain using done() instead of pipe().
It's a brilliant way of chaining multiple jQuery AJAX calls in a much more coherent manner!
WCF Data Services Cheat Sheet
I was working with some SharePoint REST queries and couldn't find a good list of the operations supported by the REST API. Namely, I was trying to figure out if it supported a "contains" operation (it does using indexof).
I found a very nicely put together set of tables which shows the LINQ queries, the corresponding URL, and the SQL produced by the query.
This is the result of my tiny research about translating LINQ to REST into oData URI Conventions and finally into T-SQL. Event though I knew what I needed on the T-SQL side, I was not sure which LINQ statement would create the respective SQL query. So, as an experimental test bed I created a little console application and used Netflix oData Service to see how LINQ to REST gets translated to URIs
Very useful indeed.
On a related note, for those that are working with the REST APIs for SharePoint, I've found that you can actually reduce your network traffic when using $expand by taking only the fields that you're interested in for the expanded item as well. For example:
http://[site]/_vti_bin/listadata.svc/Tasks?$expand=AssignedTo&$select=AssignedTo/Name,AssignedTo/Account,Id,Title
The downside is that this will barf out invalid JSON if you have a null value for the expanded field (in this case, if the task is not assigned to any user). Here's a sample output:
{
"d":{
"results":[
{
"__metadata":{
"uri":"http://project.dev.com/PWA/ts1/_vti_bin/listdata.svc/Tasks(2)",
"etag":"W/\"3\"",
"type":"Microsoft.SharePoint.DataService.TasksItem"
},
"Id":2,
"ContentType":"Task",
"Title":"Action 1",
"Path":"/PWA/ts1/Lists/Tasks/Milestone 1",
"PriorityValue":"(2) Normal",
"StatusValue":"Not Started",
"AssignedTo":{
"__metadata":{
"uri":"http://project.dev.com/PWA/ts1/_vti_bin/listdata.svc/UserInformationList(18)",
"etag":"W/\"7\"",
"type":"Microsoft.SharePoint.DataService.UserInformationListItem"
},
"Name":"Charles Chen",
"Account":"DEV\\charles"
},
"StartDate":"\/Date(1310428800000)\/",
"DueDate":"\/Date(1310601600000)\/"
},
{
"error":{
"code":"",
"message":{
"lang":"en-US",
"value":"An error occurred while processing this request."
}
}
}
You can see that the second item in the "results" array is where the task was not assigned to a user. The response is abruptly cut off with the JSON being completely broken at that point and in an invalid state. I would have expected that the result would just set "AssignedTo":null
A bummer, but it doesn't detract from my love for the REST APIs
Web Based Chat for SharePoint – ChatPoint
In any case, zaanglabs released ChatPoint yesterday.
It brings integrated, web-based chat to SharePoint 2010 (and actually would probably work fine in 2007 as well with some slight modifications).
Check it out and hit the contact form if you're interested.
Our goal is to eventually bring even tighter integration with GameTime so that you can get live notifications when things change in SharePoint (in addition to the basic chat functionality).







