text:
We Do Computer Repairs, Laptop Repairs and Mac Repairs in Birkdale - 4159
Get your computer repaired by a Microsoft Certified Professional or a Dedicated Apple Technician! We have more 5 star reviews than any other computer repair company or store in Brisbane and have been on Channel 9 News.
Most repairs are completed within 24 hours.
Call-out Fees!)
Extremely Competitive - Other Large 'Geek / Nerd' companies can charge up to $160 + $80 same day call out
A lot of Basic Problems can be fixed in the hour
Remote Support
Did you know that some computer problems can be fixed remotely? This option is usually only available as long as your computer boots and you have an Internet connection. As long as we don't have to physically open up your machine, we can do everything remotely from removing viruses to fixing up annoying error messages. Also with remote, we usually do it in the same day.
Drop My Computer Off
If you are near one of our service centres, you can usually drop a machine off to us. This can be a cheaper alternative if there are tests that need to be done, as we usually cap it at around the 3-hour mark. We sometimes can service machines the same day if you choose to drop it off to us.
Onsite Service
Our hourly rate of $110 is highly competitive and, unlike most other companies, we don't charge a call-out fee. Usually, if your computer is not loading, there is an Internet problem or a hardware problem and you have a fair idea what it's about without the need for a lot of diagnostics, this is your way to go!
Laptop Hardware /
Mac Hardware Problems Only
- Laptop Screen Smashed or a nothing on screen?
- Apple Mac Book or iMac not turning on?
- Keyboard Not working / keys Missing?
- Laptop is not powering on?
Own a small Business and Need Business Solutions such as your own email or website?
We now design websites and Logos at a fraction of the cost that the larger companies charge! We also host your website on Australian Servers, other companies usually put your email and websites on servers located in other countries which can affect performance and reliability! Do you also need your business to appear on Google? We do search engine optimisation (SEO) which is how you found us to promote your business to get you extra work. Call and speak to the manager Robert.
Click here to visit zoowebdesigns to see the websites that we have designed
Computer Repairs Birkdale
- Computer Repairs Birkdale
- Computer Speedup Birkdale
- Computer Upgrade Birkdale
- Email Setup Birkdale
- File Recovery Birkdale
- Hardware Installation Birkdale
- Internet Security Birkdale
- Laptop Repair Birkdale
- Mac Repair Birkdale
- Malware Removal Birkdale
- Network Setup Birkdale
- Setup New Computer Birkdale
- Setup New Device Birkdale
- Software Installation Birkdale
Get your computer repaired in Birkdale, Queensland, 4159
Birkdale is a locality in the City of Redland in Queensland, Australia. The suburb of Birkdale is surrounded by the suburbs of Thorneside, Wellington Point, Alexandra Hills, Capalaba, Chandler, and Ransome. The suburb stretches from Tingalpa Creek in the west and to Wellington Point in the east. The suburbs of Thorneside and Waterloo Bay are located to the north while Capalaba and Alexandra Hills are located to the south. In 1889, local landowner William Thorne decided to name the area after his birthplace in England. In 1915, Birkdale State School opened in the suburb. It was followed by Birkdale South State School 62 years later.In need of computer repairs in Birkdale? Give us a call at (07) 3155 2040.
Computer Repairs
"Where can I get local computer repair near me to fix my computer?" "I wonder if there is a PC repair shop or a computer repair shop near me." "Is there a computer repair store near me?" "Where do I find professor computer services near me for desktop repair?" "I wish I could get PC fix, PC help, PC support, and PC repair near me to fix my PC." "I need computer help. Where can I get a computer fix near me?" "I need to avail computer service near me." "Where can I get the best computer repair near my location?" "Where can I find the best fix PC repair shop near me?" If you find yourself thinking these, you've come to the right place!
If you're looking for the best cheap computer repairs or computer fix Birkdale services, Get Computer Repair is the company for you! We offer both onsite computer repairs and home computer repairs. Worried about bringing your computer to us? You don't have to! We offer computer repairs mobile, meaning a computer fixer will provide our home computer services and PC troubleshooting onsite. Our home computer repair service means that we will be the ones to bring our services to you! We also offer online computer repair services, PC repair online, and online computer support so that we can provide you with remote computer repair. If you need mobile PC repair prices, PC services, PC repairs, and computer repairs in Birkdale, make sure to give us a call! We'll send a computer service technician to you right away.
Out of all the local computer stores Birkdale has to offer, Get Computer Repair is a computer repair centre that provides best computer repair services and our computer tech support people are capable of handling a wide range of computer repair jobs and computer technician jobs such as running a virus remover for computer virus repairs and other virus repair. For complete computer virus removal service to remove virus from PC, we also make sure to perform spyware removal and assist in data recovery. From computer screen repairs or affordable computer monitor repair to car computer repairs, we assure you that we offer the best computer repairs Birkdale has to offer. Need CPU repair service? We got that, too!
We also provide computer support, computer technical support, computer support services, and computer network services. For computer assistance and other computer service centre needs, give us a call at (07) 3155 2040. In need of affordable computers? We are more than just a computer repair business. Get Computer Repair can also build custom cheap PC computers. No need to buy one from the market, you can get inexpensive computer from us! We can provide whatever service you need for your computer.
Whatever computer brand or model you have, we guarantee that we will be able to provide computer servicing and computer solutions for you and all your computer problems. We provide Acer computer repairs, Apple computer repairs, Asus computer repairs, Dell computer repairs, HP computer repairs, Mac computer repairs, Samsung computer repairs, Sony computer repairs, and Toshiba computer repairs.
Affordable computer repairs and very cheap computer repairs that are high quality should not be difficult to find. Our computer geeks make sure that we offer the cheapest computer repairs without compromising the quality. Our computer technicians are experts on how to fix a computer. We will give you the best PC repair software, computer repair software, and computer hardware repairs Birkdale has to offer. When it comes to computer hardware repair and computer hardware servicing, we can provide you with everything from computer screen repair near me to hard drive repair. We will repair your computer in no time!
Among the many computer repair companies Birkdale has, Get Computer Repair is a computer repair company and computer repair shop that also offers basic computer repairs courses. We can perform emergency computer repairs for you if you need help immediately. Need after hours computer repairs? Get Computer Repair is open every day of the week from 7am to 10pm. Just give us a call and we will be right there to provide you with IT repair. We'll send you a computer geek to provide you with computer repair.
For computer service and repair AND more, call Get Computer Repair! You can find more information here on our computer repair website.
Computer Laptop Repair
Do you find yourself googling "local laptop repair shop near me", "laptop service near me that can fix my laptop","laptop fix near me" or "laptop repair shop near me that can fix laptop screen"? Get Computer Repairs is a laptop repair shop and a laptop service centre that offers all kinds of laptop repairs in the Birkdale area. We offer cheap laptop repairs ranging from laptop jack repairs to laptop screen repairs cheap in price. Whether you need laptop LCD screen repair or laptop power jack repair, we are able to provide you with a laptop doctor or laptop specialist who can fix your laptop for you. Give us a call and our laptop fixers will be at your place in no time! If you need a cracked laptop screen repair or a broken laptop screen repair cost, we can provide fixes such as LCD screen repair and laptop hinge repair. You no longer have to keep googling "laptop screen repair near me" because Get Computer Repair offers services right here in the suburb! We offer the best computer and laptop repair services Birkdale has to offer. For more details on cracked laptop screen repair cost and service or laptop screen replacement cost, just give us a call! Whether you need laptop keyboard repairs or replacement laptop battery for your old laptop, we can fix it for you. We also provide notebook repair! Call us for inquiries on laptop repair cost and computer repair cost. Our computer experts can provide laptop services and laptop repairs for all brands and models. If you are looking for an HP laptop repair centre near me or if you need an HP laptop battery replacement, our computer experts will be more than happy to provide them for you. We provide Acer laptop repairs, Alienware laptop repairs, Apple laptop repairs or Mac laptop repairs, Asus laptop repairs, Dell laptop repairs, Hewlett Packard laptop repairs or HP laptop repairs, Lenovo laptop repairs, Samsung laptop repairs, Sony laptop repairs or Sony VAIO laptop repairs, and Toshiba laptop repairs. Need service laptop and fix laptop? Get Computer Repair is the best laptop repair company that offers laptop servicing Birkdale has to offer. We offer mobile laptop repairs and mobile computer repair so that you don't have to worry about bringing your laptop to us because we will bring our services to you! Whether you need computer repair help at home or at your business, we can help. We also offer custom built laptops. For affordable laptop computers and affordable laptop repairs, give us a call. We will send a laptop doctor who fixes computers for cheap rates.Mac Repair
Tired of googling for "places that fix computers near me"? Get Computer repair offers all kinds of Authorised Mac Repairs Birkdale has to offer. We have cheap MacBook repairs, iMac repairs or i Mac repairs, Apple Mac repairs, and MacBook Pro repairs. All of these repairs are performed by Apple Certified Technicians so we can guarantee that the services we offer are of the best quality. We will provide you with a computer repair technician who is also an Apple certified computer technician who can repair any part of your Mac. Whether you need Mac screen repairs or Mac keyboard repair, we guarantee that we've got a computer doctor that can do the job. Give us a call and we will send a cheap computer technician for your Mac.Computer Repair and Maintenance
If you're searching for a computer place or local computer repair shop that offers PC repair services and computer maintenance services, Get computer is the place for you! We fix computers and make sure that your computer won't be needing any new repairs soon. Our technicians know how to repair computer devices that last long. We provide laptop maintenance as well! There's no more need for you to keep googling "places that fix laptops near me" or "computer repair in my area".Computer Repairs in Birkdale
For PC computer repair, make sure to choose Get Computer Repair. Of all the places that fix computers, Get Computer Repair has the cheapest computer repair prices. Get Computer Repair also offers remote computer support and onsite computer repair. We are not just limited to computers service & repairing, we offer cheap computer repair and cheap laptop repair. There's no more need for you to keep googling "computer repair places near me and laptop repair places", because Get Computer Repair offers best affordable computer repair, business computer services, and virus removal service. There are many computer repair places, local computer shops, and computer repair nearby, but only Get Computer Repair offers computer printer repair, computer IT support, and is also a computer fix store. We fix computer problems of every kind. Our onsite computer support covers laptop LCD repair but we also have online laptop repair for laptop repairs that can be done remotely. Get Computer Repair is the nearest computer repair shop of all the places that fix laptops. If you need pc laptop repair at home, we will send a laptop technician your way. We can provide online computer help or onsite computer services, depending on what you need. Whether you need on site computer repair, online PC repair, PC technical support, or mobile computer services. We can provide affordable desktop computers and affordable PC repair, computer repair and services, motherboard repair service, and small business computer support. If you find yourself searching, "computer techs near me", "cheap computer repair near me", "desktop repair near me", or "pc fix near me", you don't need to go anywhere else! Get computer repair offers computer consulting services. We are a computer PC home repair centre that offers small business computer support. There's no need for you to search for "laptop repair stores near me". Of all the IT computer support companies, we provide laptop repair home service and cheap laptop repair prices. We can repair your PC and provide you with an affordable desktop computer repair price list. Just give us a call and we will send a computer repairman right your way! Get computer Repair offers PC repair in Brisbane such as computer installation services and laptop and computer repair. We offer all PC repair from in home PC repair to IT computer repair. Make sure to give us a call for fast computer repair & services. Make sure to refer to our PC repair website for a complete good computer repair services list. We offer the cheapest computer fix here in Birkdale. We offer the best computer repair rates and the closest computer repair shop to your home. We offer the best low cost computer repairs in Brisbane. We have the most affordable PC solutions in the area. Get Computer Repair is one of the top computer repair companies.Other Services We Offer
Computer Repairs
We love fixing computers - no matter what brand or type of computer you have we can help. We are a family based business and have technicians all around the greater Brisbane area from North Lakes, Brisbane, Ipswich and Logan. Give us a call for any questions about any questions that you have.
Apple Mac Repairs
We love fixing apple products from Mac Book Air's to iMacs. Even if apple turn you away, give us a call as usually we can fix system boards as well, as opposed to you buying a new computer. The only thing we don't fix are iPhones and iPads
Laptop Repairs
Wether it's a smashed screen or you've spilt that evening wine all over your keyboard we can assist in finding the best way to get you up and running in no time along with our competitive prices for all your laptop hardware needs.
Computer and Network Security
Protect your financial records, photos, personal emails and other private data from identity thieves by letting us secure your computer for you.
Computer Setup
We'll come out to you and setup your new machine on-site, where you want it and how you want it.
Computer Tune-up
Computer running slow? Let us give it a good tune-up and it'll be fatser than ever before.
Data Backup & Transfer
Don't leave your personal data at risk of unrecoverable loss! Have us out to configure a backup of all your most important files.
Data Recovery
We know there's no worse feeling than when you think you've lost your data. Give us a call - we're determined to help you recover it!
Email Setup
It's hard to get by in this day and age without using email. We can come out to setup an email account for you and show you how to use it!
General Troubleshooting
We can fix it all! Next time you can't get that pesky program to work or your device won't sync properly, let us worry about it.
Hardware Installs
Need a new piece of hardware installed? PC running slowly and think it might be time for an upgrade? We can help!
Hardware Repair
Motherboard fried? We'll replace it. Faulty RAM slowing your PC down? We'll upgrade it. You can't scare the Geeks - they literally do it all!
Insurance Reports
Water damage? Storm damage? We'll do a full diagnosis and write up a detailed and concise report for your insurer! Let us help make the claim process easier!
Mobile Device Setup
Call us out to get all of your mobile gadgets setup and syncing with your computer!
Operating System Install & Repair
If your PC is experiencing serious performance issues, a damaged or currupted operating system may be to blame. We can help repair or reinstall it!
Setup a Wireless Home Network
Your local Geek can setup a secure wireless network in your home so that you can share anything and everything between as many computers as you like.
Setup New Equipment
Just bought a new printer? Need a webcam isntalled? We'll connect and configure almost any peripheral device to work with your particular computer.
Software Install & Setup
There are literally thousands of software programs on the market. We can help you install and setup almost all of them.
Learn more about your technology and what it can do with out friendly one-on-one training that will ensure you get the most out of your technology investments!
Virus & Spyware Removal
Is your desktop running slowly? Are friends complaining about receiving emails from you which you never sent? Your computer may have "caught" a virus! We can check it out!
New Computer Build
We can custom build you a brand new machine that is a fraction of the cost of what you will pay at retail stores and loads up in 15 seconds.
Search Engine Optimisation (SEO)
If you are a business owner that wants to be found on google, we can help. Let us help you soar through the ranks!
Website Designs
We make Amazing websites for a fraction of the cost. See our past work at zoowebdesigns.com.au
Logos / Phamplets / Business Cards
Starting up a new business and want either a Logo or a business card done? Speak to us today and let us create one just for you!
Redesigns / Updates to websites
Already have a website but unhappy with parts of it. We can change or update your website with the latest content or changes you request.
Website Hosting
We host our websites in Australia - not overseas. Any issues you speak to an Australian not overseas. 24x7 support.
Domain / Custom Emails
Do you want your own domain name or a custom email address so you can appear more professional. We can help!
NBN Setup and installation
We can assist with transferring you over to the NBN as well as the best plans to choose from. Sometimes the bigger companies such as Telstra, Optus, Iprimus are not the best ones to choose!
Hate windows 10?
We do as well. Windows 10 is designed for touch screens not people who have a keyboard and mouse - let us help to customise windows to make it more user friendly to the old Windows 7 such as bringing back the old start menu.
Software Sales and solutions
We sell all software at a reduced rates where possible. Including Microsoft office 2010, 2013, 2016 as well as the latest windows 10 and everybody's favorite Windows 7 so that you don't have problems with those forced updates.
Cloud backup / Storage solutions
Every hard drive will fail. It is just a matter of time. Let us direct you to the best cloud storage solutions for you so that you will never loose your precious documents, photos or Data.
Gsuite / Office 365 business solutions
If your wanting solutions for the two above products let us know we can set you up and configure all your accounts and zone editor settings.
Laptop Sales
If you don't want us to build you a computer and need a laptop as you want it to be portable we can offer a buying service for you or just give you general advice on the best laptop / specs based on your needs.
Server Support
Do you have a server that you are having problems with or is running slow or needs an upgrade? We can assist small businesses with getting their server up and running again in the quickest time to prevent business impact.
Preventative Maintenance and general Computer Care
9 times out of 10 you can prevent something from happening to your computer by having regular check ups and maintenance. There are several things we can look for that can usually take an hour to ensure that your not going to run into a catastrophe anytime soon!
General Advice for all your tech questions
Are you having trouble determining what phone you should buy or what tablet you should get? Do you need advice on what internet provider has the best plans available. We are happy to give non biased advice for these type's of questions you may have.
Help you get better deals on your ISP
Finally you have a friend in the business! In some cases we can actually call up your ISP and get a better price for you because we are aware of what other ISP companies are charging and can save you $$$ of your bill per month or a higher data rate.
Get started with crypto currency
While we are not a financial advisor a lot of people Are wondering how they can buy and get started with bitcoin, etherum and other alt coins. We can assist with the technical know how to do this as well. Assisting with Entry into and out of fiat and sending to exchanges.
In The Media
See our Lead Technician/Owner, Robert
being interviewed on Channel 9 news about speeding up your computer/Internet.
Major Brands We Work With
Don't see your brand name? Don't worry we can still help, these are just the more common brands
Contact Us
Don't hesitate to message us for any of your questions and inquiries.


