Book review: Host Your Web Site in the Cloud: Amazon Web Services Made Easy

Thursday, August 16th, 2012

I bought this book because I thought it is about web site building. There are many frameworks that facilitate this process and I like reading books about them. But this book is not about web site building, despite what the title says. So, I totally agree with one Amazon reviewer who mentioned that the title is misleading.

So what is this book about? It is about Amazon web services. It is a good introductory book, with each service explained in a great detali: how to set it up, how much it will cost, how to start using it. There are lots of examples written in PHP, and they are easy to follow. So, in general it is a rather useful book if you want to learn how to build web apps. The problem is that nobody is actually building the apps the way this book teaches. The code snipptets in this book use some low-level API. It is a good way to demonstrate all the features of Amazon web services, but when it comes to building a web app, it is more about architecting the app, picking the right libraries and frameworks, etc. I have not investigated this question, but I am pretty sure there are dozens of higher-level libraries for AWS that make building apps a whole lot easier than this book explains. For example, nobody is going to code a data input form by using pure HTML/PHP these days. In modern frameworks such as Drupal and Django people only have to provide data model, and the framework takes care of the rest, i.e. how to input data according to the model, how to present it to the user.

Still, this book is probably a good start for people who contemplate buidling web apps. I know there are many people who succsefully migrated their web sites from traditional hosting companies to more flexible Amazon cloud hosting. Even though the book does not explain how to do this, it exaplains how the basic blocks work, and then it is only the matter of connecting the dots.

Book review: Kingpin (a guide to cooperating with authorities for fun and profit)

Sunday, August 5th, 2012

I have read many books about computer security. Many of them tried to shed light on the cybercrime, but all of them failed. Most of the time, people seem to be afraid to touch sensitive stuff, because this typically involves revealing identities of cybercrime bosses and their counterparts – FBI operatives. And without mentioning the names a book becomes too generic and boring.

Here is the book you gotta read. It is the best book written in a decade about the subject. It describes the life of the most notorious American hacker named Max Butler. He is the guy responsible for stealing more than 1 billion US dollars from credit cards. If your credit card ever got abused (I know such people who suddenly found 20 pillows charged to their credit card) then blame this guy.

The book is written with an intimate knowledge of hacker’s daily routine. It also sheds light on his early days, the time when he was growing up, his relationships with other people, etc. This is only possible because the author – Kevin Poulsen is a former black hat hacker himself. The book makes it very clear that hackers are neither good nor bad. Of course, if your credit card suffers then they are obviously bad from your point of view. More generally, however, hackers are responsible for many security tools that help protect networks from some other bad guys. It is pretty clear that some bad people will sooner or later attempt to stage a 9-11-scale attack virtually. This is indeed possible because critical infrastructure is controlled by Internet-connected machines (including flight control towers, power plants, etc.). So, these hackers give specific warning signs to governments: protect your networks or you will be own3d pretty soon.

So, from my point of view, it is very difficult to judge the hacker, even those that steal money. They do harm to individual people, but they are rather useulf to society as a whole. I am pretty sure that without their help (and it is obvious that US authorities are using their help), the US infrastructure would fall victim to some foreign government.

The funniest part in this book is the description of how the hackers actually do their job. Typically, it is a combination of hacking, social engineering, and some luck. For the first part, you need to find an exploit in some popular software such as Internet Explorer. Then, you have to convince the users to visit the page that contains the malicious code. Typically, hackers send some funny e-mails containing a link, which make many people click this link. After that the exploit lands on victim’s machine, and it becomes own3d. What can you find on victim’s machine? Well, it depends. If it is a personal machine of some celebrity or FBI officers, you can find his/her e-mails, documents, plans, schedules, etc. Tons of funny stuff. However, if the victim machine belongs to some enterprise such as local pizza shop then you can get access to customer’s credt cards, if you are lucky. The problem is that many shops fail to abide by VISA security standards which demand credit card number be deleted after processing the order. However, it turns out that many restaurants store YEARS of customer’s traces, which makes them an attractive target for hackers.

After stealing credit card numbers, the hacker passes them to a gang of shoppers, who buy lots of random products, only to sell them on eBay later on. This kind of dirty business involves thousands and thousands of people and is responsible for billions of dollars in losses for credit card companies. But hackers are saying that banks are rich and greedy anyway, so they should suffer a bit (for a credit card theft, the client is only responsible for initial $50 in losses, and the bank carries the rest).

