b. 22 Apr. 1758, 6th surv. s. of Thomas Cochrane†, 8th Earl of Dundonald [S], by 2nd w. Jane, da. of Archibald Stuart of Torrance, Lanark; bro. of Hons. Andrew James Cochrane* and George Augustus Frederick Cochrane*. m. 26 Apr. 1788 at New York, Maria, da. of David Shaw, wid. of Capt. Sir Jacob Wheate, 5th Bt., RN, 3s. 2da. KB 29 Mar. 1806; GCB 2 Jan. 1815.
Lt. RN 1778, cdr. 1780, capt. 1782 (half-pay 1783-90), paid off 1802; r.-adm. 1804, v.-adm. 1809, adm. 1819.
C.-in-c. Leewards 1805; gov. and c.-in-c. Guadeloupe 1810-14; c.-in-c. N. America 1814-15; c.-in-c. Plymouth 1821-4.
Cochrane was involved in a double return in 1802, but was preferred by the House to his cousin Sir John Henderson on petition. On 28 June 1803 he voiced naval officers' discontent with the King's proctor's expensive handling of their prize cases in the court of Admiralty. He resumed active service in 1803, was promoted rear-admiral in 1804, serving off Ferrol, whence he unsuccessfully chased a French squadron to the West Indies, and was subsequently in command of the Leeward station. Cochrane's having the West Indian command on Lord Melville's recommendation was reported to have been opposed by the King in his spleen against Melville, February 1805.3 He distinguished himself at the battle of St. Domingo, 6 Feb. 1806, and was thanked by Parliament, given the freedom of London and knighted for his services. He had been listed a supporter of Pitt's second ministry. There was some doubt as to his candidature in 1806. In his absence he was to have been replaced as candidate for Stirling Burghs by his nephew Maj. Basil Cochrane, but he decided to stand for re-election, only to be defeated. He was also defeated at Fowey, where John Teed* made him his nominal running partner.
At the time of the 1807 election, Cochrane was reducing the Danish islands in the West Indies. He again received public thanks for his part in the reduction of Martinique (1809) and Guadeloupe (1810) and at the next dissolution was governor of Guadeloupe. From 1815, when he returned from blockading the United States, he was unemployed and again aspired to a seat. A member of the Pitt Club of Scotland, he thought he stood a good chance against Lord Archibald Hamilton in Lanarkshire, with ministerial support promised by Lord Melville. He canvassed in November 1816. At the election of 1818 his qualification was called into question and he could ill afford his defeat.4 In January 1819 he was rumoured to be standing at the Westminster by-election, but nothing came of it.5 He died at Paris, 26 Jan. 1832.
1. SRO GD46/17/7, Dundonald to Stewart, 26 Aug. 1789.
2. Markham Corresp. (Navy Recs. Soc. xxviii), 153; St. Vincent Letters (idem. lxi), 253.
3. Add. 51570, Hamilton to Holland, 13 Feb. .
4. NLS mss 2265, ff. 98, 104, 153; Edinburgh Advertiser, 27 Mar., 12 June, 7 July 1818.
5. Grey mss, Lambton to Grey [15 Jan. 1819].


