Computer science must be at the center of software systems development. If it is not, we must rely on individual experience and rules of thumb, ending up with less capable, less reliable systems, developed and maintained at unnecessarily high cost. We need changes in education to allow for improvements of industrial practice.
In many places, there is a disconnect between computer science education and what industry needs. Consider the following exchange:
Famous CS professor (proudly): "We don't teach programming; we teach computer science."
Industrial manager: "They can't program their way out of a paper bag."
In many cases, they are both right, and not just at a superficial level. It is not the job of academia just to teach run-of-the-mill programmers and the needs of industry are not just for "well-rounded high-level thinkers" and "scientists."
Another CS professor: "I never code."
Another industrial manager: "We don't hire CS graduates; it's easier to teach a physicist to program than to teach a CS graduate physics."
Both have a point, but in an ideal world, both would be fundamentally misguided. The professor is wrong in that you can't teach what you don't practice (and in many cases, never have practiced) and therefore don't understand, whereas the industrial manager is right only when the requirements for software quality are set so absurdly low that physicists (and others untrained in CS) can cope. Obviously, I'm not referring to physicists who have devoted significant effort to also master computer sciencesuch combinations of skills are among my ideals.
CS professor (about a student): "He accepted a job in industry."
Another CS professor: "Sad; he showed so much promise."
This disconnect is at the root of many problems and complicates attempts to remedy them.
Industry wants computer science graduates to build software (at least initially in their careers). That software is often part of a long-lived code base and used for embedded or distributed systems with high reliability requirements. However, many graduates have essentially no education or training in software development outside their hobbyist activities. In particular, most see programming as a minimal effort to complete homework and rarely take a broader view that includes systematic testing, maintenance, documentation, and the use of their code by others. Also, many students fail to connect what they learn in one class to what they learn in another. Thus, we often see students with high grades in algorithms, data structures, and software engineering who nevertheless hack solutions in an operating systems class with total disregard for data structures, algorithms, and the structure of the software. The result is a poorly performing unmaintainable mess.
For many, "programming" has become a strange combination of unprincipled hacking and invoking other people's libraries (with only the vaguest idea of what's going on). The notions of "maintenance" and "code quality" are typically forgotten or poorly understood. In industry, complaints about the difficulty of finding graduates who understand "systems" and "can architect software" are common and reflect reality.
Complaining about software is a popular pastime, but much software has become better over the last decade, exactly as it improved in previous decades. Unfortunately, the improvements have come at tremendous cost in terms of human effort and computer resources. Basically, we have learned how to build reasonably reliable systems out of unreliable parts by adding endless layers of runtime checks and massive testing. The structure of the code itself has sometimes changed, but not always for the better. Often, the many layers of software and the intricate dependencies common in designs prevent an individualhowever competentfrom fully understanding a system. This bodes ill for the future: we do not understand and cannot even measure critical aspects of our systems.
There are of course system builders who have resisted the pressures to build bloated, ill-understood systems. We can thank them when our computerized planes don't crash, our phones work, and our mail arrives on time. They deserve praise for their efforts to make software development a mature and trustworthy set of principles, tools, and techniques. Unfortunately, they are a minority and bloatware dominates most people's impression and thinking.
Similarly, there are educators who have fought the separation of theory and industrial practice. They too deserve praise and active support. In fact, every educational institution I know of has programs aimed at providing practical experience and some professors have devoted their lives to making successes of particular programs. However, looking at the larger picture, I'm unimpresseda couple of projects or internships are a good start, but not a substitute for a comprehensive approach to a balanced curriculum. Preferring the labels "software engineering" or "IT" over "CS" may indicate differences in perspective, but problems have a nasty way of reemerging in slightly different guises after a move to a new setting.
My characterizations of "industry" and "academia" border on caricature, but I'm confident that anyone with a bit of experience will recognize parts of reality reflected in them. My perspective is that of an industrial researcher and manager (24 years at AT&T Bell Labs, seven of those as department head) who has now spent six years in academia (in a CS department of an engineering school). I travel a lot, having serious discussions with technical and managerial people from several dozen (mostly U.S.) companies every year. I see the mismatch between what universities produce and what industry needs as a threat to both the viability of CS and to the computing industry.
Many organizations that rely critically on computing have become dangerously low on technical skills.
So what can we do? Industry would prefer to hire "developers" fully trained in the latest tools and techniques whereas academia's greatest ambition is to produce more and better professors. To make progress, these ideals must become better aligned. Graduates going to industry must have a good grasp of software development and industry must develop much better mechanisms for absorbing new ideas, tools, and techniques. Inserting a good developer into a culture designed to prevent semi-skilled programmers from doing harm is pointless because the new developer will be constrained from doing anything significantly new and better.
Let me point to the issue of scale. Many industrial systems consist of millions of lines of code, whereas a student can graduate with honors from top CS programs without ever writing a program larger than 1,000 lines. All major industrial projects involve several people whereas many CS programs value individual work to the point of discouraging teamwork. Realizing this, many organizations focus on simplifying tools, techniques, languages, and operating procedures to minimize the reliance on developer skills. This is wasteful of human talent and effort because it reduces everybody to the lowest common denominator.
Industry wants to rely on tried-and-true tools and techniques, but is also addicted to dreams of "silver bullets," "transformative breakthroughs," "killer apps," and so forth. They want to be able to operate with minimally skilled and interchangeable developers guided by a few "visionaries" too grand to be bothered by details of code quality. This leads to immense conservatism in the choice of basic tools (such as programming languages and operating systems) and a desire for monocultures (to minimize training and deployment costs). In turn, this leads to the development of huge proprietary and mutually incompatible infrastructures: Something beyond the basic tools is needed to enable developers to produce applications and platform purveyors want something to lock in developers despite the commonality of basic tools. Reward systems favor both grandiose corporate schemes and short-term results. The resulting costs are staggering, as are the failure rates for new projects.
Faced with that industrial realityand other similar deterrentsacademia turns in on itself, doing what it does best: carefully studying phenomena that can be dealt with in isolation by a small group of like-minded people, building solid theoretical foundations, and crafting perfect designs and techniques for idealized problems. Proprietary tools for dealing with huge code bases written in archaic styles don't fit this model. Like industry, academia develops reward structures to match. This all fits perfectly with a steady improvement of smokestack courses in well-delineated academic subjects. Thus, academic successes fit industrial needs like a square peg in a round hole and industry has to carry training costs as well as development costs for specialized infrastructures.
Someone always suggests "if industry just paid developers a decent salary, there would be no problem." That might help, but paying more for the same kind of work is not going to help much; for a viable alternative, industry needs better developers. The idea of software development as an assembly line manned by semi-skilled interchangeable workers is fundamentally flawed and wasteful. It pushes the most competent people out of the field and discourages students from entering it. To break this vicious circle, academia must produce more graduates with relevant skills and industry must adopt tools, techniques, and processes to utilize those skills.
 CS is not primarily about computers and it is not primarily a science. Rather it is about uses of computers and about ways of working and thinking that involves computation ("algorithmic and quantitative thinking"). It combines aspects of science, math, and engineering, often using computers. For almost all people in CS, it is an applied field"pure CS," isolated from application, is typically sterile.