The book makes it very clear that FBI and Secret Service are eagerly interested in hackers’ community. However, it is not just “shoot them all” approach. Rather, the authorities try to infiltrate the hackers’ community (sometimes they even run hackers’ forums), identify the key people and recruit them. It is funny that the identities of recruited hackers is an even bigger secret than identities of FBI operatives. Sometimes, FBI agents from one city are not aware of the fact that the hacker has been recruited by agents in another city, so they attempt to arrest the hacker during his trip. The funniest part begins when they start searching hacker’s house, and then the FBI operatives are told not to search too deeply, implying that the house belongs to the cooperating hacker. So, when the FBI agents arrive with a search warrant, the hacker simply hides his hard drive in a trash bin, and the people who perform the search “fail” to find it. What a funny situation! Everybody understands that all of them are working for FBI (or some other 3-letter agency), but they cannot reveal each other’s identities!

So, the book is a praise to the 3-letter agencies who managed to recruit many hackers. The uncooperating ones are put behind the bars. This is an American story with a happy end. Are there any threats left?

Book review: Principles of Beautiful Web Design

Monday, July 2nd, 2012

I read this book because I am trying to educate myself in the area of web technologies. As some people mentioned in their reviews of this book, it bridges important gap between pure mortals and web designers. It is nicely written, in a fluent and ironic style. Still, the book maintains a logical attitude toward art of web design. From the very beginning, I liked the fact that table of contents includes only 5 parts, which makes it possible to keep global picture in mind as you make your way through this book. They are:

  • Layout and composition
  • Color
  • Texture
  • Typography
  • Imagery

Roughly speaking, these parts correspond to steps one needs to make when building a new web site. Being organized is essential to making it through such a complicated process as building a web site. Each chapter describes some techniques professional designers use. But the explanation is simplified as much as possible, so that people of various backgrounds can easily follow. The downside is that the book sounds way too elementary every now and then. For example, it spends a fair amount of time describing some CSS properties. There are tons of CSS guides on the Internet, you really don’t have to write a book about it. The good thing is that each step is illustrated by screenshots of web sites that author belives are good representatives of certain technique.

A collection of links is provided in the end of each chapter. Many tools that facilitate web development have been developed. So if the reader wants (s)he can start exploring them right away. In paritcular, I found the following two examples to be very interesting:

  • 960 Grid System – a framework for building grid layouts. I did not realize that most commerical-grade web sites use 12-16 columns in its grid. I thought that web page has 2-3 columns.
  • Color Scheme Designer – a tool that helps you select a color scheme based on theory of harmony (which color pairs with which). Then you can grab the resulting palette and colorize your web site.

So, I found the first few chapters to be rather interesting, but the rest of the book to be rather dull. The good thing is that you can treat this book as a potpourri of essays which you can read in any order. If you don’t want to read about Textures for example then you can easily skip it. To summarize, this book is a good example of recreational reading for a computer geek.

Book review: Python web development with Django

Tuesday, May 29th, 2012

This is a very balanced book. It is probably a bit unusual to describe a book as balanced but here is what I mean. These days, programming is more like solving jigsaw puzzle. There is no silver bullet anymore. Earlier, programming meant just knowing programming language. If you know C then you are systems programmer. If you know Fortran then you are scientific programmer. Today, you really need to know 3-4 programming languages to be able to program the Web.

In fact, Web has become a crossroads of a bunch of technologies. In particular, it unites two schools of thought: traditional programming with functions and objects (languages such as Javascript, PHP, Python, etc) and declarative programming, or UI programming, when the programs you write do not have any sequence of commands. Instead, those declarative programs specify the layout of objects on a web page (HTML) and their style (CSS).

Therefore, to achieve the goal of web development one has to know at least the following: HTML, CSS, Javascript, and either PHP or Python, that is 4-5 completely different languages. In a certain sense Web has already become the Babel tower. So how is it possible to write a relatively short book that will teach you web programming if you have no background in either of those langauges? I think this book achieves this goal rather nicely, and this is why I call it balanced.

The book starts by providing a 1-chapter introduction to Python. I never thougth that it is possible to teach Python in 1 chapter, but after reading this chapter I found it pretty concise and useful. Of course, it assumes some elementary knowledge of programming, but from there it takes you to some advanced concepts such as lamdba functions and decorators in just 10 minutes worth of reading.