About Pharala- Nestled in the heart of the Indian Punjab's Doaba region, Pharala is an old and famous village that has the distinction of being blessed by the Seventh Sikh Guru Har Rai Ji. This picturesque village is situated on the Mahilpur – Phagwara road. It is 15 kms from Phagwara and 23 kms from Mahilpur. Pharala is surrounded by the villages of Behram, Jassomajara, Munna, Ghummnan, Bharoli, Sandhwan, and Anokharwal. Sandhwan village has a historic relationship with Pharala, and although the villages are two kilometeres apart, they have both been known since olden times by the joint name "Sandhwan , Pharala".
In Pharala everyone goes by the family nickname, or "ull" which passes on from one generation to the next. These "ulls" distinguish the different group of families, and help to locate the roots of the family in genealogy. The most common last name in Pharala is Atwal. Some other common last names in the village are Sahota, Bal, Gill, Pannu, Mattu, Chumber, Uppal, Sandhu, Sangar, Bansal, Bagga, Maan, Nijjar, Bali, Awasthi, Shreedhar, Talwar, Abrol, Bhagirath etc.
A very beautiful and historic Gurudwara along with a spacious Langar hall stands in the village. This Gurudwara bears the name of Guru Har Rai Sahib ji, who visited this place during the Mughal era on the course of his journey to Shri Anandpur Sahib. Historical Shiv Mandir, Gurdwara Lasurha Sahib, Dera Dudha-Dhari, Bhajan Dass di Jaga, Masjid, Guru Ravidas & Balmik Mandir, Jattheras and many other places of worship of different faiths exist here. Nagar-Kirtans, Parbhat-Pheries, and other processions taken out jointly by the different communities during religious occasions speak of the good religious harmony prevailing in the village.Pharala is proud to be the home of a government run school since 1882. The Government School Pharala has been the largest learning center in the area since the British Era. The NRI'S of the village have contributed largely for uplifting modern education in the village. Spacious buildings for the Senior-Secondary School and Middle School for girls, with up to date modern facilities have been provided. A vast stadium and a playground adjoining the school are available for student players and general tournaments. The sports club organizes tournaments for Kabaddi, Shinj, Volleyball, Hockey, Cricket, Wrestling and Weight lifting etc. every year. Volleyball is one of the most favorite game of the village and the village has produced many national level players. Shri Guru Har Rai Sahib Gym club in the school campus has all the state of the art exercise equipment. This club was started by initiative of Pharalites living in England .
Certain places in the village are popular for get- together during leisure time . These are Gawala Khooh, Bazaar Main street , Tharha etc. Youth and seniors play cards at these places during summer afternoons. ,Seep' and ,Bhabhi' are the most popular cards games. Chess is also played by a few seniors and youth. The festivals like Vaisakhi, Diwali, Dushera and Gurpurabs etc are celebrated in the village jointly by all with great enthusiasm, pomp and show. Nagar-Kirtans, Parbhat-Pheries, Jago, and other processions taken out jointly by the different communities during religious occasions speak of the good religious harmony prevailing in the village.
By dint of their enterprise and their unswerving hard work the inhabitants of Pharala have brought glory to its name not only in India but across the seven seas as well.


text:
Clinical & Rare Disease
Precision Medicine & Genetics
Student Abstracts
2015 Internship Project & Abstract - Matthew Schield
An Exome Wide Genotyping Study using SNP-, Gene-, and Pathway-Based Approaches to Identify Genes Influencing Susceptibility to Staphylococcus aureus Infections
Matthew Schield
Matthew P. Schield1, Zhan (Harold) Ye2, Steven J. Schrodi1, Sanjay K. Shukla1
1Center for Human Genetics, 2Biomedical Informatics Research Center
Research area: Genetics
Background: S. aureus is a leading cause of invasive bacterial infections, and is a major source of mortality and morbidity around the world. Approximately 30-50% of the general population is colonized by this bacterium, however, only a small percentage will acquire a medically-attended infection. In this genomic association study, we tested variants across the exome within a cohort of 4572 individuals in Marshfield Clinic's Personalized Medicine Research Project to identify inherited factors that could lead to susceptibility of S. aureus infections.
Methods: A case-control design was used in the study. Cases (n = 821) were individuals with microbiology laboratory confirmed S. aureus infections, and controls (n = 3751) were individuals with no history of S. aureus infections in their Electronic Medical Record at Marshfield Clinic. Cases and controls were genotyped at 370,031 single nucleotide polymorphisms (SNPs). SNP-, gene- and pathway-based analyses were done using PLINK, VEGAS2, and PANTHER, respectively.
Results: There were no SNPs that reached genome wide significance (p < 5x10-8), however, many SNPs exceeded suggestive significance of p < 10-5. Of these SNPs, 16 are biologically significant in S. aureus infections. From the gene-based analyses, 20 candidate genes were identified that are associated with S. aureus infection. Pathway analysis identified T-cell signaling, cytokine signaling, and evasion of host defenses enriched from the top 50 genes ranked by p-values.
Conclusions: Many candidate SNPs, genes, and pathways were identified that could predispose individuals to S. aureus infections. The findings support earlier conclusions that S. aureus is a complex pathogen. Replication and functional studies are needed for the SNPs and genes identified in this study to find their role in the many infection pathways used by Staphylococcus aureus.

redpajama_set_name: RedPajamaCommonCrawl


text:
import numpy.oldnumeric as Numeric

def dot(array1, array2):
    try: return array1.dot(array2)
    except AttributeError:
        try: return array2.dot(array1)
        except AttributeError:
            return Numeric.dot(array1, array2)