text:
I went over to JustJenn's house for New Year's Oshogatsu yumminess...along with tons of traditional Japanese foods she created Royal T Milk Tea Cupcakes. They were delicious and I couldn't wait to try them myself!
Milk used in the cupcake is heated and the tea steeps in the milk. The frosting is so light and delicious. An easy combo of mascarpone cream, sugar and whipped cream...it is just so good!
Remember my 40th Birthday? I went to Bouchon's pop up bakery in Beverly Hills with justJenn and stopped by Crate & Barrel. I gifted myself this new cake stand...and had them gift wrap it!! I brought it home and put it aside...then came Christmas and mochi making and I forgot about it. Imagine my delight when I opened this Perfect Gift this year! :)
This absolutely cute and beautiful cupcake stand is handcrafted by Oakland, CA-based ceramic artist Whitney Smith. Thank you so much my dear friend Sumi for this delightful birthday gift!
These are just lovely cupcakes! Be sure to give them a try.
Just Jenn's Mascarpone Frosting (This frosting is my favorite!!)

subset: commoncrawl


text:
Cheap " IPhone 7 128gb" phones for Sale.
We rely on our cellphones today so it's important to find the right device. A smartphone lets you access the Web, download helpful apps, keep you in touch with your family and friends and more.
From the latest iPhones to Samsung Galaxy, LG and Motorola cell phones, we can help you find the brand and model that's right for you and at Best Price Guaranteed! Use Filters and Search box for more used phones by Manufacturer and Carrier.