What distinguishes a CS person building an application from a professional in some other field (such as medicine or physics) building one? The answer must "be mastery of the core of CS." What should that "core" be? It would contain much of the established CS curriculumalgorithms, data structures, machine architecture, programming (principled), some math (primarily to teach proof-based and quantitative reasoning), and systems (such as operating systems and databases). To integrate that knowledge and to get an idea of how to handle larger problems, every student must complete several group projects (you could call that basic software engineering). It is essential that there is a balance between the theoretical and the practicalCS is not just principles and theorems, and it is not just hacking code.
This core is obviously far more "computer-oriented" than the computing field as a whole. Therefore, nobody should be called a computer scientist without adding a specialization within CS (for example, graphics, networking, software architecture, human-machine interactions, security). However that's still not enough. The practice of computer science is inherently applied and interdisciplinary, so every CS professional should have the equivalent to a minor in some other field (for example, physics, medical engineering, history, accountancy, French literature).
Experienced educators will observe: "But this is impossible! Hardly any students could master all that in four years." Those educators are right: something has to give. My suggestion is that the first degree qualifying to practice as a computers scientist should be a master'sand a master's designed as a wholenot as a bachelor's degree with an appended final year or two. People who plan to do research will as usual aim for a Ph.D.
Many professors will object: "I don't have the time to program!" However, I think that professors who teach students who want to become software professionals will have to make time and their institutions must find ways to reward them for programming. The ultimate goal of CS is to help produce better systems. Would you trust someone who had not seen a patient for years to teach surgery? What would you think of a piano teacher who never touched the keyboard? A CS education must bring a student beyond the necessary book learning to a mastery of its application in complete systems and an appreciation of aesthetics in code.
I use the word "professional." That's a word with many meanings and implications. In fields like medicine and engineering, it implies licensing. Licensing is a very tricky and emotional topic. However, our civilization depends on software. Is it reasonable that essentially anyone can modify a critical body of code based on personal taste and corporate policies? If so, will it still be reasonable in 50 years? Is it reasonable that pieces of software on which millions of people depend come without warranties? The real problem is that professionalism enforced through licensing depends on having a large shared body of knowledge, tools, and techniques. A licensed engineer can certify that a building has been constructed using accepted techniques and materials. In the absence of a widely accepted outline of CS competence (as I suggested earlier), I don't know how to do that for a software application. Today, I wouldn't even know how to select a group of people to design a licensing test (or realistically a set of tests for various subspecialties, like the medical boards).
What can industry do to close the gap? It is much more difficult to characterize "industry" and "industrial needs" than to talk about academia. After all, academia has a fairly standard structure and fairly standard approaches to achieving its goals. Industry is far more diverse: large or small, commercial or non-profit, sophisticated or average in their approach to system building, and so forth. Consequently, I can't even begin to prescribe remedies. However, I have one observation that related directly to the academia/industry gap: Many organizations that rely critically on computing have become dangerously low on technical skills:
Industrial manager: "The in-sourcing of technical expertise is critical for survival."
No organization can remain successful without an institutional memory and an infrastructure to recruit and develop new talent. Increasing collaboration with academics interested in software development might be productive for both parties. Collaborative research and an emphasis on lifelong learning that goes beyond mere training courses could play major roles in this.
We must do better. Until we do, our infrastructure will continue to creak, bloat, and soak up resources. Eventually, some part will break in some unpredictable and disastrous way (think of Internet routing, online banking, electronic voting, and control of the electric power grid). In particular, we must shrink the academia/industry gap by making changes on both sides. My suggestion is to define a structure of CS education based on a core plus specializations and application areas, aiming eventually at licensing of software artifacts and at least some of the CS professionals who produce them. This might go hand-in-hand with an emphasis on lifelong industry/academia involvement for technical experts.
The Digital Library is published by the Association for Computing Machinery. Copyright © 2010 ACM, Inc.
Excellent article.
Re: "The idea of software development as an assembly line manned by semi-skilled interchangeable workers is fundamentally flawed and wasteful." This has been a common theme in much SDLC-related commentary. Some argue that *no* metaphor is applicable. I have more recently begun to ask whether product development is actually the appropriate metaphor. Product development and portfolio management in industry is costly, iterative, and risky process, subject to many of the same issues as software. Yet I have seen little if any exploration of potential parallels.
Charles T. Betz
Enterprise Architect
Wells Fargo Bank, N.A.
As an academic once tasked with overhauling the software engineering undergrad course, I can wholeheartedly underwrite this article. One sentence, in particular, stood out for me: "Proprietary tools for dealing with huge code bases written in archaic styles don't fit this model."
I believe that /the/ core issue is that academic computer science has a hard time working in a meaningful way on "huge code bases". Yet, as Mr. Stroustrup often mentions and I wholeheartdely agree with, scale is precisely the distinctive difference.
However, it seems that it is not entirely clear how to achieve this. My suggestion would be that we should create a meaningful incentive system for academic research. That is, some way that allows research to do its job and measure its applicability to the real world issues. I bet many academics would love to do this, instead of work on purely theoretical issues.
My suggestion how to gou about this would be to create accepted tools for dealing with large-scale code bases. Tools to measure, quantify, summarize, correlate, generalize, and more abstract analysis on top of those. Some tools in this direction are already available. We also need tools to /modify/, or maybe "refactor" such code-bases and make comparisons, so that the effect of different engineering approaches can be verified. Also, some early tools in this direction exist.
Such tools would enable researchers to work on large-scale issues, as is needed.
Last, not least and probably not easiest, collaboration with experts on the "soft" issues could enable psychologically-grounded metrics for, just as one example, API usability and complexity, so that again, the effect of different choices can be measured.
>>For many, "programming" has become a strange combination of unprincipled hacking and invoking other people's libraries (with only the vaguest idea of what's going on).<<
This is an excellent observation, and unfortunately, very true...
Bjarne makes an insightful and provocative plea for a more professional software industry. People that will write programs need to be taught by people who are skilled in detailed design, data structure, code design and all the other computer science skills. There is no excuse for Computer Science Professors not writing some code or at least being able to critically read code. The computer science education by Bjarne teaches the student to write professional programs. Fred Brooks teaches that we need another order of magnitude effort to take the program and produce a programming system product from it. This additional effort is learned in software engineering programs.
Must a software engineer be a professional programmer? i think not, but they must be taught the essentials of program design. I think that software engineers must be able to solve system problems for software intensive systems. Alternatively, these people could be called systems engineers well educated in software technologies and processes.
We need people educated in software who can solve real problems. No single standard educational course of study focuses soley on this need.
Excellent and thought provoking article. Here is a suggestion for improving the quality of CS graduates: What if the entire University were to run on the software produced by the University CS students?
Granted, this is not possible on day one, but if the University were to adopt this policy, over time, CS students would have hands on experience with real-life code bases and will learn all parts of software design and development. They will learn how to fix bugs, test, refactor code, appreciate the importance of good software coding practices. They will also learn how to add new features by interacting with customers. Professors can take actual code snippets and teach students with it. Best of all, students can see the results of their efforts before they graduate.
I bet if the University is bold enough to adopt this policy, I can guarantee that the students of this university will be highly valued by industry. This is a win-win for all: Students, Professors, University, and the Industry.
Some of the great companies have such an internal policy - all systems sold by the company must be used internally for the same purpose. Companies like Oracle, Microsoft, Amazon.com do this everyday. The University can do the same and should do this if it is serious about the quality of the CS graduates it produces.
Kiran Achyutuni,
Founder, www.mashedge.com
Interesting discussion. CS is about complexity theory, computability, algorithms, data structures, automata theory, quantum computation science, formal languages and much more. There's a whole theoretical background that is unique to CS.
Definitely, there should be separated majors, such as Software Engineering or Data and Information Management, in order to avoid misconceptions and to address industry's specific needs.
In short, CS is a basic science in wich we can learn about modelling the complex processes that occur in Nature by using abstract mathematical tools. The models we construct in CS (basically, algorithms) have to (i) be given formal descriptions and proofs; (ii) have its fundamental properties investigated (complexity bounds, completeness, etc.); and much more.
In short, CS is a basic science and other sciences can benefit from it as well by using its outocomes. An example of this is Artificial Intelligence. Although it first got inspiration from early mathematical models of the brain (neuroscience), it became clear thereafter that the 'algorithimic' way of modelling natural processess would be fundamental to AI. Today, AI is commonly regarded as a standard discipline in CS, though still multidisciplinary.
So, why not segregate the lots of teaching contents flooding CS students minds into separate majors?
Furthermore, let's not forget the revealing quote of a prominient computer scientist:
"Computer Science is no more about computers than Astronomy is about telescopes" Edsger Dijkstra
That summarizes well what CS is definitely not about.
I believe that multidisciplinarity should be raise from a well planned reform in the graduate educational system, instead of requiring that a CS major covers every single topic from software engenieering to computation theory. Both are, separetedly, deep and complex enough disciplines to be studied in their own terms.
Carlos R. B. Azevedo
MSc Candidate in CS
Center for Informatics (CIn)
Federal University of Pernambuco
Recife, Brazil
twitter.com/crbazevedo
This article is a true an eye-opener for both the academia and the industry.
I am glad to see that a professional researcher from an reputed IT company is now teaching (the author of this article) at a university. It is
an noble gesture and gives a hope that a saviour of the IT industry has emerged among us.
This is another amazing article that should shake the mindset of
both academia and industry. I do agree with the most of the views expressed by the author.
Even today, I am scared while flying in these planes controlled by a computer
that are programmed by a group of undisciplined, unlicenced, and unaccountable IT Professionals.
It is a miracle that unitl now many of these life-critical systems are running without crashing.
I do agree with the author that a "software nuclear bomb" might be lurking
deep down in some untested part of the software in these critical
systems. When a part of the software code that was untested gets executed becasue of an unforeseen real-life scenarios,
it will break havoc in human lives.
One of the Indian Medical Practioner (Dr. Devi Shetty, Narayana Hrudayala) predicted that remotely controlled
robotic surgery is possible in the future. It give me a chill through my spine to imagine that an unsuspecting patient
had to surrender his/her 'Made-by-the-God' body to a doctor sitting on the other side of the globe controlling a robot-controlled knife
cutting a delicate structure of the patient's body. Even a small bug in the software code will prove disastrous for
the helpless patient on the surgery table!
We the intellectuals should predict the future problems and take the necessary precautions before it is loo late.
As being just wise people (who learn from other mistakes) or fools (who learn from their own mistakes) is not sufficient at all!
To brigde the academia and industry, I agree with the author that professors who teach should build large systems once in 5 or 10 years
for a duration of 2 to 3 years in the industry to appreciate the reality.
In the same way, the seasoned IT professionals should go back to academia to teach (and learn in the process) and imbibe the rigour of the programming, new tools and ideas.
I think, this cross-fertilization between academia and industry will help the both sides in the long-run.
I agree with Kiran Achyutuni's comment that the products from the IT industry should have "eat your own dog food" policy by using the products themselves internally before it is sold to the external users.
The "eat your own dog food" policy will reinstate the much needed trust into the products sold by the IT companies. It is pity that these companies protect themselves by making the use to agree to the terms in the licencing agreement that clerverly gain the impunity.
Saya Sreenivasulu
Reading, UK.
i agree with the point of cross-fertilization between academia and industry by Saya Sreenivasulu, but who will ensure the result. because in IT industry one may move slow, one may move fast , depends on their own passion , but nobody can say whose technology changes in which rate and how they learn and how they teach to next. so i can not appreciate if an academic goes to industry and make waste of others time and same to professionals. it may possible if it happens side by side.
Partha Sarathi Paul
India
I think the core of the issue is academia itself. The institution has grown so large and so proud and so necessary because it spits out professionals that can't judge skill because they're brainwashed to believe that academia can prepare a person for professionalism.
Mentored practice prepares a person for professionalism, and the common usage of the term pro doesn't match the field. A professional is competent in their field, but so far, all I've seen is a lack of competence.
Academia takes us as far as it can with generic studies, and idealistic classes. As far as it can ruin minds and under appreciate mold-breakers.
The problem is the vicious cycle of judging the abilities of a person based on their degree. Most of which industry doesn't appreciate, because as soon as you're hired they melt you down to forge their golden sheep idol of nose down, and practical lackadaisical application of proverbial duct-tape need only apply.
The stench of the Microwave Society running timer set to fix-it-and-fix-it-now, fills the air.
If only other fields worked the same way. Let's build a bridge and just start working. Don't bother measuring, if we miss the road, we'll just alter the road to match, even if we lose a few ramps access to the highway. Hmm it's cracked.... pour in cement call it a day.
I feel the Jenga tower starting to shift, shall we take out more of our solid dynamic well-defined meta-code and replace it with hard coded magic numbers and flags? Just add one more flag. Make it work. Put a stamp on it so someone knows you're doing something at work.
I appreciate your attempts to mold the academia to fit the industries needs, and to mold industry to utilize technology appropriately so that academia prepares adequately, but it's academia from whence forth industry came, and it's academia against which it holds its work-force measuring rod.
The problem is the vicious cycle of judging the abilities of a person based on their degree. Most of which industry doesn't appreciate, because as soon as you're hired they melt you down to forge their golden sheep idol of nose down, and practical lackadaisical application of proverbial duct-tape need only apply.
Comment on this article
Signed comments submitted to this site are moderated and will appear if they are relevant to the topic and not abusive. Your comment will appear with your username if published. View our policy on commentsLog in to Submit a Signed Comment
Sign In »
Sign In
Signed comments submitted to this site are moderated and will appear if they are relevant to the topic and not abusive. Your comment will appear with your username if published. View our policy on commentsCreate a Web Account
An email verification has been sent to<EMAIL_ADDRESS>ACM veriŞes that you are the owner of the email address you've provided by sending you a veriŞcation message. The email message will contain a link that you must click to validate this account.NEXT STEP: CHECK YOUR EMAIL
You must click the link within the message in order to complete the process of creating your account. You may click on the link embedded in the message, or copy the link and paste it into your browser.


