Browsed by

好烂啊有点差凑合看看还不错很精彩 (No Ratings Yet)




import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Locale;

public class CX {

public static void main(String[] args) throws ParseException {

SimpleDateFormat sdf;

Date date; String s, s2 ;

// Jul 20, 2016 2:05:09 pm

String ds = “Jul 20, 2016 2:05:09 pm”;

date = new Date();

sdf = new SimpleDateFormat(“MMMMM dd,yyyy hh:mm:ss a”, Locale.ENGLISH );

s = sdf.format(date);


date = sdf.parse(s);

System.out.println(“date = ” + date);

date = sdf.parse(ds);

System.out.println(“date2 = ” + date);

sdf = new SimpleDateFormat(“MMM dd,yyyy hh:mm:ss aa”, Locale.ENGLISH);

s = sdf.format(date); System.out.println(s);

date = sdf.parse(s);

System.out.println(“date = ” + date);

date = sdf.parse(ds);

System.out.println(“date2 = ” + date); }


June 22,2017 03:33:48 PM

date = Thu Jun 22 15:33:48 CST 2017

date2 = Wed Jul 20 14:05:09 CST 2016

Jul 20,2016 02:05:09 PM

date = Wed Jul 20 14:05:09 CST 2016

date2 = Wed Jul 20 14:05:09 CST 2016

好烂啊有点差凑合看看还不错很精彩 (No Ratings Yet)
Update in WordPress 4.8

Update in WordPress 4.8

An Update with You in Mind

WordPress 4.8 adds some great new features. Gear up for a more intuitive WordPress!

Though some updates seem minor, they’ve been built by hundreds of contributors with you in mind. Get ready for new features you’ll welcome like an old friend: link improvements, three new media widgets covering images, audio, and video, an updated text widget that supports visual editing, and an upgraded news section in your dashboard which brings in nearby and upcoming WordPress events.


Exciting Widget Updates

Image Widget

Adding an image to a widget is now a simple task that is achievable for any WordPress user without needing to know code. Simply insert your image right within the widget settings. Try adding something like a headshot or a photo of your latest weekend adventure — and see it appear automatically.

Video Widget

A welcome video is a great way to humanize the branding of your website. You can now add any video from the Media Library to a sidebar on your site with the new Video widget. Use this to showcase a welcome video to introduce visitors to your site or promote your latest and greatest content.

Audio Widget

Are you a podcaster, musician, or avid blogger? Adding a widget with your audio file has never been easier. Upload your audio file to the Media Library, go to the widget settings, select your file, and you’re ready for listeners. This would be a easy way to add a more personal welcome message, too!

Rich Text Widget

This feature deserves a parade down the center of town! Rich-text editing capabilities are now native for Text widgets. Add a widget anywhere and format away. Create lists, add emphasis, and quickly and easily insert links. Have fun with your newfound formatting powers, and watch what you can accomplish in a short amount of time.

好烂啊有点差凑合看看还不错很精彩 (No Ratings Yet)
WordPress Backups « WordPress Codex

WordPress Backups « WordPress Codex

WordPress Backups

Note: Want to skip the hard stuff? Skip to Automated Solutions such asWordPress Plugins for backups.

Your WordPress database contains every post, every comment and every link you have on your blog. If your database gets erased or corrupted, you stand to lose everything you have written. There are many reasons why this could happen and not all are things you can control. With a proper backup of your WordPress database and files, you can quickly restore things back to normal.

Instructions to back up your WordPress site include:

