text:
BACKGROUND IMAGE: iSTOCK/GETTY IMAGES
- FeatureAnalyzers bulk up for storage
- FeatureAuto provisioning still a tease
- FeatureiSCSI Products Flood Market
- FeatureBeyond basic RAID
- FeatureCisco Joins FC Switch Club
- FeatureVeritas raises the bar with NetBackup 4.5
- FeatureProtect Data at Rest
- FeatureWhere Does Midrange End and Enterprise Begin?
- FeatureEasing the Pain of NAS Backup Headaches
- FeatureHIPAA Prompts Hospitals to Reconsider Storage
- FeatureWhere ATA arrays can save you money
- FeatureSuperparamagnetic limit
- FeatureHigh-Availability Switches Still a Moving Target
- FeatureTame e-mail storage - before it eats you alive
- FeaturePay the right price for storage
- FeatureWhich new technologies are worth it?
- FeatureBook Review
- FeatureBehind the firewall
- FeatureLower your costs by implementing enterprise-class libraries
- FeatureIt's not all gloom and doom for the storage industry.
- FeatureSnapshot: Block-based storage
- FeatureThe good--and bad--of storage vendor independence
- FeatureWhat are they thinking?
iSTOCK/GETTY IMAGES
Where ATA arrays can save you money
ATA arrays can save you money if you use them where their limitations don't have a deleterious impact.
In the enterprise storage array market, SCSI has traditionally been the only game in town. IT managers rarely think twice about rubber-stamping orders for disk arrays using high-end SCSI hardware, especially for use in data centers and other mission-critical environments.
Today, however, SCSI may be losing its iron grip on the enterprise RAID market. A growing number of storage vendors have introduced ATA-based RAID products that offer solid - and rapidly improving - performance and reliability, combined with management tools suitable for enterprise applications. Many of these products are designed primarily for disk-to-disk backup applications.
Analysts, vendors and end users generally agree that SCSI-based RAID is still the best choice for volatile, high-intensity applications such as databases.
Yet many analysts also predict that ATA technology, as well as new products based on the next-generation Serial ATA standard will eventually challenge SCSI even in the high-end enterprise RAID market. "In the past," says Tim Klein, CEO of ExaDrive Networks, Sunnyvale, CA, "we fought the perception that ATA was all junk and that a company's data was too important to be put onto ATA. That has settled down - people understand that ATA is real, it's reliable and you can count on it."
How low can it go?
The price gap between SCSI and ATA drives is wide. As the cost of 1TB of raw ATA-based disk storage falls in some cases to less than $1.25 per GB, the gap has widened into a canyon. Many retailers, for example, now offer brand-name 80GB 7,200 rpm ATA/100 drives for less than $100; by comparison, a typical 73.4GB 10,000 rpm Ultra160 SCSI drive can cost over $350, or more than four times as much per GB.
At the same time, 7,200 rpm ATA drives with capacities up to 200GB are now widely available for less than $2 per GB. Only a handful of Ultra160 SCSI drives exceed 80GB, by comparison, and those that do carry a whopping price tag - typically $6 to $7 per GB. "The ability to get a half terabyte of storage with just four ATA drives is incredible if you think about it," says David Vaughn, a product manager in IBM's storage networking division. "We now have the ability to provide an enormous amount of storage at a very low cost."
In addition, performance and reliability differences between SCSI and ATA have narrowed, and according to industry analysts, these differences become even less significant in array-based configurations. "With more than five drives in an array, you saturate the bus on just about any system out there, and you can't take advantage of the faster data transfer provided by higher [SCSI drive] spin rates," says Bob Ripley, vice president of marketing for Consensys. "If a SCSI drive spins out data three times faster per drive on a large array, all you're doing is generating heat."
Some industry experts also challenge the assumption that ATA disks aren't reliable enough for enterprise use. "I haven't heard any derogatory statements made about ATA reliability, and in many cases I hear just the opposite - ATA drives can be more reliable than some SCSI and Fibre Channel [FC] drives," says Peter Gerr, research analyst for the Enterprise Storage Group, Milford, MA. And with MTBF rates on ATA drives of 30 years or more, disk failures in RAID systems are a real problem only for the most critical enterprise applications.
Gerr also stated that so far, SCSI vendors haven't moved much to cut prices on their products, although that could change. "There's the potential for downward price pressure on SCSI and Fibre Channel products, but it's still too early to tell," he says.
New vendors
A growing number of vendors now offer ATA-based RAID products. Many of these firms focus on the small business and low-end server markets with RAID products supporting a small number of direct-attached ATA drives. Others have focused on "RAID on a chip" ASIC solutions designed to move disk array support onto the system motherboard.
But a handful of companies - including 3ware, Consensys, and ExaDrive - have set their sights on the enterprise RAID market. These firms have developed ATA-based direct- or network-attached RAID products designed to match or even exceed the performance of SCSI- or Fibre-based arrays. Consensys' Raidzone product line, for example, uses a proprietary backplane and controllers that the company claims will equal or exceed the data throughput of systems using Ultra SCSI bus. "We don't give up anything to the SCSI and Fibre Channel arrays except the price," Ripley says. Other ATA-based RAID products, such as ExaDrive Networks' Diamond series, use a hybrid approach: They combine ATA disks with multiple SCSI or FC host interfaces and a proprietary controller.
According to the manufacturers, these ATA-based RAID products offer many of the same benefits as SCSI-based arrays. They typically support all standard RAID levels, including RAID 5, and they include hot-swap and hot-spare capabilities with automated failure detection, failover and data remirroring. They also provide policy-based management tools, remote monitoring and advanced diagnostics such as temperature, voltage and electrical current monitoring. Although ATA-based RAID vendors don't claim to match the largest enterprise RAID installations, some customers have built ATA-based network-attached storage systems using dozens of disks with 10TB.
ExaDrive Networks' Klein also noted that ExaDrive certifies the interoperability of its arrays with a variety of third-party products, including FC switches, storage virtualization, SAN management tools, and operating systems. "We approach the market differently than the big turnkey vendors. We say if you're looking for a best-of-breed approach, that's where we come in," he says. "The hardware savings give customers a margin to figure out where to get the best software solutions from high-end VARs and integrators. That's why we put a big emphasis on interoperability, especially on the Fibre Channel side for [storage area network] SAN implementations."
|Serial ATA and iSCSI
ATA finds its niche - and more
So far, ATA-based RAID has received the warmest welcome in certain vertical markets. "Our major users include government and university research laboratories, oil and gas exploration, video surveillance, data storage and other customers who produce very large amounts of data," says Consensys' Ripley. "In many cases, there's no other affordable way to store that data without using tape or optical storage, and that means giving up immediate access to the data."
According to Scott Studham, group leader in the Pacific Northwest National Laboratory's molecular science computing facility in Richland, WA, the cost-performance relationship between ATA and SCSI was a decisive issue in the group's decision to invest heavily in ATA-based disk arrays. Studham says the laboratory recently migrated its supercomputer data archives from a 20TB tape-based system to an ATA-based storage array. In addition, he says the laboratory will use a 200TB ATA-based RAID array as primary storage for its new supercomputer, which he says will be the world's largest and fastest Linux-based system.
"A lot of people asked why we weren't using SCSI [RAID technology], but once I presented the facts, they all understood," Studham says, referring to the conclusions he reached about the performance and reliability of ATA-based disks vs. more expensive SCSI hardware. "In this environment, that 4% to 5% performance penalty for using ATA instead of SCSI doesn't outweigh the 200% to 300% price difference."
In the mainstream enterprise market, ATA-based RAID has also emerged as an alternative to tape-based backup systems and to nearline systems such as CD jukeboxes. As disk prices fall and ATA-based RAID products become more sophisticated, these products have created a new and rapidly-growing niche in the nearline storage market.
According to Jamie Riis, CIO of BayView Financial, a mortgage bank based in Miami, FL, moving to ATA-based nearline storage yielded significant benefits. BayView currently uses a Network Appliance NearStore R100 system to store backup data snapshots before moving them over to tape-based storage, allowing the company to provide almost instant access to recent backups. "It could take up to 20 hours to get this data from the tape system," Riis says. "Now if someone loses a file, we can go back at least to where they were at the last snapshot and restore the data in a few minutes."
In addition, Riis says BayView also plans to migrate its document image archives from an optical jukebox to the R100. "We'll go from a system where it takes 30 to 40 seconds to retrieve an image and we have to throttle user access, to an environment where hundreds of users are getting submillisecond access," he says.
According to Chris Bennett, director of product marketing for Network Appliance, Sunnyvale, CA, Riis' comments reflect an important trend for ATA-based enterprise storage: "ATA drive technology is enabling the industry to store information online that previously was not available," he says. "When you're comparing the amount of data now stored online to the amount stored on tapes stacked in cardboard boxes someplace, you're talking about orders of magnitude of difference."
Major vendors respond
Some top-tier vendors - such as IBM, Network Appliance, and EMC - have released ATA-based RAID products designed for nearline storage, disk-to-disk backup systems, or even as mainline storage for mid-market enterprise customers (see "Major vendors introduce ATA RAID products.")
Unlike their smaller competitors, these firms are more conservative about the short-term prospects for ATA-based RAID. "We don't yet see customers who are willing to put mission-critical data on ATA drives," Vaughn says. "You still get better performance with SCSI technology, and that performance advantage is clear. The ATA platform is important, but we're using it to target the midmarket and distributed environments right now."
Nevertheless, according to Bennett, Network Appliance was surprised by the response to its ATA-based NearStore product line, which began shipping in January 2002. "We've shifted significant resources onto NearStore because of the exceptional response," he says. "But we also want to position it where it's appropriate. It's not just a performance issue, it's an availability issue - the [ATA] drives are slower and more prone to failure, and you run a higher risk of degrading critical operations in an ATA environment."
ATA in the data center?
Although ATA-based RAID has gained ground in niche markets and as an alternative data backup solution, the question remains: Will ATA present a serious challenge SCSI in the data center?
Gerr says he believes many enterprise users are prepared to take their cues from the major vendors with whom they have long-term relationships. "It takes more market leaders in the industry to adopt ATA as an important part of their technology roadmaps to help users feel more comfortable about ATA as a viable alternative. It's a matter of psychology, of marketing, of testing and experience," he says.
According to Vaughn, however, resistance to ATA in mainstream enterprise RAID applications runs deep. "Enterprise customers are absolutely willing to consider ATA in distributed environments, but not in the data center," he says. "If you talk to the data center guys, they aren't willing to risk their careers just to save money by using ATA instead of SCSI."
|Major vendors introduce ATA RAID products
In fact, some IT managers are wary of ATA technology precisely because its cost appears too good to be true. According to Matthew Stock, director of information technology for the computer science and engineering department at State University of New York at Buffalo, his organization is not yet willing to move ATA-based RAID systems into high-performance environments in spite of its lower cost. "We've worked with the ATA systems, and it's a really good value for the dollar if you need a lot of storage and aren't too concerned about performance," he says. "But part of me thinks, if I'm getting 2TB of ATA storage for what it would cost for 300GB in a NetApp or EMC system, I've got to be losing something, whether it's the value-added software, or the performance, or the reliability."
In other cases, however, IT executives have decided the marginal performance benefits of SCSI simply aren't worth the price. Auctionwatch.com, San Bruno, CA, a major provider of online sales management applications and services, has almost completed a company-wide migration from SCSI to ATA-based storage arrays. According to CTO Greg McNutt, although the move was initially cost-driven, the company gets virtually the same level of performance and reliability it had with SCSI storage - including on critical database and application servers. "On our systems, the performance has been nearly equivalent," McNutt says. "Even on our databases, where we initially had some concern about performance issues, right now the evidence is that the ATA drives aren't any better or worse [than SCSI]."
Mike Wentz, director of product marketing for 3ware, in Mountain View, CA, says he believes resistance to ATA will continue to wane as managers gain more exposure and learn to accept the technology. "The price point of ATA is so attractive that companies can use it for data that didn't have the benefit of RAID protection in the past," he says. "This gets ATA into the data center through a bottom-up approach ... as CIOs and IT managers get comfortable with ATA technology on the low end, it will begin to migrate up the hierarchy.
Roger Cox, a chief analyst in Gartner Dataquest's Storage Research organization, observed that other storage technologies traveled a similar path into the data center. "You have to fight customer perceptions. They'll say, 'ATA technology is junk. I don't want that, I want SCSI and Fibre Channel.' But we're going through the same experience with ATA drives that we went through 15 years ago, when EMC and other companies introduced drives based on small form factors at a time when they weren't considered adequate for enterprise use," he says. (See "Serial ATA and iSCSI.")
Accepting the inevitable
Do top-tier storage vendors have an interest in slowing the spread of ATA-based RAID products? The thought has occurred to some competitors who point out the unusually high margins associated with SCSI storage hardware, which in many cases costs two to three times more per GB of storage than ATA disks.
"I think they're being dragged kicking and screaming into the ATA market," Ripley says of the major vendors. "You see a huge price gap between their ATA and SCSI products. They're trying to come up with creative marketing reasons why one is different from the other, but it's all pretty transparent. To be fair, it's a huge problem: They're used to selling at very high margins, and the ATA business is based on low margins and low profits."
According to Studham, some vendors were reluctant to work with his organization on ATA-based RAID solutions. "I think it's just a marketing decision on their part," he says. "If you have a market selling high-performance SANs for $50,000 per TB you'd be shooting yourself in the foot to come out with a product that had the same performance characteristics at $5,000 per TB."
Cox agrees that some vendors view ATA-based RAID as a threat rather than as a new business opportunity. "To me, a lot of this isn't about technology. It's about protecting revenue and protecting business," he says. "Companies like IBM, Dell, and HP are reluctant to sell ATA because they don't make as much money on it, but eventually the competition will force them to change."
According to Bennett, however, Network Appliance has already embraced ATA as a rapidly growing part of the enterprise storage market. "These lesser technologies generally start with poor performance and low reliability, but their main benefit is that they're cheap and just good enough to work in niche markets. But as they get better over time, they get traction and move up-market," he says. "It's a classic example of disruptive innovation - the incumbents fight it to protect their installed base, and the upstarts embrace the technology and drive it forward. But you either deal with reality or you get run over, and our plans are to embrace this stuff actively."