def sum(array):
    try:
        assignments = array.assignments()
        s = array.default() * (len(array) - len(assignments))
        for index, value in assignments:
            s += value
        return s
    except AttributeError:
        return Numeric.sum(array)

class SparseArray:
    def __init__(self, dimensions, default=0, assignments=None):
        self._default = default
        if assignments:
            self._assignments = assignments.copy()
        else:
            self._assignments = {}

        try:
            self._n = len(dimensions)
            self._assignments = {}
            for i in range(self._n):
                value = dimensions[i]
                if value != self._default:
                    self._assignments[i] = value
        except TypeError:
            self._n = dimensions

    def assignments(self):
        return self._assignments.items()

    def default(self):
        return self._default

    def as_dense_array(self):
        return Numeric.array(self)

    def dot(self, other):
        assert len(self) == len(other)
        v = 0
        try:
            indices = dict(self._assignments)
            indices.update(other._assignments)
            v += (len(self) - len(indices)) * (self._default * other._default)
            for index in indices.keys():
                v += self[index] * other[index]
        except AttributeError:
            for i in range(len(self)):
                v += self[i] * other[i]
        return v

    def matrix_multiply(self, matrix):
        shape = matrix.shape
        assert shape[0] == len(self)
        v = SparseArray(self._n, self._default)
        for i in range(len(self)):
            v[i] = self.dot(matrix[:,i])
        return v

    def matrix_multiply_transpose(self, matrix):
        shape = matrix.shape
        assert shape[1] == len(self)
        v = SparseArray(self._n, self._default)
        for i in range(len(self)):
            v[i] = self.dot(matrix[i])
        return v

    def as_dense_array(self):
        return Numeric.array(self)

    def add_to(self, dense_array):
        if self._default:
            for index in range(len(self)):
                dense_array[index] += self[index]
        else:
            for index, value in self._assignments.items():
                dense_array[index] += value

    def subtract_from(self, dense_array):
        if self._default:
            for index in range(len(self)):
                dense_array[index] -= self[index]
        else:
            for index, value in self._assignments.items():
                dense_array[index] -= value

    def __len__(self):
        return self._n

    def __getitem__(self, i):
        if i >= 0 and i < self._n:
            return self._assignments.get(i, self._default)
        else:
            raise IndexError('index out of range')

    def __setitem__(self, i, v):
        if i >= 0 and i < self._n:
            if v != self._default:
                self._assignments[i] = v
            elif self._assignments.has_key(i):
                del self._assignments[i]
        else:
            raise IndexError('index out of range')

    def __add__(self, other):
        try:
            assert len(self) == len(other)
            try:
                # do an element-wise addition using sparse vectors
                v = SparseArray(self._n, self._default + other._default)
                indices = dict(self._assignments)
                indices.update(other._assignments)
                for index in indices.keys():
                    v[index] = self[index] + other[index]
            except AttributeError:
                # do an element-wise addition with a sequence
                # [FIXME] - v prolly shouldn't be sparse, but need to [:] or
                # copy to interface with sequences and Numeric arrays
                v = SparseArray(self._n, self._default)
                for index in range(len(self)):
                    v[index] = self[index] + other[index]
        except TypeError:
            # addition with a scalar
            v = SparseArray(self._n, self._default + other)
            for index, value in self._assignments.items():
                v[index] = self[index] + other
        return v

    def __div__(self, other):
        try:
            assert len(self) == len(other)
            try:
                # do an element-wise division using sparse vectors
                v = SparseArray(self._n, self._default / other._default)
                indices = dict(self._assignments)
                indices.update(other._assignments)
                for index in indices.keys():
                    v[index] = self[index] / other[index]
            except AttributeError:
                # do an element-wise division with a sequence
                # [FIXME] - v prolly shouldn't be sparse, but need to [:] or
                # copy to interface with sequences and Numeric arrays
                v = SparseArray(self._n, self._default)
                for index in range(len(self)):
                    v[index] = self[index] / other[index]
        except TypeError:
            # divide by a scalar
            v = SparseArray(self._n, self._default / other)
            for index, value in self._assignments.items():
                v[index] = self[index] / other
        return v

    def __mul__(self, other):
        try:
            assert len(self) == len(other)
            try:
                # do an element-wise multiplication using sparse vectors
                v = SparseArray(self._n, self._default * other._default)
                indices = dict(self._assignments)
                indices.update(other._assignments)
                for index in indices.keys():
                    v[index] = self[index] * other[index]
            except AttributeError:
                # do an element-wise multiplication with a sequence
                # [FIXME] - v prolly shouldn't be sparse, but need to [:] or
                # copy to interface with sequences and Numeric arrays
                v = SparseArray(self._n, self._default)
                for index in range(len(self)):
                    v[index] = self[index] * other[index]
        except TypeError:
            # multiply by a scalar
            v = SparseArray(self._n, self._default * other)
            for index, value in self._assignments.items():
                v[index] = self[index] * other
        return v

    def __sub__(self, other):
        try:
            assert len(self) == len(other)
            try:
                # do an element-wise subtraction using sparse vectors
                v = SparseArray(self._n, self._default - other._default)
                indices = dict(self._assignments)
                indices.update(other._assignments)
                for index in indices.keys():
                    v[index] = self[index] - other[index]
            except AttributeError:
                # do an element-wise subtraction with a sequence
                # [FIXME] - v prolly shouldn't be sparse, but need to [:] or
                # copy to interface with sequences and Numeric arrays
                v = SparseArray(self._n, self._default)
                for index in range(len(self)):
                    v[index] = self[index] - other[index]
        except TypeError:
            # subtract a scalar
            v = SparseArray(self._n, self._default - other)
            for index, value in self._assignments.items():
                v[index] = self[index] - other
        return v

    def __pow__(self, other):
        try:
            assert len(self) == len(other)
            try:
                # do an element-wise power using sparse vectors
                v = SparseArray(self._n, self._default ** other._default)
                indices = dict(self._assignments)
                indices.update(other._assignments)
                for index in indices.keys():
                    v[index] = self[index] - other[index]
            except AttributeError:
                # do an element-wise power with a sequence
                # [FIXME] - v prolly shouldn't be sparse, but need to [:] or
                # copy to interface with sequences and Numeric arrays
                v = SparseArray(self._n, self._default)
                for index in range(len(self)):
                    v[index] = self[index] ** other[index]
        except TypeError:
            # to power of a scalar
            v = SparseArray(self._n, self._default ** other)
            for index, value in self._assignments.items():
                v[index] = self[index] ** other
        return v

    def __iadd__(self, other):
        try:
            assert len(self) == len(other)
            try:
                # do an element-wise addition using sparse vectors
                self._default += other._default
                indices = dict(self._assignments)
                indices.update(other._assignments)
                for index in indices.keys():
                    self[index] += other[index]
            except AttributeError:
                # do an element-wise addition with a sequence
                # [FIXME] - v prolly shouldn't be sparse, but need to [:] or
                # copy to interface with sequences and Numeric arrays
                for index in range(len(self)):
                    self[index] += other[index]
        except TypeError:
            # addition with a scalar
            self._default += other
            for index in self._assignments.keys():
                self[index] += other
        return self

    def __isub__(self, other):
        try:
            assert len(self) == len(other)
            try:
                # do an element-wise subtraction using sparse vectors
                self._default -= other._default
                indices = dict(self._assignments)
                indices.update(other._assignments)
                for index in indices.keys():
                    self[index] -= other[index]
            except AttributeError:
                # do an element-wise subtraction with a sequence
                # [FIXME] - v prolly shouldn't be sparse, but need to [:] or
                # copy to interface with sequences and Numeric arrays
                for index in range(len(self)):
                    self[index] -= other[index]
        except TypeError:
            # subtraction with a scalar
            self._default -= other
            for index in self._assignments.keys():
                self[index] -= other
        return self

    def __imul__(self, other):
        try:
            assert len(self) == len(other)
            try:
                # do an element-wise multiplication using sparse vectors
                self._default *= other._default
                indices = dict(self._assignments)
                indices.update(other._assignments)
                for index in indices.keys():
                    self[index] *= other[index]
            except AttributeError:
                # do an element-wise multiplication with a sequence
                # [FIXME] - v prolly shouldn't be sparse, but need to [:] or
                # copy to interface with sequences and Numeric arrays
                for index in range(len(self)):
                    self[index] *= other[index]
        except TypeError:
            # multiply by a scalar
            self._default *= other
            for index in self._assignments.keys():
                self[index] *= other
        return self

    def __idiv__(self, other):
        try:
            assert len(self) == len(other)
            try:
                # do an element-wise division using sparse vectors
                self._default /= other._default
                indices = dict(self._assignments)
                indices.update(other._assignments)
                for index in indices.keys():
                    self[index] /= other[index]
            except AttributeError:
                # do an element-wise division with a sequence
                # [FIXME] - v prolly shouldn't be sparse, but need to [:] or
                # copy to interface with sequences and Numeric arrays
                for index in range(len(self)):
                    self[index] /= other[index]
        except TypeError:
            # division by a scalar
            self._default /= other
            for index in self._assignments.keys():
                self[index] /= other
        return self

    def __getslice__(self, start, end):
        start = min(max(start, 0), self._n)
        end = min(max(end, 0), self._n)
        if end > start:
            v = SparseArray(end - start, self._default)
            for index in self._assignments.keys():
                if start <= index < end:
                    v[index - start] = self._assignments[index]
            return v
        else:
            return []

    def __setslice__(self, start, end, values):
        start = min(max(start, 0), self._n)
        end = min(max(end, 0), self._n)
        assert len(values) == end - start, 'Cannot resize vector'
        for i in range(len(values)):
            self[start + i] = values[i]

    def __str__(self):
        return '[%s]' % ', '.join(map(str, self))

    def __repr__(self):
        return 'SparseArray(%d, %s, %s)' % (self._n, self._default,
                    self._assignments)

    __radd__ = __add__
    __rmul__ = __mul__
    __rdiv__ = __div__
    # order of operations important for these
    #__rsub__ = __sub__
    #__rpow__ = __pow__