Without further ado, the book describes how to build a real-world useful application, namely a Blog explaining concepts of Django framework along the way. Such an example-driven approach keeps reader engaged all the time. Every time I open this book I think: what kind of cool application am I going to build today? This book contains four large-scale projects which illustrate various components of Django. On the other hand, there are some chapters with more in-depth description of underlying technology.

Django framework is a good example of software design. As it has to bridge two different approaches to programming, namely declarative (HTML) and functional (Python) methods, a clear separation of these is necessary to avoid code mess. In addition, Django presumes that each Web application needs a data store, and therefore some langauge for manipulation data. Each database has underlying schema, therefore Django has to include an object relation management layer. In short, Django assumes the following workflow of a typical web application:

  • Web application stores data in a database (blog posts, pictures, etc.). So, the core of every application is a data model, written in Python
  • So we’ve got some data. How are we going to show it? Here the model-view-controller (MVC) paradigm comes to rescue. First off, a view is a function that takes incoming HTTP request and generates a response. It can access data store through the data model defined in step 1. So a view function is also implemented in Python.
  • Now comes the tricky part. The view function fetches the right data, but how would it present it? It needs to generate some HTML, and the latter is a declarative language. Generating HTML from Python is a tedious task. This is why Django comes up with its own template engine which is a declarative langauge itself. It naturally coalesces with HTML, yet augments it with minimalistic functional features, such as loops, to iterate through collections of data.
  • Last but not least, a web application typically has many views, such as archive of all posts, recent posts, etc. A special regex-based mechanism is used to distribute incoming requests to appropriate view functions.

Django comes with a bunch of helper applications (called contrib apps in Django). One of them which is particularly useful is admin app, which makes it possible to enter data into the data store, according to the application’s data model. Essentially, it is a nicely written UI for accessing the database. There are some contrib apps for managing users and sessions, and even for localization.

Despite all the complexity of a web application, Django does not hide the low-level details from you. You have access to every single byte of the web pages generated by Django. It only affects the way you think, it teaches you to write your software using design patterns. Therefore, Django is a good thing for universities – students should learn how to design software, instead of learning specific programming language such as Java.

I think that this book makes it very clear that with Django you can start building cool stuff after spending weekend to read this book. This is a great recreational reading for a computer geek, and I definitely enjoyed it.

Book review: In the garden of beasts: Love, Terror, and American family in Hitler’s Berlin

Wednesday, May 23rd, 2012

This book has been New York Times bestseller for several months. It describes only short span of Hitler’s reign, namely from 1933 to 1934, from the perspective of the United Sates Ambassador in Berlin. Why wouild anyone bother with those early years? Most people think that “interesting” stuff occurred a few years thereafter. In fact, Hitler did not even have absolute power in 1933, and nobody was taking him seriously. So, why would anyone write a book about a jester, as Hitler appeared as such during his early years?

I think that the author tries to show that Hitler himself is not the main reason behind the Apocalypse that followed. It is rather the deep unprofessionalism of everybody surrounding him, and the failure of world to repond to the threats of this mediocre government. This is one point that author makes very clear: the United States failed to intervene, and WW II is the result. So, think about what we should do in Iran.

The book describes the US Ambassador Dodd and most importantly his daughter Martha. In fact, she was so obsessed with making friends among Nazi officials, that many of them became her lovers. It is a freaky situation when a government of such a mighty country as Germany is heavily influenced by a daughter of US Ambassador (she became Soviet spy later on). And the author makes it very clear that State Department was just a Pretty Good Club, meaning that diplomats were wasting lots of money throwing parties for Nazi officials, etc. Well, probably State Department has changed since then, but the author makes no such claim. So, this book conveys a clear anti-diplomatic feeling. I am pretty sure it aims at attacking present-day Democratic Party which many people describe as descendants of Pretty Good Club.

So, yes, this is very politically motivated book which connects American past and present times. And maybe it even tries to influence future. The book’s message is very clear: “Those in power are idiots and prostitutes”. Based on Ambassador’s diary, the author says that Hitler looked like “suburban barber”, and Himmler as “chicken farmer” (who indeed he was). However, the book concentrates not only on the top Nazi officials such as Himmler, Goebels, and Goring, but rather on the second level, their deputies such as head of Gestapo Rudolph Diels, Ernst “Putzi” Hanfstaengl who was simply Hitler’s friend and musician, head of SA Ernst Rohm, etc.