Charge lodged by Tanner & Coleman Conveyancers.
Title number DN123456. Charge of £40,000 to be added to register.
Contact lodging party


There are many different built in functions with JavaScript. Some of them are going to be different compared to what we are used to with Python.
This is very different from random generation in Python. Python you can import a library that is full of different type of random generators. Many programming languages do not have a large number of generators like Python. Whenever you want to generate a number in JavaScript you need to have an understanding of how Math.random() works and some basic math to create the type of number you want for your program. The generators in JavaScript does seem to be pretty random. Some programming languages the numbers aren't very random at all.
Math.random() will generate a decimal 0<=x<1. Try for yourself.
But if you want to create a random generator that is between 1 to 10 for example but your generator only does decimals then you are going to have to apply some math. To calculate a random number between 1 to 10 use the following code.
There are many different functions that are built in JavaScript that deal with strings. Here are a few.


- bear claws
- creep cluster
- giant’s toe
- creep cluster
- hanging moss
- glow dust
- glowing mushroom
- hanging moss
- bee
- dragon’s tongue
- fly amantia
- blue mountain flower
- blue butterfly wing
- bone meal
- chicken egg
- creep cluster
- giant’s toe
- blue butterfly wing
- creep cluster
- glow dust
- glowing mushroom
- hanging moss
- lavender
- nordic barnacle
- blue butterfly wing
- blue mountain flower
- giant’s toe
- bone meal
- blue mountain flower
- chicken egg
- charus eggs
- garlic
- luna moth wing
- namira’s rot
- vampire dust
- namira’s rot
- vampire dust
- chicken egg
- blue mountain flower
- bone meal
- creep cluster
- bear claws
- blue mountain flower
- deathbell
- giant’s toe
- bear claws
- blue mountain flower
- glowing mushroom
- hanging moss
- wheat
- glowing mushroom
- hanging moss
- large antlers
- mora tapinella
- river betty
- scaly pholitia
- wheat
- deathbell
- creep cluster
- dwarven oil
- fire salts
- garlic
- hawk beak
- imp stool
- river betty
- creep cluster
- hawk beak
- scaly pholitia
- wisp wrappings
- salt pile
- dwarven oil
- fire salts
- garlic
- taproot
- scaly pholitia
- swamp fungal pod
- taproot
- wisp wrappings
- dragon’s tongue
- fly amantia
- mora tapinella
- dwarven oil
- fire salts
- fly amantia
- dragon’s tongue
- mora tapinella
- garlic
- charus eggs
- deathbell
- nordic barnacle
- salmon roe
- slaughterfish eggs
- salmon roe
- salt pile
- slaughterfish eggs
- vampire dust
- giant’s toe
- bear claws
- creep cluster
- hanging moss
- blue mountain flower
- blue butterfly wing
- creep cluster
- blue butterfly wing
- creep cluster
- bear claws
- blue mountain flower
- glowing mushroom
- hanging moss
- wheat
- glowing mushroom
- creep cluster
- wisp wrappings
- hanging moss
- scaly pholitia
- wheat
- creep cluster
- scaly pholitia
- wisp wrappings
- wisp wrappings
- glow dust
- bear claws
- blue mountain flower
- glowing mushroom
- bear claws
- blue mountain flower
- hanging moss
- hanging moss
- glowing mushroom
- bear claws
- blue mountain flower
- creep cluster
- giant’s toe
- creep cluster
- wisp wrappings
- glow dust
- bear claws
- blue mountain flower
- hanging moss
- hanging moss
- wisp wrappings
- hanging moss
- bear claws
- blue mountain flower
- creep cluster
- giant’s toe
- glow dust
- glowing mushroom
- lavender
- nordic barnacle
- hawk beak
- deathbell
- mora tapinella
- river betty
- scaly pholitia
- histcarp
- imp stool
- deathbell
- mora tapinella
- scaly pholitia
- swamp fungal pod
- jazbay grapes
- large antlers
- creep cluster
- river betty
- lavender
- blue mountain flower
- hanging moss
- luna moth wing
- charus eggs
- namira’s rot
- vampire dust
- namira’s rot
- vampire dust
- frost miriam
- purple mountain flower
- wheat
- mora tapinella
- creep cluster
- dragon’s tongue
- fly amantia
- hawk beak
- imp stool
- river betty
- scaly pholitia
- creep cluster
- hawk beak
- imp stool
- river betty
- namira’s rot
- charus eggs
- luna moth wing
- nordic barnacle
- blue mountain flower
- garlic
- salmon roe
- slaughterfish eggs
- hanging moss
- salmon roe
- slaughterfish eggs
- purple mountain flower
- river betty
- creep cluster
- deathbell
- creep cluster
- hawk beak
- scaly pholitia
- wisp wrappings
- hawk beak
- large antlers
- mora tapinella
- scaly pholitia
- wisp wrappings
- salmon roe
- garlic
- histcarp
- jazbay grapes
- nordic barnacle
- salt pile
- deathbell
- dwarven oil
- fire salts
- garlic
- taproot
- dwarven oil
- fire salts
- garlic
- taproot
- scaly pholitia
- creep cluster
- deathbell
- giant’s toe
- hawk beak
- imp stool
- mora tapinella
- creep cluster
- hawk beak
- imp stool
- river betty
- river betty
- wheat
- slaughterfish eggs
- swamp fungal pod
- taproot
- vampire dust
- charus eggs
- garlic
- luna moth wing
- wheat
- creep cluster
- giant’s toe
- creep cluster
- scaly pholitia
- wisp wrappings
- frost miriam
- purple mountain flower
- scaly pholitia
- wisp wrappings
- wisp wrappings
- giant’s toe
- wheat
- river betty
- deathbell
- glowing mushroom
- river betty
- glowing mushroom