def test():
    a = SparseArray(5, 1)
    a[0] = 10
    a[3] = 2
    print str(a), `a`
    a *= 2
    print str(a), `a`
    a += 2
    print str(a), `a`
    a /= range(1, 6)
    print str(a), `a`
    b = SparseArray(5, 3, {2:15})
    a -= b
    print str(a), `a`
    print a.dot(b), b.dot(a)
    print a.as_dense_array()
    M = Numeric.array(range(25)).resize((5,5))
    print a.matrix_multiply(M)
    print Numeric.matrixmultiply(a.as_dense_array(), M)
    print a.matrix_multiply_transpose(M)
    print Numeric.matrixmultiply(M, a.as_dense_array())
    c = SparseArray([1,2,3,4,5])
    print c, `c`

if __name__ == '__main__':
    test()

redpajama_set_name: RedPajamaGithub


text:
const fs = require(`fs`)
const request = require(`request`)
const mkdirp = require(`mkdirp`)
const ProgressBar = require(`progress`)
const { get } = require(`lodash`)
const download = require(`./utils/download-file`)

const username = process.argv[2]

if (!username) {
  console.log(
    `
You didn't supply an Instagram username!
Run this command like:

node scrape.js INSTAGRAM_USERNAME
    `
  )
  process.exit()
}

