text:
Summer Hazards and Your Cat
Published on July 03, 2011
- When temperatures outside reach dangerous levels, the temperature inside the house can, too. Keep fresh water available, and make sure your cat has a cool place to spend the day.
- Bring your cat indoors if a heat advisory is issued, or if severe weather (heavy rain, high winds, flooding) is expected.
- Keep vaccines up to date, have your cat spayed or neutered, and continue parasite control throughout the summer.
- Regardless of whether your cat spends time outdoors, exposure to dangerously high temperatures, environmental hazards, and physical dangers is possible. Knowing what to look for is the first step toward protecting your cat from potential summer hazards.
What Should I Know About Warmer Temperatures and Heatstroke?
Cats that don't go outside are protected from many warm weather hazards, but only if the temperature inside the home remains within a healthy range. In an effort to reduce energy usage and costs, some pet owners shut off fans and air conditioning when they leave the house in the morning and turn them on when they return later in the day. However, when temperatures outside reach dangerous levels, temperatures inside the house can, too. Being shut inside a hot house can be dangerous for your cat. Like dogs, cats rely heavily on panting to cool themselves off. When the temperature in the environment increases, panting becomes less effective. This means that your cat could be locked inside with minimal options for cooling down.
Instead of turning off the air conditioner, try leaving it on a conservative but comfortable setting (perhaps 76°F) while you are out. Make sure your cat has plenty of fresh water, and consider closing curtains to reduce the heating effects of sunlight through the windows. If there are parts of the house that are likely to be cooler, make sure your cat has access to those areas.
Cats that go outside need even more protection from hot weather. Access to clean drinking water is essential, as well as making sure cool, shaded areas are available if your cat wants to get out of the sun. Remember, however, that fleas also tend to like cool, shaded, moist areas, so be sure to use a safe and effective flea control product on your cat. Cats should not be left outside for long periods of time in the summer and should always have the option of coming inside. It's important to be aware of the risk of heatstroke so you can keep your cat safe and healthy.
Cats tend not to develop heatstroke as commonly as dogs do, perhaps because cats tend not to exercise with humans and spend less time in the car. However, even a few minutes in a car (even with the windows cracked) on a hot day can be deadly for a cat. Research has shown that on a partly cloudy, 93°F day, a car can heat up to 120°F in just 15 minutes. Even cooler days can be deadly. A similar test conducted on a 71°F day determined that the temperature inside a car parked in the sun with the windows cracked open went up to 116°F in 1 hour.
Even cats that are used to being outside can suffer during hot weather. Remember that young, elderly, or sick cats are more likely to become dehydrated or otherwise ill as a result of heat exposure. If a severe heat advisory is issued in your area and humans are advised to stay indoors, it is a good idea to bring your cat indoors, too. If your cat cannot be brought indoors, a ventilated or air-conditioned garage or mud room can provide enough shelter in some cases. Cats should also be brought inside if severe weather is expected, as heavy rain, flooding, and high winds can be hazardous, especially for cats that are hiding under cars or in other low-lying areas.
Why Are Strange Animals and Other Cats Hazardous?
Cats that are allowed to roam outside are more likely to have encounters with other cats and wild animals during the summer months. Such encounters increase the risk of bite wounds, scratches, and other injuries related to fighting. Infectious diseases such as rabies and feline AIDS can be transmitted through bite wounds. Additionally, female cats' fertility cycles are linked to the length of time they are exposed to daylight. Female cats tend to start going into heat in the spring, and they may go into and out of heat repeatedly for several months. Unwanted pregnancies and litters of kittens increase dramatically in the summer, which contributes to pet overpopulation, the spread of infectious diseases, and other issues.
Protect your cat from these hazards by having him or her spayed or neutered and keeping vaccines up-to-date. Keeping cats indoors not only protects them from a variety of animal encounters, it also prevents them from being injured or killed by cars.
What Toxic Chemicals Might My Pet Be Exposed To?
Lawn chemicals and fertilizers, insect repellants and sprays, weed control products, antifreeze, slug bait, ant bait, rat poison, and pool chemicals are just a few toxic chemicals your cat may encounter in your home or on your property. Learn more about dangerous chemicals at the ASPCA (American Society for the Prevention of Cruelty to Animals) Animal Poison Control Center.
How Can I Prevent Bee Stings and Related Hazards?
Bee stings, spider bites, and other related injuries are common in cats. Keeping your cat indoors reduces the risk of these things, but it is a good idea to check around your home (inside and out) for beehives, wasp nests, and other hazards your family and pets may encounter. Don't forget to also check garages and storage sheds.
How Can I Prevent Fleas, Ticks, and Other Parasites?
Fleas, ticks, and intestinal parasites (like roundworms and hookworms) are year-round hazards for your cat. However, increased exposure to the outdoors and certain parasite life stages during the warmer months makes these predators more of a concern during the summer. Be sure to keep your cat up-to-date on fecal parasite testing, and make sure you continue flea, tick, and parasite prevention during the summer months. If your cat receives heartworm preventive medication, continue this during the summer (heartworm disease is carried by mosquitoes, which are mostly active from the spring through the fall). If you are using a flea and tick control product for your cat, be sure you purchase the correct product and that you are using it properly. Never use a dog product on a cat. Ask your veterinarian about the best ways to protect your cat from fleas, ticks, heartworms, and intestinal parasites.
What Should I Know About Toxic Plants?
Your cat may encounter toxic houseplants (such as elephant ear and dieffenbachia) at any time of the year, but plants that flower in warm weather, like daisies, dahlias, lilies, and chrysanthemums, are also toxic and create additional hazards for cats that go outside. Information about poisonous houseplants and outdoor plants and flowers is available at the ASPCA Animal Poison Control Center.
This article has been reviewed by a Veterinarian.


text:
Correct and Beautiful Design Interaction
Hey there, great course, right? Do you like this course?
All of the most interesting lessons further. In order to continue you just need to purchase it.
Enroll course
Sign In
The password must have a minimum of 8 characters of numbers and letters, contain at least 1 capital letter, and should not exceed 20 characters
Remember me
Sign In
Sign Up
Restore password
Send reset link
Password reset link sent
to your email
No account?
Sign Up
Sign In
Lost Password?

subset: commoncrawl


text:
AVS 16-18 Kia Optima (Excl. Hybrid Models) Ventvisor Front & Rear Window Deflectors 4pc - Smoke
Protect your vehicle from the elements with the sleek, streamlined In-Channel VentvisorThe AVS In-Channel Ventvisor Side Window Deflector is made in the USA, and precision-engineered for an exacting fit to over 400 vehicle applications. In-Channel Ventvisors are designed to complete the look of your vehicle adding subtle style while maintaining the functionality you desire from a side window deflector.& Easy to install, no drilling or special hardware requiredThe In-Channel Ventvisor is aerodynamically designed to blend beautifully with your vehicle?s contours. And, there is no drilling or special hardware needed. The In-Channel?s patented design easily secures into the window channel or along the rubber seal with pre-applied 3M automotive-grade adhesive. Absolutely no tape touches your vehicle?s finish.& Keeps fresh air in and the rain out with styleThe Ventvisor, also referred to as a side window deflector, window shade or rain guard, allows fresh air to naturally circulate through open windows while keeping the rain out. Additionally, the product keeps the sun out of your eyes, enables fresh air circulation to eliminate stale, smoky air and allows you to keep your window cracked while parked, keeping the interior cooler.Great coverage and quality manufacturing AVS offers the most comprehensive ventvisor vehicle application coverage for drivers of trucks, SUV?s, CUV?s, vans and passenger cars. In-Channel Ventvisors are made of a high-grade acrylic material, which means they hold their shape and are just the right thickness to be strong, yet flexible, for a perfect fit.& Best-selling line and backed by Limited Lifetime WarrantyThe AVS ventvisor line is the best-selling line throughout North America. A Lifetime Warranty protects your AVS In-Channel Ventvisor Side Window Deflector. Get a set today and start enjoying exterior style and constant fresh air right away.
This Part Fits:
This Part Fits:
Year | Make | Model | Submodel |
2016-2020 | Kia | Optima | EX |
2016 | Kia | Optima | Hybrid |
2016-2018 | Kia | Optima | Hybrid EX |
2017-2018 | Kia | Optima | Hybrid Premium |
2016-2019 | Kia | Optima | LX |
2016-2018 | Kia | Optima | LX 1.6T |
2017-2018 | Kia | Optima | Plug-In Hybrid EX |
2018-2019 | Kia | Optima | S |
2016-2019 | Kia | Optima | SX |
2016-2017 | Kia | Optima | SX Limited |


text:
3-Day Severe Weather Outlook
Nordin, NB
There is no Severe Weather Outlook available for this area.
Survival Essentials
If an emergency occurs in your community, it may take emergency response teams some time to reach you. You should be prepared to take care of yourself and your family with basic supplies for a minimum of 72 hours.
Food and Water Supplies
Medication and First Aid
Personal Hygiene
Specialty Items