text:
MikroTik mANT LTE 5o - omnidirectional LTE antenna for wAP LTE and LtAP mini LTE
MikroTik mANT LTE 5o - omnidirectional LTE antenna for wAP LTE and LtAP mini LTE
The mANT LTE is an omnidirectional antenna specifically designed for LTE frequencies. It is an excellent companion to our LTE devices, such as the wAP LTE and LtAP series. The antenna has a 5 dBi gain, improving your connection in the areas with inadequate LTE service coverage, allowing you to increase your connection speed.
Are you a business customer? Please log in to see your pricing.
Contact us
Buy all your MikroTik solutions from MiRO, the value-added MikroTik Master Distributor in Southern Africa
Who is MikroTik and what are their products used for?
Starting with the unlicensed 2.4GHz and 5GHz frequencies, MikroTik have developed a fixed wireless broadband product portfolio that caters for many WISP applications, ranging from short-range high-throughput solutions for urban deployments, all the way to extra-long range, robust wireless connectivity solutions for rural deployments. Their product range also includes other aspects of networking, such as indoor and outdoor Wi-Fi, beautiful and powerful 3G and LTE home routers, as well as copper and fibre switching and routing products with port capacities of more than 10Gbps. In their quest to deliver powerful routing power to as many people as possible, their latest products include a range of Core routers that deliver high networking performance at the best price point in the market, and more recently, they launched a range of CAT5/6 copper products to emulate fibre-to-the-home and fire-to-the-business connectivity, at a -reduced price – they call this technology GPEN – Gigabit Passive Ethernet Network.
History of MikroTik
MikroTik is a Latvian company which was founded in 1996 to design routers and wireless ISP systems. MikroTik has evolved throughout the years and offer provide flexible, feature-rich and cost-effective hardware and software solutions for Internet Service Providers and enterprises across the globe. Their experience in using industry-standard PC hardware and complete routing systems enabled them to create their own operating system in 1997, called RouterOS. RouterOS provides extensive stability, control, and flexibility for all kinds of data interfaces and routing solutions. In 2002 MikroTik decided to manufacture their own hardware, and the RouterBOARD brand was born. They have resellers across the globe, including South Africa. The latest products from MikroTik are specifically designed to make existing Internet technologies faster, more powerful and affordable to a wider range of users. You can buy these best-of-breed MikroTik products directly from www.miro.co.za.
Advantages of using MikroTik in South Africa
Many of MikroTik's loyal Southern African customer base, not only love the products, but also choose MikroTik specifically for the RouterOS software. MikroTik RouterOS is a router operating system and software that turns regular PC or MikroTik RouterBOARD hardware into a dedicated router. Some of the main features of MikroTik's RouterOS include 802.11a/b/g/n/ac support, custom Nv2 TDMA protocol, advanced Quality of Service (QoS), stateful firewall, tunnels (VPN), STP bridging with filtering, WDS and Virtual AP, hotspots for Plug-and-Play access, RIP, OSPF, BGP, MPLS routing, Remote WinBox GUI and Web admin, high availability with VRRP, bonding of interfaces, Telnet/mac-telnet/ssh/console admin, real-time configuration and monitoring, 3G/LTE support, OpenFlow support.
MikroTik has a wide range of products, – including indoor and outdoor Customer Premises Equipment (CPE) and wireless access point (AP) solutions, carrier-grade routers with cutting edge multi-core CPUs and their Smart Switch series, as well as small integrated copper and fibre routers running on RouterOS for assembling your own systems. MikroTik has more than 160 different products available on offer.
MikroTik is not only known for their wide range of different products and technologies but also their easy to use operating system. MikroTik's experience and knowledge have allowed them to become a global brand, servicing almost every business, from the biggest enterprise corporate giants to home users – MikroTik has a solution for every need!
MiRO's partnership with MikroTik
MiRO has been supplying a range of products from MikroTik in South Africa for over 16 years and has since played a pivotal role in the expansion of MikroTik in Southern Africa. MiRO is committed to managing a reliable and steady supply chain of MikroTik products in Southern Africa and is fully equipped to support the brand in the local market. Not only can you purchase your MikroTik devices from MiRO, but MiRO can also assist you with pre-sales support, internationally-certified training, and after-sales support.
MiRO stocks the latest and greatest MikroTik range to ensure you too can make the right choice when choosing the best solution that will work for you.
Their comprehensive range includes:
· Indoor and Outdoor 2.4HGz, 5GHz and 60GHz CPE and AP solutions to suit every budget.
· Carrier-grade routers with cutting edge multi-core CPUs and the MikroTik Smart Switch Series.
· Small integrated routers running RouterOS for assembling your own systems.
· Accessories such as RouterBoard cases, Power Supplies and RouterBoards.
· Fibre Solutions such as the CWDM range
· GPEN concept product range.
· MikroTik certified trainings are hosted frequently across South Africa, Botswana, Mozambique, Namibia, Nairobi, Swaziland and Lesotho. These certified trainings include MTCNA, MTCNE, MCWE and MTCRE.
We would love to hear your thoughts on the MikroTik range. Leave us a review on the MikroTik devices you have purchased from MiRO.
No Review


text:
Piper J3c-65 Cub L-4h Grasshopper Button Up Hawaiian Shirt
Piper J3c-65 Cub L-4h Grasshopper Button Up Hawaiian Shirt – Hawaiian shirts are a classic summer staple, and we have the perfect selection for you.
For those of you who don't know, Hawaiian shirts were originally worn by locals in Hawaii as a form of casual wear. Later on, they were brought to the mainland by tourists who fell in love with what they saw in Hawaii. The style eventually caught on and became popular among men all over the world.
Our collection of Cool Hawaiian Shirts includes different styles, patterns and colors that will surely catch your eye. Whether you're looking for something simple or unique, we got you covered!
Go visit tshirtslowprice to find other Cool Hawaiian Shirts
Product tag : Hawaiian Shirt
Piper J3c-65 Cub L-4h Grasshopper Button Up Hawaiian Shirt Product detail:
- Made Of Premium Polyester Fabric. Long-lasting and durability.
- The design is printed with new age printing technology, direct to garment. It is printed with a water – soluble and eco – friendly ink.
- It is cured with a heat treatment process to ensure the color-fastness and lasting durability of the design.
- Machine wash or hand wash. Tumble dry on low heat. Avoid direct heat. Do not use bleach.
- Note: Since the size is manually measured, please allow a slight dimension difference from 1-3 cm.
Shipping time:
Production time: 2-7 business days.
- Shipments within the USA take 7 – 15 business days. Typically it takes up to 14-28 business days to arrive at an international address. This time is from the date that it is shipped out, not the day the order is placed. *Due to Covid-19 it maybe takes 2-6 business addition days*
- Worldwide shipping available. Shipping fees and delivery time depends on the country and total weight of items in your order.


text:
Land-based sources protocol to Cartagena Convention : message from the President of the United States transmitting protocol concerning pollution from land-based sources and activities ("the Protocol") to the Convention for the Protection and Development of the Marine Environment of the Wider Caribbean Region, with annexes, done at Oranjestad, Aruba, on October 6, 1999, and signed by the United States on that same date
This treaty sets out general legal obligations to protect the marine environment of the Gulf of Mexico, Straits of Florida, Caribbean Sea, and immediately adjacent areas of the Atlantic Ocean-collectively known as the Wider Caribbean Region.
United States. President (2001-2009 : Bush) & Rice, Condoleezza, 1954-
Item Type:
Refine your search to only
UNT Libraries