// Convert timestamp to ISO 8601.
const toISO8601 = timestamp => new Date(timestamp * 1000).toJSON()

// Create the progress bar
const bar = new ProgressBar(
  `Downloading instagram posts [:bar] :current/:total :elapsed secs :percent`,
  {
    total: 0,
    width: 30,
  }
)

// Create the images directory
mkdirp.sync(`./data/images`)

let posts = []
let userId

// Write json
const saveJSON = _ =>
  fs.writeFileSync(`./data/posts.json`, JSON.stringify(posts, ``, 2))

const getPosts = maxId => {
  let url = `https://www.instagram.com/${username}/?__a=1`
  let url2 = `https://www.instagram.com/graphql/query/?query_hash=472f257a40c653c64c666ce877d59d2b`

  if (maxId) url = url2 + `&variables={"id":"${userId}","first":12,"after":"${maxId}"}`

  request(url, { encoding: `utf8` }, (err, res, body) => {
    if (err) console.log(`error: ${err}`)
    if (maxId) {
       body = JSON.parse(body).data
    } else {
       //This is the first request, lets get the userId
       body = JSON.parse(body).graphql
       userId = body.user.id
    }
    body.user.edge_owner_to_timeline_media.edges
      .filter(({ node: item }) => item[`__typename`] === `GraphImage`)
      .map(({ node: item }) => {
        // Parse item to a simple object
        return {
          id: get(item, `id`),
          code: get(item, `shortcode`),
          time: toISO8601(get(item, `taken_at_timestamp`)),
          type: get(item, `__typename`),
          likes: get(item, `edge_liked_by.count`),
          comment: get(item, `edge_media_to_comment.count`),
          text: get(item, `edge_media_to_caption.edges[0].node.text`),
          media: get(item, `display_url`),
          image: `images/${item.shortcode}.jpg`,
          username: get(body, `user.username`),
          avatar: get(body, `user.profile_pic_url`),
        }
      })
      .forEach(item => {
        if (posts.length >= 100) return

        // Download image locally and update progress bar
        bar.total++
        download(item.media, `./data/images/${item.code}.jpg`, _ => bar.tick())

        // Add item to posts
        posts.push(item)
      })

    const lastId = get(body, `user.edge_owner_to_timeline_media.page_info.end_cursor`)
    if (posts.length < 100 && lastId) getPosts(lastId)
    else saveJSON()
  })
}