Those second-tier people in fact shaped Germany’s daily life. So, the prosperity of the country and the direction in which it was moving was clearly dependent on them. And what were they doing? Partying and making love with each other. Government business was of somewhat lesser priority to them. The book mentions Soviet diplomat Boris Winogradow (and of course undercover KGB agent) who fell in love with Martha Dodd. He became so careless that he dared to date Martha without KGB permission, so they killed him. Now that dozens of his love letters have been made public, it is pretty clear that Soviet spy had very tender soul, just like a child: he used to hug Martha and kiss her cheek, the stuff that humble teenagers like to do. But he was supposedly a grown-up professional spy. Not so professional, and not so grown-up as it turned out…

The book concludes with description of bloody massacre aimed against Rohm. Since the government officials spent most of their time partying, Hitler kept receiving reports about their “conspiracy” and at one point decided to shoot them all. And he did shoot hundreds of his own government officials in a matter of days, just because they look “suspicious”. I think the book makes it clear that this purge triggered subsequent violence and started WW II. Indeed, people were so scared by this unexpected purge that they did not dare to critisize Hitler for his actions. Instead, they started praising him for his courage.

Lie after lie. German people started by saying Hitler was “great politician” (he was mediocre), then ended up in a sea of blood. Now they described him as “brave” and then Germany lost millions of lives in WW II. The message is clear: a small lie can only produce a bigger lie.

Lying is a sin, and sin can be removed only by sacrificing a lamb, or innocent people. History taught us this lesson numerous times.

This book is like a slow-motion movie: a few hundred pages about just 2 years. But it makes it very clear how the events unfolded: citizens kept praising Hitler, German government officials kept partying with American officials, and Soviet spy Boris Winogradow kept writing love letters.

And the war broke out.

Book review: Magic of Word – linguistic dialogs

Sunday, April 1st, 2012

This is an amazing book, but it is available only in Russian. It is written by two prominent linguists/journalists, one of whom worked as a translator for Russian presidents – Gorbachev, Eltsin, and Putin.

Despite the fact that those people are connected with the highest ranking officials of Russia, the book is written in a humorous style and is fun to read. The authors even dare to crack jokes about presidents and claim that during international meetings it is the translator who owns the world, not the world leaders.

The book presents interesting facts about world languages. The most surprising thing is the complexity of language. It turns out that the more complex the language, the fewer people there are who can speak it. For example, some minor language of Caucasus region has 16 noun cases, 17 verb tenses, and 10 verb moods. On the other hand, English has just 3 cases, 6 verb tenses, and 3 moods.

So how come all those ancient languages are so complicated? The authors suggest that earlier people put a lot more sense into each word depending on circumstances because they thought that words have magical power. These days, people often don’t pay attention to what they are saying. Gibberish is the norm of our society. But earlier people were frowned upon when they used a wrong word even if they did not intend to offend anybody. For example, today we can always use Mr/Mrs. to greet somebody. Earlier, greeting depended on the social class the person belonged to.

The authors try to explain why the old languages are so complicated. Their answer is that there is a master mind behind language design, that primitive people simply could not design languages of such complexity. However, as the time went by, people dropped features that looked unnecessary to them. It is interesting that not only theologists share such views.

Then the authors jump to a natural conclusion that there was a common predecessor of all human languages, a so-called pre-Babel tower language. So the Bible story is true, according to these prominent linguists. The authors claim that it is possible to track down evolution of language but unfortunately it takes a lot of learning to do that. One of the authors can fluently speak 30 languages, and apparently he was able to identify many similar roots in those languages. When people ask him, how many languages he knows, he typically answers that he knows just one language – the language of human beings.

Even present-day languages can put some influence on its speakers. When the authors who studied foreign languages in university worked in student labor camps, they were divided into groups based on which language they studied: “German” students, “French” students, etc. The authors say that German students were the most diligent, French were fighting for human rights all the time, etc. Time was passing by, generations of students were changing, but this rule was always true.

Then several chapters discuss the current state of Russian language, and how it transforms due to influence of Internet. The authors claim that it is not possible to artificially augment language with new words, the language will pick up what it needs to survive. In other words, the authors treat language as a living creature, not as a set of rules.

The speed of evolution is different for different languages. For example, Russians can read Pushkin (200 years ago), but they cannot read what was written 500 years ago. It was a totally different language. On the other hand, traditional Chinese language has not changed for several thousand years, and people can still read nowadays manuscripts written in B.C. era.