  1. WordPress Site and your WordPress Database
  2. Automatic WordPress backup options

In addition, support is provided online at the WordPress Support Forum to help you through the process.

Site backups are essential because problems inevitably occur and you need to be in a position to take action when disaster strikes. Spending a few minutes to make an easy, convenient backup of your database will allow you to spend even more time being creative and productive with your website.

来源: WordPress Backups « WordPress Codex

好烂啊有点差凑合看看还不错很精彩 (No Ratings Yet)
Making Photos Smaller Without Quality Loss – by Yelp

Making Photos Smaller Without Quality Loss – by Yelp

Making Photos Smaller Without Quality Loss

Yelp has over 100 million user-generated photos ranging from pictures of dinners or haircuts, to one of our newest features, #yelfies. These images account for a majority of the bandwidth for users of the app and website, and represent a significant cost to store and transfer. In our quest to give our users the best experience, we worked hard to optimize our photos and were able to achieve a 30% average size reduction. This saves our users time and bandwidth and reduces our cost to serve those images. Oh, and we did it all without reducing the quality of these images!


Yelp has been storing user-uploaded photos for over 12 years. We save lossless formats (PNG, GIF) as PNGs and all other formats as JPEG. We use Python and Pillow for saving images, and start our story of photo uploads with a snippet like this:

With this as a starting point, we began to investigate potential optimizations on file size that we could apply without a loss in quality.


First, we had to decide whether to handle this ourselves or let a CDN provider magically change our photos. With the priority we place on high quality content, it made sense to evaluate options and make potential size vs quality tradeoffs ourselves. We moved ahead with research on the current state of photo file size reduction – what changes could be made and how much size / quality reduction was associated with each. With this research completed, we decided to work on three primary categories. The rest of this post explains what we did and how much benefit we realized from each optimization.

  1. Changes in Pillow
    • Optimize flag
    • Progressive JPEG
  2. Changes to application photo logic
    • Large PNG detection
    • Dynamic JPEG quality
  3. Changes to JPEG encoder
    • Mozjpeg (trellis quantization, custom quantization matrix)

Changes in Pillow

Optimize Flag

This is one of the easiest changes we made: enabling the setting in Pillow responsible for additional file size savings at the cost of CPU time (optimize=True). Due to the nature of the tradeoff being made, this does not impact image quality at all.

For JPEG, this flag instructs the encoder to find the optimal Huffman coding by making an additional pass over each image scan. Each first pass, instead of writing to file, calculates the occurrence statistics of each value, required information to compute the ideal coding. PNG internally uses zlib, so the optimize flag in that case effectively instructs the encoder to use gzip -9 instead of gzip -6.

This is an easy change to make but it turns out that it is not a silver bullet, reducing file size by just a few percent.

Progressive JPEG

When saving an image as a JPEG, there are a few different types you can choose from:

  • Baseline JPEG images load from top to bottom.
  • Progressive JPEG images load from more blurry to less blurry. The progressive option can easily be enabled in Pillow (progressive=True). As a result, there is a perceived performance increase (that is, it’s easier to notice when an image is partially absent than it is to tell it’s not fully sharp).

Additionally, the way progressive files are packed generally results in a small reduction to file size. As more fully explained by the Wikipedia article, JPEG format uses a zigzag pattern over the 8×8 blocks of pixels to do entropy coding. When the values of those blocks of pixels are unpacked and laid out in order, you generally have non-zero numbers first and then sequences of 0s, with that pattern repeating and interleaved for each 8×8 block in the image. With progressive encoding, the order of the unwound pixel blocks changes. The higher value numbers for each block come first in the file, (which gives the earliest scans of a progressive image its distinct blockiness), and the longer spans of small numbers, including more 0s, that add the finer details are towards the end. This reordering of the image data doesn’t change the image itself, but does increase the number of 0s that might be in a row (which can be more easily compressed).

Comparison with a delicious user-contributed image of a donut (click for larger):

(left) A mock of how a baseline JPEG renders.

(left) A mock of how a baseline JPEG renders.

(right) A mock of how a progressive JPEG renders.

(right) A mock of how a progressive JPEG renders.

Changes to Application Photo Logic

Large PNG Detection

Yelp targets two image formats for serving user-generated content – JPEG and PNG. JPEG is a great format for photos but generally struggles with high-contrast design content (like logos). By contrast, PNG is fully-lossless, so great for graphics but too large for photos where small distortions are not visible. In the cases where users upload PNGs that are actually photographs, we can save a lot of space if we identify these files and save them as JPEG instead. Some common sources of PNG photos on Yelp are screenshots taken by mobile devices and apps that modify photos to add effects or borders.

(left) A typical composited PNG upload with logo and border. (right) A typical PNG upload from a screenshot.

(left) A typical composited PNG upload with logo and border. (right) A typical PNG upload from a screenshot.

We wanted to reduce the number of these unnecessary PNGs, but it was important to avoid overreaching and changing format or degrading quality of logos, graphics, etc. How can we tell if something is a photo? From the pixels?

Using an experimental sample of 2,500 images, we found that a combination of file size and unique pixels worked well to detect photos. We generate a candidate thumbnail image at our largest resolution and see if the output PNG file is larger than 300KiB. If it is, we’ll also check the image contents to see if there are over 2^16 unique colors (Yelp converts RGBA image uploads to RGB, but if we didn’t, we would check that too).

In the experimental dataset, these hand-tuned thresholds to define “bigness” captured 88% of the possible file size savings (i.e. our expected file size savings if we were to convert all of the images) without any false-positives of graphics being converted.

Dynamic JPEG Quality

The first and most well-known way to reduce the size of JPEG files is a setting called quality. Many applications capable of saving to the JPEG format specify quality as a number.

Quality is somewhat of an abstraction. In fact, there are separate qualities for each of the color channels of a JPEG image. Quality levels 0 – 100 map to different quantization tables for the color channels, determining how much data is lost (usually high frequency). Quantization in the signal domain is the one step in the JPEG encoding process that loses information.

The simplest way to reduce file size is to reduce the quality of the image, introducing more noise. Not every image loses the same amount of information at a given quality level though.

We can dynamically choose a quality setting which is optimized for each image, finding an ideal balance between quality and size. There are two ways to do this:

  • Bottom-up: These are algorithms that generate tuned quantization tables by processing the image at the 8×8 pixel block level. They calculate both how much theoretical quality was lost and how that lost data either amplifies or cancels out to be more or less visible to the human eye.
  • Top-down: These are algorithms that compare an entire image against an original version of itself and detect how much information was lost. By iteratively generating candidate images with different quality settings, we can choose the one that meets a minimum evaluated level by whichever evaluation algorithm we choose.

We evaluated a bottom-up algorithm, which in our experience did not yield suitable results at the higher end of the quality range we wanted to use (though it seems like it may still have potential in the mid-range of image qualities, where an encoder can begin to be more adventurous with the bytes it discards). Many of the scholarly papers on this strategy were published in the early 90s when computing power was at a premium and took shortcuts that option B addresses, such as not evaluating interactions across blocks.

So we took the second approach: use a bisection algorithm to generate candidate images at different quality levels, and evaluate each candidate image’s drop in quality by calculating its structural similarity metric (SSIM) using pyssim, until that value is at a configurable but static threshold. This enables us to selectively lower the average file size (and average quality) only for images which were above a perceivable decrease to begin with.

In the below chart, we plot the SSIM values of 2500 images regenerated via 3 different quality approaches.

  1. The original images made by the current approach at quality = 85 are plotted as the blue line.
  2. An alternative approach to lowering file size, changing quality = 80, is plotted as the red line.
  3. And finally, the approach we ended up using, dynamic quality, SSIM 80-85, in orange, chooses a quality for the image in the range 80 to 85 (inclusive) based on meeting or exceeding an SSIM ratio: a pre-computed static value that made the transition occur somewhere in the middle of the images range. This lets us lower the average file size without lowering the quality of our worst-quality images.

SSIMs of 2500 images with 3 different quality strategies.

SSIMs of 2500 images with 3 different quality strategies.


There are quite a few image quality algorithms that try to mimic the human vision system. We’ve evaluated many of these and think that SSIM, while older, is most suitable for this iterative optimization based on a few characteristics:

  1. Sensitive to JPEG quantization error
  2. Fast, simple algorithm
  3. Can be computed on PIL native image objects without converting images to PNG and passing them to CLI applications (see #2)

Example Code for Dynamic Quality:

There are a few other blog posts about this technique, here is one by Colt Mcanlis. And as we go to press, Etsy has published one here! High five, faster internet!

Changes to JPEG Encoder


Mozjpeg is an open-source fork of libjpeg-turbo, which trades execution time for file size. This approach meshes well with the offline batch approach to regenerating images. With the investment of about 3-5x more time than libjpeg-turbo, a few more expensive algorithms make images smaller!

One of mozjpeg’s differentiators is the use of an alternative quantization table. As mentioned above, quality is an abstraction of the quantization tables used for each color channel. All signs point to the default JPEG quantization tables as being pretty easy to beat. In the words of the JPEG spec:

These tables are provided as examples only and are not necessarily suitable for any particular application.

So naturally, it shouldn’t surprise you to learn that these tables are the default used by most encoder implementations… 🤔🤔🤔

Mozjpeg has gone through the trouble of benchmarking alternative tables for us, and uses the best performing general-purpose alternative for images it creates.

Mozjpeg + Pillow

Most Linux distributions have libjpeg installed by default. So using mozjpeg under Pillow doesn’t work by default, but configuring it isn’t terribly difficult either. When you build mozjpeg, use the --with-jpeg8 flag and make sure it can be linked by Pillow will find it. If you’re using Docker, you might have a Dockerfile like:

That’s it! Build it and you’ll be able to use Pillow backed by mozjpeg within your normal images workflow.


How much did each of those improvements matter for us? We started this research by randomly sampling 2,500 of Yelp’s business photos to put through our processing pipeline and measure the impact on file size.

  1. Changes to Pillow settings were responsible for about 4.5% of the savings
  2. Large PNG detection was responsible for about 6.2% of the savings
  3. Dynamic Quality was responsible for about 4.5% of the savings
  4. Switching to the mozjpeg encoder was responsible for about 13.8% of the savings

This adds up to an average image file size reduction of around 30%, which we applied to our largest and most common image resolutions, making the website faster for users and saving terabytes a day in data transfer. As measured at the CDN:

Average filesize over time, as measured from the CDN (combined with non-image static content).

Average filesize over time, as measured from the CDN (combined with non-image static content).

What we didn’t do

This section is intended to introduce a few other common improvements that you might be able to make, that either weren’t relevant to Yelp due to defaults chosen by our tooling, or tradeoffs we chose not to make.


Subsampling is a major factor in determining both quality and file size for web images. Longer descriptions of subsampling can be found online, but suffice it to say for this blog post that we were already subsampling at 4:1:1 (which is Pillow’s default when nothing else is specified) so we weren’t able to realize any further savings here.

Lossy PNG encoding

After learning what we did about PNGs, choosing to preserve some of them as PNG but with a lossy encoder like pngmini could have made sense, but we chose to resave them as JPEG instead. This is an alternate option with reasonable results, 72-85% file size savings over unmodified PNGs according to the author.

Dynamic content types

Support for more modern content types like WebP or JPEG2k is certainly on our radar. Even once that hypothetical project ships, there will be a long-tail of users requesting these now-optimized JPEG/PNG images which will continue to make this effort well worth it.


We use SVG in many places on our website, like the static assets created by our designers that go into our styleguide. While this format and optimization tools like svgo are useful to reduce website page weight, it isn’t related to what we did here.

Vendor Magic

There are too many providers to list that offer image delivery / resizing / cropping / transcoding as a service. Including open-source thumbor. Maybe this is the easiest way to support responsive images, dynamic content types and remain on the cutting edge for us in the future. For now our solution remains self-contained.

Further Reading

Two books listed here absolutely stand on their own outside the context of the post, and are highly recommended as further reading on the subject.

来源: Making Photos Smaller Without Quality Loss

好烂啊有点差凑合看看还不错很精彩 (No Ratings Yet)
Netty : what’s it

Netty : what’s it

Netty is an asynchronous event-driven network application framework
for rapid development of maintainable high performance protocol servers & clients.


Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and streamlines network programming such as TCP and UDP socket server.

‘Quick and easy’ doesn’t mean that a resulting application will suffer from a maintainability or a performance issue. Netty has been designed carefully with the experiences earned from the implementation of a lot of protocols such as FTP, SMTP, HTTP, and various binary and text-based legacy protocols. As a result, Netty has succeeded to find a way to achieve ease of development, performance, stability, and flexibility without a compromise.



  • Unified API for various transport types – blocking and non-blocking socket
  • Based on a flexible and extensible event model which allows clear separation of concerns
  • Highly customizable thread model – single thread, one or more thread pools such as SEDA
  • True connectionless datagram socket support (since 3.1)

Ease of use

  • Well-documented Javadoc, user guide and examples
  • No additional dependencies, JDK 5 (Netty 3.x) or 6 (Netty 4.x) is enough
    • Note: Some components such as HTTP/2 might have more requirements. Please refer to the Requirements page for more information.


  • Better throughput, lower latency
  • Less resource consumption
  • Minimized unnecessary memory copy


  • Complete SSL/TLS and StartTLS support


  • Release early, release often
  • The author has been writing similar frameworks since 2003 and he still finds your feed back precious!

来源: Netty: Home

好烂啊有点差凑合看看还不错很精彩 (No Ratings Yet)
Congrats, you are now part of the InfoQ community

Congrats, you are now part of the InfoQ community

Thank you for confirming your email.

You will now be receiving our amazing content to help you navigate trends in the industry, every Tuesday.
In the meantime, here is a sample of our most recent newsletter:

Please add the send address to your address book, contacts or safe list.

If you did not register or feel that this subscription is an error, you may unsubscribe by clicking on this link:

May the force be with you,

InfoQ team

好烂啊有点差凑合看看还不错很精彩 (No Ratings Yet)
Is Java “pass-by-reference” or “pass-by-value”?

Is Java “pass-by-reference” or “pass-by-value”?

结果让人有些意外,到底是 引用传递 还是 值传递?

public class DogTest {

public static void main( String[] args ) {
Dog aDog = new Dog(“Max”);
// we pass the object to foo
// aDog variable is still pointing to the “Max” dog when foo(…) returns
if (aDog.getName().equals(“Max”)) { System.out.println(“11=”+aDog);} // true, java passes by value
if (aDog.getName().equals(“Fifi”)) { System.out.println(“22=”+aDog);} // false

public static void foo(Dog d) {
d.getName().equals(“Max”); // true
// change d inside of foo() to point to a new Dog instance “Fifi”
d = new Dog(“Fifi”);
if (d.getName().equals(“Fifi”)) { System.out.println(“33=”+d); } // true

class Dog {
String name;
public Dog(String s ){
name =s ;
public String getName() {
return name;
public void setName(String name) { = name;

public String toString() {
// TODO Auto-generated method stub
return String.format(” Dog[name=%s]”, name);

来源: methods – Is Java “pass-by-reference” or “pass-by-value”? – Stack Overflow

好烂啊有点差凑合看看还不错很精彩 (No Ratings Yet)
好烂啊有点差凑合看看还不错很精彩 (No Ratings Yet)



( (Cambridge, MA – Thursday, June 7, 2007) Harvard University’s 356th Commencement included Senior Class Chapel Service and Morning Exercises in Tercentenary Theatre. Bill Gates was the speaker at Afternoon Exercises Staff Photo by Rose Lincoln/Harvard News Office )


President Bok, former President Rudenstine, incoming President Faust, members of the Harvard Corporation and the Board of Overseers, members of the faculty, parents, and especially, the graduates:


I’ve been waiting more than 30 years to say this: “Dad, I always told you I’d come back and get my degree.”


I want to thank Harvard for this timely honor. I’ll be changing my job next year … and it will be nice to finally have a college degree on my resume.


I applaud the graduates today for taking a much more direct route to your degrees. For my part, I’m just happy that the Crimson has called me “Harvard’s most successful dropout.” I guess that makes me valedictorian of my own special class … I did the best of everyone who failed.


But I also want to be recognized as the guy who got Steve Ballmer to drop out of business school. I’m a bad influence. That’s why I was invited to speak at your graduation. If I had spoken at your orientation, fewer of you might be here today.

但是,我还要提醒大家,我使得Steve Ballmer(注:微软总经理)也从哈佛商学院退学了。因此,我是个有着恶劣影响力的人。这就是为什么我被邀请来在你们的毕业典礼上演讲。如果我在你们入学欢迎仪式上演讲,那么能够坚持到今天在这里毕业的人也许会少得多吧。

Harvard was just a phenomenal experience for me. Academic life was fascinating. I used to sit in on lots of classes I hadn’t even signed up for. And dorm life was terrific. I lived up at Radcliffe, in Currier House. There were always lots of people in my dorm room late at night discussing things, because everyone knew I didn’t worry about getting up in the morning. That’s how I came to be the leader of the anti-social group. We clung to each other as a way of validating our rejection of all those social people.


Radcliffe was a great place to live. There were more women up there, and most of the guys were science-math types. That combination offered me the best odds, if you know what I mean. This is where I learned the sad lesson that improving your odds doesn’t guarantee success.


One of my biggest memories of Harvard came in January 1975, when I made a call from Currier House to a company in Albuquerque that had begun making the world’s first personal computers. I offered to sell them software.


I worried that they would realize I was just a student in a dorm and hang up on me. Instead they said: “We’re not quite ready, come see us in a month,” which was a good thing, because we hadn’t written the software yet. From that moment, I worked day and night on this little extra credit project that marked the end of my college education and the beginning of a remarkable journey with Microsoft.


What I remember above all about Harvard was being in the midst of so much energy and intelligence. It could be exhilarating, intimidating, sometimes even discouraging, but always challenging. It was an amazing privilege – and though I left early, I was transformed by my years at Harvard, the friendships I made, and the ideas I worked on.


But taking a serious look back … I do have one big regret.


I left Harvard with no real awareness of the awful inequities in the world – the appalling disparities of health, and wealth, and opportunity that condemn millions of people to lives of despair.


I learned a lot here at Harvard about new ideas in economics and politics. I got great exposure to the advances being made in the sciences.


But humanity’s greatest advances are not in its discoveries – but in how those discoveries are applied to reduce inequity. Whether through democracy, strong public education, quality health care, or broad economic opportunity – reducing inequity is the highest human achievement.


I left campus knowing little about the millions of young people cheated out of educational opportunities here in this country. And I knew nothing about the millions of people living in unspeakable poverty and disease in developing countries.


It took me decades to find out.


You graduates came to Harvard at a different time. You know more about the world’s inequities than the classes that came before. In your years here, I hope you’ve had a chance to think about how – in this age of accelerating technology – we can finally take on these inequities, and we can solve them.


Imagine, just for the sake of discussion, that you had a few hours a week and a few dollars a month to donate to a cause – and you wanted to spend that time and money where it would have the greatest impact in saving and improving lives. Where would you spend it?


For Melinda and for me, the challenge is the same: how can we do the most good for the greatest number with the resources we have.


During our discussions on this question, Melinda and I read an article about the millions of children who were dying every year in poor countries from diseases that we had long ago made harmless in this country. Measles, malaria, pneumonia, hepatitis B, yellow fever. One disease I had never even heard of, rotavirus, was killing half a million kids each year – none of them in the United States.


We were shocked. We had just assumed that if millions of children were dying and they could be saved, the world would make it a priority to discover and deliver the medicines to save them. But it did not. For under a dollar, there were interventions that could save lives that just weren’t being delivered.


If you believe that every life has equal value, it’s revolting to learn that some lives are seen as worth saving and others are not. We said to ourselves: “This can’t be true. But if it is true, it deserves to be the priority of our giving.”


So we began our work in the same way anyone here would begin it. We asked: “How could the world let these children die?”


The answer is simple, and harsh. The market did not reward saving the lives of these children, and governments did not subsidize it. So the children died because their mothers and their fathers had no power in the market and no voice in the system.


But you and I have both.


We can make market forces work better for the poor if we can develop a more creative capitalism – if we can stretch the reach of market forces so that more people can make a profit, or at least make a living, serving people who are suffering from the worst inequities. We also can press governments around the world to spend taxpayer money in ways that better reflect the values of the people who pay the taxes.


If we can find approaches that meet the needs of the poor in ways that generate profits for business and votes for politicians, we will have found a sustainable way to reduce inequity in the world. This task is open-ended. It can never be finished. But a conscious effort to answer this challenge will change the world.


I am optimistic that we can do this, but I talk to skeptics who claim there is no hope. They say: “Inequity has been with us since the beginning, and will be with us till the end – because people just … don’t … care.” I completely disagree.


I believe we have more caring than we know what to do with.


All of us here in this Yard, at one time or another, have seen human tragedies that broke our hearts, and yet we did nothing – not because we didn’t care, but because we didn’t know what to do. If we had known how to help, we would have acted.


The barrier to change is not too little caring; it is too much complexity.


To turn caring into action, we need to see a problem, see a solution, and see the impact. But complexity blocks all three steps.


Even with the advent of the Internet and 24-hour news, it is still a complex enterprise to get people to truly see the problems. When an airplane crashes, officials immediately call a press conference. They promise to investigate, determine the cause, and prevent similar crashes in the future.


But if the officials were brutally honest, they would say: “Of all the people in the world who died today from preventable causes, one half of one percent of them were on this plane. We’re determined to do everything possible to solve the problem that took the lives of the one half of one percent.”


The bigger problem is not the plane crash, but the millions of preventable deaths.


We don’t read much about these deaths. The media covers what’s new – and millions of people dying is nothing new. So it stays in the background, where it’s easier to ignore. But even when we do see it or read about it, it’s difficult to keep our eyes on the problem. It’s hard to look at suffering if the situation is so complex that we don’t know how to help. And so we look away.


If we can really see a problem, which is the first step, we come to the second step: cutting through the complexity to find a solution.


Finding solutions is essential if we want to make the most of our caring. If we have clear and proven answers anytime an organization or individual asks “How can I help?,” then we can get action – and we can make sure that none of the caring in the world is wasted. But complexity makes it hard to mark a path of action for everyone who cares — and that makes it hard for their caring to matter.


Cutting through complexity to find a solution runs through four predictable stages: determine a goal, find the highest-leverage approach, discover the ideal technology for that approach, and in the meantime, make the smartest application of the technology that you already have — whether it’s something sophisticated, like a drug, or something simpler, like a bednet.


The AIDS epidemic offers an example. The broad goal, of course, is to end the disease. The highest-leverage approach is prevention. The ideal technology would be a vaccine that gives lifetime immunity with a single dose. So governments, drug companies, and foundations fund vaccine research. But their work is likely to take more than a decade, so in the meantime, we have to work with what we have in hand – and the best prevention approach we have now is getting people to avoid risky behavior.


Pursuing that goal starts the four-step cycle again. This is the pattern. The crucial thing is to never stop thinking and working – and never do what we did with malaria and tuberculosis in the 20th century – which is to surrender to complexity and quit.


The final step – after seeing the problem and finding an approach – is to measure the impact of your work and share your successes and failures so that others learn from your efforts.


You have to have the statistics, of course. You have to be able to show that a program is vaccinating millions more children. You have to be able to show a decline in the number of children dying from these diseases. This is essential not just to improve the program, but also to help draw more investment from business and government.


But if you want to inspire people to participate, you have to show more than numbers; you have to convey the human impact of the work – so people can feel what saving a life means to the families affected.


I remember going to Davos some years back and sitting on a global health panel that was discussing ways to save millions of lives. Millions! Think of the thrill of saving just one person’s life – then multiply that by millions. … Yet this was the most boring panel I’ve ever been on – ever. So boring even I couldn’t bear it.


What made that experience especially striking was that I had just come from an event where we were introducing version 13 of some piece of software, and we had people jumping and shouting with excitement. I love getting people excited about software – but why can’t we generate even more excitement for saving lives?


You can’t get people excited unless you can help them see and feel the impact. And how you do that – is a complex question.


Still, I’m optimistic. Yes, inequity has been with us forever, but the new tools we have to cut through complexity have not been with us forever. They are new – they can help us make the most of our caring – and that’s why the future can be different from the past.


The defining and ongoing innovations of this age – biotechnology, the computer, the Internet – give us a chance we’ve never had before to end extreme poverty and end death from preventable disease.


Sixty years ago, George Marshall came to this commencement and announced a plan to assist the nations of post-war Europe. He said: “I think one difficulty is that the problem is one of such enormous complexity that the very mass of facts presented to the public by press and radio make it exceedingly difficult for the man in the street to reach a clear appraisement of the situation. It is virtually impossible at this distance to grasp at all the real significance of the situation.”


Thirty years after Marshall made his address, as my class graduated without me, technology was emerging that would make the world smaller, more open, more visible, less distant.


The emergence of low-cost personal computers gave rise to a powerful network that has transformed opportunities for learning and communicating.


The magical thing about this network is not just that it collapses distance and makes everyone your neighbor. It also dramatically increases the number of brilliant minds we can have working together on the same problem – and that scales up the rate of innovation to a staggering degree.


At the same time, for every person in the world who has access to this technology, five people don’t. That means many creative minds are left out of this discussion — smart people with practical intelligence and relevant experience who don’t have the technology to hone their talents or contribute their ideas to the world.


We need as many people as possible to have access to this technology, because these advances are triggering a revolution in what human beings can do for one another. They are making it possible not just for national governments, but for universities, corporations, smaller organizations, and even individuals to see problems, see approaches, and measure the impact of their efforts to address the hunger, poverty, and desperation George Marshall spoke of 60 years ago.


Members of the Harvard Family: Here in the Yard is one of the great collections of intellectual talent in the world.


What for?


There is no question that the faculty, the alumni, the students, and the benefactors of Harvard have used their power to improve the lives of people here and around the world. But can we do more? Can Harvard dedicate its intellect to improving the lives of people who will never even hear its name?


Let me make a request of the deans and the professors – the intellectual leaders here at Harvard: As you hire new faculty, award tenure, review curriculum, and determine degree requirements, please ask yourselves:


Should our best minds be dedicated to solving our biggest problems?


Should Harvard encourage its faculty to take on the world’s worst inequities? Should Harvard students learn about the depth of global poverty … the prevalence of world hunger … the scarcity of clean water …the girls kept out of school … the children who die from diseases we can cure?


Should the world’s most privileged people learn about the lives of the world’s least privileged?


These are not rhetorical questions – you will answer with your policies.


My mother, who was filled with pride the day I was admitted here – never stopped pressing me to do more for others. A few days before my wedding, she hosted a bridal event, at which she read aloud a letter about marriage that she had written to Melinda. My mother was very ill with cancer at the time, but she saw one more opportunity to deliver her message, and at the close of the letter she said: “From those to whom much is given, much is expected.”


When you consider what those of us here in this Yard have been given – in talent, privilege, and opportunity – there is almost no limit to what the world has a right to expect from us.


In line with the promise of this age, I want to exhort each of the graduates here to take on an issue – a complex problem, a deep inequity, and become a specialist on it. If you make it the focus of your career, that would be phenomenal. But you don’t have to do that to make an impact. For a few hours every week, you can use the growing power of the Internet to get informed, find others with the same interests, see the barriers, and find ways to cut through them.


Don’t let complexity stop you. Be activists. Take on the big inequities. It will be one of the great experiences of your lives.


You graduates are coming of age in an amazing time. As you leave Harvard, you have technology that members of my class never had. You have awareness of global inequity, which we did not have. And with that awareness, you likely also have an informed conscience that will torment you if you abandon these people whose lives you could change with very little effort. You have more than we had; you must start sooner, and carry on longer.


Knowing what you know, how could you not?


And I hope you will come back here to Harvard 30 years from now and reflect on what you have done with your talent and your energy. I hope you will judge yourselves not on your professional accomplishments alone, but also on how well you have addressed the world’s deepest inequities … on how well you treated people a world away who have nothing in common with you but their humanity.


Good luck.













好烂啊有点差凑合看看还不错很精彩 (No Ratings Yet)