getPosts()


» Rescue of washed cells in surgical patients: review and meta-analysis of prospective randomized studies under PRISMA.
Meybohm P, Choorapoikayil S, Wessels A, Herrmann E, Zacharowski K, Spahn DR.
Medicine (Baltimore). 2016 Aug;95(31):e4490. doi: 10.1097/MD.0000000000004490. Review.


text:
Cloud computing: Why 2011 is the year to say 'do it'
by Tim Ferguson in CIO Insights , in Data Centers on January 12, 2011, 10:39 PM PST
What the year will hold for software, infrastructure and platform as a service
Could 2011 be the breakthrough year for cloud computing?
Offering users the benefits of more predictable IT costs, ease of implementation and greater flexibility, cloud computing has generated huge interest in the last couple of years but adoption has been slowed by concerns around the security and reliability of cloud services.
Analyst Gartner predicts that total revenue for cloud services in 2011 will be $81.3bn compared to $68.3bn in 2010, a 19 per cent increase. And that revenue is forecast to increase to $148.8bn by 2014.
Yet the cloud computing market remains a tiny fraction of the entire IT market: Gartner forecasts IT spending in 2011 will be $3.6tr, which means cloud computing will account for a mere 2.3 per cent of the global market.
"[Cloud computing is] tiny if you compare it with the entire IT market, so there's still a lot of room for growth and it also explains the high rate of growth," Laurent Lachal, senior analyst at Ovum told silicon.com.
But 2011 could be the year in which businesses move from merely talking about cloud computing to putting at least some of their IT services into the cloud.
"The market as a whole has moved, in the past 18 months, from 'what the hell is cloud computing?' to 'what do I do with it, how do I take advantage of it?' 2011 will be much more a 'let's do it' year, while 2010 was still a 'let's get to know about it' year," Lachal said.
Cloud computing has been talked about for several years but 2011 could see more businesses actually adopt the technology
(Photo credit: Shutterstock)
Cloud computing is a broad term which covers a number of variations of technology: software as a service; infrastructure as a service; private cloud; and platform as a service, each of which will have differing fortunes over the next year.
Software as a service (SaaS), in which applications are hosted by vendors and delivered to customers over the internet, is the most mature of the cloud computing technologies. Some SaaS providers have been around for more than a decade.
Of particular interest in 2011 will be how the incumbent SaaS providers – such as Google and Netsuite - develop their products and their user base in the face of new competition from companies, such as SAP, that previously only offered on-premise versions of their products. In general, however, analysts are expecting steady growth in the market during the year.
Infrastructure as a service – public cloud
While SaaS continues its steady march, the cloud computing area with greatest potential for growth in 2011 is infrastructure as a service, according to analysts.
This area of cloud computing allows organisations to...
TechRepublic Premium: The best IT policies, templates, and tools, for today and tomorrow.
The best programming languages to learn in 2022
Check for Log4j vulnerabilities with this simple-to-use script
TasksBoard is the kanban interface for Google Tasks you've been waiting for
Paging Zefram Cochrane: Humans have figured out how to make a warp bubble
2022 tech conferences and events to add to your calendar
Comment and share: Cloud computing: Why 2011 is the year to say 'do it'
Data Centers Hardware Virtualization Networking Storage Cloud Data Centers on ZDNet
| Commenting FAQs | Community Guidelines