PandaRelief.org is a completely non profit organisation. We rely on donations from generous people like you to power our critical research, and campaigns, and above all, to save the pandas.
Contributing to this nonprofit is one of the best ways you can bring awareness to the lives of these pandas that are being endangered by ruthless corporations destroying their natural habitats, and trophy hunters murdering them for their fur.
Please use our secure online form to donate via credit card.


The Nest injector is hierarchical. To understand this useful treat, you first have to get acquainted with the process of creating the class instance. When any class depends on the other class, the injector's trying to find the appropriate instance in the current scope. The current scope isn't always the module to which the class belongs to.
Let's consider an example. We've a CoreModule
:
{{ coreModule }}
This module imports the CommonModule
and contains 2 components, successively CoreService
and ContextService
.
The CommonModule
contains single component, the CommonService
. This component is exported, so it's available within CoreModule
as well.
{{ commonModule }}
Let's take a look at ContextService
now:
{{ contextService }}
{{ contextServiceJs }}
This class depends on the CommonService
. This service's imported from the child module (CommonModule
), so it's a typical situation.
Now something that may turn out to be surprising, the CommonService
:
{{ commonService }}
{{ commonServiceJs }}
The CommonService
depends on the CoreService
. It's possible, because the CommonService
instance was resolved within the CoreModule
context (was injected by the component, which belongs to the parent module).
This technique makes possible to create reusable modules using boundless abstraction. Moreover, it allows overriding every component from the imported module using custom components feature. For example, you can create a default implementation of the class inside the feature module, but then overload it inside the currently processed context.
Notice This technique is powerful, but also very dangerous. Be careful whenever you're gonna use this feature, and make sure that you exactly know what you're doing.


[§846F-1] Short title. This chapter shall be known as and may be cited as "Alicia's Law". [L 2014, c 115, pt of §2]


New arrivals on FooseShoes
Even&Odd
ON SALE!
Even&Odd
Buffalo Decollete
ON SALE!
Even&Odd
Even&Odd
Buffalo Decollete
Even&Odd
Even&Odd
ON SALE!
Buffalo Decollete
Best sellers of the month
$145,99
Even&Odd
$145,99
Even&Odd
OUT OF STOCK
$145,99
Buffalo Decollete
$145,99
Even&Odd
OUT OF STOCK
$145,99
Even&Odd
$145,99
Buffalo Decollete
OUT OF STOCK
$145,99
Even&Odd
$145,99
Even&Odd
$145,99
Buffalo Decollete
FREE SHIPPING
Vivamus metus turpis, bibendum vitae euismod vel, vulputate vel nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec erat sem,
TESTIMONIALS
vel, vulputate vel nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec erat sem, vehicula id dictum sit [...]
- John Doe -
BLOG NEWS
APR 01
Nice & clean. The best for you blog!
Vivamus metus turpis, bibendum vitae euismod vel, vulputate vel nibh.
APR 01
What an Ecommerce theme!
vulputate vel nibh. Class aptent taciti sociosqu ad litora
Donec sed odio dui. Nulla vitae elit libero, a pharetra augue. Nullam id dolor id nibh ultricies vehicula ut id elit. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.
@ericafustero Why thank you. Your work looks awesome by the way! @treemelody
19 days ago
@roymarvelous You can seek a refund through TF if it is not as advertised - but it is :)
21 days ago


Loading...
FoodFast
_
Admin
View Foods
Sign out
All Orders
New Orders
Orders being processed
Completed Orders
Total Orders
All
New
Processing
Cancelled
Complete
No Orders yet
«
»


In 1992, the United States experienced the highest crime rate, both property crime and violent crime, that the nation had ever seen. As the crime rate dropped, and continues to stay low, everyone and every thing under the sun has been given credit. From the 1994 Crime Act, to the mayor of every major city, to mandatory minimum sentancing, everyone thinks their policies are what caused the drop. As is usually the case with complex social phenomenon, it's complicated.
The people who claimed the hiring more police officers and locking folks up would work appear to have a claim. As you can see from the chart above, the total number of sworn law enforcement officers began to climb in the late 1980s, along with the crime rate. The rate of imprisonment also climbed. In the early 1990s, it looks like we reached a turning point. Both violent and property crime began to decrease. As crime dropped, police hirings and prison rates continued to rise. In the early part of the 21st century, prison rates leveled off and began to drop slightly as the recession made it too difficult for States in particular to continue to house the large population of prisoners. California is a notable example of changing policies designed to release prisoners and reduce costs. The number of police officers continus to rise, possible as a result of homeland security type policies post 9-11.
Another factor that influenced property crime rates was the development of new technologies that made it harder to steal cars. Around the time the crime wave peaked, car manufacturer's started including starter kill and keyless entry devices to new cars, making it harder to steal them. By 1998, the Honda Accord, historical the most hotwired vehicle in America, came with starter kill as a standard accessory. By 2002, European cars were required to be equiped with starter kill, and while this was not the case in the United States, most new cars are sold with it, greatly impacting motor vehicle theft rates.
A final piece of pervasive technology that impacted property crimes was the presence of cell phones. While it is the case that cell phones themselves can be stolen, the fact that people on the street can take photographs of crimes taking place, or call the police at any time, impacted certain street crimes. By 2012, more people owned smart phones than regular phones, and more than 80% of people owned some kind of cell phone. The additional fact that many smart phones now come with tracking software may also reduce larceny.