In Chapter 7 one of the authors describes his childhood. He was born in a small town in Moscow region in the family of teachers. From early childhood he discovered passion for foreign languages, and at the time of graduation from high school he could speak 5 languages. He says there was no particular incentive to learn languages, as in Soviet Union the travel abroad was strictly limited. Still, he says he often found the dictionaries of some esoteric languages in the town’s bookstore, and he was the only customer. But through these unusual books he was able to pick up valuable knowledge that happened to be very useful throughout his professional career as the Translator of President.

Well, this review is getting too long. I can only suggest that everybody read this book. It provides a fresh look at linguistics and can encourage you to learn more foreign languages.

Book review: Coffeescript

Monday, March 26th, 2012

This is one of the best programming books I have read in years, due to a number of reasons:

  1. It is small, only 60 pages
  2. It is free, but I got my copy though OReilly blogger reivew program
  3. It is well written. The narration goes from simple to complex

So what is this all about? Javascript is easy to learn, and this is what its creators aimed at. But as a result you get lots of headache when you try to use some advanced features such as classes, inheritance, etc. Are those really advanced features? In those days when Javascript was designed, they were. So, Javascript is simply showing its age, and the time to give it a major overhaul has come.

Recently, people have come up with many nice languages such as Python and Ruby which share many common features. Nobody claims they are easy to learn, but they are easy to use. So, the initial goal of building an easy language has been achieved. A new set of language constructs and idioms has been adopted (such as using indentation instead of brackets, arrow instead of function keyword, ranges, comprehensions, etc.). A new generation of developers expects iterators, maps, ranges, closures to be standard features of any programming languages. To most C++ programmers those look like quite advanved features provided by libraries such as STL. But Java revolution has happened: people got used to this syntactic expressiveness.

Coffeescript adds syntactic sugar to Javascript, bringing its language constructs on par with those of Python and Ruby. The good thing is that it compiles down to Javascript, so you can paste the output in existing web pages without any problem. No server support or library is necessary. You can even use interactive compiler that converts your Coffeescript into Javascript on the go.

The book is nicely written. Each chapter is dedicated to a certain aspect of the language: classes, idioms, the good parts, etc. Each chapter starts with a few simple examples, but it concludes with some really tricky stuff which can keep your attention for several minutues. For example, the chapter about classes mentions Mixins in the end, which is essentially a way to implement abstract classes (interfaces) in Javascript. Still, some people claim that CoffeeScript introduces new problems while trying to fix Javascript issues. This is why some language hackers added even more sugar to CoffeeScript. One such attempt is called Coco, look at all the new syntactic constructs it adds. They are awesome! So concise and powerful

(I wanted to say – strange and beautiful).

To summarize: CoffeeScript will make life of JavaScript developer F-U-N.

Books are becoming free

Wednesday, March 21st, 2012

There is lots of free information on the web – and Wikipedia is the most prominent example. I think that it makes it possible to learn about any particular subject. The quality of this information is getting better and better. One can say that information on Wikipedia is rather limited – there are few examples, etc. If you want to learn something in a greater deapth you typically need to read a book (textbook) and those used to be not free. This year demonstrated a change in the education capabilities of the Internet. MIT and Stanford are now offerring online interactive courses, to which tens of thousands of people sign up.

Another interesting example is free books written by professional authors. They are published by well-known publishers such as Oreilly. You can pay if you want, but more and more often, you can get these books for free. So here are a few examples that are currently on my mind:

Book review: Design of Design Essays from a Computer Scientist

Friday, March 16th, 2012

This is a new book by Fred Brooks, the author of much acclaimed Mythical Man-Month. Overall impression: a book of a retired professional who is doing a retrospective of his entire life: recalling how he built a house, how he wrote a book, how he worked in IBM. Such a wonderful, wonderful life. But what does it have to do with most readers who did not happen to know Fred in person, nor visited his marvelous beach house? Nothing. As another reviewer mentions on Amazon, this is a book of wandering mind.

Still, Fred is obviously a distinguished person and listening to him often pays off. But don’t expect to learn any specific technique from this book. There are lots of practical guides on the Internet. The book is a collection of wisdom, most of which, however, I have heard before.

In the first few chapters the book stresses the point that design is iterative process, that it is not possible to get the design right from the very beginning. True. Then he mentions several cases of how the design of complex system was done in a wrong way. For example, designing a military chopper without consulting with pilots. Therefore, even during early design stage it is important that users be taken into consideration. And this is indeed why open-source systems are so successful – because they are driven by users of the product.