text:
- Track Order
Where is my order?
Typically, you will be able to track your order 3 business days from the time of purchase. However, if you purchased a Personalized Photo Charm, it can take 3-5 business days tracking information to become available.
Other Questions?
Due to the large number of emails we have received, it may take up to 24 - 48 hours for us to get back to you. We appreciate your patience & understanding.
- Description
Put Your Photo On a Custom Keychain & Create the Perfect Gift!
Customized with your own photo to be unique and creative
Custom Photo Keychain Crystal Heart Custom Keychains Gifts
Charming accessory for yourself
Perfect gift choice for Valentine's Day, birthday and Christmas
- Shipping
You can choose the delivery method during checkout:
Standard Shipping: A$6.99 - Free shipping over A$69.00
Delivery usually takes 5-7 business days
DHL Express Shipping : A$20.95
Delivery usually takes 3-5 business days
Please note that the time frame mentioned above doesn't include production time.
exclusive design
high quality
special offers every month
free customization
Customer Reviews
KCGeminiMy boyfriend really likes this key chain, Nonstop compliments and the picture came out great. The quality is absolutely amazing. I highly recommend it if you need something affordable and very amazing quality.
LindseyI'm really impressed! The picture quality was great and I got it way earlier than I expected! Outstanding service and great product! Thanks a lot this will be a great gift for my moms birthday.
Lanette EdwardsI bought this as a gift for my mom and she loves it. beautifully well made and written custom message. Best way too remember a companion of the family and the paw compartment to hold his/her ashes is a lovely idea they are always with you!
D'Asia IrvinAbsolutely perfect in every way, my baby brother was actually moved to tears. Now as he drives out late fathers truck. He will always have part of our father with him. I am forever thankful.
Ceci CastWow, I cannot believe how quick it was to get here!! It looks fantastic and the seller was great to respond to all of my input. Will definitely be saving this shop and looking to purchase more in the future! Very impressed!
Jovanna PalmaMy boyfriend loves to have pictures of us on him. At work, he loves to talk about me to his coworkers lol. I bought this give to he is too excited! I'm so happy with this purchase.
Steffanie OltmansMy lover is a field worker. He especially likes animals and plants. I think this key chain is especially suitable for him. When I gave it to him, he was so excited that he left tears. I am very happy for this time. shopping.
paigeMy father is a bad word. His birthday is approaching. I decided to give him a commemorative gift. When I gave him the key chain with our picture, my father was very happy. thank you very much.
celia gonzalezMy love is a long-distance bus driver. I put a photo of our family on it, which means we have been with him. When I gave him the key chain, he was happy like a child. I love him. Thank you for this key. chain.
MichelleHe especially likes dogs. We had a dog named Linda before. Unfortunately, he passed away. We miss him very much. I decided to put a photo of the dog on the key chain to make us feel like it was always there.


text:
Skip to product information
The all-new LP-series wheels and tyres offer RC modelers a whole new look and style for cool scale detail! The LP-series tyres are super-low profile to get the slammed look of the latest supercars and custom-tuned street machines. With their extra-wide design and true replica look, the LP tyres are the most realistic look anyone can bolt onto their touring or drift RC car! Car owners can fit actual tread designs from the hottest tuner brands of today!


text:
OhioLINK Off-Campus Authentication For Access to Services
If you are having trouble authenticating, please contact your local library.
This service provides access to OhioLINK databases from non-campus locations. Our database licenses require us to verify that each user is a current student, staff member, or faculty member at one of the OhioLINK member institutions. Please select your institution from the pull-down menu and follow the instructions for authenticating for your institution.