[1]
so I was instantly amazed at how fast and sleek everything looked.
[2]
since putting Windows OS that is faster more Mac like than it did with Vista December 15 2009.


{% extends "base.html" %} {% block content %}
Deleting this Scan will delete all port discovery results.


Narrow regions and side-scrolling test
nav
Move through the landmarks in this document, then go backwards after passing the "nav" region; the label will be drawn so that it doesn't go off-screen left. This can also be triggered on viewport resize.


Lavender Context-Free Grammar
Lavender's grammar is incredibly context-sensitive due to the ability to define arbitrary prefix and infix operators. However, the context-free grammar is presented here. Tokens may be separated by any amount of whitespace and comments. Note that Lavender's context-free grammar is inherently ambiguous in a way that cannot be resolved without global context. Because of this, the CLavender implementation does not actually use this grammar in any parsing step; it uses context-sensitive parsing instead.
Module: <ModuleElement> [\n <Module>] ModuleElement: <Command> | <FunctionDef> Command: @ <Name> [Rest of Line] FunctionDef: ( <Function> ) | <Function> Function: def [FuncName] ( [Params] ) [let <Locals>] <Funcbody> FuncName: <Identifier> | {uir}_<Symbol> Params: [=>] [...] <Name> | [=>] <Name> [, <Params>] Locals: <Name> ( <Expression> ) [, <Locals>] Funcbody: => <Expression> | <Piecewise> [Piecewise...] Piecewise: => <ExpressionNoFunc> ; <ExpressionNoFunc> Expression: <ExpressionNoFunc> | <Function> ExpressionNoFunc: <Operand> [<Operator> [Expression]] Operand: ( <Expression> ) | <ValueCall> | <FunctionCall> | <Vect> | <QualIdentifier> | <Primary> Operator: <QualIdentifier> [QualIdentifier...] ValueCall: [ <Expression> ] <ArgList> FunctionCall: <QualIdentifier> <ArgList> Vect: { [ArgListElements] } ArgList: () | <Operand> | ( <ArgListElements> ) ArgListElements: <Expression> [, <ArgListElements>] QualIdentifier: [<Name> : ] <Identifier> Identifier: <Name> | <Symbol> Name: <Letter> [LetterOrDigit...] LetterOrDigit: <Letter> | <Digit> Letter: ONE OF A-Z a-z _ Digit: ONE OF 0-9 Symbol: <SymbolPart> [SymbolPart...] SymbolPart: ONE OF ~ ? * / % : + - & | ^ = ! < > Primary: <Number> | <String> | <FuncValue> Number: IEEE FLoating-Point Literal String: " [Not " or newline, escape \", \', \n, \t, \\] " FuncValue: \ <QualIdentifier> [\]


Nunc condimentum malesuada ex, at faucibus mauris condimentum in. Duis pulvinar sem et metus elementum commodo. Proin ac lacus vitae odio dapibus sodales. Fusce porta id ipsum vel interdum.
Employment respond committed meaningful fight against oppression social challenges rural legal aid governance. Meaningful work, implementation, process cooperation, campaign inspire.
Medecins du Monde Jane Addams reduce child mortality challenges Ford Foundation. Diversification shifting landscape advocate pathway to a better life rights international. Assessment.
Democracy inspire breakthroughs, Rosa Parks; inspiration raise awareness natural resources. Governance impact; transformative donation philanthropy, respect reproductive.
Democracy inspire breakthroughs, Rosa Parks; inspiration raise awareness natural resources. Governance impact; transformative donation philanthropy, respect reproductive.


Arsenal dealt Dani Ceballos injury blow ahead of Leicester clash
The Spanish midfielder went off in the 54th minute of the 1-1 Europa League draw at Vitoria on Wednesday afternoon, and will sit out the trip to the King Power Stadium
by Mark Jones, https://www.mirror.co.uk/authors/mark-jones/Arsenal have confirmed that midfielder Dani Ceballos is out of Saturday's trip to Leicester City.
The Spanish midfielder has featured in every single Gunners game in all competitions since his arrival on loan from Real Madrid , either starting the match or coming on from the bench.
He scored his only Gunners goal to date in the 4-0 win over Standard Liege in the Europa League last month, but having been substituted in the 54th minute of the 1-1 draw at Vitoria in the same competition on Wednesday, he will now miss the trip to the King Power Stadium to face Brendan Rodgers' Foxes.
Arsenal confirmed on their website that Ceballos sustained an injury to his left hamstring in Portugal, and although the he is currently being assessed he will miss the Leicester clash.
Gunners boss Unai Emery appeared to confirm that Ceballos would be out after the draw on Wednesday, telling BT Sport: "He has a small injury but I don't think he is [going to be available] for the next weeks."
When pressed on whether Ceballos' absence could mean recalls for either Mesut Ozil or Granit Xhaka at Leicester, he added: "We are going to prepare for the match with the players, some players had a rest today and maybe someone who played this evening.
"But I think every player can be another possibility to play for Saturday and to be ready."
The injury is likely to keep Ceballos out of the forthcoming Spain squad for their Euro 2020 qualifiers against Malta and Romania next week.
Arsenal go into the game at Leicester six points behind the Foxes in the table, knowing that a defeat would both damage their top four hopes and heap more pressure on beleaguered boss Emery.


Never-Trumper Mark Sanford Ends Long Shot Campaign for President
Former South Carolina Republican Congressman and Gov. Mark Sanford (SC) is ending his long-shot bid for president.
by Joshua Caplan“I am suspending my race for the Presidency because impeachment has made my goal of making the debt, deficit and spending issue a part of this presidential debate impossible right now,” Sanford announced his of his intention to exit the race after a brief press conference in New Hampshire, an early primary state.
“From day one, I was fully aware of how hard it would be to elevate these issues with a sitting president of my own party ignoring them,” he added. “Impeachment noise has moved what was hard to herculean as nearly everything in Republican party politics is currently viewed through the prism of impeachment.”
Sanford entered the race in September, claiming that the GOP had “lost” its compass under President Trump and pledging to make national deficit solutions his primary campaign focus.
His departure still leaves former Illinois Rep. Joe Walsh and former Massachusetts Gov. Bill Weld as Republican primary candidates.


--- layout: post title: José Valim and Carl Lerche joins Rails core categories: [] author: David published: true date: 2010-02-13 01:36:00.000000000 +00:00 ---
Please give a warm welcome to José Valim and Carl Lerche as they both join the Rails core team. Both guys have been key contributors to the Rails 3 development and both have made it into the top 10 of all-time Rails contributors. It’s an honor to have them on the team!


WHATEVER (Sony Pictures Classics) Directed by Susan Skoog "I hope the film I made tells the truth about what it is to be a seventeen-year-old girl, what it's like to lose your virginity to the wrong guy, to experiment with drugs, to lose your best friend, to forgive your mother ... The excitement and wonder of adolescence goes hand-in-hand with the anxiety and disappointments," notes writer-director Susan Skoog in the production notes for her film "Whatever." Admirable goals, to be sure, and "Whatever" reverberates with earnestness. "Excitement" and "wonder," well, that's another story. Set in a colorless New Jersey neighborhood in the spring of 1981 "Whatever" centers on Anna (Liza Weil), an aspiring painter who's prematurely jaded, perhaps because of living with her worn-down mom (Kathryn Rossiter) who offers advice along the lines of "don't expect so much; it makes things easier" in between dates with married men. Though she smokes, drinks and drugs with the best of them, Anna hasn't yet discovered sex, much to the consternation of her best friend Brenda (Chad Morgan), a regular Pass-Around Patty whose evenings often end with her searching for her underwear. The movie's Reagan Era setting works against it, summoning up comparisons to many similar, superior teen movies that came out of the early 1980s: Anna's loveless sexual initiation calls up memories of Jennifer Jason Leigh in "Fast Times at Ridgemont High"; her desire to transcend her blue-collar upbringing through sheer talent is reminiscent of "Flashdance"; her feelings of shame toward her loser family seem to have drifted in from "Pretty In Pink." The presence of Frederic Forrest as a hip art teacher serves to remind us he once co-starred with Nicolas Cage and Deborah Foreman in the 1983 sleeper "Valley Girl." While Skoog loads the soundtrack with such can't-miss classics as the Pretenders' "Mystery Achievement," Patti Smith Group's "Dancing Barefoot" and Blondie's "The Hardest Part," too much of her sluggish screenplay brings to mind another Blondie song, "Will Anything Happen?". When "Whatever" eventually does get rolling, it heads straight down the highway to Clicheville, as trampy Brenda teases her way into danger and Anna's heart and spirit are almost shattered by the cruel whips of fate. If "Whatever" connects on any level at all, it's because of Weil, whose knowing eyes and sad smile give Anna a haunting quality. Most of the other performances are one-note, although it's hard to determine if that's the fault of the actors or Skoog's graceless directorial style, which makes too much of this teen-angst tale feel like a 1981 "Afterschool Special" rather than the bittersweet slice-of-life it so badly wants to be. James Sanford
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Ruleset Summary: %UnitsetTitle%
%UnitsetDescription%
Terrain
Buildings
Technology List
Technology Tree
Units
Terrain Summary:
%TerrainSummary%
Building Summary:
%BuildingSummary%
Unit Summary:
%UnitSummary%
Technology Summary:
%TechSummary%