Brooks mentions that earlier the designers were actually the users of the product: think of Wright brothers, Ford who rode on the car that he designed, etc. But as the time goes by this happens to change: do you think that space rocket designers are same people as astronauts? Obviously no. And this is going to happen to the software as well, Brooks claims. And I can only add that this is already happening. As a proof I can mention numerous UI frameworks that were designed by UI designers who have little connection with develop teams, not to mention the end users.

Apart from UI design, it is obvious that as the library of software components gets bigger and bigger, the process of building software becomes more like that in assembly factory: take piece labeled S1 and S2, connect them together, wrap them into S3, etc. In such a scenario the designer might not even know how to program. He can use a visual tool to create software. Is this good or bad? I always thought it was good as this makes it possible for people without programming experience to write programs. MIT Scratch is one such example, a hugely popular visual framework not just for kids.

In further chapters of the book Brooks delves into philosophy – empiricism and rationalism. He mentions that abstract math was generated by French philosophers who were mostly into rationalism, whereas applied science was created by Brits who are into empiricism. Brooks claims that software engineering is totally empirical, that is, requires constant verification, and so is the design of software.

Then Brooks sheds light on what are the characteristics of a good design, in his opinion. The major design principles are: orthogonality, propriety, and generality. But those are just general principles. When you design something, you have to make thousands of micro-decisions and the way you make them is called style. How to achieve good style? Brooks mentions the importance of copying other people’s styles. He says one can achieve remarkably good results by just mimicking someone else. As an example he cites music: Respighi’s Ancient Dances and Kreisler’s Praeludium and Allegro (in the style of Pugnani). Listen to the latter, it is magnificent.

He mentions that even great composers such as J. S. Bach spent considerable amount of time studying other people’s works. So, design is a complicated iterative process. As always, documentation plays a very important role. So how can one document the design trajectories? For that tools are needed. Brooks cites a few tools available online, but I cannot say they are mainstream. On the other hand, he fails to mention Mind Maps, a recent tool which is hugely popular among engineers.

To summarize, this book is a message from a successful engineer of previous generation of computer programmers. Can the youngsters learn something from this book? Definitely yes. On the other hand, the book will not fix the problems in existing products, but it can help prevent even more mistakes.

Book review: Cyber Warfare

Saturday, February 11th, 2012

This is a book that I would have never bought myself, but I got it for free through OReilly blogger review program. The title sounds interesting, and the table of contents looks attractive. The main purpose of this book is to investigate whether it is possible to launch a devastating attack without possessing any weapons, by only using an Internet-connected PC. The history is full of unexpected and surprising twists, and it happened many times in the past that country leaders mis-evaluated the possible danger of a certain technology. Quite often, military commanders went on horses to fight with tanks, in which case a large army can fall victim to a small regiment.

The first few chapters of the book are very though-provocative. They try to answer the question posed in the introduction by analyzing which groups are responsible for most attacks. The author makes it very clear that the main threat comes from non-state hacker groups who are indirectly supported by governments. The book never mentions it, but I think those groups are similar to pirates of the medieval ages. They rip off merchants sometimes, but they can be hired to protect trade routes from competing states. As usual, private organizations are much quicker at building up teams with necessary skills, whereas the official government policy is still in its infancy. Also, there is a clear division in what government and non-government organizations do: the informal hacker groups launch attacks, and government agencies try to defend against external threats. The book makes it very clear that this needs to change. The old saying goes that counter-attack is the best way of defending someoneʼs property. Therefore, in order to successfully protect their infrastructure, the governments need to learn how to launch attacks. In other words, the governments need to start building their fleet immediately, rather than keep hiring the pirates.

Many governments realized that long time ago, so in the second half of the book the author presents a comprehensive overview of cyber-capabilities of top 20 or so most advanced countries. This is a bit boring to read, as the book provides way too many details on the internal structure of ministries and agencies. But maybe it is a good reference material for professional strategic decision makers. In addition, when analyzing Russia, I think the book attributes too much power to a bunch of oligarchs. Trust me, they are not responsible for cyber-attacks launched from Russia. There are indeed some covert hacker groups which the book fails to identify.

To summarize, the book is thought-provocative and clearly lays out the looming threats. But in my opinion it fails to identify the driving forces of the cyber war. It is not any particular government or that wealthy guy. Cyber war is still a black market, and the author fails to shed some light on this dark side. Or maybe he just does not want to mess up with them. Because of this elusiveness, I give 4 stars to this book.