text:
Remarks as Prepared for Delivery by Hillary Rodham Clinton Accepting the Democratic Nomination
Democratic National Convention
Philadelphia, Pennsylvania
Thursday, July 28, 2016
PHILADELPHIA, July 28, 2016 /PRNewswire-USNewswire/ -- Thank you! Thank you for that amazing welcome.
And Chelsea, thank you.
I'm so proud to be your mother and so proud of the woman you've become.
Thanks for bringing Marc into our family, and Charlotte and Aidan into the world.
And Bill, that conversation we started in the law library 45 years ago is still going strong.
It's lasted through good times that filled us with joy, and hard times that tested us.
And I've even gotten a few words in along the way.
On Tuesday night, I was so happy to see that my Explainer-in-Chief is still on the job.
I'm also grateful to the rest of my family and the friends of a lifetime.
To all of you whose hard work brought us here tonight, and to those of you who joined our campaign this week.
And what a remarkable week it's been.
We heard the man from Hope, Bill Clinton.
And the man of Hope, Barack Obama.
America is stronger because of President Obama's leadership, and I'm better because of his friendship.
We heard from our terrific vice president, the one-and-only Joe Biden, who spoke from his big heart about our party's commitment to working people.
First Lady Michelle Obama reminded us that our children are watching, and the president we elect is going to be their president, too.
And for those of you out there who are just getting to know Tim Kaine – you're soon going to understand why the people of Virginia keep promoting him: from city council and mayor, to Governor, and now Senator.
He'll make the whole country proud as our Vice President.
And I want to thank Bernie Sanders.
Bernie, your campaign inspired millions of Americans, particularly the young people who threw their hearts and souls into our primary.
You've put economic and social justice issues front and center, where they belong.
And to all of your supporters here and around the country:
I want you to know, I've heard you.
Your cause is our cause.
Our country needs your ideas, energy, and passion.
That's the only way we can turn our progressive platform into real change for America.
We wrote it together – now let's go out there and make it happen together.
My friends, we've come to Philadelphia – the birthplace of our nation – because what happened in this city 240 years ago still has something to teach us today.
We all know the story.
But we usually focus on how it turned out - and not enough on how close that story came to never being written at all.
When representatives from 13 unruly colonies met just down the road from here, some wanted to stick with the King.
Some wanted to stick it to the king, and go their own way.
The revolution hung in the balance.
Then somehow they began listening to each other, compromising, finding common purpose.
And by the time they left Philadelphia, they had begun to see themselves as one nation.
That's what made it possible to stand up to a King.
That took courage.
They had courage.
Our Founders embraced the enduring truth that we are stronger together.
America is once again at a moment of reckoning.
Powerful forces are threatening to pull us apart.
Bonds of trust and respect are fraying.
And just as with our founders, there are no guarantees.
It truly is up to us.
We have to decide whether we all will work together so we all can rise together.
Our country's motto is e pluribus unum: out of many, we are one.
Will we stay true to that motto?
Well, we heard Donald Trump's answer last week at his convention.
He wants to divide us - from the rest of the world, and from each other.
He's betting that the perils of today's world will blind us to its unlimited promise.
He's taken the Republican Party a long way, from "Morning in America" to "Midnight in America."
He wants us to fear the future and fear each other.
Well, a great Democratic President, Franklin Delano Roosevelt, came up with the perfect rebuke to Trump more than eighty years ago, during a much more perilous time.
"The only thing we have to fear is fear itself."
Now we are clear-eyed about what our country is up against.
But we are not afraid.
We will rise to the challenge, just as we always have.
We will not build a wall.
Instead, we will build an economy where everyone who wants a good paying job can get one.
And we'll build a path to citizenship for millions of immigrants who are already contributing to our economy!
We will not ban a religion.
We will work with all Americans and our allies to fight terrorism.
There's a lot of work to do.
Too many people haven't had a pay raise since the crash.
There's too much inequality.
Too little social mobility.
Too much paralysis in Washington.
Too many threats at home and abroad.
But just look at the strengths we bring to meet these challenges.
We have the most dynamic and diverse people in the world.
We have the most tolerant and generous young people we've ever had.
We have the most powerful military.
The most innovative entrepreneurs.
The most enduring values. Freedom and equality, justice and opportunity.
We should be so proud that these words are associated with us. That when people hear them – they hear America.
So don't let anyone tell you that our country is weak.
We're not.
Don't let anyone tell you we don't have what it takes.
We do.
And most of all, don't believe anyone who says: "I alone can fix it."
Those were actually Donald Trump's words in Cleveland.
And they should set off alarm bells for all of us.
I alone can fix it?
Isn't he forgetting?
Troops on the front lines.
Police officers and fire fighters who run toward danger.
Doctors and nurses who care for us.
Teachers who change lives.
Entrepreneurs who see possibilities in every problem.
Mothers who lost children to violence and are building a movement to keep other kids safe.
He's forgetting every last one of us.
Americans don't say: "I alone can fix it."
We say: "We'll fix it together."
Remember: Our Founders fought a revolution and wrote a Constitution so America would never be a nation where one person had all the power.
Two hundred and forty years later, we still put our faith in each other.
Look at what happened in Dallas after the assassinations of five brave police officers.
Chief David Brown asked the community to support his force, maybe even join them.
And you know how the community responded?
Nearly 500 people applied in just 12 days.
That's how Americans answer when the call for help goes out.
Twenty years ago I wrote a book called "It Takes a Village." A lot of people looked at the title and asked, what the heck do you mean by that?
This is what I mean.
None of us can raise a family, build a business, heal a community or lift a country totally alone.
America needs every one of us to lend our energy, our talents, our ambition to making our nation better and stronger.
I believe that with all my heart.
That's why "Stronger Together" is not just a lesson from our history.
It's not just a slogan for our campaign.
It's a guiding principle for the country we've always been and the future we're going to build.
A country where the economy works for everyone, not just those at the top.
Where you can get a good job and send your kids to a good school, no matter what zip code you live in.
A country where all our children can dream, and those dreams are within reach.
Where families are strong, communities are safe, and yes, love trumps hate.
That's the country we're fighting for.
That's the future we're working toward, and so it is with humility, determination. and boundless confidence in America's promise that I accept your nomination for President of the United States!
Now, sometimes the people at this podium are new to the national stage.
As you know, I'm not one of those people.
I've been your First Lady. Served 8 years as a Senator from the great State of New York.
I ran for President and lost.
Then I represented all of you as Secretary of State.
But my job titles only tell you what I've done.
They don't tell you why.
The truth is, through all these years of public service, the "service" part has always come easier to me than the "public" part.
I get it that some people just don't know what to make of me.
So let me tell you.
The family I'm from, well, no one had their name on big buildings.
My family were builders of a different kind.
Builders in the way most American families are.
They used whatever tools they had – whatever God gave them – and whatever life in America provided – and built better lives and better futures for their kids.
My grandfather worked in the same Scranton lace mill for 50 years.
Because he believed that if he gave everything he had, his children would have a better life than he did.
And he was right.
My dad, Hugh, made it to college. He played football at Penn State and enlisted in the Navy after Pearl Harbor.
When the war was over he started his own small business, printing fabric for draperies.
I remember watching him stand for hours over silk screens.
He wanted to give my brothers and me opportunities he never had.
And he did. My mother, Dorothy, was abandoned by her parents as a young girl. She ended up on her own at 14, working as a house maid.
She was saved by the kindness of others.
Her first grade teacher saw she had nothing to eat at lunch, and brought extra food to share.
The lesson she passed on to me years later stuck with me:
No one gets through life alone.
We have to look out for each other and lift each other up.
She made sure I learned the words of our Methodist faith:
"Do all the good you can, for all the people you can, in all the ways you can, as long as ever you can."
I went to work for the Children's Defense Fund, going door-to-door in New Bedford, Massachusetts on behalf of children with disabilities who were denied the chance to go to school.
I remember meeting a young girl in a wheelchair on the small back porch of her house.
She told me how badly she wanted to go to school – it just didn't seem possible.
And I couldn't stop thinking of my mother and what she went through as a child.
It became clear to me that simply caring is not enough.
To drive real progress, you have to change both hearts and laws.
You need both understanding and action.
So we gathered facts. We built a coalition. And our work helped convince Congress to ensure access to education for all students with disabilities.
It's a big idea, isn't it?
Every kid with a disability has the right to go to school.
But how do you make an idea like that real? You do it step-by-step, year-by-year, sometimes even door-by-door.
And my heart just swelled when I saw Anastasia Somoza on this stage, representing millions of young people who – because of those changes to our laws – are able to get an education.
It's true, I sweat the details of policy – whether we're talking about the exact level of lead in the drinking water in Flint, Michigan, the number of mental health facilities in Iowa, or the cost of your prescription drugs.
Because it's not just a detail if it's your kid - if it's your family.
It's a big deal. And it should be a big deal to your president.
Over the last three days, you've seen some of the people who've inspired me.
People who let me into their lives, and became a part of mine.
People like Ryan Moore and Lauren Manning.
They told their stories Tuesday night.
I first met Ryan as a seven-year old.
He was wearing a full body brace that must have weighed forty pounds.
Children like Ryan kept me going when our plan for universal health care failed, and kept me working with leaders of both parties to help create the Children's Health Insurance Program that covers 8 million kids every year.
Lauren was gravely injured on 9/11.
It was the thought of her, and Debbie St. John, and John Dolan and Joe Sweeney, and all the victims and survivors, that kept me working as hard as I could in the Senate on behalf of 9/11 families, and our first responders who got sick from their time at Ground Zero.
I was still thinking of Lauren, Debbie and all the others ten years later in the White House Situation Room when President Obama made the courageous decision that finally brought Osama bin Laden to justice.
In this campaign, I've met so many people who motivate me to keep fighting for change.
And, with your help, I will carry all of your voices and stories with me to the White House.
I will be a President for Democrats, Republicans, and Independents.
For the struggling, the striving and the successful.
For those who vote for me and those who don't.
For all Americans.
Tonight, we've reached a milestone in our nation's march toward a more perfect union: the first time that a major party has nominated a woman for President.
Standing here as my mother's daughter, and my daughter's mother, I'm so happy this day has come.
Happy for grandmothers and little girls and everyone in between.
Happy for boys and men, too – because when any barrier falls in America, for anyone, it clears the way for everyone. When there are no ceilings, the sky's the limit.
So let's keep going, until every one of the 161 million women and girls across America has the opportunity she deserves.
Because even more important than the history we make tonight, is the history we will write together in the years ahead.
Let's begin with what we're going to do to help working people in our country get ahead and stay ahead.
Now, I don't think President Obama and Vice President Biden get the credit they deserve for saving us from the worst economic crisis of our lifetimes.
Our economy is so much stronger than when they took office. Nearly 15 million new private-sector jobs. Twenty million more Americans with health insurance. And an auto industry that just had its best year ever. That's real progress.
But none of us can be satisfied with the status quo. Not by a long shot.
We're still facing deep-seated problems that developed long before the recession and have stayed with us through the recovery.
I've gone around our country talking to working families. And I've heard from so many of you who feel like the economy just isn't working.
Some of you are frustrated – even furious.
And you know what? You're right.
It's not yet working the way it should.
Americans are willing to work – and work hard.
But right now, an awful lot of people feel there is less and less respect for the work they do.
And less respect for them, period.
Democrats are the party of working people.
But we haven't done a good enough job showing that we get what you're going through, and that we're going to do something about it.
So I want to tell you tonight how we will empower Americans to live better lives.
My primary mission as President will be to create more opportunity and more good jobs with rising wages right here in the United States, from my first day in office to my last!
Especially in places that for too long have been left out and left behind.
From our inner cities to our small towns, from Indian Country to Coal Country.
From communities ravaged by addiction to regions hollowed out by plant closures.
And here's what I believe.
I believe America thrives when the middle class thrives.
I believe that our economy isn't working the way it should because our democracy isn't working the way it should.
That's why we need to appoint Supreme Court justices who will get money out of politics and expand voting rights, not restrict them. And we'll pass a constitutional amendment to overturn Citizens United!
I believe American corporations that have gotten so much from our country should be just as patriotic in return.
Many of them are. But too many aren't.
It's wrong to take tax breaks with one hand and give out pink slips with the other.
And I believe Wall Street can never, ever be allowed to wreck Main Street again.
I believe in science. I believe that climate change is real and that we can save our planet while creating millions of good-paying clean energy jobs.
I believe that when we have millions of hardworking immigrants contributing to our economy, it would be self-defeating and inhumane to kick them out.
Comprehensive immigration reform will grow our economy and keep families together - and it's the right thing to do.
Whatever party you belong to, or if you belong to no party at all, if you share these beliefs, this is your campaign.
If you believe that companies should share profits with their workers, not pad executive bonuses, join us.
If you believe the minimum wage should be a living wage and no one working full time should have to raise their children in poverty -- join us.
If you believe that every man, woman, and child in America has the right to affordable health care… join us.
If you believe that we should say "no" to unfair trade deals, that we should stand up to China, that we should support our steelworkers and autoworkers and homegrown manufacturers, join us.
If you believe we should expand Social Security and protect a woman's right to make her own heath care decisions, join us.
And yes, if you believe that your working mother, wife, sister, or daughter deserves equal pay… join us.
Let's make sure this economy works for everyone, not just those at the top.
Now, you didn't hear any of this from Donald Trump at his convention.
He spoke for 70-odd minutes – and I do mean odd.
And he offered zero solutions. But we already know he doesn't believe these things.
No wonder he doesn't like talking about his plans.
You might have noticed, I love talking about mine.
In my first 100 days, we will work with both parties to pass the biggest investment in new, good-paying jobs since World War II.
Jobs in manufacturing, clean energy, technology and innovation, small business, and infrastructure.
If we invest in infrastructure now, we'll not only create jobs today, but lay the foundation for the jobs of the future.
And we will transform the way we prepare our young people for those jobs.
Bernie Sanders and I will work together to make college tuition-free for the middle class and debt-free for all!
We will also liberate millions of people who already have student debt.
It's just not right that Donald Trump can ignore his debts, but students and families can't refinance theirs.
And here's something we don't say often enough: College is crucial, but a four-year degree should not be the only path to a good job.
We're going to help more people learn a skill or practice a trade and make a good living doing it.
We're going to give small businesses a boost. Make it easier to get credit. Way too many dreams die in the parking lots of banks.
In America, if you can dream it, you should be able to build it.
We're going to help you balance family and work. And you know what, if fighting for affordable child care and paid family leave is playing the "woman card," then Deal Me In!
(Oh, you've heard that one?)
Now, here's the thing, we're not only going to make all these investments, we're going to pay for every single one of them.
And here's how: Wall Street, corporations, and the super-rich are going to start paying their fair share of taxes.
Not because we resent success. Because when more than 90 percent of the gains have gone to the top 1 percent, that's where the money is.
And if companies take tax breaks and then ship jobs overseas, we'll make them pay us back. And we'll put that money to work where it belongs — creating jobs here at home!
Now I know some of you are sitting at home thinking, well that all sounds pretty good.
But how are you going to get it done? How are you going to break through the gridlock in Washington? Look at my record. I've worked across the aisle to pass laws and treaties and to launch new programs that help millions of people. And if you give me the chance, that's what I'll do as President.
But Trump, he's a businessman. He must know something about the economy.
Well, let's take a closer look.
In Atlantic City, 60 miles from here, you'll find contractors and small businesses who lost everything because Donald Trump refused to pay his bills.
People who did the work and needed the money, and didn't get it – not because he couldn't pay them, but because he wouldn't pay them.
That sales pitch he's making to be your president? Put your faith in him – and you'll win big? That's the same sales pitch he made to all those small businesses. Then Trump walked away, and left working people holding the bag.
He also talks a big game about putting America First. Please explain to me what part of America First leads him to make Trump ties in China, not Colorado.
Trump suits in Mexico, not Michigan. Trump furniture in Turkey, not Ohio. Trump picture frames in India, not Wisconsin.
Donald Trump says he wants to make America great again – well, he could start by actually making things in America again.
The choice we face is just as stark when it comes to our national security.
Anyone reading the news can see the threats and turbulence we face.
From Baghdad and Kabul, to Nice and Paris and Brussels, to San Bernardino and Orlando, we're dealing with determined enemies that must be defeated.
No wonder people are anxious and looking for reassurance. Looking for steady leadership.
You want a leader who understands we are stronger when we work with our allies around the world and care for our veterans here at home. Keeping our nation safe and honoring the people who do it will be my highest priority.
I'm proud that we put a lid on Iran's nuclear program without firing a single shot – now we have to enforce it, and keep supporting Israel's security.
I'm proud that we shaped a global climate agreement – now we have to hold every country accountable to their commitments, including ourselves.
I'm proud to stand by our allies in NATO against any threat they face, including from Russia.
I've laid out my strategy for defeating ISIS.
We will strike their sanctuaries from the air, and support local forces taking them out on the ground. We will surge our intelligence so that we detect and prevent attacks before they happen.
We will disrupt their efforts online to reach and radicalize young people in our country.
It won't be easy or quick, but make no mistake – we will prevail.
Now Donald Trump says, and this is a quote, "I know more about ISIS than the generals do…."
No, Donald, you don't.
He thinks that he knows more than our military because he claimed our armed forces are "a disaster."
Well, I've had the privilege to work closely with our troops and our veterans for many years, including as a Senator on the Armed Services Committee.
I know how wrong he is. Our military is a national treasure.
We entrust our commander-in-chief to make the hardest decisions our nation faces.
Decisions about war and peace. Life and death.
A president should respect the men and women who risk their lives to serve our country – including the sons of Tim Kaine and Mike Pence, both Marines.
Ask yourself: Does Donald Trump have the temperament to be Commander-in-Chief?
Donald Trump can't even handle the rough-and-tumble of a presidential campaign.
He loses his cool at the slightest provocation. When he's gotten a tough question from a reporter. When he's challenged in a debate. When he sees a protestor at a rally.
Imagine him in the Oval Office facing a real crisis. A man you can bait with a tweet is not a man we can trust with nuclear weapons.
I can't put it any better than Jackie Kennedy did after the Cuban Missile Crisis. She said that what worried President Kennedy during that very dangerous time was that a war might be started – not by big men with self-control and restraint, but by little men – the ones moved by fear and pride.
America's strength doesn't come from lashing out.
Strength relies on smarts, judgment, cool resolve, and the precise and strategic application of power.
That's the kind of Commander-in-Chief I pledge to be.
And if we're serious about keeping our country safe, we also can't afford to have a President who's in the pocket of the gun lobby.
I'm not here to repeal the 2nd Amendment.
I'm not here to take away your guns.
I just don't want you to be shot by someone who shouldn't have a gun in the first place.
We should be working with responsible gun owners to pass common-sense reforms and keep guns out of the hands of criminals, terrorists and all others who would do us harm.
For decades, people have said this issue was too hard to solve and the politics were too hot to touch.
But I ask you: how can we just stand by and do nothing?
You heard, you saw, family members of people killed by gun violence.
You heard, you saw, family members of police officers killed in the line of duty because they were outgunned by criminals.
I refuse to believe we can't find common ground here.
We have to heal the divides in our country.
Not just on guns. But on race. Immigration. And more.
That starts with listening to each other. Hearing each other. Trying, as best we can, to walk in each other's shoes.
So let's put ourselves in the shoes of young black and Latino men and women who face the effects of systemic racism, and are made to feel like their lives are disposable.
Let's put ourselves in the shoes of police officers, kissing their kids and spouses goodbye every day and heading off to do a dangerous and necessary job.
We will reform our criminal justice system from end-to-end, and rebuild trust between law enforcement and the communities they serve.
We will defend all our rights – civil rights, human rights and voting rights, women's rights and workers' rights, LGBT rights and the rights of people with disabilities!
And we will stand up against mean and divisive rhetoric wherever it comes from.
For the past year, many people made the mistake of laughing off Donald Trump's comments – excusing him as an entertainer just putting on a show.
They think he couldn't possibly mean all the horrible things he says – like when he called women "pigs." Or said that an American judge couldn't be fair because of his Mexican heritage. Or when he mocks and mimics a reporter with a disability.
Or insults prisoners of war like John McCain –a true hero and patriot who deserves our respect.
At first, I admit, I couldn't believe he meant it either.
It was just too hard to fathom – that someone who wants to lead our nation could say those things. Could be like that.
But here's the sad truth: There is no other Donald Trump.This is it.
And in the end, it comes down to what Donald Trump doesn't get: that America is great – because America is good.
So enough with the bigotry and bombast. Donald Trump's not offering real change.
He's offering empty promises. What are we offering? A bold agenda to improve the lives of people across our country - to keep you safe, to get you good jobs, and to give your kids the opportunities they deserve.
The choice is clear.
Every generation of Americans has come together to make our country freer, fairer, and stronger.
None of us can do it alone.
I know that at a time when so much seems to be pulling us apart, it can be hard to imagine how we'll ever pull together again.
But I'm here to tell you tonight – progress is possible.
I know because I've seen it in the lives of people across America who get knocked down and get right back up.
And I know it from my own life. More than a few times, I've had to pick myself up and get back in the game.
Like so much else, I got this from my mother. She never let me back down from any challenge. When I tried to hide from a neighborhood bully, she literally blocked the door. "Go back out there," she said.
And she was right. You have to stand up to bullies. You have to keep working to make things better, even when the odds are long and the opposition is fierce.
We lost my mother a few years ago. I miss her every day. And I still hear her voice urging me to keep working, keep fighting for right, no matter what.
That's what we need to do together as a nation.
Though "we may not live to see the glory," as the song from the musical Hamilton goes, "let us gladly join the fight."
Let our legacy be about "planting seeds in a garden you never get to see."
That's why we're here, not just in this hall, but on this Earth.
The Founders showed us that.
And so have many others since.
They were drawn together by love of country, and the selfless passion to build something better for all who follow.
That is the story of America. And we begin a new chapter tonight.
Yes, the world is watching what we do.
Yes, America's destiny is ours to choose.
So let's be stronger together.
Looking to the future with courage and confidence.
Building a better tomorrow for our beloved children and our beloved country.
When we do, America will be greater than ever.
Thank you and may God bless the United States of America!


text:
The Erlang Shell
The module shell
implements an Erlang shell.
The shell is a user interface program
for entering expression sequences. The expressions are
evaluated and a value is returned.
A history mechanism saves previous commands and their
values, which can then be incorporated in later commands.
How many commands and results to save can be determined by the user,
either interactively, by calling shell:history/1
, or by setting the application configuration
parameters shell_history_length
for the application STDLIB.
The shell uses a helper process for evaluating commands in
order to protect the history mechanism from exceptions. By
default the evaluator process is killed when an exception
occurs, but by calling shell:catch_exception/1
or by
setting the application configuration parameter
for the application STDLIB
this behavior can be changed. See also the example below.
Variable bindings, and local process dictionary changes which are generated in user expressions are preserved, and the variables can be used in later commands to access their values. The bindings can also be forgotten so the variables can be re-used.
The special shell commands all have the syntax of (local) function calls. They are evaluated as normal function calls and many commands can be used in one expression sequence.
If a command (local function call) is not recognized by the
shell, an attempt is first made to find the function in the
module user_default
, where customized local commands
can be placed. If found, then the function is evaluated.
Otherwise, an attempt is made to evaluate the function in the
module shell_default
. The module
must be explicitly loaded.
The shell also permits the user to start multiple concurrent jobs. A job can be regarded as a set of processes which can communicate with the shell.
There is some support for reading and printing records in
the shell. During compilation record expressions are translated
to tuple expressions. In runtime it is not known whether a tuple
actually represents a record. Nor are the record definitions
used by compiler available at runtime. So in order to read the
record syntax and print tuples as records when possible, record
definitions have to be maintained by the shell itself. The shell
commands for reading, defining, forgetting, listing, and
printing records are described below. Note that each job has its
own set of record definitions. To facilitate matters record
definitions in the modules shell_default
(if loaded) are read each time a new job is
started. For instance, adding the line
to user_default
makes the definition of file_info
readily available in the shell.
The shell runs in two modes:
Normal (possibly restricted)
mode, in which commands can be edited and expressions evaluated.- Job Control Mode
, in which jobs can be started, killed, detached and connected.
Only the currently connected job can 'talk' to the shell.
Shell Commands
Prints the current variable bindings.
Removes all variable bindings.
Removes the binding of variable
. h()
Prints the history list.
Sets the number of previous commands to keep in the history list to
. The previous number is returned. The default number is 20. results(N)
Sets the number of results from previous commands to keep in the history list to
. The previous number is returned. The default number is 20. e(N)
Repeats the command
, ifN
is positive. If it is negative, theN
th previous command is repeated (i.e.,e(-1)
repeats the previous command). v(N)
Uses the return value of the command
in the current command, ifN
is positive. If it is negative, the return value of theN
th previous command is used (i.e.,v(-1)
uses the value of the previous command). help()
. c(File)
. This compiles and loads code inFile
and purges old versions of code, if necessary. Assumes that the file and module names are the same. catch_exception(Bool)
Sets the exception handling of the evaluator process. The previous exception handling is returned. The default (
) is to kill the evaluator process when an exception occurs, which causes the shell to create a new evaluator process. When the exception handling is set totrue
the evaluator process lives on which means that for instance ports and ETS tables as well as processes linked to the evaluator process survive the exception. rd(RecordName, RecordDefinition)
Defines a record in the shell.
is an atom andRecordDefinition
lists the field names and the default values. Usually record definitions are made known to the shell by use of therr
commands described below, but sometimes it is handy to define records on the fly. rf()
Removes all record definitions, then reads record definitions from the modules
(if loaded). Returns the names of the records defined. rf(RecordNames)
Removes selected record definitions.
is a record name or a list of record names. Use'_'
to remove all record definitions. rl()
Prints all record definitions.
Prints selected record definitions.
is a record name or a list of record names. rp(Term)
Prints a term using the record definitions known to the shell. All of
is printed; the depth is not limited as is the case when a return value is printed. rr(Module)
Reads record definitions from a module's BEAM file. If there are no record definitions in the BEAM file, the source file is located and read instead. Returns the names of the record definitions read.
is an atom. rr(Wildcard)
Reads record definitions from files. Existing definitions of any of the record names read are replaced.
is a wildcard string as defined infilelib(3)
but not an atom. rr(WildcardOrModule, RecordNames)
Reads record definitions from files but discards record names not mentioned in
(a record name or a list of record names). rr(WildcardOrModule, RecordNames, Options)
Reads record definitions from files. The compiler options
{i, Dir}
,{d, Macro}
, and{d, Macro, Value}
are recognized and used for setting up the include path and macro definitions. Use'_'
as value ofRecordNames
to read all record definitions.
The following example is a long dialogue with the shell. Commands
starting with >
are inputs to the shell. All other lines
are output from the shell. All commands in this example are explained at the end of the dialogue.
strider 1>erl
Erlang (BEAM) emulator version 5.3 [hipe] [threads:0] Eshell V5.3 (abort with ^G) 1>Str = "abcd".
"abcd" 2>L = length(Str).
4 3>Descriptor = {L, list_to_atom(Str)}.
{4,abcd} 4>L.
4 5>b().
Descriptor = {4,abcd} L = 4 Str = "abcd" ok 6>f(L).
ok 7>b().
Descriptor = {4,abcd} Str = "abcd" ok 8>f(L).
ok 9>{L, _} = Descriptor.
{4,abcd} 10>L.
4 11>{P, Q, R} = Descriptor.
** exception error: no match of right hand side value {4,abcd} 12>P.
* 1: variable 'P' is unbound ** 13>Descriptor.
{4,abcd} 14>{P, Q} = Descriptor.
{4,abcd} 15>P.
4 16>f().
ok 17>put(aa, hello).
undefined 18>get(aa).
hello 19>Y = test1:demo(1).
11 20>get().
[{aa,worked}] 21>put(aa, hello).
worked 22>Z = test1:demo(2).
** exception error: no match of right hand side value 1 in function test1:demo/1 23>Z.
* 1: variable 'Z' is unbound ** 24>get(aa).
hello 25>erase(), put(aa, hello).
undefined 26>spawn(test1, demo, [1]).
<0.57.0> 27>get(aa).
hello 28>io:format("hello hello\n").
hello hello ok 29>e(28).
hello hello ok 30>v(28).
ok 31>c(ex).
{ok,ex} 32>rr(ex).
[rec] 33>rl(rec).
-record(rec,{a,b = val()}). ok 34>#rec{}.
** exception error: undefined shell command val/0 35>#rec{b = 3}.
#rec{a = undefined,b = 3} 36>rp(v(-1)).
#rec{a = undefined,b = 3} ok 37>rd(rec, {f = orddict:new()}).
rec 38>#rec{}.
#rec{f = []} ok 39>rd(rec, {c}), A.
* 1: variable 'A' is unbound ** 40>#rec{}.
#rec{c = undefined} ok 41>test1:loop(0).
Hello Number: 0 Hello Number: 1 Hello Number: 2 Hello Number: 3 User switch command --> i --> c . . . Hello Number: 3374 Hello Number: 3375 Hello Number: 3376 Hello Number: 3377 Hello Number: 3378 ** exception exit: killed 42>E = ets:new(t, []).
17 43>ets:insert({d,1,2}).
** exception error: undefined function ets:insert/1 44>ets:insert(E, {d,1,2}).
** exception error: argument is of wrong type in function ets:insert/2 called as ets:insert(16,{d,1,2}) 45>f(E).
ok 46>catch_exception(true).
false 47>E = ets:new(t, []).
18 48>ets:insert({d,1,2}).
* exception error: undefined function ets:insert/1 49>ets:insert(E, {d,1,2}).
true 50>halt().
strider 2>
Command 1 sets the variable Str
to the string
Command 2 sets L
to the length of the string evaluating
the BIF atom_to_list
Command 3 builds the tuple Descriptor
Command 4 prints the value of the variable L
Command 5 evaluates the internal shell command b()
, which
is an abbreviation of "bindings". This prints
the current shell variables and their bindings. The ok
the end is the return value of the b()
Command 6 f(L)
evaluates the internal shell command
(abbreviation of "forget"). The value of the variable
is removed.
Command 7 prints the new bindings.
Command 8 has no effect since L
has no value.
Command 9 performs a pattern matching operation on
, binding a new value to L
Command 10 prints the current value of L
Command 11 tries to match {P, Q, R}
which is {4, abc}
. The match fails and
none of the new variables become bound. The printout starting
with "** exception error:
" is not the value of the
expression (the expression had no value because its evaluation
failed), but rather a warning printed by the system to inform
the user that an error has occurred. The values of the other
variables (L
, Str
, etc.) are unchanged.
Commands 12 and 13 show that P
is unbound because the
previous command failed, and that Descriptor
has not
Commands 14 and 15 show a correct match where P
are bound.
Command 16 clears all bindings.
The next few commands assume that test1:demo(X)
defined in the following way:
demo(X) -> put(aa, worked), X = 1, X + 10.
Commands 17 and 18 set and inspect the value of the item
in the process dictionary.
Command 19 evaluates test1:demo(1)
. The evaluation
succeeds and the changes made in the process dictionary become
visible to the shell. The new value of the dictionary item
can be seen in command 20.
Commands 21 and 22 change the value of the dictionary item
to hello
and call test1:demo(2)
. Evaluation
fails and the changes made to the dictionary in
, before the error occurred, are discarded.
Commands 23 and 24 show that Z
was not bound and that the
dictionary item aa
has retained its original value.
Commands 25, 26 and 27 show the effect of evaluating
in the background. In this case, the
expression is evaluated in a newly spawned process. Any
changes made in the process dictionary are local to the newly
spawned process and therefore not visible to the shell.
Commands 28, 29 and 30 use the history facilities of the shell.
Command 29 is e(28)
. This re-evaluates command
28. Command 30 is v(28)
. This uses the value (result) of
command 28. In the cases of a pure function (a function
with no side effects), the result is the same. For a function
with side effects, the result can be different.
The next few commands show some record manipulation. It is
assumed that ex.erl
defines a record like this:
-record(rec, {a, b = val()}). val() -> 3.
Commands 31 and 32 compiles the file ex.erl
and reads
the record definitions in ex.beam
. If the compiler did not
output any record definitions on the BEAM file, rr(ex)
tries to read record definitions from the source file instead.
Command 33 prints the definition of the record named
Command 34 tries to create a rec
record, but fails
since the function val/0
is undefined. Command 35 shows
the workaround: explicitly assign values to record fields that
cannot otherwise be initialized.
Command 36 prints the newly created record using record definitions maintained by the shell.
Command 37 defines a record directly in the shell. The
definition replaces the one read from the file ex.beam
Command 38 creates a record using the new definition, and prints the result.
Command 39 and 40 show that record definitions are updated
as side effects. The evaluation of the command fails but
the definition of rec
has been carried out.
For the next command, it is assumed that test1:loop(N)
defined in the following way:
loop(N) -> io:format("Hello Number: ~w~n", [N]), loop(N+1).
Command 41 evaluates test1:loop(0)
, which puts the
system into an infinite loop. At this point the user types
Control G
, which suspends output from the current process,
which is stuck in a loop, and activates JCL
mode. In JCL
mode the user can start and stop jobs.
In this particular case, the i
command ("interrupt") is
used to terminate the looping program, and the c
is used to connect to the shell again. Since the process was
running in the background before we killed it, there will be
more printouts before the "** exception exit: killed
message is shown.
Command 42 creates an ETS table.
Command 43 tries to insert a tuple into the ETS table but the first argument (the table) is missing. The exception kills the evaluator process.
Command 44 corrects the mistake, but the ETS table has been destroyed since it was owned by the killed evaluator process.
Command 46 sets the exception handling of the evaluator process
to true
. The exception handling can also be set when
starting Erlang, like this: erl -stdlib shell_catch_exception
Command 48 makes the same mistake as in command 43, but this time the evaluator process lives on. The single star at the beginning of the printout signals that the exception has been caught.
Command 49 successfully inserts the tuple into the ETS table.
The halt()
command exits the Erlang runtime system.
JCL Mode
When the shell starts, it starts a single evaluator
process. This process, together with any local processes which
it spawns, is referred to as a job
. Only the current job,
which is said to be connected
, can perform operations
with standard IO. All other jobs, which are said to be detached
, are
if they attempt to use standard IO.
All jobs which do not use standard IO run in the normal way.
The shell escape key ^G
(Control G) detaches the current job
and activates JCL
mode. The JCL
mode prompt is "-->"
. If "?"
is entered at the prompt, the following help message is
--> ? c [nn] - connect to job i [nn] - interrupt job k [nn] - kill job j - list all jobs s [shell] - start local shell r [node [shell]] - start remote shell q - quit erlang ? | h - this message
The JCL
commands have the following meaning:
c [nn]
Connects to job number
or the current job. The standard shell is resumed. Operations which use standard IO by the current job will be interleaved with user inputs to the shell. i [nn]
Stops the current evaluator process for job number
or the current job, but does not kill the shell process. Accordingly, any variable bindings and the process dictionary will be preserved and the job can be connected again. This command can be used to interrupt an endless loop. k [nn]
Kills job number
or the current job. All spawned processes in the job are killed, provided they have not evaluated thegroup_leader/1
BIF and are located on the local machine. Processes spawned on remote nodes will not be killed. j
Lists all jobs. A list of all known jobs is printed. The current job name is prefixed with '*'.
Starts a new job. This will be assigned the new index
which can be used in references. s [shell]
Starts a new job. This will be assigned the new index
which can be used in references. If the optional argumentshell
is given, it is assumed to be a module that implements an alternative shell. r [node]
Starts a remote job on
. This is used in distributed Erlang to allow a shell running on one node to control a number of applications running on a network of nodes. If the optional argumentshell
is given, it is assumed to be a module that implements an alternative shell. q
Quits Erlang. Note that this option is disabled if Erlang is started with the ignore break,
, system flag (which may be useful e.g. when running a restricted shell, see below). ?
Displays this message.
It is possible to alter the behavior of shell escape by means
of the STDLIB application variable shell_esc
. The value of
the variable can be either jcl
(erl -stdlib shell_esc jcl
or abort
(erl -stdlib shell_esc abort
). The
first option sets ^G to activate JCL
mode (which is also
default behavior). The latter sets ^G to terminate the current
shell and start a new one. JCL
mode cannot be invoked when
is set to abort
If you want an Erlang node to have a remote job active from the start
(rather than the default local job), you start Erlang with the
flag. Example: erl -sname this_node -remsh other_node@other_host
Restricted Shell
The shell may be started in a
restricted mode. In this mode, the shell evaluates a function call
only if allowed. This feature makes it possible to, for example,
prevent a user from accidentally calling a function from the
prompt that could harm a running system (useful in combination
with the the system flag +Bi
When the restricted shell evaluates an expression and
encounters a function call or an operator application,
it calls a callback function (with
information about the function call in question). This callback
function returns true
to let the shell go ahead with the
evaluation, or false
to abort it. There are two possible
callback functions for the user to implement:
local_allowed(Func, ArgList, State) -> {true,NewState} | {false,NewState}
to determine if the call to the local function Func
with arguments ArgList
should be allowed.
non_local_allowed(FuncSpec, ArgList, State) -> {true,NewState} | {false,NewState} | {{redirect,NewFuncSpec,NewArgList},NewState}
to determine if the call to non-local function
or a fun) with arguments
should be allowed. The return value
can be used to let
the shell evaluate some other function than the one specified by
and ArgList
These callback functions are in fact called from local and
non-local evaluation function handlers, described in the
manual page. (Arguments in ArgList
are evaluated before the
callback functions are called.)
The State
argument is a tuple
. The return value NewState
has the same form. This may be used to carry a state between calls
to the callback functions. Data saved in ShellState
through an entire shell session. Data saved in ExprState
lives only through the evaluation of the current expression.
There are two ways to start a restricted shell session:
- Use the STDLIB application variable
and specify, as its value, the name of the callback module. Example (with callback functions implemented in callback_mod.erl):$ erl -stdlib restricted_shell callback_mod
- From a normal shell session, call function
. This exits the current evaluator and starts a new one in restricted mode.
- When restricted shell mode is activated or deactivated, new jobs started on the node will run in restricted or normal mode respectively.
- If restricted mode has been enabled on a particular node, remote shells connecting to this node will also run in restricted mode.
- The callback functions cannot be used to allow or disallow execution of functions called from compiled code (only functions called from expressions entered at the shell prompt).
Errors when loading the callback module is handled in different ways depending on how the restricted shell is activated:
- If the restricted shell is activated by setting the kernel
variable during emulator startup and the callback module cannot be
loaded, a default restricted shell allowing only the commands
is used as fallback. - If the restricted shell is activated using
and the callback module cannot be loaded, an error report is sent to the error logger and the call returns{error,Reason}
The default shell prompt function displays the name of the node
(if the node can be part of a distributed system) and the
current command number. The user can customize the prompt
function by calling
or by setting the application
configuration parameter shell_prompt_func
for the
application STDLIB.
A customized prompt function is stated as a tuple
{Mod, Func}
. The function is called as
, where L
is a list of key-value pairs
created by the shell. Currently there is only one pair:
{history, N}
, where N is the current command number. The
function should return a list of characters or an atom. This
constraint is due to the Erlang I/O-protocol. Unicode characters
beyond codepoint 255 are allowed in the list. Note
that in restricted mode the call Mod:Func(L)
must be
allowed or the default shell prompt function will be called.
history(N) -> integer()
N = integer()
Sets the number of previous commands to keep in the
history list to N
. The previous number is returned.
The default number is 20.
results(N) -> integer()
N = integer()
Sets the number of results from previous commands to keep in
the history list to N
. The previous number is returned.
The default number is 20.
catch_exception(Bool) -> Bool
Bool = bool()
Sets the exception handling of the evaluator process. The
previous exception handling is returned. The default
) is to kill the evaluator process when an
exception occurs, which causes the shell to create a new
evaluator process. When the exception handling is set to
the evaluator process lives on which means that
for instance ports and ETS tables as well as processes
linked to the evaluator process survive the exception.
prompt_func(PromptFunc) -> prompt_func()
PromptFunc = prompt_func()
prompt_func() = default | {Mod, Func}
Mod = Func = atom()
Sets the shell prompt function to PromptFunc
. The
previous prompt function is returned.
start_restricted(Module) -> ok | {error, Reason}
Module = atom()
Reason = atom()
Exits a normal shell and starts a restricted
shell. Module
specifies the callback module for the
functions local_allowed/3
and non_local_allowed/3
The function is meant to be called from the shell.
If the callback module cannot be loaded, an error tuple is
returned. The Reason
in the error tuple is the one
returned by the code loader when trying to load the code of the callback
stop_restricted() -> ok
Exits a restricted shell and starts a normal shell. The function is meant to be called from the shell.


text:
Office Hours
Make an Appointment
Patients are seen by appointment – on the same day the appointment is made if possible. To schedule an appointment, please call one of our facilities during regular business hours.
Please call in advance for office visits. Make follow-up appointments as you leave. We make every effort to stay on schedule although emergencies do arise. If we are seriously delayed, we attempt to notify patients beforehand.
New Patients
New patients are asked to arrive 15 minutes early to complete paperwork. You can download, print, and complete the forms prior to your appointment. Please bring the completed forms, a list of all medications you are currently taking, recent copies of x-rays, lab results and your insurance card to your appointment.
We require payment of your co-payment and past-due account balances at the time of service. We accept cash, checks, debit and all major credit cards.
We will submit claims to most major insurance carriers. Please bring your insurance card and I.D. with you to every visit so we can ensure that our records are accurate.
We recommend that you call your insurance company to verify that we participate with your plan.
Please notify us if you have any change in your name, phone number, address, or insurance as soon as it occurs. And please be prepared to present your insurance card at every visit.
Cancellations or Rescheduling
To better serve the needs of all our patients, we ask that you call at least 24 hours in advance to cancel or reschedule appointments. We make every effort to stay on schedule, although emergencies arise.
Refill Requests
We are happy to help with refill requests during regular office hours, so please call any of our facilities to let us know what you need.
After-Hours & Emergencies
If you are experiencing a medical emergency, dial 911. However, if you need after-hours advice for a medical concern, please call any of our facilities and our answering service will assist you.


text:
Store Availability
Enter your Zip Code to view store availability options
It's the silhouette you know and love, now in a kid-friendly mid-cut form. This special-edition colorway of the Air Jordan 1 Mid is perfect for your little one's first day of school.
- Leather, suede, and canvas upper
- Perforated toebox for breathability
- Swoosh overlays at sides
- "Wings" logo stamp at heel
- Traditional lacing system
- Cushioned ankle collar
- Padded tongue with Jumpman branding
- Rubber midsole and outsole
Color Shown: White
Style: #DQ3726-100
Shipping and Returns
Orders may take up to 48 business hours to ship. Once the order is shipped you will be emailed a tracking number. If you notice the tracking status reads "Label Created", that means the shipment has been paid for and it's awaiting the first "in-transit" scan by the carrier. Occasionally, shipping statuses can remain in the "Label Created" stage for 1-2 business days.
DTLR wants you to be fully satisfied with your purchase. You can view our Returns Policy here.


text:
BE N TV sc/scd 300x40x230 Hanviken wh clg
BE N TV sc/scd 300x40x230 Hanviken wh clg
Regular price
Regular price
Sale price
Unit price
Service Includes:
- Assembly of one only IKEA Article No 992.820.72 - BE N TV sc/scd 300x40x230 Hanviken wh clg
The service will be provided as:
- In-Home Service
In-Home Service necessitates:
One Assembly Call Out Fee added to your cart at checkout regardless of the quantity of products you require assembled.
- Call out fee covers the time and expense to travel to your door and to prepare to undertake your service.
- Maximum travel distance of 25km to site is included in the price.
- Any extra travel may incur extra fees, discussed prior to service.
Thank you for using our services.


text:
What's Wrong with Scientology?
Quick Actions You Can Take
Scientology's Lies
Scientology's Crimes
Scientology History
Scientology Worldwide
People - Celebrities, Critics, etc.
Send Me Stuff!
The Human Face of Scientology
If You're A Scientologist
Scientology News<
New and Updated Files<
Recent Pickets of Scientology<
My Scientology Activism<
Recommended Critical Sites<
My Scientology Writings<
Scientology's Own Web Site<
The Scientology-Lies Database<
This site was compiled by Kristi Wachter<. I welcome feedback<, especially information contradicting anything I've stated here. Feel free to contact me at [email protected]<
Scientology falsely claims to have no control over its various front groups.


text:
QuickCheck as a test set generator
Using QuickCheck as a DIY test data generator
Recently, my wife approached me with the following problem: they had to test their re-implementation (in Java) of the part of the huge software system previously written in C++. The original system is poorly documented and only a small part of the sources were available.
Among other things, they had to write a parser for home-brewn DSL designed to describe data structures. The DSL is a mix of ASN.1 and BNF grammars, describes a structure of some data records and simple business rules relevant to processing of said record. The DSL is not Turing-complete, but allows user to define it's own functions, specify math and boolean expression on fields and was designed as "ASN.1 on steroids".
Problem is, that their implementation (in JavaCC) on this DSL parser was based on the single available description of the DSL grammar, which was presumably incomplete. They tested implementation on several examples available, but the question remained how to test the parser on a large subset of data in order to be fairly sure that "everything works"
The fame of Quick Check
My wife observed me during the last (2005) ICFP contest and was amazed at the ease with which our team has tested our protocol parser and printer using Quick Check. So, she asked me whether it is possible to generate pseudo-random test data in the similar manner for use "outside" of Haskell?
"Why not?" I thought. After all, I found it quite easy to generate instances of 'Arbitrary' for quite complex data structures.
Concept of the Variant
The task was formulated as follows:
- The task is to generate test datasets for the external program. Each dataset consists of several files, each containing 1 "record"
- A "record" is essentially a Haskell data type
- We must be able to generate pseudo-random "valid" and "invalid" data, to test that external program consumes all "valid" samples and fails to consume all "invalid" ones. Deviation from this behavior signifies an error in external program.
Lets capture this notion of "valid" and "invalid" data in a type class:
module Variant where
import Control.Monad
import Test.QuickCheck
class Variant a where
valid :: Gen a
invalid :: Gen a
So, in order to make a set of test data of some type, the user must provide means to generate "valid" and "invalid" data of this type.
If we can make a "valid" Foo (for suitable "data Foo = ...") and "invalid" Foo, then we should also be able to make a "random" Foo:
instance Variant a => Arbitrary a where
arbitrary = oneof [valid, invalid]
Thus, taking for example the following definition for our "data-to-test":
data Record = InputRecord Name Number
| OutputRecord Name Number OutputType deriving Show
data Number = Number String deriving Show
data Name = Name String deriving Show
data OutputType = OutputType String deriving Show
we could produce the following instances of the class "Variant":
-- For definition of `neStringOf` see below, for now it is sufficient
-- to say that `neStringOf first next` produces non-empty string whose
-- first character is taken from `first` and all subsequent - from
-- `next`
garbledString = neStringOf ".,_+-" "abc0!@#$%^&*()."
instance Variant Number where
valid = liftM Number $ resize 4 $ neStringOf "123456789" "0123456789"
invalid = liftM Number $ resize 4 $ garbledString
instance Variant Name where
valid = liftM Name $ elements [ "foo", "bar", "baz" ]
invalid = liftM Name garbledString
instance Variant OutputType where
valid = liftM OutputType $ elements [ "Binary", "Ascii" ]
invalid = liftM OutputType garbledString
instance Variant Record where
valid = oneof [ liftM2 InputRecord valid valid
, liftM3 OutputRecord valid valid valid ]
invalid = oneof [ liftM2 InputRecord valid invalid
, liftM2 InputRecord invalid valid
, liftM2 InputRecord invalid invalid
, liftM3 OutputRecord invalid valid valid
, liftM3 OutputRecord valid invalid valid
, liftM3 OutputRecord valid valid invalid
, liftM3 OutputRecord invalid invalid valid
, liftM3 OutputRecord valid invalid invalid
, liftM3 OutputRecord invalid valid invalid
, liftM3 OutputRecord invalid invalid invalid
The careful reader will have already spotted that once we hand-coded the instances of 'Variant' for a few "basic" types (like 'Name', 'Number', 'OutputType' etc), defining instances of Variant for more complex datatypes becomes easy, though quite a tedious job. We call to the rescue a set of simple helpers to facilitate this task
Helper tools
It could easily be seen that we consider an instance of a data type to be "invalid" if at least one of the arguments to the constructor is "invalid", whereas a "valid" instance should have all arguments to data type constructor to be "valid". This calls for some permutations:
proper1 f = liftM f valid
proper2 f = liftM2 f valid valid
proper3 f = liftM3 f valid valid valid
proper4 f = liftM4 f valid valid valid valid
proper5 f = liftM5 f valid valid valid valid valid
bad1 f = liftM f invalid
bad2 f = oneof $ tail [ liftM2 f g1 g2 | g1<-[valid, invalid], g2<-[valid, invalid] ]
bad3 f = oneof $ tail [ liftM3 f g1 g2 g3 | g1<-[valid, invalid], g2<-[valid, invalid], g3<-[valid, invalid] ]
bad4 f = oneof $ tail [ liftM4 f g1 g2 g3 g4 | g1<-[valid, invalid], g2<-[valid, invalid], g3<-[valid, invalid], g4<-[valid, invalid] ]
bad5 f = oneof $ tail [ liftM5 f g1 g2 g3 g4 g5 | g1<-[valid, invalid], g2<-[valid, invalid], g3<-[valid, invalid], g4<-[valid, invalid], g5<-[valid, invalid] ]
With those helper definitions we could rewrite our Record instance as follows:
instance Variant Record where
valid = oneof [ proper2 InputRecord
, proper3 OutputRecord ]
invalid = oneof [ bad2 InputRecord
, bad3 OutputRecord ]
Note the drastic decrease in the size of the declaration!
Oh, almost forgot to include the code for "neStringOf":
neStringOf chars_start chars_rest =
do s <- elements chars_start
r <- listOf' $ elements chars_rest
return (s:r)
listOf' :: Gen a -> Gen [a]
listOf' gen = sized $ \n ->
do k <- choose (0,n)
vectorOf' k gen
vectorOf' :: Int -> Gen a -> Gen [a]
vectorOf' k gen = sequence [ gen | _ <- [1..k] ]
Producing test data
OK, but how to use all those fancy declarations to actually produce some test data?
Let's take a look at the following code:
import Control.Monad
import System.IO
import Test.QuickCheck
data DataDefinition = DataDefinition Name Record
main =
do let num = 200 -- Number of test cases in each dataset.
let config = -- Describe several test datasets for "DataDefinition"
-- by defining how we want each component of DataDefinition
-- for each particular dataset - valid, invalid or random
[ ("All_Valid", "txt", num, (valid, valid ))
, ("Invalid_Name", "txt", num, (invalid, valid ))
, ("Invalid_Record" , "txt" , num, (valid, invalid ))
, ("Random", "txt", num, (arbitrary, arbitrary))
mapM_ create_test_set config
create_test_set (fname, ext, count, gens) =
do test_set <- sample' $ vectorOf count (mkDataDef gens)
zipWithM_ (writeToFile fname ext) [1..] test_set
mkDataDef (gen_name, gen_rec) = liftM2 DataDefinition gen_name gen_rec
writeToFile name_prefix suffix n x =
do h <- openFile (name_prefix ++ "_" ++ pad n ++ "." ++ suffix) WriteMode
hPutStrLn h $ show x
hClose h
where pad n = reverse $ take 4 $ (reverse $ show n) ++ (repeat '0')
You see that we could control size, nature and destination of each test dataset. This approach was taken to produce test datasets for the task I described earlier. The final Haskell module had definitions for 40 Haskell datatypes, and the topmost datatype had a single constructor with 9 fields.
This proved to be A Whole Lot Of Code(tm), and declaration of "instance Variant ..." proved to be a good 30% of total amount. Since most of them were variations of the "oneof [proper Foo, proper2 Bar, proper4 Baz]" theme, I started looking for a way so simplify/automate generation of such instances.
Deriving Variant instances automagically
I took a a post made by Bulat Ziganshin on TemplateHaskell mailing list to show how to derive instances of 'Show' automatically, and hacked it to be able to derive instances of "Variant" in much the same way:
import Language.Haskell.TH
import Language.Haskell.TH.Syntax
data T3 = T3 String
deriveVariant t = do
-- Get list of constructors for type t
TyConI (DataD _ _ _ constructors _) <- reify t
-- Make `valid` or `invalid` clause for one constructor:
-- for "(A x1 x2)" makes "Variant.proper2 A"
let mkClause f (NormalC name fields) =
appE (varE (mkName ("Variant."++f++show(length fields)))) (conE name)
-- Make body for functions `valid` and `invalid`:
-- valid = oneof [ proper2 A | proper1 C]
-- or
-- valid = proper3 B, depending on the number of constructors
validBody <- case constructors of
[c] -> normalB [| $(mkClause "proper" c) |]
cs -> normalB [| oneof $(listE (map (mkClause "proper") cs)) |]
invalidBody <- case constructors of
[c] -> normalB [| $(mkClause "bad" c) |]
cs -> normalB [| oneof $(listE (map (mkClause "bad") cs)) |]
-- Generate template instance declaration and replace type name (T1)
-- and function body (x = "text") with our data
d <- [d| instance Variant T3 where
valid = liftM T3 valid
invalid = liftM T3 invalid
let [InstanceD [] (AppT showt (ConT _T3)) [ ValD validf _valid [], ValD invalidf _invalid [] ]] = d
return [InstanceD [] (AppT showt (ConT t )) [ ValD validf validBody [], ValD invalidf invalidBody [] ]]
-- Usage:
$(deriveVariant ''Record)


text:
Original | After tuning | Difference | |
Power | 177 hp | 212 hp | +35 hp |
Torque | 440 Nm | 502 Nm | +62 Nm |
View the power and torque gains from our tuning files we developed for your Toyota Hilux 2020 diesel 2.8 D-4D 177HP.
The power and torque figures you see are just a generalized indication of the power gains that can be safely achieved through the use of our ECU tuning files. The actual results vary slightly, since no engine is the same as another one.
Our Blog section is full of examples of vehicles that we tuned for even more power than shown here without reducing the safety of the vehicle.
If you need further information, or you have more specific desires, feel free to contact us and see what we can do for you. And if you are a tuner and you wish to enjoy our unmatched quality and offer it to your customers, feel free to register on our tuners portal and upgrade the services you offer.