Heavily inspired by Idiomatic CSS, the GitHub Styleguide and Node.js Style Guide. Forked from Code Guide: made with all the love in the world by @mdo.
Updated and maintained by @arkmuntasser
Open sourced under MIT. Copyright {{ site.time | date: '%Y' }} @arkmuntasser.


INSTRUMENTATIONCODE
Retold Library List
Retold Library List Example
Toggle navigation
Books
John Doe
Release VERSION
Logout
Some content


Read/manipulate/display images using NumJs
Original image (h
, w
)
Grayscaled
Edges
Flipped
Resized
Zoomed
Processing took
ms


B.C. introduces gas price transparency law forcing companies to reveal data
by The Canadian Press Staff ContactVICTORIA - Oil and gas companies in British Columbia would be forced by law to reveal how gas prices are set in the province if new legislation introduced today is passed.
Jobs Minister Bruce Ralston says the Fuel Price Transparency Act would allow the B.C. Utilities Commission to collect information from fuel companies on market conditions involved in setting gasoline prices.
The B.C. government asked the independent utilities commission last summer to examine fuel prices in the province as gasoline costs in Metro Vancouver were consistently the highest in Canada, reaching $1.70 per litre and above.
The commission found substantial price increases in B.C.'s gasoline market, including a cost of about 13 cents per litre charged to drivers that the industry was unable to explain.
Ralston says that unexplained premium results in residents and businesses in B.C. paying an extra $490 million every year for fuel.
He says the act will require companies to share data on refined fuel imports and exports, fuel volumes at refineries and terminals and wholesale and retail prices.


Class: Aws::RDS::Types::ExportTask
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Struct
|
|
|
Instance Chain:
self,
::Aws::Structure ,
Struct
|
|
| Inherits: |
Struct
|
| Defined in: | gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb |
Overview
Contains the details of a snapshot or cluster export to Amazon S3.
This data type is used as a response element in the
DescribeExportTasks
action.
Constant Summary
Instance Attribute Summary
-
#export_only ⇒ Array<String>
rw
The data exported from the snapshot or cluster.
-
#export_task_identifier ⇒ String
rw
A unique identifier for the snapshot or cluster export task.
-
#failure_cause ⇒ String
rw
The reason the export failed, if it failed.
-
#iam_role_arn ⇒ String
rw
The name of the
::Aws::IAM
role that is used to write to Amazon S3 when exporting a snapshot or cluster. -
#kms_key_id ⇒ String
rw
The key identifier of the Amazon Web Services KMS key that is used to encrypt the data when it's exported to Amazon S3.
-
#percent_progress ⇒ Integer
rw
The progress of the snapshot or cluster export task as a percentage.
-
#s3_bucket ⇒ String
rw
The Amazon
::Aws::S3
bucket that the snapshot or cluster is exported to. -
#s3_prefix ⇒ String
rw
The Amazon
::Aws::S3
bucket prefix that is the file name and path of the exported data. -
#snapshot_time ⇒ Time
rw
The time that the snapshot was created.
-
#source_arn ⇒ String
rw
The Amazon
::Aws::RDS::Resource
Name (ARN) of the snapshot or cluster exported to Amazon S3. -
#source_type ⇒ String
rw
The type of source for the export.
-
#status ⇒ String
rw
The progress status of the export task.
-
#task_end_time ⇒ Time
rw
The time that the snapshot or cluster export task ended.
-
#task_start_time ⇒ Time
rw
The time that the snapshot or cluster export task started.
-
#total_extracted_data_in_gb ⇒ Integer
rw
The total amount of data exported, in gigabytes.
-
#warning_message ⇒ String
rw
A warning about the snapshot or cluster export task.
Instance Method Summary
::Aws::Structure
- Included
| #to_hash | Alias for Structure#to_h. |
Instance Attribute Details
#export_only ⇒ Array
<String
> (rw)
The data exported from the snapshot or cluster. Valid values are the following:
database
- Export all the data from a specified database.database.table
table-name - Export a table of the snapshot or cluster. This format is valid only for RDS for MySQL, RDS for MariaDB, and Aurora MySQL.database.schema
schema-name - Export a database schema of the snapshot or cluster. This format is valid only for RDS for PostgreSQL and Aurora PostgreSQL.database.schema.table
table-name - Export a table of the database schema. This format is valid only for RDS for PostgreSQL and Aurora PostgreSQL.
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end
#export_task_identifier ⇒ String
(rw)
A unique identifier for the snapshot or cluster export task. This ID isn't an identifier for the Amazon S3 bucket where the data is exported.
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end
#failure_cause ⇒ String
(rw)
The reason the export failed, if it failed.
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end
#iam_role_arn ⇒ String
(rw)
The name of the ::Aws::IAM
role that is used to write to Amazon S3 when
exporting a snapshot or cluster.
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end
#kms_key_id ⇒ String
(rw)
The key identifier of the Amazon Web Services KMS key that is used
to encrypt the data when it's exported to Amazon S3. The KMS key
identifier is its key ::Aws::ARN
, key ID, alias ::Aws::ARN
, or alias name. The IAM
role used for the export must have encryption and decryption
permissions to use this ::Aws::KMS
key.
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end
#percent_progress ⇒ Integer
(rw)
The progress of the snapshot or cluster export task as a percentage.
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end
#s3_bucket ⇒ String
(rw)
The Amazon ::Aws::S3
bucket that the snapshot or cluster is exported to.
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end
#s3_prefix ⇒ String
(rw)
The Amazon ::Aws::S3
bucket prefix that is the file name and path of the
exported data.
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end
#snapshot_time ⇒ Time
(rw)
The time that the snapshot was created.
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end
#source_arn ⇒ String
(rw)
The Amazon ::Aws::RDS::Resource
Name (ARN) of the snapshot or cluster exported
to Amazon S3.
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end
#source_type ⇒ String
(rw)
The type of source for the export.
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end
#status ⇒ String
(rw)
The progress status of the export task. The status can be one of the following:
CANCELED
CANCELING
COMPLETE
FAILED
IN_PROGRESS
STARTING
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end
#task_end_time ⇒ Time
(rw)
The time that the snapshot or cluster export task ended.
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end
#task_start_time ⇒ Time
(rw)
The time that the snapshot or cluster export task started.
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end
#total_extracted_data_in_gb ⇒ Integer
(rw)
The total amount of data exported, in gigabytes.
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end
#warning_message ⇒ String
(rw)
A warning about the snapshot or cluster export task.
# File 'gems/aws-sdk-rds/lib/aws-sdk-rds/types.rb', line 13808
class ExportTask < Struct.new( :export_task_identifier, :source_arn, :export_only, :snapshot_time, :task_start_time, :task_end_time, :s3_bucket, :s3_prefix, :iam_role_arn, :kms_key_id, :status, :percent_progress, :total_extracted_data_in_gb, :failure_cause, :, :source_type) SENSITIVE = [] include Aws::Structure end