text:
Whenever I am out and about the first question people ask: "Do you have a website?" So I thought I'd talk briefly about the difference between a blog and an author website and if you need both.
First, no. You don't necessarily need both, though I do recommend it for authors with several published books. But, first, let's get into the major differences.
Though both are referred to as "websites" a website is different from the blog in that it is something that is static and unchanging. It focuses on the author and his/her work without the distraction of too many other elements (like new posts). Sometimes websites just have one page and that's OK. The purpose of the website is to give immediate information about who the person is, what it is that they do and how you can stay in touch with them and their work. These things must be understood immediately upon visiting the author's website.
A blog is the place where the author (that's you) would write on a regular and consistent basis. Deriving from the word weblog, blogs are technically also websites but the differences is that readers can come to learn more about you as a person and become familiar with your work through your consistent posts. They can get to know you personally and as you are writing your book, not just by reading your published work. A blog is always changing as the writer is always posting new content and is much more interactive than a website which is the basic difference between the two. Blogs have comments, sharing options and catch the attention of Google much better than a static website.
So the major difference is:
- Website- Static, to the point, unchanging (can have widgets and things but does not change as much with updated posts.)
- Blog – Constantly changing, interactive, easily indexed by Google
The question is: When should you invest in a website or blog?
If you have no books out, it would make more sense to start a free WordPress blog before investing money into a website. Use the free blog to get a feel for blogging and writing publicly, and use it as a way to build your platform by adding value that brings readers. Don't just talk about your writing, talk about your life in general. Share your favorite kind of music, movies, or whatever pertains to the subject of the book you are writing. Also, learn more about blogging in general.
I am not going to get into the "Is writing blogging?" debate. I am just going to say that if you're a writer using blogging to connect with readers you should probably take the time to learn a little bit about how your blog platform of choice works if you hope to do well. No, I don't think just publishing posts alone is enough. You can write until you're blue in the face but if you don't know how to add tags and categories, set up an about or contact page, connect social media, add a follow button and all of the basic stuff, your blog is just going to sit there doing nothing. People may find you eventually, but understanding these basics will help them to find you quicker.
In any event, use blogging as an opportunity to be social, make new friends, and network with professionals. Blogs are interactive and a great way to keep your readers updated. It's also the easiest way for you to get to know your audience on a level beyond the basics. You can tell by likes, comments or social shares what kind of content people like. This will help you to produce more valuable content and that's what you want.
So, website? Blog? Both?
If you have several books published I would say to have both a website and a blog, with the blog accessible through your website.
I am not saying you have to spend a lot of money on a website but it should certainly be part of your budget strategy when you are ready to begin. I don't understand why in every other business people understand that to start a business is to also start a financial plan as well, except when it comes to writing. Publishing books, my dearest Indie Authors, is not free. It doesn't have to cost a lot of money to publish a book but it will cost something. Create a budget for that something and don't publish the book until you can afford to do so. If you want to become a Self-Publisher you will need to be just as financially responsible as if you were starting any other business. Let's start taking ourselves seriously as authors! And if you're serious about publishing you must consider thinking like a businessperson and the basics of all businesses are having a website where people can learn more about that business. If you're a serious author you should have a website.
But, your blog can also certainly act as your website….with a few changes.
Because the blog and the website still have major differences, if you do this (have your WordPress blog act as your website) consider making a few changes to your blog:
- Use your author name as your blog name and purchase a domain name. If you intend to use your blog as an author blog you are going to want it to be something like: www dot yournamehere dot com, and not www dot tanyaforeverlove dot wordpress dot com. Yes, this blog is not named after me but don't be like me. But, also consider that I have an author website that is named after me already and this blog is linked to that site. I can send people to yecheilyahysrayl.com and they can still access this blog and that's what you want: a place where people can access all of you in one place.
- If your blog is also your website (and you blog using WordPress), consider setting up a static or landing page. I can just tell people to go to yecheilyahysrayl.com and they will find everything they need on me (including this blog). But if you are using your blog as your website, remember, the major differences between the website and blog is that the website is static and gets straight to the point. There is no long list of posts to sift through and what the person does is immediately available. An author website focuses ONLY on you, the author, and your work. It's unchanging and provides everything someone would need to learn more about you without the added commentary, widgets, theme changes and constantly updated articles. This means that if your blog is your website, you may want to change your blog name to reflect your author name, create a domain name of that name and then, you may want to also create a static page.
To create a static page on your blog, first, create a new page.
Dashboard > Pages > Add New
Make this a landing page. A landing page is a single web page used to promote a business or product. Click on my Stella Trilogy Page Here for an example. It was once the static page for this blog. Notice the number of comments. I also sold books through that page. By being able to keen in on the books with no other distractions, people were capable of focusing on the work. That's what you want and that's what author websites provide. If your blog is your author website, you can provide that same kind of focus by adding a static page.
After you've published your new page you'd want to make it your static page.
Go to your dashboard
Setting > Reading >
Under Your Homepage Displays, check static and then check the landing page you just created
Now, when you tell people about your website they won't be distracted by your recent blog posts, sidebar widgets, comments, etc. It will act as an author website but also a blog.
Cons: Of course, there are pros and cons to everything. One con of having a static page on your blog is that sometimes it can be harder for people to access your blog posts and follow you. If people have to look for stuff they usually leave. This is one reason I took down my static page. Depending on your theme of choice, people won't be able to access your blog posts or follow you with the static page up. With this theme I am using, the static page doesn't even show my follow button.
Which comes back around to why I think, if you have several books out and have established yourself, it's easier to have both.
- If you have no books out and are just getting started, create a free WordPress blog and be sure to name your blog after your author name as it will, for now at least, also act as your author website and people will try finding you first by your name so it's easier.
- If you have several books out have both an author website and a blog. I suggest using either WordPress to create your author website or Squarespace and then making sure that your blog is accessible through your website. You can create a blog through your website platform (i.e. through Squarespace) or you can create a blog on WordPress separately and then just link it to your website. Either way, you want people to access the blog through the website.

subset: commoncrawl


text:
- Did you mean
- wooster ag facilities consisted research farm
Search results
CFAES and EEOB Graduate Student Support Group
strategies Interpersonal relationships Teaching/research balance Access to other helpful resources Support ... group meetings take place on both the Columbus and Wooster campuses. Please direct all inquiries for the ... Taylor (email@example.com), or Program Assistant, Alicia Baca (firstname.lastname@example.com). Support group meetings in Wooster have been ...
News tips and events for the week of Nov. 4
feature researchers at stations around the farm for short discussions and Q&A. No registration fee for ... with China and other countries, and the impact of those relations on farmers; farm-income trends and ... (CFAES). It will be held at the Nationwide & Ohio Farm Bureau 4-H Center, 2201 Fred Taylor Drive, ...
HCS students win awards at American Society of Agronomy's annual meeting
her oral presentation in the Applied Soybean Research community and Alyssa Lamb took 2 nd place for ...
Chow Line: How long is too long for holiday leftovers?
Sciences and its outreach and research arms, OSU Extension and the Ohio Agricultural Research and ...
Respiratory Safety
Lisa Pfeifer – OSU Ag Safety and Health Education Coordinator Protect yourself, employees, and ... respiratory diseases at https://ohioline.osu.edu/factsheet/aex-591105. Put a box of N-95s in the farm truck ... about the OSU Ag Safety and Health Program or contact Lisa Pfeifer, at firstname.lastname@example.com or ...
News tips and events for the week of Oct. 28
Dairy Center, 2250 Oil City Road, and will feature researchers at stations around the farm for short ... 4 p.m., Nationwide & Ohio Farm Bureau 4-H Center, 2201 Fred Taylor Drive, Columbus, Ohio. A daylong ... Financial Concepts for Natural Resource Professionals, 9 a.m. to 4 p.m., Nationwide & Ohio Farm Bureau ...
Converge on 'Wicked Systems Problems' Nov. 18 in Columbus
program, its flyer says, "will explore the application of transdisciplinary research and system approaches ... at Ohio State's Nationwide & Ohio Farm Bureau 4-H Center, 2201 Fred Taylor Drive, on the Columbus ...
Chow Line: How to handle diabetes during the holidays
foods that are often high in sugar, sodium, fat, and calories," Lobb said. "Since research shows that ... Environmental Sciences and its outreach and research arms, OSU Extension and the Ohio Agricultural Research and ...
Media Advisory: Ohio State food safety center to hold food safety forum Nov. 14
Tracy Turner Media Advisory What: The Center for Foodborne Illness Research and Prevention (CFI) ... the food safety work being conducted by Ohio State faculty and researchers. Attendees engaged in food ... safety research are also invited to participate in a poster session during the event to showcase their ...
Awards and recognitions
Read more here and here. Tech commercialization award Katrina Cornish, Ohio Research Scholar and ... research discoveries and for the role the faculty member played in translating those discoveries into ... in Michigan, including by bringing the largest graduate student delegation to the event. Research ...


text:
PANAMA CITY � Don�t forget to buckle up.
PANAMA CITY � Don�t forget to buckle up.
Local law enforcement agencies and the Florida Highway Patrol are taking part in the 2013 national Click It or Ticket seat belt enforcement campaign that runs through June 2. Anyone � driver or passenger � not using a seat belt runs the risk of getting a ticket.
The Panama City Beach Police Department has conducted three surveys so far to see how many people wear seat belts, PCBPD Lt. Richard McClanahan said. At the two intersections where the survey was conducted, 90 percent were wearing seat belts, and the third survey showed 78 percent were buckled up, McClanahan said.
PCBPD is not having special safety checkpoints but will follow normal routines. Several signs have been put up to make drivers aware of the seat belt enforcement campaign, McClanahan said.
�All we want is the public to be safe,� he said. The PCBPD also wants to educate the public, he added.
The Bay County Sheriff�s Office, as well as Panama City Police Department, also participate in the campaign, along with other area law enforcement agencies.
�We do have increased patrols out this weekend,� PCPD Lt. Robert Luther said.
The focus will not only be on seat belt enforcement, but on the overall safety of the public, he said, such as preventing drunk driving.
Wearing a seat belt is the most effective way to help prevent injuries in the event of a traffic accident, according to the Florida Highway Patrol (FHP).
Florida�s primary safety belt law requires drivers and passengers to fasten their seat belts. FHP encourages people to buckle up every time they get in their vehicle and to make sure all passengers also are buckled up.
�Seat belts have saved thousands of lives and are one of the most effective safety tools in your vehicle,� said Col. David Brierton, director of the Florida Highway Control.
You can help
To increase awareness of the importance of wearing a seat belt to future drivers, the state Department of Highway Safety and Motor Vehicles is inviting Florida middle school students to submit suggestions for a new seat belt poster and calendar for 2014. The contest encourages students to submit ideas that will motivate others to wear their seat belt. More information can be found by clicking on Seat Belt Poster Contest at www.flhsmv.gov.


text:
Global SaaS-Based SCM Market research reports meets with clients expectations by covering all industrial parameters like Key Manufacturers, Top Regions, Developments, Technology, R&D, Trend, Price, Revenue and Future industrial growth.
Download Free Sample Copy Of Report @ www.marketresearchtrade.com/report/global-saas-based-scm-market-2017-industry-sales.html#Request_Sample
The research methodology used to estimate and forecast the SaaS-Based SCM market began with capturing data on key vendors' revenues through secondary research that included directories and databases. The increasing importance of data collection and analytics has resulted in the emergence of SaaS-Based SCM market over the past few years. The global SaaS-Based SCM market was valued at USD xx million in 2017 and is estimated to be worth USD xx million by 2025, growing at a CAGR of xx% from 2018 to 2025. Increasing adoption of data collection for scientific research, finance, and industrial applications is expected to drive market growth.
Numerous key players operating within the global SaaS-Based SCM market have been included in the global SaaS-Based SCM market research report. Parameters such as company information, product specifications, capacity, sales revenues, volume, price, cost, and margin have been provided for the below-listed companies, which in turn will provide an in-depth understanding of the existing competition.
We can also provide the customized separate regional or country-level reports, for the following regions:
North America
United States
Top Key Vendor In Global SaaS-Based SCM Market:
Market segment by Type, the product can be split into :
Market segment by Application, Mortgage and Loans Software can be split into :
Complete Report With TOC @ www.marketresearchtrade.com/report/global-saas-based-scm-market-2017-industry-sales.html
With a purpose of enlightening new entrants about the possibilities in this market,report investigates new project feasibility. A thorough investment analysis is provided in report which forecasts imminent opportunities for the Global and Chinese SaaS-Based SCM market players.
The study objectives of this report are:
- To analyze global SaaS-Based SCM status, future forecast, growth opportunity, key market and key players.
- To present the SaaS-Based SCM development in United States, Europe and China.
- To strategically profile the key players and comprehensively analyze their development plan and strategies.
- To define, describe and forecast the market by product type, market and key regions.
The future aspects impacting the global SaaS-Based SCM market in every possible way are also further discussed in the report. The market providers compete on the basis of innovation, reputation, pricing, service, promotion and distribution. The SaaS-Based SCM market report has faced several phases after gathering the most important data from the research with facing the challenge of arranging it in a proper manner, which has made the analysis more efficient and effective.
Connect with us on :
Market Research Trade
3422 SW 15 Street, Suit #8138,
Deerfield Beach, FL-33442
United States
Website : marketresearchtrade.com/
Toll Free: 1-855-465-4651 (USA/Canada)
Email: firstname.lastname@example.com


text:
At the end of July, we went to the opening of No Longer Empty, an exhibition inspired by the High Line and located nearby the in an empty storefront space.
Now, in conjunction with that exhibition, the show's organizers are presenting a panel discussion on public art and alternative art spaces, featuring 7 speakers… including me!
The other panelists include Tom Finkelpearl, Director of the Queens Museum of Art; Anita Durst, Founder of Chashama; Steven Evans, Assistant Director of Dia Beacon; Peter Marcuse, Professor of Urban Planning Emeritus, Columbia University; Sean Slemon, Featured Artist; and Asher Remy-Toledo, No Longer Empty's Curator.
It promises to be a lively discussion of how public art can reclaim and revitalize spaces. Hope to see you there!
Panel Discussion: Public Art and Alternative Spaces Reconsidered
Caledonia Retail Space
447 West 16th St., at 10th Avenue
$5 suggested donation goes toward No Longer Empty's future productions
Filed under: Uncategorized |


text:
Photo By: Preston Lee
Photo By: Sandra Diaz
Photo By: Jeff Herr
Photo By: David Tsay
Photo By: Swim University
Photo By: Julie Martens Forney
Photo By: Jenna Sue Design
Photo By: Ball Horticultural Company
Photo By: Chipper Hatter
Photo By: Aubrey Pick
Neutral Mediterranean Living Room With Chesterfield Sofa
A rich neutral color palette makes this Mediterranean living room feel warm and inviting. Elegant touches like the stone fireplace and tan Chesterfield sofa give the space a sophisticated feel.
Visit Original Photo
White Modern Great Room With Orchid
Texture is the way to bring visual interest to a monotone room. Here, glossy surfaces like the dining table and cabinetry combine with leather, stainless steel and glass to give this all-white penthouse dimension.
Coastal Chic Living Room
This coastal chic living room features large framed art in a blue pattern that flows seamlessly to the wicker cushioned sofa with navy throw pillows and complimentary wicker coffee table. Two sturdy and matching blue side tables flank the couch with floor lamps on a neutral rug.
Home Office
Anyone who needs a quiet spot — whether Miranda's preparing homeschool lessons or one of the kids is playing a computer game — can find it in here. Normally the wire shelves are filled with books and plants, but they got cleared out for an Advent calendar made of gift boxes, with a treat in each one. Ever the retro furniture fan, Luke found the military desk at a thrift store and the chair at a garage sale, then had it reupholstered.
Master Bathroom
"I love a bath at the end of the day, so I think Luke was channeling me in here," says Miranda. He paired the fiberglass tub by AKDY with a floating vanity he designed that's topped with black soapstone. Tall mirrors from IKEA look even sleeker with globe pendants hung low in front—since they're see-through, they don't obstruct the view in the mirrors.
Master Bedroom
Luke and Miranda got a king bed for the first time — their old place didn't have the space — and it's appreciated by everyone. When Luke designed the room, he was going for something unexpected. "I thought the 'Love Always' sign, which I had made as a headboard, was romantic," says Luke. (Yes, it has a dimmer.) The rug, nightstand and dresser are vintage finds.
One of Luke's early visions for the house was a matte black kitchen. "It contrasts nicely with wood and makes the appliances blend in seamlessly," says Luke. The cabinets and the island are from IKEA, and he got vintage green pendants from a local flea market to play up the hints of green veining in the black soapstone counters. Industrial-style counter stools from Craigslist provide the perfect place to perch with hot chocolate after playing in the snow.
Dining Room
This spot off the kitchen, where both meals and schoolwork happen, is bustling all day long. Luke brought in pops of color with yellow chairs by Coavas and a wall hanging by local artist Kate Crowley-Gilbert. "I don't like spaces that seem cold or sterile, so Luke gave every room softness," says Miranda. Here it's a round table (vintage) and a woven pendant (from Candelabra). The wood piece against the wall is a refurbished plant stand, found at Boise Vintage.
Living Room
Going for maximum airiness, Luke and Clint gave this space a 20-foot-high ceiling and two-story windows. It's cozied up by a gas fireplace clad in smooth cedarwood, with soapstone on the hearth. Aggregate concrete floors with embedded river rocks stand up to occasional basketball dribbling. The 1960s leather sofa and the rockers are from Boise Vintage—Luke had the chairs reupholstered in buffalo check fabric from JoAnn.
That's one tall tree — 15 feet! Luke hangs finishing touches with direction from Tucker, while Brighten and Elias fill in the bottom.
Front Hall
The floating concrete staircase is one of Luke's favorite features in the house — shout-out to Clint for helping make it structurally sound. It's spruced up for the holidays with cypress garland and black-and-white bows, while wrapped presents ready to be doled out to extended family do double duty as decor.
Pool Ladder in In-Ground Pool
It's vital to blow out the pipes on an in-ground pool. Call a professional if you're uncertain how to do this procedure—it's what protects the water lines from freezing. Afterwards, plug the return jets and install a Gizzmo in the skimmer to prevent it from cracking. If you do these few tasks, you don't have to drain the pool for winter unless you have ornamental tile edging the pool. In that case, drain water 4 inches below the tile.
Winter Container Garden
Dress up spent summer and fall container gardens with boughs of fresh evergreens for a colorful winter display. Greens like spruce, fir, mountain hemlock and Virginia pine retain color and needles to provide a long winter display. Treat cut greenery with an anti-transpirant to help stems retain moisture. Use bunched ornamental grass stems or bundled branches to add a strong vertical element to designs.
Chic Country Bathroom With Wooden Ladder
A wooden ladder adds instant charm above the toilet, offering a place to hang a hand towel and a basket to store extra towels and any other bathroom necessities. See more of this bathroom's remodel here >>
Updated Kitchen With Neutral Gray Cabinets and Cherry Wood Floors
This eat-in-kitchen with gray cabinets and black and white curtains is balanced with a cherry wood floor, making the dining table and chairs pop as the centerpiece of the room.
Flip or Flop: Unique Use of Space in White Modern Kitchen
As seen on HGTV's Flip or Flop, an extra long countertop is a creative way to make the most of the space in this bright white, modern kitchen. Hardwood floors extend into the living room pulling the separate spaces together.
'Dragon Wing Pink' Begonia
Begonias as a group, including 'Dragon Wing' types, unfurl leaves and flowers that are thicker, offering a bite that Japanese beetles don't savor. Use 'Dragon Wing' begonias in containers or planting beds in part shade to full sun settings.
Navy and White Master Bedroom
Choose a navy and white master bedroom - Navy and white is one of the most elegant colour combinations, and a timeless one at that. Navy is dark enough to provide contrast but the blue adds a touch of warmth. If you start with blue walls, you can afford to bring in a lot of white in the ways of curtains, cushions, upholstery or bed coverings.
Coastal Bathroom With Blue Floor
To use a dark color in a space and maintain a light, airy feel overall, focus the shade in one main area, like the floor, ceiling or an accent wall. This bathroom pairs navy floor tiles with white walls and countertops and a blonde wood vanity.


text:
Ah, the l-shaped stairs. Don't you just love using them? Except for the fact you can't put a wall under the left-hand stairs.
You can on the right here:
But not here on the left:
You can't use these stairs in symmetrical projects, like the above photos. You can't place the left-hand stairs against a wall, which in my opinion is where they logically might go. But what if...you could?
With a packaged version of these stairs, I tinkered around in S3PE until I managed to fix this oversight. The stairs are still fully functional, but can now be placed up against a wall!
You can fix this yourself...or use my already edited package: http://www.mediafire.com/download/x6tof ... 29.package
I really loved this set, but this minor bug drove me nuts and I couldn't use them when I wanted to. Now I use these all the time. I hope this helps someone!


text:
Page 1 of 5
Review: Passive solution for Core i7
We've already written about Thermalright's HR-02 CPU cooling, one of the pretty hefty solutions claiming to pack enough punch to passively cool a Core i7. As sceptical as we are, we've had our doubts as well, but Thermalright has proven to be right on the money. In fact, semi-passive operation will help the HR-02 in cooling a Core i7 930 at 2.8GHz and even a Core i7 965 Extreme at 3.2GHz.
HR-02 has a large dissipation surface making it easy for the passive cooler to release heat. Like any other passive cooling solution, HR-02 too requires at least some basic airflow within the case. HR-02 performance will naturally be improved if you strap it with a fan, but since the HR-02 was designed to passively cool Core i7 CPUs at reference voltages and clocks, a decent airflow within the case will do the trick.
Prev Next »


text:
About Whitehorse Minor Hockey Association
Pee Wee Dev Oct Practice Schedule Pee Wee Dev Oct Practice Schedule
read more »
View More News »
View Full Calendar »
The WMHA Office is located in the Sport Yukon Building on 4th Avenue
4061-4th Ave, Whitehorse, YT Y1A 1H1
Do you want to reach thousands of users across hundreds of Minor Sports Association websites? Advertising with RAMP has never been easier! Get in touch with us now to discuss your needs.
RAMP InterActive - Terms of Use - Privacy Policy
Admin Login


text:
|By Geva Perry
Article Rating:
|January 13, 2009 12:19 PM EST
Geva Perry's "Thinking Out Cloud" Blog
While the debate on the actual definition of cloud computing rages on, it seems that a whole new cloud computing vocabulary is rapidly emerging. I thought I'd list some of the new terms I'm seeing with brief definitions, examples of usage and references to discussions related to these terms. Hope this is useful.
Cloudburst: The term cloudburst is being use in two meanings, negative and positive:
- Cloudburst (negative): The failure of a cloud computing environment due to the inability to handle a spike in demand.
Reference:"The only way to do cloud computing efficiently is to share the cloud - to establish a broad, multitenant grid (or a number of them) that balances the loads of many different companies. Otherwise, it'll be one cloudburst after another, and a whole lot of underutilized capital assets." Source: Nicholas Carr: Intuit's cloudburst frustrates customers.
- Cloudburst (positive): The dynamic deployment of a software application that runs on internal organizational compute resources to a public cloud to address a spike in demand.
Reference: "ISV virtual appliances should underpin a new surge in cloud use followed by self-service mechanisms and enterprise connectors enabling organizations to 'cloudburst' to using cloud services." Source: The 451 Group: RightScale rolls its on-ramp toward other cloud systems (subscription required)
Related uses: Cloudbursting. Reference "In addition to direct sales to enterprises, going forward it hopes that extending out from private clouds to public ones – what we like to call 'cloudbursting' – will become a prevailing IT weather pattern and provide it with additional opportunities. " Source: The 451 Group: Q-Layer has the wisdom to enable private clouds (subscription required)
Cloudstorming: The act of connecting multiple cloud computing environments.
Reference: "...Zimory will be covering off the key cloudy marketplaces and activities: public cloud, internal cloud, cloudbursting (grow-over from internal to public clouds) and cloudstorming (connecting multiple clouds)." Source: The 451 Group: A Cloud for All Seasons
Vertical Cloud: A cloud computing environment optimized for use in a particular vertical -- i.e., industry -- or application use case.
Reference: "The verticalization of the cloud would provide marketing benefits, as Friedman notes, while also providing a possible means of addressing issues of information security crucial to industries such as health care and financial services." Source: Nicholas Carr: The vertical cloud
Private Cloud: A cloud computing-like environment within the boundaries of an organization and typically for its exclusive usage.
Reference: "It is these companies that have dramatically leveraged their internal and originally Private Cloud Computing infrastructures to significant economic benefit. " Source: Kent Langley: Private Cloud Computing: A Few Thoughts
Internal Cloud: A cloud computing-like environment within the boundaries of an organization and typically available for exclusive use by said organization.
Reference: "With Cloud Computing becoming more and more popular, large corporations are likely to set up their own clouds and integrate them with external clouds, like Amazon EC2." Source: Markus Klems: Internal Cloud
Hybrid Cloud: A computing environment combining both private (internal) and public (external) cloud computing environments. May either be on a continuous basis or in the form of a 'cloudburst'.
Reference: "Microsoft would, no doubt, agree. Their "software plus services" approach similarly advocates a hybrid cloud/desktop environment." Source: Kendall Whitehouse: Kevin Lynch: Clearing the AIR
Cloudware: A general term referring to a variety of software, typically at the infrastructure level, that enables building, deploying, running or managing applications in a cloud computing environment.
Reference: "Go to Google Maps, Yahoo Mail, or MySpace — most of Web 2.0, in other words — and you're using cloudware." Source: Wired: Geekipedia - Cloudware
External Cloud: A cloud computing environment that is external to the boundaries of the organization. Although it often is, an external cloud is not necessarily a public cloud. Some external clouds make their cloud infrastructure available to specific other organizations and not to the public at-large.
Reference: "If an enterprise were to run an app in an external Cloud and wants to connect that to their systems of record in their own datacenters, they might want to consider the same platform in their data centers." Source: Bert Armijo: Pain in the aaSemantics
Public Cloud: A cloud computing environment that is open for use to the general public, whether individuals, corporations or other types of organizations. Amazon Web Services are an example of a public cloud.
Reference: Gerrit Huizenga: Um, Just who is managing your public cloud?
Geva Perry's Lexicon continues on the next page
- The Top 150 Players in Cloud Computing
- SYS-CON's 1st International Cloud Computing Conference & Expo: Show Report
- Building Private and Hybrid Clouds with Ubuntu 9.04
- Creating a Common Cloud Computing Reference API - Part One
- Cloud Expo New York Speaker Profile: Mårten Mickos – Eucalyptus Systems
- Cloud Computing: First-Hand Stories and Use Cases
- Cloud Expo Silicon Valley Speaker Profile: Rich Wolski – Eucalyptus Systems
- Enabling an Infrastructure for Cloudbursting
- Citrix Cloud Center + 3Tera AppLogic Platform = Enterprise-Level Cloud Computing
- Rackspace Cloud APIs Open Sourced


text:
Ada Programming/Type System
- 1 Predefined types
- 2 The Type Hierarchy
- 3 Concurrency Types
- 4 Limited Types
- 5 Defining new types and subtypes
- 6 Subtype categories
- 7 Qualified expressions
- 8 Type conversions
- 9 Elaborated Discussion of Types for Signed Integer Types
- 10 Relations between types
- 11 See also
Ada's type system allows the programmer to construct powerful abstractions that represent the real world, and to provide valuable information to the compiler, so that the compiler can find many logic or design errors before they become bugs. It is at the heart of the language, and good Ada programmers learn to use it to great advantage. Four principles govern the type system:
- Strong typing: types are incompatible with one another, so it is not possible to mix apples and oranges. There are, however, ways to convert between types.
- Static typing: type checked while compiling, this allows type errors to be found earlier.
- Abstraction: types represent the real world or the problem at hand; not how the computer represents the data internally. There are ways to specify exactly how a type must be represented at the bit level, but we will defer that discussion to another chapter.
- Name equivalence, as opposed to structural equivalence used in most other languages. Two types are compatible if and only if they have the same name; not if they just happen to have the same size or bit representation. You can thus declare two integer types with the same ranges that are totally incompatible, or two record types with exactly the same components, but which are incompatible.
Types are incompatible with one another. However, each type can have any number of subtypes, which are compatible with their base type and may be compatible with one another. See below for examples of subtypes which are incompatible with one another.
Predefined types[edit]
There are several predefined types, but most programmers prefer to define their own, application-specific types. Nevertheless, these predefined types are very useful as interfaces between libraries developed independently. The predefined library, obviously, uses these types too.
These types are predefined in the Standard package:
- Integer
- This type covers at least the range .. (RM 3.5.4 (21) (Annotated)). The Standard also defines
Positivesubtypes of this type.
- Float
- There is only a very weak implementation requirement on this type (RM 3.5.7 (14) (Annotated)); most of the time you would define your own floating-point types, and specify your precision and range requirements.
- Duration
- A fixed point type used for timing. It represents a period of time in seconds (RM A.1 (43) (Annotated)).
- Character
- A special form of Enumerations. There are three predefined kinds of character types: 8-bit characters (called
Character), 16-bit characters (called
Wide_Character), and 32-bit characters (
Characterhas been present since the first version of the language (Ada 83),
Wide_Characterwas added in Ada 95, while the type
Wide_Wide_Characteris available with Ada 2005.
- String
- Three indefinite array types, of
Wide_Character, and
Wide_Wide_Characterrespectively. The standard library contains packages for handling strings in three variants: fixed length (
Ada.Strings.Fixed), with varying length below a certain upper bound (
Ada.Strings.Bounded), and unbounded length (
Ada.Strings.Unbounded). Each of these packages has a
Wide_and a
- Boolean
Booleanin Ada is an Enumeration of
Truewith special semantics.
System and
System.Storage_Elements predefine some types which are primarily useful for low-level programming and interfacing to hardware.
- System.Address
- An address in memory.
- System.Storage_Elements.Storage_Offset
- An offset, which can be added to an address to obtain a new address. You can also subtract one address from another to get the offset between them. Together,
Storage_Offsetand their associated subprograms provide for address arithmetic.
- System.Storage_Elements.Storage_Count
- A subtype of
Storage_Offsetwhich cannot be negative, and represents the memory size of a data structure (similar to C's
- System.Storage_Elements.Storage_Element
- In most computers, this is a byte. Formally, it is the smallest unit of memory that has an address.
- System.Storage_Elements.Storage_Array
- An array of
Storage_Elements without any meaning, useful when doing raw memory access.
The Type Hierarchy[edit]
Types are organized hierarchically. A type inherits properties from types above it in the hierarchy. For example, all scalar types (integer, enumeration, modular, fixed-point and floating-point types) have operators "<", ">" and arithmetic operators defined for them, and all discrete types can serve as array indexes.
Here is a broad overview of each category of types; please follow the links for detailed explanations. Inside parenthesis there are equivalences in C and Pascal for readers familiar with those languages.
- Signed Integers (int, INTEGER)
- Signed Integers are defined via the range of values needed.
- Unsigned Integers (unsigned, CARDINAL)
- Unsigned Integers are called Modular Types. Apart from being unsigned they also have wrap-around functionality.
- Enumerations (enum, char, bool, BOOLEAN)
- Ada Enumeration types are a separate type family.
- Floating point (float, double, REAL)
- Floating point types are defined by the digits needed, the relative error bound.
- Ordinary and Decimal Fixed Point (DECIMAL)
- Fixed point types are defined by their delta, the absolute error bound.
- Arrays ( [ ], ARRAY [ ] OF, STRING )
- Arrays with both compile-time and run-time determined size are supported.
- Record (struct, class, RECORD OF)
- A record is a composite type that groups one or more fields.
- Access (*, ^, POINTER TO)
- Ada's Access types may be more than just a simple memory address.
- Task & Protected (no equivalence in C or Pascal)
- Task and Protected types allow the control of concurrency
- Interfaces (no equivalence in C or Pascal)
- New in Ada 2005, these types are similar to the Java interfaces.
Classification of Types[edit]
Ada's types can be classified as follows.
Specific vs. Class-wide
type T is ... -- a specific type T'Class -- the corresponding class-wide type (exists only for tagged types)
T'Class and
T'Class'Class are the same.
Primitive operations with parameters of specific types are non-dispatching, those with parameters of class-wide types are dispatching.
New types can be declared by deriving from specific types; primitive operations are inherited by derivation. You cannot derive from class-wide types.
Constrained vs. Unconstrained
type I is range 1 .. 10; -- constrained type AC is array (1 .. 10) of ... -- constrained
type AU is array (I range <>) of ... -- unconstrained type R (X: Discriminant [:= Default]) is ... -- unconstrained
By giving a constraint to an unconstrained subtype, a subtype or object becomes constrained:
subtype RC is R (Value); -- constrained subtype of R OC: R (Value); -- constrained object of anonymous constrained subtype of R OU: R; -- unconstrained object
Declaring an unconstrained object is only possible if a default value is given in the type declaration above. The language does not specify how such objects are allocated. GNAT allocates the maximum size, so that size changes that might occur with discriminant changes present no problem. Another possibility is implicit dynamic allocation on the heap and re-allocation followed by a deallocation when the size changes.
Definite vs. Indefinite
type I is range 1 .. 10; -- definite type RD (X: Discriminant := Default) is ... -- definite
type T (<>) is ... -- indefinite type AU is array (I range <>) of ... -- indefinite type RI (X: Discriminant) is ... -- indefinite
Definite subtypes allow the declaration of objects without initial value, since objects of definite subtypes have constraints that are known at creation-time. Object declarations of indefinite subtypes need an initial value to supply a constraint; they are then constrained by the constraint delivered by the initial value.
OT: T := Expr; -- some initial expression (object, function call, etc.) OA: AU := (3 => 10, 5 => 2, 4 => 4); -- index range is now 3 .. 5 OR: RI := Expr; -- again some initial expression as above
Unconstrained vs. Indefinite
Note that unconstrained subtypes are not necessarily indefinite as can be seen above with RD: it is a definite unconstrained subtype.
Concurrency Types[edit]
The Ada language uses types for one more purpose in addition to classifying data + operations. The type system integrates concurrency (threading, parallelism). Programmers will use types for expressing the concurrent threads of control of their programs.
The core pieces of this part of the type system, the task types and the protected types are explained in greater depth in a section on tasking.
Limited Types[edit]
Limiting a type means disallowing assignment. The "concurrency types" described above are always limited. Programmers can define their own types to be limited, too, like this:
type T is limited …;
(The ellipsis stands for private, or for a record definition, see the corresponding subsection on this page.) A limited type also doesn't have an equality operator unless the programmer defines one.
You can learn more in the limited types chapter.
Defining new types and subtypes[edit]
You can define a new type with the following syntax:
type T is...
followed by the description of the type, as explained in detail in each category of type.
Formally, the above declaration creates a type and its first subtype named
T. The type itself, correctly called the "type of T", is anonymous; the RM refers to it as
T (in italics), but often speaks sloppily about the type T. But this is an academic consideration; for most purposes, it is sufficient to think of
T as a type.
For scalar types, there is also a base type called
T'Base, which encompasses all values of T.
For signed integer types, the type of T comprises the (complete) set of mathematical integers. The base type is a certain hardware type, symmetric around zero (except for possibly one extra negative value), encompassing all values of T.
As explained above, all types are incompatible; thus:
type Integer_1 is range 1 .. 10; type Integer_2 is range 1 .. 10; A : Integer_1 := 8; B : Integer_2 := A; -- illegal!
is illegal, because
Integer_1 and
Integer_2 are different and incompatible types. It is this feature which allows the compiler to detect logic errors at compile time, such as adding a file descriptor to a number of bytes, or a length to a weight. The fact that the two types have the same range does not make them compatible: this is name equivalence in action, as opposed to structural equivalence. (Below, we will see how you can convert between incompatible types; there are strict rules for this.)
Creating subtypes[edit]
You can also create new subtypes of a given type, which will be compatible with each other, like this:
type Integer_1 is range 1 .. 10; subtype Integer_2 is Integer_1 range 7 .. 11; -- bad subtype Integer_3 is Integer_1'Base range 7 .. 11; -- OK A : Integer_1 := 8; B : Integer_3 := A; -- OK
The declaration of
Integer_2 is bad because the constraint
7 .. 11 is not compatible with
Integer_1; it raises
Constraint_Error at subtype elaboration time.
Integer_1 and
Integer_3 are compatible because they are both subtypes of the same type, namely
It is not necessary that the subtype ranges overlap, or be included in one another. The compiler inserts a run-time range check when you assign A to B; if the value of A, at that point, happens to be outside the range of
Integer_3, the program raises
There are a few predefined subtypes which are very useful:
subtype Natural is Integer range 0 .. Integer'Last; subtype Positive is Integer range 1 .. Integer'Last;
Derived types[edit]
A derived type is a new, full-blown type created from an existing one. Like any other type, it is incompatible with its parent; however, it inherits the primitive operations defined for the parent type.
type Integer_1 is range 1 .. 10; type Integer_2 is new Integer_1 range 2 .. 8; A : Integer_1 := 8; B : Integer_2 := A; -- illegal!
Here both types are discrete; it is mandatory that the range of the derived type be included in the range of its parent. Contrast this with subtypes. The reason is that the derived type inherits the primitive operations defined for its parent, and these operations assume the range of the parent type. Here is an illustration of this feature:
procedure Derived_Types is package Pak is type Integer_1 is range 1 .. 10; procedure P (I: in Integer_1); -- primitive operation, assumes 1 .. 10 type Integer_2 is new Integer_1 range 8 .. 10; -- must not break P's assumption -- procedure P (I: in Integer_2); inherited P implicitly defined here end Pak; package body Pak is -- omitted end Pak; use Pak; A: Integer_1 := 4; B: Integer_2 := 9; begin P (B); -- OK, call the inherited operation end Derived_Types;
When we call
P (B), the parameter B is converted to
Integer_1; this conversion of course passes since the set of acceptable values for the derived type (here, 8 .. 10) must be included in that of the parent type (1 .. 10). Then P is called with the converted parameter.
Consider however a variant of the example above:
procedure Derived_Types is package Pak is type Integer_1 is range 1 .. 10; procedure P (I: in Integer_1; J: out Integer_1); type Integer_2 is new Integer_1 range 8 .. 10; end Pak; package body Pak is procedure P (I: in Integer_1; J: out Integer_1) is begin J := I - 1; end P; end Pak; use Pak; A: Integer_1 := 4; X: Integer_1; B: Integer_2 := 8; Y: Integer_2; begin P (A, X); P (B, Y); end Derived_Types;
P (B, Y) is called, both parameters are converted to
Integer_1. Thus the range check on J (7) in the body of P will pass. However on return parameter Y is converted back to
Integer_2 and the range check on Y will of course fail.
With the above in mind, you will see why in the following program Constraint_Error will be called at run time, before
P is even called.
procedure Derived_Types is package Pak is type Integer_1 is range 1 .. 10; procedure P (I: in Integer_1; J: out Integer_1); type Integer_2 is new Integer_1'Base range 8 .. 12; end Pak; package body Pak is procedure P (I: in Integer_1; J: out Integer_1) is begin J := I - 1; end P; end Pak; use Pak; B: Integer_2 := 11; Y: Integer_2; begin P (B, Y); end Derived_Types;
Subtype categories[edit]
Ada supports various categories of subtypes which have different abilities. Here is an overview in alphabetical order.
Anonymous subtype[edit]
A subtype which does not have a name assigned to it. Such a subtype is created with a variable declaration:
X : String (1 .. 10) := (others => ' ');
Here, (1 .. 10) is the constraint. This variable declaration is equivalent to:
subtype Anonymous_String_Type is String (1 .. 10); X : Anonymous_String_Type := (others => ' ');
Base type[edit]
In Ada, all types are anonymous and only subtypes may be named. For scalar types, there is a special subtype of the anonymous type, called the base type, which is nameable with the 'Base attribute. The base type comprises all values of the first subtype. Some examples:
type Int is range 0 .. 100;
The base type
Int'Base is a hardware type selected by the compiler that comprises the values of
Int. Thus it may have the range -27 .. 27-1 or -215 .. 215-1 or any other such type.
type Enum is (A, B, C, D); type Short is new Enum range A .. C;
Enum'Base is the same as
Enum, but
Short'Base also holds the literal
Constrained subtype[edit]
A subtype of an indefinite subtype that adds constraints. The following example defines a 10 character string sub-type.
subtype String_10 is String (1 .. 10);
You cannot partially constrain an unconstrained subtype:
type My_Array is array (Integer range <>, Integer range <>) of Some_Type; -- subtype Constr is My_Array (1 .. 10, Integer range <>); illegal subtype Constr is My_Array (1 .. 10, -100 .. 200);
Constraints for all indices must be given, the result is necessarily a definite subtype.
Definite subtype[edit]
A definite subtype is a subtype whose size is known at compile-time. All subtypes which are not indefinite subtypes are, by definition, definite subtypes.
Objects of definite subtypes may be declared without additional constraints.
Indefinite subtype[edit]
An indefinite subtype is a subtype whose size is not known at compile-time but is dynamically calculated at run-time. An indefinite subtype does not by itself provide enough information to create an object; an additional constraint or explicit initialization expression is necessary in order to calculate the actual size and therefore create the object.
X : String := "This is a string";
X is an object of the indefinite (sub)type
String. Its constraint is derived implicitly from its initial value.
X may change its value, but not its bounds.
It should be noted that it is not necessary to initialize the object from a literal. You can also use a function. For example:
X : String := Ada.Command_Line.Argument (1);
This statement reads the first command-line argument and assigns it to
A subtype of an indefinite subtype that does not add a constraint only introduces a new name for the original subtype (a kind of renaming under a different notion).
subtype My_String is String;
My_String and String are interchangeable.
Named subtype[edit]
A subtype which has a name assigned to it. "First subtypes" are created with the keyword
type (remember that types are always anonymous, the name in a type declaration is the name of the first subtype), others with the keyword
subtype. For example:
type Count_To_Ten is range 1 .. 10;
Count_to_Ten is the first subtype of a suitable integer base type.
However, if you would like to use this as an index constraint on
String, the following declaration is illegal:
subtype Ten_Characters is String (Count_to_Ten);
This is because
String has
Positive as its index, which is a subtype of
Integer (these declarations are taken from package
subtype Positive is Integer range 1 .. Integer'Last; type String is (Positive range <>) of Character;
So you have to use the following declarations:
subtype Count_To_Ten is Integer range 1 .. 10; subtype Ten_Characters is String (Count_to_Ten);
Ten_Characters is the name of that subtype of
String which is constrained to
You see that posing constraints on types versus subtypes has very different effects.
Unconstrained subtype[edit]
Any indefinite type is also an unconstrained subtype. However, unconstrainedness and indefiniteness are not the same.
type My_Enum is (A, B, C); type My_Record (Discriminant: My_Enum) is ...; My_Object_A: My_Record (A);
This type is unconstrained and indefinite because you need to give an actual discriminant for object declarations; the object is constrained to this discriminant which may not change.
When however a default is provided for the discriminant, the type is definite yet unconstrained; it allows to define both, constrained and unconstrained objects:
type My_Enum is (A, B, C); type My_Record (Discriminant: My_Enum := A) is ...; My_Object_U: My_Record; -- unconstrained object My_Object_B: My_Record (B); -- constrained to discriminant B like above
Here, My_Object_U is unconstrained; upon declaration, it has the discriminant A (the default) which however may change.
Incompatible subtypes[edit]
type My_Integer is range -10 .. + 10; subtype My_Positive is My_Integer range + 1 .. + 10; subtype My_Negative is My_Integer range -10 .. - 1;
These subtypes are of course incompatible.
Another example are subtypes of a discriminated record:
type My_Enum is (A, B, C); type My_Record (Discriminant: My_Enum) is ...; subtype My_A_Record is My_Record (A); subtype My_C_Record is My_Record (C);
Also these subtypes are incompatible.
Qualified expressions[edit]
In most cases, the compiler is able to infer the type of an expression; for example:
type Enum is (A, B, C); E : Enum := A;
Here the compiler knows that
A is a value of the type
Enum. But consider:
procedure Bad is type Enum_1 is (A, B, C); procedure P (E : in Enum_1) is... -- omitted type Enum_2 is (A, X, Y, Z); procedure P (E : in Enum_2) is... -- omitted begin P (A); -- illegal: ambiguous end Bad;
The compiler cannot choose between the two versions of
P; both would be equally valid. To remove the ambiguity, you use a qualified expression:
P (Enum_1'(A)); -- OK
As seen in the following example, this syntax is often used when creating new objects. If you try to compile the example, it will fail with a compilation error since the compiler will determine that 256 is not in range of
with Ada.Text_IO; procedure Convert_Evaluate_As is type Byte is mod 2**8; type Byte_Ptr is access Byte; package T_IO renames Ada.Text_IO; package M_IO is new Ada.Text_IO.Modular_IO (Byte); A : constant Byte_Ptr := new Byte'(256); begin T_IO.Put ("A = "); M_IO.Put (Item => A.all, Width => 5, Base => 10); end Convert_Evaluate_As;
You should use qualified expression when getting a string literal's length.
"foo"'Length -- compilation error: prefix of attribute must be a name
-- qualify expression to turn it into a name
String'("foo" & "bar")'Length -- 6
Type conversions[edit]
Data do not always come in the format you need them. You must, then, face the task of converting them. As a true multi-purpose language with a special emphasis on "mission critical", "system programming" and "safety", Ada has several conversion techniques. The most difficult part is choosing the right one, so the following list is sorted in order of utility. You should try the first one first; the last technique is a last resort, to be used if all others fail. There are also a few related techniques that you might choose instead of actually converting the data.
Since the most important aspect is not the result of a successful conversion, but how the system will react to an invalid conversion, all examples also demonstrate faulty conversions.
Explicit type conversion[edit]
An explicit type conversion looks much like a function call; it does not use the tick (apostrophe, ') like the qualified expression does.
Type_Name (Expression)
The compiler first checks that the conversion is legal, and if it is, it inserts a run-time check at the point of the conversion; hence the name checked conversion. If the conversion fails, the program raises Constraint_Error. Most compilers are very smart and optimise away the constraint checks; so, you need not worry about any performance penalty. Some compilers can also warn that a constraint check will always fail (and optimise the check with an unconditional raise).
Explicit type conversions are legal:
- between any two numeric types
- between any two subtypes of the same type
- between any two types derived from the same type (note special rules for tagged types)
- between array types under certain conditions (see RM 4.6(24.2/2..24.7/2))
- and nowhere else
(The rules become more complex with class-wide and anonymous access types.)
I: Integer := Integer (10); -- Unnecessary explicit type conversion J: Integer := 10; -- Implicit conversion from universal integer K: Integer := Integer'(10); -- Use the value 10 of type Integer: qualified expression -- (qualification not necessary here).
This example illustrates explicit type conversions:
with Ada.Text_IO; procedure Convert_Checked is type Short is range -128 .. +127; type Byte is mod 256; package T_IO renames Ada.Text_IO; package I_IO is new Ada.Text_IO.Integer_IO (Short); package M_IO is new Ada.Text_IO.Modular_IO (Byte); A : Short := -1; B : Byte; begin B := Byte (A); -- range check will lead to Constraint_Error T_IO.Put ("A = "); I_IO.Put (Item => A, Width => 5, Base => 10); T_IO.Put (", B = "); M_IO.Put (Item => B, Width => 5, Base => 10); end Convert_Checked;
Explicit conversions are possible between any two numeric types: integers, fixed-point and floating-point types. If one of the types involved is a fixed-point or floating-point type, the compiler not only checks for the range constraints (thus the code above will raise Constraint_Error), but also performs any loss of precision necessary.
Example 1: the loss of precision causes the procedure to only ever print "0" or "1", since
P / 100 is an integer and is always zero or one.
with Ada.Text_IO; procedure Naive_Explicit_Conversion is type Proportion is digits 4 range 0.0 .. 1.0; type Percentage is range 0 .. 100; function To_Proportion (P : in Percentage) return Proportion is begin return Proportion (P / 100); end To_Proportion; begin Ada.Text_IO.Put_Line (Proportion'Image (To_Proportion (27))); end Naive_Explicit_Conversion;
Example 2: we use an intermediate floating-point type to guarantee the precision.
with Ada.Text_IO; procedure Explicit_Conversion is type Proportion is digits 4 range 0.0 .. 1.0; type Percentage is range 0 .. 100; function To_Proportion (P : in Percentage) return Proportion is type Prop is digits 4 range 0.0 .. 100.0; begin return Proportion (Prop (P) / 100.0); end To_Proportion; begin Ada.Text_IO.Put_Line (Proportion'Image (To_Proportion (27))); end Explicit_Conversion;
You might ask why you should convert between two subtypes of the same type. An example will illustrate this.
subtype String_10 is String (1 .. 10); X: String := "A line long enough to make the example valid"; Slice: constant String := String_10 (X (11 .. 20));
Slice has bounds 1 and 10, whereas
X (11 .. 20) has bounds 11 and 20.
Change of Representation[edit]
Type conversions can be used for packing and unpacking of records or arrays.
type Unpacked is record -- any components end record; type Packed is new Unpacked; for Packed use record -- component clauses for some or for all components end record;
P: Packed; U: Unpacked; P := Packed (U); -- packs U U := Unpacked (P); -- unpacks P
Checked conversion for non-numeric types[edit]
The examples above all revolved around conversions between numeric types; it is possible to convert between any two numeric types in this way. But what happens between non-numeric types, e.g. between array types or record types? The answer is two-fold:
- you can convert explicitly between a type and types derived from it, or between types derived from the same type,
- and that's all. No other conversions are possible.
Why would you want to derive a record type from another record type? Because of representation clauses. Here we enter the realm of low-level systems programming, which is not for the faint of heart, nor is it useful for desktop applications. So hold on tight, and let's dive in.
Suppose you have a record type which uses the default, efficient representation. Now you want to write this record to a device, which uses a special record format. This special representation is more compact (uses fewer bits), but is grossly inefficient. You want to have a layered programming interface: the upper layer, intended for applications, uses the efficient representation. The lower layer is a device driver that accesses the hardware directly and uses the inefficient representation.
package Device_Driver is type Size_Type is range 0 .. 64; type Register is record A, B : Boolean; Size : Size_Type; end record; procedure Read (R : out Register); procedure Write (R : in Register); end Device_Driver;
The compiler chooses a default, efficient representation for
Register. For example, on a 32-bit machine, it would probably use three 32-bit words, one for A, one for B and one for Size. This efficient representation is good for applications, but at one point we want to convert the entire record to just 8 bits, because that's what our hardware requires.
package body Device_Driver is type Hardware_Register is new Register; -- Derived type. for Hardware_Register use record A at 0 range 0 .. 0; B at 0 range 1 .. 1; Size at 0 range 2 .. 7; end record; function Get return Hardware_Register; -- Body omitted procedure Put (H : in Hardware_Register); -- Body omitted procedure Read (R : out Register) is H : Hardware_Register := Get; begin R := Register (H); -- Explicit conversion. end Read; procedure Write (R : in Register) is begin Put (Hardware_Register (R)); -- Explicit conversion. end Write; end Device_Driver;
In the above example, the package body declares a derived type with the inefficient, but compact representation, and converts to and from it.
This illustrates that type conversions can result in a change of representation.
View conversion, in object-oriented programming[edit]
Within object-oriented programming you have to distinguish between specific types and class-wide types.
With specific types, only conversions in the direction to the root are possible, which of course cannot fail. There are no conversions in the opposite direction (where would you get the further components from?); extension aggregates have to be used instead.
With the conversion itself, no components of the source object that are not present in the target object are lost, they are just hidden from visibility. Therefore, this kind of conversion is called a view conversion since it provides a view of the source object as an object of the target type (especially it does not change the object's tag).
It is a common idiom in object oriented programming to rename the result of a view conversion. (A renaming declaration does not create a new object; it only gives a new name to something that already exists.)
type Parent_Type is tagged record <components>; end record; type Child_Type is new Parent_Type with record <further components>; end record; Child_Instance : Child_Type; Parent_View : Parent_Type renames Parent_Type (Child_Instance); Parent_Part : Parent_Type := Parent_Type (Child_Instance);
Parent_View is not a new object, but another name for
Child_Instance viewed as the parent, i.e. only the parent components are visible, the child-specific components are hidden.
Parent_Part, however, is an object of the parent type, which of course has no storage for the child-specific components, so they are lost with the assignment.
All types derived from a tagged type
T form a tree rooted at
T. The class-wide type
T'Class can hold any object within this tree. With class-wide types, conversions in any direction are possible; there is a run-time tag check that raises
Constraint_Error if the check fails. These conversions are also view conversions, no data is created or lost.
Object_1 : Parent_Type'Class := Parent_Type'Class (Child_Instance); Object_2 : Parent_Type'Class renames Parent_Type'Class (Child_Instance);
Object_1 is a new object, a copy;
Object_2 is just a new name. Both objects are of the class-wide type. Conversions to any type within the given class are legal, but are tag-checked.
Success : Child_Type := Child_Type (Parent_Type'Class (Parent_View)); Failure : Child_Type := Child_Type (Parent_Type'Class (Parent_Part));
The first conversion passes the tag check and both objects
Child_Instance and
Success are equal. The second conversion fails the tag check. (Conversion assignments of this kind will rarely be used; dispatching will do this automatically, see object oriented programming.)
You can perform these checks yourself with membership tests:
if Parent_View in Child_Type then ... if Parent_View in Child_Type'Class then ...
There is also the package
Address conversion[edit]
Ada's access type is not just a memory location (a thin pointer). Depending on implementation and the access type used, the access might keep additional information (a fat pointer). For example GNAT keeps two memory addresses for each access to an indefinite object — one for the data and one for the constraint informations (Size, First, Last).
If you want to convert an access to a simple memory location you can use the package
Note however that an address and a fat pointer cannot be converted reversibly into one another.
The address of an array object is the address of its first component. Thus the bounds get lost in such a conversion.
type My_Array is array (Positive range <>) of Something; A: My_Array (50 .. 100); A'Address = A(A'First)'Address
Unchecked conversion[edit]
One of the great criticisms of Pascal was "there is no escape". The reason was that sometimes you have to convert the incompatible. For this purpose, Ada has the generic function Unchecked_Conversion:
generic type Source (<>) is limited private; type Target (<>) is limited private; function Ada.Unchecked_Conversion (S : Source) return Target;
Unchecked_Conversion will bit-copy the source data and reinterpret them under the target type without any checks. It is your chore to make sure that the requirements on unchecked conversion as stated in RM 13.9 (Annotated) are fulfilled; if not, the result is implementation dependent and may even lead to abnormal data. Use the 'Valid attribute after the conversion to check the validity of the data in problematic cases.
A function call to (an instance of)
Unchecked_Conversion will copy the source to the destination. The compiler may also do a conversion in place (every instance has the convention Intrinsic).
To use
Unchecked_Conversion you need to instantiate the generic.
In the example below, you can see how this is done. When run, the example will output
A = -1, B = 255. No error will be reported, but is this the result you expect?
with Ada.Text_IO; with Ada.Unchecked_Conversion; procedure Convert_Unchecked is type Short is range -128 .. +127; type Byte is mod 256; package T_IO renames Ada.Text_IO; package I_IO is new Ada.Text_IO.Integer_IO (Short); package M_IO is new Ada.Text_IO.Modular_IO (Byte); function Convert is new Ada.Unchecked_Conversion (Source => Short, Target => Byte); A : constant Short := -1; B : Byte; begin B := Convert (A); T_IO.Put ("A = "); I_IO.Put (Item => A, Width => 5, Base => 10); T_IO.Put (", B = "); M_IO.Put (Item => B, Width => 5, Base => 10); end Convert_Unchecked;
There is of course a range check in the assignment
B := Convert (A);. Thus if
B were defined as
B: Byte range 0 .. 10;,
Constraint_Error would be raised.
If the copying of the result of
Unchecked_Conversion is too much waste in terms of performance, then you can try overlays, i.e. address mappings. By using overlays, both objects share the same memory location. If you assign a value to one, the other changes as well. The syntax is:
for Target'Address use expression; pragma Import (Ada, Target);
where expression defines the address of the source object.
While overlays might look more elegant than
Unchecked_Conversion, you should be aware that they are even more dangerous and have even greater potential for doing something very wrong. For example if
Source'Size < Target'Size and you assign a value to Target, you might inadvertently write into memory allocated to a different object.
You have to take care also of implicit initializations of objects of the target type, since they would overwrite the actual value of the source object. The Import pragma with convention Ada can be used to prevent this, since it avoids the implicit initialization, RM B.1 (Annotated).
The example below does the same as the example from "Unchecked Conversion".
with Ada.Text_IO; procedure Convert_Address_Mapping is type Short is range -128 .. +127; type Byte is mod 256; package T_IO renames Ada.Text_IO; package I_IO is new Ada.Text_IO.Integer_IO (Short); package M_IO is new Ada.Text_IO.Modular_IO (Byte); A : aliased Short; B : aliased Byte; for B'Address use A'Address; pragma Import (Ada, B); begin A := -1; T_IO.Put ("A = "); I_IO.Put (Item => A, Width => 5, Base => 10); T_IO.Put (", B = "); M_IO.Put (Item => B, Width => 5, Base => 10); end Convert_Address_Mapping;
Export / Import[edit]
Just for the record: There is still another method using the Export and Import pragmas. However, since this method completely undermines Ada's visibility and type concepts even more than overlays, it has no place here in this language introduction and is left to experts.
Elaborated Discussion of Types for Signed Integer Types[edit]
As explained before, a type declaration
type T is range 1 .. 10;
declares an anonymous type
T and its first subtype
T (please note the italicization).
T encompasses the complete set of mathematical integers. Static expressions and named numbers make use of this fact.
All numeric integer literals are of type
Universal_Integer. They are converted to the appropriate specific type where needed.
Universal_Integer itself has no operators.
Some examples with static named numbers:
S1: constant := Integer'Last + Integer'Last; -- "+" of Integer S2: constant := Long_Integer'Last + 1; -- "+" of Long_Integer S3: constant := S1 + S2; -- "+" of root_integer S4: constant := Integer'Last + Long_Integer'Last; -- illegal
Static expressions are evaluated at compile-time on the appropriate types with no overflow checks, i.e. mathematically exact (only limited by computer store). The result is then implicitly converted to
The literal 1 in
S2 is of type
Universal_Integer and implicitly converted to
S3 implicitly converts the summands to
root_integer, performs the calculation and converts back to
S4 is illegal because it mixes two different types. You can however write this as
S5: constant := Integer'Pos (Integer'Last) + Long_Integer'Pos (Long_Integer'Last); -- "+" of root_integer
where the Pos attributes convert the values to
Universal_Integer, which are then further implicitly converted to
root_integer, added and the result converted back to
root_integer is the anonymous greatest integer type representable by the hardware. It has the range
System.Min_Integer .. System.Max_Integer. All integer types are rooted at
root_integer, i.e. derived from it.
Universal_Integer can be viewed as
During run-time, computations of course are performed with range checks and overflow checks on the appropriate subtype. Intermediate results may however exceed the range limits. Thus with
I, J, K of the subtype
T above, the following code will return the correct result:
I := 10; J := 8; K := (I + J) - 12; -- I := I + J; -- range check would fail, leading to Constraint_Error
Real literals are of type
Universal_Real, and similar rules as the ones above apply accordingly.
Relations between types[edit]
Types can be made from other types. Array types, for example, are made from two types, one for the arrays' index and one for the arrays' components. An array, then, expresses an association, namely that between one value of the index type and a value of the component type.
type Color is (Red, Green, Blue); type Intensity is range 0 .. 255; type Colored_Point is array (Color) of Intensity;
The type Color is the index type and the type Intensity is the component type of the array type Colored_Point. See array.
See also[edit]
Ada Reference Manual[edit]
- 3.2.1 Type Declarations (Annotated)
- 3.3 Objects and Named Numbers (Annotated)
- 3.7 Discriminants (Annotated)
- 3.10 Access Types (Annotated)
- 4.9 Static Expressions and Static Subtypes (Annotated)
- 13.9 Unchecked Type Conversions (Annotated)
- 13.3 Operational and Representation Attributes (Annotated)
- Annex K (informative) Language-Defined Attributes (Annotated)


text:
Distraught, overwhelmed, filled with dread.
That's how a second-year University of Windsor law student with Attention Deficit Hyperactivity Disorder described her experience with the disorder as she flailed about in her post-secondary studies.
Unable to focus, procrastinating for weeks over projects and homework for tests, she would leave a mountain of work to the last minute.
Finally, feeling so stressed and overwhelmed, she sought medical help and was diagnosed with ADHD in her third year of undergraduate studies. Her situation has improved greatly since and she encourages others to seek help, she said.
"It's so daunting," she said of feeling so overwhelmed.
"You can't even start thinking how you can overcome it," the 23-year-old student from the Toronto area said. She wanted to speak anonymously because of concern her disorder may affect her future law career prospects.
She described her plight in class, saying she was falling behind, unable to cope and even begin school work and feeling her situation would never end.
Her experience proves especially timely with the approach of exams in December at the University of Windsor and universities elsewhere, say those involved with helping and treating people with ADHD.
The intense study period can prove especially difficult for students who may be away from home for the first time and removed from their support system.
But there's much help available online and from the University of Windsor.
Dr. Corina Velehorschi, a Windsor psychiatrist and consultant with the University of Windsor's student health services, said the university offers "wonderful" resources.
She added ADHD also has one of the highest success rates for treatment in medicine.
Heidi Bernhardt, national director and founder of the Centre for ADHD Awareness, Canada based near Toronto, said the organization offers "tons of resources." They include 30 hours of video presentations with experts.
Bernhardt points to the centre's website — caddac.ca — that offers facts, information, resources and strategies.
While many may associate ADHD with the young fidgety kid who can't sit still, she said it can continue into the teens and through adulthood.
As a mother with three grown sons with ADHD who attended university, Bernhardt appreciates the situation for students with exams on the horizon.
Because ADHD can involve what Bernhardt calls the "executive functioning skills" such as organization, time management and problem solving, ADHD can affect students' ability to complete assignments and meet deadlines.
Away from home, parents aren't available to follow up on school work and make sure students get to class.
Bernhardt said recent efforts to raise awareness about ADHD with university students may explain why they're struggling.
"They may be overwhelmed. They don't know what's happening to them. And they're told to just try harder," she said.
But students may spin their wheels, fail and drop out, Bernhardt said.
She hears from students and parents and their situations can be heartbreaking.
"Parents are in tears, parents are in denial. We are constantly trying to raise awareness."
Bernhardt said it can be difficult for students to be their own best advocates. But they need to talk to student health and counselling services at university.
Diagnosis and treatment are much better in recent years, Bernhardt said.
For a long time, researchers missed girls because they didn't see the hyperactivity so commonly associated with ADHD. "But you see a lot of anxiety and depression in girls later on," Bernhardt said.
Velehorschi sees bright students who are failing, have low self-esteem, feel overwhelmed, stupid and unable to keep up.
"Their brain cannot make the bridge between knowledge and the execution of that knowledge," Velehorschi said. "They lack the neurotransmitters in their brain between knowledge and execution."
Exam time can be especially difficult. They have a hard time sitting still and may read a test question over and over, Velehorschi said. In turn, they may overcompensate, studying intensely two or three times longer.
They lack focus and don't have an appreciation of time, so they procrastinate and get distracted. A project due in two weeks falls by the wayside as the student still thinks it can be completed in the last couple of weeks.
The University of Windsor law student said she lacked the basic study skills so many of her peers take for granted.
"They don't know what they have to do," Velehorschi said. And besides medicinal drugs, treatment also involves teaching them skills. At exam time, they may need a quiet environment, extra time and breaks.
Said the second-year law student: "I can't imagine not being diagnosed and being here in university."
Misconceptions and myths abound about Attention Deficit Hyperactivity Disorder, according to the Centre for ADHD Awareness, Canada
Here are some facts to dispel the myths:
- ADHD is a genuine neurobiological disorder that was clinically observed more than 100 years ago. All of the major medical associations and government health agencies recognize this fact because the scientific evidence is overwhelming.
- ADHD is under-diagnosed and under-treated.
- ADHD occurs in five to 12 per cent of school-age children worldwide.
- ADHD is the most common mental health disorder in children.
- Eighty per cent maintain the diagnosis into adolescence.
- Sixty per cent are still affected by core symptoms in adulthood.
- Research shows that ADHD is most likely inherited.
- New research shows that problems with executive functioning, such as organization and time management, greatly affect those with ADHD.
- ADHD is a problem with regulating attention not just inattention.
- Parenting styles do not cause ADHD.
- Diets and limiting food additives and sugar will not cure ADHD.
- Treatment for ADHD should always be multi-modal.
- Using medication for ADHD does not lead to future drug abuse and may decrease the chance that adolescents with ADHD self medicate.
- Children and adolescents with untreated ADHD are at a greater risk for:
— problems with learning, resulting in less academic success;
— dropping out of high school;
— poor self-esteem;
— substance abuse;
— increased parent-child conflict and stress;
— sustaining injuries and having accidents;
— more mental health issues as they grow up;
— problems with social skills and peer relationships and
— becoming a juvenile offender.
— Centre for ADHD Awareness Canada; caddac.ca


text:
College business students need to gain a grasp of technical issues related to cloud computing, big data, security and other network issues they're likely to come across in their careers, so HP is now offering its first technical associate certification for them to cover these topics while in college.
"This is the first time we've had an IT course for business students," says Brian Beneda, director of HP Institute Worldwide, which manages HP's various IT certification programs that are generally presented as semester-long courses by instructors in academic institutions worldwide for college credit. Until today, these courses have all been for IT students.
[ IN THE NEWS: What the man behind HP's internal IT plan has in mind ]
"IT and business have to walk together," Beneda noted, adding it's apparent from discussions with HP customers and resellers that there's a skills gap as college graduates in business are entering the working world with inadequate knowledge about IT in general.
The course is not focused on vendor products but tackles typical network arrangements and industry standards, explaining why business managers, whose business data is at stake, need to show knowledge and leadership in helping IT teams make decisions about IT products and services. The course covers traditional in-house client/server technologies as well as newer areas of cloud computing and big data.
HP does subsidize some portion of the cost of the accreditation program, but academic institutions make the commitment to bring it into the academic mainstream of their colleges, Beneda stated. HP will be announcing colleges supporting the new "HP ExpertOne Accredited Technical Associate - IT for Business" certification program in the near future.
Ellen Messmer is senior editor at Network World, an IDG publication and website, where she covers news and technology trends related to information security. Twitter: @MessmerE. Email: email@example.com.
Read more about wide area network in Network World's Wide Area Network section.