text:
Sunday, April 27, 2008
Promise and Peril for Alternative Ruby Impls
Two years ago, in 2006, there were essentially two viable Ruby implementations: Matz's Ruby 1.8.x codebase, and JRuby. At the time, JRuby was just barely starting to run Rails. I consider that a sort of "singularity" in the lifetime of an implementation, the inflection point at which it becomes more than a toy. (OT: these days, I consider the ability to run Rails faster than Matz's Ruby a better inflection point, but we've had the Rails thing going for two years). Cardinal (Ruby on Parrot) was mostly dead, or at least on its way to being dead. YARV, eventually to become the Ruby 1.9 VM, was perhaps only half completed and was not yet officially marked to be the next Ruby. Rubinius had not really been started, or at least had not officially been named and could not be considered anywhere near viable. IronRuby was still Wilco Bauer's IronRuby, a doomed codebase and project name eventually to be adopted by Microsoft's later Ruby implementation effort. So there was very little competition, and most people still considered JRuby to be a big joke. Ha ha.
Fast forward to Spring 2008. Ruby 1.8.x has mostly been put in maintenance mode, but remains by far the most widely-deployed Ruby implementation, despite its relatively poor performance. Largely, this is because only Ruby 1.8.x is 100% compatible with Ruby 1.8.x, and because it's already packaged and shipped on a number of OSes, including Rubyist favorite OS X. But the rest of the field has become a lot more muddled. There are now around six implementations that have past the Rails inflection point or will soon, a handful of others likely to fade into obscurity (after contributing their own genetics to the Ruby ecosystem, surely), a few mysterious up-and-comers...and Cardinal is still dead.
Let's review the promise, peril, and status of all the implementations. Note, this is largely a mix of facts and my opinions. Corrections for the facts are welcome. Corrections for the opinions...well...let's take it offline.
Ruby 1.8
Matz's venerable code base (usually called MRI for "Matz's Ruby Interpreter", MatzRuby or Ruby 1.8 in this article) still has a death-grip on the Ruby world. For 99% of Ruby developers, MatzRuby is still the king of the hill. This is in the face of poor relative performance (slower than JRuby and 1.9 for sure, and slower than most of the others for many cases), poor memory management (conservative, non-compacting GC), and many upstart implementations which solve these problems. Why is this?
It's not hard to answer. It's compatibility and status quo. If all my apps run fine on MatzRuby, and MatzRuby is already installed, and I'm satisfied with the performance characteristics of MatzRuby...why would I run anything else? Because MatzRuby is largely not *that bad* for most uses, especially as relates to simple system scripting work, it's unlikely to go away any time soon. And since all but one of the alternative impls is targeting Ruby 1.8 features and compatibility, the still-in-development Ruby 1.9 is not gaining much traction yet (which is probably a good thing).
You should all know the specs and status for MatzRuby. Current official release is 1.8.6 patchlevel 114. There's a 1.8.7 preview 2 out now that backports a whole bunch of features from 1.9 and breaks some compatibility. The jury's still out on whether it will go final as-is. MatzRuby is a simple AST-walking interpreter, with a conservative GC, minimal/cumbersome Unicode support, and a large library of third-party native extensions. MatzRuby is still the gold standard for what Ruby 1.8 "is".
The peril for Ruby 1.8 right now involves keeping that 99% of Ruby users interested in Ruby while 1.9 bakes without breaking compatibility. Ruby 1.8.7 pre1 introduced some Ruby 1.9 features but also broke a bunch of stuff (most notably Rails), and pre2 doesn't pass the specs 1.8.6 does. We had a design meeting last week where it was decided that we folks working on the Ruby specs need to help the Ruby core team get involved, so they can start running the full suite as part of their development process. That's going to happen soon, but until it does 1.8 releases can break basically anything from day today and nobody will know about it.
Beyond compatibility and keeping the masses happy, Ruby 1.8 could use a little performance, scaling, and memory lovin' too. Unfortunately almost all that effort is going toward Ruby 1.9 now, leaving the vast majority of Ruby users stuck on one of the slowest implementations. That's good for us alternative implementers, since it means we're gaining users every day; but it's not good for the MatzRuby lineage because they're losing mindshare. It's hard to deny that the future of Ruby lies with the "excellent" implementations, if not with the "best" ones, and the definition of "excellent" is moving forward every day. Ruby 1.8 is not.
Ruby 1.9
Ruby 1.9 is the merging of the Ruby 1.8 class library and memory model with a large number of new features and a bytecode-based execution engine. It represents the work of Koichi Sasada, who first announced his YARV ("Yet Another Ruby VM") project at RubyConf 2004. YARV took a bit longer than he and many others expected to be completed, but as a result of his tireless efforts it is now the official Ruby 1.9 VM.
Ruby 1.9 introduces many new features, like a character-aware (Unicode and any other encoding) String implementation, Enumerator/Enumerable enhancements, and numerous refinements and additions to the rest of the class library I won't attempt to list here. Ruby 1.9 is defining, in essence, what the rest of the implementations will soon have to implement. For all the debates, most of the additions in Ruby 1.9 have been well-received by the community, though the exposure level is still extremely low.
Ruby 1.9 has, I believe, reached the Rails singularity. With some work over the past few months, Rails has moved closer and closer to running on Ruby 1.9. Last I heard, there was only one bug that needed patching in the 1.9 codebase for Rails trunk to run unmodified. Expect to see an announcement about Ruby 1.9 and Rails at RailsConf next month.
The interesting thing about Ruby 1.9 is that it will mark only the second non-MatzRuby implementation to run Rails, JRuby being the first. This is due in large part to the massive effort required to implement a bytecode VM for Ruby (1.9 was only just released this past December), and to the fact that Ruby 1.9 is still very much a moving target. APIs are being added and refined, optimizations are being tossed about at the VM level, and memory and GC improvements are being considered. So while it's unlikely that anyone will be moving Rails apps to Ruby 1.9 in the near future, Ruby 1.9 is certainly viable...and represents the most-likely future evolution of the Ruby language itself.
What worries me about Ruby 1.9 is that its performance doesn't seem "better enough" to change the future of Ruby. While Koichi's own benchmarks show it's much faster than Ruby 1.8, on general application benchmarks it's usually less than a 50% improvement. Many times, JRuby is able to exceed Ruby 1.9 performance, even without similar optimizations and feature removals. It is certainly a "better" performance story than Ruby 1.8, but is it enough?
Ruby 1.9 also took the first steps toward concurrency by making threads native, but it encumbered them with a giant lock a la Python. That means you still can't get concurrent execution of Ruby code on Ruby 1.9, something JRuby's been able to do all along, and you can't scale Ruby 1.9 any better on wide systems than you could with Ruby 1.8. There's plans to solve this by adding fine-grained locks to most internal data structures, but that's a hard problem to solve on par with JRuby 2.0 challenges I'll talk about in a minute. And without something like the JVM to really optimize that locking, performance will take a hit.
It's also unclear if people really *want* all of what Ruby 1.9 has to offer. Sure, people love the idea of a real encoding-aware String, but response to the rest of what Ruby 1.9 offers--including performance--has been a collective "meh." People are not flocking to Ruby 1.9 in droves, and many are contemplating whether their future Ruby work will simply be a lateral move to one of the 1.8-compatible implementations. And on the JRuby project, we've received almost no requests to implement Ruby 1.9 features, so we've only added a few tiny ones. Whither Ruby 2.0?
Ahh, JRuby. How you have changed my life.
JRuby is a Java-based implementation of Ruby, or if you prefer not to speak the word "Java", it's Ruby for the JVM. JRuby was started in 2002 by Jan Arne Petersen, and though it had a couple good years of activity it never really got to a compatible-enough level to run real Ruby applications. Jan Arne moved on at some point and efforts were largely picked up by Thomas Enebo, current co-lead of JRuby. He was especially active when JRuby was being updated from Ruby 1.6 compatibility to Ruby 1.8.4 compatibility, a task which today is largely complete. I joined the project in fall 2004 after attending RubyConf 2004, and at the time I did not know Ruby. Now I know Ruby in a deeper way than I ever really wanted to...but that's a discussion for another day. I wasn't a hugely active contributor until late 2005, when I started working on a new interpreter and refactoring JRuby internals. I presented JRuby for the first time at RubyConf 2005, and then in early 2006 milestones started dropping like flies: IRB ran, then RubyGems, then Rake...and then Rails. We were still dog slow at the time, but we were viable.
JRuby reached the Rails singularity in time for JavaOne 2006, an event that led Sun to hire Tom and me in fall 2006. We demonstrated on stage JRuby running a simple Rails application. It was cobbled together, running under either Tomcat or simply WEBrick at the time, but we had proved it was possible to have an alternative Ruby implementation compatible enough to run Rails. JRuby was no longer a joke.
Over the past two years (man, has it really been two years?) we've essentially rewritten almost all of JRuby a piece at a time. We've been through three interpreters, one prototype compiler and one complete compiler, multiple Regexp engines, and at least two implementations of the key core classes. I wrote the compiler for JRuby during summer 2007, completing it around RailsConf EU 2007. My first compiler! We now run faster than Ruby 1.8 in both interpreted and compiled modes, with interpreted being perhaps 15-20% faster and compiled being at least a few times faster, generally on par with Ruby 1.9. Of course since we're based on the JVM, we share its object model, garbage collector, binary representation. So JRuby is certainly a "mini-VM" but we leave the nasty bits to JVM implementers to handle. Pragmatism, friends, pragmatism.
Perhaps the most notable result of JRuby's existence is that there are now so many Ruby implementations. If we had not shown the promise, many of the others might not have risked the peril. Oh, and we've ended up with a cracker-jack implementation of Ruby on the JVM too...I suppose that's worth a little something.
Perils...always perils. JRuby has managed to surmount most of the perils that await other implementations. And being on the other side of the chasm, I can tell you now it doesn't get easier.
Compatibility is *hard*. I'm not talking a little hard, I'm talking monumentally hard. Ruby is a very flexible, complicated language to implement, and it ships with a number of very flexible, complicated core class implementations. Very little exists in the way of specifications and test kits, so what we've done with JRuby we've done by stitching together every suite we could find. And after all this time, we still have known bugs and weekly reports of minor incompatibilities. I don't think an alternative implementation can ever truly become "compatible" as much as "more compatible". We're certainly the most compatible alternative impl, and even now we've got our hands full fixing bugs. Then there's Ruby 1.9 support, coming up probably in JRuby 1.2ish. Another adventure.
Performance is also hard, but maybe not *hard* hard. JRuby is lucky to run on one of the fastest VMs in existence. The JVM, in its many incarnations, has been so refined and the JVM implementation arena so competitive that we get a lot of performance for free. But by "for free" I mean Java performance. Java's far easier to write and maintain than C, and on the JVM we know we won't pay a performance penalty for not writing C code. But making Ruby fast on the JVM is where it gets tricky. JVMs are optimized for Java and Java-like languages. JRuby has to include all sorts of tricks and subsystems to make the runtime and compiled Ruby code "feel" a bit more like Java to the JVM. This has involved, in many cases, implementing our own "mini-VM" on top of the JVM, with mixed-mode execution (interpreted, then JITed to JVM bytecode), call site caches (to speed method lookup), and code alterations that sometimes improve performance at the cost of LOC and readability. The challenge for us going forward is to continue improving performance without making JRuby a jumbled mess. John Rose's work on the Da Vinci Machine and dynamic invocation for JDK 7 will help us rip a lot of code out, but only a small subset of JRuby users will see the benefits in the near term. So expect to see us spend a lot more time on performance for Java 5/6 compatible JVMs.
The final big peril for us relates to JRuby 2.0's Java integration support. JRuby currently has a split object model, where Ruby types are all "IRubyObject" implementations and the runtime only understands how to deal with "IRubyObject. This means that in order for us to call methods on non-Ruby Java types, we must wrap them with an IRubyObject wrapper. This is partially to attach our meta-object protocol to those objects, but mostly because every bloody method in the system accepts only IRubyObject as a parameter or return type. In order for us to achieve the "last mile" of Java integration, we need to make the entire system accept "Object" and act appropriately; we've been calling this approach "lightweights", since it would enable using normal Java objects for several core classes like Fixnum and Float. Support for "Object" lightweights would then feed into JRuby 2.0's reworked Java integration layer, eliminating most of the overhead (and code) associated with calling Java methods today. It would also fit better into the invokedynamic work. It's a big job I wouldn't expect to be complete until later this fall, and we need to mercilessly write specs and tests for the current behavior to avoid regressing features we support today. But we're going to do it; we've already started.
Evan Phoenix's Rubinius project is an effort to implement Ruby using as much Ruby code as possible. It is not, as professed, "Ruby in Ruby" anymore. Rubinius started out as a 100% Ruby implementation of Ruby that bootstrapped and ran on top of MatzRuby. Over time, though the "Ruby in Ruby" moniker has stuck, Rubinius has become more or less half C and half Ruby. It boasts a stackless bytecode-based VM (compare with Ruby 1.9, which does use the C stack), a "better" generational, compacting garbage collector, and a good bit more Ruby code in the core libraries, making several of the core methods easier to understand, maintain, and implement in the first place.
The promise of Rubinius is pretty large. If it can be made compatible, and made to run fast, it might represent a better Ruby VM than YARV. Because a fair portion of Rubinius is actually implemented in Ruby, being able to run Ruby code fast would mean all code runs faster. And the improved GC would solve some of the scaling issues Ruby 1.8 and Ruby 1.9 will face.
Rubinius also brings some other innovations. The one most likely to see general visibility is Rubinius's Multiple-VM API. JRuby has supported MVM from the beginning, since a JRuby runtime is "just another Java object". But Evan has built simple MVM support in Rubinius and put a pretty nice API on it. That API is the one we're currently looking at improving and making standard for user-land MVM in JRuby and Ruby 1.9. Rubinius has also shown that taking a somewhat more Smalltalk-like approach to Ruby implementation is feasible.
But here be dragons.
In the 1.5 years since Rubinius was officially named and born into the Ruby world, it has not yet met any of these promises. It is not generally faster than Ruby 1.8, though it performs pretty well on some low-level microbenchmarks. It is not implemented in Ruby: the current VM is written in C and the codebase hosts as much C code as it does Ruby code. Evan's work on a C++ rewrite of the VM will make Rubinius the first C++-based Ruby implementation. It has not reached the Rails singularity yet, though they may achieve it for RailsConf (probably in the same cobbled-together state JRuby did at JavaOne 2006...or maybe a bit better). And the second Rails inflection point--running Rails faster than Ruby 1.8--is still far away.
Compatibility is not going to be a problem for Rubinius. They've worked very hard from the beginning to match Ruby behavior, even launching a Ruby specification suite project to officially test that behavior using Ruby 1.8 as the standard. I have no doubt Rubinius will be able to run Rails and most other Ruby apps people throw at it. And despite Evan's frequent cowboy attitude to language compatibility (such as his early refusal to implement left-to-right evaluation ordering, a fatal decision that led to the current VM rework), compatibility is likely to be a simple matter of time and effort, driven by the spec suite and by actual applications, as people start running real code on Rubinius.
Performance is going to be a much harder problem for Rubinius. In order for Rubinius to perform well, method invocation must be extremely fast. Not just faster than Ruby 1.8 or Ruby 1.9, but perhaps an order of magnitude faster than the fastest Ruby implementations. The simple reason for this is that with so much of the core classes implemented in Ruby, Rubinius is doing many times more dynamic invocations than any other implementation. If a given String method represents one or two dynamic calls in JRuby or Ruby 1.8, it may represent twenty in Rubinius...and sometimes more. All that dispatch has a severe cost, and on most benchmarks involving heavily Ruby-based classes Rubinius has absolutely dismal performance--even with call-site optimizations that finally pushed JRuby's performance to Ruby 1.9 levels. A few benchmarks I've run from JRuby's suite must be ratcheted down a couple orders of magnitude to even complete.
And the Rubinius team knows this. Over the past few months, more and more core methods have been reimplemented in C as "primitives", sometimes because they have to be to interact with C-level memory and VM constructs, but frequently for performance reasons. So the "Ruby in Ruby" implementation has evolved away from that ideal rather than towards it, and performance is still not acceptable for most applications. In theory, none of this should be insurmountable. Smalltalk VMs run significantly faster than most Ruby implementations and still implement all or most of the core in Smalltalk. Even the JVM, largely associated with the statically-typed Java language, is essentially an optimized dynamic language VM, and the majority of Java's core is implemented in Java...often behind interfaces and abstractions that require a good dynamic runtime. But these projects have hundreds of man-years behind them, where Rubinius has only a handful of full-time and part-time enthusiastic Rubyists, most with no experience in implementing high-performance language runtimes. And Evan is still primarily responsible for everything at the VM level.
Of course, it would be folly to suggest that the Rubinius team should focus on performance before compatibility. The "Ruby in Ruby" meme needs to die (seriously!), but other than that Rubinius is an extremely promising implementation of Ruby. Its performance is terrible for most apps, but not all that much worse than JRuby's performance was when we reached the Rails singularity ourselves. And its design is going to be easier to evolve than comparable C implementations, assuming that people other than Evan learn to really understand the VM core. I believe the promise of Rubinius is certainly great enough to continue the project, even if the perils are going to present some truly epic challenges for Evan and company to overcome.
Update: The Rubinius team has had a few things to say about this as well.
Evan Phoenix argues that the 50/50 split between C and Ruby really translates into a lot more logic in Ruby, because of course we all know about Ruby's legendary terseness and density. And he's got a good point; even at 50/50 Rubinius is easily "mostly" Ruby. But nobody would claim that the JVM is Java in Java, even though the ratio of C/C++ code to Java code is vastly in Java's favor. Rubinius has a C core...Rubinius's VM is written in C. It might be 100% "Ruby in Ruby" some day, but for now it's not.
Brian Ford posted further about the "Ruby in Ruby" meme, arguing rightly that "Ruby in Ruby" is an ideal we should all be striving for, and that ideal should never die. I agree wholeheartedly on that point. The meme I referred to is the growing idea that Rubinius is automatically going to be a better implementation than all others simply because it's written in Ruby. So far that hasn't been the case. And that meme has also been used as a club, claiming other implementations (even Matz's own implementation) are not for Ruby programmers as much as Rubinius is.
Rubinius is, and always has been, a great project and a great idea. I talk with Evan and Brian and all the others on a daily basis, I contribute specs whenever I find gaps or fix bugs in JRuby, and I secretly harbor a desire to implement a JRuby/JVM backend for the Rubinius kernel. I'm sure we'll see great things from Rubinius in the future.
I've had a love/hate relationship with Microsoft over the years. Recently, it's been more "I love to hate them", but there are some shining stars over there. And IronRuby is certainly one of them.
Microsoft's IronRuby project (or perhaps "Microsoft IronRuby") is the current most-viable .NET-based Ruby implementation. It is led by John Lam, formerly of RubyCLR fame, and a small team of folks in Microsoft's languages group. IronRuby really has its roots in the Ruby.NET project from Queensland University of Technology, and like JRuby the real seed for both projects was the implementation of a Ruby 1.8-compatible parser. IronRuby is based on Microsoft's Dynamic Language Runtime, a collection of libraries to make dynamic languages easier to implement and to work around the performance constraints of CLR's strong preference for static-typed languages. In recent months it's probably safe to say that IronRuby has been driving DLR work, since by my estimation it represents the most difficult-to-implement dynamic language Microsoft is currently working on, and IronPython is mostly done, other than ongoing performance work.
I call IronRuby a shining star not because of the implementation, which is fairly mundane, or because of the DLR, which is perhaps clever in places but certainly "just plain necessary" for CLR dynlang performance in others. IronRuby is a shining star because it's the first Microsoft project under the Microsoft Permissive License, a "truly OSS" license approved by OSI. It represents the first project at Microsoft that I've thought gives the company any real hope for the future, because John Lam and company could truly show the advantage of more openness and closer community cooperation. So the OSS thing is certainly part of the promise of IronRuby, but it's not really a Ruby thing.
The main promise of IronRuby is a compatible, performant implementation of Ruby that runs on the CLR (and by extension, runs well on Windows). IronRuby currently mostly uses normal CLR types for all the core classes, building Ruby's String on CLR's StringBuilder, Ruby's Array on CLR's ArrayList, and so on. They've also made Ruby objects and CLR objects largely indistinguishable from one another as far as call dispatch goes, where in JRuby all non-Ruby Java objects entering the system must be wrapped with a Ruby-aware dispatcher (to be remedied in JRuby 2.0ish, as mentioned above). Of course IronRuby boasts advantages similar to JRuby, since it can leverage the CLR garbage collector, memory model, performance. And of course, having Microsoft backing your project should count for something.
IronRuby could also provide a Rails deployment option that Windows folks will actually want to use. Windows support in Ruby has always lagged behind UNIX support, partially because Windows "sucks" for various definitions of "sucks", and partially because most Rubyists don't use Windows. The ones that do use Windows have often felt abandoned, leading to projects like Daniel Berger's Ruby fork Sapphire, which counts among its features "Better support for MS Windows". IronRuby on .NET on Windows would in theory integrate very well with other Windows/.NET properties like IIS, ADO (or whatever it's called now), and Microsoft's new MVC layer. So for Windows users, IronRuby ought to be a big win, and they're understandably excited about it. Set up a tweetscan for "ironruby" and you'll see what I mean...there are nearly as many anticipatory tweets about IronRuby as there are practical tweets about JRuby.
But there's some peril here too. IronRuby is largely still being developed in a vacuum. Perhaps in order to have secrets to announce at "the next big conference" or perhaps because Microsoft's own policies require it, IronRuby's development process proceeds largely from all-internal commits, all-internal discussions, and all-internal emails that periodically result in a blob of code tossed over the fence to external contributors. The OSS story has improved, since those of us on the outside can actually get access to the code, but the necessary two-way street still isn't there. That's going to slow progress, and eventually could make it impossible for IronRuby to keep up as resources are moved to other projects at Microsoft. JRuby has managed to sustain for as long as it has with only two fulltime developers entirely because of our community and openness, and indeed JRuby would never have been possible without a fully OSS process.
IronRuby is also going to have trouble running Rails in its current form. Rails 2.x is still hindered by its inability to process concurrent requests in parallel on a single process. Because of various thread-unsafeties in the Rails libraries, concurrent requests must be shunted off to separate processes, or in the case of JRuby to separate JRuby instances in the same JVM process. There is work underway to improve this, some of it through GSOC, but it's still going to be a while before you can run your entire app on a single process with any of the C implementations. Even then, if you want to run many Rails apps, you'll still need multiple process with Ruby 1.8. And this is where IronRuby is going to get burned.
As I understand it, currently there is no way to provide multiple isolated execution environments in IronRuby as you can in JRuby or Rubinius. The reasons for this are beyond me, but many language implementations on top of a general-purpose VM avoid the complexity of "multiple runtimes" to better integrate with the rest of the system. JRuby's MVM support, for example, makes serializing Ruby objects as though they were normal Java objects nearly impossible, because upon deserialization there's no way to know which JRuby instance to attach the object to. In IronRuby's case, any inability to run multiple environments in the same process will mean IronRuby users must launch multiple processes to run Rails, just like the Ruby 1.8 and 1.9 users do. And that would be, in my opinion, an unacceptable state of affairs.
I also believe that the IronRuby team does not yet understand the scope of what's necessary to run Rails. John Lam has been quoted at several events saying they hope to run a "hello world" Rails app at RailsConf, but IronRuby can't run IRB, RubyGems, or Rake yet. John has also been tweeting periodic updates on IronRuby's spec-passing rate, even though Rubinius passes most of those specs and still can't run Rails (and JRuby passes more than Rubinius along with another 48000 assertions in our own test suite, only some of which have equivalents in the specs). As far as time spent on implementation, IronRuby really only has about a year of progress in, since Silverlight integration, demos, and presentations often pull them away for weeks at a time.
There's also a final peril the IronRuby will have to deal with: Microsoft would never back an OSS web framework like Rails in preference to its own. John Lam has repeatedly said that IronRuby will run Rails, and I believe him. But that goal is almost certainly not a Microsoft priority, since they have their own proprietary technologies to push. If John's able to do it, it will have to come from his small team and community contributors, leading back to the OSS peril above.
Be that as it may, an implementation of Ruby for the CLR is certainly going to happen, and I believe it's necessary for the Ruby ecosystem to survive for there to be a CLR Ruby. IronRuby is going to be that project, and it's already driving competition in the Ruby implementation world. John Lam and I talk at conferences, exchange tweets and emails, and I've been building and running IronRuby occasionally to check on their progress. I also know the IronRuby team realizes they could be more open and probably wants to be more open. And perhaps if they read this article they'll start to realize there's a lot more work involved in reaching the Rails singularity than running specs and having a working String implementation. There's pain involved, and they've not yet begun to feel it.
Ruby 1.9 fixes some of MatzRuby's issues, but not all of them. Though it brings a much-faster bytecode VM, improved method-dispatch cost, and a number of other execution-related performance tweaks, it does not solve problems with Ruby's memory model and garbage collector. And partially for this reason Apple's Laurent Sansonetti has been working on MacRuby, a forked rework of Ruby 1.9 targeting the Objective C runtime.
Laurent is famous for his past work on RubyCocoa, bindings to allow Ruby to deliver beautiful, top-notch UIs on OS X. I don't know how long he's been working on MacRuby, since some of its life was spent in secret, but it's been open-source for a few months now. Currently Laurent has been working on converting the core classes from C implementations over to using ObjC equivalents. Part of the goal of MacRuby is to provide a Ruby that can interact directly with ObjC: Ruby objects are ObjC objects and vice versa; Ruby can call methods on ObjC objects and vice-versa. So in this sense, MacRuby is perhaps more similar to JRuby or IronRuby than to Rubinius or the MatzRuby lineage. It is an implementation of Ruby for a general-purpose runtime.
MacRuby promises one thing for certain: tight integration with ObjC and by extension with much of OS X. Because ObjC is the language of choice for development on OS X, MacRuby users will certainly have the cleanest, tightest integration with OS libraries and primitives, far better than any other implementation can provide.
There's also a chance that ObjC's core classes (which essentially are repurposed as MacRuby's core classes) will have better peformance characteristics than the hand-written C impls in MatzRuby. Because MacRuby is based on Ruby 1.9, it shares Ruby 1.9's bytecode-based execution engine. This means that most performance gains will come from better core class implementations. Already Laurent has been tweeting some impressive microbenchmark numbers showing e.g. Array performance can be substantially better than Ruby 1.9. And there are performance gains to be had calling ObjC code, of course, since dispatch is now essentially ObjC dispatch directly rather than passing through Ruby's own dispatch logic.
MacRuby may also eventually represent a better way to run Rails on OS X. Because of YARV, it should have good performance. Because of ObjC, it should have a good memory model. And because it's "MacRuby" it should fit well into the rest of the system, likely leading to a simpler, better-integrated deployment story for Rails.
The biggest peril for MacRuby is pretty obvious: Why Ruby 1.9? Ruby 1.9 is still under active development, and APIs are being added and tweaked as we speak. Laurent's fork is going to get further and further away, even if he's able to keep portions up-to-date; that's going to make compatibility a serious challenge. Choosing Ruby 1.9 certainly makes sense from a performance perspective, but many Ruby apps out there don't run on it, and most developers aren't targeting it because it's still a moving target. Even on JRuby, where we've got prototype implementations of both YARV's and Rubinius's bytecode engines, we've opted not to hit 1.9 features hard yet. Ruby 1.9 is in progress, and that will mean a lot more effort required to keep MacRuby up to date and to make it an attractive option.
There's also a chance that Ruby implemented on top of Objective C isn't going to perform that much better, on the whole, than Ruby 1.9's all-C approach. While some of Laurent's benchmarks have been impressively faster than Ruby 1.9, many others have been equally slower. And all benchmarks I've run, which are a little less "micro", have been slower on MacRuby than either Ruby 1.9 or MatzRuby. That's not very promising.
Regardless of the peril, MacRuby seems like a great idea. Objective C is a solid runtime, and the fact that it's so heavily used on OS X means MacRuby will have an excellent integration story. MacRuby may not add much value in the runtime/performance/execution department, but will potentially teach us all lessons about integrating with a general-purpose runtime. And of course MacRuby may eventually be shipped with OS X, making Ruby a first-class language for writing Mac apps. That alone is probably worth it.
Fading Implementations
It's worth spending a few words on the "no longer viable" implementations here as well.
XRuby, product of Xue Yong Zhi and a few others, was the first Ruby implementation to have a full JVM bytecode compiler. Performance early on looked very good, but the lack of a compatible set of core classes and resource limitations caused its development to lag terribly. The most recent release was 0.3.3 on March 24, and since then there have been only two commits. Xue has admitted he has no time to work on the project, and without a heavy, long-term time investment from someone XRuby is likely to fade away.
Ruby.NET is a similar story. Started off a research grant from Microsoft at Queensland University of Technology, Ruby.NET is the product of John Gough and Wayne Kelly. The project was a proof-of-concept for Ruby on CLR, to show it could be done and work through some of the early challenges in getting there. It was officially made into an open source project last year, and for a while there were many interested contributors. But although the Ruby.NET parser lives on in IronRuby, the project has largely ground to a halt since Wayne officially threw his support behind Microsoft's project. There have been two commits in the past month, and the last two really active mailing list threads were titled "The future of Ruby.NET" and "Has IronRuby killed off Ruby.NET".
And Cardinal is still pining for the fjords.
New Contenders
I don't know much about these projects, but I'm sure they'll all bring their own flavor to the Ruby soup.
HotRuby is an implementation of Ruby in JavaScript. It implements Ruby 1.9's bytecode engine and all core classes using JavaScript types. Performance looks good on their site, but they can't run anything yet and haven't even begun to discuss compatibility. It may show promise in time, but it's an interesting toy for now.
MagLev from GemStone appears to be something Ruby-related. Not much (anything?) has been publicly said about it. It's mysterious. It has a nice viral front page. Rails may be involved.
IronMonkey is an effort to port IronPython and IronRuby to the Tamarin VM Adobe donated to the Mozilla project. It's being led by Seo Sanghyoen, though from what I hear he hasn't had a lot of time to work on it. Python and Ruby in the browser, cross-platform, without vendor-lock in. Could be interesting.
Final Thoughts
Have you started working on your Ruby implementation yet? All the cool kids are doing it. It's remarkable how many implementations of Ruby are in the works right now. It remains to be seen whether the ecosystem can support such diversity in the long term, but at the very least they're introducing splendid variation. And there's a lot more to do with Ruby in terms of performance, scaling, and "getting things done". Ruby's future is looking bright, in no small part due to the many implementations. How's your favorite language looking?
Update: Vladimir Sizikov has a nice short article on the value of the RubySpecs project, and since it's so important for the future of these alternative implementations I thought it deserved a mention. He also includes links to his RubySpecs quickstart guide and the current RubySpecs overview page. If you haven't contributed to the specs yet, you should feel guilty.
22 comments:
- apeirosApril 27, 2008 at 5:39 AM
Excellent article - as always. One of the big gains in having you in the ruby community is the ever interesting articles you write. Kudos.
What I think went a bit under by your focus on the implementations is the side effects of having many ruby implementations. The two that come to my mind are firstly rubyspec which in my opinion will have a tremendously positive impact on ruby in the long term. Secondly the design meetings. This one is a two-sided sword. If done right it can and will have a huge positive impact on ruby. But I see it having potential to cause damage too. That potential lies in possible disconsenses and the inability to resolve those. Since that depends entirely on the participants of the design meetings it's pretty difficult to predict - and entirely impossible if you don't know the participants for which reason I won't make any prediction :)
Another interesting topic might be forks, like e.g. imperators sapphire. - AnonymousApril 27, 2008 at 5:46 AM
Cardinal, and anything that has to do with Parrot, should never be mentioned again. The Perl community is made up of vaporware and code obfuscation, Parrot is getting old and it still has no serious programming language fully implemented for it.
ReplyDelete Lots of good points, but regarding MacRuby, frankly, Rails is a non-issue, and by extension, so is Ruby 1.9. The sweet-spot for MacRuby is likely to be GUI desktop applications rather than web apps. Given that OS X deployment involves bundling all the libraries you use in the app within the app itself, Ruby 1.9 compatibility won't be a major problem, at least for smaller libraries anyways. Rails, on the other hand, is a long way from 1.9 compatibility. If anything, the choice to target 1.9 will be an incentive for library writers to actually produce code that's 1.9 compatible. The MacRuby project definitely made the right decision.
ReplyDeleteapeiros: I didn't mean to exclude or lessen the impact of the Ruby spec project, but I didn't want the article to turn into a spec love-fest. It's mentioned several times, and I agree it's very important for Ruby's future.
anonymous: Parrot to me is one of those projects you still hope to see some day, like Duke Nukem Forever or Ruby 2.0. Some day!
joachimm: The "ruby in ruby" statement about Rubinius has certainly been about the future, I don't disagree there. But Rubinius is sold at every conference, in every interview, and in every article as being "ruby in ruby" now, which is certainly not true. I would not have a problem allowing them some slack if they didn't use "ruby in ruby" as a club to beat on other implementations, as if they deserved some elevated status because of that goal. They could promise to eventually make Rubinius out of pure gold, but as long as it's half lead they don't get to claim such a title.
bob aman: Perhaps that's the case for MacRuby developers, but just about any Rubyist interested in MacRuby is going to try running Rails on it. If it doesn't work, you're right, it probably won't matter. And I agree that MacRuby is likely to find its sweet spot in the GUI development arena. But you can't know *what* Ruby developers might want to use MacRuby for ahead of time, and for folks coming from Ruby 1.8 the choice of Ruby 1.9 is still an odd one. And I'm not entirely sure creating 1.9-compatible libraries is even a good idea right now...since 1.9 isn't entirely 1.9-compatible from day to day. What is Ruby 1.9? Do we have a spec? A test suite? Anything? If the answer is no, it's not ready.
chromatic: There's a third non-technical barrier: nobody seems to care if Cardinal exists or not. That's hard to overcome.
Kjetil Ødegaard: At the Ruby Design Meeting last week I think everyone agreed in principal that Ruby core will need to start looking at using and contributing to the specs, including several Ruby core members themselves. I think we're on the right path now, but it won't happen overnight.@Bob Aman:
Rails, on the other hand, is a long way from 1.9 compatibility.
As far as we're aware there's one remaining issue outstanding for 1.9 compatibility with edge rails, a bug in 1.9. There are a few issues which will cause some gotchas, specifically String#chars has different semantics. Basically everything else has mostly been addressed to our knowledge.wuputah: My understanding of Phusion's "Ruby Enterprise Edition" is just Ruby 1.8 with some GC improvements. I could certainly be wrong about that, but either way I don't think it qualifies as a separate Ruby implementation.
steven: Threads are definitely one area where implementation details can show through, and testing previously "clean" threaded apps on JRuby often shows they're not as threadsafe as people believe.
daniel berger: I love you man. Yes, MRI is a limiting definition of "Ruby", but it runs the apps. Anyone who wants to run the apps needs to meet a minimum level of compatibility. The choice here is between making a "better Ruby" and a "better Ruby platform". Once we have the latter, we'll be in a position to help drive the former.Although it is at best 'innacurate to say that IronRuby is "the first Microsoft project under the Microsoft Permissive License".
IronPython (and possibly other projects) were licensed under the 'Microsoft Permissive License', which was renamed to the Microsoft Public License, long before IronRuby. (long being relative of course...)> It's also unclear if people really *want* all of what Ruby 1.9 has to offer.
For me, just _one_ offering is enough to make me move to 1.9: To pass human-readable data through YAML_load / modify / YAML_dump cycles, I need hash insertion order preservation.
Not a spectacular new feature - yet for my little application a decisive advantage of Ruby over other languages.Hi Charles (good article by the way - a very interesting read).
You're quite rude about the IronRuby development process. I must say that from being on the mailing list your description certainly doesn't *seem* right.
I think John might have some things to say about the technical points you raise - but the DLR has supported multiple engines for quite a while now.fuzzyman: I don't believe I was rude at all, or even incorrect. As far as I can tell from monitoring the IronRuby list, the IronRuby team is having no design or dev discussions in the open. You can't run an OSS project that way. And there are plenty of historical examples of how damaging a private "trunk" repository can be to an OSS project. Tossing SVN bundles over the fence every so often does not foster a daily give-and-take with the community.
Ask yourself...doesn't it bother you that you can't update your working copy to the same sources the IronRuby team sees in the morning? Doesn't it bother you that they're having all their substantive conversations behind closed doors, leaving you to guess at progress?
These problems can certainly be remedied, but pretending they don't exist won't help anyone...and will damage IronRuby's long-term OSS prospects.Excellent article Charles, thanks for your time!
I just wanted to chime in on the MacRuby part.
At least one good reason imo to use 1.9 is because of the native threads, which has been a long standing problem in RubyCocoa, it can be worked around but better is.... well better :)
And also, like said before, MacRuby is about being able to use Cocoa, not so much about existing Ruby code like Rails.
RubyCocoa is the same in this aspect, except it's for 1.8.
Eloyeloy: Part of the problem with that is the fact that Ruby 1.9 doesn't allow its native threads to run concurrently. Perhaps it's a goal for MacRuby to eliminate the giant lock?
laurent: That certainly seems reasonable. I'm looking forward to trying MacRuby for OS X app development too, so hurry up :) And I suppose the 1.9/Rails thing will be solved by the time you have a release. I just hope it won't be too difficult for you to keep aligned with "real" 1.9's growing features and bug fixes.
bob aman: I think my concern with 1.9 specs is more that it's changing too fast. Sure, Ruby 1.8 has had a set of specs written after-the-fact, but it's also mostly frozen (ignoring 1.8.7 for the moment). 1.9 is still under active development. And my point about Rails on MacRuby was just that anyone who's interested in Rails and interested in MacRuby will try to bring the two together. You're right, anyone interested in MacRuby but not Rails on MacRuby will probably not try it :)- Dan MooreApril 29, 2008 at 10:36 AM
Is there an equivalent to MS's DLR for the JVM? If not, could parts of JRuby's implementation be abstracted out to make one?
ReplyDelete dan moore: There's no one library that serves that purpose, but there are dozens of libraries written to fill some or all of that purpose. Some are written during the course of a language's implementation and never repurposed. Some are built with the express intent of building several languages on top of them. So although it would be nice to have a "one library to rule them all", there have been DLR equivalents of varying completeness on the JVM for years.
I'd love to abstract out as much as possible from JRuby to help add another tool to that toolbox.


text:
This site is for adults only!
Please carefully read the following before entering www.domingoview.com (the "Website"). This Website is for use solely by responsible adults over 18-years old (or the age of consent in the jurisdiction from which it is being accessed). The materials that are available on the Website may include graphic visual depictions and descriptions of nudity and sexual activity and must not be accessed by anyone who is younger than 18-years old. Visiting this Website if you are under 18-years old may be prohibited by federal, state, or local laws. By clicking "I Agree" below, you are making the following statements: - I am an adult, at least 18-years old, and I have the legal right to possess adult material in my community. - I will not allow any persons under 18-years old to have access to any of the materials contained within this Website. - I am voluntarily choosing to access the Website because I want to view, read, or hear the various materials which are available. - I do not find images of nude adults, adults engaged in sexual acts, or other sexual material to be offensive or objectionable. - I will leave the Website immediately if I am in anyway offended by the sexual nature of any material. - I understand and will abide by the standards and laws of my community. - By logging on and viewing any part of the Website, I will not hold the owners of the Website or its employees responsible for any materials located on the Website. - I acknowledge that my use of the Website is governed by the Website's Terms of Service Agreement and the Website's Privacy Policy, which I have carefully reviewed and accepted, and I am legally bound by the Terms of Service Agreement. By clicking "I Agree - Enter," you state that all the above is true, that you want to enter the Website, and that you will abide by the Terms of Service Agreement and the Privacy Policy. If you do not agree, click on the "Exit" button below and exit the Website.
This website uses cookies
We use cookies to personalize content and ads, to provide social media features and to analyze our traffic. You consent to our cookies if you continue to use our website. Read our
Privacy Policy
to learn more.
Click here to replay the video
Click Here for Purchase Options
You have ##freepreviews## free previews remaining.
Click Here for Purchase Options
Join Now
Preview This Update
See More
Adriana Zoom looks at maps and imagine how she can pose naked
Adriana Zoom
Adriana Zoom looks at maps and imagines how she can pose naked by the camera, photographer Higinio Domingo
Big Labia
Get Your Instant Access Now Only For $ 0.25 Per Day!


text:
Press information
Net Insight AB
Fredrik Trägårdh
This announcement is distributed by Thomson Reuters on behalf of Thomson Reuters clients.
The owner of this announcement warrants that:
(i) the releases contained herein are protected by copyright and other applicable laws; and
(ii) they are solely responsible for the content, accuracy and originality of the
information contained therein.
Source: Net Insight AB via Thomson Reuters ONE


text:
Arizona reflects both the advances and limited progress achieved by women in the United States. Women in Arizona and
the United States as a whole are seeing important changes in their lives and in their access to political, economic, and
social rights. However, they by no means enjoy equality with men, and they still lack many of the legal guarantees that
would allow them to achieve that equality. Women in Arizona and the nation would benefit from stronger enforcement of equal
opportunity laws, better political representation, adequate and affordable child care, and other policies that would help improve
their status.


text:
Felt bag Chinese Crested Dog dog silhouette, LeChienArtistiQ
Felt bag Chinese Crested Dog dog silhouette print
Grey felt bag with long carrying handles and hard plastic bottom.
Size 45 x 33 x 15 cm (without handles) with print on front available in different colors (see image with colors), back left blank.
Design from: LeChienArtistiQ
Designs of Sticky dog are drawn by hand and then being edited on the computer. Afterwards, the stickers are cut with a vinyl cutter and peeled. Finally, this design is pressed onto a cotton carrier.
Do you have special wishes, you like to have a diffrent design or are you curious about our other options. Send us a email to email@example.com and we will contact you as soon as possible to discuss your requirements.
Stickers are shipped in a sturdy shipping box. Send by Post NL.
Ready to ship 3-10 days after payment is received.


text:
The ArtScroll Large-Type Tehilim: It's Really Something to See!
Here are King David's timeless words, in a format that's easy on the eyes. Newly designed and typeset, these books feature extra large and clear type on neat and uncluttered pages. Includes complete Hebrew text together with the famed, bestselling ArtScroll translation, instructions, and abridged commentary.


text:
What Is a Pap Smear?
A Pap smear (or Pap test) is a medical test that helps doctors figure out if there are any problems with a girl's cervix (the lower part of the uterus that opens into the vagina).
The importance of the Pap smear is in the early detection, before there are any symptoms. Finding abnormal cells early can lead to treatment that prevents the development of cancer, and detecting cancer cells early enough can lead to greater chance of a cure.
Who Should Get a Pap Smear?
Teen girls don't need to get Pap smears unless their doctors think something's wrong. Once a girl turns 21, she should start getting regular Pap smears as a way to monitor her health. Women in their 20s with normal Pap smear results should have the test every 3 years. Some women might need to get tested more often, though. So ask your doctor.
The Pap smear shouldn't hurt, but it might be uncomfortable. The good news is, it's over quickly.
What Happens?
A doctor or uses a small brush to wipe a sample of mucus from the cervix. The sample is sent to a lab, where technicians check it for cells that aren't normal.
To do this, the doctor or NP will use a speculum to gently widen the vagina. A speculum is a thin piece of plastic or metal with a hinged piece on one end that allows it to open and close. If the speculum is metal, the doctor or nurse will warm it to make it more comfortable. The doctor or nurse will let you know when he or she is about to put the speculum in your vagina.
Once the speculum is in place, the doctor or nurse will gently open it up. Putting in and opening the speculum shouldn't hurt. But some women say that it can cause a bit of pressure and discomfort.
Because the vagina is surrounded by muscles that can contract or relax, the exam can be more comfortable if you relax the muscles in that area. Try doing some breathing exercises or focusing on relaxing the vaginal muscles. Sometimes humming your favorite song or chatting with the doctor or nurse can distract you and help you feel more relaxed.
After the speculum is in place, the doctor will shine a light inside the vagina to see the cervix. The doctor will gently touch the cervix with a small brush to pick up cells from that area. Some girls say it feels like a pinch.
After the doctor or nurse has collected the sample and removed the speculum, you'll be left alone to get dressed. Some women say that they bleed a tiny bit from the Pap smear after the exam, so they like to put a pantiliner in their underwear as they get dressed. This bleeding is no big deal — it's nothing like a period and it won't last.


text:
You will receive verbal and written post-surgical care instructions (please follow these instructions). Your escort must be available to discuss and sign these instructions before you will be allowed to go home. If you experience anything unusual after your surgery, please call your surgeon or go to the nearest emergency room. A nurse from our center will call you the next day after your surgery to check on your recovery.
Have questions?
Phone: 239-434-8707
Fax: 239-434-6343


text:
Whenever you are visiting the capital of the nation. We want you to remember the only thing and that is there are so many things that you can explore. L Zone Escorts is just one of the many beautiful and fantastic opportunities to get into. They will let you slide your boring life and have a very interesting one. This is your chance to get the much-needed sexual boost that Call Girls in L Zone can give you to get. It will change the ultimate momentum and how you perceive these services for a fact. These girls would do wonders which you haven't thought before. So how do you wanna exercise your love with these ladies? You can have a very good one with the elastic Escorts Ladies in L Zone. These ladies are very keen to give you their love.
L Zone Call Girls have made a severe impact on many clients' sexual lives
There is only one thing that you would expect to have. L Zone Call Girls Service has worked to make many people's sexual life better including clients from all over the world. We know that a good sexual life is something that every person aspires to have. You can have that wonderful experience with the most amazing and Phenomenal Escorts in L Zone. These ladies impact the lives of their customers in a better way. It should be every wonderful and happy moment for you. Ladies like this have the power to make your sexual life even more beautiful. You should have to enjoy the benefits that you can get with these girls. There are many more things that are very much achievable with the help of Escorts in L Zone. Make these amazing changes if you want to enjoy them.
Get some ample and Exotic Escorts Service in L Zone
If you are looking forward to some amazing action and want to make it a better experience with Call Girls in L Zone. There are so many things that you would expect to have with these exotic ladies. These decisions that you would take to have these experiences with ladies like this. Make these beautiful changes with Call Girls Service in L Zone. You will be having a wonderful time with them and that is something that we can promise you. When you experience these extravaganza activities with those ladies. You can conquer the love and affection that you can get anywhere. So it is time that you let yourself experience the state and atmosphere of love and affection with L Zone Escorts Service.
Choosing any of the decisions with L Zone Escorts Girls Service
When you want to camouflage your sexual life with Call Girls in Delhi and want to have those special erotic moments. These moments just make an impact on the better way in the sexual life of many clients. So choose the best girl who can submit herself in the manner that you would leverage yourself in the loving arms of those ladies. So be ready to make those beautiful changes and you would see the effect that it does on your sexual life. Every decision t you would make results in a very prolific and diverse one with you. So you have to deal with the most amazing feeling in the world. That feeling is being loved by the most beautiful Escorts Agency in L Zone. These agencies have all the facilities that you will ever need.


text:
Privacy Policy
Your privacy is important to us. To better protect your privacy we provide this notice explaining our online information practices and the choices you can make about the way your information is collected and used. To make this notice easy to find, we make it available on our homepage and at every point where personally identifiable information may be requested.
Protecting the privacy of the very young is especially important. For that reason, we will never collect or maintain information at our website from those we actually know are under 18, and no part of our website is structured to attract anyone under 18. Under our Terms of Service, children under 18 are not allowed to access our service.
When visiting our site, the IP address used to access the site will be logged along with the dates and times of access. This information is purely used to analyze trends, administer the site, track users movement and gather broad demographic information for internal use. Most importantly, any recorded IP addresses are not linked to personally identifiable information.
A cookie is a piece of data stored on the user's computer tied to information about the user. Our site don't use cookies. However, Some of our business partners use cookies on our site (for example, www.google.com ). However, we have no access to or control over these cookies, once we have given permission for them to set cookies for advertising. If you wish to disable cookies, you may do so through your individual browser options.
This Web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every Web site that collects personally identifiable information. This privacy statement applies solely to information collected by this Web site.
We use outside ad companies to display ads on our site. These ads may contain cookies and/or web beacons to collect data in the ad serving process and are collected by our ad companies, and we do not have access to this information. We work with the ad company: Google Adsense . Please check their websites for respective privacy policies.
We have included links on this site for your use and reference. We are not responsible for the privacy policies on these websites. You should be aware that the privacy policies of these sites may differ from our own.
The contents of this statement may be altered at any time, at our discretion.
Copyright @ Home Security. All rights reserved.


text:
Uncodemy ensures Best machine learning training in Panipat through delivery of quality content in combination with various facilities like working on live projects, grooming session, one on one sessions regular webinars, with the help of are industry expert tutors. Students also get multiple chances before the final evaluation so that they don't loose confidence and get insecure before stepping into the real world of machine learning.
Uncodemy's machine learning training for beginners in Panipat, also focuses on students getting the best kind of experience while learning that's why, we also arrange fun interactions among the students and tutors. Also, there are no strict rules and regulations like formal dress codes etc that you have to follow while attending the class training. Read moreMachine Learning Certification Training in Panipat by Uncodemy
Learn with Uncodemy's finest machine learning bootcamp in Panipat, where you will get guidance from the industry expert trainers.
4.9 out of 5 based on 5650 votes
15000+ Professionals Trained
3+ Batches every month
50+ Industry expert trainers
2500+ Corporate Served


text:
The whole foods lunchbox. Kids love different choices throughout the day, so we've designed a lunchbox that offers parents and kids more flexibility. Lunchbox - indigo rose features a large compartment that fits a whole sandwich. Plus, sitting underneath the tray is an included gel cooler pack to keep food fresher and cooler for longer. Or, remove the sandwich tray and the compartment now easily fits pasta and salads. Its unique flexi whole fruit holder lets you store a whole apple, as the stretchy seal bends around the shape of your fruit – no need to cut fruit into smaller sizes! Leak-proof silicone seals lets you store wet foods like watermelon and yoghurts (no liquids). The custom divider slides across enabling parents to adjust the compartment size as they need, or remove it to fit a whole banana or wrap.
Easy to open latch and handle encourages independence. Freezer safe. 3 yrs plus.
Large compartment fits a whole sandwich or bagel/roll. Remove tray to use for pasta or salads
Gel cooler pack (included) sits underneath sandwich tray to help keep food cooler and fresher for longer
Custom divider enables you to adjust the compartment size. Or remove to fit a whole banana or wrap
Leak-proof silicone seals secure wet foods, like watermelon and yoghurt (no liquids) . Seals are removable for easy cleaning and prevents mould build up.
Unique whole fruit compartment with stretchy seal means no need to cut fruit into small sizes
Easy to open design, with handles and large grip clip – encourages independence
Hand wash and freezer safe
Made from PP and silicone
BPS, PVC, BPA and Phthalate free
Age guide: from 3 years plus
Dimensions: 235mm (h) x 215mm (w) x 65mm (d)
Weight: 0.47 kg
Capacity (ltr): 2


text:
"I think it's a good program and I don't disagree with the basic policy that the Obama administration has pursued."
That's the word today from former Vice President Dick Cheney about the Obama administration's use of missiles fired from aerial drones to kill suspected terrorists overseas. And it's OK if the suspects are American citizens, Cheney added, if they've joined with terrorists who are out to harm the United States and its allies.
Drone strikes are the one thing Cheney spoke favorably about when he was asked on CBS This Morning about the current administration.
Otherwise, Cheney thinks:
-- Obama's national security team is "second rate."
-- Obama's foreign and national security policies are making the nation "vulnerable to the future."
"I'm very, very concerned about what I see happening in the national security arena," Cheney said.
Copyright 2021 NPR. To see more, visit https://www.npr.org.


text: Only Nike could create a cover-up with exceptional performance and looks. This ultra-smooth style is built from Dri-FIT fabric for unparalleled moisture management technology. The design features contrast stitching on the shoulders and sleeves, self-fabric collar, open cuffs and open hem. The contrast Swoosh design trademark is embroidered on the back of the neck. Made of 7.25-ounce, 88/12 polyester/spandex.


text:
Construction is the process of constructing a building or infrastructure. Construction differs from manufacturing in that manufacturing typically involves mass production of similar items without a designated purchaser, while construction typically takes place on location for a known client. Construction as an industry comprises six to nine percent of the gross domestic product of developed countries. Construction starts with planning,design, and financing; and continues until the project is built and ready for use.
Large-scale construction requires collaboration across multiple disciplines. An architect normally manages the job, and a construction manager, design engineer, construction engineer or project manager supervises it. For the successful execution of a project, effective planning is essential. Those involved with the design and execution of the infrastructure in question must consider zoning requirements, the environmental impact of the job, the successful scheduling, budgeting, construction-site safety, availability and transportation of building materials, logistics, inconvenience to the public caused by construction delays and bidding, etc. The largest construction projects are referred to as megaprojects.
Types of construction
In general, there are three sectors of construction: buildings, infrastructure and industrial. Building construction is usually further divided into residential and non-residential (commercial/institutional). Infrastructure is often called heavy/highway, heavy civil or heavy engineering. It includes large public works, dams, bridges, highways, water/wastewater and utility distribution. Industrial includes refineries, process chemical, power generation, mills and manufacturing plants. There are other ways to break the industry into sectors or markets.
Engineering News-Record (ENR) is a trade magazine for the construction industry. Each year, ENR compiles and reports on data about the size of design and construction companies. They publish a list of the largest companies in the United States (Top-40) and also a list the largest global firms (Top-250, by amount of work they are doing outside their home country). In 2014, ENR compiled the data in nine market segments. It was divided as transportation, petroleum, buildings, power, industrial, water, manufacturing, sewer/waste, telecom, hazardous waste plus a tenth category for other projects. In their reporting on the Top 400, they used data on transportation, sewer, hazardous waste and water to rank firms as heavy contractors.


text: Thrust into an all-new adventure, a down-on-his-luck Capt. Jack Sparrow feels the winds of ill-fortune blowing even more strongly when deadly ghost sailors led by his old nemesis, the evil Capt. Salazar, escape from the Devil's Triangle. Jack's only hope of survival lies in seeking out the legendary Trident of Poseidon, but to find it, he must forge an uneasy alliance with a brilliant and beautiful astronomer and a headstrong young man in the British navy.


text:
Features Include
Free to Join Best Offer Ads Fixed Price Ads Swap Ads Personal Ads Announcement Ads Wanted Ads Photo Ads Feature Ads Rich Ads Your Own Product Pages Buy Now Buttons PayPal Support Affiliate Program Built-in Spam Protection Real Time Stats Real Time Feedback Instant Ad Submissions Unlimited Ad Support Feedback Manager Built-in Photo Hosting Intuitive Ad Manager Free Classified Ads
OBOads is one of the best sites around for free ads, sell it, recycle it, swap it, promote it, announce it. Give OBO free classified ads a try today. Join Now Advertise For FREE
Recommend us to your friends!
Click Here
Can't Find a Category?
Home | Register | Login | QuestionsPrivacy Policy | Anti-Spam Policy | Terms of Service © 2004 - 2024 OBOads.com. All Rights Reserved.Hosted By All4Hosting.Com - Premium Web Site Hosting


text:
Live Chat : Mon-Fri 8.00am - 10.00pm (PT)
eFoodhandlers works cooperatively with state and local governmental agencies to expand the public's access to vital food safety information.
If your jurisdiction's food safety policy is unlisted or inaccurate, please give us an update at firstname.lastname@example.com
Would you like to give economically-challenged food workers access to free and low-cost training? Contact firstname.lastname@example.com
Total Turnkey Website eFoodhandlers can offer multiple services including the set-up of a unique website specifically for food safety training and testing. It is totally turnkey. eFoodhandlers provides you all the technology you need to have your own food handler website. This includes:
An eFoodhandlers.com website is painless to start and painless to maintain. They do all the work. You have no upfront costs. Based upon the amount of services required, you are charged a fee per paid license. This is usually a small percentage of the training cost charged the food handler for acquiring their certificate.
Training Partnerships eFoodhandlers can provide online food safety training partnerships to government agencies. In one option, eFoodhandlers provides the training service, collects funds, issues approved permits or licenses and remits funds back to the agency. In a second option, food handlers and workers can simply take eFoodhandlers certificate of completion to agency offices to receive official permits or licenses. Other options are available.
Pay-for-Click program eFoodhandlers offers government agencies the ability to purchase Pay-for-Click advertising. Under this program, agencies can leverage eFoodhandlers' access to food handlers of all ages to inform them of relevant services or to even link them to their own programs. The cost of this service is purely based on customer usage. A 'Pay-for-Conversion' program may also be available.
For more information on any of these programs, contact firstname.lastname@example.com.


text:
Call a Specialist Today! (02) 9388 1741
Free Delivery!
By placing an order on this web site, you indicate that you have read and agree to the following return policies and conditions. Click here to read our web site Terms and Conditions.
READ CAREFULLY. This Return Policy applies to use of the NetSolutionStore.com.au website located at https://www.netsolutionstore.com.au (the "Site"). The Site is the property of Virtual Graffiti Australia Pty Ltd.
Returns Must Meet ALL Applicable Criteria:
- If your returned product does not match all applicable criteria listed below, it will be rejected by our Returns Warehouse and returned back to you at your cost. Consequently, your RMA will be nullified, any credit request will be denied, replacement orders will not be made, and you will be charged for all shipping to and from our Returns Warehouse that may be incurred by Virtual Graffiti Australia Pty Ltd. By requesting an RMA and/or shipping a return in violation of this policy you hereby agree to accept our shipment of the return back to you and to the payment of all shipping costs to and from our Returns Warehouse. Our arrangements with our suppliers and manufacturers allow us no room to make exceptions.
Basic Criteria:
All returns must include the following:
- Original packaging (manufacturer's box, styrofoam, plastic bags, etc.)
- Original intact UPC barcode. Do not cut out the UPC code (for rebates) until you have examined and tested the product to your satisfaction. Removal of the UPC code voids any possibility of return regardless of RMA or credit request status.
- Valid Return Merchandise Authorisation (RMA).
- Original packing slip. Do not mail or dispose of the packing slip (for rebates) until you have examined and tested the product to your satisfaction.
- The return must be complete and include all accessories (transformers, antennas, remote controls, batteries, software disks, etc.)
- Manufacturer documentation (manuals, warranty cards, registration information, etc.)
- The RMA number must not be written on the original manufacturer's packaging or box. Please write the RMA number on the label used to return the item or the brown shipping box. Items received with any writing on the original manufacturer's packaging or box will be refused and returned to you at your cost and without credit approval.
Basic Return Policy:
- Unless otherwise stated below, you have 30 days from the date your product left the warehouse (regardless of when you actually took delivery of the product) to get a valid RMA from our website and get your product to a shipper to return back to us. It does not have to be back in our warehouse within 30 days, but it does have to be in the possession of the shipper (along with the valid RMA). RMAs must be valid, unexpired, and issued for the product being returned. Only one RMA is issued per return. When it expires, you may no longer return your product.
- If you are ineligible for an RMA, contact the manufacturer directly or check any applicable warranty you might have. See the Manufacturer Contact List at the bottom of this page.
- Except as provided for verified defective products (See Special Returns Policy for Defective Products below), you will be responsible for all shipping charges for returns sent to our Returns Warehouse.
- All products are subject to a 15% restocking fee (except where prohibited by law) if returned opened or in a non-factory sealed box, provided that there is no restocking fee for defective products (see Special Returns Policy for Defective Products below).
- Upon our acceptance of the merchandise in like new condition in strict conformance with the basic criteria and basic returns policy, the purchase price will be credited to the credit card used for the original purchase.
- Please allow up to fourteen days from shipment for your return to arrive at our Returns Warehouse, delivery times vary based on shipper selected. Your return will be processed within 5-7 business days (excluding Saturdays, Sundays, and holidays) after receipt of the item.
- Many of the items we sell have Special Return Policies. See the appropriate policy below to see if items you purchase are affected.
- The risk of loss for the product being returned shall be with you at all times during the shipment of such product to the returns center and with respect to any shipments from the returns center back to you, the original distributor or manufacturer, or any buyer through the liquidation process. Title to the product being returned will remain with you at all times and transfer from you to the original distributor, or a third party in the case of a liquidation of the return, only upon receipt of the products by such distributors or buyers.
Defective Products:
- Defective products can only be returned in exchange for the exact same product, or at the sole discretion of Virtual Graffiti Australia Pty Ltd, the purchase price will be credited to the credit card used for the original purchase. Defective products may only be returned within 30 days of the date your product left the warehouse (regardless of when you actually took delivery of the product).
- Once your return is processed, and is verified to meet the basic criteria above and to be defective, your replacement order will be sent to fulfillment. How quickly your replacement product ships after that depends on product availability.
- For products that we verify to be defective, we will reimburse you for your original shipping expenses, provided that your defective return must be shipped via ground shipment only. If you return your product via a faster, more expensive shipper, you incur the expenses yourself and any request for reimbursement will be denied.
- Virtual Graffiti Australia Pty Ltd in its sole and absolute discretion shall be the sole determiner of whether a product is in fact defective.
Manufacturer Only Returns (Direct Returns):
- Due to manufacturer's policies, certain items sold on our website may only be returned directly to the manufacturer.
- Contact the manufacturer directly to arrange the return. Be prepared to provide the manufacturer with the following information: Date of purchase, Serial number, manufacturer part number.
Opened Software, Registered Licensing:
- Software and License downloads are not returnable. All sales are final when software has been registered, activated or used. Exceptions must be approved prior to a return being authorised.


text:
Kde bydlí pocity: Radost
Kde bydlí pocity: Radost
Produkce: Michal Kentos
Všechna práva vyhrazena ©Readmio
Listen with Children
Your presence while listening to audiobooks has a positive effect. If you also maintain physical contact (holding hands, stroking the head), it's even better.
Instant delivery
Audiobooks, coloring books or worksheets are delivered immediately after purchase to your email address. For physical products, the delivery time is indicated in the description.
For personal use
Purchased products are intended for personal use only. You can share them with your family or use them during lessons at school or kindergarten. You may not resell them, publish them, or play them in public.


text:
Bypass Navigation?
National Aeronautics and Space Administration
Goddard Space Flight Center
Flight Projects
Sciences and Exploration
Arctic Ozone Watch
Images, data, and information for the Northern Hemisphere
Ozone Maps
Ozone Facts
19 July 1990
False-color view of total ozone over the Arctic pole. The purple and blue colors are where there is the least ozone, and the yellows and reds are where there is more ozone.
<<19 July 1989
<18 July 1990
July 1990
(All images)
20 July 1990>
19 July 1991>>
July Climatology
(All images)


text:
Decal measures approx. 24.5"W x 22"H.
Great fall decor item to dress up the walls of your home or use on signs.
The color samples shown have been reproduced and may vary slightly from actual colors due to different monitor settings.
Some of our images contain decals that have been enlarged to better show details. Please verify that the measurements given in the listing are the size you need.
Application instructions are included with your decal.
Please visit our "Decal Info and FAQ" page for other important information before buying.
Customer Reviews (% reviewsData.profile_link_title %)
0 Review
showing reviews from (% reviewsData.reviews.from %) to (% reviewsData.reviews.to %)
0 Review Posted


text:
Biometrics systems are designed to identify or verify the identity of people by using their intrinsic physical or behavioral characteristics. Biometric identifiers include fingerprints; iris, face and palm prints; gait; voice; and DNA, among others.
The government insists that biometrics databases can be used effectively for border security, to verify employment, to identify criminals, and to combat terrorism. Private companies argue biometrics can enhance our lives by helping us to identify our friends more easily and by allowing us access to places, products, and services more quickly and accurately. But the privacy risks that accompany biometrics databases are extreme.
Biometrics' biggest risk to privacy comes from the government's ability to use it for surveillance. As face recognition technologies become more effective and cameras are capable of recording greater and greater detail, surreptitious identification and tracking could become the norm.
The problems are multiplied when biometrics databases are "multimodal," allowing the collection and storage of several different biometrics in one database and combining them with traditional data points like name, address, social security number, gender, race, and date of birth. Further, geolocation tracking technologies built on top of large biometrics collections could enable constant surveillance. And if the government gets its way, all of this data could be obtained without a warrant and without notice or warning.
Large standardized collections of biometrics also increase the risk of data compromise from which it could be almost impossible to recover. In the near future, biometrics could stand in for your driver license or social security number, and you could be asked for a thumbprint or an iris scan just to rent an apartment or see a doctor. This could lead to many vulnerable copies of that linked data that could wind up in the hands of identity thieves. And any data compromises would be catastrophic; unlike a credit card or even a social security number, your biometric data can't be revoked or re-issued.
EFF is monitoring the development and implementation of these technologies, both in the law enforcement and commercial contexts. We are fighting to build privacy protections into systems at the front end so that we don't have to face privacy threats on the back end.


text:
Skip to content
Reach qualified local talent with NetTemps.
We're optimized for mobile to capture job seekers on the move.
Post your job for 30 days at $240 or 1 week at $75.
Try us. We'll deliver.
NetTemps delivers qualified local job seekersstraight to your door.
All you have to do is choose the perfect candidate.
We deliver 10 applications for every 28 day posting *
Post a job today
* 2017 average
Candidate Recommendations included with every job!
We'll send you full details of additional job seekersmatching your job posting.
Credits that never expire, offer volume discounts and can be used to purchase job promotional products. 1 job credit = 7 day posting.
Monthly fee with a monthly allocation of credits, prices based on contract length and required monthly credits. Credits can be used to advertise jobs or download Resumes.
Affordable monthly Resume Search product with contracts for 3, 6 or 12 months, prices based on contract length and required monthly downloads. Also Quick Resume Access product can be purchased for 1 month with 50 to 125 downloads.
Recommended for maximum reach, boost your job by distributing it to our network of more than 4,000 job boards, aggregators and niche sites.
Increase your job's visibility with a prominently displayed advertisement on all matching searches.
Attract job seekers from other states with a prominently displayed advertisement on all matching searches.
Target skilled job seekers from other countries with a prominent advertisement on all matching searches.
NetTemps will select highly relevant candidates and send them your job exclusively by email.