The parent class for everything in the Document Object Model. More...
Public Types | |
| enum | NodeType { DOCUMENT, ELEMENT, COMMENT, UNKNOWN, TEXT, DECLARATION, TYPECOUNT } |
| The types of XML nodes supported by TinyXml. More... | |
| Public Types inherited from nd::TiXmlBase | |
| enum | { TIXML_NO_ERROR = 0, TIXML_ERROR, TIXML_ERROR_OPENING_FILE, TIXML_ERROR_OUT_OF_MEMORY, TIXML_ERROR_PARSING_ELEMENT, TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME, TIXML_ERROR_READING_ELEMENT_VALUE, TIXML_ERROR_READING_ATTRIBUTES, TIXML_ERROR_PARSING_EMPTY, TIXML_ERROR_READING_END_TAG, TIXML_ERROR_PARSING_UNKNOWN, TIXML_ERROR_PARSING_COMMENT, TIXML_ERROR_PARSING_DECLARATION, TIXML_ERROR_DOCUMENT_EMPTY, TIXML_ERROR_EMBEDDED_NULL, TIXML_ERROR_PARSING_CDATA, TIXML_ERROR_DOCUMENT_TOP_ONLY, TIXML_ERROR_STRING_COUNT } |
Public Member Functions | |
| const char * | Value () const |
| The meaning of 'value' changes for the specific type of TiXmlNode. More... | |
| const TIXML_STRING & | ValueTStr () const |
| void | SetValue (const char *_value) |
| Changes the value of the node. More... | |
| void | Clear () |
| Delete all the children of this node. Does not affect 'this'. | |
| TiXmlNode * | Parent () |
| One step up the DOM. | |
| const TiXmlNode * | Parent () const |
| const TiXmlNode * | FirstChild () const |
| The first child of this node. Will be null if there are no children. | |
| TiXmlNode * | FirstChild () |
| const TiXmlNode * | FirstChild (const char *value) const |
| The first child of this node with the matching 'value'. More... | |
| TiXmlNode * | FirstChild (const char *_value) |
| The first child of this node with the matching 'value'. Will be null if none found. | |
| const TiXmlNode * | LastChild () const |
| TiXmlNode * | LastChild () |
| The last child of this node. Will be null if there are no children. | |
| const TiXmlNode * | LastChild (const char *value) const |
| TiXmlNode * | LastChild (const char *_value) |
| The last child of this node matching 'value'. Will be null if there are no children. | |
| const TiXmlNode * | IterateChildren (const TiXmlNode *previous) const |
| An alternate way to walk the children of a node. More... | |
| TiXmlNode * | IterateChildren (const TiXmlNode *previous) |
| const TiXmlNode * | IterateChildren (const char *value, const TiXmlNode *previous) const |
| This flavor of IterateChildren searches for children with a particular 'value'. | |
| TiXmlNode * | IterateChildren (const char *_value, const TiXmlNode *previous) |
| TiXmlNode * | InsertEndChild (const TiXmlNode &addThis) |
| Add a new node related to this. More... | |
| TiXmlNode * | LinkEndChild (TiXmlNode *addThis) |
| Add a new node related to this. More... | |
| TiXmlNode * | InsertBeforeChild (TiXmlNode *beforeThis, const TiXmlNode &addThis) |
| Add a new node related to this. More... | |
| TiXmlNode * | InsertAfterChild (TiXmlNode *afterThis, const TiXmlNode &addThis) |
| Add a new node related to this. More... | |
| TiXmlNode * | ReplaceChild (TiXmlNode *replaceThis, const TiXmlNode &withThis) |
| Replace a child of this node. More... | |
| bool | RemoveChild (TiXmlNode *removeThis) |
| Delete a child of this node. | |
| const TiXmlNode * | PreviousSibling () const |
| Navigate to a sibling node. | |
| TiXmlNode * | PreviousSibling () |
| const TiXmlNode * | PreviousSibling (const char *) const |
| Navigate to a sibling node. | |
| TiXmlNode * | PreviousSibling (const char *_prev) |
| const TiXmlNode * | NextSibling () const |
| Navigate to a sibling node. | |
| TiXmlNode * | NextSibling () |
| const TiXmlNode * | NextSibling (const char *) const |
| Navigate to a sibling node with the given 'value'. | |
| TiXmlNode * | NextSibling (const char *_next) |
| const TiXmlElement * | NextSiblingElement () const |
| Convenience function to get through elements. More... | |
| TiXmlElement * | NextSiblingElement () |
| const TiXmlElement * | NextSiblingElement (const char *) const |
| Convenience function to get through elements. More... | |
| TiXmlElement * | NextSiblingElement (const char *_next) |
| const TiXmlElement * | FirstChildElement () const |
| Convenience function to get through elements. | |
| TiXmlElement * | FirstChildElement () |
| const TiXmlElement * | FirstChildElement (const char *_value) const |
| Convenience function to get through elements. | |
| TiXmlElement * | FirstChildElement (const char *_value) |
| int | Type () const |
| Query the type (as an enumerated value, above) of this node. More... | |
| const TiXmlDocument * | GetDocument () const |
| Return a pointer to the Document this node lives in. More... | |
| TiXmlDocument * | GetDocument () |
| bool | NoChildren () const |
| Returns true if this node has no children. | |
| virtual const TiXmlDocument * | ToDocument () const |
| Cast to a more defined type. Will return null if not of the requested type. | |
| virtual const TiXmlElement * | ToElement () const |
| Cast to a more defined type. Will return null if not of the requested type. | |
| virtual const TiXmlComment * | ToComment () const |
| Cast to a more defined type. Will return null if not of the requested type. | |
| virtual const TiXmlUnknown * | ToUnknown () const |
| Cast to a more defined type. Will return null if not of the requested type. | |
| virtual const TiXmlText * | ToText () const |
| Cast to a more defined type. Will return null if not of the requested type. | |
| virtual const TiXmlDeclaration * | ToDeclaration () const |
| Cast to a more defined type. Will return null if not of the requested type. | |
| virtual TiXmlDocument * | ToDocument () |
| Cast to a more defined type. Will return null if not of the requested type. | |
| virtual TiXmlElement * | ToElement () |
| Cast to a more defined type. Will return null if not of the requested type. | |
| virtual TiXmlComment * | ToComment () |
| Cast to a more defined type. Will return null if not of the requested type. | |
| virtual TiXmlUnknown * | ToUnknown () |
| Cast to a more defined type. Will return null if not of the requested type. | |
| virtual TiXmlText * | ToText () |
| Cast to a more defined type. Will return null if not of the requested type. | |
| virtual TiXmlDeclaration * | ToDeclaration () |
| Cast to a more defined type. Will return null if not of the requested type. | |
| virtual TiXmlNode * | Clone () const =0 |
| Create an exact duplicate of this node and return it. More... | |
| virtual bool | Accept (TiXmlVisitor *visitor) const =0 |
| Accept a hierchical visit the nodes in the TinyXML DOM. More... | |
| Public Member Functions inherited from nd::TiXmlBase | |
| void * | operator new (size_t size) |
| void * | operator new[] (size_t size) |
| void | operator delete (void *ptr) |
| void | operator delete[] (void *ptr) |
| virtual void | Print (FILE *cfile, int depth) const =0 |
| All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode.) Either or both cfile and str can be null. More... | |
| int | Row () const |
| Return the position, in the original source file, of this node or attribute. More... | |
| int | Column () const |
| See Row() | |
| void | SetUserData (void *user) |
| Set a pointer to arbitrary user data. | |
| void * | GetUserData () |
| Get a pointer to arbitrary user data. | |
| const void * | GetUserData () const |
| Get a pointer to arbitrary user data. | |
| virtual const char * | Parse (const char *p, TiXmlParsingData *data, TiXmlEncoding encoding)=0 |
Protected Member Functions | |
| TiXmlNode (NodeType _type) | |
| void | CopyTo (TiXmlNode *target) const |
| TiXmlNode * | Identify (const char *start, TiXmlEncoding encoding) |
Protected Attributes | |
| TiXmlNode * | parent |
| NodeType | type |
| TiXmlNode * | firstChild |
| TiXmlNode * | lastChild |
| TIXML_STRING | value |
| TiXmlNode * | prev |
| TiXmlNode * | next |
| Protected Attributes inherited from nd::TiXmlBase | |
| TiXmlCursor | location |
| void * | userData |
| Field containing a generic user pointer. | |
Friends | |
| class | TiXmlDocument |
| class | TiXmlElement |
Additional Inherited Members | |
| Static Public Member Functions inherited from nd::TiXmlBase | |
| static void | SetCondenseWhiteSpace (bool condense) |
| The world does not agree on whether white space should be kept or not. More... | |
| static bool | IsWhiteSpaceCondensed () |
| Return the current white space setting. | |
| static void | EncodeString (const TIXML_STRING &str, TIXML_STRING *out) |
| Expands entities in a string. More... | |
| Static Public Attributes inherited from nd::TiXmlBase | |
| static const int | utf8ByteTable [256] |
| Static Protected Member Functions inherited from nd::TiXmlBase | |
| static const char * | SkipWhiteSpace (const char *, TiXmlEncoding encoding) |
| static bool | IsWhiteSpace (char c) |
| static bool | IsWhiteSpace (int c) |
| static const char * | ReadName (const char *p, TIXML_STRING *name, TiXmlEncoding encoding) |
| static const char * | ReadText (const char *in, TIXML_STRING *text, bool ignoreWhiteSpace, const char *endTag, bool ignoreCase, TiXmlEncoding encoding) |
| static const char * | GetEntity (const char *in, char *value, int *length, TiXmlEncoding encoding) |
| static const char * | GetChar (const char *p, char *_value, int *length, TiXmlEncoding encoding) |
| static bool | StringEqual (const char *p, const char *endTag, bool ignoreCase, TiXmlEncoding encoding) |
| static int | IsAlpha (unsigned char anyByte, TiXmlEncoding encoding) |
| static int | IsAlphaNum (unsigned char anyByte, TiXmlEncoding encoding) |
| static int | ToLower (int v, TiXmlEncoding encoding) |
| static void | ConvertUTF32ToUTF8 (unsigned long input, char *output, int *length) |
| Static Protected Attributes inherited from nd::TiXmlBase | |
| static const char * | errorString [TIXML_ERROR_STRING_COUNT] |
The parent class for everything in the Document Object Model.
(Except for attributes). Nodes have siblings, a parent, and children. A node can be in a document, or stand on its own. The type of a TiXmlNode can be queried, and it can be cast to its more defined type.
The types of XML nodes supported by TinyXml.
(All the unsupported types are picked up by UNKNOWN.)
|
pure virtual |
Accept a hierchical visit the nodes in the TinyXML DOM.
Every node in the XML tree will be conditionally visited and the host will be called back via the TiXmlVisitor interface.
This is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML is unchanged by using this interface versus any other.)
The interface has been based on ideas from:
Which are both good references for "visiting".
An example of using Accept():
TiXmlPrinter printer; tinyxmlDoc.Accept( &printer ); const char* xmlcstr = printer.CStr();
Implemented in nd::TiXmlDeclaration, nd::TiXmlComment, nd::TiXmlElement, nd::TiXmlDocument, nd::TiXmlUnknown, and nd::TiXmlText.
|
pure virtual |
Create an exact duplicate of this node and return it.
The memory must be deleted by the caller.
Implemented in nd::TiXmlDocument, nd::TiXmlUnknown, nd::TiXmlDeclaration, nd::TiXmlText, nd::TiXmlComment, and nd::TiXmlElement.
| const TiXmlNode * nd::TiXmlNode::FirstChild | ( | const char * | value | ) | const |
The first child of this node with the matching 'value'.
Will be null if none found.
| const TiXmlDocument * nd::TiXmlNode::GetDocument | ( | ) | const |
Return a pointer to the Document this node lives in.
Returns null if not in a document.
Add a new node related to this.
Adds a child after the specified child. Returns a pointer to the new object or NULL if an error occured.
Add a new node related to this.
Adds a child before the specified child. Returns a pointer to the new object or NULL if an error occured.
Add a new node related to this.
Adds a child past the LastChild. Returns a pointer to the new object or NULL if an error occured.
An alternate way to walk the children of a node.
One way to iterate over nodes is:
for( child = parent->FirstChild(); child; child = child->NextSibling() )
IterateChildren does the same thing with the syntax:
child = 0; while( child = parent->IterateChildren( child ) )
IterateChildren takes the previous child as input and finds the next one. If the previous child is null, it returns the first. IterateChildren will return null when done.
Add a new node related to this.
Adds a child past the LastChild.
NOTE: the node to be added is passed by pointer, and will be henceforth owned (and deleted) by tinyXml. This method is efficient and avoids an extra copy, but should be used with care as it uses a different memory model than the other insert functions.
| const TiXmlElement * nd::TiXmlNode::NextSiblingElement | ( | ) | const |
Convenience function to get through elements.
Calls NextSibling and ToElement. Will skip all non-Element nodes. Returns 0 if there is not another element.
| const TiXmlElement * nd::TiXmlNode::NextSiblingElement | ( | const char * | _value | ) | const |
Convenience function to get through elements.
Calls NextSibling and ToElement. Will skip all non-Element nodes. Returns 0 if there is not another element.
Replace a child of this node.
Returns a pointer to the new object or NULL if an error occured.
|
inline |
Changes the value of the node.
Defined as:
Document: filename of the xml file Element: name of the element Comment: the comment text Unknown: the tag contents Text: the text string
|
inline |
Query the type (as an enumerated value, above) of this node.
The possible types are: DOCUMENT, ELEMENT, COMMENT, UNKNOWN, TEXT, and DECLARATION.
|
inline |
The meaning of 'value' changes for the specific type of TiXmlNode.
Document: filename of the xml file Element: name of the element Comment: the comment text Unknown: the tag contents Text: the text string
The subclasses will wrap this function.


Viki Gabor wins Junior Eurovision for Poland
Viki Gabor has won this year’s Junior Eurovision Song Contest and when you hear her sing, you won’t be surprised, to be fair.
The 12-year-old, who was born in Germany and has lived in England, represented Poland (where she currently lives) in the competition.
Junior Eurovision’s final took place this afternoon in the Polish city of Gliwice.
The runner up in the 17th edition of the contest was Yerzhan Maksim from Kazakhstan, who is also just 12 years old.
Rising star Viki won with her powerful dance anthem Superhero, switching between English and Polish on the track. She and her colourful dancers looked overcome with emotion as the celebrated the result.
Although, this being Eurovision, the presenter Ida Nowakowska’s reaction was even more… demonstrative.
Nevertheless, Viki’s vocal range is undeniably impressive and her silver on lime green coat is pretty cool, too…
She beat out 18 competitors to take home the crown, and received 278 points, to Yerzhan’s 227 points. A total of 3.77 million votes were cast overall.
The final score is split between audience votes and a professional jury, much like the main contest, which this year took place in Tel Aviv and was won by the Netherlands’ Duncan Lawrence.
Advertisement Advertisement
The UK hasn’t taken part in the competition, which features participants aged between nine and 14, since 2005.
Viki also competed on The Voice Kids in Poland earlier this year, where she made it through to the final. Her debut single, Time, has been viewed almost three million times since it dropped back in February.
She also spent part of her childhood growing up in the English county of Essex, and has called Southend-on-Sea one of her favourite places in England, according to a local radio station in Basildon.
Random, but cool. Next stop, TOWIE!
Got a showbiz story?
If you've got a story, video or pictures get in touch with the Metro.co.uk Entertainment team by emailing us<EMAIL_ADDRESS>calling 020 3615 2145 or by visiting our Submit Stuff page - we'd love to hear from you.


The virtual assistant that helps with financial queries
Introducing Aeora.
The ChatBot for traders, providing answers to questions on the FTSE 100.
Built for quick and intellectual conversations.
Find out what you need, fast.
Aeora is a personal assistant, built to interact with traders via voice or text, to help answer queries by providing instant and accurate replies.
Designed for you.
Whether you want to give Aeora a fresh look or add your favourite companies and sectors for tracking it's all there at the touch of button.